summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitmodules2
-rw-r--r--app/build.gradle38
-rw-r--r--app/src/androidTest/java/se/leap/bitmaskclient/test/BaseTestDashboardFragment.java2
-rw-r--r--app/src/androidTest/java/se/leap/bitmaskclient/test/UserStatusTestController.java2
-rw-r--r--app/src/androidTest/java/se/leap/bitmaskclient/test/VpnTestController.java23
-rw-r--r--app/src/insecure/java/se/leap/bitmaskclient/ProviderAPI.java2
-rw-r--r--app/src/main/AndroidManifest.xml6
-rw-r--r--app/src/main/aidl/de/blinkt/openvpn/api/APIVpnProfile.aidl3
-rw-r--r--app/src/main/aidl/de/blinkt/openvpn/api/IOpenVPNAPIService.aidl66
-rw-r--r--app/src/main/aidl/de/blinkt/openvpn/api/IOpenVPNStatusCallback.aidl13
-rw-r--r--app/src/main/aidl/de/blinkt/openvpn/core/ConnectionStatus.aidl3
-rw-r--r--app/src/main/aidl/de/blinkt/openvpn/core/IOpenVPNServiceInternal.aidl23
-rw-r--r--app/src/main/aidl/de/blinkt/openvpn/core/IServiceStatus.aidl36
-rw-r--r--app/src/main/aidl/de/blinkt/openvpn/core/IStatusCallbacks.aidl24
-rw-r--r--app/src/main/aidl/de/blinkt/openvpn/core/LogItem.aidl3
-rw-r--r--app/src/main/aidl/de/blinkt/openvpn/core/TrafficHistory.aidl4
-rw-r--r--app/src/main/java/de/blinkt/openvpn/LaunchVPN.java75
-rw-r--r--app/src/main/java/de/blinkt/openvpn/VpnProfile.java150
-rw-r--r--app/src/main/java/de/blinkt/openvpn/activities/DisconnectVPN.java52
-rw-r--r--app/src/main/java/de/blinkt/openvpn/api/APIVpnProfile.java60
-rw-r--r--app/src/main/java/de/blinkt/openvpn/core/CIDRIP.java4
-rw-r--r--app/src/main/java/de/blinkt/openvpn/core/ConfigParser.java89
-rw-r--r--app/src/main/java/de/blinkt/openvpn/core/Connection.java23
-rw-r--r--app/src/main/java/de/blinkt/openvpn/core/ConnectionStatus.java47
-rw-r--r--app/src/main/java/de/blinkt/openvpn/core/DeviceStateReceiver.java17
-rw-r--r--app/src/main/java/de/blinkt/openvpn/core/ICSOpenVPNApplication.java61
-rw-r--r--app/src/main/java/de/blinkt/openvpn/core/LogFileHandler.java181
-rw-r--r--app/src/main/java/de/blinkt/openvpn/core/LogItem.java6
-rw-r--r--app/src/main/java/de/blinkt/openvpn/core/NetworkSpace.java94
-rw-r--r--app/src/main/java/de/blinkt/openvpn/core/OpenVPNManagement.java2
-rw-r--r--app/src/main/java/de/blinkt/openvpn/core/OpenVPNService.java305
-rw-r--r--app/src/main/java/de/blinkt/openvpn/core/OpenVPNStatusService.java232
-rw-r--r--app/src/main/java/de/blinkt/openvpn/core/OpenVPNThread.java32
-rw-r--r--app/src/main/java/de/blinkt/openvpn/core/OpenVpnManagementThread.java72
-rw-r--r--app/src/main/java/de/blinkt/openvpn/core/PasswordCache.java61
-rw-r--r--app/src/main/java/de/blinkt/openvpn/core/Preferences.java31
-rw-r--r--app/src/main/java/de/blinkt/openvpn/core/ProfileManager.java114
-rw-r--r--app/src/main/java/de/blinkt/openvpn/core/StatusListener.java109
-rw-r--r--app/src/main/java/de/blinkt/openvpn/core/TrafficHistory.java243
-rw-r--r--app/src/main/java/de/blinkt/openvpn/core/VPNLaunchHelper.java47
-rw-r--r--app/src/main/java/de/blinkt/openvpn/core/VpnStatus.java328
-rw-r--r--app/src/main/java/de/blinkt/openvpn/core/X509Utils.java9
-rw-r--r--app/src/main/java/de/blinkt/openvpn/fragments/LogFragment.java92
-rw-r--r--app/src/main/java/se/leap/bitmaskclient/VpnFragment.java6
-rw-r--r--app/src/main/java/se/leap/bitmaskclient/eip/EIP.java2
-rw-r--r--app/src/main/java/se/leap/bitmaskclient/eip/EipStatus.java24
-rw-r--r--app/src/main/res/layout-xlarge/eip_service_fragment.xml7
-rw-r--r--app/src/main/res/layout/eip_service_fragment.xml4
-rw-r--r--app/src/main/res/layout/vpnstatus.xml3
-rwxr-xr-xapp/src/main/res/values-ca/plurals-icsopenvpn.xml3
-rwxr-xr-xapp/src/main/res/values-ca/strings-icsopenvpn.xml3
-rwxr-xr-xapp/src/main/res/values-cs/plurals-icsopenvpn.xml3
-rwxr-xr-xapp/src/main/res/values-cs/strings-icsopenvpn.xml6
-rwxr-xr-xapp/src/main/res/values-de/plurals-icsopenvpn.xml20
-rwxr-xr-xapp/src/main/res/values-de/strings-icsopenvpn.xml63
-rwxr-xr-xapp/src/main/res/values-es/plurals-icsopenvpn.xml20
-rwxr-xr-xapp/src/main/res/values-es/strings-icsopenvpn.xml35
-rwxr-xr-xapp/src/main/res/values-et/plurals-icsopenvpn.xml20
-rwxr-xr-xapp/src/main/res/values-et/strings-icsopenvpn.xml41
-rwxr-xr-xapp/src/main/res/values-fr/plurals-icsopenvpn.xml20
-rwxr-xr-xapp/src/main/res/values-fr/strings-icsopenvpn.xml343
-rwxr-xr-xapp/src/main/res/values-hu/plurals-icsopenvpn.xml20
-rwxr-xr-xapp/src/main/res/values-hu/strings-icsopenvpn.xml192
-rwxr-xr-xapp/src/main/res/values-in/plurals-icsopenvpn.xml10
-rwxr-xr-xapp/src/main/res/values-in/strings-icsopenvpn.xml17
-rwxr-xr-xapp/src/main/res/values-it/plurals-icsopenvpn.xml3
-rwxr-xr-xapp/src/main/res/values-it/strings-icsopenvpn.xml6
-rwxr-xr-xapp/src/main/res/values-ja/plurals-icsopenvpn.xml16
-rwxr-xr-xapp/src/main/res/values-ja/strings-icsopenvpn.xml191
-rwxr-xr-xapp/src/main/res/values-ko/plurals-icsopenvpn.xml3
-rwxr-xr-xapp/src/main/res/values-ko/strings-icsopenvpn.xml9
-rwxr-xr-xapp/src/main/res/values-nl/plurals-icsopenvpn.xml20
-rwxr-xr-xapp/src/main/res/values-nl/strings-icsopenvpn.xml113
-rwxr-xr-xapp/src/main/res/values-no/plurals-icsopenvpn.xml20
-rwxr-xr-xapp/src/main/res/values-no/strings-icsopenvpn.xml80
-rw-r--r--app/src/main/res/values-no/strings.xml2
-rwxr-xr-xapp/src/main/res/values-pl/plurals-icsopenvpn.xml3
-rwxr-xr-xapp/src/main/res/values-pl/strings-icsopenvpn.xml52
-rwxr-xr-xapp/src/main/res/values-pt/plurals-icsopenvpn.xml3
-rwxr-xr-xapp/src/main/res/values-pt/strings-icsopenvpn.xml32
-rwxr-xr-xapp/src/main/res/values-ro/plurals-icsopenvpn.xml24
-rwxr-xr-xapp/src/main/res/values-ro/strings-icsopenvpn.xml182
-rwxr-xr-xapp/src/main/res/values-ru/plurals-icsopenvpn.xml24
-rwxr-xr-xapp/src/main/res/values-ru/strings-icsopenvpn.xml246
-rwxr-xr-xapp/src/main/res/values-sl/plurals-icsopenvpn.xml28
-rwxr-xr-xapp/src/main/res/values-sl/strings-icsopenvpn.xml53
-rwxr-xr-xapp/src/main/res/values-sv/plurals-icsopenvpn.xml20
-rwxr-xr-xapp/src/main/res/values-sv/strings-icsopenvpn.xml136
-rwxr-xr-xapp/src/main/res/values-tr/plurals-icsopenvpn.xml20
-rwxr-xr-xapp/src/main/res/values-tr/strings-icsopenvpn.xml63
-rwxr-xr-xapp/src/main/res/values-uk/plurals-icsopenvpn.xml3
-rwxr-xr-xapp/src/main/res/values-uk/strings-icsopenvpn.xml43
-rw-r--r--app/src/main/res/values-v21/refs.xml28
-rwxr-xr-xapp/src/main/res/values-vi/plurals-icsopenvpn.xml16
-rwxr-xr-xapp/src/main/res/values-vi/strings-icsopenvpn.xml42
-rwxr-xr-xapp/src/main/res/values-zh-rCN/plurals-icsopenvpn.xml3
-rwxr-xr-xapp/src/main/res/values-zh-rCN/strings-icsopenvpn.xml195
-rwxr-xr-xapp/src/main/res/values-zh-rTW/plurals-icsopenvpn.xml3
-rwxr-xr-xapp/src/main/res/values-zh-rTW/strings-icsopenvpn.xml371
-rw-r--r--app/src/main/res/values/colours.xml3
-rw-r--r--app/src/main/res/values/plurals-icsopenvpn.xml19
-rw-r--r--app/src/main/res/values/refs.xml29
-rwxr-xr-xapp/src/main/res/values/strings-icsopenvpn.xml65
-rw-r--r--app/src/main/res/values/untranslatable.xml3
-rw-r--r--app/src/ovpn3/java/de/blinkt/openvpn/core/OpenVPNThreadv3.java98
-rw-r--r--app/src/production/java/se/leap/bitmaskclient/ProviderAPI.java78
-rw-r--r--app/src/test/java/de/blinkt/openvpn/core/TestConfigParser.java37
-rw-r--r--app/src/test/java/de/blinkt/openvpn/core/TestIpParser.java38
-rw-r--r--app/src/test/java/de/blinkt/openvpn/core/TestLogFileHandler.java257
m---------ics-openvpn0
110 files changed, 4626 insertions, 1702 deletions
diff --git a/.gitmodules b/.gitmodules
index 7c73874b..6ba5606b 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -1,4 +1,4 @@
[submodule "ics-openvpn"]
path = ics-openvpn
branch = bitmask
- url = https://github.com/parmegv/ics-openvpn.git
+ url = https://leap.se/git/ics_openvpn.git
diff --git a/app/build.gradle b/app/build.gradle
index b6bb39ff..97ce9c35 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -1,8 +1,8 @@
apply plugin: 'com.android.application'
android {
- compileSdkVersion 23
- buildToolsVersion '25.0.2'
+ compileSdkVersion 26
+ buildToolsVersion '26.0.0'
;
signingConfigs {
release {
@@ -56,7 +56,8 @@ dependencies {
compile 'com.google.code.gson:gson:2.4'
compile 'org.thoughtcrime.ssl.pinning:AndroidPinning:1.0.0'
compile 'mbanje.kurt:fabbutton:1.1.4'
- compile 'com.android.support:support-annotations:23.2.1'
+ compile 'com.android.support:support-annotations:25.3.1'
+ compile 'com.android.support:support-v4:26.0.0-alpha1'
}
def processFileInplace(file, Closure processText) {
@@ -84,6 +85,9 @@ task copyIcsOpenVPNClasses( type: Copy ) {
include '**/logmenu.xml'
include '**/core/**.java'
include '**/activities/BaseActivity.java'
+ include '**/APIVpnProfile.java'
+ include '**/aidl/**/api/**.aidl'
+ include '**/aidl/**/core/**.aidl'
includeEmptyDirs = false
@@ -111,9 +115,11 @@ task copyIcsOpenVPNXml( type: Copy ) {
include '**/colours.xml'
include '**/logmenu.xml'
include '**/white_rect.xml'
+ include '**/plurals.xml'
includeEmptyDirs = false
rename 'strings.xml', 'strings-icsopenvpn.xml'
+ rename 'plurals.xml', 'plurals-icsopenvpn.xml'
filter {
line -> line.replaceAll('.*name="app".*', '')
}
@@ -139,17 +145,21 @@ task copyIcsOpenVPNImages( type: Copy ) {
task removeDuplicatedStrings() {
println "removeDuplicatedStrings"
new File('.').eachFileRecurse {
- if(it.name.equals('strings.xml')) {
- def ics_openvpn_file = file(it.absolutePath.replace('strings.xml', 'strings-icsopenvpn.xml'))
- if(ics_openvpn_file.exists()) {
- def ics_openvpn_strings_names = (new XmlParser()).parse(ics_openvpn_file)
- def current_file = it
-
- ics_openvpn_strings_names.string.each {
- processFileInplace(current_file) { text ->
- text.replaceAll('.*name=\"' + it.attribute('name') + '\".*(\n)*.*string>.*\n+', '')
- }
- }
+ if(it.name.equals('strings.xml') || it.name.equals('plurals.xml')) {
+ replaceDuplicatesForSource(it, it.name.substring(0, it.name.lastIndexOf('.')))
+ }
+ }
+}
+
+def replaceDuplicatesForSource(File it, String type) {
+ def ics_openvpn_file = file(it.absolutePath.replace(type+'.xml', type+'-icsopenvpn.xml'))
+ if(ics_openvpn_file.exists()) {
+ def ics_openvpn_strings_names = (new XmlParser()).parse(ics_openvpn_file)
+ def current_file = it
+
+ ics_openvpn_strings_names.string.each {
+ processFileInplace(current_file) { text ->
+ text.replaceAll('.*name=\"' + it.attribute('name') + '\".*(\n)*.*string>.*\n+', '')
}
}
}
diff --git a/app/src/androidTest/java/se/leap/bitmaskclient/test/BaseTestDashboardFragment.java b/app/src/androidTest/java/se/leap/bitmaskclient/test/BaseTestDashboardFragment.java
index 3e572c31..d0b8cf6f 100644
--- a/app/src/androidTest/java/se/leap/bitmaskclient/test/BaseTestDashboardFragment.java
+++ b/app/src/androidTest/java/se/leap/bitmaskclient/test/BaseTestDashboardFragment.java
@@ -54,7 +54,7 @@ public abstract class BaseTestDashboardFragment extends ActivityInstrumentationT
}
private void clickAndWaitForDashboard(String click_text) {
- solo.clickOnText(click_text);
+ solo.clickOnButton(click_text);
assertTrue(solo.waitForActivity(Dashboard.class, 80 * 1000));
}
diff --git a/app/src/androidTest/java/se/leap/bitmaskclient/test/UserStatusTestController.java b/app/src/androidTest/java/se/leap/bitmaskclient/test/UserStatusTestController.java
index 821a23fd..76d14911 100644
--- a/app/src/androidTest/java/se/leap/bitmaskclient/test/UserStatusTestController.java
+++ b/app/src/androidTest/java/se/leap/bitmaskclient/test/UserStatusTestController.java
@@ -30,7 +30,7 @@ public class UserStatusTestController {
void logIn(String username, String password, boolean expectSuccess) {
solo.enterText(0, username);
solo.enterText(1, password);
- solo.clickOnText(solo.getString(R.string.login_button));
+ solo.clickOnButton(solo.getString(R.string.login_button));
assertTrue(solo.waitForDialogToClose());
if (expectSuccess) {
diff --git a/app/src/androidTest/java/se/leap/bitmaskclient/test/VpnTestController.java b/app/src/androidTest/java/se/leap/bitmaskclient/test/VpnTestController.java
index b0996032..d339ab26 100644
--- a/app/src/androidTest/java/se/leap/bitmaskclient/test/VpnTestController.java
+++ b/app/src/androidTest/java/se/leap/bitmaskclient/test/VpnTestController.java
@@ -9,6 +9,7 @@ import com.robotium.solo.Solo;
import de.blinkt.openvpn.activities.DisconnectVPN;
import mbanje.kurt.fabbutton.FabButton;
import mbanje.kurt.fabbutton.ProgressRingView;
+import se.leap.bitmaskclient.Dashboard;
import se.leap.bitmaskclient.R;
import static junit.framework.Assert.assertTrue;
@@ -48,7 +49,9 @@ public class VpnTestController {
}
protected FabButton getVpnWholeIcon() {
- View view = solo.getView(R.id.vpn_Status_Image);
+ assertTrue(solo.waitForActivity(Dashboard.class, 5 * 1000));
+
+ View view = solo.getView(R.id.vpn_status_image);
if (view != null)
return (FabButton) view;
else
@@ -92,9 +95,9 @@ public class VpnTestController {
okToBrowserWarning();
sayOkToDisconnect();
- int max_seconds_until_connected = 1;
+ int max_seconds_until_connected = 120;
- Condition condition = new Condition() {
+ Condition condition = new Condition() {
@Override
public boolean isSatisfied() {
return iconShowsDisconnected();
@@ -107,17 +110,25 @@ public class VpnTestController {
private void okToBrowserWarning() {
assertTrue(solo.waitForDialogToOpen());
clickYes();
+ solo.waitForDialogToClose();
}
private void clickYes() {
String yes = solo.getString(android.R.string.yes);
- solo.clickOnText(yes);
+ solo.clickOnButton(yes);
+ }
+
+ private void clickDisconnect() {
+ String disconnect = solo.getString(R.string.cancel_connection);
+ solo.clickOnButton(disconnect);
}
private void sayOkToDisconnect() throws IllegalStateException {
boolean disconnect_vpn_appeared = solo.waitForActivity(DisconnectVPN.class);
- if(disconnect_vpn_appeared)
- clickYes();
+ if(disconnect_vpn_appeared){
+ clickDisconnect();
+ solo.waitForDialogToClose();
+ }
else throw new IllegalStateException();
}
diff --git a/app/src/insecure/java/se/leap/bitmaskclient/ProviderAPI.java b/app/src/insecure/java/se/leap/bitmaskclient/ProviderAPI.java
index df827242..a1b1b383 100644
--- a/app/src/insecure/java/se/leap/bitmaskclient/ProviderAPI.java
+++ b/app/src/insecure/java/se/leap/bitmaskclient/ProviderAPI.java
@@ -20,7 +20,7 @@ import android.app.*;
import android.content.*;
import android.content.res.*;
import android.os.*;
-import android.util.*;
+import android.util.Base64;
import org.json.*;
import org.thoughtcrime.ssl.pinning.util.*;
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 7e0c9c0b..025c98f0 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -28,7 +28,7 @@
<uses-sdk
android:minSdkVersion="14"
- android:targetSdkVersion="24"/>
+ android:targetSdkVersion="26"/>
<application
android:allowBackup="true"
@@ -84,7 +84,9 @@
<activity
android:name="se.leap.bitmaskclient.Dashboard"
android:label="@string/title_activity_dashboard"
- android:uiOptions="splitActionBarWhenNarrow" >
+ android:uiOptions="splitActionBarWhenNarrow"
+ android:launchMode="singleTask"
+ >
<intent-filter android:label="@string/app_name">
<action android:name="android.intent.action.MAIN" />
diff --git a/app/src/main/aidl/de/blinkt/openvpn/api/APIVpnProfile.aidl b/app/src/main/aidl/de/blinkt/openvpn/api/APIVpnProfile.aidl
new file mode 100644
index 00000000..f6799659
--- /dev/null
+++ b/app/src/main/aidl/de/blinkt/openvpn/api/APIVpnProfile.aidl
@@ -0,0 +1,3 @@
+package de.blinkt.openvpn.api;
+
+parcelable APIVpnProfile;
diff --git a/app/src/main/aidl/de/blinkt/openvpn/api/IOpenVPNAPIService.aidl b/app/src/main/aidl/de/blinkt/openvpn/api/IOpenVPNAPIService.aidl
new file mode 100644
index 00000000..75d0c329
--- /dev/null
+++ b/app/src/main/aidl/de/blinkt/openvpn/api/IOpenVPNAPIService.aidl
@@ -0,0 +1,66 @@
+// IOpenVPNAPIService.aidl
+package de.blinkt.openvpn.api;
+
+import de.blinkt.openvpn.api.APIVpnProfile;
+import de.blinkt.openvpn.api.IOpenVPNStatusCallback;
+
+import android.content.Intent;
+import android.os.ParcelFileDescriptor;
+
+interface IOpenVPNAPIService {
+ List<APIVpnProfile> getProfiles();
+
+ void startProfile (String profileUUID);
+
+ /** Use a profile with all certificates etc. embedded,
+ * old version which does not return the UUID of the addded profile, see
+ * below for a version that return the UUID on add */
+ boolean addVPNProfile (String name, String config);
+
+ /** start a profile using a config as inline string. Make sure that all needed data is inlined,
+ * e.g., using <ca>...</ca> or <auth-user-data>...</auth-user-data>
+ * See the OpenVPN manual page for more on inlining files */
+ void startVPN (in String inlineconfig);
+
+ /** This permission framework is used to avoid confused deputy style attack to the VPN
+ * calling this will give null if the app is allowed to use the external API and an Intent
+ * that can be launched to request permissions otherwise */
+ Intent prepare (in String packagename);
+
+ /** Used to trigger to the Android VPN permission dialog (VPNService.prepare()) in advance,
+ * if this return null OpenVPN for ANdroid already has the permissions otherwise you can start the returned Intent
+ * to let OpenVPN for Android request the permission */
+ Intent prepareVPNService ();
+
+ /* Disconnect the VPN */
+ void disconnect();
+
+ /* Pause the VPN (same as using the pause feature in the notifcation bar) */
+ void pause();
+
+ /* Resume the VPN (same as using the pause feature in the notifcation bar) */
+ void resume();
+
+ /**
+ * Registers to receive OpenVPN Status Updates
+ */
+ void registerStatusCallback(in IOpenVPNStatusCallback cb);
+
+ /**
+ * Remove a previously registered callback interface.
+ */
+ void unregisterStatusCallback(in IOpenVPNStatusCallback cb);
+
+ /** Remove a profile by UUID */
+ void removeProfile (in String profileUUID);
+
+ /** Request a socket to be protected as a VPN socket would be. Useful for creating
+ * a helper socket for an app controlling OpenVPN
+ * Before calling this function you should make sure OpenVPN for Android may actually
+ * this function by checking if prepareVPNService returns null; */
+ boolean protectSocket(in ParcelFileDescriptor fd);
+
+
+ /** Use a profile with all certificates etc. embedded */
+ APIVpnProfile addNewVPNProfile (String name, boolean userEditable, String config);
+} \ No newline at end of file
diff --git a/app/src/main/aidl/de/blinkt/openvpn/api/IOpenVPNStatusCallback.aidl b/app/src/main/aidl/de/blinkt/openvpn/api/IOpenVPNStatusCallback.aidl
new file mode 100644
index 00000000..a94b3b44
--- /dev/null
+++ b/app/src/main/aidl/de/blinkt/openvpn/api/IOpenVPNStatusCallback.aidl
@@ -0,0 +1,13 @@
+package de.blinkt.openvpn.api;
+
+/**
+ * Example of a callback interface used by IRemoteService to send
+ * synchronous notifications back to its clients. Note that this is a
+ * one-way interface so the server does not block waiting for the client.
+ */
+interface IOpenVPNStatusCallback {
+ /**
+ * Called when the service has a new status for you.
+ */
+ oneway void newStatus(in String uuid, in String state, in String message, in String level);
+}
diff --git a/app/src/main/aidl/de/blinkt/openvpn/core/ConnectionStatus.aidl b/app/src/main/aidl/de/blinkt/openvpn/core/ConnectionStatus.aidl
new file mode 100644
index 00000000..f37c3101
--- /dev/null
+++ b/app/src/main/aidl/de/blinkt/openvpn/core/ConnectionStatus.aidl
@@ -0,0 +1,3 @@
+package de.blinkt.openvpn.core;
+
+parcelable ConnectionStatus; \ No newline at end of file
diff --git a/app/src/main/aidl/de/blinkt/openvpn/core/IOpenVPNServiceInternal.aidl b/app/src/main/aidl/de/blinkt/openvpn/core/IOpenVPNServiceInternal.aidl
new file mode 100644
index 00000000..3958bcf3
--- /dev/null
+++ b/app/src/main/aidl/de/blinkt/openvpn/core/IOpenVPNServiceInternal.aidl
@@ -0,0 +1,23 @@
+/*
+ * Copyright (c) 2012-2016 Arne Schwabe
+ * Distributed under the GNU GPL v2 with additional terms. For full terms see the file doc/LICENSE.txt
+ */
+
+package de.blinkt.openvpn.core;
+
+/**
+ * Created by arne on 15.11.16.
+ */
+
+interface IOpenVPNServiceInternal {
+
+ boolean protect(int fd);
+
+ void userPause(boolean b);
+
+ /**
+ * @param replaceConnection True if the VPN is connected by a new connection.
+ * @return true if there was a process that has been send a stop signal
+ */
+ boolean stopVPN(boolean replaceConnection);
+}
diff --git a/app/src/main/aidl/de/blinkt/openvpn/core/IServiceStatus.aidl b/app/src/main/aidl/de/blinkt/openvpn/core/IServiceStatus.aidl
new file mode 100644
index 00000000..5a5cbdb5
--- /dev/null
+++ b/app/src/main/aidl/de/blinkt/openvpn/core/IServiceStatus.aidl
@@ -0,0 +1,36 @@
+// StatusIPC.aidl
+package de.blinkt.openvpn.core;
+
+// Declare any non-default types here with import statements
+import de.blinkt.openvpn.core.IStatusCallbacks;
+import android.os.ParcelFileDescriptor;
+import de.blinkt.openvpn.core.TrafficHistory;
+
+
+interface IServiceStatus {
+ /**
+ * Registers to receive OpenVPN Status Updates and gets a
+ * ParcelFileDescript back that contains the log up to that point
+ */
+ ParcelFileDescriptor registerStatusCallback(in IStatusCallbacks cb);
+
+ /**
+ * Remove a previously registered callback interface.
+ */
+ void unregisterStatusCallback(in IStatusCallbacks cb);
+
+ /**
+ * Returns the last connedcted VPN
+ */
+ String getLastConnectedVPN();
+
+ /**
+ * Sets a cached password
+ */
+ void setCachedPassword(in String uuid, int type, String password);
+
+ /**
+ * Gets the traffic history
+ */
+ TrafficHistory getTrafficHistory();
+}
diff --git a/app/src/main/aidl/de/blinkt/openvpn/core/IStatusCallbacks.aidl b/app/src/main/aidl/de/blinkt/openvpn/core/IStatusCallbacks.aidl
new file mode 100644
index 00000000..75860b81
--- /dev/null
+++ b/app/src/main/aidl/de/blinkt/openvpn/core/IStatusCallbacks.aidl
@@ -0,0 +1,24 @@
+/*
+ * Copyright (c) 2012-2016 Arne Schwabe
+ * Distributed under the GNU GPL v2 with additional terms. For full terms see the file doc/LICENSE.txt
+ */
+
+package de.blinkt.openvpn.core;
+
+import de.blinkt.openvpn.core.LogItem;
+import de.blinkt.openvpn.core.ConnectionStatus;
+
+
+
+interface IStatusCallbacks {
+ /**
+ * Called when the service has a new status for you.
+ */
+ oneway void newLogItem(in LogItem item);
+
+ oneway void updateStateString(in String state, in String msg, in int resid, in ConnectionStatus level);
+
+ oneway void updateByteCount(long inBytes, long outBytes);
+
+ oneway void connectedVPN(String uuid);
+}
diff --git a/app/src/main/aidl/de/blinkt/openvpn/core/LogItem.aidl b/app/src/main/aidl/de/blinkt/openvpn/core/LogItem.aidl
new file mode 100644
index 00000000..9a7291af
--- /dev/null
+++ b/app/src/main/aidl/de/blinkt/openvpn/core/LogItem.aidl
@@ -0,0 +1,3 @@
+package de.blinkt.openvpn.core;
+
+parcelable LogItem; \ No newline at end of file
diff --git a/app/src/main/aidl/de/blinkt/openvpn/core/TrafficHistory.aidl b/app/src/main/aidl/de/blinkt/openvpn/core/TrafficHistory.aidl
new file mode 100644
index 00000000..5bd255fc
--- /dev/null
+++ b/app/src/main/aidl/de/blinkt/openvpn/core/TrafficHistory.aidl
@@ -0,0 +1,4 @@
+package de.blinkt.openvpn.core;
+
+
+parcelable TrafficHistory;
diff --git a/app/src/main/java/de/blinkt/openvpn/LaunchVPN.java b/app/src/main/java/de/blinkt/openvpn/LaunchVPN.java
index 16f986ae..0c3f20fb 100644
--- a/app/src/main/java/de/blinkt/openvpn/LaunchVPN.java
+++ b/app/src/main/java/de/blinkt/openvpn/LaunchVPN.java
@@ -7,15 +7,25 @@ package de.blinkt.openvpn;
import se.leap.bitmaskclient.R;
+import se.leap.bitmaskclient.R;
+
+import android.annotation.SuppressLint;
+import android.annotation.TargetApi;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.ActivityNotFoundException;
+import android.content.ComponentName;
+import android.content.Context;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.content.Intent;
+import android.content.ServiceConnection;
import android.content.SharedPreferences;
import android.net.VpnService;
+import android.os.Build;
import android.os.Bundle;
+import android.os.IBinder;
+import android.os.RemoteException;
import android.preference.PreferenceManager;
import android.text.InputType;
import android.text.TextUtils;
@@ -28,10 +38,14 @@ import android.widget.EditText;
import java.io.IOException;
import de.blinkt.openvpn.activities.LogWindow;
+import de.blinkt.openvpn.core.ConnectionStatus;
+import de.blinkt.openvpn.core.IServiceStatus;
+import de.blinkt.openvpn.core.OpenVPNStatusService;
+import de.blinkt.openvpn.core.PasswordCache;
+import de.blinkt.openvpn.core.Preferences;
import de.blinkt.openvpn.core.ProfileManager;
import de.blinkt.openvpn.core.VPNLaunchHelper;
import de.blinkt.openvpn.core.VpnStatus;
-import de.blinkt.openvpn.core.VpnStatus.ConnectionStatus;
/**
* This Activity actually handles two stages of a launcher shortcut's life cycle.
@@ -64,6 +78,7 @@ public class LaunchVPN extends Activity {
public static final String EXTRA_NAME = "de.blinkt.openvpn.shortcutProfileName";
public static final String EXTRA_HIDELOG = "de.blinkt.openvpn.showNoLogWindow";
public static final String CLEARLOG = "clearlogconnect";
+ public static final String EXTRA_TEMP_VPN_PROFILE = "se.leap.bitmask.tempVpnProfile";
private static final int START_VPN_PROFILE = 70;
@@ -92,15 +107,17 @@ public class LaunchVPN extends Activity {
if (Intent.ACTION_MAIN.equals(action)) {
// Check if we need to clear the log
- if (PreferenceManager.getDefaultSharedPreferences(this).getBoolean(CLEARLOG, true))
+ if (Preferences.getDefaultSharedPreferences(this).getBoolean(CLEARLOG, true))
VpnStatus.clearLog();
// we got called to be the starting point, most likely a shortcut
String shortcutUUID = intent.getStringExtra(EXTRA_KEY);
String shortcutName = intent.getStringExtra(EXTRA_NAME);
mhideLog = intent.getBooleanExtra(EXTRA_HIDELOG, false);
+ VpnProfile profileToConnect = (VpnProfile) intent.getExtras().getSerializable(EXTRA_TEMP_VPN_PROFILE);
+ if (profileToConnect == null)
+ profileToConnect = ProfileManager.get(this, shortcutUUID);
- VpnProfile profileToConnect = ProfileManager.get(this, shortcutUUID);
if (shortcutName != null && profileToConnect == null)
profileToConnect = ProfileManager.getInstance(this).getProfileByName(shortcutName);
@@ -118,24 +135,28 @@ public class LaunchVPN extends Activity {
@Override
protected void onActivityResult (int requestCode, int resultCode, Intent data) {
- super.onActivityResult(requestCode, resultCode, data);
+ super.onActivityResult(requestCode, resultCode, data);
- if(requestCode==START_VPN_PROFILE) {
- SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
- boolean showLogWindow = prefs.getBoolean("showlogwindow", true);
+ if(requestCode==START_VPN_PROFILE) {
+ SharedPreferences prefs = Preferences.getDefaultSharedPreferences(this);
+ boolean showLogWindow = prefs.getBoolean("showlogwindow", true);
+
+ if(!mhideLog && showLogWindow)
+ showLogWindow();
+ ProfileManager.updateLRU(this, mSelectedProfile);
+ VPNLaunchHelper.startOpenVpn(mSelectedProfile, getBaseContext());
+ finish();
- if(!mhideLog && showLogWindow)
- showLogWindow();
+ } else if (resultCode == Activity.RESULT_CANCELED) {
+ // User does not want us to start, so we just vanish
+ VpnStatus.updateStateString("USER_VPN_PERMISSION_CANCELLED", "", R.string.state_user_vpn_permission_cancelled,
+ ConnectionStatus.LEVEL_NOTCONNECTED);
- VPNLaunchHelper.startOpenVpn(mSelectedProfile, getBaseContext());
- finish();
- } else if (resultCode == Activity.RESULT_CANCELED) {
- // User does not want us to start, so we just vanish
- VpnStatus.updateStateString("USER_VPN_PERMISSION_CANCELLED", "", R.string.state_user_vpn_permission_cancelled,
- ConnectionStatus.LEVEL_NOTCONNECTED);
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N)
+ VpnStatus.logError(R.string.nought_alwayson_warning);
- finish();
- }
+ finish();
+ }
}
void showLogWindow() {
@@ -158,9 +179,27 @@ public class LaunchVPN extends Activity {
}
});
+ d.setOnCancelListener(new DialogInterface.OnCancelListener() {
+ @Override
+ public void onCancel(DialogInterface dialog) {
+ finish();
+ }
+ });
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1)
+ setOnDismissListener(d);
d.show();
}
+ @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
+ private void setOnDismissListener(AlertDialog.Builder d) {
+ d.setOnDismissListener(new DialogInterface.OnDismissListener() {
+ @Override
+ public void onDismiss(DialogInterface dialog) {
+ finish();
+ }
+ });
+ }
+
void launchVPN() {
int vpnok = mSelectedProfile.checkProfile(this);
if (vpnok != R.string.no_error_found) {
@@ -170,7 +209,7 @@ public class LaunchVPN extends Activity {
Intent intent = VpnService.prepare(this);
// Check if we want to fix /dev/tun
- SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
+ SharedPreferences prefs = Preferences.getDefaultSharedPreferences(this);
boolean usecm9fix = prefs.getBoolean("useCM9Fix", false);
boolean loadTunModule = prefs.getBoolean("loadTunModule", false);
diff --git a/app/src/main/java/de/blinkt/openvpn/VpnProfile.java b/app/src/main/java/de/blinkt/openvpn/VpnProfile.java
index 38d76f68..aa25da48 100644
--- a/app/src/main/java/de/blinkt/openvpn/VpnProfile.java
+++ b/app/src/main/java/de/blinkt/openvpn/VpnProfile.java
@@ -11,7 +11,6 @@ import android.annotation.SuppressLint;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
-import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.os.Build;
@@ -54,6 +53,7 @@ import javax.crypto.NoSuchPaddingException;
import de.blinkt.openvpn.core.Connection;
import de.blinkt.openvpn.core.NativeUtils;
import de.blinkt.openvpn.core.OpenVPNService;
+import de.blinkt.openvpn.core.PasswordCache;
import de.blinkt.openvpn.core.VPNLaunchHelper;
import de.blinkt.openvpn.core.VpnStatus;
import de.blinkt.openvpn.core.X509Utils;
@@ -73,14 +73,10 @@ public class VpnProfile implements Serializable, Cloneable {
private static final long serialVersionUID = 7085688938959334563L;
public static final int MAXLOGLEVEL = 4;
public static final int CURRENT_PROFILE_VERSION = 6;
- public static final int DEFAULT_MSSFIX_SIZE = 1450;
+ public static final int DEFAULT_MSSFIX_SIZE = 1280;
public static String DEFAULT_DNS1 = "8.8.8.8";
public static String DEFAULT_DNS2 = "8.8.4.4";
- public transient String mTransientPW = null;
- public transient String mTransientPCKS12PW = null;
-
-
public static final int TYPE_CERTIFICATES = 0;
public static final int TYPE_PKCS12 = 1;
public static final int TYPE_KEYSTORE = 2;
@@ -94,6 +90,12 @@ public class VpnProfile implements Serializable, Cloneable {
public static final int X509_VERIFY_TLSREMOTE_DN = 2;
public static final int X509_VERIFY_TLSREMOTE_RDN = 3;
public static final int X509_VERIFY_TLSREMOTE_RDN_PREFIX = 4;
+
+
+ public static final int AUTH_RETRY_NONE_FORGET = 0;
+ private static final int AUTH_RETRY_NONE_KEEP = 1;
+ public static final int AUTH_RETRY_NOINTERACT = 2;
+ private static final int AUTH_RETRY_INTERACT = 3;
// variable named wrong and should haven beeen transient
// but needs to keep wrong name to guarante loading of old
// profiles
@@ -137,11 +139,14 @@ public class VpnProfile implements Serializable, Cloneable {
public String mCustomRoutesv6 = "";
public String mKeyPassword = "";
public boolean mPersistTun = false;
- public String mConnectRetryMax = "5";
- public String mConnectRetry = "5";
+ public String mConnectRetryMax = "-1";
+ public String mConnectRetry = "2";
+ public String mConnectRetryMaxTime = "300";
public boolean mUserEditable = true;
public String mAuth = "";
public int mX509AuthType = X509_VERIFY_TLSREMOTE_RDN;
+ public String mx509UsernameField = null;
+
private transient PrivateKey mPrivateKey;
// Public attributes, since I got mad with getter/setter
// set members to default values
@@ -159,15 +164,25 @@ public class VpnProfile implements Serializable, Cloneable {
public String mCrlFilename;
public String mProfileCreator;
+ public int mAuthRetry = AUTH_RETRY_NONE_FORGET;
+ public int mTunMtu;
+
public boolean mPushPeerInfo = false;
public static final boolean mIsOpenVPN22 = false;
+ public int mVersion = 0;
+
+ // timestamp when the profile was last used
+ public long mLastUsed;
+
/* Options no longer used in new profiles */
- public String mServerName = "openvpn.blinkt.de";
+ public String mServerName = "openvpn.example.com";
public String mServerPort = "1194";
public boolean mUseUdp = true;
+
+
public VpnProfile(String name) {
mUuid = UUID.randomUUID();
mName = name;
@@ -175,6 +190,7 @@ public class VpnProfile implements Serializable, Cloneable {
mConnections = new Connection[1];
mConnections[0] = new Connection();
+ mLastUsed = System.currentTimeMillis();
}
public static String openVpnEscape(String unescaped) {
@@ -192,6 +208,17 @@ public class VpnProfile implements Serializable, Cloneable {
return '"' + escapedString + '"';
}
+
+ @Override
+ public boolean equals(Object obj) {
+ if (obj instanceof VpnProfile) {
+ VpnProfile vpnProfile = (VpnProfile) obj;
+ return mUuid.equals(vpnProfile.mUuid);
+ } else {
+ return false;
+ }
+ }
+
public void clearDefaults() {
mServerName = "unknown";
mUsePull = false;
@@ -212,7 +239,7 @@ public class VpnProfile implements Serializable, Cloneable {
}
public String getName() {
- if (mName == null)
+ if (TextUtils.isEmpty(mName))
return "No profile name";
return mName;
}
@@ -274,12 +301,13 @@ public class VpnProfile implements Serializable, Cloneable {
if (!configForOvpn3) {
cfg += String.format("setenv IV_GUI_VER %s \n", openVpnEscape(getVersionEnvString(context)));
- String versionString = String.format("%d %s %s %s %s %s", Build.VERSION.SDK_INT, Build.VERSION.RELEASE,
+ String versionString = String.format(Locale.US, "%d %s %s %s %s %s", Build.VERSION.SDK_INT, Build.VERSION.RELEASE,
NativeUtils.getNativeAPI(), Build.BRAND, Build.BOARD, Build.MODEL);
cfg += String.format("setenv IV_PLAT_VER %s\n", openVpnEscape(versionString));
}
cfg += "machine-readable-output\n";
+ cfg += "allow-recursive-routing\n";
// Users are confused by warnings that are misleading...
cfg += "ifconfig-nowarn\n";
@@ -299,19 +327,25 @@ public class VpnProfile implements Serializable, Cloneable {
cfg += "verb " + MAXLOGLEVEL + "\n";
if (mConnectRetryMax == null) {
- mConnectRetryMax = "5";
+ mConnectRetryMax = "-1";
}
if (!mConnectRetryMax.equals("-1"))
cfg += "connect-retry-max " + mConnectRetryMax + "\n";
- if (mConnectRetry == null)
- mConnectRetry = "5";
+ if (TextUtils.isEmpty(mConnectRetry))
+ mConnectRetry = "2";
+
+ if (TextUtils.isEmpty(mConnectRetryMaxTime))
+ mConnectRetryMaxTime = "300";
- if (!mIsOpenVPN22 || !mUseUdp)
+ if (!mIsOpenVPN22)
+ cfg += "connect-retry " + mConnectRetry + " " + mConnectRetryMaxTime + "\n";
+ else if (mIsOpenVPN22 && mUseUdp)
cfg += "connect-retry " + mConnectRetry + "\n";
+
cfg += "resolv-retry 60\n";
@@ -384,6 +418,12 @@ public class VpnProfile implements Serializable, Cloneable {
cfg += insertFileData("ca", mCaFilename);
}
+ if (isUserPWAuth())
+ {
+ if (mAuthenticationType == AUTH_RETRY_NOINTERACT)
+ cfg += "auth-retry nointeract";
+ }
+
if (!TextUtils.isEmpty(mCrlFilename))
cfg += insertFileData("crl-verify", mCrlFilename);
@@ -392,12 +432,16 @@ public class VpnProfile implements Serializable, Cloneable {
}
if (mUseTLSAuth) {
+ boolean useTlsCrypt = mTLSAuthDirection.equals("tls-crypt");
+
if (mAuthenticationType == TYPE_STATICKEYS)
cfg += insertFileData("secret", mTLSAuthFilename);
+ else if (useTlsCrypt)
+ cfg += insertFileData("tls-crypt", mTLSAuthFilename);
else
cfg += insertFileData("tls-auth", mTLSAuthFilename);
- if (!TextUtils.isEmpty(mTLSAuthDirection)) {
+ if (!TextUtils.isEmpty(mTLSAuthDirection) && !useTlsCrypt) {
cfg += "key-direction ";
cfg += mTLSAuthDirection;
cfg += "\n";
@@ -409,8 +453,12 @@ public class VpnProfile implements Serializable, Cloneable {
if (!TextUtils.isEmpty(mIPv4Address))
cfg += "ifconfig " + cidrToIPAndNetmask(mIPv4Address) + "\n";
- if (!TextUtils.isEmpty(mIPv6Address))
- cfg += "ifconfig-ipv6 " + mIPv6Address + "\n";
+ if (!TextUtils.isEmpty(mIPv6Address)) {
+ // Use our own ip as gateway since we ignore it anyway
+ String fakegw = mIPv6Address.split("/", 2)[0];
+ cfg += "ifconfig-ipv6 " + mIPv6Address + " " + fakegw +"\n";
+ }
+
}
if (mUsePull && mRoutenopull)
@@ -441,22 +489,33 @@ public class VpnProfile implements Serializable, Cloneable {
cfg += routes;
if (mOverrideDNS || !mUsePull) {
- if (!TextUtils.isEmpty(mDNS1))
- cfg += "dhcp-option DNS " + mDNS1 + "\n";
- if (!TextUtils.isEmpty(mDNS2))
- cfg += "dhcp-option DNS " + mDNS2 + "\n";
- if (!TextUtils.isEmpty(mSearchDomain))
+ if (!TextUtils.isEmpty(mDNS1)) {
+ if (mDNS1.contains(":"))
+ cfg += "dhcp-option DNS6 " + mDNS1 + "\n";
+ else
+ cfg += "dhcp-option DNS " + mDNS1 + "\n";
+ } if (!TextUtils.isEmpty(mDNS2)) {
+ if (mDNS2.contains(":"))
+ cfg += "dhcp-option DNS6 " + mDNS2 + "\n";
+ else
+ cfg += "dhcp-option DNS " + mDNS2 + "\n";
+ } if (!TextUtils.isEmpty(mSearchDomain))
cfg += "dhcp-option DOMAIN " + mSearchDomain + "\n";
}
if (mMssFix != 0) {
if (mMssFix != 1450) {
- cfg += String.format("mssfix %d\n", mMssFix, Locale.US);
+ cfg += String.format(Locale.US, "mssfix %d\n", mMssFix);
} else
cfg += "mssfix\n";
}
+ if (mTunMtu >= 48 && mTunMtu != 1500)
+ {
+ cfg+= String.format(Locale.US, "tun-mtu %d\n", mTunMtu);
+ }
+
if (mNobind)
cfg += "nobind\n";
@@ -465,7 +524,7 @@ public class VpnProfile implements Serializable, Cloneable {
if (mAuthenticationType != TYPE_STATICKEYS) {
if (mCheckRemoteCN) {
if (mRemoteCN == null || mRemoteCN.equals(""))
- cfg += "verify-x509-name " + mConnections[0].mServerName + " name\n";
+ cfg += "verify-x509-name " + openVpnEscape(mConnections[0].mServerName) + " name\n";
else
switch (mX509AuthType) {
@@ -488,6 +547,8 @@ public class VpnProfile implements Serializable, Cloneable {
cfg += "verify-x509-name " + openVpnEscape(mRemoteCN) + "\n";
break;
}
+ if (!TextUtils.isEmpty(mx509UsernameField))
+ cfg += "x509-username-field " + openVpnEscape(mx509UsernameField) + "\n";
}
if (mExpectTLSCert)
cfg += "remote-cert-tls server\n";
@@ -659,7 +720,7 @@ public class VpnProfile implements Serializable, Cloneable {
Intent intent = new Intent(context, OpenVPNService.class);
intent.putExtra(prefix + ".profileUUID", mUuid.toString());
-
+ intent.putExtra(prefix + ".profileVersion", mVersion);
return intent;
}
@@ -730,6 +791,10 @@ public class VpnProfile implements Serializable, Cloneable {
}
}
+ public void pwDidFail(Context c) {
+
+ }
+
class NoCertReturnedException extends Exception {
public NoCertReturnedException(String msg) {
@@ -738,6 +803,10 @@ public class VpnProfile implements Serializable, Cloneable {
}
synchronized String[] getKeyStoreCertificates(Context context, int tries) {
+ // Force application context- KeyChain methods will block long enough that by the time they
+ // are finished and try to unbind, the original activity context might have been destroyed.
+ context = context.getApplicationContext();
+
try {
PrivateKey privateKey = KeyChain.getPrivateKey(context, mAlias);
mPrivateKey = privateKey;
@@ -838,8 +907,14 @@ public class VpnProfile implements Serializable, Cloneable {
if (mAuthenticationType == TYPE_KEYSTORE || mAuthenticationType == TYPE_USERPASS_KEYSTORE) {
if (mAlias == null)
return R.string.no_keystore_cert_selected;
+ } else if (mAuthenticationType == TYPE_CERTIFICATES || mAuthenticationType == TYPE_USERPASS_CERTIFICATES){
+ if (TextUtils.isEmpty(mCaFilename))
+ return R.string.no_ca_cert_selected;
}
+ if (mCheckRemoteCN && mX509AuthType==X509_VERIFY_TLSREMOTE)
+ return R.string.deprecated_tls_remote;
+
if (!mUsePull || mAuthenticationType == TYPE_STATICKEYS) {
if (mIPv4Address == null || cidrToIPAndNetmask(mIPv4Address) == null)
return R.string.ipv4_format_error;
@@ -881,10 +956,9 @@ public class VpnProfile implements Serializable, Cloneable {
//! Openvpn asks for a "Private Key", this should be pkcs12 key
//
public String getPasswordPrivateKey() {
- if (mTransientPCKS12PW != null) {
- String pwcopy = mTransientPCKS12PW;
- mTransientPCKS12PW = null;
- return pwcopy;
+ String cachedPw = PasswordCache.getPKCS12orCertificatePassword(mUuid, true);
+ if (cachedPw != null) {
+ return cachedPw;
}
switch (mAuthenticationType) {
case TYPE_PKCS12:
@@ -949,33 +1023,32 @@ public class VpnProfile implements Serializable, Cloneable {
return false;
}
- public int needUserPWInput(boolean ignoreTransient) {
+ public int needUserPWInput(String transientCertOrPkcs12PW, String mTransientAuthPW) {
if ((mAuthenticationType == TYPE_PKCS12 || mAuthenticationType == TYPE_USERPASS_PKCS12) &&
(mPKCS12Password == null || mPKCS12Password.equals(""))) {
- if (ignoreTransient || mTransientPCKS12PW == null)
+ if (transientCertOrPkcs12PW == null)
return R.string.pkcs12_file_encryption_key;
}
if (mAuthenticationType == TYPE_CERTIFICATES || mAuthenticationType == TYPE_USERPASS_CERTIFICATES) {
if (requireTLSKeyPassword() && TextUtils.isEmpty(mKeyPassword))
- if (ignoreTransient || mTransientPCKS12PW == null) {
+ if (transientCertOrPkcs12PW == null) {
return R.string.private_key_password;
}
}
if (isUserPWAuth() &&
(TextUtils.isEmpty(mUsername) ||
- (TextUtils.isEmpty(mPassword) && (mTransientPW == null || ignoreTransient)))) {
+ (TextUtils.isEmpty(mPassword) && mTransientAuthPW == null))) {
return R.string.password;
}
return 0;
}
public String getPasswordAuth() {
- if (mTransientPW != null) {
- String pwcopy = mTransientPW;
- mTransientPW = null;
- return pwcopy;
+ String cachedPw = PasswordCache.getAuthPassword(mUuid, true);
+ if (cachedPw != null) {
+ return cachedPw;
} else {
return mPassword;
}
@@ -1008,7 +1081,6 @@ public class VpnProfile implements Serializable, Cloneable {
try {
-
/* ECB is perfectly fine in this special case, since we are using it for
the public/private part in the TLS exchange
*/
diff --git a/app/src/main/java/de/blinkt/openvpn/activities/DisconnectVPN.java b/app/src/main/java/de/blinkt/openvpn/activities/DisconnectVPN.java
index d25bccad..068821f5 100644
--- a/app/src/main/java/de/blinkt/openvpn/activities/DisconnectVPN.java
+++ b/app/src/main/java/de/blinkt/openvpn/activities/DisconnectVPN.java
@@ -7,33 +7,40 @@ package de.blinkt.openvpn.activities;
import android.app.Activity;
import android.app.AlertDialog;
-import android.content.*;
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.content.ServiceConnection;
import android.os.IBinder;
+import android.os.RemoteException;
+import de.blinkt.openvpn.LaunchVPN;
import se.leap.bitmaskclient.R;
+import de.blinkt.openvpn.core.IOpenVPNServiceInternal;
import de.blinkt.openvpn.core.OpenVPNService;
import de.blinkt.openvpn.core.ProfileManager;
+import de.blinkt.openvpn.core.VpnStatus;
/**
* Created by arne on 13.10.13.
*/
public class DisconnectVPN extends Activity implements DialogInterface.OnClickListener, DialogInterface.OnCancelListener {
- protected OpenVPNService mService;
-
+ private IOpenVPNServiceInternal mService;
private ServiceConnection mConnection = new ServiceConnection() {
+
@Override
public void onServiceConnected(ComponentName className,
IBinder service) {
- // We've bound to LocalService, cast the IBinder and get LocalService instance
- OpenVPNService.LocalBinder binder = (OpenVPNService.LocalBinder) service;
- mService = binder.getService();
+
+ mService = IOpenVPNServiceInternal.Stub.asInterface(service);
}
@Override
public void onServiceDisconnected(ComponentName arg0) {
- mService =null;
+ mService = null;
}
};
@@ -53,24 +60,13 @@ public class DisconnectVPN extends Activity implements DialogInterface.OnClickLi
unbindService(mConnection);
}
- // if (getIntent() !=null && OpenVpnService.DISCONNECT_VPN.equals(getIntent().getAction()))
-
- // setIntent(null);
-
- /*
- @Override
- protected void onNewIntent(Intent intent) {
- super.onNewIntent(intent);
- setIntent(intent);
- }
- */
-
private void showDisconnectDialog() {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle(R.string.title_cancel);
builder.setMessage(R.string.cancel_connection_query);
- builder.setNegativeButton(android.R.string.no, this);
- builder.setPositiveButton(android.R.string.yes,this);
+ builder.setNegativeButton(android.R.string.cancel, this);
+ builder.setPositiveButton(R.string.cancel_connection, this);
+ builder.setNeutralButton(R.string.reconnect, this);
builder.setOnCancelListener(this);
builder.show();
@@ -80,8 +76,18 @@ public class DisconnectVPN extends Activity implements DialogInterface.OnClickLi
public void onClick(DialogInterface dialog, int which) {
if (which == DialogInterface.BUTTON_POSITIVE) {
ProfileManager.setConntectedVpnProfileDisconnected(this);
- if (mService != null && mService.getManagement() != null)
- mService.getManagement().stopVPN(false);
+ if (mService != null) {
+ try {
+ mService.stopVPN(false);
+ } catch (RemoteException e) {
+ VpnStatus.logException(e);
+ }
+ }
+ } else if (which == DialogInterface.BUTTON_NEUTRAL) {
+ Intent intent = new Intent(this, LaunchVPN.class);
+ intent.putExtra(LaunchVPN.EXTRA_KEY, VpnStatus.getLastConnectedVPNProfile());
+ intent.setAction(Intent.ACTION_MAIN);
+ startActivity(intent);
}
finish();
}
diff --git a/app/src/main/java/de/blinkt/openvpn/api/APIVpnProfile.java b/app/src/main/java/de/blinkt/openvpn/api/APIVpnProfile.java
new file mode 100644
index 00000000..adc7f8b7
--- /dev/null
+++ b/app/src/main/java/de/blinkt/openvpn/api/APIVpnProfile.java
@@ -0,0 +1,60 @@
+/*
+ * Copyright (c) 2012-2016 Arne Schwabe
+ * Distributed under the GNU GPL v2 with additional terms. For full terms see the file doc/LICENSE.txt
+ */
+
+package de.blinkt.openvpn.api;
+
+import android.os.Parcel;
+import android.os.Parcelable;
+
+public class APIVpnProfile implements Parcelable {
+
+ public final String mUUID;
+ public final String mName;
+ public final boolean mUserEditable;
+ //public final String mProfileCreator;
+
+ public APIVpnProfile(Parcel in) {
+ mUUID = in.readString();
+ mName = in.readString();
+ mUserEditable = in.readInt() != 0;
+ //mProfileCreator = in.readString();
+ }
+
+ public APIVpnProfile(String uuidString, String name, boolean userEditable, String profileCreator) {
+ mUUID = uuidString;
+ mName = name;
+ mUserEditable = userEditable;
+ //mProfileCreator = profileCreator;
+ }
+
+ @Override
+ public int describeContents() {
+ return 0;
+ }
+
+ @Override
+ public void writeToParcel(Parcel dest, int flags) {
+ dest.writeString(mUUID);
+ dest.writeString(mName);
+ if (mUserEditable)
+ dest.writeInt(0);
+ else
+ dest.writeInt(1);
+ //dest.writeString(mProfileCreator);
+ }
+
+ public static final Parcelable.Creator<APIVpnProfile> CREATOR
+ = new Parcelable.Creator<APIVpnProfile>() {
+ public APIVpnProfile createFromParcel(Parcel in) {
+ return new APIVpnProfile(in);
+ }
+
+ public APIVpnProfile[] newArray(int size) {
+ return new APIVpnProfile[size];
+ }
+ };
+
+
+}
diff --git a/app/src/main/java/de/blinkt/openvpn/core/CIDRIP.java b/app/src/main/java/de/blinkt/openvpn/core/CIDRIP.java
index 07f2152f..799c68c9 100644
--- a/app/src/main/java/de/blinkt/openvpn/core/CIDRIP.java
+++ b/app/src/main/java/de/blinkt/openvpn/core/CIDRIP.java
@@ -47,9 +47,9 @@ class CIDRIP {
public boolean normalise() {
long ip = getInt(mIp);
- long newip = ip & (0xffffffffl << (32 - len));
+ long newip = ip & (0xffffffffL << (32 - len));
if (newip != ip) {
- mIp = String.format("%d.%d.%d.%d", (newip & 0xff000000) >> 24, (newip & 0xff0000) >> 16, (newip & 0xff00) >> 8, newip & 0xff);
+ mIp = String.format(Locale.US,"%d.%d.%d.%d", (newip & 0xff000000) >> 24, (newip & 0xff0000) >> 16, (newip & 0xff00) >> 8, newip & 0xff);
return true;
} else {
return false;
diff --git a/app/src/main/java/de/blinkt/openvpn/core/ConfigParser.java b/app/src/main/java/de/blinkt/openvpn/core/ConfigParser.java
index d14e643e..74afd61e 100644
--- a/app/src/main/java/de/blinkt/openvpn/core/ConfigParser.java
+++ b/app/src/main/java/de/blinkt/openvpn/core/ConfigParser.java
@@ -6,7 +6,7 @@
package de.blinkt.openvpn.core;
import android.text.TextUtils;
-import android.util.Pair;
+import android.support.v4.util.Pair;
import java.io.BufferedReader;
import java.io.IOException;
@@ -119,6 +119,9 @@ public class ConfigParser {
}
} while (true);
+ if(inlinefile.endsWith("\n"))
+ inlinefile = inlinefile.substring(0, inlinefile.length()-1);
+
args.clear();
args.add(argname);
args.add(inlinefile);
@@ -251,10 +254,12 @@ public class ConfigParser {
"route-up",
"route-pre-down",
"auth-user-pass-verify",
+ "block-outside-dns",
"dhcp-release",
"dhcp-renew",
"dh",
"group",
+ "allow-recursive-routing",
"ip-win32",
"management-hold",
"management",
@@ -273,6 +278,7 @@ public class ConfigParser {
"plugin",
"machine-readable-output",
"persist-key",
+ "push",
"register-dns",
"route-delay",
"route-gateway",
@@ -322,7 +328,6 @@ public class ConfigParser {
"socks-proxy",
"socks-proxy-retry",
"explicit-exit-notify",
- "mssfix"
};
@@ -394,7 +399,7 @@ public class ConfigParser {
np.mCustomRoutesv6 = customIPv6Routes;
}
- Vector<String> routeNoPull = getOption("route-nopull", 1, 1);
+ Vector<String> routeNoPull = getOption("route-nopull", 0, 0);
if (routeNoPull!=null)
np.mRoutenopull=true;
@@ -417,15 +422,21 @@ public class ConfigParser {
if (direction != null)
np.mTLSAuthDirection = direction.get(1);
- Vector<Vector<String>> defgw = getAllOption("redirect-gateway", 0, 5);
+ Vector<String> tlscrypt = getOption("tls-crypt", 1, 1);
+ if (tlscrypt!=null) {
+ np.mUseTLSAuth = true;
+ np.mTLSAuthFilename = tlscrypt.get(1);
+ np.mTLSAuthDirection = "tls-crypt";
+ }
+
+ Vector<Vector<String>> defgw = getAllOption("redirect-gateway", 0, 7);
if (defgw != null) {
- np.mUseDefaultRoute = true;
- checkRedirectParameters(np, defgw);
+ checkRedirectParameters(np, defgw, true);
}
Vector<Vector<String>> redirectPrivate = getAllOption("redirect-private", 0, 5);
if (redirectPrivate != null) {
- checkRedirectParameters(np, redirectPrivate);
+ checkRedirectParameters(np, redirectPrivate, false);
}
Vector<String> dev = getOption("dev", 1, 1);
Vector<String> devtype = getOption("dev-type", 1, 1);
@@ -448,11 +459,23 @@ public class ConfigParser {
throw new ConfigParseError("Argument to --mssfix has to be an integer");
}
} else {
- np.mMssFix = VpnProfile.DEFAULT_MSSFIX_SIZE;
+ np.mMssFix = 1450; // OpenVPN default size
}
}
+ Vector<String> tunmtu = getOption("mtu", 1, 1);
+
+ if (tunmtu != null) {
+ try {
+ np.mTunMtu = Integer.parseInt(tunmtu.get(1));
+ } catch (NumberFormatException e) {
+ throw new ConfigParseError("Argument to --tun-mtu has to be an integer");
+ }
+ }
+
+
+
Vector<String> mode = getOption("mode", 1, 1);
if (mode != null) {
if (!mode.get(1).equals("p2p"))
@@ -554,16 +577,23 @@ public class ConfigParser {
if (verifyx509name.size() > 2) {
if (verifyx509name.get(2).equals("name"))
np.mX509AuthType = VpnProfile.X509_VERIFY_TLSREMOTE_RDN;
+ else if (verifyx509name.get(2).equals("subject"))
+ np.mX509AuthType = VpnProfile.X509_VERIFY_TLSREMOTE_DN;
else if (verifyx509name.get(2).equals("name-prefix"))
np.mX509AuthType = VpnProfile.X509_VERIFY_TLSREMOTE_RDN_PREFIX;
else
- throw new ConfigParseError("Unknown parameter to x509-verify-name: " + verifyx509name.get(2));
+ throw new ConfigParseError("Unknown parameter to verify-x509-name: " + verifyx509name.get(2));
} else {
np.mX509AuthType = VpnProfile.X509_VERIFY_TLSREMOTE_DN;
}
}
+ Vector<String> x509usernamefield = getOption("x509-username-field", 1,1);
+ if (x509usernamefield!=null) {
+ np.mx509UsernameField = x509usernamefield.get(1);
+ }
+
Vector<String> verb = getOption("verb", 1, 1);
if (verb != null) {
@@ -580,9 +610,12 @@ public class ConfigParser {
if (getOption("push-peer-info", 0, 0) != null)
np.mPushPeerInfo = true;
- Vector<String> connectretry = getOption("connect-retry", 1, 1);
- if (connectretry != null)
+ Vector<String> connectretry = getOption("connect-retry", 1, 2);
+ if (connectretry != null) {
np.mConnectRetry = connectretry.get(1);
+ if (connectretry.size() > 2)
+ np.mConnectRetryMaxTime = connectretry.get(2);
+ }
Vector<String> connectretrymax = getOption("connect-retry-max", 1, 1);
if (connectretrymax != null)
@@ -613,6 +646,19 @@ public class ConfigParser {
}
}
+ Vector<String> authretry = getOption("auth-retry", 1, 1);
+ if (authretry != null) {
+ if (authretry.get(1).equals("none"))
+ np.mAuthRetry = VpnProfile.AUTH_RETRY_NONE_FORGET;
+ else if (authretry.get(1).equals("nointeract"))
+ np.mAuthRetry = VpnProfile.AUTH_RETRY_NOINTERACT;
+ else if (authretry.get(1).equals("interact"))
+ np.mAuthRetry = VpnProfile.AUTH_RETRY_NOINTERACT;
+ else
+ throw new ConfigParseError("Unknown parameter to auth-retry: " + authretry.get(2));
+ }
+
+
Vector<String> crlfile = getOption("crl-verify", 1, 2);
if (crlfile != null) {
// If the 'dir' parameter is present just add it as custom option ..
@@ -776,22 +822,34 @@ public class ConfigParser {
}
- private void checkRedirectParameters(VpnProfile np, Vector<Vector<String>> defgw) {
+ private void checkRedirectParameters(VpnProfile np, Vector<Vector<String>> defgw, boolean defaultRoute) {
+
+ boolean noIpv4 = false;
+ if (defaultRoute)
+
for (Vector<String> redirect : defgw)
for (int i = 1; i < redirect.size(); i++) {
if (redirect.get(i).equals("block-local"))
np.mAllowLocalLAN = false;
else if (redirect.get(i).equals("unblock-local"))
np.mAllowLocalLAN = true;
+ else if (redirect.get(i).equals("!ipv4"))
+ noIpv4=true;
+ else if (redirect.get(i).equals("ipv6"))
+ np.mUseDefaultRoutev6=true;
}
+ if (defaultRoute && !noIpv4)
+ np.mUseDefaultRoute=true;
}
private boolean isUdpProto(String proto) throws ConfigParseError {
boolean isudp;
- if (proto.equals("udp") || proto.equals("udp6"))
+ if (proto.equals("udp") || proto.equals("udp4") || proto.equals("udp6"))
isudp = true;
else if (proto.equals("tcp-client") ||
proto.equals("tcp") ||
+ proto.equals("tcp4") ||
+ proto.endsWith("tcp4-client") ||
proto.equals("tcp6") ||
proto.endsWith("tcp6-client"))
isudp = false;
@@ -858,10 +916,9 @@ public class ConfigParser {
for (Vector<String> optionsline : option) {
if (!ignoreThisOption(optionsline)) {
// Check if option had been inlined and inline again
- if (optionsline.size() == 2 && "extra-certs".equals(optionsline.get(0)) ) {
+ if (optionsline.size() == 2 &&
+ ("extra-certs".equals(optionsline.get(0)) || "http-proxy-user-pass".equals(optionsline.get(0)))) {
custom += VpnProfile.insertFileData(optionsline.get(0), optionsline.get(1));
-
-
} else {
for (String arg : optionsline)
custom += VpnProfile.openVpnEscape(arg) + " ";
diff --git a/app/src/main/java/de/blinkt/openvpn/core/Connection.java b/app/src/main/java/de/blinkt/openvpn/core/Connection.java
index 3455450b..ff15daec 100644
--- a/app/src/main/java/de/blinkt/openvpn/core/Connection.java
+++ b/app/src/main/java/de/blinkt/openvpn/core/Connection.java
@@ -8,21 +8,23 @@ package de.blinkt.openvpn.core;
import android.text.TextUtils;
import java.io.Serializable;
+import java.util.Locale;
public class Connection implements Serializable, Cloneable {
- public String mServerName = "openvpn.blinkt.de";
+ public String mServerName = "openvpn.example.com";
public String mServerPort = "1194";
public boolean mUseUdp = true;
- public String mCustomConfiguration="";
- public boolean mUseCustomConfig=false;
- public boolean mEnabled=true;
+ public String mCustomConfiguration = "";
+ public boolean mUseCustomConfig = false;
+ public boolean mEnabled = true;
public int mConnectTimeout = 0;
+ public static final int CONNECTION_DEFAULT_TIMEOUT = 120;
private static final long serialVersionUID = 92031902903829089L;
public String getConnectionBlock() {
- String cfg="";
+ String cfg = "";
// Server Address
cfg += "remote ";
@@ -34,8 +36,8 @@ public class Connection implements Serializable, Cloneable {
else
cfg += " tcp-client\n";
- if (mConnectTimeout!=0)
- cfg += String.format(" connect-timeout %d\n" , mConnectTimeout);
+ if (mConnectTimeout != 0)
+ cfg += String.format(Locale.US, " connect-timeout %d\n", mConnectTimeout);
if (!TextUtils.isEmpty(mCustomConfiguration) && mUseCustomConfig) {
@@ -53,4 +55,11 @@ public class Connection implements Serializable, Cloneable {
public boolean isOnlyRemote() {
return TextUtils.isEmpty(mCustomConfiguration) || !mUseCustomConfig;
}
+
+ public int getTimeout() {
+ if (mConnectTimeout <= 0)
+ return CONNECTION_DEFAULT_TIMEOUT;
+ else
+ return mConnectTimeout;
+ }
}
diff --git a/app/src/main/java/de/blinkt/openvpn/core/ConnectionStatus.java b/app/src/main/java/de/blinkt/openvpn/core/ConnectionStatus.java
new file mode 100644
index 00000000..03d842e3
--- /dev/null
+++ b/app/src/main/java/de/blinkt/openvpn/core/ConnectionStatus.java
@@ -0,0 +1,47 @@
+/*
+ * Copyright (c) 2012-2016 Arne Schwabe
+ * Distributed under the GNU GPL v2 with additional terms. For full terms see the file doc/LICENSE.txt
+ */
+
+package de.blinkt.openvpn.core;
+
+import android.os.Parcel;
+import android.os.Parcelable;
+
+/**
+ * Created by arne on 08.11.16.
+ */
+public enum ConnectionStatus implements Parcelable {
+ LEVEL_CONNECTED,
+ LEVEL_VPNPAUSED,
+ LEVEL_CONNECTING_SERVER_REPLIED,
+ LEVEL_CONNECTING_NO_SERVER_REPLY_YET,
+ LEVEL_NONETWORK,
+ LEVEL_NOTCONNECTED,
+ LEVEL_START,
+ LEVEL_AUTH_FAILED,
+ LEVEL_WAITING_FOR_USER_INPUT,
+ UNKNOWN_LEVEL;
+
+ @Override
+ public void writeToParcel(Parcel dest, int flags) {
+ dest.writeInt(ordinal());
+ }
+
+ @Override
+ public int describeContents() {
+ return 0;
+ }
+
+ public static final Creator<ConnectionStatus> CREATOR = new Creator<ConnectionStatus>() {
+ @Override
+ public ConnectionStatus createFromParcel(Parcel in) {
+ return ConnectionStatus.values()[in.readInt()];
+ }
+
+ @Override
+ public ConnectionStatus[] newArray(int size) {
+ return new ConnectionStatus[size];
+ }
+ };
+}
diff --git a/app/src/main/java/de/blinkt/openvpn/core/DeviceStateReceiver.java b/app/src/main/java/de/blinkt/openvpn/core/DeviceStateReceiver.java
index 40684af3..c396f181 100644
--- a/app/src/main/java/de/blinkt/openvpn/core/DeviceStateReceiver.java
+++ b/app/src/main/java/de/blinkt/openvpn/core/DeviceStateReceiver.java
@@ -20,6 +20,7 @@ import de.blinkt.openvpn.core.VpnStatus.ByteCountListener;
import java.util.LinkedList;
import java.util.Objects;
+import java.util.StringTokenizer;
import static de.blinkt.openvpn.core.OpenVPNManagement.pauseReason;
@@ -64,13 +65,13 @@ public class DeviceStateReceiver extends BroadcastReceiver implements ByteCountL
return shouldBeConnected();
}
- enum connectState {
+ private enum connectState {
SHOULDBECONNECTED,
PENDINGDISCONNECT,
DISCONNECTED
}
- static class Datapoint {
+ private static class Datapoint {
private Datapoint(long t, long d) {
timestamp = t;
data = d;
@@ -80,7 +81,7 @@ public class DeviceStateReceiver extends BroadcastReceiver implements ByteCountL
long data;
}
- LinkedList<Datapoint> trafficdata = new LinkedList<DeviceStateReceiver.Datapoint>();
+ private LinkedList<Datapoint> trafficdata = new LinkedList<>();
@Override
@@ -102,7 +103,7 @@ public class DeviceStateReceiver extends BroadcastReceiver implements ByteCountL
if (windowtraffic < TRAFFIC_LIMIT) {
screen = connectState.DISCONNECTED;
VpnStatus.logInfo(R.string.screenoff_pause,
- OpenVPNService.humanReadableByteCount(TRAFFIC_LIMIT, false), TRAFFIC_WINDOW);
+ "64 kB", TRAFFIC_WINDOW);
mManagement.pause(getPauseReason());
}
@@ -135,7 +136,7 @@ public class DeviceStateReceiver extends BroadcastReceiver implements ByteCountL
@Override
public void onReceive(Context context, Intent intent) {
- SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
+ SharedPreferences prefs = Preferences.getDefaultSharedPreferences(context);
if (ConnectivityManager.CONNECTIVITY_ACTION.equals(intent.getAction())) {
@@ -173,15 +174,15 @@ public class DeviceStateReceiver extends BroadcastReceiver implements ByteCountL
private void fillTrafficData() {
trafficdata.add(new Datapoint(System.currentTimeMillis(), TRAFFIC_LIMIT));
}
+
public static boolean equalsObj(Object a, Object b) {
return (a == null) ? (b == null) : a.equals(b);
}
-
public void networkStateChange(Context context) {
NetworkInfo networkInfo = getCurrentNetworkInfo(context);
- SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
+ SharedPreferences prefs = Preferences.getDefaultSharedPreferences(context);
boolean sendusr1 = prefs.getBoolean("netchangereconnect", true);
@@ -261,6 +262,8 @@ public class DeviceStateReceiver extends BroadcastReceiver implements ByteCountL
if (!netstatestring.equals(lastStateMsg))
VpnStatus.logInfo(R.string.netstatus, netstatestring);
+ VpnStatus.logDebug(String.format("Debug state info: %s, pause: %s, shouldbeconnected: %s, network: %s ",
+ netstatestring, getPauseReason(), shouldBeConnected(), network));
lastStateMsg = netstatestring;
}
diff --git a/app/src/main/java/de/blinkt/openvpn/core/ICSOpenVPNApplication.java b/app/src/main/java/de/blinkt/openvpn/core/ICSOpenVPNApplication.java
index db3ae751..e7019f42 100644
--- a/app/src/main/java/de/blinkt/openvpn/core/ICSOpenVPNApplication.java
+++ b/app/src/main/java/de/blinkt/openvpn/core/ICSOpenVPNApplication.java
@@ -4,7 +4,14 @@
*/
package de.blinkt.openvpn.core;
+
+import android.annotation.TargetApi;
import android.app.Application;
+import android.app.NotificationChannel;
+import android.app.NotificationManager;
+import android.content.Context;
+import android.graphics.Color;
+import android.os.Build;
/*
import org.acra.ACRA;
@@ -12,32 +19,50 @@ import org.acra.ReportingInteractionMode;
import org.acra.annotation.ReportsCrashes;
*/
-import se.leap.bitmaskclient.BuildConfig;
import se.leap.bitmaskclient.R;
-import de.blinkt.openvpn.core.PRNGFixes;
-/*
-@ReportsCrashes(
- formKey = "",
- formUri = "http://reports.blinkt.de/report-icsopenvpn",
- reportType = org.acra.sender.HttpSender.Type.JSON,
- httpMethod = org.acra.sender.HttpSender.Method.PUT,
- formUriBasicAuthLogin="report-icsopenvpn",
- formUriBasicAuthPassword="Tohd4neiF9Ai!!!!111eleven",
- mode = ReportingInteractionMode.TOAST,
- resToastText = R.string.crash_toast_text
-)
-*/
public class ICSOpenVPNApplication extends Application {
+ private StatusListener mStatus;
+
@Override
public void onCreate() {
super.onCreate();
PRNGFixes.apply();
- if (BuildConfig.DEBUG) {
- //ACRA.init(this);
- }
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)
+
+ createNotificationChannels();
+ mStatus = new StatusListener();
+ mStatus.init(getApplicationContext());
+
+ }
+
+ @TargetApi(Build.VERSION_CODES.O)
+ private void createNotificationChannels() {
+ NotificationManager mNotificationManager =
+ (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
+
+ // Background message
+ CharSequence name = getString(R.string.channel_name_background);
+ NotificationChannel mChannel = new NotificationChannel(OpenVPNService.NOTIFICATION_CHANNEL_BG_ID,
+ name, NotificationManager.IMPORTANCE_MIN);
+
+ mChannel.setDescription(getString(R.string.channel_description_background));
+ mChannel.enableLights(false);
+
+ mChannel.setLightColor(Color.DKGRAY);
+ mNotificationManager.createNotificationChannel(mChannel);
+
+ // Connection status change messages
+
+ name = getString(R.string.channel_name_status);
+ mChannel = new NotificationChannel(OpenVPNService.NOTIFICATION_CHANNEL_NEWSTATUS_ID,
+ name, NotificationManager.IMPORTANCE_DEFAULT);
+
+ mChannel.setDescription(getString(R.string.channel_description_status));
+ mChannel.enableLights(true);
- VpnStatus.initLogCache(getApplicationContext().getCacheDir());
+ mChannel.setLightColor(Color.BLUE);
+ mNotificationManager.createNotificationChannel(mChannel);
}
}
diff --git a/app/src/main/java/de/blinkt/openvpn/core/LogFileHandler.java b/app/src/main/java/de/blinkt/openvpn/core/LogFileHandler.java
index 288c7934..57d1fb22 100644
--- a/app/src/main/java/de/blinkt/openvpn/core/LogFileHandler.java
+++ b/app/src/main/java/de/blinkt/openvpn/core/LogFileHandler.java
@@ -8,7 +8,6 @@ package de.blinkt.openvpn.core;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
-import android.os.Parcel;
import java.io.BufferedInputStream;
import java.io.File;
@@ -16,6 +15,10 @@ import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.io.UnsupportedEncodingException;
+import java.nio.BufferOverflowException;
import java.nio.ByteBuffer;
import java.util.Locale;
@@ -29,7 +32,8 @@ class LogFileHandler extends Handler {
static final int FLUSH_TO_DISK = 101;
static final int LOG_INIT = 102;
public static final int LOG_MESSAGE = 103;
- private static FileOutputStream mLogFile;
+ public static final int MAGIC_BYTE = 0x55;
+ protected OutputStream mLogFile;
public static final String LOGFILE_NAME = "logcache.dat";
@@ -47,20 +51,20 @@ class LogFileHandler extends Handler {
throw new RuntimeException("mLogFile not null");
readLogCache((File) msg.obj);
openLogFile((File) msg.obj);
- } else if (msg.what == LOG_MESSAGE && msg.obj instanceof VpnStatus.LogItem) {
+ } else if (msg.what == LOG_MESSAGE && msg.obj instanceof LogItem) {
// Ignore log messages if not yet initialized
if (mLogFile == null)
return;
- writeLogItemToDisk((VpnStatus.LogItem) msg.obj);
+ writeLogItemToDisk((LogItem) msg.obj);
} else if (msg.what == TRIM_LOG_FILE) {
trimLogFile();
- for (VpnStatus.LogItem li : VpnStatus.getlogbuffer())
+ for (LogItem li : VpnStatus.getlogbuffer())
writeLogItemToDisk(li);
} else if (msg.what == FLUSH_TO_DISK) {
flushToDisk();
}
- } catch (IOException e) {
+ } catch (IOException | BufferOverflowException e) {
e.printStackTrace();
VpnStatus.logError("Error during log cache: " + msg.what);
VpnStatus.logException(e);
@@ -72,95 +76,160 @@ class LogFileHandler extends Handler {
mLogFile.flush();
}
- private static void trimLogFile() {
+ private void trimLogFile() {
try {
mLogFile.flush();
- mLogFile.getChannel().truncate(0);
+ ((FileOutputStream) mLogFile).getChannel().truncate(0);
} catch (IOException e) {
e.printStackTrace();
}
}
- private void writeLogItemToDisk(VpnStatus.LogItem li) throws IOException {
- Parcel p = Parcel.obtain();
- li.writeToParcel(p, 0);
+ private void writeLogItemToDisk(LogItem li) throws IOException {
+
// We do not really care if the log cache breaks between Android upgrades,
// write binary format to disc
- byte[] liBytes = p.marshall();
- byte[] lenBytes = ByteBuffer.allocate(4).putInt(liBytes.length).array();
- mLogFile.write(lenBytes);
- mLogFile.write(liBytes);
- p.recycle();
+ byte[] liBytes = li.getMarschaledBytes();
+
+ writeEscapedBytes(liBytes);
+ }
+
+ public void writeEscapedBytes(byte[] bytes) throws IOException {
+ int magic = 0;
+ for (byte b : bytes)
+ if (b == MAGIC_BYTE || b == MAGIC_BYTE + 1)
+ magic++;
+
+ byte eBytes[] = new byte[bytes.length + magic];
+
+ int i = 0;
+ for (byte b : bytes) {
+ if (b == MAGIC_BYTE || b == MAGIC_BYTE + 1) {
+ eBytes[i++] = MAGIC_BYTE + 1;
+ eBytes[i++] = (byte) (b - MAGIC_BYTE);
+ } else {
+ eBytes[i++] = b;
+ }
+ }
+
+ byte[] lenBytes = ByteBuffer.allocate(4).putInt(bytes.length).array();
+ synchronized (mLogFile) {
+ mLogFile.write(MAGIC_BYTE);
+ mLogFile.write(lenBytes);
+ mLogFile.write(eBytes);
+ }
}
- private void openLogFile (File cacheDir) throws FileNotFoundException {
+ private void openLogFile(File cacheDir) throws FileNotFoundException {
File logfile = new File(cacheDir, LOGFILE_NAME);
mLogFile = new FileOutputStream(logfile);
}
private void readLogCache(File cacheDir) {
- File logfile = new File(cacheDir, LOGFILE_NAME);
-
+ try {
+ File logfile = new File(cacheDir, LOGFILE_NAME);
- if (!logfile.exists() || !logfile.canRead())
- return;
+ if (!logfile.exists() || !logfile.canRead())
+ return;
+ readCacheContents(new FileInputStream(logfile));
- try {
+ } catch (java.io.IOException | java.lang.RuntimeException e) {
+ VpnStatus.logError("Reading cached logfile failed");
+ VpnStatus.logException(e);
+ e.printStackTrace();
+ // ignore reading file error
+ } finally {
+ synchronized (VpnStatus.readFileLock) {
+ VpnStatus.readFileLog = true;
+ VpnStatus.readFileLock.notifyAll();
+ }
+ }
+ }
- BufferedInputStream logFile = new BufferedInputStream(new FileInputStream(logfile));
- byte[] buf = new byte[8192];
- int read = logFile.read(buf, 0, 4);
- int itemsRead=0;
+ protected void readCacheContents(InputStream in) throws IOException {
+ BufferedInputStream logFile = new BufferedInputStream(in);
- while (read >= 4) {
- int len = ByteBuffer.wrap(buf, 0, 4).asIntBuffer().get();
+ byte[] buf = new byte[16384];
+ int read = logFile.read(buf, 0, 5);
+ int itemsRead = 0;
- // Marshalled LogItem
- read = logFile.read(buf, 0, len);
- Parcel p = Parcel.obtain();
- p.unmarshall(buf, 0, read);
- p.setDataPosition(0);
- VpnStatus.LogItem li = VpnStatus.LogItem.CREATOR.createFromParcel(p);
- if (li.verify()) {
- VpnStatus.newLogItem(li, true);
- } else {
- VpnStatus.logError(String.format(Locale.getDefault(),
- "Could not read log item from file: %d/%d: %s",
- read, len, bytesToHex(buf, Math.max(read,80))));
+ readloop:
+ while (read >= 5) {
+ int skipped = 0;
+ while (buf[skipped] != MAGIC_BYTE) {
+ skipped++;
+ if (!(logFile.read(buf, skipped + 4, 1) == 1) || skipped + 10 > buf.length) {
+ VpnStatus.logDebug(String.format(Locale.US, "Skipped %d bytes and no a magic byte found", skipped));
+ break readloop;
}
- p.recycle();
-
- //Next item
- read = logFile.read(buf, 0, 4);
- itemsRead++;
- if (itemsRead > 2*VpnStatus.MAXLOGENTRIES) {
- VpnStatus.logError("Too many logentries read from cache, aborting.");
- read = 0;
+ }
+ if (skipped > 0)
+ VpnStatus.logDebug(String.format(Locale.US, "Skipped %d bytes before finding a magic byte", skipped));
+
+ int len = ByteBuffer.wrap(buf, skipped + 1, 4).asIntBuffer().get();
+
+ // Marshalled LogItem
+ int pos = 0;
+ byte buf2[] = new byte[buf.length];
+
+ while (pos < len) {
+ byte b = (byte) logFile.read();
+ if (b == MAGIC_BYTE) {
+ VpnStatus.logDebug(String.format(Locale.US, "Unexpected magic byte found at pos %d, abort current log item", pos));
+ read = logFile.read(buf, 1, 4) + 1;
+ continue readloop;
+ } else if (b == MAGIC_BYTE + 1) {
+ b = (byte) logFile.read();
+ if (b == 0)
+ b = MAGIC_BYTE;
+ else if (b == 1)
+ b = MAGIC_BYTE + 1;
+ else {
+ VpnStatus.logDebug(String.format(Locale.US, "Escaped byte not 0 or 1: %d", b));
+ read = logFile.read(buf, 1, 4) + 1;
+ continue readloop;
+ }
}
+ buf2[pos++] = b;
+ }
+
+ restoreLogItem(buf2, len);
+ //Next item
+ read = logFile.read(buf, 0, 5);
+ itemsRead++;
+ if (itemsRead > 2 * VpnStatus.MAXLOGENTRIES) {
+ VpnStatus.logError("Too many logentries read from cache, aborting.");
+ read = 0;
}
- VpnStatus.logDebug(R.string.reread_log, itemsRead);
+ }
+ VpnStatus.logDebug(R.string.reread_log, itemsRead);
+ }
+ protected void restoreLogItem(byte[] buf, int len) throws UnsupportedEncodingException {
- } catch (java.io.IOException | java.lang.RuntimeException e) {
- VpnStatus.logError("Reading cached logfile failed");
- VpnStatus.logException(e);
- e.printStackTrace();
- // ignore reading file error
+ LogItem li = new LogItem(buf, len);
+ if (li.verify()) {
+ VpnStatus.newLogItem(li, true);
+ } else {
+ VpnStatus.logError(String.format(Locale.getDefault(),
+ "Could not read log item from file: %d: %s",
+ len, bytesToHex(buf, Math.max(len, 80))));
}
}
- final protected static char[] hexArray = "0123456789ABCDEF".toCharArray();
+ private final static char[] hexArray = "0123456789ABCDEF".toCharArray();
+
public static String bytesToHex(byte[] bytes, int len) {
len = Math.min(bytes.length, len);
char[] hexChars = new char[len * 2];
- for ( int j = 0; j < len; j++ ) {
+ for (int j = 0; j < len; j++) {
int v = bytes[j] & 0xFF;
hexChars[j * 2] = hexArray[v >>> 4];
hexChars[j * 2 + 1] = hexArray[v & 0x0F];
diff --git a/app/src/main/java/de/blinkt/openvpn/core/LogItem.java b/app/src/main/java/de/blinkt/openvpn/core/LogItem.java
index 6aefbb2e..cd048f4a 100644
--- a/app/src/main/java/de/blinkt/openvpn/core/LogItem.java
+++ b/app/src/main/java/de/blinkt/openvpn/core/LogItem.java
@@ -12,12 +12,10 @@ import android.content.pm.PackageManager;
import android.content.pm.Signature;
import android.os.Parcel;
import android.os.Parcelable;
-import android.text.TextUtils;
-import android.util.Log;
import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
import java.io.UnsupportedEncodingException;
+import java.nio.BufferOverflowException;
import java.nio.ByteBuffer;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
@@ -89,7 +87,7 @@ public class LogItem implements Parcelable {
}
- public byte[] getMarschaledBytes() throws UnsupportedEncodingException {
+ public byte[] getMarschaledBytes() throws UnsupportedEncodingException, BufferOverflowException {
ByteBuffer bb = ByteBuffer.allocate(16384);
diff --git a/app/src/main/java/de/blinkt/openvpn/core/NetworkSpace.java b/app/src/main/java/de/blinkt/openvpn/core/NetworkSpace.java
index eb6d4d42..37689b3f 100644
--- a/app/src/main/java/de/blinkt/openvpn/core/NetworkSpace.java
+++ b/app/src/main/java/de/blinkt/openvpn/core/NetworkSpace.java
@@ -34,8 +34,8 @@ public class NetworkSpace {
/**
* sorts the networks with following criteria:
- * 1. compares first 1 of the network
- * 2. smaller networks are returned as smaller
+ * 1. compares first 1 of the network
+ * 2. smaller networks are returned as smaller
*/
@Override
public int compareTo(@NonNull ipAddress another) {
@@ -55,8 +55,7 @@ public class NetworkSpace {
/**
* Warning ignores the included integer
*
- * @param o
- * the object to compare this instance with.
+ * @param o the object to compare this instance with.
*/
@Override
public boolean equals(Object o) {
@@ -89,15 +88,15 @@ public class NetworkSpace {
}
public BigInteger getLastAddress() {
- if(lastAddress ==null)
+ if (lastAddress == null)
lastAddress = getMaskedAddress(true);
return lastAddress;
}
public BigInteger getFirstAddress() {
- if (firstAddress ==null)
- firstAddress =getMaskedAddress(false);
+ if (firstAddress == null)
+ firstAddress = getMaskedAddress(false);
return firstAddress;
}
@@ -126,7 +125,7 @@ public class NetworkSpace {
public String toString() {
//String in = included ? "+" : "-";
if (isV4)
- return String.format(Locale.US,"%s/%d", getIPv4Address(), networkMask);
+ return String.format(Locale.US, "%s/%d", getIPv4Address(), networkMask);
else
return String.format(Locale.US, "%s/%d", getIPv6Address(), networkMask);
}
@@ -142,36 +141,48 @@ public class NetworkSpace {
public ipAddress[] split() {
ipAddress firstHalf = new ipAddress(getFirstAddress(), networkMask + 1, included, isV4);
ipAddress secondHalf = new ipAddress(firstHalf.getLastAddress().add(BigInteger.ONE), networkMask + 1, included, isV4);
- if (BuildConfig.DEBUG) Assert.assertTrue(secondHalf.getLastAddress().equals(getLastAddress()));
+ if (BuildConfig.DEBUG)
+ Assert.assertTrue(secondHalf.getLastAddress().equals(getLastAddress()));
return new ipAddress[]{firstHalf, secondHalf};
}
String getIPv4Address() {
if (BuildConfig.DEBUG) {
- Assert.assertTrue (isV4);
- Assert.assertTrue (netAddress.longValue() <= 0xffffffffl);
- Assert.assertTrue (netAddress.longValue() >= 0);
+ Assert.assertTrue(isV4);
+ Assert.assertTrue(netAddress.longValue() <= 0xffffffffl);
+ Assert.assertTrue(netAddress.longValue() >= 0);
}
long ip = netAddress.longValue();
return String.format(Locale.US, "%d.%d.%d.%d", (ip >> 24) % 256, (ip >> 16) % 256, (ip >> 8) % 256, ip % 256);
}
String getIPv6Address() {
- if (BuildConfig.DEBUG) Assert.assertTrue (!isV4);
+ if (BuildConfig.DEBUG) Assert.assertTrue(!isV4);
BigInteger r = netAddress;
- Vector<String> parts = new Vector<String>();
- while (r.compareTo(BigInteger.ZERO) == 1 || parts.size() <3) {
+ String ipv6str = null;
+ boolean lastPart = true;
+
+ while (r.compareTo(BigInteger.ZERO) == 1) {
+
long part = r.mod(BigInteger.valueOf(0x10000)).longValue();
- if (part!=0)
- parts.add(0, String.format(Locale.US, "%x", part));
- else
- parts.add(0, "");
+ if (ipv6str != null || part != 0) {
+ if (ipv6str == null && !lastPart)
+ ipv6str = ":";
+
+ if (lastPart)
+ ipv6str = String.format(Locale.US, "%x", part, ipv6str);
+ else
+ ipv6str = String.format(Locale.US, "%x:%s", part, ipv6str);
+ }
+
r = r.shiftRight(16);
+ lastPart = false;
}
- String ipv6str = TextUtils.join(":", parts);
- while (ipv6str.contains(":::"))
- ipv6str = ipv6str.replace(":::", "::");
+ if (ipv6str == null)
+ return "::";
+
+
return ipv6str;
}
@@ -183,8 +194,8 @@ public class NetworkSpace {
BigInteger netLast = network.getLastAddress();
boolean a = ourFirst.compareTo(netFirst) != 1;
- boolean b = ourLast.compareTo(netLast) != -1;
- return a && b;
+ boolean b = ourLast.compareTo(netLast) != -1;
+ return a && b;
}
}
@@ -215,7 +226,7 @@ public class NetworkSpace {
public void addIPSplit(CIDRIP cidrIp, boolean include) {
ipAddress newIP = new ipAddress(cidrIp, include);
ipAddress[] splitIps = newIP.split();
- for (ipAddress split: splitIps)
+ for (ipAddress split : splitIps)
mIpAddresses.add(split);
}
@@ -229,16 +240,16 @@ public class NetworkSpace {
TreeSet<ipAddress> ipsDone = new TreeSet<ipAddress>();
- ipAddress currentNet = networks.poll();
- if (currentNet==null)
+ ipAddress currentNet = networks.poll();
+ if (currentNet == null)
return ipsDone;
- while (currentNet!=null) {
+ while (currentNet != null) {
// Check if it and the next of it are compatible
ipAddress nextNet = networks.poll();
if (BuildConfig.DEBUG) Assert.assertNotNull(currentNet);
- if (nextNet== null || currentNet.getLastAddress().compareTo(nextNet.getFirstAddress()) == -1) {
+ if (nextNet == null || currentNet.getLastAddress().compareTo(nextNet.getFirstAddress()) == -1) {
// Everything good, no overlapping nothing to do
ipsDone.add(currentNet);
@@ -249,7 +260,7 @@ public class NetworkSpace {
if (currentNet.included == nextNet.included) {
// Included in the next next and same type
// Simply forget our current network
- currentNet=nextNet;
+ currentNet = nextNet;
} else {
// our currentNet is included in next and types differ. Need to split the next network
ipAddress[] newNets = nextNet.split();
@@ -262,7 +273,8 @@ public class NetworkSpace {
networks.add(newNets[1]);
if (newNets[0].getLastAddress().equals(currentNet.getLastAddress())) {
- if (BuildConfig.DEBUG) Assert.assertEquals (newNets[0].networkMask, currentNet.networkMask);
+ if (BuildConfig.DEBUG)
+ Assert.assertEquals(newNets[0].networkMask, currentNet.networkMask);
// Don't add the lower half that would conflict with currentNet
} else {
if (!networks.contains(newNets[0]))
@@ -273,8 +285,8 @@ public class NetworkSpace {
} else {
if (BuildConfig.DEBUG) {
Assert.assertTrue(currentNet.networkMask < nextNet.networkMask);
- Assert.assertTrue (nextNet.getFirstAddress().compareTo(currentNet.getFirstAddress()) == 1);
- Assert.assertTrue (currentNet.getLastAddress().compareTo(nextNet.getLastAddress()) != -1);
+ Assert.assertTrue(nextNet.getFirstAddress().compareTo(currentNet.getFirstAddress()) == 1);
+ Assert.assertTrue(currentNet.getLastAddress().compareTo(nextNet.getLastAddress()) != -1);
}
// This network is bigger than the next and last ip of current >= next
@@ -289,8 +301,8 @@ public class NetworkSpace {
if (newNets[1].networkMask == nextNet.networkMask) {
if (BuildConfig.DEBUG) {
- Assert.assertTrue (newNets[1].getFirstAddress().equals(nextNet.getFirstAddress()));
- Assert.assertTrue (newNets[1].getLastAddress().equals(currentNet.getLastAddress()));
+ Assert.assertTrue(newNets[1].getFirstAddress().equals(nextNet.getFirstAddress()));
+ Assert.assertTrue(newNets[1].getLastAddress().equals(currentNet.getLastAddress()));
// split second equal the next network, do not add it
}
networks.add(nextNet);
@@ -322,20 +334,20 @@ public class NetworkSpace {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {
// Include postive routes from the original set under < 4.4 since these might overrule the local
// network but only if no smaller negative route exists
- for(ipAddress origIp: mIpAddresses){
+ for (ipAddress origIp : mIpAddresses) {
if (!origIp.included)
continue;
// The netspace exists
- if(ipsSorted.contains(origIp))
+ if (ipsSorted.contains(origIp))
continue;
- boolean skipIp=false;
+ boolean skipIp = false;
// If there is any smaller net that is excluded we may not add the positive route back
- for (ipAddress calculatedIp: ipsSorted) {
- if(!calculatedIp.included && origIp.containsNet(calculatedIp)) {
- skipIp=true;
+ for (ipAddress calculatedIp : ipsSorted) {
+ if (!calculatedIp.included && origIp.containsNet(calculatedIp)) {
+ skipIp = true;
break;
}
}
diff --git a/app/src/main/java/de/blinkt/openvpn/core/OpenVPNManagement.java b/app/src/main/java/de/blinkt/openvpn/core/OpenVPNManagement.java
index 2911fb1e..ef17e98b 100644
--- a/app/src/main/java/de/blinkt/openvpn/core/OpenVPNManagement.java
+++ b/app/src/main/java/de/blinkt/openvpn/core/OpenVPNManagement.java
@@ -13,7 +13,7 @@ public interface OpenVPNManagement {
enum pauseReason {
noNetwork,
userPause,
- screenOff
+ screenOff,
}
int mBytecountInterval = 2;
diff --git a/app/src/main/java/de/blinkt/openvpn/core/OpenVPNService.java b/app/src/main/java/de/blinkt/openvpn/core/OpenVPNService.java
index 2917bce1..5faa1de4 100644
--- a/app/src/main/java/de/blinkt/openvpn/core/OpenVPNService.java
+++ b/app/src/main/java/de/blinkt/openvpn/core/OpenVPNService.java
@@ -16,17 +16,21 @@ import android.content.Intent;
import android.content.IntentFilter;
import android.content.SharedPreferences;
import android.content.pm.PackageManager;
+import android.content.pm.ShortcutManager;
import android.content.res.Configuration;
+import android.content.res.Resources;
import android.net.ConnectivityManager;
import android.net.VpnService;
-import android.os.Binder;
import android.os.Build;
+import android.os.Bundle;
import android.os.Handler;
import android.os.Handler.Callback;
import android.os.IBinder;
import android.os.Message;
import android.os.ParcelFileDescriptor;
-import android.preference.PreferenceManager;
+import android.os.RemoteException;
+import android.support.annotation.NonNull;
+import android.support.annotation.RequiresApi;
import android.system.OsConstants;
import android.text.TextUtils;
import android.util.Log;
@@ -39,38 +43,38 @@ import java.net.Inet6Address;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.Collection;
-import java.util.HashMap;
import java.util.Locale;
import java.util.Vector;
import se.leap.bitmaskclient.BuildConfig;
+import de.blinkt.openvpn.LaunchVPN;
import se.leap.bitmaskclient.R;
import de.blinkt.openvpn.VpnProfile;
import de.blinkt.openvpn.activities.DisconnectVPN;
import de.blinkt.openvpn.core.VpnStatus.ByteCountListener;
-import de.blinkt.openvpn.core.VpnStatus.ConnectionStatus;
import de.blinkt.openvpn.core.VpnStatus.StateListener;
+import static de.blinkt.openvpn.core.ConnectionStatus.LEVEL_CONNECTED;
+import static de.blinkt.openvpn.core.ConnectionStatus.LEVEL_WAITING_FOR_USER_INPUT;
import static de.blinkt.openvpn.core.NetworkSpace.ipAddress;
-import static de.blinkt.openvpn.core.VpnStatus.ConnectionStatus.LEVEL_CONNECTED;
-import static de.blinkt.openvpn.core.VpnStatus.ConnectionStatus.LEVEL_CONNECTING_NO_SERVER_REPLY_YET;
-import static de.blinkt.openvpn.core.VpnStatus.ConnectionStatus.LEVEL_WAITING_FOR_USER_INPUT;
import se.leap.bitmaskclient.Dashboard;
-public class OpenVPNService extends VpnService implements StateListener, Callback, ByteCountListener {
+public class OpenVPNService extends VpnService implements StateListener, Callback, ByteCountListener, IOpenVPNServiceInternal {
public static final String START_SERVICE = "de.blinkt.openvpn.START_SERVICE";
public static final String START_SERVICE_STICKY = "de.blinkt.openvpn.START_SERVICE_STICKY";
public static final String ALWAYS_SHOW_NOTIFICATION = "de.blinkt.openvpn.NOTIFICATION_ALWAYS_VISIBLE";
public static final String DISCONNECT_VPN = "de.blinkt.openvpn.DISCONNECT_VPN";
private static final String PAUSE_VPN = "de.blinkt.openvpn.PAUSE_VPN";
private static final String RESUME_VPN = "se.leap.bitmaskclient.RESUME_VPN";
- private static final int OPENVPN_STATUS = 1;
+ public static final String NOTIFICATION_CHANNEL_BG_ID = "openvpn_bg";
+ public static final String NOTIFICATION_CHANNEL_NEWSTATUS_ID = "openvpn_newstat";
+ private String lastChannel;
+
private static boolean mNotificationAlwaysVisible = false;
private final Vector<String> mDnslist = new Vector<>();
private final NetworkSpace mRoutes = new NetworkSpace();
private final NetworkSpace mRoutesv6 = new NetworkSpace();
- private final IBinder mBinder = new LocalBinder();
private Thread mProcessThread = null;
private VpnProfile mProfile;
private String mDomain = null;
@@ -90,20 +94,65 @@ public class OpenVPNService extends VpnService implements StateListener, Callbac
private Toast mlastToast;
private Runnable mOpenVPNThread;
+ private static final int PRIORITY_MIN = -2;
+ private static final int PRIORITY_DEFAULT = 0;
+ private static final int PRIORITY_MAX = 2;
+
+
+ private final IBinder mBinder = new IOpenVPNServiceInternal.Stub() {
+
+ @Override
+ public boolean protect(int fd) throws RemoteException {
+ return OpenVPNService.this.protect(fd);
+ }
+
+ @Override
+ public void userPause(boolean shouldbePaused) throws RemoteException {
+ OpenVPNService.this.userPause(shouldbePaused);
+ }
+
+ @Override
+ public boolean stopVPN(boolean replaceConnection) throws RemoteException {
+ return OpenVPNService.this.stopVPN(replaceConnection);
+ }
+ };
+
// From: http://stackoverflow.com/questions/3758606/how-to-convert-byte-size-into-human-readable-format-in-java
- public static String humanReadableByteCount(long bytes, boolean mbit) {
- if (mbit)
+ public static String humanReadableByteCount(long bytes, boolean speed, Resources res) {
+ if (speed)
bytes = bytes * 8;
- int unit = mbit ? 1000 : 1024;
- if (bytes < unit)
- return bytes + (mbit ? " bit" : " B");
-
- int exp = (int) (Math.log(bytes) / Math.log(unit));
- String pre = (mbit ? "kMGTPE" : "KMGTPE").charAt(exp - 1) + (mbit ? "" : "");
- if (mbit)
- return String.format(Locale.getDefault(), "%.1f %sbit", bytes / Math.pow(unit, exp), pre);
+ int unit = speed ? 1000 : 1024;
+
+
+ int exp = Math.max(0, Math.min((int) (Math.log(bytes) / Math.log(unit)), 3));
+
+ float bytesUnit = (float) (bytes / Math.pow(unit, exp));
+
+ if (speed)
+ switch (exp) {
+ case 0:
+ return res.getString(R.string.bits_per_second, bytesUnit);
+ case 1:
+ return res.getString(R.string.kbits_per_second, bytesUnit);
+ case 2:
+ return res.getString(R.string.mbits_per_second, bytesUnit);
+ default:
+ return res.getString(R.string.gbits_per_second, bytesUnit);
+ }
else
- return String.format(Locale.getDefault(), "%.1f %sB", bytes / Math.pow(unit, exp), pre);
+ switch (exp) {
+ case 0:
+ return res.getString(R.string.volume_byte, bytesUnit);
+ case 1:
+ return res.getString(R.string.volume_kbyte, bytesUnit);
+ case 2:
+ return res.getString(R.string.volume_mbyte, bytesUnit);
+ default:
+ return res.getString(R.string.volume_gbyte, bytesUnit);
+
+ }
+
+
}
@Override
@@ -117,7 +166,7 @@ public class OpenVPNService extends VpnService implements StateListener, Callbac
@Override
public void onRevoke() {
- VpnStatus.logInfo(R.string.permission_revoked);
+ VpnStatus.logError(R.string.permission_revoked);
mManagement.stopVPN(false);
endVpnService();
}
@@ -145,26 +194,33 @@ public class OpenVPNService extends VpnService implements StateListener, Callbac
}
}
- private void showNotification(final String msg, String tickerText, boolean lowpriority, long when, ConnectionStatus status) {
- String ns = Context.NOTIFICATION_SERVICE;
- NotificationManager mNotificationManager = (NotificationManager) getSystemService(ns);
-
+ private void showNotification(final String msg, String tickerText, @NonNull String channel, long when, ConnectionStatus status) {
+ NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
int icon = getIconByConnectionStatus(status);
android.app.Notification.Builder nbuilder = new Notification.Builder(this);
+ int priority;
+ if (channel.equals(NOTIFICATION_CHANNEL_BG_ID))
+ priority = PRIORITY_MIN;
+ else
+ priority = PRIORITY_DEFAULT;
+
if (mProfile != null)
- nbuilder.setContentTitle(getString(R.string.notifcation_title, mProfile.mName));
+ nbuilder.setContentTitle(getString(R.string.notifcation_title_bitmask, mProfile.mName));
else
nbuilder.setContentTitle(getString(R.string.notifcation_title_notconnect));
nbuilder.setContentText(msg);
nbuilder.setOnlyAlertOnce(true);
nbuilder.setOngoing(true);
- nbuilder.setContentIntent(getLogPendingIntent());
- nbuilder.setSmallIcon(icon);
+ nbuilder.setSmallIcon(icon);
+ if (status == LEVEL_WAITING_FOR_USER_INPUT)
+ nbuilder.setContentIntent(getUserInputIntent(msg));
+ else
+ nbuilder.setContentIntent(getGraphPendingIntent());
if (when != 0)
nbuilder.setWhen(when);
@@ -172,23 +228,39 @@ public class OpenVPNService extends VpnService implements StateListener, Callbac
// Try to set the priority available since API 16 (Jellybean)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN)
- jbNotificationExtras(lowpriority, nbuilder);
+
+ jbNotificationExtras(priority, nbuilder);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
lpNotificationExtras(nbuilder);
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
+ //noinspection NewApi
+ nbuilder.setChannelId(channel);
+ if (mProfile != null)
+ //noinspection NewApi
+ nbuilder.setShortcutId(mProfile.getUUIDString());
+
+ }
+
if (tickerText != null && !tickerText.equals(""))
nbuilder.setTicker(tickerText);
@SuppressWarnings("deprecation")
Notification notification = nbuilder.getNotification();
+ int notificationId = channel.hashCode();
- mNotificationManager.notify(OPENVPN_STATUS, notification);
- // startForeground(OPENVPN_STATUS, notification);
+ mNotificationManager.notify(notificationId, notification);
+ startForeground(notificationId, notification);
+
+ if (lastChannel != null && !channel.equals(lastChannel)) {
+ // Cancel old notification
+ mNotificationManager.cancel(lastChannel.hashCode());
+ }
// Check if running on a TV
- if (runningOnAndroidTV() && !lowpriority)
+ if (runningOnAndroidTV() && !(priority < 0))
guiHandler.post(new Runnable() {
@Override
@@ -238,13 +310,12 @@ public class OpenVPNService extends VpnService implements StateListener, Callbac
}
@TargetApi(Build.VERSION_CODES.JELLY_BEAN)
- private void jbNotificationExtras(boolean lowpriority,
+ private void jbNotificationExtras(int priority,
android.app.Notification.Builder nbuilder) {
try {
- if (lowpriority) {
+ if (priority != 0) {
Method setpriority = nbuilder.getClass().getMethod("setPriority", int.class);
- // PRIORITY_MIN == -2
- setpriority.invoke(nbuilder, -2);
+ setpriority.invoke(nbuilder, priority);
Method setUsesChronometer = nbuilder.getClass().getMethod("setUsesChronometer", boolean.class);
setUsesChronometer.invoke(nbuilder, true);
@@ -281,9 +352,20 @@ public class OpenVPNService extends VpnService implements StateListener, Callbac
}
- PendingIntent getLogPendingIntent() {
+ PendingIntent getUserInputIntent(String needed) {
+ Intent intent = new Intent(getApplicationContext(), LaunchVPN.class);
+ intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
+ intent.putExtra("need", needed);
+ Bundle b = new Bundle();
+ b.putString("need", needed);
+ PendingIntent pIntent = PendingIntent.getActivity(this, 12, intent, 0);
+ return pIntent;
+ }
+
+ PendingIntent getGraphPendingIntent() {
// Let the configure Button show the Log
Intent intent = new Intent(getBaseContext(), Dashboard.class);
+ intent.putExtra("PAGE", "graph");
intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
PendingIntent startLW = PendingIntent.getActivity(this, 0, intent, 0);
intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
@@ -298,6 +380,10 @@ public class OpenVPNService extends VpnService implements StateListener, Callbac
filter.addAction(Intent.ACTION_SCREEN_OFF);
filter.addAction(Intent.ACTION_SCREEN_ON);
mDeviceStateReceiver = new DeviceStateReceiver(magnagement);
+
+ // Fetch initial network state
+ mDeviceStateReceiver.networkStateChange(this);
+
registerReceiver(mDeviceStateReceiver, filter);
VpnStatus.addByteCountListener(mDeviceStateReceiver);
@@ -329,6 +415,14 @@ public class OpenVPNService extends VpnService implements StateListener, Callbac
}
@Override
+ public boolean stopVPN(boolean replaceConnection) throws RemoteException {
+ if (getManagement() != null)
+ return getManagement().stopVPN(replaceConnection);
+ else
+ return false;
+ }
+
+ @Override
public int onStartCommand(Intent intent, int flags, int startId) {
if (intent != null && intent.getBooleanExtra(ALWAYS_SHOW_NOTIFICATION, false))
@@ -359,26 +453,32 @@ public class OpenVPNService extends VpnService implements StateListener, Callbac
return START_REDELIVER_INTENT;
}
- /* The intent is null when the service has been restarted */
- if (intent == null) {
- mProfile = ProfileManager.getLastConnectedProfile(this, false);
+ if (intent != null && intent.hasExtra(getPackageName() + ".profileUUID")) {
+ String profileUUID = intent.getStringExtra(getPackageName() + ".profileUUID");
+ int profileVersion = intent.getIntExtra(getPackageName() + ".profileVersion", 0);
+ // Try for 10s to get current version of the profile
+ mProfile = ProfileManager.get(this, profileUUID, profileVersion, 100);
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N_MR1) {
+ updateShortCutUsage(mProfile);
+ }
+
+ } else {
+ /* The intent is null when we are set as always-on or the service has been restarted. */
+ mProfile = ProfileManager.getLastConnectedProfile(this);
VpnStatus.logInfo(R.string.service_restarted);
/* Got no profile, just stop */
if (mProfile == null) {
- Log.d("OpenVPN", "Got no last connected profile on null intent. Stopping");
- stopSelf(startId);
- return START_NOT_STICKY;
+ Log.d("OpenVPN", "Got no last connected profile on null intent. Assuming always on.");
+ mProfile = ProfileManager.getAlwaysOnVPN(this);
+
+ if (mProfile == null) {
+ stopSelf(startId);
+ return START_NOT_STICKY;
+ }
}
/* Do the asynchronous keychain certificate stuff */
mProfile.checkForRestart(this);
-
- /* Recreate the intent */
- intent = mProfile.getStartServiceIntent(this);
-
- } else {
- String profileUUID = intent.getStringExtra(getPackageName() + ".profileUUID");
- mProfile = ProfileManager.get(this, profileUUID);
}
/* start the OpenVPN process itself in a background thread */
@@ -391,17 +491,22 @@ public class OpenVPNService extends VpnService implements StateListener, Callbac
ProfileManager.setConnectedVpnProfile(this, mProfile);
- /* TODO: At the moment we have no way to handle asynchronous PW input
- * Fixing will also allow to handle challenge/response authentication */
- if (mProfile.needUserPWInput(true) != 0)
- return START_NOT_STICKY;
+ VpnStatus.setConnectedVPNProfile(mProfile.getUUIDString());
return START_STICKY;
}
+ @RequiresApi(Build.VERSION_CODES.N_MR1)
+ private void updateShortCutUsage(VpnProfile profile) {
+ if (profile == null)
+ return;
+ ShortcutManager shortcutManager = getSystemService(ShortcutManager.class);
+ shortcutManager.reportShortcutUsed(profile.getUUIDString());
+ }
+
private void startOpenVPN() {
VpnStatus.logInfo(R.string.building_configration);
- VpnStatus.updateStateString("VPN_GENERATE_CONFIG", "", R.string.building_configration, VpnStatus.ConnectionStatus.LEVEL_START);
+ VpnStatus.updateStateString("VPN_GENERATE_CONFIG", "", R.string.building_configration, ConnectionStatus.LEVEL_START);
try {
@@ -411,12 +516,9 @@ public class OpenVPNService extends VpnService implements StateListener, Callbac
endVpnService();
return;
}
-
- // Extract information from the intent.
- String prefix = getPackageName();
String nativeLibraryDirectory = getApplicationInfo().nativeLibraryDir;
- // Also writes OpenVPN binary
+ // Write OpenVPN binary
String[] argv = VPNLaunchHelper.buildOpenvpnArgv(this);
@@ -429,7 +531,7 @@ public class OpenVPNService extends VpnService implements StateListener, Callbac
mStarting = false;
// Start a new session by creating a new thread.
- SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
+ SharedPreferences prefs = Preferences.getDefaultSharedPreferences(this);
mOvpn3 = prefs.getBoolean("ovpn3", false);
if (!"ovpn3".equals(BuildConfig.FLAVOR))
@@ -462,8 +564,7 @@ public class OpenVPNService extends VpnService implements StateListener, Callbac
} else {
- HashMap<String, String> env = new HashMap<>();
- processThread = new OpenVPNThread(this, argv, env, nativeLibraryDirectory);
+ processThread = new OpenVPNThread(this, argv, nativeLibraryDirectory);
mOpenVPNThread = processThread;
}
@@ -475,21 +576,21 @@ public class OpenVPNService extends VpnService implements StateListener, Callbac
}
new Handler(getMainLooper()).post(new Runnable() {
- @Override
- public void run() {
- if (mDeviceStateReceiver != null)
- unregisterDeviceStateReceiver();
+ @Override
+ public void run() {
+ if (mDeviceStateReceiver != null)
+ unregisterDeviceStateReceiver();
- registerDeviceStateReceiver(mManagement);
- }
- }
+ registerDeviceStateReceiver(mManagement);
+ }
+ }
- );
+ );
}
private void stopOldOpenVPNProcess() {
if (mManagement != null) {
- if (mOpenVPNThread!=null)
+ if (mOpenVPNThread != null)
((OpenVPNThread) mOpenVPNThread).setReplaceConnection();
if (mManagement.stopVPN(true)) {
// an old was asked to exit, wait 1s
@@ -501,6 +602,10 @@ public class OpenVPNService extends VpnService implements StateListener, Callbac
}
}
+ forceStopOpenVpnProcess();
+ }
+
+ public void forceStopOpenVpnProcess() {
synchronized (mProcessLock) {
if (mProcessThread != null) {
mProcessThread.interrupt();
@@ -525,6 +630,16 @@ public class OpenVPNService extends VpnService implements StateListener, Callbac
}
@Override
+ public IBinder asBinder() {
+ return mBinder;
+ }
+
+ @Override
+ public void onCreate() {
+ super.onCreate();
+ }
+
+ @Override
public void onDestroy() {
synchronized (mProcessLock) {
if (mProcessThread != null) {
@@ -538,7 +653,6 @@ public class OpenVPNService extends VpnService implements StateListener, Callbac
// Just in case unregister for state
VpnStatus.removeStateListener(this);
VpnStatus.flushLog();
-
}
private String getTunConfigString() {
@@ -636,7 +750,9 @@ public class OpenVPNService extends VpnService implements StateListener, Callbac
positiveIPv4Routes.add(dnsServer);
}
} catch (Exception e) {
- VpnStatus.logError("Error parsing DNS Server IP: " + mDnslist.get(0));
+ // If it looks like IPv6 ignore error
+ if (!mDnslist.get(0).contains(":"))
+ VpnStatus.logError("Error parsing DNS Server IP: " + mDnslist.get(0));
}
}
@@ -698,7 +814,7 @@ public class OpenVPNService extends VpnService implements StateListener, Callbac
mLocalIPv6 = null;
mDomain = null;
- builder.setConfigureIntent(getLogPendingIntent());
+ builder.setConfigureIntent(getGraphPendingIntent());
try {
//Debug.stopMethodTracing();
@@ -812,7 +928,7 @@ public class OpenVPNService extends VpnService implements StateListener, Callbac
NetworkSpace.ipAddress gatewayIP = new NetworkSpace.ipAddress(new CIDRIP(gateway, 32), false);
if (mLocalIP == null) {
- VpnStatus.logError("Local IP address unset but adding route?! This is broken! Please contact author with log");
+ VpnStatus.logError("Local IP address unset and received. Neither pushed server config nor local config specifies an IP addresses. Opening tun device is most likely going to fail.");
return;
}
NetworkSpace.ipAddress localNet = new NetworkSpace.ipAddress(mLocalIP, true);
@@ -924,7 +1040,7 @@ public class OpenVPNService extends VpnService implements StateListener, Callbac
if (mProcessThread == null && !mNotificationAlwaysVisible)
return;
- boolean lowpriority = false;
+ String channel = NOTIFICATION_CHANNEL_NEWSTATUS_ID;
// Display byte count only after being connected
{
@@ -936,11 +1052,7 @@ public class OpenVPNService extends VpnService implements StateListener, Callbac
mDisplayBytecount = true;
mConnecttime = System.currentTimeMillis();
if (!runningOnAndroidTV())
- lowpriority = true;
-
- String ns = Context.NOTIFICATION_SERVICE;
- NotificationManager mNotificationManager = (NotificationManager) getSystemService(ns);
- mNotificationManager.cancel(OPENVPN_STATUS);
+ channel = NOTIFICATION_CHANNEL_BG_ID;
} else {
mDisplayBytecount = false;
}
@@ -949,13 +1061,16 @@ public class OpenVPNService extends VpnService implements StateListener, Callbac
// This also mean we are no longer connected, ignore bytecount messages until next
// CONNECTED
// Does not work :(
- String msg = getString(resid);
- // showNotification(VpnStatus.getLastCleanLogMessage(this),
- // msg, lowpriority, 0, level);
+ showNotification(VpnStatus.getLastCleanLogMessage(this),
+ VpnStatus.getLastCleanLogMessage(this), channel, 0, level);
}
}
+ @Override
+ public void setConnectedVPN(String uuid) {
+ }
+
private void doSendBroadcast(String state, ConnectionStatus level) {
Intent vpnstatus = new Intent();
vpnstatus.setAction("de.blinkt.openvpn.VPN_STATUS");
@@ -968,13 +1083,13 @@ public class OpenVPNService extends VpnService implements StateListener, Callbac
public void updateByteCount(long in, long out, long diffIn, long diffOut) {
if (mDisplayBytecount) {
String netstat = String.format(getString(R.string.statusline_bytecount),
- humanReadableByteCount(in, false),
- humanReadableByteCount(diffIn / OpenVPNManagement.mBytecountInterval, true),
- humanReadableByteCount(out, false),
- humanReadableByteCount(diffOut / OpenVPNManagement.mBytecountInterval, true));
+ humanReadableByteCount(in, false, getResources()),
+ humanReadableByteCount(diffIn / OpenVPNManagement.mBytecountInterval, true, getResources()),
+ humanReadableByteCount(out, false, getResources()),
+ humanReadableByteCount(diffOut / OpenVPNManagement.mBytecountInterval, true, getResources()));
- boolean lowpriority = !mNotificationAlwaysVisible;
- //showNotification(netstat, null, lowpriority, mConnecttime, LEVEL_CONNECTED);
+
+ showNotification(netstat, null, NOTIFICATION_CHANNEL_BG_ID, mConnecttime, LEVEL_CONNECTED);
}
}
@@ -1009,10 +1124,8 @@ public class OpenVPNService extends VpnService implements StateListener, Callbac
}
}
- public class LocalBinder extends Binder {
- public OpenVPNService getService() {
- // Return this instance of LocalService so clients can call public methods
- return OpenVPNService.this;
- }
+ public void requestInputFromUser(int resid, String needed) {
+ VpnStatus.updateStateString("NEED", "need " + needed, resid, LEVEL_WAITING_FOR_USER_INPUT);
+ showNotification(getString(resid), getString(resid), NOTIFICATION_CHANNEL_NEWSTATUS_ID, 0, LEVEL_WAITING_FOR_USER_INPUT);
}
}
diff --git a/app/src/main/java/de/blinkt/openvpn/core/OpenVPNStatusService.java b/app/src/main/java/de/blinkt/openvpn/core/OpenVPNStatusService.java
new file mode 100644
index 00000000..6df1379a
--- /dev/null
+++ b/app/src/main/java/de/blinkt/openvpn/core/OpenVPNStatusService.java
@@ -0,0 +1,232 @@
+/*
+ * Copyright (c) 2012-2016 Arne Schwabe
+ * Distributed under the GNU GPL v2 with additional terms. For full terms see the file doc/LICENSE.txt
+ */
+
+package de.blinkt.openvpn.core;
+
+import android.app.Service;
+import android.content.Intent;
+import android.os.Build;
+import android.os.Handler;
+import android.os.IBinder;
+import android.os.Message;
+import android.os.ParcelFileDescriptor;
+import android.os.RemoteCallbackList;
+import android.os.RemoteException;
+import android.support.annotation.Nullable;
+import android.util.Pair;
+
+import java.io.DataOutputStream;
+import java.io.IOException;
+import java.lang.ref.WeakReference;
+
+/**
+ * Created by arne on 08.11.16.
+ */
+
+public class OpenVPNStatusService extends Service implements VpnStatus.LogListener, VpnStatus.ByteCountListener, VpnStatus.StateListener {
+ @Nullable
+ @Override
+ public IBinder onBind(Intent intent) {
+ return mBinder;
+ }
+
+
+ static final RemoteCallbackList<IStatusCallbacks> mCallbacks =
+ new RemoteCallbackList<>();
+
+ @Override
+ public void onCreate() {
+ super.onCreate();
+ VpnStatus.addLogListener(this);
+ VpnStatus.addByteCountListener(this);
+ VpnStatus.addStateListener(this);
+ mHandler.setService(this);
+
+ }
+
+ @Override
+ public void onDestroy() {
+ super.onDestroy();
+
+ VpnStatus.removeLogListener(this);
+ VpnStatus.removeByteCountListener(this);
+ VpnStatus.removeStateListener(this);
+ mCallbacks.kill();
+
+ }
+
+ private static final IServiceStatus.Stub mBinder = new IServiceStatus.Stub() {
+
+ @Override
+ public ParcelFileDescriptor registerStatusCallback(IStatusCallbacks cb) throws RemoteException {
+ final LogItem[] logbuffer = VpnStatus.getlogbuffer();
+ if (mLastUpdateMessage != null)
+ sendUpdate(cb, mLastUpdateMessage);
+
+ mCallbacks.register(cb);
+ try {
+ final ParcelFileDescriptor[] pipe = ParcelFileDescriptor.createPipe();
+ new Thread("pushLogs") {
+ @Override
+ public void run() {
+ DataOutputStream fd = new DataOutputStream(new ParcelFileDescriptor.AutoCloseOutputStream(pipe[1]));
+ try {
+ synchronized (VpnStatus.readFileLock) {
+ if (!VpnStatus.readFileLog) {
+ VpnStatus.readFileLock.wait();
+ }
+ }
+ } catch (InterruptedException e) {
+ VpnStatus.logException(e);
+ }
+ try {
+
+ for (LogItem logItem : logbuffer) {
+ byte[] bytes = logItem.getMarschaledBytes();
+ fd.writeShort(bytes.length);
+ fd.write(bytes);
+ }
+ // Mark end
+ fd.writeShort(0x7fff);
+ fd.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+
+ }
+ }.start();
+ return pipe[0];
+ } catch (IOException e) {
+ e.printStackTrace();
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH_MR1) {
+ throw new RemoteException(e.getMessage());
+ }
+ return null;
+ }
+ }
+
+ @Override
+ public void unregisterStatusCallback(IStatusCallbacks cb) throws RemoteException {
+ mCallbacks.unregister(cb);
+ }
+
+ @Override
+ public String getLastConnectedVPN() throws RemoteException {
+ return VpnStatus.getLastConnectedVPNProfile();
+ }
+
+ @Override
+ public void setCachedPassword(String uuid, int type, String password) {
+ PasswordCache.setCachedPassword(uuid, type, password);
+ }
+
+ @Override
+ public TrafficHistory getTrafficHistory() throws RemoteException {
+ return VpnStatus.trafficHistory;
+ }
+
+ };
+
+ @Override
+ public void newLog(LogItem logItem) {
+ Message msg = mHandler.obtainMessage(SEND_NEW_LOGITEM, logItem);
+ msg.sendToTarget();
+ }
+
+ @Override
+ public void updateByteCount(long in, long out, long diffIn, long diffOut) {
+ Message msg = mHandler.obtainMessage(SEND_NEW_BYTECOUNT, Pair.create(in, out));
+ msg.sendToTarget();
+ }
+
+ static UpdateMessage mLastUpdateMessage;
+
+ static class UpdateMessage {
+ public String state;
+ public String logmessage;
+ public ConnectionStatus level;
+ int resId;
+
+ UpdateMessage(String state, String logmessage, int resId, ConnectionStatus level) {
+ this.state = state;
+ this.resId = resId;
+ this.logmessage = logmessage;
+ this.level = level;
+ }
+ }
+
+
+ @Override
+ public void updateState(String state, String logmessage, int localizedResId, ConnectionStatus level) {
+
+ mLastUpdateMessage = new UpdateMessage(state, logmessage, localizedResId, level);
+ Message msg = mHandler.obtainMessage(SEND_NEW_STATE, mLastUpdateMessage);
+ msg.sendToTarget();
+ }
+
+ @Override
+ public void setConnectedVPN(String uuid) {
+ Message msg = mHandler.obtainMessage(SEND_NEW_CONNECTED_VPN, uuid);
+ msg.sendToTarget();
+ }
+
+ private static final OpenVPNStatusHandler mHandler = new OpenVPNStatusHandler();
+
+ private static final int SEND_NEW_LOGITEM = 100;
+ private static final int SEND_NEW_STATE = 101;
+ private static final int SEND_NEW_BYTECOUNT = 102;
+ private static final int SEND_NEW_CONNECTED_VPN = 103;
+
+ private static class OpenVPNStatusHandler extends Handler {
+ WeakReference<OpenVPNStatusService> service = null;
+
+ private void setService(OpenVPNStatusService statusService) {
+ service = new WeakReference<>(statusService);
+ }
+
+ @Override
+ public void handleMessage(Message msg) {
+
+ RemoteCallbackList<IStatusCallbacks> callbacks;
+ if (service == null || service.get() == null)
+ return;
+ callbacks = service.get().mCallbacks;
+ // Broadcast to all clients the new value.
+ final int N = callbacks.beginBroadcast();
+ for (int i = 0; i < N; i++) {
+
+ try {
+ IStatusCallbacks broadcastItem = callbacks.getBroadcastItem(i);
+
+ switch (msg.what) {
+ case SEND_NEW_LOGITEM:
+ broadcastItem.newLogItem((LogItem) msg.obj);
+ break;
+ case SEND_NEW_BYTECOUNT:
+ Pair<Long, Long> inout = (Pair<Long, Long>) msg.obj;
+ broadcastItem.updateByteCount(inout.first, inout.second);
+ break;
+ case SEND_NEW_STATE:
+ sendUpdate(broadcastItem, (UpdateMessage) msg.obj);
+ break;
+
+ case SEND_NEW_CONNECTED_VPN:
+ broadcastItem.connectedVPN((String) msg.obj);
+ break;
+ }
+ } catch (RemoteException e) {
+ // The RemoteCallbackList will take care of removing
+ // the dead object for us.
+ }
+ }
+ callbacks.finishBroadcast();
+ }
+ }
+
+ private static void sendUpdate(IStatusCallbacks broadcastItem,
+ UpdateMessage um) throws RemoteException {
+ broadcastItem.updateStateString(um.state, um.logmessage, um.resId, um.level);
+ }
+} \ No newline at end of file
diff --git a/app/src/main/java/de/blinkt/openvpn/core/OpenVPNThread.java b/app/src/main/java/de/blinkt/openvpn/core/OpenVPNThread.java
index e0c39546..c96f88c4 100644
--- a/app/src/main/java/de/blinkt/openvpn/core/OpenVPNThread.java
+++ b/app/src/main/java/de/blinkt/openvpn/core/OpenVPNThread.java
@@ -19,15 +19,10 @@ import java.util.Collections;
import java.util.Date;
import java.util.LinkedList;
import java.util.Locale;
-import java.util.Map;
-import java.util.Map.Entry;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import se.leap.bitmaskclient.R;
-import de.blinkt.openvpn.VpnProfile;
-import de.blinkt.openvpn.core.VpnStatus.ConnectionStatus;
-import de.blinkt.openvpn.core.VpnStatus.LogItem;
public class OpenVPNThread implements Runnable {
private static final String DUMP_PATH_STRING = "Dump path: ";
@@ -44,15 +39,13 @@ public class OpenVPNThread implements Runnable {
private String mNativeDir;
private OpenVPNService mService;
private String mDumpPath;
- private Map<String, String> mProcessEnv;
private boolean mBrokenPie = false;
private boolean mNoProcessExitStatus = false;
- public OpenVPNThread(OpenVPNService service, String[] argv, Map<String, String> processEnv, String nativelibdir) {
+ public OpenVPNThread(OpenVPNService service, String[] argv, String nativelibdir) {
mArgv = argv;
mNativeDir = nativelibdir;
mService = service;
- mProcessEnv = processEnv;
}
public void stopProcess() {
@@ -68,7 +61,7 @@ public class OpenVPNThread implements Runnable {
public void run() {
try {
Log.i(TAG, "Starting openvpn");
- startOpenVPNThreadArgs(mArgv, mProcessEnv);
+ startOpenVPNThreadArgs(mArgv);
Log.i(TAG, "OpenVPN process exited");
} catch (Exception e) {
VpnStatus.logException("Starting OpenVPN Thread", e);
@@ -94,7 +87,6 @@ public class OpenVPNThread implements Runnable {
mArgv = noPieArgv;
VpnStatus.logInfo("PIE Version could not be executed. Trying no PIE version");
run();
- return;
}
}
@@ -124,7 +116,7 @@ public class OpenVPNThread implements Runnable {
}
}
- private void startOpenVPNThreadArgs(String[] argv, Map<String, String> env) {
+ private void startOpenVPNThreadArgs(String[] argv) {
LinkedList<String> argvlist = new LinkedList<String>();
Collections.addAll(argvlist, argv);
@@ -136,10 +128,6 @@ public class OpenVPNThread implements Runnable {
pb.environment().put("LD_LIBRARY_PATH", lbpath);
- // Add extra variables
- for (Entry<String, String> e : env.entrySet()) {
- pb.environment().put(e.getKey(), e.getValue());
- }
pb.redirectErrorStream(true);
try {
mProcess = pb.start();
@@ -164,6 +152,7 @@ public class OpenVPNThread implements Runnable {
Pattern p = Pattern.compile("(\\d+).(\\d+) ([0-9a-f])+ (.*)");
Matcher m = p.matcher(logline);
+ int logerror = 0;
if (m.matches()) {
int flags = Integer.parseInt(m.group(3), 16);
String msg = m.group(4);
@@ -183,15 +172,22 @@ public class OpenVPNThread implements Runnable {
if (msg.startsWith("MANAGEMENT: CMD"))
logLevel = Math.max(4, logLevel);
+ if ((msg.endsWith("md too weak") && msg.startsWith("OpenSSL: error")) || msg.contains("error:140AB18E"))
+ logerror = 1;
VpnStatus.logMessageOpenVPN(logStatus, logLevel, msg);
+ if (logerror==1)
+ VpnStatus.logError("OpenSSL reproted a certificate with a weak hash, please the in app FAQ about weak hashes");
+
} else {
VpnStatus.logInfo("P:" + logline);
}
- }
-
- } catch (IOException e) {
+ if (Thread.interrupted()) {
+ throw new InterruptedException("OpenVpn process was killed form java code");
+ }
+ }
+ } catch (InterruptedException | IOException e) {
VpnStatus.logException("Error reading from output of OpenVPN process", e);
stopProcess();
}
diff --git a/app/src/main/java/de/blinkt/openvpn/core/OpenVpnManagementThread.java b/app/src/main/java/de/blinkt/openvpn/core/OpenVpnManagementThread.java
index 569a3846..492e8913 100644
--- a/app/src/main/java/de/blinkt/openvpn/core/OpenVpnManagementThread.java
+++ b/app/src/main/java/de/blinkt/openvpn/core/OpenVpnManagementThread.java
@@ -9,8 +9,10 @@ import android.content.Context;
import android.net.LocalServerSocket;
import android.net.LocalSocket;
import android.net.LocalSocketAddress;
+import android.os.Handler;
import android.os.ParcelFileDescriptor;
import android.support.annotation.NonNull;
+import android.text.TextUtils;
import android.util.Log;
import junit.framework.Assert;
@@ -31,11 +33,11 @@ import java.util.Vector;
import se.leap.bitmaskclient.BuildConfig;
import se.leap.bitmaskclient.R;
import de.blinkt.openvpn.VpnProfile;
-import de.blinkt.openvpn.core.VpnStatus.ConnectionStatus;
public class OpenVpnManagementThread implements Runnable, OpenVPNManagement {
private static final String TAG = "openvpn";
+ private final Handler mResumeHandler;
private LocalSocket mSocket;
private VpnProfile mProfile;
private OpenVPNService mOpenVPNService;
@@ -54,8 +56,19 @@ public class OpenVpnManagementThread implements Runnable, OpenVPNManagement {
public OpenVpnManagementThread(VpnProfile profile, OpenVPNService openVpnService) {
mProfile = profile;
mOpenVPNService = openVpnService;
+ mResumeHandler = new Handler(openVpnService.getMainLooper());
+
}
+ private Runnable mResumeHoldRunnable = new Runnable() {
+ @Override
+ public void run() {
+ if (shouldBeRunning()) {
+ releaseHoldCmd();
+ }
+ }
+ };
+
public boolean openManagementInterface(@NonNull Context c) {
// Could take a while to open connection
int tries = 8;
@@ -92,15 +105,21 @@ public class OpenVpnManagementThread implements Runnable, OpenVPNManagement {
}
- public void managmentCommand(String cmd) {
+ /**
+ * @param cmd command to write to management socket
+ * @return true if command have been sent
+ */
+ public boolean managmentCommand(String cmd) {
try {
if (mSocket != null && mSocket.getOutputStream() != null) {
mSocket.getOutputStream().write(cmd.getBytes());
mSocket.getOutputStream().flush();
+ return true;
}
} catch (IOException e) {
// Ignore socket stack traces
}
+ return false;
}
@@ -118,13 +137,20 @@ public class OpenVpnManagementThread implements Runnable, OpenVPNManagement {
// Wait for a client to connect
mSocket = mServerSocket.accept();
InputStream instream = mSocket.getInputStream();
+
+
// Close the management socket after client connected
+ try {
+ mServerSocket.close();
+ } catch (IOException e) {
+ VpnStatus.logException(e);
+ }
- mServerSocket.close();
// Closing one of the two sockets also closes the other
//mServerSocketLocal.close();
while (true) {
+
int numbytesread = instream.read(buffer);
if (numbytesread == -1)
return;
@@ -215,7 +241,7 @@ public class OpenVpnManagementThread implements Runnable, OpenVPNManagement {
processPWCommand(argument);
break;
case "HOLD":
- handleHold();
+ handleHold(argument);
break;
case "NEED-OK":
processNeedCommand(argument);
@@ -305,19 +331,26 @@ public class OpenVpnManagementThread implements Runnable, OpenVPNManagement {
return mPauseCallback.shouldBeRunning();
}
- private void handleHold() {
+ private void handleHold(String argument) {
+ mWaitingForRelease = true;
+ int waittime = Integer.parseInt(argument.split(":")[1]);
if (shouldBeRunning()) {
- releaseHoldCmd();
- } else {
- mWaitingForRelease = true;
+ if (waittime > 1)
+ VpnStatus.updateStateString("CONNECTRETRY", String.valueOf(waittime),
+ R.string.state_waitconnectretry, ConnectionStatus.LEVEL_CONNECTING_NO_SERVER_REPLY_YET);
+ mResumeHandler.postDelayed(mResumeHoldRunnable, waittime * 1000);
+ if (waittime > 5)
+ VpnStatus.logInfo(R.string.state_waitconnectretry, String.valueOf(waittime));
+ else
+ VpnStatus.logDebug(R.string.state_waitconnectretry, String.valueOf(waittime));
+ } else {
VpnStatus.updateStatePause(lastPauseReason);
-
-
}
}
private void releaseHoldCmd() {
+ mResumeHandler.removeCallbacks(mResumeHoldRunnable);
if ((System.currentTimeMillis() - mLastHoldRelease) < 5000) {
try {
Thread.sleep(3000);
@@ -402,6 +435,7 @@ public class OpenVpnManagementThread implements Runnable, OpenVPNManagement {
protectFileDescriptor(fdtoprotect);
break;
case "DNSSERVER":
+ case "DNS6SERVER":
mOpenVPNService.addDNS(extra);
break;
case "DNSDOMAIN":
@@ -529,15 +563,17 @@ public class OpenVpnManagementThread implements Runnable, OpenVPNManagement {
if (needed.equals("Private Key")) {
pw = mProfile.getPasswordPrivateKey();
} else if (needed.equals("Auth")) {
+ pw = mProfile.getPasswordAuth();
+
String usercmd = String.format("username '%s' %s\n",
needed, VpnProfile.openVpnEscape(mProfile.mUsername));
managmentCommand(usercmd);
- pw = mProfile.getPasswordAuth();
}
if (pw != null) {
String cmd = String.format("password '%s' %s\n", needed, VpnProfile.openVpnEscape(pw));
managmentCommand(cmd);
} else {
+ mOpenVPNService.requestInputFromUser(R.string.password, needed);
VpnStatus.logError(String.format("Openvpn requires Authentication type '%s' but no password/key information available", needed));
}
@@ -553,8 +589,7 @@ public class OpenVpnManagementThread implements Runnable, OpenVPNManagement {
synchronized (active) {
boolean sendCMD = false;
for (OpenVpnManagementThread mt : active) {
- mt.managmentCommand("signal SIGINT\n");
- sendCMD = true;
+ sendCMD = mt.managmentCommand("signal SIGINT\n");
try {
if (mt.mSocket != null)
mt.mSocket.close();
@@ -571,7 +606,7 @@ public class OpenVpnManagementThread implements Runnable, OpenVPNManagement {
if (mWaitingForRelease)
releaseHold();
else if (samenetwork)
- managmentCommand("network-change samenetwork\n");
+ managmentCommand("network-change\n");
else
managmentCommand("network-change\n");
}
@@ -582,6 +617,7 @@ public class OpenVpnManagementThread implements Runnable, OpenVPNManagement {
}
public void signalusr1() {
+ mResumeHandler.removeCallbacks(mResumeHoldRunnable);
if (!mWaitingForRelease)
managmentCommand("signal SIGUSR1\n");
else
@@ -624,8 +660,12 @@ public class OpenVpnManagementThread implements Runnable, OpenVPNManagement {
@Override
public boolean stopVPN(boolean replaceConnection) {
- mShuttingDown = true;
- return stopOpenVPN();
+ boolean stopSucceed = stopOpenVPN();
+ if (stopSucceed) {
+ mShuttingDown = true;
+
+ }
+ return stopSucceed;
}
}
diff --git a/app/src/main/java/de/blinkt/openvpn/core/PasswordCache.java b/app/src/main/java/de/blinkt/openvpn/core/PasswordCache.java
new file mode 100644
index 00000000..179a8a7b
--- /dev/null
+++ b/app/src/main/java/de/blinkt/openvpn/core/PasswordCache.java
@@ -0,0 +1,61 @@
+/*
+ * Copyright (c) 2012-2016 Arne Schwabe
+ * Distributed under the GNU GPL v2 with additional terms. For full terms see the file doc/LICENSE.txt
+ */
+
+package de.blinkt.openvpn.core;
+
+import java.util.UUID;
+
+/**
+ * Created by arne on 15.12.16.
+ */
+
+public class PasswordCache {
+ public static final int PCKS12ORCERTPASSWORD = 2;
+ public static final int AUTHPASSWORD = 3;
+ private static PasswordCache mInstance;
+ final private UUID mUuid;
+ private String mKeyOrPkcs12Password;
+ private String mAuthPassword;
+
+ private PasswordCache(UUID uuid) {
+ mUuid = uuid;
+ }
+
+ public static PasswordCache getInstance(UUID uuid) {
+ if (mInstance == null || !mInstance.mUuid.equals(uuid)) {
+ mInstance = new PasswordCache(uuid);
+ }
+ return mInstance;
+ }
+
+ public static String getPKCS12orCertificatePassword(UUID uuid, boolean resetPw) {
+ String pwcopy = getInstance(uuid).mKeyOrPkcs12Password;
+ if (resetPw)
+ getInstance(uuid).mKeyOrPkcs12Password = null;
+ return pwcopy;
+ }
+
+
+ public static String getAuthPassword(UUID uuid, boolean resetPW) {
+ String pwcopy = getInstance(uuid).mAuthPassword;
+ if (resetPW)
+ getInstance(uuid).mAuthPassword = null;
+ return pwcopy;
+ }
+
+ public static void setCachedPassword(String uuid, int type, String password) {
+ PasswordCache instance = getInstance(UUID.fromString(uuid));
+ switch (type) {
+ case PCKS12ORCERTPASSWORD:
+ instance.mKeyOrPkcs12Password = password;
+ break;
+ case AUTHPASSWORD:
+ instance.mAuthPassword = password;
+ break;
+ }
+ }
+
+
+}
diff --git a/app/src/main/java/de/blinkt/openvpn/core/Preferences.java b/app/src/main/java/de/blinkt/openvpn/core/Preferences.java
new file mode 100644
index 00000000..76a064ff
--- /dev/null
+++ b/app/src/main/java/de/blinkt/openvpn/core/Preferences.java
@@ -0,0 +1,31 @@
+/*
+ * Copyright (c) 2012-2016 Arne Schwabe
+ * Distributed under the GNU GPL v2 with additional terms. For full terms see the file doc/LICENSE.txt
+ */
+
+package de.blinkt.openvpn.core;
+
+import android.content.Context;
+import android.content.SharedPreferences;
+
+/**
+ * Created by arne on 08.01.17.
+ */
+
+// Until I find a good solution
+
+public class Preferences {
+
+ static SharedPreferences getSharedPreferencesMulti(String name, Context c) {
+ return c.getSharedPreferences(name, Context.MODE_MULTI_PROCESS | Context.MODE_PRIVATE);
+
+ }
+
+
+ public static SharedPreferences getDefaultSharedPreferences(Context c) {
+ return c.getSharedPreferences(c.getPackageName() + "_preferences", Context.MODE_MULTI_PROCESS | Context.MODE_PRIVATE);
+
+ }
+
+
+}
diff --git a/app/src/main/java/de/blinkt/openvpn/core/ProfileManager.java b/app/src/main/java/de/blinkt/openvpn/core/ProfileManager.java
index 4f9c219b..f776fc2e 100644
--- a/app/src/main/java/de/blinkt/openvpn/core/ProfileManager.java
+++ b/app/src/main/java/de/blinkt/openvpn/core/ProfileManager.java
@@ -9,7 +9,6 @@ import android.app.Activity;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
-import android.preference.PreferenceManager;
import java.io.IOException;
import java.io.ObjectInputStream;
@@ -17,7 +16,9 @@ import java.io.ObjectOutputStream;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
+import java.util.Locale;
import java.util.Set;
+import java.util.UUID;
import de.blinkt.openvpn.VpnProfile;
@@ -25,6 +26,7 @@ public class ProfileManager {
private static final String PREFS_NAME = "VPNList";
private static final String LAST_CONNECTED_PROFILE = "lastConnectedProfile";
+ private static final String TEMPORARY_PROFILE_FILENAME = "temporary-vpn-profile";
private static ProfileManager instance;
private static VpnProfile mLastConnectedVpn = null;
@@ -59,30 +61,31 @@ public class ProfileManager {
}
public static void setConntectedVpnProfileDisconnected(Context c) {
- SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(c);
+ SharedPreferences prefs = Preferences.getDefaultSharedPreferences(c);
Editor prefsedit = prefs.edit();
prefsedit.putString(LAST_CONNECTED_PROFILE, null);
prefsedit.apply();
}
- public static void setConnectedVpnProfile(Context c, VpnProfile connectedrofile) {
- SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(c);
+ /**
+ * Sets the profile that is connected (to connect if the service restarts)
+ */
+ public static void setConnectedVpnProfile(Context c, VpnProfile connectedProfile) {
+ SharedPreferences prefs = Preferences.getDefaultSharedPreferences(c);
Editor prefsedit = prefs.edit();
- prefsedit.putString(LAST_CONNECTED_PROFILE, connectedrofile.getUUIDString());
+ prefsedit.putString(LAST_CONNECTED_PROFILE, connectedProfile.getUUIDString());
prefsedit.apply();
- mLastConnectedVpn = connectedrofile;
+ mLastConnectedVpn = connectedProfile;
}
- public static VpnProfile getLastConnectedProfile(Context c, boolean onBoot) {
- SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(c);
-
- boolean useStartOnBoot = prefs.getBoolean("restartvpnonboot", false);
-
- if (onBoot && !useStartOnBoot)
- return null;
+ /**
+ * Returns the profile that was last connected (to connect if the service restarts)
+ */
+ public static VpnProfile getLastConnectedProfile(Context c) {
+ SharedPreferences prefs = Preferences.getDefaultSharedPreferences(c);
String lastConnectedProfile = prefs.getString(LAST_CONNECTED_PROFILE, null);
if (lastConnectedProfile != null)
@@ -106,7 +109,7 @@ public class ProfileManager {
}
public void saveProfileList(Context context) {
- SharedPreferences sharedprefs = context.getSharedPreferences(PREFS_NAME, Activity.MODE_PRIVATE);
+ SharedPreferences sharedprefs = Preferences.getSharedPreferencesMulti(PREFS_NAME, context);
Editor editor = sharedprefs.edit();
editor.putStringSet("vpnlist", profiles.keySet());
@@ -124,24 +127,35 @@ public class ProfileManager {
}
- public static void setTemporaryProfile(VpnProfile tmp) {
+ public static void setTemporaryProfile(Context c, VpnProfile tmp) {
ProfileManager.tmpprofile = tmp;
+ saveProfile(c, tmp, true, true);
}
- public static boolean isTempProfile()
- {
- return mLastConnectedVpn == tmpprofile;
+ public static boolean isTempProfile() {
+ return mLastConnectedVpn != null && mLastConnectedVpn == tmpprofile;
}
-
public void saveProfile(Context context, VpnProfile profile) {
- ObjectOutputStream vpnfile;
+ saveProfile(context, profile, true, false);
+ }
+
+ private static void saveProfile(Context context, VpnProfile profile, boolean updateVersion, boolean isTemporary) {
+
+ if (updateVersion)
+ profile.mVersion += 1;
+ ObjectOutputStream vpnFile;
+
+ String filename = profile.getUUID().toString() + ".vp";
+ if (isTemporary)
+ filename = TEMPORARY_PROFILE_FILENAME + ".vp";
+
try {
- vpnfile = new ObjectOutputStream(context.openFileOutput((profile.getUUID().toString() + ".vp"), Activity.MODE_PRIVATE));
+ vpnFile = new ObjectOutputStream(context.openFileOutput(filename, Activity.MODE_PRIVATE));
- vpnfile.writeObject(profile);
- vpnfile.flush();
- vpnfile.close();
+ vpnFile.writeObject(profile);
+ vpnFile.flush();
+ vpnFile.close();
} catch (IOException e) {
VpnStatus.logException("saving VPN profile", e);
throw new RuntimeException(e);
@@ -151,11 +165,13 @@ public class ProfileManager {
private void loadVPNList(Context context) {
profiles = new HashMap<>();
- SharedPreferences listpref = context.getSharedPreferences(PREFS_NAME, Activity.MODE_PRIVATE);
+ SharedPreferences listpref = Preferences.getSharedPreferencesMulti(PREFS_NAME, context);
Set<String> vlist = listpref.getStringSet("vpnlist", null);
if (vlist == null) {
vlist = new HashSet<>();
}
+ // Always try to load the temporary profile
+ vlist.add(TEMPORARY_PROFILE_FILENAME);
for (String vpnentry : vlist) {
try {
@@ -167,10 +183,15 @@ public class ProfileManager {
continue;
vp.upgradeProfile();
- profiles.put(vp.getUUID().toString(), vp);
+ if (vpnentry.equals(TEMPORARY_PROFILE_FILENAME)) {
+ tmpprofile = vp;
+ } else {
+ profiles.put(vp.getUUID().toString(), vp);
+ }
} catch (IOException | ClassNotFoundException e) {
- VpnStatus.logException("Loading VPN List", e);
+ if (!vpnentry.equals(TEMPORARY_PROFILE_FILENAME))
+ VpnStatus.logException("Loading VPN List", e);
}
}
}
@@ -187,12 +208,49 @@ public class ProfileManager {
}
public static VpnProfile get(Context context, String profileUUID) {
+ return get(context, profileUUID, 0, 10);
+ }
+
+ public static VpnProfile get(Context context, String profileUUID, int version, int tries) {
checkInstance(context);
- return get(profileUUID);
+ VpnProfile profile = get(profileUUID);
+ int tried = 0;
+ while ((profile == null || profile.mVersion < version) && (tried++ < tries)) {
+ try {
+ Thread.sleep(100);
+ } catch (InterruptedException ignored) {
+ }
+ instance.loadVPNList(context);
+ profile = get(profileUUID);
+ int ver = profile == null ? -1 : profile.mVersion;
+ }
+
+ if (tried > 5)
+
+ {
+ int ver = profile == null ? -1 : profile.mVersion;
+ VpnStatus.logError(String.format(Locale.US, "Used x %d tries to get current version (%d/%d) of the profile", tried, ver, version));
+ }
+ return profile;
}
public static VpnProfile getLastConnectedVpn() {
return mLastConnectedVpn;
}
+ public static VpnProfile getAlwaysOnVPN(Context context) {
+ checkInstance(context);
+ SharedPreferences prefs = Preferences.getDefaultSharedPreferences(context);
+
+ String uuid = prefs.getString("alwaysOnVpn", null);
+ return get(uuid);
+
+ }
+
+ public static void updateLRU(Context c, VpnProfile profile) {
+ profile.mLastUsed = System.currentTimeMillis();
+ // LRU does not change the profile, no need for the service to refresh
+ if (profile!=tmpprofile)
+ saveProfile(c, profile, false, false);
+ }
}
diff --git a/app/src/main/java/de/blinkt/openvpn/core/StatusListener.java b/app/src/main/java/de/blinkt/openvpn/core/StatusListener.java
new file mode 100644
index 00000000..5d0b7037
--- /dev/null
+++ b/app/src/main/java/de/blinkt/openvpn/core/StatusListener.java
@@ -0,0 +1,109 @@
+/*
+ * Copyright (c) 2012-2016 Arne Schwabe
+ * Distributed under the GNU GPL v2 with additional terms. For full terms see the file doc/LICENSE.txt
+ */
+
+package de.blinkt.openvpn.core;
+
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.Intent;
+import android.content.ServiceConnection;
+import android.os.IBinder;
+import android.os.ParcelFileDescriptor;
+import android.os.RemoteException;
+
+import java.io.DataInputStream;
+import java.io.File;
+import java.io.IOException;
+
+/**
+ * Created by arne on 09.11.16.
+ */
+
+public class StatusListener {
+ private File mCacheDir;
+ private ServiceConnection mConnection = new ServiceConnection() {
+
+
+ @Override
+ public void onServiceConnected(ComponentName className,
+ IBinder service) {
+ // We've bound to LocalService, cast the IBinder and get LocalService instance
+ IServiceStatus serviceStatus = IServiceStatus.Stub.asInterface(service);
+ try {
+ /* Check if this a local service ... */
+ if (service.queryLocalInterface("de.blinkt.openvpn.core.IServiceStatus") == null) {
+ // Not a local service
+ VpnStatus.setConnectedVPNProfile(serviceStatus.getLastConnectedVPN());
+ VpnStatus.setTrafficHistory(serviceStatus.getTrafficHistory());
+ ParcelFileDescriptor pfd = serviceStatus.registerStatusCallback(mCallback);
+ DataInputStream fd = new DataInputStream(new ParcelFileDescriptor.AutoCloseInputStream(pfd));
+
+ short len = fd.readShort();
+ byte[] buf = new byte[65336];
+ while (len != 0x7fff) {
+ fd.readFully(buf, 0, len);
+ LogItem logitem = new LogItem(buf, len);
+ VpnStatus.newLogItem(logitem, false);
+ len = fd.readShort();
+ }
+ fd.close();
+
+
+
+ } else {
+ VpnStatus.initLogCache(mCacheDir);
+ }
+
+ } catch (RemoteException | IOException e) {
+ e.printStackTrace();
+ VpnStatus.logException(e);
+ }
+ }
+
+ @Override
+ public void onServiceDisconnected(ComponentName arg0) {
+
+ }
+
+ };
+
+ void init(Context c) {
+
+ Intent intent = new Intent(c, OpenVPNStatusService.class);
+ intent.setAction(OpenVPNService.START_SERVICE);
+ mCacheDir = c.getCacheDir();
+
+ c.bindService(intent, mConnection, Context.BIND_AUTO_CREATE);
+
+
+ }
+
+
+ private IStatusCallbacks mCallback = new IStatusCallbacks.Stub()
+
+ {
+ @Override
+ public void newLogItem(LogItem item) throws RemoteException {
+ VpnStatus.newLogItem(item);
+ }
+
+ @Override
+ public void updateStateString(String state, String msg, int resid, ConnectionStatus
+ level) throws RemoteException {
+ VpnStatus.updateStateString(state, msg, resid, level);
+ }
+
+ @Override
+ public void updateByteCount(long inBytes, long outBytes) throws RemoteException {
+ VpnStatus.updateByteCount(inBytes, outBytes);
+ }
+
+ @Override
+ public void connectedVPN(String uuid) throws RemoteException {
+ VpnStatus.setConnectedVPNProfile(uuid);
+ }
+ };
+
+}
diff --git a/app/src/main/java/de/blinkt/openvpn/core/TrafficHistory.java b/app/src/main/java/de/blinkt/openvpn/core/TrafficHistory.java
new file mode 100644
index 00000000..6ba35066
--- /dev/null
+++ b/app/src/main/java/de/blinkt/openvpn/core/TrafficHistory.java
@@ -0,0 +1,243 @@
+/*
+ * Copyright (c) 2012-2017 Arne Schwabe
+ * Distributed under the GNU GPL v2 with additional terms. For full terms see the file doc/LICENSE.txt
+ */
+
+package de.blinkt.openvpn.core;
+
+import android.os.Parcel;
+import android.os.Parcelable;
+
+import java.util.HashSet;
+import java.util.LinkedList;
+import java.util.Vector;
+
+import static java.lang.Math.max;
+
+/**
+ * Created by arne on 23.05.17.
+ */
+
+public class TrafficHistory implements Parcelable {
+
+ public static final long PERIODS_TO_KEEP = 5;
+ public static final int TIME_PERIOD_MINTUES = 60 * 1000;
+ public static final int TIME_PERIOD_HOURS = 3600 * 1000;
+ private LinkedList<TrafficDatapoint> trafficHistorySeconds = new LinkedList<>();
+ private LinkedList<TrafficDatapoint> trafficHistoryMinutes = new LinkedList<>();
+ private LinkedList<TrafficDatapoint> trafficHistoryHours = new LinkedList<>();
+
+ private TrafficDatapoint lastSecondUsedForMinute;
+ private TrafficDatapoint lastMinuteUsedForHours;
+
+ public TrafficHistory() {
+
+ }
+
+ protected TrafficHistory(Parcel in) {
+ in.readList(trafficHistorySeconds, getClass().getClassLoader());
+ in.readList(trafficHistoryMinutes, getClass().getClassLoader());
+ in.readList(trafficHistoryHours, getClass().getClassLoader());
+ lastSecondUsedForMinute = in.readParcelable(getClass().getClassLoader());
+ lastMinuteUsedForHours = in.readParcelable(getClass().getClassLoader());
+ }
+
+ public static final Creator<TrafficHistory> CREATOR = new Creator<TrafficHistory>() {
+ @Override
+ public TrafficHistory createFromParcel(Parcel in) {
+ return new TrafficHistory(in);
+ }
+
+ @Override
+ public TrafficHistory[] newArray(int size) {
+ return new TrafficHistory[size];
+ }
+ };
+
+ public LastDiff getLastDiff(TrafficDatapoint tdp) {
+
+ TrafficDatapoint lasttdp;
+
+
+ if (trafficHistorySeconds.size() == 0)
+ lasttdp = new TrafficDatapoint(0, 0, System.currentTimeMillis());
+
+ else
+ lasttdp = trafficHistorySeconds.getLast();
+
+ if (tdp == null) {
+ tdp = lasttdp;
+ if (trafficHistorySeconds.size() < 2)
+ lasttdp = tdp;
+ else {
+ trafficHistorySeconds.descendingIterator().next();
+ tdp = trafficHistorySeconds.descendingIterator().next();
+ }
+ }
+
+ return new LastDiff(lasttdp, tdp);
+ }
+
+ @Override
+ public int describeContents() {
+ return 0;
+ }
+
+ @Override
+ public void writeToParcel(Parcel dest, int flags) {
+ dest.writeList(trafficHistorySeconds);
+ dest.writeList(trafficHistoryMinutes);
+ dest.writeList(trafficHistoryHours);
+ dest.writeParcelable(lastSecondUsedForMinute, 0);
+ dest.writeParcelable(lastMinuteUsedForHours, 0);
+
+ }
+
+ public LinkedList<TrafficDatapoint> getHours() {
+ return trafficHistoryHours;
+ }
+
+ public LinkedList<TrafficDatapoint> getMinutes() {
+ return trafficHistoryMinutes;
+ }
+
+ public LinkedList<TrafficDatapoint> getSeconds() {
+ return trafficHistorySeconds;
+ }
+
+ public static LinkedList<TrafficDatapoint> getDummyList() {
+ LinkedList<TrafficDatapoint> list = new LinkedList<>();
+ list.add(new TrafficDatapoint(0, 0, System.currentTimeMillis()));
+ return list;
+ }
+
+
+ public static class TrafficDatapoint implements Parcelable {
+ private TrafficDatapoint(long inBytes, long outBytes, long timestamp) {
+ this.in = inBytes;
+ this.out = outBytes;
+ this.timestamp = timestamp;
+ }
+
+ public final long timestamp;
+ public final long in;
+ public final long out;
+
+ private TrafficDatapoint(Parcel in) {
+ timestamp = in.readLong();
+ this.in = in.readLong();
+ out = in.readLong();
+ }
+
+ public static final Creator<TrafficDatapoint> CREATOR = new Creator<TrafficDatapoint>() {
+ @Override
+ public TrafficDatapoint createFromParcel(Parcel in) {
+ return new TrafficDatapoint(in);
+ }
+
+ @Override
+ public TrafficDatapoint[] newArray(int size) {
+ return new TrafficDatapoint[size];
+ }
+ };
+
+ @Override
+ public int describeContents() {
+ return 0;
+ }
+
+ @Override
+ public void writeToParcel(Parcel dest, int flags) {
+ dest.writeLong(timestamp);
+ dest.writeLong(in);
+ dest.writeLong(out);
+ }
+ }
+
+ LastDiff add(long in, long out) {
+ TrafficDatapoint tdp = new TrafficDatapoint(in, out, System.currentTimeMillis());
+
+ LastDiff diff = getLastDiff(tdp);
+ addDataPoint(tdp);
+ return diff;
+ }
+
+ private void addDataPoint(TrafficDatapoint tdp) {
+ trafficHistorySeconds.add(tdp);
+
+ if (lastSecondUsedForMinute == null) {
+ lastSecondUsedForMinute = new TrafficDatapoint(0, 0, 0);
+ lastMinuteUsedForHours = new TrafficDatapoint(0, 0, 0);
+ }
+
+ removeAndAverage(tdp, true);
+ }
+
+ private void removeAndAverage(TrafficDatapoint newTdp, boolean seconds) {
+ HashSet<TrafficDatapoint> toRemove = new HashSet<>();
+ Vector<TrafficDatapoint> toAverage = new Vector<>();
+
+ long timePeriod;
+ LinkedList<TrafficDatapoint> tpList, nextList;
+ TrafficDatapoint lastTsPeriod;
+
+ if (seconds) {
+ timePeriod = TIME_PERIOD_MINTUES;
+ tpList = trafficHistorySeconds;
+ nextList = trafficHistoryMinutes;
+ lastTsPeriod = lastSecondUsedForMinute;
+ } else {
+ timePeriod = TIME_PERIOD_HOURS;
+ tpList = trafficHistoryMinutes;
+ nextList = trafficHistoryHours;
+ lastTsPeriod = lastMinuteUsedForHours;
+ }
+
+ if (newTdp.timestamp / timePeriod > (lastTsPeriod.timestamp / timePeriod)) {
+ nextList.add(newTdp);
+
+ if (seconds) {
+ lastSecondUsedForMinute = newTdp;
+ removeAndAverage(newTdp, false);
+ } else
+ lastMinuteUsedForHours = newTdp;
+
+ for (TrafficDatapoint tph : tpList) {
+ // List is iteratered from oldest to newest, remembert first one that we did not
+ if ((newTdp.timestamp - tph.timestamp) / timePeriod >= PERIODS_TO_KEEP)
+ toRemove.add(tph);
+ }
+ tpList.removeAll(toRemove);
+ }
+ }
+
+ static class LastDiff {
+
+ final private TrafficDatapoint tdp;
+ final private TrafficDatapoint lasttdp;
+
+ private LastDiff(TrafficDatapoint lasttdp, TrafficDatapoint tdp) {
+ this.lasttdp = lasttdp;
+ this.tdp = tdp;
+ }
+
+ public long getDiffOut() {
+ return max(0, tdp.out - lasttdp.out);
+ }
+
+ public long getDiffIn() {
+ return max(0, tdp.in - lasttdp.in);
+ }
+
+ public long getIn() {
+ return tdp.in;
+ }
+
+ public long getOut() {
+ return tdp.out;
+ }
+
+ }
+
+
+} \ No newline at end of file
diff --git a/app/src/main/java/de/blinkt/openvpn/core/VPNLaunchHelper.java b/app/src/main/java/de/blinkt/openvpn/core/VPNLaunchHelper.java
index 78f462e7..f3b40381 100644
--- a/app/src/main/java/de/blinkt/openvpn/core/VPNLaunchHelper.java
+++ b/app/src/main/java/de/blinkt/openvpn/core/VPNLaunchHelper.java
@@ -6,6 +6,7 @@
package de.blinkt.openvpn.core;
import android.annotation.TargetApi;
+import android.app.NotificationManager;
import android.content.Context;
import android.content.Intent;
import android.os.Build;
@@ -26,7 +27,6 @@ public class VPNLaunchHelper {
private static final String OVPNCONFIGFILE = "android.conf";
-
private static String writeMiniVPN(Context context) {
String[] abis;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
@@ -38,36 +38,34 @@ public class VPNLaunchHelper {
String nativeAPI = NativeUtils.getNativeAPI();
if (!nativeAPI.equals(abis[0])) {
VpnStatus.logWarning(R.string.abi_mismatch, Arrays.toString(abis), nativeAPI);
- abis = new String[] {nativeAPI};
+ abis = new String[]{nativeAPI};
}
- for (String abi: abis) {
+ for (String abi : abis) {
- File vpnExecutable = new File(context.getCacheDir(), getMiniVPNExecutableName() + "." + abi);
+ File vpnExecutable = new File(context.getCacheDir(), "c_" + getMiniVPNExecutableName() + "." + abi);
if ((vpnExecutable.exists() && vpnExecutable.canExecute()) || writeMiniVPNBinary(context, abi, vpnExecutable)) {
return vpnExecutable.getPath();
}
}
return null;
- }
+ }
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
private static String[] getSupportedABIsLollipop() {
return Build.SUPPORTED_ABIS;
}
- private static String getMiniVPNExecutableName()
- {
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN)
+ private static String getMiniVPNExecutableName() {
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN)
return MINIPIEVPN;
else
return MININONPIEVPN;
}
- public static String[] replacePieWithNoPie(String[] mArgv)
- {
+ public static String[] replacePieWithNoPie(String[] mArgv) {
mArgv[0] = mArgv[0].replace(MINIPIEVPN, MININONPIEVPN);
return mArgv;
}
@@ -79,7 +77,7 @@ public class VPNLaunchHelper {
String binaryName = writeMiniVPN(c);
// Add fixed paramenters
//args.add("/data/data/de.blinkt.openvpn/lib/openvpn");
- if(binaryName==null) {
+ if (binaryName == null) {
VpnStatus.logError("Error writing minivpn binary");
return null;
}
@@ -98,8 +96,7 @@ public class VPNLaunchHelper {
try {
mvpn = context.getAssets().open(getMiniVPNExecutableName() + "." + abi);
- }
- catch (IOException errabi) {
+ } catch (IOException errabi) {
VpnStatus.logInfo("Failed getting assets for archicture " + abi);
return false;
}
@@ -107,16 +104,16 @@ public class VPNLaunchHelper {
FileOutputStream fout = new FileOutputStream(mvpnout);
- byte buf[]= new byte[4096];
+ byte buf[] = new byte[4096];
int lenread = mvpn.read(buf);
- while(lenread> 0) {
+ while (lenread > 0) {
fout.write(buf, 0, lenread);
lenread = mvpn.read(buf);
}
fout.close();
- if(!mvpnout.setExecutable(true)) {
+ if (!mvpnout.setExecutable(true)) {
VpnStatus.logError("Failed to make OpenVPN executable");
return false;
}
@@ -129,14 +126,20 @@ public class VPNLaunchHelper {
}
}
-
- public static void startOpenVpn(VpnProfile startprofile, Context context) {
- Intent startVPN = startprofile.prepareStartService(context);
- if(startVPN!=null)
- context.startService(startVPN);
- }
+ public static void startOpenVpn(VpnProfile startprofile, Context context) {
+ Intent startVPN = startprofile.prepareStartService(context);
+ if (startVPN != null) {
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)
+ //noinspection NewApi
+ context.startForegroundService(startVPN);
+ else
+ context.startService(startVPN);
+
+ }
+ }
+
public static String getConfigFilePath(Context context) {
return context.getCacheDir().getAbsolutePath() + "/" + OVPNCONFIGFILE;
diff --git a/app/src/main/java/de/blinkt/openvpn/core/VpnStatus.java b/app/src/main/java/de/blinkt/openvpn/core/VpnStatus.java
index 1e2ccba3..a9cc4f18 100644
--- a/app/src/main/java/de/blinkt/openvpn/core/VpnStatus.java
+++ b/app/src/main/java/de/blinkt/openvpn/core/VpnStatus.java
@@ -5,45 +5,27 @@
package de.blinkt.openvpn.core;
-import android.annotation.SuppressLint;
import android.content.Context;
-import android.content.pm.PackageInfo;
-import android.content.pm.PackageManager;
-import android.content.pm.PackageManager.NameNotFoundException;
-import android.content.pm.Signature;
import android.os.Build;
import android.os.HandlerThread;
import android.os.Message;
-import android.os.Parcel;
-import android.os.Parcelable;
-import android.text.TextUtils;
-import android.util.Log;
-import java.io.ByteArrayInputStream;
-import java.io.DataOutputStream;
import java.io.File;
-import java.io.OutputStream;
import java.io.PrintWriter;
import java.io.StringWriter;
-import java.security.MessageDigest;
-import java.security.NoSuchAlgorithmException;
-import java.security.cert.CertificateException;
-import java.security.cert.CertificateFactory;
-import java.security.cert.X509Certificate;
-import java.util.Arrays;
-import java.util.FormatFlagsConversionMismatchException;
import java.util.LinkedList;
import java.util.Locale;
-import java.util.UnknownFormatConversionException;
+import java.util.Queue;
import java.util.Vector;
+import java.util.concurrent.ConcurrentLinkedQueue;
-import se.leap.bitmaskclient.BuildConfig;
import se.leap.bitmaskclient.R;
+import de.blinkt.openvpn.VpnProfile;
public class VpnStatus {
- public static LinkedList<LogItem> logbuffer;
+ private static final LinkedList<LogItem> logbuffer;
private static Vector<LogListener> logListener;
private static Vector<StateListener> stateListener;
@@ -55,7 +37,14 @@ public class VpnStatus {
private static int mLastStateresid = R.string.state_noprocess;
- private static long mlastByteCount[] = {0, 0, 0, 0};
+ private static HandlerThread mHandlerThread;
+
+ private static String mLastConnectedVPNUUID;
+ static boolean readFileLog =false;
+ final static java.lang.Object readFileLock = new Object();
+
+
+ public static TrafficHistory trafficHistory;
public static void logException(LogLevel ll, String context, Exception e) {
StringWriter sw = new StringWriter();
@@ -79,6 +68,9 @@ public class VpnStatus {
static final int MAXLOGENTRIES = 1000;
+ public static boolean isVPNActive() {
+ return mLastLevel != ConnectionStatus.LEVEL_AUTH_FAILED && !(mLastLevel == ConnectionStatus.LEVEL_NOTCONNECTED);
+ }
public static String getLastCleanLogMessage(Context c) {
String message = mLaststatemsg;
@@ -111,6 +103,10 @@ public class VpnStatus {
if (status.equals("NOPROCESS"))
return message;
+ if (mLastStateresid == R.string.state_waitconnectretry) {
+ return c.getString(R.string.state_waitconnectretry, mLaststatemsg);
+ }
+
String prefix = c.getString(mLastStateresid);
if (mLastStateresid == R.string.unknown_state)
message = status + message;
@@ -122,28 +118,38 @@ public class VpnStatus {
}
public static void initLogCache(File cacheDir) {
+ mHandlerThread = new HandlerThread("LogFileWriter", Thread.MIN_PRIORITY);
+ mHandlerThread.start();
+ mLogFileHandler = new LogFileHandler(mHandlerThread.getLooper());
+
+
Message m = mLogFileHandler.obtainMessage(LogFileHandler.LOG_INIT, cacheDir);
mLogFileHandler.sendMessage(m);
}
public static void flushLog() {
- mLogFileHandler.sendEmptyMessage(LogFileHandler.FLUSH_TO_DISK);
+ if (mLogFileHandler!=null)
+ mLogFileHandler.sendEmptyMessage(LogFileHandler.FLUSH_TO_DISK);
}
- public enum ConnectionStatus {
- LEVEL_CONNECTED,
- LEVEL_VPNPAUSED,
- LEVEL_CONNECTING_SERVER_REPLIED,
- LEVEL_CONNECTING_NO_SERVER_REPLY_YET,
- LEVEL_NONETWORK,
- LEVEL_NOTCONNECTED,
- LEVEL_START,
- LEVEL_AUTH_FAILED,
- LEVEL_WAITING_FOR_USER_INPUT,
- UNKNOWN_LEVEL
+ public static void setConnectedVPNProfile(String uuid) {
+ mLastConnectedVPNUUID = uuid;
+ for (StateListener sl: stateListener)
+ sl.setConnectedVPN(uuid);
}
+
+ public static String getLastConnectedVPNProfile()
+ {
+ return mLastConnectedVPNUUID;
+ }
+
+ public static void setTrafficHistory(TrafficHistory trafficHistory) {
+ VpnStatus.trafficHistory = trafficHistory;
+ }
+
+
public enum LogLevel {
INFO(2),
ERROR(-2),
@@ -163,14 +169,17 @@ public class VpnStatus {
public static LogLevel getEnumByValue(int value) {
switch (value) {
- case 1:
- return INFO;
case 2:
+ return INFO;
+ case -2:
return ERROR;
- case 3:
+ case 1:
return WARNING;
+ case 3:
+ return VERBOSE;
case 4:
return DEBUG;
+
default:
return null;
}
@@ -178,218 +187,36 @@ public class VpnStatus {
}
// keytool -printcert -jarfile de.blinkt.openvpn_85.apk
- public static final byte[] officalkey = {-58, -42, -44, -106, 90, -88, -87, -88, -52, -124, 84, 117, 66, 79, -112, -111, -46, 86, -37, 109};
- public static final byte[] officaldebugkey = {-99, -69, 45, 71, 114, -116, 82, 66, -99, -122, 50, -70, -56, -111, 98, -35, -65, 105, 82, 43};
- public static final byte[] amazonkey = {-116, -115, -118, -89, -116, -112, 120, 55, 79, -8, -119, -23, 106, -114, -85, -56, -4, 105, 26, -57};
- public static final byte[] fdroidkey = {-92, 111, -42, -46, 123, -96, -60, 79, -27, -31, 49, 103, 11, -54, -68, -27, 17, 2, 121, 104};
+ static final byte[] officalkey = {-58, -42, -44, -106, 90, -88, -87, -88, -52, -124, 84, 117, 66, 79, -112, -111, -46, 86, -37, 109};
+ static final byte[] officaldebugkey = {-99, -69, 45, 71, 114, -116, 82, 66, -99, -122, 50, -70, -56, -111, 98, -35, -65, 105, 82, 43};
+ static final byte[] amazonkey = {-116, -115, -118, -89, -116, -112, 120, 55, 79, -8, -119, -23, 106, -114, -85, -56, -4, 105, 26, -57};
+ static final byte[] fdroidkey = {-92, 111, -42, -46, 123, -96, -60, 79, -27, -31, 49, 103, 11, -54, -68, -27, 17, 2, 121, 104};
private static ConnectionStatus mLastLevel = ConnectionStatus.LEVEL_NOTCONNECTED;
- private static final LogFileHandler mLogFileHandler;
+ private static LogFileHandler mLogFileHandler;
static {
logbuffer = new LinkedList<>();
logListener = new Vector<>();
stateListener = new Vector<>();
byteCountListener = new Vector<>();
-
- HandlerThread mHandlerThread = new HandlerThread("LogFileWriter", Thread.MIN_PRIORITY);
- mHandlerThread.start();
- mLogFileHandler = new LogFileHandler(mHandlerThread.getLooper());
+ trafficHistory = new TrafficHistory();
logInformation();
}
- public static class LogItem implements Parcelable {
- private Object[] mArgs = null;
- private String mMessage = null;
- private int mRessourceId;
- // Default log priority
- LogLevel mLevel = LogLevel.INFO;
- private long logtime = System.currentTimeMillis();
- private int mVerbosityLevel = -1;
-
- private LogItem(int ressourceId, Object[] args) {
- mRessourceId = ressourceId;
- mArgs = args;
- }
-
- public LogItem(LogLevel level, int verblevel, String message) {
- mMessage = message;
- mLevel = level;
- mVerbosityLevel = verblevel;
- }
-
- @Override
- public int describeContents() {
- return 0;
- }
-
-
- @Override
- public void writeToParcel(Parcel dest, int flags) {
- dest.writeArray(mArgs);
- dest.writeString(mMessage);
- dest.writeInt(mRessourceId);
- dest.writeInt(mLevel.getInt());
- dest.writeInt(mVerbosityLevel);
-
- dest.writeLong(logtime);
- }
-
- public LogItem(Parcel in) {
- mArgs = in.readArray(Object.class.getClassLoader());
- mMessage = in.readString();
- mRessourceId = in.readInt();
- mLevel = LogLevel.getEnumByValue(in.readInt());
- mVerbosityLevel = in.readInt();
- logtime = in.readLong();
- }
-
- public static final Parcelable.Creator<LogItem> CREATOR
- = new Parcelable.Creator<LogItem>() {
- public LogItem createFromParcel(Parcel in) {
- return new LogItem(in);
- }
-
- public LogItem[] newArray(int size) {
- return new LogItem[size];
- }
- };
-
- public LogItem(LogLevel loglevel, int ressourceId, Object... args) {
- mRessourceId = ressourceId;
- mArgs = args;
- mLevel = loglevel;
- }
-
-
- public LogItem(LogLevel loglevel, String msg) {
- mLevel = loglevel;
- mMessage = msg;
- }
-
-
- public LogItem(LogLevel loglevel, int ressourceId) {
- mRessourceId = ressourceId;
- mLevel = loglevel;
- }
-
- public String getString(Context c) {
- try {
- if (mMessage != null) {
- return mMessage;
- } else {
- if (c != null) {
- if (mRessourceId == R.string.mobile_info)
- return getMobileInfoString(c);
- if (mArgs == null)
- return c.getString(mRessourceId);
- else
- return c.getString(mRessourceId, mArgs);
- } else {
- String str = String.format(Locale.ENGLISH, "Log (no context) resid %d", mRessourceId);
- if (mArgs != null)
- str += TextUtils.join("|", mArgs);
-
- return str;
- }
- }
- } catch (UnknownFormatConversionException e) {
- if (c != null)
- throw new UnknownFormatConversionException(e.getLocalizedMessage() + getString(null));
- else
- throw e;
- } catch (java.util.FormatFlagsConversionMismatchException e) {
- if (c != null)
- throw new FormatFlagsConversionMismatchException(e.getLocalizedMessage() + getString(null), e.getConversion());
- else
- throw e;
- }
-
- }
-
- public LogLevel getLogLevel() {
- return mLevel;
- }
-
- // The lint is wrong here
- @SuppressLint("StringFormatMatches")
- private String getMobileInfoString(Context c) {
- c.getPackageManager();
- String apksign = "error getting package signature";
-
- String version = "error getting version";
- try {
- @SuppressLint("PackageManagerGetSignatures")
- Signature raw = c.getPackageManager().getPackageInfo(c.getPackageName(), PackageManager.GET_SIGNATURES).signatures[0];
- CertificateFactory cf = CertificateFactory.getInstance("X.509");
- X509Certificate cert = (X509Certificate) cf.generateCertificate(new ByteArrayInputStream(raw.toByteArray()));
- MessageDigest md = MessageDigest.getInstance("SHA-1");
- byte[] der = cert.getEncoded();
- md.update(der);
- byte[] digest = md.digest();
-
- if (Arrays.equals(digest, officalkey))
- apksign = c.getString(R.string.official_build);
- else if (Arrays.equals(digest, officaldebugkey))
- apksign = c.getString(R.string.debug_build);
- else if (Arrays.equals(digest, amazonkey))
- apksign = "amazon version";
- else if (Arrays.equals(digest, fdroidkey))
- apksign = "F-Droid built and signed version";
- else
- apksign = c.getString(R.string.built_by, cert.getSubjectX500Principal().getName());
-
- PackageInfo packageinfo = c.getPackageManager().getPackageInfo(c.getPackageName(), 0);
- version = packageinfo.versionName;
-
- } catch (NameNotFoundException | CertificateException |
- NoSuchAlgorithmException ignored) {
- }
-
- Object[] argsext = Arrays.copyOf(mArgs, mArgs.length);
- argsext[argsext.length - 1] = apksign;
- argsext[argsext.length - 2] = version;
-
- return c.getString(R.string.mobile_info, argsext);
-
- }
-
- public long getLogtime() {
- return logtime;
- }
-
-
- public int getVerbosityLevel() {
- if (mVerbosityLevel == -1) {
- // Hack:
- // For message not from OpenVPN, report the status level as log level
- return mLevel.getInt();
- }
- return mVerbosityLevel;
- }
-
- public boolean verify() {
- if (mLevel == null)
- return false;
-
- if (mMessage == null && mRessourceId == 0)
- return false;
-
- return true;
- }
- }
-
public interface LogListener {
void newLog(LogItem logItem);
}
public interface StateListener {
void updateState(String state, String logmessage, int localizedResId, ConnectionStatus level);
+
+ void setConnectedVPN(String uuid);
}
public interface ByteCountListener {
@@ -404,12 +231,20 @@ public class VpnStatus {
public synchronized static void clearLog() {
logbuffer.clear();
logInformation();
- mLogFileHandler.sendEmptyMessage(LogFileHandler.TRIM_LOG_FILE);
+ if (mLogFileHandler != null)
+ mLogFileHandler.sendEmptyMessage(LogFileHandler.TRIM_LOG_FILE);
}
private static void logInformation() {
+ String nativeAPI;
+ try {
+ nativeAPI = NativeUtils.getNativeAPI();
+ } catch (UnsatisfiedLinkError ignore) {
+ nativeAPI = "error";
+ }
+
logInfo(R.string.mobile_info, Build.MODEL, Build.BOARD, Build.BRAND, Build.VERSION.SDK_INT,
- NativeUtils.getNativeAPI(), Build.VERSION.RELEASE, Build.ID, Build.FINGERPRINT, "", "");
+ nativeAPI, Build.VERSION.RELEASE, Build.ID, Build.FINGERPRINT, "", "");
}
public synchronized static void addLogListener(LogListener ll) {
@@ -421,7 +256,8 @@ public class VpnStatus {
}
public synchronized static void addByteCountListener(ByteCountListener bcl) {
- bcl.updateByteCount(mlastByteCount[0], mlastByteCount[1], mlastByteCount[2], mlastByteCount[3]);
+ TrafficHistory.LastDiff diff = trafficHistory.getLastDiff(null);
+ bcl.updateByteCount(diff.getIn(), diff.getOut(), diff.getDiffIn(),diff.getDiffOut());
byteCountListener.add(bcl);
}
@@ -525,7 +361,7 @@ public class VpnStatus {
}
- public static void updateStateString(String state, String msg) {
+ static void updateStateString(String state, String msg) {
int rid = getLocalizedState(state);
ConnectionStatus level = getLevel(state);
updateStateString(state, msg, rid, level);
@@ -549,7 +385,7 @@ public class VpnStatus {
for (StateListener sl : stateListener) {
sl.updateState(state, msg, resid, level);
}
- //newLogItem(new LogItem((LogLevel.DEBUG), String.format("New OpenVPN Status (%s->%s): %s",state,level.toString(),msg)));
+ newLogItem(new LogItem((LogLevel.DEBUG), String.format("New OpenVPN Status (%s->%s): %s",state,level.toString(),msg)));
}
public static void logInfo(String message) {
@@ -568,7 +404,7 @@ public class VpnStatus {
newLogItem(new LogItem(LogLevel.DEBUG, resourceId, args));
}
- private static void newLogItem(LogItem logItem) {
+ static void newLogItem(LogItem logItem) {
newLogItem(logItem, false);
}
@@ -578,18 +414,21 @@ public class VpnStatus {
logbuffer.addFirst(logItem);
} else {
logbuffer.addLast(logItem);
- Message m = mLogFileHandler.obtainMessage(LogFileHandler.LOG_MESSAGE, logItem);
- mLogFileHandler.sendMessage(m);
+ if (mLogFileHandler != null) {
+ Message m = mLogFileHandler.obtainMessage(LogFileHandler.LOG_MESSAGE, logItem);
+ mLogFileHandler.sendMessage(m);
+ }
}
if (logbuffer.size() > MAXLOGENTRIES + MAXLOGENTRIES / 2) {
while (logbuffer.size() > MAXLOGENTRIES)
logbuffer.removeFirst();
- mLogFileHandler.sendMessage(mLogFileHandler.obtainMessage(LogFileHandler.TRIM_LOG_FILE));
+ if (mLogFileHandler != null)
+ mLogFileHandler.sendMessage(mLogFileHandler.obtainMessage(LogFileHandler.TRIM_LOG_FILE));
}
- if (BuildConfig.DEBUG && !cachedLine)
- Log.d("OpenVPN", logItem.getString(null));
+ //if (BuildConfig.DEBUG && !cachedLine && !BuildConfig.FLAVOR.equals("test"))
+ // Log.d("OpenVPN", logItem.getString(null));
for (LogListener ll : logListener) {
@@ -627,17 +466,10 @@ public class VpnStatus {
public static synchronized void updateByteCount(long in, long out) {
- long lastIn = mlastByteCount[0];
- long lastOut = mlastByteCount[1];
- long diffIn = mlastByteCount[2] = Math.max(0, in - lastIn);
- long diffOut = mlastByteCount[3] = Math.max(0, out - lastOut);
-
+ TrafficHistory.LastDiff diff = trafficHistory.add(in, out);
- mlastByteCount = new long[]{in, out, diffIn, diffOut};
for (ByteCountListener bcl : byteCountListener) {
- bcl.updateByteCount(in, out, diffIn, diffOut);
+ bcl.updateByteCount(in, out, diff.getDiffIn(), diff.getDiffOut());
}
}
-
-
}
diff --git a/app/src/main/java/de/blinkt/openvpn/core/X509Utils.java b/app/src/main/java/de/blinkt/openvpn/core/X509Utils.java
index 4048f0e0..9e2060fd 100644
--- a/app/src/main/java/de/blinkt/openvpn/core/X509Utils.java
+++ b/app/src/main/java/de/blinkt/openvpn/core/X509Utils.java
@@ -5,6 +5,7 @@
package de.blinkt.openvpn.core;
+import android.annotation.SuppressLint;
import android.content.Context;
import android.content.res.Resources;
import android.text.TextUtils;
@@ -106,14 +107,14 @@ public class X509Utils {
// More than 3 months display months
if (timeLeft > 90l* 24 * 3600 * 1000) {
long months = getMonthsDifference(now, certNotAfter);
- return res.getString(R.string.months_left, months);
+ return res.getQuantityString(R.plurals.months_left, (int) months, months);
} else if (timeLeft > 72 * 3600 * 1000) {
long days = timeLeft / (24 * 3600 * 1000);
- return res.getString(R.string.days_left, days);
+ return res.getQuantityString(R.plurals.days_left, (int) days, days);
} else {
long hours = timeLeft / (3600 * 1000);
- return res.getString(R.string.hours_left, hours);
+ return res.getQuantityString(R.plurals.hours_left, (int)hours, hours);
}
}
@@ -131,7 +132,7 @@ public class X509Utils {
/* Hack so we do not have to ship a whole Spongy/bouncycastle */
Exception exp=null;
try {
- Class X509NameClass = Class.forName("com.android.org.bouncycastle.asn1.x509.X509Name");
+ @SuppressLint("PrivateApi") Class X509NameClass = Class.forName("com.android.org.bouncycastle.asn1.x509.X509Name");
Method getInstance = X509NameClass.getMethod("getInstance",Object.class);
Hashtable defaultSymbols = (Hashtable) X509NameClass.getField("DefaultSymbols").get(X509NameClass);
diff --git a/app/src/main/java/de/blinkt/openvpn/fragments/LogFragment.java b/app/src/main/java/de/blinkt/openvpn/fragments/LogFragment.java
index bbd52a34..a1fc7cdc 100644
--- a/app/src/main/java/de/blinkt/openvpn/fragments/LogFragment.java
+++ b/app/src/main/java/de/blinkt/openvpn/fragments/LogFragment.java
@@ -16,6 +16,7 @@ import android.content.ClipboardManager;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
+import android.content.res.Resources;
import android.database.DataSetObserver;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
@@ -56,12 +57,13 @@ import de.blinkt.openvpn.LaunchVPN;
import se.leap.bitmaskclient.R;
import de.blinkt.openvpn.VpnProfile;
import de.blinkt.openvpn.activities.DisconnectVPN;
+import de.blinkt.openvpn.core.ConnectionStatus;
import de.blinkt.openvpn.core.OpenVPNManagement;
import de.blinkt.openvpn.core.OpenVPNService;
+import de.blinkt.openvpn.core.Preferences;
import de.blinkt.openvpn.core.ProfileManager;
import de.blinkt.openvpn.core.VpnStatus;
-import de.blinkt.openvpn.core.VpnStatus.ConnectionStatus;
-import de.blinkt.openvpn.core.VpnStatus.LogItem;
+import de.blinkt.openvpn.core.LogItem;
import de.blinkt.openvpn.core.VpnStatus.LogListener;
import de.blinkt.openvpn.core.VpnStatus.StateListener;
@@ -117,8 +119,9 @@ public class LogFragment extends ListFragment implements StateListener, SeekBar.
@Override
public void updateByteCount(long in, long out, long diffIn, long diffOut) {
//%2$s/s %1$s - ↑%4$s/s %3$s
- final String down = String.format("%2$s/s %1$s", humanReadableByteCount(in, false), humanReadableByteCount(diffIn / OpenVPNManagement.mBytecountInterval, true));
- final String up = String.format("%2$s/s %1$s", humanReadableByteCount(out, false), humanReadableByteCount(diffOut / OpenVPNManagement.mBytecountInterval, true));
+ Resources res = getActivity().getResources();
+ final String down = String.format("%2$s %1$s", humanReadableByteCount(in, false, res), humanReadableByteCount(diffIn / OpenVPNManagement.mBytecountInterval, true, res));
+ final String up = String.format("%2$s %1$s", humanReadableByteCount(out, false, res), humanReadableByteCount(diffOut / OpenVPNManagement.mBytecountInterval, true, res));
if (mUpStatus != null && mDownStatus != null) {
if (getActivity() != null) {
@@ -429,33 +432,34 @@ public class LogFragment extends ListFragment implements StateListener, SeekBar.
Intent intent = new Intent(getActivity(), DisconnectVPN.class);
startActivity(intent);
return true;
- } else if(item.getItemId()==R.id.send) {
- ladapter.shareLog();
- } else if(item.getItemId()==R.id.edit_vpn) {
- VpnProfile lastConnectedprofile = ProfileManager.getLastConnectedVpn();
-
- if(lastConnectedprofile!=null) {
- Intent vprefintent = new Intent(getActivity(),Dashboard.class)
- .putExtra(VpnProfile.EXTRA_PROFILEUUID,lastConnectedprofile.getUUIDString());
- startActivityForResult(vprefintent,START_VPN_CONFIG);
- } else {
- Toast.makeText(getActivity(), R.string.log_no_last_vpn, Toast.LENGTH_LONG).show();
- }
- } else if(item.getItemId() == R.id.toggle_time) {
- showHideOptionsPanel();
- } else if(item.getItemId() == android.R.id.home) {
- // This is called when the Home (Up) button is pressed
- // in the Action Bar.
- Intent parentActivityIntent = new Intent(getActivity(), Dashboard.class);
- parentActivityIntent.addFlags(
- Intent.FLAG_ACTIVITY_CLEAR_TOP |
- Intent.FLAG_ACTIVITY_NEW_TASK);
- startActivity(parentActivityIntent);
- getActivity().finish();
- return true;
-
- }
- return super.onOptionsItemSelected(item);
+ } else if (item.getItemId() == R.id.send) {
+ ladapter.shareLog();
+ } else if (item.getItemId() == R.id.edit_vpn) {
+ VpnProfile lastConnectedprofile = ProfileManager.get(getActivity(), VpnStatus.getLastConnectedVPNProfile());
+
+ if (lastConnectedprofile != null) {
+ Intent vprefintent = new Intent(getActivity(), Dashboard.class)
+ .putExtra(VpnProfile.EXTRA_PROFILEUUID, lastConnectedprofile.getUUIDString());
+ startActivityForResult(vprefintent, START_VPN_CONFIG);
+ } else {
+ Toast.makeText(getActivity(), R.string.log_no_last_vpn, Toast.LENGTH_LONG).show();
+ }
+ } else if (item.getItemId() == R.id.toggle_time) {
+ showHideOptionsPanel();
+ } else if (item.getItemId() == android.R.id.home) {
+ // This is called when the Home (Up) button is pressed
+ // in the Action Bar.
+ Intent parentActivityIntent = new Intent(getActivity(), Dashboard.class);
+ parentActivityIntent.addFlags(
+ Intent.FLAG_ACTIVITY_CLEAR_TOP |
+ Intent.FLAG_ACTIVITY_NEW_TASK);
+ startActivity(parentActivityIntent);
+ getActivity().finish();
+ return true;
+
+ }
+ return super.onOptionsItemSelected(item);
+
}
private void showHideOptionsPanel() {
@@ -500,13 +504,16 @@ public class LogFragment extends ListFragment implements StateListener, SeekBar.
@Override
public void onResume() {
super.onResume();
- VpnStatus.addStateListener(this);
- VpnStatus.addByteCountListener(this);
Intent intent = new Intent(getActivity(), OpenVPNService.class);
intent.setAction(OpenVPNService.START_SERVICE);
-
}
+ @Override
+ public void onStart() {
+ super.onStart();
+ VpnStatus.addStateListener(this);
+ VpnStatus.addByteCountListener(this);
+ }
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
@@ -603,7 +610,7 @@ public class LogFragment extends ListFragment implements StateListener, SeekBar.
mClearLogCheckBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
- PreferenceManager.getDefaultSharedPreferences(getActivity()).edit().putBoolean(LaunchVPN.CLEARLOG, isChecked).apply();
+ Preferences.getDefaultSharedPreferences(getActivity()).edit().putBoolean(LaunchVPN.CLEARLOG, isChecked).apply();
}
});
@@ -628,7 +635,14 @@ public class LogFragment extends ListFragment implements StateListener, SeekBar.
}
@Override
- public void onAttach(Activity activity) {
+ public void onViewCreated(View view, Bundle savedInstanceState) {
+ super.onViewCreated(view, savedInstanceState);
+ // Scroll to the end of the list end
+ //getListView().setSelection(getListView().getAdapter().getCount()-1);
+ }
+
+ @Override
+ public void onAttach(Context activity) {
super.onAttach(activity);
if (getResources().getBoolean(R.bool.logSildersAlwaysVisible)) {
mShowOptionsLayout = true;
@@ -660,13 +674,17 @@ public class LogFragment extends ListFragment implements StateListener, SeekBar.
mSpeedView.setText(cleanLogMessage);
}
if (mConnectStatus != null)
- mConnectStatus.setText(getString(resId));
+ mConnectStatus.setText(cleanLogMessage);
}
}
});
}
}
+ @Override
+ public void setConnectedVPN(String uuid) {
+ }
+
@Override
public void onDestroy() {
diff --git a/app/src/main/java/se/leap/bitmaskclient/VpnFragment.java b/app/src/main/java/se/leap/bitmaskclient/VpnFragment.java
index 6ffeacc1..9e9adef1 100644
--- a/app/src/main/java/se/leap/bitmaskclient/VpnFragment.java
+++ b/app/src/main/java/se/leap/bitmaskclient/VpnFragment.java
@@ -19,6 +19,7 @@ package se.leap.bitmaskclient;
import android.app.*;
import android.content.*;
import android.os.*;
+import android.util.Log;
import android.view.*;
import android.widget.*;
@@ -39,7 +40,7 @@ public class VpnFragment extends Fragment implements Observer {
protected static final String IS_CONNECTED = TAG + ".is_connected";
public static final String START_ON_BOOT = "start on boot";
- @InjectView(R.id.vpn_Status_Image)
+ @InjectView(R.id.vpn_status_image)
FabButton vpn_status_image;
@InjectView(R.id.vpn_main_button)
Button main_button;
@@ -91,7 +92,8 @@ public class VpnFragment extends Fragment implements Observer {
@Override
public void onResume() {
super.onResume();
- eipCommand(Constants.ACTION_CHECK_CERT_VALIDITY);
+ //FIXME: avoid race conditions while checking certificate an logging in at about the same time
+ //eipCommand(Constants.ACTION_CHECK_CERT_VALIDITY);
handleNewState(eip_status);
}
diff --git a/app/src/main/java/se/leap/bitmaskclient/eip/EIP.java b/app/src/main/java/se/leap/bitmaskclient/eip/EIP.java
index 9ff7f1af..5b72a4e7 100644
--- a/app/src/main/java/se/leap/bitmaskclient/eip/EIP.java
+++ b/app/src/main/java/se/leap/bitmaskclient/eip/EIP.java
@@ -117,8 +117,8 @@ public final class EIP extends IntentService {
Intent intent = new Intent(this, LaunchVPN.class);
intent.setAction(Intent.ACTION_MAIN);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- intent.putExtra(LaunchVPN.EXTRA_NAME, gateway.getProfile().getName());
intent.putExtra(LaunchVPN.EXTRA_HIDELOG, true);
+ intent.putExtra(LaunchVPN.EXTRA_TEMP_VPN_PROFILE, gateway.getProfile());
startActivity(intent);
}
diff --git a/app/src/main/java/se/leap/bitmaskclient/eip/EipStatus.java b/app/src/main/java/se/leap/bitmaskclient/eip/EipStatus.java
index 4bfef1cb..501543b8 100644
--- a/app/src/main/java/se/leap/bitmaskclient/eip/EipStatus.java
+++ b/app/src/main/java/se/leap/bitmaskclient/eip/EipStatus.java
@@ -26,7 +26,7 @@ public class EipStatus extends Observable implements VpnStatus.StateListener {
public static String TAG = EipStatus.class.getSimpleName();
private static EipStatus current_status;
- private static VpnStatus.ConnectionStatus level = VpnStatus.ConnectionStatus.LEVEL_NOTCONNECTED;
+ private static ConnectionStatus level = ConnectionStatus.LEVEL_NOTCONNECTED;
private static boolean
wants_to_disconnect = false,
is_connecting = false;
@@ -47,7 +47,7 @@ public class EipStatus extends Observable implements VpnStatus.StateListener {
}
@Override
- public void updateState(final String state, final String logmessage, final int localizedResId, final VpnStatus.ConnectionStatus level) {
+ public void updateState(final String state, final String logmessage, final int localizedResId, final ConnectionStatus level) {
updateStatus(state, logmessage, localizedResId, level);
if (isConnected() || isDisconnected() || wantsToDisconnect()) {
setConnectedOrDisconnected();
@@ -55,7 +55,11 @@ public class EipStatus extends Observable implements VpnStatus.StateListener {
setConnecting();
}
- private void updateStatus(final String state, final String logmessage, final int localizedResId, final VpnStatus.ConnectionStatus level) {
+ @Override
+ public void setConnectedVPN(String uuid) {
+ }
+
+ private void updateStatus(final String state, final String logmessage, final int localizedResId, final ConnectionStatus level) {
current_status = getInstance();
current_status.setState(state);
current_status.setLogMessage(logmessage);
@@ -73,15 +77,15 @@ public class EipStatus extends Observable implements VpnStatus.StateListener {
}
public boolean isConnected() {
- return level == VpnStatus.ConnectionStatus.LEVEL_CONNECTED;
+ return level == ConnectionStatus.LEVEL_CONNECTED;
}
public boolean isDisconnected() {
- return level == VpnStatus.ConnectionStatus.LEVEL_NOTCONNECTED;
+ return level == ConnectionStatus.LEVEL_NOTCONNECTED;
}
public boolean isPaused() {
- return level == VpnStatus.ConnectionStatus.LEVEL_VPNPAUSED;
+ return level == ConnectionStatus.LEVEL_VPNPAUSED;
}
public void setConnecting() {
@@ -116,7 +120,7 @@ public class EipStatus extends Observable implements VpnStatus.StateListener {
return localized_res_id;
}
- public VpnStatus.ConnectionStatus getLevel() {
+ public ConnectionStatus getLevel() {
return level;
}
@@ -132,7 +136,7 @@ public class EipStatus extends Observable implements VpnStatus.StateListener {
this.localized_res_id = localized_res_id;
}
- private void setLevel(VpnStatus.ConnectionStatus level) {
+ private void setLevel(ConnectionStatus level) {
EipStatus.level = level;
}
@@ -145,13 +149,13 @@ public class EipStatus extends Observable implements VpnStatus.StateListener {
String[] error_keywords = {"error", "ERROR", "fatal", "FATAL"};
- VpnStatus.LogItem[] log = VpnStatus.getlogbuffer();
+ LogItem[] log = VpnStatus.getlogbuffer();
if(log.length < last_error_line)
last_error_line = 0;
String message = "";
for (int i = 1; i <= lines && log.length > i; i++) {
int line = log.length - i;
- VpnStatus.LogItem log_item = log[line];
+ LogItem log_item = log[line];
message = log_item.getString(context);
for (int j = 0; j < error_keywords.length; j++)
if (message.contains(error_keywords[j]) && line > last_error_line) {
diff --git a/app/src/main/res/layout-xlarge/eip_service_fragment.xml b/app/src/main/res/layout-xlarge/eip_service_fragment.xml
index a9f01fb8..2b3c4f2e 100644
--- a/app/src/main/res/layout-xlarge/eip_service_fragment.xml
+++ b/app/src/main/res/layout-xlarge/eip_service_fragment.xml
@@ -27,7 +27,7 @@
android:layout_centerInParent="true">
<Button
- android:id="@+id/vpn.main.button"
+ android:id="@+id/vpn_main_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="24dp"
@@ -35,12 +35,11 @@
android:textSize="32sp"
/>
- <view
- android:id="@+id/vpn.Status.Image"
+ <mbanje.kurt.fabbutton.FabButton
+ android:id="@+id/vpn_status_image"
android:layout_width="48dp"
android:layout_height="48dp"
android:color="@android:color/holo_blue_dark"
- class="mbanje.kurt.fabbutton.FabButton"
android:layout_gravity="center"
android:visibility="visible"
android:indeterminate="true"
diff --git a/app/src/main/res/layout/eip_service_fragment.xml b/app/src/main/res/layout/eip_service_fragment.xml
index 7df82b19..c8370cf1 100644
--- a/app/src/main/res/layout/eip_service_fragment.xml
+++ b/app/src/main/res/layout/eip_service_fragment.xml
@@ -24,14 +24,14 @@
android:layout_centerInParent="true">
<Button
- android:id="@+id/vpn.main.button"
+ android:id="@+id/vpn_main_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="12sp"
/>
<mbanje.kurt.fabbutton.FabButton
- android:id="@+id/vpn.Status.Image"
+ android:id="@+id/vpn_status_image"
android:layout_width="32dp"
android:layout_height="32dp"
android:layout_marginLeft="3dp"
diff --git a/app/src/main/res/layout/vpnstatus.xml b/app/src/main/res/layout/vpnstatus.xml
index b304ad10..3b464b62 100644
--- a/app/src/main/res/layout/vpnstatus.xml
+++ b/app/src/main/res/layout/vpnstatus.xml
@@ -43,8 +43,9 @@
style="@style/logWindowStatusTitle"/>
<TextView
+
android:id="@+id/speedStatus"
- tools:text="Connected"
+ tools:text="Connected to a very long ipv4 and 3483489348238824829482384928"
style="@style/logWindowStatusText"/>
diff --git a/app/src/main/res/values-ca/plurals-icsopenvpn.xml b/app/src/main/res/values-ca/plurals-icsopenvpn.xml
new file mode 100755
index 00000000..70489fbc
--- /dev/null
+++ b/app/src/main/res/values-ca/plurals-icsopenvpn.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<resources></resources>
diff --git a/app/src/main/res/values-ca/strings-icsopenvpn.xml b/app/src/main/res/values-ca/strings-icsopenvpn.xml
index 2233e71e..48eca2d6 100755
--- a/app/src/main/res/values-ca/strings-icsopenvpn.xml
+++ b/app/src/main/res/values-ca/strings-icsopenvpn.xml
@@ -37,7 +37,6 @@
<string name="no_error_found">No s\'ha trobat cap error</string>
<string name="config_error_found">S\'ha trobat un error a la configuració</string>
<string name="vpn_shortcut">Acces directe de OpenVPN</string>
- <string name="vpn_launch_title">Conecta a la VPN</string>
<string name="shortcut_profile_notfound">No s\'ha trobat el perfil especificat a l\'accès directe</string>
<string name="random_host_prefix">Prefix aleatoria del host</string>
<string name="route_rejected">La ruta ha estat refusas per Android</string>
@@ -90,7 +89,6 @@
<string name="private_key_password">Contrasenya de la clau privada</string>
<string name="password">Contrasenya</string>
<string name="file_icon">Icona del fitxer</string>
- <string name="tls_authentication">Autentificació TLS</string>
<string name="generated_config">Configuració generada</string>
<string name="owner_fix">Corregir els permisos de /dev/tun</string>
<string name="generated_config_summary">Mostra el fitxer de configuració d\'OpenVPN generat</string>
@@ -109,7 +107,6 @@
<string name="faq_howto_title">Inici rapid</string>
<string name="using_proxy">Utilitzant el proxy %1$s %2$d</string>
<string name="use_system_proxy">Utiliza el proxy del sistema</string>
- <string name="onbootrestart">Torna a conectar al reiniciar</string>
<string name="ignore">Ignorar</string>
<string name="restart">Reinicia</string>
<string name="restart_vpn_after_change">Els canvis de configuració s\'apliquen desprès de reinicar la VPN. (Re)inicar la VPN ara?</string>
diff --git a/app/src/main/res/values-cs/plurals-icsopenvpn.xml b/app/src/main/res/values-cs/plurals-icsopenvpn.xml
new file mode 100755
index 00000000..70489fbc
--- /dev/null
+++ b/app/src/main/res/values-cs/plurals-icsopenvpn.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<resources></resources>
diff --git a/app/src/main/res/values-cs/strings-icsopenvpn.xml b/app/src/main/res/values-cs/strings-icsopenvpn.xml
index f5e4db60..eb039901 100755
--- a/app/src/main/res/values-cs/strings-icsopenvpn.xml
+++ b/app/src/main/res/values-cs/strings-icsopenvpn.xml
@@ -50,7 +50,6 @@
<string name="custom_route_format_error">Chyba při zpracování vlastního směrování</string>
<string name="pw_query_hint">(nechej prázdné pro dotazování, až bude potřeba)</string>
<string name="vpn_shortcut">OpenVPN zkratka</string>
- <string name="vpn_launch_title">Připojit k VPN</string>
<string name="shortcut_profile_notfound">Profil zvolený ve zkratce nenalezen</string>
<string name="random_host_prefix">Náhodný prefix klienta</string>
<string name="random_host_summary">Přidej 6 náhodných znaků před jméno klienta (hostname)</string>
@@ -164,7 +163,6 @@
<string name="private_key_password">Heslo k soukromému klíÄi</string>
<string name="password">Heslo</string>
<string name="file_icon">ikona souboru</string>
- <string name="tls_authentication">TLS autentikace</string>
<string name="generated_config">Vygenerované nastavení</string>
<string name="generalsettings">Nastavení</string>
<string name="owner_fix_summary">Pokusit se nastavit vlastníka /dev/tun zařízení. Na některých systémech s CM9 je toto potřeba pro zprovoznění VPNService API. Vyžaduje root zařízení.</string>
@@ -202,9 +200,6 @@
<string name="using_proxy">Používám proxy %1$s %2$d</string>
<string name="use_system_proxy">Použít systémovou proxy</string>
<string name="use_system_proxy_summary">K připojení použít systémové nastavení pro HTTP/HTTPS.</string>
- <string name="donatewithpaypal">K přispění můžeš využít &lt;a href=\"https://www.paypal.com/cgi-bin/webscr?hosted_button_id=R2M6ZP9AF25LS&amp;amp;cmd=_s-xclick\"&gt;PayPal&lt;/a&gt; </string>
- <string name="onbootrestartsummary">OpenVPN se opÄ›tovnÄ› pÅ™ipojí k VPN, pokud byla aktivní pÅ™ed vypnutím/restartem systému. PÅ™eÄti si oddíl o varování pÅ™ed pÅ™ipojením než použijeÅ¡ tuto možnost.</string>
- <string name="onbootrestart">Znovu připoj po restartu</string>
<string name="ignore">Ignorovat</string>
<string name="restart">Restartovat</string>
<string name="restart_vpn_after_change">ZmÄ›na nastavení zaÄne platit až po restartu VPN. Restartovat teÄ?</string>
@@ -251,7 +246,6 @@
<string name="state_tcp_connect">Připojuji (TCP)</string>
<string name="state_auth_failed">Přihlášení nebylo úspěšné</string>
<string name="state_nonetwork">Čekání na použitelnou síť</string>
- <string name="statusline_bytecount">↓%2$s/s %1$s - ↑%4$s/s %3$s</string>
<string name="notifcation_title_notconnect">Nepřipojeno</string>
<string name="start_vpn_title">Připojování k VPN %s</string>
<string name="start_vpn_ticker">Připojování k VPN %s</string>
diff --git a/app/src/main/res/values-de/plurals-icsopenvpn.xml b/app/src/main/res/values-de/plurals-icsopenvpn.xml
new file mode 100755
index 00000000..1737fa7a
--- /dev/null
+++ b/app/src/main/res/values-de/plurals-icsopenvpn.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<resources>
+ <plurals name="months_left">
+ <item quantity="one">Ein Monat verbleibend</item>
+ <item quantity="other">%d Monate verbleibend</item>
+ </plurals>
+ <plurals name="days_left">
+ <item quantity="one">Ein Tag verbleibend</item>
+ <item quantity="other">%d Tage verbleibend</item>
+ </plurals>
+ <plurals name="hours_left">
+ <item quantity="one">Eine Stunde verbleibend</item>
+ <item quantity="other">%d Stunden verbleibend</item>
+ </plurals>
+ <plurals name="minutes_left">
+ <item quantity="one">Ein Minute verbleibend</item>
+ <item quantity="other">%d Minuten verbleibend</item>
+ </plurals>
+</resources>
diff --git a/app/src/main/res/values-de/strings-icsopenvpn.xml b/app/src/main/res/values-de/strings-icsopenvpn.xml
index c78c0039..c80dc0d1 100755
--- a/app/src/main/res/values-de/strings-icsopenvpn.xml
+++ b/app/src/main/res/values-de/strings-icsopenvpn.xml
@@ -44,13 +44,14 @@
<string name="duplicate_profile_name">Profilname bereits vorhanden. Bitte vergeben Sie einen eindeutigen Profilnamen.</string>
<string name="profilename">Profilname</string>
<string name="no_keystore_cert_selected">Kein Benutzerzertifikat ausgewählt</string>
+ <string name="no_ca_cert_selected">Kein Benutzerzertifikat ausgewählt.</string>
<string name="no_error_found">Kein Fehler.</string>
<string name="config_error_found">Fehler in der Konfiguration</string>
- <string name="ipv4_format_error">Fehler beim Auflösen der IPv4-Adresse</string>
+ <string name="ipv4_format_error">Kann die konfigurierte IPv4 Adresse nicht parsen</string>
<string name="custom_route_format_error">Kann die manuell angegeben Routen nicht verarbeiten</string>
<string name="pw_query_hint">(Leer lassen, um nicht zu speichern)</string>
<string name="vpn_shortcut">OpenVPN-Verknüpfung</string>
- <string name="vpn_launch_title">VPN verbinden</string>
+ <string name="vpn_launch_title">Verbinde VPN&#8230;</string>
<string name="shortcut_profile_notfound">Von der Verknüpfung referenziertes Profil konnte nicht gefunden werden</string>
<string name="random_host_prefix">Zufälliger Host-Präfix</string>
<string name="random_host_summary">Fügt 6 zufällige Zeichen am Anfang des Hostnamens hinzu</string>
@@ -164,7 +165,7 @@
<string name="private_key_password">Passphrase des privaten Schlüssels</string>
<string name="password">Passwort</string>
<string name="file_icon">Dateisymbol</string>
- <string name="tls_authentication">TLS-Authentifizierung</string>
+ <string name="tls_authentication">TLS Authentifizierung/Verschlüsselung</string>
<string name="generated_config">Generierte Konfiguration</string>
<string name="generalsettings">Einstellungen</string>
<string name="owner_fix_summary">Versucht, den Eigentümer von /dev/tun auf system zu ändern. Einige Cyanogenmod 9-ROM-Versionen benötigen diese Option, damit die VPN-API funktioniert. Benötigt root.</string>
@@ -203,9 +204,8 @@
<string name="using_proxy">Verwende Proxy %1$s %2$d</string>
<string name="use_system_proxy">System-Proxys verwenden</string>
<string name="use_system_proxy_summary">Systemweite Einstellungen für HTTP- und HTTPS-Proxys beim Verbinden verwenden.</string>
- <string name="donatewithpaypal">&lt;a href=\"https://www.paypal.com/cgi-bin/webscr?hosted_button_id=R2M6ZP9AF25LS&amp;amp;cmd=_s-xclick\"&gt;Spenden mit PayPal&lt;/a&gt; </string>
- <string name="onbootrestartsummary">OpenVPN wird bei einem Neustart des Telefons das beim Herunterfahren aktive VPN wieder verbinden. Bitte lesen Sie die FAQ \"Warnung beim Verbinden\", bevor Sie diese Option verwenden.</string>
- <string name="onbootrestart">Nach Neustart verbinden</string>
+ <string name="onbootrestartsummary">Beim Systemstart das angegebene VPN verbinden. Auf Geräten mit Android 5.0 und höher bitte vor der Verwendung dieser Option die FAQ zum Bestätigungsdialog lesen.</string>
+ <string name="onbootrestart">Beim Gerätestart verbinden</string>
<string name="ignore">Ignorieren</string>
<string name="restart">Neu verbinden</string>
<string name="restart_vpn_after_change">Konfigurationsänderungen werden erst nach einem Neustart des VPNs aktiv. Jetzt neu verbinden?</string>
@@ -219,7 +219,7 @@
<string name="faq_hint">Werfen Sie auch einen Blick in die FAQ. Dort befindet sich eine Schnellstart-Anleitung.</string>
<string name="faq_routing_title">Routing-/Netzwerk-Konfiguration</string>
<string name="faq_routing">In dieser App wird die Routing- und Netzwerkkonfiguration nicht mit den traditionellen ifconfig-/route-Kommandos konfiguriert, sondern mittels der VPNService-API. Diese erwartet eine Tunnel-IP-Adresse und die Netze, die über den Tunnel geroutet werden sollen. Insbesondere wird keine Gateway- oder Peer-IP-Adresse benötigt. Die Anwendung ignoriert diese daher auch beim Import. Die VPNService-API stellt weiterhin sicher, dass die Verbindung zum VPN-Server nicht über den Tunnel geroutet wird, ohne dass hierfür spezielle Routen nötig sind. Da nur Netze, die über den Tunnel geroutet werden sollen, angeben werden können, ist es nicht möglich andere Routen zu unterstützen. Die Anwendung versucht daher andere Routen (wie z.B. route x.x.x.x y.y.y.y net_gateway), die nicht über den Tunnel geroutet werden sollen, zu erkennen, und eine Menge von Routen zu berechnen, die das Verhalten auf anderen Plattformen emulieren. Das Verbindungsprotokoll zeigt die genaue Konfiguration und die errechneten Routen beim Verbinden an.</string>
- <string name="persisttun_summary">Verhindere Zurückfallen auf nicht VPN Verbindungen während OpenVPN neu verbindet.</string>
+ <string name="persisttun_summary">Während Neuaufbau von VPN-Verbindungen nicht auf andere Verbindungen zurückfallen</string>
<string name="persistent_tun_title">Persistentes tun-Device</string>
<string name="openvpn_log">OpenVPN-Protokoll</string>
<string name="import_config">OpenVPN-Konfiguration importieren</string>
@@ -252,7 +252,7 @@
<string name="state_tcp_connect">Verbinde (TCP)</string>
<string name="state_auth_failed">Authentifizierung fehlgeschlagen</string>
<string name="state_nonetwork">Warte auf Internetverbindung</string>
- <string name="statusline_bytecount">↓%2$s/s %1$s - ↑%4$s/s %3$s</string>
+ <string name="statusline_bytecount">↓%2$s %1$s - ↑%4$s %3$s</string>
<string name="notifcation_title_notconnect">Nicht verbunden</string>
<string name="start_vpn_title">Verbinde mit VPN %s</string>
<string name="start_vpn_ticker">Verbinde mit VPN %s</string>
@@ -323,6 +323,7 @@
<string name="import_log">Import-Protokoll:</string>
<string name="ip_looks_like_subnet">VPN-Topologie \"%3$s\" wurde angegeben, die Interface-Konfiguration \'ifconfig %1$s %2$s sieht allerdings wie eine IP-Adresse mit einer Netzwerkmaske aus. Topologie \"subnet\" wird angenommen.</string>
<string name="mssfix_invalid_value">Wert muss eine Zahl zwischen 0 und 9000 sein</string>
+ <string name="mtu_invalid_value">Der MTU-Wert muss eine Zahle zwischen 64 und 9000 sein</string>
<string name="mssfix_value_dialog">TCP-Verbindungen, die über den Tunnel laufen, anweisen, ihre maximale Paketgröße so einzustellen, dass die resultierende UDP-Paketgröße nach der Enkapsulierung durch OpenVPN auf den hier eingestellten Wert beschränkt bleibt. (Standardwert ist 1450)</string>
<string name="mssfix_checkbox">MSS-Wert der TCP-Nutzlast überschreiben</string>
<string name="mssfix_dialogtitle">MSS der TCP-Nutzlast</string>
@@ -392,13 +393,53 @@
<string name="protocol">Protokoll</string>
<string name="enabled_connection_entry">Aktiviert</string>
<string name="abi_mismatch">Bevorzugte native ABI-Reihenfolge dieses Gerätes (%1$s) und die installierten nativen Bibliotheken (%2$s) unterscheiden sich</string>
- <string name="months_left">Noch %d Monate gültig</string>
- <string name="days_left">Noch %d Tage gültig</string>
- <string name="hours_left">Noch %d Stunden gültig</string>
<string name="permission_revoked">VPN-Berechtigung wurde vom Betriebssytem widerrufen (z.B. weil ein anderes VPN gestartet wurde); VPN wird gestoppt</string>
<string name="pushpeerinfo">Peer-Informationen senden</string>
<string name="pushpeerinfosummary">Weitere Informationen, wie z.B. SSL- und Android-Version, an den Server senden</string>
<string name="pw_request_dialog_title">%1$s benötigt</string>
<string name="pw_request_dialog_prompt">Geben Sie bitte das Passwort für das Profil %1$s ein</string>
<string name="menu_use_inline_data">Inline-Daten verwenden</string>
+ <string name="export_config_chooser_title">Konfigurationsdatei exportieren</string>
+ <string name="missing_tlsauth">TLS-Auth-Datei fehlt</string>
+ <string name="missing_certificates">Fehlendes Benutzerzertifikat oder privater Schlüssel</string>
+ <string name="missing_ca_certificate">Fehlendes CA-Zertifikat</string>
+ <string name="crl_title">Zertifikatswiderrufsliste (optional)</string>
+ <string name="reread_log">%d Einträge aus Protokoll-Cache gelesen</string>
+ <string name="samsung_broken">Wenngleich Samsung-Telefone unter den meistverkauften Android-Geräten sind, gehört deren Firmware auch zu den fehlerbehaftetsten aller Android-Geräte. Diese Fehler betreffen nicht nur den Aufbau von VPN-Verbindungen; viele von ihnen können allerdings umgangen werden. Im Folgenden sind einige dieser Fehler beschrieben.\n\nDNS funktioniert nicht, wenn sich der DNS-Server nicht im VPN befindet.\n\nBei vielen Samsung-Geräten mit Android 5.x funktioniert das Sperren/Zulassen von einzelnen Apps nicht.\n\nBei Samsung-Geräten mit Android 6.x wurde berichtet, dass VPN nicht funktioniert, wenn die VPN-App nicht als Ausnahme in den Energiespareinstellungen eingetragen wird.</string>
+ <string name="samsung_broken_title">Samsung-Geräte</string>
+ <string name="novpn_selected">Kein VPN ausgewählt</string>
+ <string name="defaultvpn">Standard-VPN</string>
+ <string name="defaultvpnsummary">Standard VPN. Wird momentan für VPN beim Booten, Always-On-Modus und die Schnellzugriffskachel benutzt.</string>
+ <string name="vpnselected">Derzeit ausgewähltes VPN: \'%s\'</string>
+ <string name="reconnect">Neu verbinden</string>
+ <string name="qs_title">VPN an-/ausschalten</string>
+ <string name="qs_connect">Mit %s verbinden</string>
+ <string name="qs_disconnect">%s trennen</string>
+ <string name="connectretrymaxmessage">Maximale Zeit zwischen Verbindungsversuchen. OpenVPN erhöht die Wartezeit zwischen zwei Verbindungsversuchen schrittweise bis zu dieser Zeit. Der Standardwert ist 300s.</string>
+ <string name="connectretrymaxtitle">Maximale Zeit zwischen Verbindungsversuchen</string>
+ <string name="state_waitconnectretry">Warte %ss Sekunden zwischen zwei Verbindungsversuchen</string>
+ <string name="nought_alwayson_warning"><![CDATA[Wenn der VPN-Bestätigungs-Dialog nicht geöffnet wurde, ist \"Immer auf VPN\" für eine andere Anwendung aktiviert. In diesem Fall darf nur diese APP über VPN verbunden werden. Überprüfen Sie unter Einstellungen-> Netzwerke mehr... -> VPNS]]></string>
+ <string name="management_socket_closed">Verbindung mit OpenVPN getrennt (%s)</string>
+ <string name="change_sorting">Sortierung ändern</string>
+ <string name="sort">Sortieren</string>
+ <string name="sorted_lru">Profile nach letzter Verwendung sortiert</string>
+ <string name="sorted_az">Profile nach Namen sortiert</string>
+ <string name="deprecated_tls_remote">Konfiguration verwendet die Option tls-remote, die in 2.3 als veraltet markiert und schließlich in 2.4 entfernt wurde</string>
+ <string name="auth_failed_behaviour">Verhalten bei AUTH_FAILED</string>
+ <string name="graph">Kurven</string>
+ <string name="use_logarithmic_scale">logarithmische Skala verwnden</string>
+ <string name="notenoughdata">noch keine Daten</string>
+ <string name="avghour">Durchschnitt pro Stunde</string>
+ <string name="avgmin">Durchschnitt pro Minute</string>
+ <string name="last5minutes">letzten 5 Minuten</string>
+ <string name="data_in">Eingehend</string>
+ <string name="data_out">Ausgehend</string>
+ <string name="bits_per_second">%.0f bit/s</string>
+ <string name="kbits_per_second">%.1f kbit/s</string>
+ <string name="mbits_per_second">%.1f Mbit/s</string>
+ <string name="gbits_per_second">%.1f Gbit/s</string>
+ <string name="volume_byte">%.0f B</string>
+ <string name="volume_kbyte">%.1f kB</string>
+ <string name="volume_mbyte">%.1f MB</string>
+ <string name="volume_gbyte">%.1f GB</string>
</resources>
diff --git a/app/src/main/res/values-es/plurals-icsopenvpn.xml b/app/src/main/res/values-es/plurals-icsopenvpn.xml
new file mode 100755
index 00000000..2aa7eab7
--- /dev/null
+++ b/app/src/main/res/values-es/plurals-icsopenvpn.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<resources>
+ <plurals name="months_left">
+ <item quantity="one">%d mes restante</item>
+ <item quantity="other">%d meses restantes</item>
+ </plurals>
+ <plurals name="days_left">
+ <item quantity="one">%d día restante</item>
+ <item quantity="other">%d días restantes</item>
+ </plurals>
+ <plurals name="hours_left">
+ <item quantity="one">%d hora restante</item>
+ <item quantity="other">%d horas restantes</item>
+ </plurals>
+ <plurals name="minutes_left">
+ <item quantity="one">%d minuto restanate</item>
+ <item quantity="other">%d minutos restanates</item>
+ </plurals>
+</resources>
diff --git a/app/src/main/res/values-es/strings-icsopenvpn.xml b/app/src/main/res/values-es/strings-icsopenvpn.xml
index 324742de..a123d5e6 100755
--- a/app/src/main/res/values-es/strings-icsopenvpn.xml
+++ b/app/src/main/res/values-es/strings-icsopenvpn.xml
@@ -44,13 +44,13 @@
<string name="duplicate_profile_name">Por favor, introduzca un nombre de perfil único</string>
<string name="profilename">Nombre del Perfil</string>
<string name="no_keystore_cert_selected">Debe seleccionar un certificado de usuario</string>
+ <string name="no_ca_cert_selected">Debe seleccionar un certificado</string>
<string name="no_error_found">No se encontraron errores</string>
<string name="config_error_found">Error en la configuración</string>
<string name="ipv4_format_error">Error al analizar la dirección IPv4</string>
<string name="custom_route_format_error">Error al analizar las rutas personalizadas</string>
<string name="pw_query_hint">(Deje en blanco para consultar sobre demanda)</string>
<string name="vpn_shortcut">Acceso directo de OpenVPN</string>
- <string name="vpn_launch_title">Conectar a VPN</string>
<string name="shortcut_profile_notfound">Perfil especificado en el acceso directo no encontrado</string>
<string name="random_host_prefix">Prefijo aleatorio de Host</string>
<string name="random_host_summary">Agrega 6 caracteres al azar delante del nombre de host</string>
@@ -164,7 +164,7 @@
<string name="private_key_password">Contraseña de clave privada</string>
<string name="password">Contraseña</string>
<string name="file_icon">icono de archivo</string>
- <string name="tls_authentication">Autenticación TLS</string>
+ <string name="tls_authentication">TLS autenticación/cifrado</string>
<string name="generated_config">Configuración generada</string>
<string name="generalsettings">Preferencias</string>
<string name="owner_fix_summary">Intenta establecer el propietario de /dev/tun a system. Algunas imágenes de CM9 lo necesitan hacer funcionar la API de VPNService. Requiere permisos root.</string>
@@ -181,6 +181,7 @@ hacia/de Móvil)</string>
<string name="keychain_nocacert">No se obtuvo ningún certificado de CA al leer el almacén de claves de Android. La autenticación probablemente fallará.</string>
<string name="show_log_summary">Muestra la ventana de registro el conectarse. La ventana de registro siempre puede accederse desde el estado de la notificación.</string>
<string name="show_log_window">Mostrar ventana de registro</string>
+ <string name="mobile_info">%10$s %9$s corriendo en %3$s %1$s (%2$s), Android %6$s (%7$s) API %4$d, ABI %5$s, (%8$s)</string>
<string name="error_rsa_sign">Error al firmar con la llave del almacén de llaves de Android %1$s: %2$s</string>
<string name="faq_system_dialogs">El aviso de conectividad VPN que esta aplicación puede interceptar todo el trafico esta impuesta por el sistema para evitar abusos de la API VPNService.\nLa notificación de conectividad (El símbolo de llave) también esta impuesta por el sistema Android para notificar una conexión VPN en curso. En algunas imágenes, esta notificación también emite un sonido.\nAndroid ha introducido estos diálogos de sistema para su seguridad e se ha asegurado que no pueden ser evitados. (En algunas imágenes, esto incluye la notificación sonora)</string>
<string name="faq_system_dialogs_title">Advertencia de conexión y sonido de notificación</string>
@@ -203,9 +204,8 @@ hacia/de Móvil)</string>
<string name="using_proxy">Usando proxy %1$s %2$d</string>
<string name="use_system_proxy">Usar el proxy del sistema</string>
<string name="use_system_proxy_summary">Utilice la configuración del sistema para los proxies HTTP/HTTPS al conectar.</string>
- <string name="donatewithpaypal">Usted puede &lt;a href=\"https://www.paypal.com/cgi-bin/webscr?hosted_button_id=R2M6ZP9AF25LS&amp;amp;cmd=_s-xclick\"&gt;donar con PayPal&lt;/a&gt; </string>
- <string name="onbootrestartsummary">OpenVPN volvera a conectar a una VPN si estaba activa en el apagado/reinicio del sistema. Por favor lea la P+F de advertencia de conexión antes de usar esta opción.</string>
- <string name="onbootrestart">Vuelva a conectar al reiniciar</string>
+ <string name="onbootrestartsummary">OpenVPN se conectará la VPN se especifica si está activa en el arranque del sistema. Por favor, lea las preguntas frecuentes de aviso de conexión antes de utilizar esta opción en Android &lt; 5.0.</string>
+ <string name="onbootrestart">Volver a conectar al reiniciar</string>
<string name="ignore">Ignorar</string>
<string name="restart">Reiniciar</string>
<string name="restart_vpn_after_change">Los cambios de configuración se aplican después de reiniciar la VPN. ¿(Re)iniciar la VPN ahora?</string>
@@ -252,7 +252,6 @@ hacia/de Móvil)</string>
<string name="state_tcp_connect">Conectando (TCP)</string>
<string name="state_auth_failed">Fallo de autenticación</string>
<string name="state_nonetwork">Esperando por una red que se pueda usar</string>
- <string name="statusline_bytecount">↓%2$s/s %1$s - ↑%4$s/s %3$s</string>
<string name="notifcation_title_notconnect">No conectado</string>
<string name="start_vpn_title">Conectando a VPN %s</string>
<string name="start_vpn_ticker">Conectando a VPN %s</string>
@@ -373,4 +372,28 @@ hacia/de Móvil)</string>
<string name="custom_connection_options_warng">Especifique las opciones específicas de conexión personalizada. Úselo con cuidado</string>
<string name="custom_connection_options">Opciones personalizadas</string>
<string name="remove_connection_entry">Eliminar entrada de conexión</string>
+ <string name="ab_kitkat_reconnect_title">Desconexiones aleatorias de la red móvil</string>
+ <string name="ab_vpn_reachability_44_title">Redes remotas inalcanzables</string>
+ <string name="ab_persist_tun_title">Modo Tun Persistente</string>
+ <string name="version_and_later">%s y siguientes</string>
+ <string name="tls_cipher_alert_title">Falló la conexion con SSL23_GET_SERVER_HELLO: sslv3 alerta de falla de handshake</string>
+ <string name="tls_cipher_alert">OpenVPN más reciente de las versiones de Android (0.6.29 / marzo de 2015) utilizan un defecto más seguro para los conjuntos de cifrado permitidos (TLS-cifrado \"DEFAULT: EXP: PSK: SRP: KRSA\"). Por desgracia, omitiendo el cifrado y la exportación de cifrado menos seguro, especialmente la omisión de conjuntos de cifrado que no admiten la confidencialidad directa perfecta (Diffie-Hellman) causa algunos problemas. Esto suele deberse a un intento bien intencionado pero mal ejecutada para reforzar la seguridad TLS configurando TLS-cifrado en el servidor o algunos sistemas operativos embebidos con simplificada SSL (por ejemplo MikroTik). \ N Para resolver este problema el problema, establezca el TLS-cifrado configuración en el servidor a los valores razonables como TLS-cifrado \"dEFAULT: EXP: PSK: SRP: KRSA\". Para solucionar el problema en el cliente agregar la omisión de las opciones de encargo-TLS cifrado en el cliente Android.</string>
+ <string name="message_no_user_edit">Este perfil ha sido añadido desde una aplicación externa (%s) y se ha marcado como no editable por el usuario.</string>
+ <string name="crl_file">Lista de revocación de certificados</string>
+ <string name="service_restarted">Servicio OpenVPN reinicio (App estrelló probablemente se estrelló o muerto por la presión de memoria)</string>
+ <string name="import_config_error">Importación de la configuración produjo un error, no puede guardarlo</string>
+ <string name="Search">Buscar</string>
+ <string name="lastdumpdate">(Última volcado tiene %1$d: %2$dh de edad (%3$s))</string>
+ <string name="clear_log_on_connect">Borrar registro de nueva conexión</string>
+ <string name="connect_timeout">Timeout de conexion</string>
+ <string name="no_allowed_app">No aplicación permitido añadió. Adición de nosotros mismos (%s) que tiene al menos una aplicación en la lista de aplicaciones permitido para no permitir que todas las aplicaciones
+</string>
+ <string name="query_permissions_sdcard">OpenVPN para Android puede tratar de encontrar el/los archivo/s faltante/s en la tarjeta de memoria automáticamente. Toque este mensaje de iniciar la solicitud de permiso.</string>
+ <string name="protocol">Protocolo</string>
+ <string name="enabled_connection_entry">Activo</string>
+ <string name="missing_ca_certificate">Falta certificado CA</string>
+ <string name="reread_log">Vuelva a leer (%d) artículos de archivo de caché de registro log</string>
+ <string name="samsung_broken">A pesar de que los teléfonos Samsung son algunos de los teléfonos Android más vendidos, el firmware de Samsung se encuentran entre los firmware con más errores. Los errores no se limitan a la operación del VPN en estos dispositivos, pero muchos de ellos se pueden solucionar. A continuación de describen algunos errores. \n\n El DNS no funciona a menos que el servidor DNS en el rango del VPN. \n \n En muchos dispositivos Samsung 5.x la funcionalidad de aplicaciones permitidas y no permitidas no funciona. \n En Samsung 6.x Se reporta que VPN no funcionará a menos que la aplicación de VPN se encuentre por fuera de la funcionalidad de ahorro de energía.</string>
+ <string name="samsung_broken_title">Celulares Samsung</string>
+ <string name="novpn_selected">VPN no seleccionado.</string>
</resources>
diff --git a/app/src/main/res/values-et/plurals-icsopenvpn.xml b/app/src/main/res/values-et/plurals-icsopenvpn.xml
new file mode 100755
index 00000000..829589b6
--- /dev/null
+++ b/app/src/main/res/values-et/plurals-icsopenvpn.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<resources>
+ <plurals name="months_left">
+ <item quantity="one">Jäänud üks kuu</item>
+ <item quantity="other">Jäänud %d kuud</item>
+ </plurals>
+ <plurals name="days_left">
+ <item quantity="one">Jäänud üks päev</item>
+ <item quantity="other">Jäänud %d päeva</item>
+ </plurals>
+ <plurals name="hours_left">
+ <item quantity="one">Jäänud üks tund</item>
+ <item quantity="other">Jäänud %d tundi</item>
+ </plurals>
+ <plurals name="minutes_left">
+ <item quantity="one">Jäänud üks minut</item>
+ <item quantity="other">Jäänud %d minutit</item>
+ </plurals>
+</resources>
diff --git a/app/src/main/res/values-et/strings-icsopenvpn.xml b/app/src/main/res/values-et/strings-icsopenvpn.xml
index 0a28199f..916e8db1 100755
--- a/app/src/main/res/values-et/strings-icsopenvpn.xml
+++ b/app/src/main/res/values-et/strings-icsopenvpn.xml
@@ -44,13 +44,14 @@
<string name="duplicate_profile_name">Palun sisestage unikaalne profiilinimi</string>
<string name="profilename">Profiili nimi</string>
<string name="no_keystore_cert_selected">Peate valima kasutaja sertifikaadi</string>
+ <string name="no_ca_cert_selected">Peate valima CA sertifikaadi</string>
<string name="no_error_found">Vigu ei leitud</string>
<string name="config_error_found">Konfiguratsiooni viga</string>
<string name="ipv4_format_error">Sisestatud IPv4 aadress ei allu süntaksianalüüsile</string>
<string name="custom_route_format_error">Kohandatud marsruudid ei allu süntaksianalüüsile</string>
<string name="pw_query_hint">(jäta tühjaks, küsitakse vajadusel)</string>
<string name="vpn_shortcut">OpenVPN kiirkäivitus</string>
- <string name="vpn_launch_title">Ãœhendu VPN\'iga</string>
+ <string name="vpn_launch_title">Ühendumine VPN külge&#8230;</string>
<string name="shortcut_profile_notfound">Lühivalikus määratud profiil puudub</string>
<string name="random_host_prefix">Juhuslik serveri eesliide</string>
<string name="random_host_summary">Lisab 6 juhuslikku tähte serveri nime ette</string>
@@ -164,7 +165,7 @@
<string name="private_key_password">Privaatse võtme salasõna</string>
<string name="password">Salasõna</string>
<string name="file_icon">faili ikoon</string>
- <string name="tls_authentication">TLS autentimine</string>
+ <string name="tls_authentication">TLS Autentimine/Krüpteerimine</string>
<string name="generated_config">Genereeritud konfiguratsioon</string>
<string name="generalsettings">Seaded</string>
<string name="owner_fix_summary">Püütakse seada /dev/tun omanikku system\'iks. VPNService API nõuab seda mõne CM9 versiooni puhul. Seade peab olema ruuditud.</string>
@@ -203,9 +204,8 @@
<string name="using_proxy">Kasutusel proxy %1$s %2$d</string>
<string name="use_system_proxy">Kasuta süsteemset proxy\'t</string>
<string name="use_system_proxy_summary">Kasuta ühendumisel süsteemse HTTP/HTTPS proxy konfiguratsiooni.</string>
- <string name="donatewithpaypal">Sul on võimalus &lt;a href=\"https://www.paypal.com/cgi-bin/webscr?hosted_button_id=R2M6ZP9AF25LS&amp;amp;cmd=_s-xclick\"&gt;annetada PayPal vahendusel&lt;/a&gt; </string>
- <string name="onbootrestartsummary">Kui VPN oli süsteemi uuestilaadimisel/sulgemisel aktiivne siis taastatakse seadme käivitamisel OpenVPN ühendus. Palun lugege enne selle valiku kasutamist läbi ühendumise hoiatuse KKK.</string>
- <string name="onbootrestart">Uuestilaadimisel ühendu uuesti</string>
+ <string name="onbootrestartsummary">OpenVPN ühendab määratud VPN kui see oli süsteemi käivitumisel aktiivne. Palun tutvuge, enne Android &lt; 5.0 peal selle võimaluse kasutamist, KKK hoiatusega ühendumise kohta.</string>
+ <string name="onbootrestart">Ühenda käivitamisel</string>
<string name="ignore">Ignoreeri</string>
<string name="restart">Uuestilaadimine</string>
<string name="restart_vpn_after_change">Konfiguratsioonimuudatused rakendatakse peale VPN uuestilaadimist. Kas soovite VPN kohe (uuesti)laadida?</string>
@@ -252,7 +252,7 @@
<string name="state_tcp_connect">Ãœhendumine (TCP)</string>
<string name="state_auth_failed">Autentimine ebaõnnestus</string>
<string name="state_nonetwork">Oodatakse kasutatavat võrku</string>
- <string name="statusline_bytecount">↓%2$s/s %1$s - ↑%4$s/s %3$s</string>
+ <string name="statusline_bytecount">↓%2$s %1$s - ↑%4$s %3$s</string>
<string name="notifcation_title_notconnect">Pole ühendatud</string>
<string name="start_vpn_title">Ühendumine VPN %s külge</string>
<string name="start_vpn_ticker">Ühendumine VPN %s külge</string>
@@ -392,7 +392,30 @@
<string name="protocol">Protokoll</string>
<string name="enabled_connection_entry">Lubatud</string>
<string name="abi_mismatch">Selle seadme eelistatud ABI eelisjärjekord (%1$s) ja seadme kaasnevate teekide teatatud ABI (%2$s) ei ühildu</string>
- <string name="months_left">Jäänud on %d kuud</string>
- <string name="days_left">jäänud on %d päeva</string>
- <string name="hours_left">Jäänud on %d tundi</string>
+ <string name="permission_revoked">OS tühistas VPN õigused (nt. töötab teine VPN programm). VPN peatatakse</string>
+ <string name="pushpeerinfo">Saada partneri andmed</string>
+ <string name="pushpeerinfosummary">Saada serverile lisaandmeid, nt. SSL versioon ja Android versioon</string>
+ <string name="pw_request_dialog_title">Vaja %1$s</string>
+ <string name="pw_request_dialog_prompt">Palun sisestage profiili %1$s salasõna</string>
+ <string name="menu_use_inline_data">Kasutage tekstisiseseid andmeid</string>
+ <string name="export_config_chooser_title">Konfiguratsioonifaili eksportimine</string>
+ <string name="missing_tlsauth">puudub tls-auth fail</string>
+ <string name="missing_certificates">Puudub kasutajasertifikaat või kasutajasertifikaadi võtmefail</string>
+ <string name="missing_ca_certificate">Puudub CA sertifikaat</string>
+ <string name="crl_title">Sertifikaatide tühistusnimekiri (valikuline)</string>
+ <string name="reread_log">Taasloe logi puhverfailist (%d) logikirjet</string>
+ <string name="samsung_broken">Vaatamata sellele et Samsungi telefonid on ühed populaarsemad Android telefonid, on Samsungi tarkvara üks auklikumatest Android tarkvarade seas. Probleemid ei piirdu vaid nende seadmete VPN toimingutega kuid on enamasti lahendatavad. Edasine kirjeldab mõnda probleemi.\n\nDNS ei toimi kui DNS server pole VPN vahemikus.\n\nPaljudel Samsungi 5.x seadmetel ei toimi programmide lubamise/keelamise võimalus.\nSamsung 6.x telefonide kohta on teateid et VPN ei tööta kui VPN programmil pole välistatud toitesääst.</string>
+ <string name="samsung_broken_title">Samsungi telefonid</string>
+ <string name="novpn_selected">VPN valimata.</string>
+ <string name="defaultvpn">Vaikimisi VPN</string>
+ <string name="reconnect">Taasühenda</string>
+ <string name="qs_title">VPN lülitamine</string>
+ <string name="qs_connect">Ühendu %s külge</string>
+ <string name="qs_disconnect">Lahuta %s küljest</string>
+ <string name="connectretrymaxmessage">Sisestage suurim ühendumiskatsete vaheline aeg. OpenVPN tõstab ebaõnnestunud ühendumiskatsete puhul aegamööda ooteaega kuni jõuab selle väärtuseni. Vaikeväärtus on 300s.</string>
+ <string name="connectretrymaxtitle">Suurim lubatud ühendumiskatsete vaheline aeg</string>
+ <string name="state_waitconnectretry">Ãœhendumiskatsete vahel oodatakse %ss sekundit</string>
+ <string name="change_sorting">Muuda sorteerimist</string>
+ <string name="sort">Sorteeri</string>
+ <string name="last5minutes">Viimased 5 minutit</string>
</resources>
diff --git a/app/src/main/res/values-fr/plurals-icsopenvpn.xml b/app/src/main/res/values-fr/plurals-icsopenvpn.xml
new file mode 100755
index 00000000..e9e4c680
--- /dev/null
+++ b/app/src/main/res/values-fr/plurals-icsopenvpn.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<resources>
+ <plurals name="months_left">
+ <item quantity="one">Un mois restant</item>
+ <item quantity="other">%d mois restants</item>
+ </plurals>
+ <plurals name="days_left">
+ <item quantity="one">Un jour restant</item>
+ <item quantity="other">%d jours restants</item>
+ </plurals>
+ <plurals name="hours_left">
+ <item quantity="one">Une heure restante</item>
+ <item quantity="other">%d heures restantes</item>
+ </plurals>
+ <plurals name="minutes_left">
+ <item quantity="one">Une minute restante</item>
+ <item quantity="other">%d minutes restantes</item>
+ </plurals>
+</resources>
diff --git a/app/src/main/res/values-fr/strings-icsopenvpn.xml b/app/src/main/res/values-fr/strings-icsopenvpn.xml
index 43737f3d..ae289702 100755
--- a/app/src/main/res/values-fr/strings-icsopenvpn.xml
+++ b/app/src/main/res/values-fr/strings-icsopenvpn.xml
@@ -7,9 +7,9 @@
<resources>
<string name="address">"Adresse du serveur:"</string>
- <string name="port">"Port du serveur:"</string>
+ <string name="port">Port du serveur :</string>
<string name="location">"Emplacement"</string>
- <string name="cant_read_folder">"Le dossier ne peut être lu !"</string>
+ <string name="cant_read_folder">Impossible de lire le dossier</string>
<string name="select">"Sélectionner"</string>
<string name="cancel">"Annuler"</string>
<string name="no_data">"Aucune donnée"</string>
@@ -20,7 +20,7 @@
<string name="client_pkcs12_title">"Fichier PKCS12"</string>
<string name="ca_title">"Certificat CA"</string>
<string name="no_certificate">"Vous devez sélectionner un certificat"</string>
- <string name="copyright_guicode">"Le code source et le tracker de bugs est disponible ici: http://code.google.com/p/ics-openvpn/ "</string>
+ <string name="copyright_guicode">Le code source et le tracker de bugs est disponible sur https://github.com/schwabe/ics-openvpn/</string>
<string name="copyright_others">"Le programme utilise les composants suivants. Voir le code source pour plus de détails sur les licences."</string>
<string name="about">"À propos"</string>
<string name="vpn_list_title">Profils</string>
@@ -29,12 +29,12 @@
<string name="file_select">"Sélectionner…"</string>
<string name="file_nothing_selected">Vous devez sélectionner un fichier</string>
<string name="useTLSAuth">"Utiliser l\'authentification TLS"</string>
- <string name="tls_direction">"Direction de l\'authentification TLS"</string>
- <string name="ipv6_dialog_tile">"Entrez l\'adresse IPv6 / masque de réseau au format CIDR (ex.: 2000:jj::23/64)"</string>
- <string name="ipv4_dialog_title">"Saisissez l\'adresse IPv4 / masque de réseau au format CIDR (ex.: 1.2.3.4/24)"</string>
+ <string name="tls_direction">Direction TLS</string>
+ <string name="ipv6_dialog_tile">Entrez l\'adresse IPv6 / masque de réseau au format CIDR (ex : 2000:jj::23/64)</string>
+ <string name="ipv4_dialog_title">Entrez l\'adresse IPv4 / masque de réseau au format CIDR (ex : 1.2.3.4/24)</string>
<string name="ipv4_address">"Adresse IPv4"</string>
<string name="ipv6_address">"Adresse IPv6"</string>
- <string name="custom_option_warning">"Entrez les options d\'OpenVPN personnalisés. A manipuler avec le plus grand soin. A noter également que de nombreux paramètres Tun d\'OpenVPN ne sont pas pris en charge à cause de la conception de \"VPNSettings\". Si vous pensez qu\'une option importante manque, veuillez contacter l\'auteur"</string>
+ <string name="custom_option_warning">Entrez les options d\'OpenVPN personnalisées. A utiliser avec précaution. A noter aussi que de nombreux paramètres Tun d\'OpenVPN ne sont pas pris en charge à cause de la conception de \"VPNSettings\". Si vous pensez qu\'une option importante manque, veuillez contacter l\'auteur</string>
<string name="auth_username">"Nom d\'utilisateur"</string>
<string name="auth_pwquery">"Mot de passe"</string>
<string name="static_keys_info">"Pour la configuration statique, des clés d\'authentification TLS seront utilisés comme des clés statiques."</string>
@@ -44,27 +44,28 @@
<string name="duplicate_profile_name">Veuillez entrer un nom de profil unique</string>
<string name="profilename">"Nom de profil"</string>
<string name="no_keystore_cert_selected">"Aucun certificat utilisateur sélectionné."</string>
+ <string name="no_ca_cert_selected">Vous devez sélectionner un certificat CA</string>
<string name="no_error_found">"Aucune erreur"</string>
<string name="config_error_found">"Erreur dans la configuration"</string>
<string name="ipv4_format_error">"Impossible d\'analyser l\'adresse IPv4"</string>
- <string name="custom_route_format_error">"Impossible d\'analyser les règles de redirection personnalisés"</string>
- <string name="pw_query_hint">"Laissez vide pour définir si nécessaire"</string>
+ <string name="custom_route_format_error">Impossible d\'analyser les redirections personnalisées</string>
+ <string name="pw_query_hint">(Laisser vide pour interroger sur demande)</string>
<string name="vpn_shortcut">"Raccourci OpenVPN"</string>
- <string name="vpn_launch_title">"Se connecter au VPN"</string>
+ <string name="vpn_launch_title">Connexion à VPN &#8230;</string>
<string name="shortcut_profile_notfound">"Profil spécifié dans raccourci introuvable"</string>
- <string name="random_host_prefix">"Préfixe de l\'hôte au hasard"</string>
+ <string name="random_host_prefix">Préfixe de l\'hôte aléatoire</string>
<string name="random_host_summary">"Ajoute 6 caractères aléatoires en face du nom d\'hôte"</string>
<string name="custom_config_title">"Activer les options personnalisées"</string>
<string name="custom_config_summary">"Spécifiez les options personnalisées. A utiliser avec précaution !"</string>
<string name="route_rejected">"Route rejetée par Android"</string>
- <string name="cancel_connection">"Déconnecter"</string>
+ <string name="cancel_connection">Déconnecter</string>
<string name="cancel_connection_long">Déconnecter le VPN</string>
- <string name="clear_log">"Effacer les logs"</string>
+ <string name="clear_log">effacer le journal</string>
<string name="title_cancel">"Annuler la confirmation"</string>
<string name="cancel_connection_query">"Déconnecter le VPN connecté / annuler la tentative de connexion ?"</string>
- <string name="remove_vpn">"Retirer le VPN"</string>
- <string name="check_remote_tlscert">Vérifier si le serveur utilise des certificats avec les extensions TLS serveur (--remote-cert-tls serveur)</string>
- <string name="check_remote_tlscert_title">Attendre un certificat de serveur TLS</string>
+ <string name="remove_vpn">Supprimer le VPN</string>
+ <string name="check_remote_tlscert">Vérifie si le serveur utilise un certificat avec les extensions de serveur TLS (--remote-cert-tls server)</string>
+ <string name="check_remote_tlscert_title">Attendre le certificat de serveur TLS</string>
<string name="remote_tlscn_check_summary">Vérifie l\'objet du certificat serveur distant DN</string>
<string name="remote_tlscn_check_title">"Vérification du certificat de l\'hôte"</string>
<string name="enter_tlscn_dialog">Spécifiez le contrôle utilisé pour vérifier le certificat à distance DN (par exemple, C=DE, L=Paderborn, OU =Avian IP Carriers, CN=openvpn.blinkt.de)\n\nIndiquez le DN complet ou le RDN (openvpn.blinkt.de dans l\'exemple) ou un préfixe RDN pour vérification.\n\nEn utilisant le préfixe RDN \"Server\" correspond à \"Server-1\" et \"Server 2\"\n\nSi vous laissez le champ de texte vide, cela vérifiera le RDN contre le nom du serveur.\n\nPour plus de détails, voir la page du manuel OpenVPN 2.3.1 sous —verify-x509-name</string>
@@ -73,64 +74,64 @@
<string name="tls_auth_file">"Fichier d\'authentification TLS"</string>
<string name="pull_on_summary">"Demande les adresses IP, les règles de redirection et les options de synchronisation du serveur."</string>
<string name="pull_off_summary">"Aucune information n\'est demandée par le serveur. Les paramètres doivent être spécifiés ci-dessous."</string>
- <string name="use_pull">"Réglages \"Pull\""</string>
- <string name="dns">"DNS"</string>
+ <string name="use_pull">Paramètres \"Pull\"</string>
+ <string name="dns">DNS</string>
<string name="override_dns">"Remplacer les paramètres DNS par le serveur"</string>
- <string name="dns_override_summary">"Utilisez vos propres serveurs DNS"</string>
- <string name="searchdomain">"Domaine"</string>
- <string name="dns1_summary">"Serveur DNS à utiliser."</string>
- <string name="dns_server">"Serveur DNS"</string>
- <string name="secondary_dns_message">"Serveur DNS secondaire utilisé si le serveur DNS principal ne peut pas être atteint."</string>
- <string name="backup_dns">"Serveur DNS secondaire"</string>
- <string name="ignored_pushed_routes">"Ignorer les règles envoyées"</string>
- <string name="ignore_routes_summary">"Ignorer les règles de redirection de ports envoyées par le serveur."</string>
- <string name="default_route_summary">"Redirige tout le trafic sur la connexion VPN"</string>
- <string name="use_default_title">"Utiliser la redirection par défaut"</string>
- <string name="custom_route_message">"Entrez les règles de redirection. N\'entrez la destination qu\'au format CIDR. \"10.0.0.0 / 8 2002::/16\" redirigerait les réseaux 10.0.0.0/8 et 2002::/16 via le VPN."</string>
- <string name="custom_route_message_excluded">Routes qui ne devraient pas être routés via le VPN. Utilisez la même syntaxe que pour les routes incluses.</string>
- <string name="custom_routes_title">"Règles personnalisés"</string>
+ <string name="dns_override_summary">Utilisez vos propres serveurs DNS</string>
+ <string name="searchdomain">suffixe de recherche</string>
+ <string name="dns1_summary">Serveur DNS à utiliser.</string>
+ <string name="dns_server">Serveur DNS</string>
+ <string name="secondary_dns_message">Serveur DNS secondaire utilisé si le serveur DNS principal ne peut pas être joins.</string>
+ <string name="backup_dns">Serveur DNS secondaire</string>
+ <string name="ignored_pushed_routes">Ignorer les routes envoyées</string>
+ <string name="ignore_routes_summary">Ignorer les règles de routage envoyées par le serveur.</string>
+ <string name="default_route_summary">Redirige tout le trafic vers la connexion VPN</string>
+ <string name="use_default_title">Utiliser la route par défaut</string>
+ <string name="custom_route_message">Entrer les règles de routage. Saisissez seulement les destinations au format CIDR. Exemple: \"10.0.0.0/8 2002::/16\" devrait router les réseaux 10.0.0.0/8 et 2002::/16 via le VPN.</string>
+ <string name="custom_route_message_excluded">Routes qui ne devant pas être routées à travers le VPN. Utilisez la même syntaxe que pour les règles de routage.</string>
+ <string name="custom_routes_title">Routes personnalisées</string>
<string name="custom_routes_title_excluded">Réseaux exclus</string>
- <string name="log_verbosity_level">"Niveau de verbosité des logs"</string>
- <string name="float_summary">"Autorise les paquets authentifiés à partir de n\'importe quelle adresse IP"</string>
+ <string name="log_verbosity_level">Niveau de verbosité des logs</string>
+ <string name="float_summary">Autorise les paquets authentifiés à partir de n\'importe quelle adresse IP</string>
<string name="float_title">"Permettre des serveur flottants"</string>
- <string name="custom_options_title">"Options personnalisées"</string>
- <string name="edit_vpn">"Modifier les paramètres VPN"</string>
- <string name="remove_vpn_query">\"Effacer le profil VPN %s ?\"?</string>
- <string name="tun_error_helpful">"Sur certaines ROMs ICS les permissions de /dev/tun peuvent être incorrectes, ou le module Tun peut être manquant. Pour les ROMs CM9, essayez de corriger les options dans \"General Settings\""</string>
- <string name="tun_open_error">"L\'ouverture de l\'interface Tun a échoué."</string>
- <string name="error">"Erreur: "</string>
- <string name="clear">"Effacer"</string>
- <string name="last_openvpn_tun_config">Ouverture de l\'interface tun:</string>
- <string name="local_ip_info">"IPv4 locale: %1$s/%2$d IPv6: %3$s MTU: %4$d"</string>
- <string name="dns_server_info">Serveur DNS: %1$s, Domaine: %2$s</string>
+ <string name="custom_options_title">Options personnalisées</string>
+ <string name="edit_vpn">Modifier les paramètres du VPN</string>
+ <string name="remove_vpn_query">Effacer le profil VPN \"%s\" ?</string>
+ <string name="tun_error_helpful">Sur certaines images ICS les permissions de /dev/tun peuvent être incorrectes, ou encore le module tun peut être manquant. Pour les images CM9, essayez de corriger les permissions via les paramètres généreaux</string>
+ <string name="tun_open_error">L\'ouverture de l\'interface /dev/tun a échouée</string>
+ <string name="error">Erreur :</string>
+ <string name="clear">Effacer</string>
+ <string name="last_openvpn_tun_config">Ouverture de l\'interface tun :</string>
+ <string name="local_ip_info">IPv4 locale : %1$s/%2$d IPv6 : %3$s MTU : %4$d</string>
+ <string name="dns_server_info">Serveur DNS : %1$s, Domaine : %2$s</string>
<string name="routes_info_incl">Routes : %1$s %2$s</string>
<string name="routes_info_excl">Routes exclues : %1$s %2$s</string>
<string name="routes_debug">Routes VpnService installés : %1$s %2$s</string>
- <string name="ip_not_cidr">"Informations récupérées de l\'interface: %1$s et %2$s , en supposant que la seconde adresse est l\'adresse peer du réseau distant. Utilisation du masque de réseau /32 pour l\'IP locale. Mode donné par OpenVPN: \"%3$s\"."</string>
+ <string name="ip_not_cidr">Informations récupérées de l\'interface : %1$s et %2$s , en supposant que la seconde adresse est l\'adresse peer du réseau distant. Utilisation du masque de réseau /32 pour l\'IP locale. Mode donné par OpenVPN : \"%3$s\".</string>
<string name="route_not_cidr">"Ne peut pas donner un sens à %1$s et %2$s comme routage IP avec masque réseau de type CIDR, en utilisant /32 comme masque de réseau."</string>
- <string name="route_not_netip">"Règle de redirection corrigée: %1$s / %2$s en %3$s / %2$s"</string>
+ <string name="route_not_netip">Route corrigée : %1$s / %2$s en %3$s / %2$s</string>
<string name="keychain_access">\"Impossible d\'accéder aux certificats \"Android Keychain\". (Peut être causé par une mise à jour du firmware ou par une restauration d\'une sauvegarde des paramètres de l\'application). Veuillez modifier le profil VPN et sélectionnez de nouveau le certificat dans les réglages de base pour recréer l\'autorisation d\'accéder au certificat.\".</string>
<string name="version_info">"%1$s %2$s"</string>
- <string name="send_logfile">"Envoyer le fichier de log"</string>
- <string name="send">"Envoyer"</string>
+ <string name="send_logfile">Envoyer le fichier de log</string>
+ <string name="send">Envoyer</string>
<string name="ics_openvpn_log_file">"Fichier de log OpenVPN ICS"</string>
- <string name="copied_entry">"Entrée du log copiée"</string>
- <string name="tap_mode">"Mode TAP"</string>
+ <string name="copied_entry">Entrée du journal copié dans le presse papier</string>
+ <string name="tap_mode">Mode Tap</string>
<string name="faq_tap_mode">"Le mode TAP est indisponible avec l\'API non root VPN. Par conséquent, cette application ne peut pas supporter TAP"</string>
<string name="tap_faq2">\"Encore une fois? Vous plaisantez? Le mode TAP n\'est absolument pas pris en charge et l\'envoi de plus d\'e-mails demandant si il sera intégré ne va en rien aider.\".</string>
<string name="tap_faq3">\"Encore une fois ? En fait il est possible que quelqu\'un puisse écrire un émulateur TAP basé sur TUN qui pourrait analyser des informations de type \"layer2\". Mais cet émulateur devrait aussi implémenter ARP et un client DHCP. Je ne suis actuellement pas au courant que quelqu\'un travail dessus. Contactez moi si vous voulez m\'aider là dessus\".</string>
- <string name="faq">"FAQ"</string>
+ <string name="faq">FAQ</string>
<string name="copying_log_entries">"Copie des entrées du log"</string>
<string name="faq_copying">"Pour copier une seule entrée du log restez appuyé sur celle-ci. Pour copier ou envoyer le log au complet utilisez l\'option \"Envoi du Log\". Utilisez le bouton matériel s\'il n\'est pas visible."</string>
<string name="faq_shortcut">"Raccourci pour démarrer"</string>
<string name="faq_howto_shortcut">Vous pouvez placer un raccourci pour démarrer OpenVPN sur l\'écran d\'accueil. En fonction du programme gérant votre écran d\'accueil, vous devez soit ajouter un raccourci, soit un widget.</string>
<string name="no_vpn_support_image">"Votre ROM ne prend pas en charge l\'API VPNService, désolé :("</string>
- <string name="encryption">"Cryptage"</string>
- <string name="cipher_dialog_title">"Entrez la méthode de cryptage"</string>
- <string name="chipher_dialog_message">Entrer l\'algorithme de chiffrement utilisé par OpenVPN. Laisser vide pour utiliser l\'algorithme par défaut.</string>
- <string name="auth_dialog_message">Entrer le digest à utiliser par OpenVPN pour l\'authentification. Laisser vide pour utiliser l\'algorithme par défaut.</string>
- <string name="settings_auth">"Authentification / Cryptage"</string>
- <string name="file_explorer_tab">"Explorateur de fichiers"</string>
+ <string name="encryption">Chiffrement</string>
+ <string name="cipher_dialog_title">Entrez la méthode de chiffrement</string>
+ <string name="chipher_dialog_message">Entrez l\'algorithme de chiffrement utilisé par OpenVPN. Laisser vide pour utiliser le cipher par défaut.</string>
+ <string name="auth_dialog_message">Entrez l\'authentification digest utilisé pour OpenVPN. Laisser vide pour utiliser le digest par défaut.</string>
+ <string name="settings_auth">Authentification / Chiffrement</string>
+ <string name="file_explorer_tab">Explorateur de fichiers</string>
<string name="inline_file_tab">"Fichier personnalisé"</string>
<string name="error_importing_file">"Impossible d\'importer le fichier"</string>
<string name="import_error_message">"Impossible d\'importer le fichier depuis le système de fichiers"</string>
@@ -140,44 +141,44 @@
<string name="menu_import_short">"Importer"</string>
<string name="import_content_resolve_error">"Impossible de lire le profil à importer"</string>
<string name="error_reading_config_file">"Erreur de lecture du fichier de configuration"</string>
- <string name="add_profile">"Ajouter un profil"</string>
+ <string name="add_profile">ajouter un profil</string>
<string name="import_could_not_open">"Impossible de trouver le fichier %1$s mentionné dans le fichier de configuration importé"</string>
<string name="importing_config">"Importation du fichier de configuration depuis %1$s"</string>
- <string name="import_warning_custom_options">Votre configuration a quelques options qui ne sont pas prises en compte par l\'interface utilisateur. Ces options ont donc été ajoutées comme des options de configuration personnalisées:</string>
+ <string name="import_warning_custom_options">Votre configuration a quelques options qui ne sont pas prises en compte par l\'interface utilisateur. Ces options ont donc été ajoutées comme des options de configuration personnalisées :</string>
<string name="import_done">"Fin de la lecture du fichier de configuration."</string>
<string name="nobind_summary">"Ne pas se lier à l\'adresse locale et au port"</string>
<string name="no_bind">"Aucune liaison locale"</string>
- <string name="import_configuration_file">"Importer un fichier de configuration"</string>
+ <string name="import_configuration_file">Importer le fichier de configuration</string>
<string name="faq_security_title">"Considérations de sécurité"</string>
<string name="faq_security">"La stratégie de sécurité d\'OpenVPN amène quelque remarques concernant la sécurité des données saisies. En général, toutes les informations stockées sur la carte SD ne sont pas sécurisées. Toute application peut en obtenir l\'accès (par exemple, ce programme ne requiert aucun droit particulier d\'accès à la carte SD). Dans le cas de ce programme, il est le seul à avoir accès à ces données. En utilisant l\'option d\'importation pour les CaCert/Cert/Key, les données sont stockées dans le porfile VPN. Ce dernier est seulement accessible à cette application. Ainsi, veuillez ne pas oublier de supprimer les copies sur la carte SD après importation. Car, même si l\'application en a l\'exclusivité, les données ne sont pas pour autant cryptées. En \"rootant\" l\'appareil ou par d\'autres exploits il est toujours possible d\'accéder à ces informations. A titre d\'exemple, les mots de passe sont stockés en clair. Pour les fichiers de type Pkfcs12, il est fortement recommandé que vous les importiez dans le gestionnaire de clées d\'Android."</string>
<string name="import_vpn">"Importer"</string>
<string name="broken_image_cert_title">"Erreur d\'affichage certificat sélectionné"</string>
<string name="broken_image_cert">"Exception en essayant d\'afficher le dialogue de sélection du certification d\'Android 4.0+. Ceci ne devrait pas se produire car c\'est une des fonctionnalités de base de ce système. Il est donc possible que votre ROM ne supporte pas le stockage de certfiicats."</string>
<string name="ipv4">"IPv4"</string>
- <string name="ipv6">"IPv6"</string>
- <string name="speed_waiting">Attente du status&#8230;</string>
- <string name="converted_profile">"profil importé"</string>
- <string name="converted_profile_i">"profil importé: %d"</string>
- <string name="broken_images">"Images corrompues "</string>
+ <string name="ipv6">IPv6</string>
+ <string name="speed_waiting">Attente du statut&#8230;</string>
+ <string name="converted_profile">profil importé</string>
+ <string name="converted_profile_i">profil importé %d</string>
+ <string name="broken_images">Images corrompues</string>
<string name="broken_images_faq">&lt;&gt;Les ROMs officielles HTC sont connues pour avoir des problèmes de routage entraînant que le trafic ne passe pas par le tunnel VPN. (C.f.: &lt;a href=\"http://code.google.com/p/ics-openvpn/issues/detail?id=18\"&gt;Issue 18&lt;/a&gt; dans le \"bug tacker\")&lt;/p&gt;&lt;p&gt;Les ROMs officielles de SONY pour le Xperia Arc S et le Xperia Ray ont été signalé comme ne possédant pas le service VPN. Toute autre ROM SONY peut avoir le même problème. (C.f.: &lt;a href=\"http://code.google.com/p/ics-openvpn/issues/detail?id=29\"&gt;Issue 29&lt;/a&gt; dans le \"bug tacker\")&lt;/p&gt;&lt;p&gt;Sur les ROM personnalisées le module TUN peut être manquant ou les droits de /dev/tun peuvent être incorrects. Certaines ROM CM9 peuvent nécessiter d\'utiliser l\'option de correction des droits de /dev/tun accessible depuis les \"Options générales\"/&lt;/p&gt;&lt;p&gt;Important: Si votre ROM a un problème, contactez le vendeur, il se peut que qu\'il vous fournisse un patch.&lt;/p&gt;</string>
- <string name="pkcs12_file_encryption_key">"Fichier de clé de cryptage PKCS12"</string>
- <string name="private_key_password">"Mot de passe de clé privée"</string>
- <string name="password">"Mot de passe"</string>
- <string name="file_icon">"icône du fichier"</string>
- <string name="tls_authentication">"Authentification TLS"</string>
- <string name="generated_config">"Configuration générée"</string>
+ <string name="pkcs12_file_encryption_key">Fichier contenant la clé de chiffrement PKCS12</string>
+ <string name="private_key_password">Mot de passe de la clé privée</string>
+ <string name="password">Mot de passe</string>
+ <string name="file_icon">icône du fichier</string>
+ <string name="tls_authentication">TLS Authentification/Cryptage</string>
+ <string name="generated_config">Configuration générée</string>
<string name="generalsettings">Paramètres</string>
- <string name="owner_fix_summary">"Tente de définir le propriétaire de /dev/tun. Certaines ROMs CM9 en ont besoin pour faire fonctionner l\'API VPNService. Nécessite les droits root."</string>
- <string name="owner_fix">"Corriger le propriétaire de /dev/tun"</string>
- <string name="generated_config_summary">"Affiche le fichier de configuration OpenVPN généré"</string>
- <string name="edit_profile_title">"Modification \"%s\""</string>
- <string name="building_configration">"Création de la configuration…"</string>
- <string name="netchange_summary">"L\'activation de cette option forcera l\'appareil à se reconnecter si l\'état du réseau change (ex.: WIFI/Mobile)"</string>
- <string name="netchange">"Reconnexion lors de changement du réseau"</string>
- <string name="netstatus">"État du réseau: %s"</string>
+ <string name="owner_fix_summary">Essaie de définir le propriétaire de l\'interface /dev/tun. Certaines images CM9 en ont besoin pour faire fonctionner l\'API VPNService. Nécessite les droits root.</string>
+ <string name="owner_fix">Corriger les permissions de /dev/tun</string>
+ <string name="generated_config_summary">Affiche le fichier de configuration OpenVPN généré</string>
+ <string name="edit_profile_title">Modification \"%s\"</string>
+ <string name="building_configration">Création de la configuration&#8230;</string>
+ <string name="netchange_summary">Activer cette option forcera une reconnexion si l\'état du réseau est modifié (par exemple WiFi/Mobile)</string>
+ <string name="netchange">Se reconnecter lors d\'un changement de réseau</string>
+ <string name="netstatus">État du réseau : %s</string>
<string name="extracahint">"Le certificat CA est généralement renvoyé par le gestionnaire de clés Android. Spécifiez un certificat distinct si vous obtenez des erreurs de vérification de certificat."</string>
<string name="select_file">"Sélectionner"</string>
- <string name="keychain_nocacert">"Aucun certificat CA renvoyée lors de la lecture depuis le gestionnaire de clés. L\'authentification échouera probablement."</string>
+ <string name="keychain_nocacert">Aucun certificat CA n\'a été trouvé depuis le gestionnaire de clés d\'Android. L\'authentification va probablement échoué.</string>
<string name="show_log_summary">"Affiche la fenêtre de log à la connexion. Cette fenêtre peut toujours être consultée à partir de la notification d\'état."</string>
<string name="show_log_window">"Afficher la fenêtre de log"</string>
<string name="mobile_info">%10$s %9$s courir sur %3$s %1$s (%2$s), Android %6$s (%7$s) API %4$d, ABI %5$s, (%8$s)</string>
@@ -185,13 +186,13 @@
<string name="faq_system_dialogs">\"L\'avertissement de connexion au VPN qui vous informe que cette application peut intercepter tout le trafic est imposé par le système pour éviter les abus de l\'API du service VPN.\nLa notification de connexion au VPN (Le symbole qui ressemble à une clé) est aussi imposé par le système Android pour signaler une connexion VPN en cours de fonctionnement.
Sur certaines images, cette notification joue un son.\nAndroid à introduit ces dialogues système pour votre propre sécurité et à fait en sorte d\'être impossible à contourner. (Cela peut inclure en plus une notification sonore pour certaines images)\"</string>
<string name="faq_system_dialogs_title">"Avertissement de connexion et son de notification"</string>
- <string name="translationby">French translation by Stanislas Bach&lt;stanislasbach@gmail.com&gt;</string>
- <string name="ipdns">"IP et DNS"</string>
- <string name="basic">"Base"</string>
- <string name="routing">"Redirection de ports"</string>
- <string name="obscure">"Réglages OpenVPN avancés"</string>
- <string name="advanced">"Avancé"</string>
- <string name="export_config_title">"Configuration ICS OpenVPN "</string>
+ <string name="translationby">Traduction française par les utilisateurs sur Crowdin</string>
+ <string name="ipdns">IP et DNS</string>
+ <string name="basic">Base</string>
+ <string name="routing">Routage</string>
+ <string name="obscure">Paramètres OpenVPN avancés</string>
+ <string name="advanced">Avancée</string>
+ <string name="export_config_title">Configuration ICS OpenVPN</string>
<string name="warn_no_dns">Aucun serveur DNS utilisé. La résolution de noms de domaines peut ne pas fonctionner. Envisager d\'ajouter des serveurs DNS personnalisés. Veuillez également noter que Android va continuer à utiliser vos paramètres de proxy spécifiés pour votre connexion Wi-Fi/mobile lorsque aucun serveur DNS n\'est défini.</string>
<string name="dns_add_error">"Impossible d\'ajouter le serveur DNS \"%1$s\", rejetés par le système: %2$s"</string>
<string name="ip_add_error">Impossible de configurer l\'adresse IP \"%1$s\", rejetées par le système : %2$s</string>
@@ -200,21 +201,20 @@ Sur certaines images, cette notification joue un son.\nAndroid à introduit ces
<string name="setting_loadtun_summary">"Essayez de charger le module du noyau \"tun.ko\" avant d\'essayer de vous connecter. Requiert des droits root."</string>
<string name="setting_loadtun">"Charger le module TUN"</string>
<string name="importpkcs12fromconfig">"Importer PKCS12 de la configuration dans le gestionnaire de clés Android"</string>
- <string name="getproxy_error">"Erreur d\'obtention des paramètres de proxy: %s"</string>
+ <string name="getproxy_error">Erreur d\'obtention des paramètres de proxy : %s</string>
<string name="using_proxy">"Utilisation du proxy %1$s %2$d"</string>
<string name="use_system_proxy">"Utiliser le proxy système"</string>
<string name="use_system_proxy_summary">"Utiliser la configuration générale du système pour que les proxy HTTP / HTTPS se connectent."</string>
- <string name="donatewithpaypal">"Vous pouvez faire un &lt;a href=\"https://www.paypal.com/cgi-bin/webscr?hosted_button_id=R2M6ZP9AF25LS&amp;cmd=_s-xclick\"&gt;don avec PayPal&lt;/ a&gt; "</string>
- <string name="onbootrestartsummary">"Reconnecter OpenVPN automatiquement si une connexion était active lors de l\'extinction/redémarrage de l\'appareil. Veuillez lire l\'avertissement de connexion dans la FAQ avant d\'utiliser cette option."</string>
- <string name="onbootrestart">"Connexion automatique au redémarrage"</string>
- <string name="ignore">"Ignorer"</string>
- <string name="restart">"Redémarrer"</string>
- <string name="restart_vpn_after_change">"Les changements de configuration sont appliquées après redémarrage du VPN. (Re)démarrer le VPN maintenant?"</string>
- <string name="configuration_changed">"Configuration modifiée"</string>
+ <string name="onbootrestartsummary">OpenVPN connecter le VPN spécifié si elle était active au démarrage du système. S\'il vous plaît lire l\'avertissement de connexion FAQ avant d\'utiliser cette option sur Android &lt; 5.0.</string>
+ <string name="onbootrestart">Se connecter au redémarrage</string>
+ <string name="ignore">Ignorer</string>
+ <string name="restart">Redémarrer</string>
+ <string name="restart_vpn_after_change">Les changements de configuration sont appliqués après redémarrage du VPN. (Re)démarrer le VPN maintenant ?</string>
+ <string name="configuration_changed">Configuration modifiée</string>
<string name="log_no_last_vpn">"Impossible de déterminer le dernier profil connecté pour l\'édition"</string>
- <string name="faq_duplicate_notification_title">"Notifications multiples"</string>
+ <string name="faq_duplicate_notification_title">Notifications en double</string>
<string name="faq_duplicate_notification">"Si Android tourne sur la mémoire du système (RAM), les application et les services qui ne sont pas nécessaires à un moment sont automatiquement supprimés de la mémoire. Cela stoppe donc la connexion VPN en cours. Pour s\'assurer que celle-ci reste toujours lancée, le service est lancé avec une priorité plus élevée. Pour cela, l\'application doit afficher une notification permanente. L\'icône de \"clé\" dans la notification est imposée par le système comme expliqué dans l\'entrée de la FAQ précédente."</string>
- <string name="no_vpn_profiles_defined">"Pas de profils VPN définis."</string>
+ <string name="no_vpn_profiles_defined">Aucun profil VPN défini.</string>
<string name="add_new_vpn_hint">"Utilisez l\'icône &lt;img src=\"ic_menu_add\"/ pour ajouter un nouveau VPN"</string>
<string name="vpn_import_hint">"Utilisez l\'icône &lt;img src=\"ic_menu_archive\"/&gt; pour importer un fichier profil (.opvpn ou .conf) de votre carte SD."</string>
<string name="faq_hint">"Veillez également à consulter la FAQ. Il s\'y trouve un guide de démarrage rapide."</string>
@@ -226,15 +226,15 @@ Sur certaines images, cette notification joue un son.\nAndroid à introduit ces
<string name="import_config">"Importer une configuration OpenVPN"</string>
<string name="battery_consumption_title">"Consommation de la batterie"</string>
<string name="baterry_consumption">In my personal tests the main reason for high battery consumption of OpenVPN are the keepalive packets. Most OpenVPN servers have a configuration directive like \'keepalive 10 60\' which causes the client and server to exchange keepalive packets every ten seconds. &lt;p&gt; While these packets are small and do not use much traffic, they keep the mobile radio network busy and increase the energy consumption. (See also &lt;a href=\"http://developer.android.com/training/efficient-downloads/efficient-network-access.html#RadioStateMachine\"&gt;The Radio State Machine | Android Developers&lt;/a&gt;) &lt;p&gt; This keepalive setting cannot be changed on the client. Only the system administrator of the OpenVPN can change the setting. &lt;p&gt; Unfortunately using a keepalive larger than 60 seconds with UDP can cause some NAT gateways to drop the connection due to an inactivity timeout. Using TCP with a long keepalive timeout works, but tunneling TCP over TCP performs extremely poorly on connections with high packet loss. (See &lt;a href=\"http://sites.inka.de/bigred/devel/tcp-tcp.html\"&gt;Why TCP Over TCP Is A Bad Idea&lt;/a&gt;)</string>
- <string name="faq_tethering">La fonctionnalité de Tethering Android (sur WiFi, USB ou Bluetooth) et l\'API VPNService (utilisé par ce programme) ne fonctionnent pas ensemble. Pour plus de détails, voir la &lt;a href=\"http://code.google.com/p/ics-openvpn/issues/detail?id=34\" &gt; page #34 &lt;/a&gt;</string>
- <string name="vpn_tethering_title">VPN et Tethering</string>
- <string name="connection_retries">"Tentatives de connexion"</string>
- <string name="reconnection_settings">"Paramètres de reconnexion"</string>
- <string name="connectretrymessage">Nombre de secondes d\'attente entre chaque tentative de connexion.</string>
- <string name="connectretrywait">"Temps, en secondes, entre deux connexions"</string>
- <string name="minidump_generated">OpenVPN s\'est écrasé de façon inattendue. S\'il vous plaît, envisagez d\'utiliser l\'option de Minidump depuis le menu principal</string>
+ <string name="faq_tethering">La fonctionnalité Partage de connexion Android (sur WiFi, USB ou Bluetooth) et l\'API VPNService (utilisé par ce programme) ne fonctionnent pas ensemble. Pour plus de détails voir &lt;a href=\"https://github.com/schwabe/ics-openvpn/issues/34\"&gt;issue #34&lt;/a&gt;</string>
+ <string name="vpn_tethering_title">VPN et Partage</string>
+ <string name="connection_retries">Tentatives de connexion</string>
+ <string name="reconnection_settings">Paramètres de reconnexion</string>
+ <string name="connectretrymessage">Nombre de secondes entre chaque tentatives de connexion.</string>
+ <string name="connectretrywait">Nombre de secondes entre deux connexions</string>
+ <string name="minidump_generated">OpenVPN a planté de façon inattendue. Veuillez envisager d\'utiliser l\'option Minidump dans le menu principal</string>
<string name="send_minidump">Envoyer le Minidump au développeur</string>
- <string name="send_minidump_summary">Envoyer les informations de débogage à propos du dernier accident au développeur</string>
+ <string name="send_minidump_summary">Envoie les informations sur le dernier crash au développeur</string>
<string name="notifcation_title">OpenVPN - %s</string>
<string name="session_ipv4string">%1$s - %2$s</string>
<string name="session_ipv6string">%1$s - %3$s, %2$s</string>
@@ -242,23 +242,22 @@ Sur certaines images, cette notification joue un son.\nAndroid à introduit ces
<string name="state_wait">En attente de la réponse du serveur</string>
<string name="state_auth">Authentification</string>
<string name="state_get_config">Obtention de la configuration du client</string>
- <string name="state_assign_ip">Attribution de l\'adresses IP</string>
+ <string name="state_assign_ip">Attribution des adresses IP</string>
<string name="state_add_routes">Ajout des routes</string>
<string name="state_connected">Connecté</string>
<string name="state_disconnected">Déconnecter</string>
<string name="state_reconnecting">Reconnexion</string>
<string name="state_exiting">Fermeture</string>
- <string name="state_noprocess">Eteint</string>
+ <string name="state_noprocess">Éteint</string>
<string name="state_resolve">Résolution des noms d\'hôtes</string>
<string name="state_tcp_connect">Connexion (TCP)</string>
- <string name="state_auth_failed">Echec de l\'authentification</string>
+ <string name="state_auth_failed">Authentification échouée</string>
<string name="state_nonetwork">En attente d\'un réseau utilisable</string>
- <string name="statusline_bytecount">↓%2$s/s %1$s - ↑%4$s/s %3$s</string>
<string name="notifcation_title_notconnect">Non connecté</string>
<string name="start_vpn_title">Connexion au VPN %s</string>
<string name="start_vpn_ticker">Connexion au VPN %s</string>
<string name="jelly_keystore_alphanumeric_bug">Certaines versions d\'Android 4.1 rencontrent des problèmes si le nom du certificat du trousseau de clé contient des caractères non alphanumériques (comme des espaces, des caractères de soulignement ou des tirets). Essayez de réimporter le certificat sans caractères spéciaux</string>
- <string name="encryption_cipher">Chiffrement de cryptage</string>
+ <string name="encryption_cipher">Algorithme de chiffrement</string>
<string name="packet_auth">Authentification des paquets</string>
<string name="auth_dialog_title">Méthode d\'authentification des paquets</string>
<string name="built_by">compilé par %s</string>
@@ -272,23 +271,23 @@ Sur certaines images, cette notification joue un son.\nAndroid à introduit ces
<string name="remotetlsnote">La configuration que vous avez importée utilise l\'option désuette tls-remote qui utilise un format de DN différent.</string>
<string name="rdn">RDN (nom commun)</string>
<string name="rdn_prefix">Préfixe RDN</string>
- <string name="tls_remote_deprecated">tl-remote (OBSOLETE)</string>
+ <string name="tls_remote_deprecated">tls-remote (OBSOLÈTE)</string>
<string name="help_translate">Vous pouvez aider à traduire en visitant http://crowdin.net/project/ics-openvpn/invite</string>
<string name="prompt">%1$s essais de controler %2$s</string>
<string name="remote_warning">En poursuivant vous donnez la permission a l\'application de contrôler complètement OpenVPN pour Android et d\'intercepter tout le trafic réseau.<b>N\'acceptez que si vous faite confiance à l\'application.</b> Sinon vous vous exposez au risque de voir vos données compromises par un logiciel malveillant.\"</string>
<string name="remote_trust">Faire confiance à cette application.</string>
<string name="no_external_app_allowed">Aucune application n\'est autorisée à utiliser l\'API externe</string>
- <string name="allowed_apps">Applications autorisées: %s</string>
- <string name="clearappsdialog">Effacer la liste des appli. externes?\nListe des appli. autorisées:\n\n%s</string>
- <string name="screenoff_summary">\"Mettre le VPN en pause lorsque l\'écran est éteint et moins de 64ko de données sont transférées dans les 60s. Lorsque l\'option \"Persistance Tun\" est activée, la pause laissera votre appareil SANS connectivité réseau. Sans l\'option \"Persistance Tun\" le dispositif n\'aura pas connexion/protection VPN.</string>
- <string name="screenoff_title">Mettre la connection VPN en pause à l\'exctinction de l\'écran</string>
- <string name="screenoff_pause">Connexion en pause quand l\'écran est éteint : moins de %1$s en %2$ss</string>
- <string name="screen_nopersistenttun">Attention: tun persistant pas activé pour ce VPN. Le trafic utilisera la connexion Internet normale lorsque l\'écran est éteint.</string>
+ <string name="allowed_apps">Applications autorisées : %s</string>
+ <string name="clearappsdialog">Effacer la liste des applications externes ?\nListe des applications autorisées :\n\n%s</string>
+ <string name="screenoff_summary">Suspendre le VPN lorsque l\'écran est éteint et moins de 64ko de données sont transférées en 60s. Lorsque l\'option \"Persistance Tun\" est activée, la pause laissera votre appareil SANS connectivité réseau. Sans l\'option \"Persistance Tun\" l\'appareil n\'aura pas de connexion/protection VPN.</string>
+ <string name="screenoff_title">Suspendre la connexion VPN après écran éteint</string>
+ <string name="screenoff_pause">Connexion suspendu quand l\'écran est éteint : moins de %1$s en %2$ss</string>
+ <string name="screen_nopersistenttun">Attention : tun persistant pas activé pour ce VPN. Le trafic utilisera la connexion Internet normale lorsque l\'écran est éteint.</string>
<string name="save_password">Enregistrer le mot de passe</string>
- <string name="pauseVPN">Pause du VPN</string>
+ <string name="pauseVPN">Suspendre VPN</string>
<string name="resumevpn">Reprendre VPN</string>
- <string name="state_userpause">Pause du VPN demandé par l\'utilisateur</string>
- <string name="state_screenoff">VPN en pause - écran eteint</string>
+ <string name="state_userpause">VPN suspendu sur demande de l\'utilisateur</string>
+ <string name="state_screenoff">VPN suspendu - écran éteint</string>
<string name="device_specific">Hacks spécifiques à l\'appareil</string>
<string name="cannotparsecert">Ne peut pas afficher les informations de certificat</string>
<string name="appbehaviour">Comportement de l\'application</string>
@@ -297,9 +296,9 @@ Sur certaines images, cette notification joue un son.\nAndroid à introduit ces
<string name="hwkeychain">Clés du matériel :</string>
<string name="permission_icon_app">Icône de l\'application qui essaie d\'utiliser OpenVPN for Android</string>
<string name="faq_vpndialog43">"À partir d\'Android 4.3 la confirmation VPN est gardée contre les \"applications recouvrante\". Cela se traduit par la boîte de dialogue qui ne réagi pas à la saisie tactile. Si vous avez une application qui utilise des superpositions, elle peut causer ce comportement. Si vous trouvez une application délinquante contacter l\'auteur de l\'application. Ce problème affecte toutes les applications VPN sur Android 4.3 et plus. Voir aussi &lt;a href=\"http://code.google.com/p/ics-openvpn/issues/detail?id=185\"&gt;Issue 185&lt;a&gt; pour plus de détails"</string>
- <string name="faq_vpndialog43_title">Dialogue de confirmation du VPN sur Android 4,3 et plus</string>
- <string name="donatePlayStore">Sinon, vous pouvez m\'envoyer un don avec le Play Store :</string>
- <string name="thanks_for_donation">Merci pour le don %s!</string>
+ <string name="faq_vpndialog43_title">Fenêtre de confirmation du VPN</string>
+ <string name="donatePlayStore">Sinon vous pouvez m\'envoyer un don via le Play Store :</string>
+ <string name="thanks_for_donation">Merci pour le don %s !</string>
<string name="logCleared">Journal effacé.</string>
<string name="show_password">Afficher le mot de passe</string>
<string name="keyChainAccessError">Erreur d\'accès de KeyChain : %s</string>
@@ -312,7 +311,7 @@ Sur certaines images, cette notification joue un son.\nAndroid à introduit ces
<string name="vpn_status">État VPN</string>
<string name="logview_options">Options d\'affichage</string>
<string name="unhandled_exception">Exception non gérée : %1$s\n\n%2$s</string>
- <string name="unhandled_exception_context">%3$s: %1$s\n\n%2$s</string>
+ <string name="unhandled_exception_context">%3$s : %1$s\n\n%2$s</string>
<string name="faq_system_dialog_xposed">Si vous avez \"rooté\" votre Android vous pouvez installer &lt;a href=\"http://xposed.info/\"&gt;Xposed framework&lt;/a&gt; et &lt;a href=\"http://repo.xposed.info/module/de.blinkt.vpndialogxposed\"&gt;le module de confirmation VPN&lt;/a&gt; à vos risques et périls\"</string>
<string name="full_licenses">Licences complètes</string>
<string name="blocklocal_summary">Les réseaux directement connectés aux interfaces locales ne seront pas routés via le VPN. Décochez cette option pour rediriger tout le trafic local vers le VPN.</string>
@@ -324,31 +323,95 @@ Sur certaines images, cette notification joue un son.\nAndroid à introduit ces
<string name="import_log">Journal d\'importation :</string>
<string name="ip_looks_like_subnet">Topologie VPN «%3$s » spécifiée mais ifconfig %1$s %2$s ressemble plus à une adresse IP avec un masque de réseau. On suppose que la topologie « sous-réseau » est utilisée.</string>
<string name="mssfix_invalid_value">La valeur de mssfix doit être un entier compris entre 0 et 9000</string>
- <string name="mssfix_value_dialog">Announce to TCP sessions running over the tunnel that they should limit their send packet sizes such that after OpenVPN has encapsulated them, the resulting UDP packet size that OpenVPN sends to its peer will not exceed this number of bytes. (default is 1450)</string>
- <string name="mssfix_checkbox">Override MSS value of TCP payload</string>
- <string name="mssfix_dialogtitle">Set MSS of TCP payload</string>
+ <string name="mssfix_value_dialog">Annoncer aux sessions TCP en cours d\'exécution sur le tunnel qu\'ils devraient limiter leurs tailles de paquets d\'émission de telle sorte qu\'après OpenVPN les a encapsulé, la taille des paquets UDP résultant que OpenVPN envoie à son homologue ne dépassera pas ce nombre d\'octets. (Valeur par défaut est 1450)</string>
+ <string name="mssfix_checkbox">Remplacer la valeur MSS de TCP payload</string>
+ <string name="mssfix_dialogtitle">Définir MSS de TCP payload</string>
<string name="client_behaviour">Comportement du client</string>
- <string name="clear_external_apps">Clear allowed external apps</string>
+ <string name="clear_external_apps">Effacer applications externes autorisées</string>
<string name="loading">Chargement&#8230;</string>
- <string name="allowed_vpn_apps_info">Allowed VPN apps: %1$s</string>
- <string name="disallowed_vpn_apps_info">Disallowed VPN apps: %1$s</string>
- <string name="app_no_longer_exists">Package %s is no longer installed, removing it from app allow/disallow list</string>
- <string name="vpn_disallow_radio">VPN is used for all apps but exclude selected</string>
- <string name="vpn_allow_radio">VPN is used for only for selected apps</string>
- <string name="query_delete_remote">Remove remote server entry?</string>
+ <string name="allowed_vpn_apps_info">Applications VPN autorisées : %1$s</string>
+ <string name="disallowed_vpn_apps_info">Applications VPN refusées : %1$s</string>
+ <string name="app_no_longer_exists">Application %s désinstallée, retirée de la liste des applications autorisées/refusées</string>
+ <string name="vpn_disallow_radio">VPN est utilisé pour toutes les applications mais exclut les sélectionnées</string>
+ <string name="vpn_allow_radio">VPN est utilisé uniquement pour les applications sélectionnées</string>
+ <string name="query_delete_remote">Supprimer l\'entrée du serveur distant ?</string>
<string name="keep">Garder</string>
<string name="delete">Supprimer</string>
- <string name="add_remote">Add new remote</string>
- <string name="remote_random">Use connection entries in random order on connect</string>
- <string name="remote_no_server_selected">You need to define and enable at least one remote server.</string>
+ <string name="add_remote">Ajouter nouveau serveur distant</string>
+ <string name="remote_random">Utiliser les entrées de connexion dans un ordre aléatoire à la connexion</string>
+ <string name="remote_no_server_selected">Vous devez définir et activer au moins un serveur distant.</string>
<string name="server_list">Liste des serveurs</string>
- <string name="vpn_allowed_apps">Allowed Apps</string>
+ <string name="vpn_allowed_apps">Applications autorisées</string>
<string name="advanced_settings">Paramètres avancés</string>
- <string name="payload_options">Payload options</string>
+ <string name="payload_options">Options Payload</string>
<string name="tls_settings">Paramètres TLS</string>
- <string name="no_remote_defined">No remote defined</string>
+ <string name="no_remote_defined">Aucun serveur distant défini</string>
<string name="duplicate_vpn">Dupliquer le profil VPN</string>
- <string name="duplicate_profile_title">Duplicating profile: %s</string>
+ <string name="duplicate_profile_title">Duplication de profil : %s</string>
<string name="show_log">Afficher le journal</string>
<string name="faq_android_clients">Il existe plusieurs clients OpenVPN pour Android. Les plus communs sont OpenVPN for Android (ce client), OpenVPN Connect, et OpenVPN Settings..&lt;p&gt;Les clients peuvent êtres regroupés en 2 groupes : OpenVPN for Android et OpenVPN Connect utilisent le service API officiel de VPNService (Android 4.0+) et ne nécessitent pas une élévation des privilèges (rootage), puis OpenVPN Settings qui nécessite le rootage.&lt;p&gt;OpenVPN for Android et un client « open source » développé par Arne Schwabe. Il est destiné aux utilisateurs avancés et comprend plusieurs paramètres, ainsi que la possibilité d\'importer les profils depuis des fichiers et de les configurer/changer à partir de l\'application. Le client est basé sur la version communautaire d\'OpenVPN. Il est basé sur le code source d\'OpenVPN 2.x. Ce client peut-être considérer en étant la version semi-officielle de la communauté.&lt;p&gt;OpenVPN Connect est un logiciel propriétaire développé par OpenVPN Technologies, Inc. Le client est destiné aux utilisateurs avec une connaissance moyenne et offre la possibilité d\'importer les profils OpenVPN. Ce client est basé sur une nouvelle réalisation du protocole OpenVPN C++ (ceci était nécessaire afin de permettre à OpenVPN Technologies, Inc. de publier une version iOS de l\'application OpenVPN). Ce client est le client officiel des technologies OpenVPN&lt;p&gt;OpenVPN Settings est le client le plus ancien et agit comme l\'interface utilisateur de la version « open source » d\'OpenVPN. Contrairement à OpenVPN for Android il ne nécessite pas le rootage et ne se sert pas du service API de VPNService. Il ne dépend pas sur Android 4.0+</string>
+ <string name="faq_androids_clients_title">Différences entre les clients OpenVPN Android</string>
+ <string name="ignore_multicast_route">Ignorer la route multidiffusion : %s</string>
+ <string name="ab_only_cidr">Android ne prend en charge que les routes CIDR vers VPN. Étant donné que les routes non-CIDR ne sont pratiquement jamais utilisées, OpenVPN pour Android utilisera un /32 pour les routes ne sont pas CIDR et émettre un avertissement.</string>
+ <string name="ab_tethering_44">Le partage fonctionne tandis que le VPN est actif. La connexion partagée n\'utilisera pas le VPN.</string>
+ <string name="ab_kitkat_mss">Les versions antérieures à KitKat définissent une valeur MSS erronée (#61948). Essayez d\'activer l\'option mssfix pour contourner ce bug.</string>
+ <string name="ab_proxy">Android va continuer à utiliser vos paramètres de proxy spécifiés pour la connexion mobile / Wi-Fi lorsque aucun serveur DNS n\'est définis. OpenVPN pour Android vous avertira à ce sujet dans le log.<p>Quand un VPN définit un serveur de DNS, Android n\'utilisera pas de proxy. Il n\'y a pas d\'API pour définir un proxy pour un connection VPN.</p></string>
+ <string name="ab_lollipop_reinstall">Les applications VPN peuvent s\'arrêter de fonctionner lors d\'une désinstallation suivie d\'une réinstallation. Pour plus de détails, voir #80074</string>
+ <string name="ab_not_route_to_vpn">L\'adresse IP du client, et les adresses IP de ce réseau ne sont pas routées par le VPN. OpenVPN contourne ce problème en ajoutant une route qui corresponds à l’adresse IP et le Masque de sous réseau du client</string>
+ <string name="ab_secondary_users">Le VPN ne fonctionnera pas du tout pour tous les utilisateurs secondaires.</string>
+ <string name="ab_kitkat_reconnect">"Plusieurs utilisateurs ont signalés des prêtes de paquets durant l\'utilisation d\'un VPN sur leur connexion mobile. Ce comportement semble lier à certains fournisseurs, il n\'y a pas de contournement connu ou de bug que l\'on puisse régler."</string>
+ <string name="ab_only_cidr_title">Routes non CIDR</string>
+ <string name="ab_proxy_title">Comportement proxy pour les VPN</string>
+ <string name="ab_lollipop_reinstall_title">Réinstallation des applications VPN</string>
+ <string name="version_upto">%s et antérieur</string>
+ <string name="copy_of_profile">Copie de %s</string>
+ <string name="ab_not_route_to_vpn_title">Route vers l\'adresse IP configurée</string>
+ <string name="ab_kitkat_mss_title">Valeur MSS erronée pour la connexion VPN</string>
+ <string name="ab_secondary_users_title">Utilisateurs de tablettes secondaires</string>
+ <string name="custom_connection_options_warng">Spécifiez la connexion et les options personnalisés. À utiliser avec précaution</string>
+ <string name="custom_connection_options">Options personnalisées</string>
+ <string name="remove_connection_entry">Supprimer entrée de connexion</string>
+ <string name="ab_kitkat_reconnect_title">Déconnexion aléatoire du réseau mobile</string>
+ <string name="ab_vpn_reachability_44_title">Réseau distant injoignable</string>
+ <string name="ab_persist_tun_title">Mode tun persistant</string>
+ <string name="version_and_later">%s et ultérieur</string>
+ <string name="tls_cipher_alert_title">Échec de la connexion avec l\'erreur SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure</string>
+ <string name="message_no_user_edit">Ce profil a été ajouté à partir d\'une application externe (%s) et a été marqué comme non modifiable par l\'utilisateur.</string>
+ <string name="crl_file">Liste des certificats révoqués</string>
+ <string name="service_restarted">Redémarrage du service OpenVPN (l\'Application a probablement plantée ou a été tué pour cause d\'utilisation excessive de la mémoire)</string>
+ <string name="import_config_error">L\'importation de la configuration a abouti à une erreur, l\'enregistrement est impossible</string>
+ <string name="Search">Rechercher</string>
+ <string name="lastdumpdate">(Le dernier dump est vieux de %1$d:%2$d (du %3$s ))</string>
+ <string name="clear_log_on_connect">Effacer le journal sur une nouvelle connexion</string>
+ <string name="connect_timeout">Extinction de la connexion</string>
+ <string name="no_allowed_app">Aucune application n\'est autorisée. Il faut au minimum ajouter cette application (%s) afin d\'en autoriser au moins une. Cela évite d’autoriser toutes les autres applications inutilement</string>
+ <string name="query_permissions_sdcard">OpenVPN pour Android va essayer de chercher le(s) fichier(s) manquant(s) sur une sdcard. Tapoter cette fenêtre de dialogue va démarrer une demande d\'autorisation.</string>
+ <string name="protocol">Protocole</string>
+ <string name="enabled_connection_entry">Activé</string>
+ <string name="permission_revoked">Autorisation de VPN révoquée par le système d\'exploitation (ex : un autre programme VPN est lancé), arrêt du VPN</string>
+ <string name="pushpeerinfo">Envoyer plus d\'infos</string>
+ <string name="pushpeerinfosummary">Envoyer des informations supplémentaires sur le serveur, par exemple la version SSL et la version Android</string>
+ <string name="pw_request_dialog_title">Besoin de %1$s</string>
+ <string name="pw_request_dialog_prompt">Veuillez entrer le mot de passe pour le profil %1$s</string>
+ <string name="menu_use_inline_data">Utiliser données en ligne</string>
+ <string name="export_config_chooser_title">Exporter le fichier de configuration</string>
+ <string name="missing_tlsauth">Fichier tls-auth manquant</string>
+ <string name="missing_certificates">Le certificat ou le fichier de clé de l\'utilisateur est manquant</string>
+ <string name="missing_ca_certificate">Certificat CA manquant</string>
+ <string name="crl_title">Liste des certificats révoqués (facultatif)</string>
+ <string name="reread_log">Relire (%d) éléments du fichier de log</string>
+ <string name="samsung_broken_title">Téléphones Samsung</string>
+ <string name="novpn_selected">Aucun VPN sélectionné.</string>
+ <string name="reconnect">Reconnecter</string>
+ <string name="qs_title">Activer VPN</string>
+ <string name="qs_connect">Connecter à %s</string>
+ <string name="qs_disconnect">Déconnecter %s</string>
+ <string name="connectretrymaxmessage">Entrez le temps maximum entre les tentatives de connexion. OpenVPN va lentement augmenter son temps d\'attente après une tentative de connexion infructueuse jusqu\'à atteindre cette valeur. Par défaut, 300sec.</string>
+ <string name="connectretrymaxtitle">Temps maximum entre les tentatives de connexion</string>
+ <string name="state_waitconnectretry">%s secondes avant la prochaine tentative de connexion</string>
+ <string name="management_socket_closed">Connexion à OpenVPN fermé (%s)</string>
+ <string name="change_sorting">Changer de tri</string>
+ <string name="sort">Trier</string>
+ <string name="sorted_lru">Profils triés par dernier récemment utilisé</string>
+ <string name="sorted_az">Profils triés par nom</string>
</resources>
diff --git a/app/src/main/res/values-hu/plurals-icsopenvpn.xml b/app/src/main/res/values-hu/plurals-icsopenvpn.xml
new file mode 100755
index 00000000..a8ffc2ee
--- /dev/null
+++ b/app/src/main/res/values-hu/plurals-icsopenvpn.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<resources>
+ <plurals name="months_left">
+ <item quantity="one">Egy hónap van hátra</item>
+ <item quantity="other">%d hónap van hátra</item>
+ </plurals>
+ <plurals name="days_left">
+ <item quantity="one">Egy nap van hátra</item>
+ <item quantity="other">%d nap van hátra</item>
+ </plurals>
+ <plurals name="hours_left">
+ <item quantity="one">Egy óra van hátra</item>
+ <item quantity="other">%d óra van hátra</item>
+ </plurals>
+ <plurals name="minutes_left">
+ <item quantity="one">Egy perc van hátra</item>
+ <item quantity="other">%d perc van hátra</item>
+ </plurals>
+</resources>
diff --git a/app/src/main/res/values-hu/strings-icsopenvpn.xml b/app/src/main/res/values-hu/strings-icsopenvpn.xml
index dd07abdb..a1db366c 100755
--- a/app/src/main/res/values-hu/strings-icsopenvpn.xml
+++ b/app/src/main/res/values-hu/strings-icsopenvpn.xml
@@ -41,16 +41,17 @@
<string name="configure_the_vpn">A VPN beállítása</string>
<string name="menu_add_profile">Profil hozzáadása</string>
<string name="add_profile_name_prompt">Adja meg az új Profil nevét</string>
- <string name="duplicate_profile_name">Kérlek, egyedi profilnevet válassz magadnak</string>
+ <string name="duplicate_profile_name">Kérem, egyedi profilnevet válasszon</string>
<string name="profilename">Profil név</string>
- <string name="no_keystore_cert_selected">Válassz egy felhasználói tanúsítványt</string>
- <string name="no_error_found">hiba nem található</string>
+ <string name="no_keystore_cert_selected">Válasszon egy felhasználói tanúsítványt</string>
+ <string name="no_ca_cert_selected">Ki kell választania egy CA tanúsítványt</string>
+ <string name="no_error_found">Hiba nem található</string>
<string name="config_error_found">Hiba a beállításokban</string>
<string name="ipv4_format_error">Hiba az IPv4 cím elemzésekor</string>
<string name="custom_route_format_error">Hiba az egyéni útvonalak elemzésekor</string>
- <string name="pw_query_hint">(a lekérdezés igénye szerint hagyja üresen)</string>
+ <string name="pw_query_hint">(hagyja üresen esetenkénti bekéréshez)</string>
<string name="vpn_shortcut">OpenVPN parancsikon</string>
- <string name="vpn_launch_title">Csatlakozás a VPN-hez</string>
+ <string name="vpn_launch_title">Csatlakozás a VPN-hez&#8230;</string>
<string name="shortcut_profile_notfound">A parancsikonban kiválasztott Profil nem létezik</string>
<string name="random_host_prefix">Véletlen Host Prefix</string>
<string name="random_host_summary">6 random karakter hozzáadása a hosztnév elejére</string>
@@ -62,7 +63,7 @@
<string name="clear_log">napló törlése</string>
<string name="title_cancel">Megszakítás jóváhagyása</string>
<string name="cancel_connection_query">VPN kapcsolat/kapcsolódás megszakítása?</string>
- <string name="remove_vpn">VPN kapcsolat eltávolítása</string>
+ <string name="remove_vpn">VPN eltávolítása</string>
<string name="check_remote_tlscert">Ellenőrzi, hogy a kiszolgáló használ-e tanúsitványt TLS Server kiterjesztéssel (--remote-cert-tls server)</string>
<string name="check_remote_tlscert_title">TLS server tanúsítvány megkövetelése</string>
<string name="remote_tlscn_check_summary">Ellenőrzi a Távoli Kiszolgáló Tanúsítvány Subject DN mezőt</string>
@@ -78,28 +79,28 @@
<string name="override_dns">A kiszolgálótól kapott DNS Beállítások felülbírálása</string>
<string name="dns_override_summary">Saját DNS Szerverek használata</string>
<string name="searchdomain">searchDomain</string>
- <string name="dns1_summary">a használatban levő DNS-kiszolgáló.</string>
- <string name="dns_server">DNS szerver</string>
- <string name="secondary_dns_message">A másodlagos DNS-kiszolgáló használható, ha a normál DNS-kiszolgáló nem érhető el.</string>
- <string name="backup_dns">tartalék DNS szerver</string>
+ <string name="dns1_summary">Használni kívánt DNS kiszolgáló.</string>
+ <string name="dns_server">DNS kiszolgáló</string>
+ <string name="secondary_dns_message">Másodlagos DNS kiszolgáló használata, ha a normál DNS-kiszolgáló nem érhető el.</string>
+ <string name="backup_dns">Tartalék DNS kiszolgáló</string>
<string name="ignored_pushed_routes">Push-olt útvonalak figyelmen kívül hagyása</string>
<string name="ignore_routes_summary">A szerver által push-olt útvonalak figyelmen kívül hagyása.</string>
<string name="default_route_summary">A teljes forgalom átirányítása a VPN-re</string>
- <string name="use_default_title">használja az alapértelmezett útvonalat</string>
+ <string name="use_default_title">Alapértelmezett útvonal használata</string>
<string name="custom_route_message">Egyéni útvonalak megadása. A célt csak CIDR formátumban adja meg. \"10.0.0.0/8 2002::/16\" átirányítaná a 10.0.0.0/8 és 2002::/16 hálózatokat a VPN-en.</string>
<string name="custom_route_message_excluded">Útvonalak amikek nem a VPN-en át kell route-olni.</string>
<string name="custom_routes_title">Egyéni útvonalak</string>
<string name="custom_routes_title_excluded">Hálózat kivételek</string>
<string name="log_verbosity_level">Napló részletességi szint</string>
<string name="float_summary">Hitelesített csomagok engedélyezése minden IP-ről</string>
- <string name="float_title">Lebegő szerver engedélyezése</string>
+ <string name="float_title">Lebegő kiszolgáló engedélyezése</string>
<string name="custom_options_title">Egyéni beállítások</string>
<string name="edit_vpn">VPN-beállítások szerkesztése</string>
<string name="remove_vpn_query">\'%s\' VPN Profil eltávolítása?</string>
<string name="tun_error_helpful">Néhány egyedi ICS image-en a /dev/tun hozzáférési jogai rosszak lehetnek, vagy a tun modul teljesen hiányzik. CM9 imagek-en próbálja a fix tulajdonos opciót az általános beállításokban</string>
<string name="tun_open_error">Nem sikerült megnyitni a tun interfészt</string>
- <string name="error">"Hiba:"</string>
- <string name="clear">töröl</string>
+ <string name="error">"Hiba: "</string>
+ <string name="clear">Töröl</string>
<string name="last_openvpn_tun_config">tun interfész megnyitása:</string>
<string name="local_ip_info">Helyi IPv4: %1$s/%2$d IPv6: %3$s MTU: %4$d</string>
<string name="dns_server_info">DNS Szerver: %1$s, Domain: %2$s</string>
@@ -112,7 +113,7 @@
<string name="keychain_access">Nem sikerült hozzáférni az Android Keychain Tanúsivànyokhoz. Ezt egy firmware frissítés vagy az alkalmazás/beállításainak visszaállítása okozhatja. Kérem szerkessze meg a VPN-t, és újra válassza ki a tanúsítványokat az alapvető beállításoknál, hogy visszaálljanak a tanúsítványok hozzáférési jogai.</string>
<string name="version_info">%1$s %2$s</string>
<string name="send_logfile">Naplófájl küldése</string>
- <string name="send">küld</string>
+ <string name="send">Küldés</string>
<string name="ics_openvpn_log_file">ICS OpenVPN naplófájl</string>
<string name="copied_entry">Naplóbejegyzés másolva a vágólapra</string>
<string name="tap_mode">Tap mód</string>
@@ -120,7 +121,7 @@
<string name="tap_faq2">Megint? Viccelsz? Nem, a tap mód tényleg nem támogatott és további levelek küldése hogy támogatott lesz-e sem fog segíteni.</string>
<string name="tap_faq3">Harmadszor is? Tulajdonképpen lehetne írni egy tap emulátort a tun alapján ami képes layer2 adatokat is küldeni és fogadni, de ennek a tap emulátornak implementálnia kell ARP-t és lehetőleg egy DHCP klienst is. Nem tudok róla, hogy bárki is ezen az irányon dolgozna. Ha lenne kedve ilyet kódolni, lépjen kapcsolatba velem.</string>
<string name="faq">GYIK</string>
- <string name="copying_log_entries">naplóbejegyzések másolása</string>
+ <string name="copying_log_entries">Naplóbejegyzések másolása</string>
<string name="faq_copying">Másoláshoz nyomja le és tartsa lenyomva a naplóbejegyzést. A teljes napló küldéséhez használja a Napló Küldése opciót. Használja a hardver menü gombot ha nem látható a GUI-ban.</string>
<string name="faq_shortcut">Parancsikon az indításhoz</string>
<string name="faq_howto_shortcut">Az asztalra helyezhet egy OpenVPN parancsikont. A képernyőkezelő programtól függően parancsikont vagy widget-et helyezhet el.</string>
@@ -149,6 +150,7 @@
<string name="no_bind">Nincs helyi bind</string>
<string name="import_configuration_file">Konfigurációs fájl importálása</string>
<string name="faq_security_title">Biztonsági szempontok</string>
+ <string name="faq_security">"Az OpenVPN biztonságérzékeny, ezért néhány megjegyzés indokolt. Az SD kártyán tárolt bármilyen adat eredendően nem biztonságos. Minden alkalmazás olvashatja (például ez a program sem kíván speciális SD kártya jogosultságokat). Az alkalmazás adait csak az alkalmazás önmaga képes olvasni. A cacert/cert/key fájl párbeszédablakban történő importálásával az adatok a VPN profilban tárolódnak. A VPN profil csak az alkalmazás által hozzáférhető. (Ne felejtse el törölni az SD kártyán tárolt másolatokat.) Az adatok nem titkosítottak, annak ellenére, hogy az adatok csak az alkalmazás számára hozzáférhetőek. A telefon root-olásával vagy egyéb exploit-olásával az adatok még mindig visszaállíthatóak lesznek. A pkcs12 fájlokat erősen ajánlott az android keystore-ba importálni."</string>
<string name="import_vpn">Import</string>
<string name="broken_image_cert_title">Hiba a tanúsítvány kiválasztása során</string>
<string name="broken_image_cert">Exception történt az Android 4.0+ tanúsítvány legördülő megjelenítésekor. Ennek sohasem szabad megtörténnie, mivel ez egy szavványos Android 4.0+ funkció. Lehet, hogy az Android ROM tanúsítványtár támogatása nem működik megfelelően</string>
@@ -158,15 +160,16 @@
<string name="converted_profile">importált profil</string>
<string name="converted_profile_i">%d profil importálva</string>
<string name="broken_images">Működésképtelen image-ek</string>
+ <string name="broken_images_faq">&lt;p&gt;A hivatalos HTC lemezképek köztudottan különös útvonal választási problémákat tartalmaznak, amik azt okozzák, hogy az adatforgalom nem a csatornán kereszül folyik (Lást &lt;a href=\"https://github.com/schwabe/ics-openvpn/issues/18\"&gt;Issue 18&lt;/a&gt; a bug tracker-ben.)&lt;/p&gt;&lt;p&gt;Régebbi hivatalos SONY Xperia Arc S és Xperia Ray lemezképekből jelentették, hogy a VPNService teljesen hiányzik. (Lásd &lt;a href=\"https://github.com/schwabe/ics-openvpn/issues/29\"&gt;Issue 29&lt;/a&gt; a bug tracker-ben.)&lt;/p&gt;&lt;p&gt;Egyedi fordítású lemezképekben a tun modul hiányozhat vagy a /dev/tun hozzáférési joga lehet nem megfelelő. Néhány CM9 lemezképnél szükséges a \"Fix ownership\" opció engedélyezése a \"Device specific hacks\" alatt.&lt;/p&gt;&lt;p&gt;Legfontosabb: Ha az eszköz Android lemezképe sérült, jelezze a gyártónál. Minél több ember jelent egy esetet a gyártónál, annál esélyesebb hogy javítani fogja.&lt;/p&gt;</string>
<string name="pkcs12_file_encryption_key">PKCS12 Fájltitkosítási kulcs</string>
<string name="private_key_password">Privát kulcs jelszó</string>
<string name="password">Jelszó</string>
- <string name="file_icon">fájlikon</string>
- <string name="tls_authentication">TLS hitelesítés</string>
+ <string name="file_icon">fájl ikon</string>
+ <string name="tls_authentication">TLS hitelesítés / titkosítás</string>
<string name="generated_config">Generált konfiguráció</string>
<string name="generalsettings">Beállítások</string>
<string name="owner_fix_summary">/dev/tun tulajdonosának beállítása. Néhány CM9 image-hez ez kell, hogy a VPNService API működjön. Root szükséges.</string>
- <string name="owner_fix">Fix tulajdonos a /dev/tun-hoz</string>
+ <string name="owner_fix">/dev/tun tulajdonos javítása</string>
<string name="generated_config_summary">Generált OpenVPN konfigurációs fájl megmutatása</string>
<string name="edit_profile_title">\"%s\" szerkesztése</string>
<string name="building_configration">Konfiguráció felépítése&#8230;</string>
@@ -178,9 +181,11 @@
<string name="keychain_nocacert">Nem jött vissza CA tanúsítvány az Android keystore olvasása során. A hitelesítés valószínűleg sikertelen lesz.</string>
<string name="show_log_summary">Napló ablak mutatása a csatlakozás alatt. A napló ablak mindig elérető a rolóról is.</string>
<string name="show_log_window">Naplózási ablak mutatása</string>
+ <string name="mobile_info">%10$s %9$s futtatva %3$s %1$s (%2$s), Android %6$s (%7$s) API %4$d, ABI %5$s, (%8$s)</string>
<string name="error_rsa_sign">Hiba az Android keystore %1$s: %2$s kulccsal való belépéskor</string>
+ <string name="faq_system_dialogs">A VPN csatlakozás figyelmeztetés azt jelzi, hogy ez az alkalmazás a rendszer általi teljes forgalmat lehallgathatja a VPNService API visszaélések elkerülése érdekében.\nA VPN csatlakozás értesítés (A kulcs szimbólum) is az Android rendszer jelzése egy kimenő VPN kapcsolatról. Néhány lemezképen ez az értesítés hangot is lejátszik.\nAz android az ön biztonsága érdekében vezette be ezeket a rendszer értesítéseket, és gondoskodott arról, hogy ne lehessen megkerülni. (Néhány lemezképen ez sajnos értesítési hangot is tartalmaz.)</string>
<string name="faq_system_dialogs_title">Kapcsolat figyelmeztetés és értesítés hang</string>
- <string name="translationby">A magyar fordítást készítette Juhász Sándor &lt;msc@digitaltrip.hu&gt;</string>
+ <string name="translationby">A magyar fordítást készítették: kisjuhos, hd_adam, tomygee, Floo19, PettyBlue, ha1dfo</string>
<string name="ipdns">IP és DNS</string>
<string name="basic">Alapvető</string>
<string name="routing">Útválasztás</string>
@@ -190,6 +195,7 @@
<string name="warn_no_dns">Nincsenek DNS szerverek használatban. A névfeloldás nem működik. Fontolja meg az egyéni DNS szerverek beállítását. Kérjük, vegye figyelembe, hogy az Android továbbra is ugyanazokat a proxy beállításokat fogja használni a mobil/WiFi csatlakozáshoz, mint amit a DNS szerverek megadása előtt.</string>
<string name="dns_add_error">Nem lehet hozzáadni a %1$s DNS szervert, a rendszer elutasította: %2$s</string>
<string name="ip_add_error">A \"%1$s\" IP címet nem lehet konfigurálni, a rendszer elutasította: %2$s</string>
+ <string name="faq_howto">&lt;p&gt;Szerezzen be működő konfigurációt (számítógépen tesztelje vagy töltse le a szolgáltatótól/szervezettől)&lt;/p&gt;&lt;p&gt;Ha ez egyetlen fájl extra pem/pkcs12 fájlok nélkül, akkor küldje el önmagának email-ben és nyissa meg a csatolmányt. Ha több fájl akkor másolja az SD kártyára.&lt;/p&gt;&lt;p&gt;Kattintson az email csatolmányra/Használja a mappa ikont a VPN listában az importáláshoz&lt;/p&gt;&lt;p&gt;Ha hibaüzenetet kap hiányzó fájlokról, másolja azokat is az SD kártyára.&lt;/p&gt;&lt;p&gt;Kattintson a mentés szimbólumra az importált VPN kapcsolat VPN listához adásához&lt;/p&gt;&lt;p&gt;Csatlakozzon a VPN-hez a VPN nevére kattintva&lt;/p&gt;&lt;p&gt;Ha hiba- vagy figyelmeztető üzenetek vannak a log-ban, próbálja meg értelmezni és kijavítani őket. &lt;/p&gt; </string>
<string name="faq_howto_title">Quick Start</string>
<string name="setting_loadtun_summary">Próbálja meg betölteni a tun.ko kernel modult mielőtt megpróbál csatlakozni. Root-olt eszköz szükséges.</string>
<string name="setting_loadtun">Tun modul betöltése</string>
@@ -198,24 +204,28 @@
<string name="using_proxy">Proxy használatban: %1$s %2$d</string>
<string name="use_system_proxy">Rendszerproxy használata</string>
<string name="use_system_proxy_summary">Rendszerszintű konfiguráció használata a HTTP/HTTPS proxy csatlakozáshoz.</string>
- <string name="donatewithpaypal">&lt;a href=\"https://www.paypal.com/cgi-bin/webscr?hosted_button_id=R2M6ZP9AF25LS&amp;amp;cmd=_s-xclick\"&gt;Adakozhat PayPal-al&lt;/a&gt; </string>
- <string name="onbootrestartsummary">Az OpenVPN újracsatlakozik a VPN-hez ha az aktív volt az újraindításkoz/leállításkor.</string>
- <string name="onbootrestart">Újracsatlakozás újraindításkor</string>
- <string name="ignore">Hagyja figyelmen kívül</string>
+ <string name="onbootrestartsummary">Az OpenVPN csatlakozni fog a VPN-hez, ha az a rendszer indulásakor aktív. Kérem, olvassa el a csatlakozás figyelmeztető GYIK-et mielőtt ezt az opciót Android &lt; 5.0-n használná.</string>
+ <string name="onbootrestart">Csatlakozás rendszerindításkor</string>
+ <string name="ignore">Figyelmen kívül hagy</string>
<string name="restart">Újraindítás</string>
<string name="restart_vpn_after_change">A konfiguráció változások a VPN újraindítása után lépnek életbe. (Újra)indítja most a VPN-t?</string>
<string name="configuration_changed">A konfiguráció megváltozott</string>
<string name="log_no_last_vpn">A legutóbb csatlakozott profil nem található</string>
+ <string name="faq_duplicate_notification_title">Kettőzött értesítések</string>
+ <string name="faq_duplicate_notification">Ha az Android rendszer memória (RAM) kényszer alatt áll, alkalmazások és szolgáltatások amik pillanatnyilag nem szükségesek el lesznek távolítva az aktív memóriából. Ez lezárja a folyamatban levő VPN kapcsolatot. A kapcsolat/OpenVPN túlélése érdekében a szolgáltatás magas prioritással fut. A magas prioritással való futáshoz az alkalmazásnak értesítést kell kijeleznie. A rendszer által mutatott kulcs értesítési ikonról az előző GYIK bejegyzésben olvashat. Ez nem az alkalmazás magas prioritással futásának értesítésére utal.</string>
<string name="no_vpn_profiles_defined">Nincsenek VPN profilok definiálva.</string>
<string name="add_new_vpn_hint">Használd az &lt;img src=\"ic_menu_add\"/&gt; ikont új VPN hozzáadásához</string>
<string name="vpn_import_hint">Használd az &lt;img src=\"ic_menu_archive\"/&gt; ikont egy SD-kártyán meglevő (.ovpn or .conf) profil importálásához.</string>
<string name="faq_hint">Tekintse meg a FAQ-ot. Ott van egy a kezdeti lépéseket segítő leírás.</string>
<string name="faq_routing_title">Routing/Interfész Beállítás</string>
+ <string name="faq_routing">Az útválasztás és interfész konfiguráció nem a hagyományos ifconfig/route parancsokkal történik, hanem a VPNService API használatával. Ez különböző útválasztási konfigurációhoz vezet más operációs rendszereken.\nA VPN csatorna konfigurációja az IP címből és a hálózatokból áll, amelyek útvonala ezen az interfészen keresztül kell vezessen. Tekintettel, hogy peer partner cím vagy átjáró megadása nem szükséges. A VPN szerver eléréséhez szükséges speciális útvonalak (például amik redirect-gateway használatakor vannak hozzáadva) megadása sem szükséges. Az alkalmazás ezeket logikusan figyelmen kívül fogja hagyni a beállítások importálása során. Az alkalmazás a VPNService API által biztosítja, hogy a szerverhez történő csatlakozás ne a VPN csatornán át menjen.\nA VPNService API nem engedi azoknak a hálózatok a megadását, amiknek nem a VPN-en keresztül kellene menniük. Kerülőútként az alkalmazás megpróbálja meghatározni azokat a hálózatokat, amelyek útvonala nem VPN csatornán keresztül kellene haladjon (például x.x.x.x y.y.y.y net_gateway), kiszámolja és kizárja ezeket az útvonalakat, hogy más platformok viselkedését emulálja. Csatlakozási kísérletkor a log ablakban látható a VPNService konfiguráció.\nA színfalak mögött: az Android 4.4+ nem használ policy routing-ot. A route/ifconfig parancsok nem fogják megmutatni a létrehozott útvonalakat. Ehelyett használhatóak az ip rule, iptables -t mangle -L parancsok</string>
<string name="persisttun_summary">Ne térjen vissza VPN kapcsolat nélküli módba, amikor az OpenVPN újracsatlakozik.</string>
<string name="persistent_tun_title">Megmaradó tun</string>
<string name="openvpn_log">OpenVPN Napló</string>
<string name="import_config">OpenVPN konfiguráció importálása</string>
<string name="battery_consumption_title">Akkumulátor használat</string>
+ <string name="baterry_consumption">Személyes tesztjeim alapján a magas akkuhasználatot az OpenVPN keepalive csomagjai okozzák. A legtöbb OpenVPN szerver tartalmaz egy konfigurációs direktívát, mint \'keepalive 10 60\' ami a kliens és a szerver között minden 10 másodpercben keepalive csomagok cseréjét eredményezi. &lt;p&gt; Ezek ugyan kis csomagok és nem okoznak nagy adatforgalmat, de lefoglalják a mobil rádiós részét és ezáltal növelik az energia fogyasztást. (Lásd még &lt;a href=\"http://developer.android.com/training/efficient-downloads/efficient-network-access.html#RadioStateMachine\"&gt;The Radio State Machine | Android Developers&lt;/a&gt;) &lt;p&gt; Ez a keepalive küldés nem változtatható a kliensben. Csak az OpenVPN rendszer adminisztrátor tudja megváltoztatni ezt a beállítást. &lt;p&gt; Sajnos 60 másodpercnél nagyobb keepalive használata UDP kapcsolatnál néhány NAT átjárónál a kapcsolat eldobását okozza inaktivitási időtúllépés miatt. Hosszú keepalive timeout működőképes lehet TCP kapcsolat esetén, de TCP csomagok TCP kapcsolatban tunnel-ezése extrém rossz minőségű kapcsolatot eredményezhet magas csomagvesztésű hálózatokon. (Lásd &lt;a href=\"http://sites.inka.de/bigred/devel/tcp-tcp.html\"&gt;Why TCP Over TCP Is A Bad Idea&lt;/a&gt;)</string>
+ <string name="faq_tethering">Az Android internet megosztás funkció (WiFi-n, USB-n vagy Bluetooth-on) és a VPNService API (amit ez a program használ) nem működnek együtt. További részletekért lást &lt;a href=\"https://github.com/schwabe/ics-openvpn/issues/34\"&gt;issue #34&lt;/a&gt;</string>
<string name="vpn_tethering_title">VPN és Internetmegosztás</string>
<string name="connection_retries">Csatlakozás újrapróbálkozások</string>
<string name="reconnection_settings">Újracsatlakozás beállítások</string>
@@ -242,12 +252,11 @@
<string name="state_tcp_connect">Csatlakozás (TCP)</string>
<string name="state_auth_failed">Hitelesítési hiba</string>
<string name="state_nonetwork">Várakozás használható hálózatra</string>
- <string name="statusline_bytecount">↓%2$s/s %1$s - ↑%4$s/s %3$s</string>
<string name="notifcation_title_notconnect">Nincs kapcsolat</string>
- <string name="start_vpn_title">Csatlakozás VPN-hez %s</string>
- <string name="start_vpn_ticker">Csatlakozás VPN-hez %s</string>
+ <string name="start_vpn_title">Csatlakozás a %s VPN-hez</string>
+ <string name="start_vpn_ticker">Csatlakozás a %s VPN-hez</string>
<string name="jelly_keystore_alphanumeric_bug">Néhány Android 4.1-es verzió alatt problémába ütközhet ha a hitelesítési tanúsítvány nevében nem csak alfanumerikus karakterek szerepelnek (mint pl szóköz, alulvonás vagy kötőjel). Speciális karakterek nélkül próbálja újra importálni</string>
- <string name="encryption_cipher">Titkosítás</string>
+ <string name="encryption_cipher">Titkosítás rejtjelezés</string>
<string name="packet_auth">Csomag hitelesítés</string>
<string name="auth_dialog_title">Adja meg a csomaghitelesítési metódust</string>
<string name="built_by">%s fordítóval</string>
@@ -262,18 +271,36 @@
<string name="rdn">RDN (közös név)</string>
<string name="rdn_prefix">RDN előtag</string>
<string name="tls_remote_deprecated">tls-remote (elavult)</string>
- <string name="help_translate">Segíthetsz fordítani ha meglátogatod http://crowdin.net/project/ics-openvpn/invite</string>
+ <string name="help_translate">Segíthetsz fordítani: http://crowdin.net/project/ics-openvpn/invite</string>
<string name="prompt">%1$s próbálkozás %2$s vezérlésre</string>
+ <string name="remote_warning">A folytatással engedélyt ad az alkalmazásnak, hogy teljes mértékben vezérelhesse az OpenVPN for Android-ot és lehallgathassa a teljes hálózati forgalmat.<b>NE fogadja el, ha nem bízik meg az alkalmazásban.</b> Különben azt kockáztatja, hogy az adatait rosszindulatú szoftver veszélyeztetheti.</string>
<string name="remote_trust">Megbízom ebben az alkalmazásban.</string>
<string name="no_external_app_allowed">Egy alkalmazás sem használhat külső API-t</string>
<string name="allowed_apps">Engedélyezett alkalmazások: %s</string>
<string name="clearappsdialog">Engedélyezett külső alkalmazások listájának törlése?\nAz engedélyezett alkalmazások aktuális listája:\n\n%s</string>
+ <string name="screenoff_summary">A VPN szünetel ha kikapcsolt képernyőnél 60 másodpercen belül kevesebb mint 64 kB az adatforgalom. Ha a \"Tartós Tun\" opció engedélyezve van, akkor a VPN szüneteltetése esetén az eszköznek nem lesz hálózati kapcsolata. \"Tartós Tun\" opció nélkül az eszköznek nem lesz VPN kapcsolata/védelme.</string>
<string name="screenoff_title">VPN kapcsolat szüneteltetése a képernyő lekapcsolása után</string>
<string name="screenoff_pause">Kapcsolat szüneteltetése a képernyő kikapcsolt állapotában: kevesebb mint %1$s %2$ss alatt</string>
<string name="screen_nopersistenttun">Figyelmeztetés: Megmaradó tun nem engedélyezett ehhez a VPN-hez. A forgalom a normál internetcsatlakozáson megy amikor a képernyő ki van kapcsolva.</string>
<string name="save_password">Jelszó mentése</string>
+ <string name="pauseVPN">VPN szüneteltetése</string>
+ <string name="resumevpn">VPN helyreállítása</string>
+ <string name="state_userpause">A felhasználó a VPN szüneteltetését kérte</string>
+ <string name="state_screenoff">VPN szüneteltetve - képernyő kikapcsolva</string>
+ <string name="device_specific">Eszköz specifikus Hack-ek</string>
+ <string name="cannotparsecert">Nem lehet megjeleníteni a tanúsítvány információit</string>
+ <string name="appbehaviour">Alkalmazás viselkedés</string>
+ <string name="vpnbehaviour">VPN viselkedés</string>
+ <string name="allow_vpn_changes">VPN Profilok megváltoztatásának engedélyezése</string>
+ <string name="hwkeychain">Hardver Kulcstár:</string>
+ <string name="permission_icon_app">Az alkalmazás ikonja megpróbálja használni az OpenVPN for Android-ot</string>
+ <string name="faq_vpndialog43">"Android 4.3-tól kezdve a VPN jóváhagyás védett az \"átlapoló alkalmazásoktól\". Ez azt eredményezi, hogy a párbeszéd ablak nem reagál érintésre. Ha olyan alkalmazást futtat, ami átlapolást használ az okozhatja ezt a viselkedést. Ha jogsértő alkalmazást észlel, lépjen kapcsolatba az alkalmazás szerzőjével. Ez a probléma minden VPN alkalmazást érint Android 4.3 és későbbi verziókon. Lásd &lt;a href=\"https://github.com/schwabe/ics-openvpn/issues/185\"&gt;Issue 185&lt;a&gt; további részletekért"</string>
+ <string name="faq_vpndialog43_title">VPN Megerősítés Dialógus</string>
+ <string name="donatePlayStore">Esetlegesen, küldhet nekem adományt a Play Store-ral:</string>
+ <string name="thanks_for_donation">Köszönöm az adományt %s!</string>
<string name="logCleared">Napló törölve.</string>
<string name="show_password">Jelszó mutatása</string>
+ <string name="keyChainAccessError">KeyChain Hozzáférési hiba: %s</string>
<string name="timestamp_short">Rövid</string>
<string name="timestamp_iso">ISO</string>
<string name="timestamps">Időbélyegzők</string>
@@ -283,25 +310,114 @@
<string name="vpn_status">Vpn állapot</string>
<string name="logview_options">Nézet beállításai</string>
<string name="unhandled_exception">Nem kezelt kivétel: %1$s\n\n%2$s</string>
- <string name="full_licenses">Teljes engedélyek</string>
+ <string name="unhandled_exception_context">%3$s: %1$s\n\n%2$s</string>
+ <string name="faq_system_dialog_xposed">Ha root-olta Android eszközét, akkor installálhatja a &lt;a href=\"http://xposed.info/\"&gt;Xposed framework&lt;/a&gt; -öt és a &lt;a href=\"http://repo.xposed.info/module/de.blinkt.vpndialogxposed\"&gt;VPN Dialog confirm module&lt;/a&gt; -t saját felelősségére</string>
+ <string name="full_licenses">Teljes licenszek</string>
+ <string name="blocklocal_summary">Azok a hálózatok útvonalai amik közvetlenül a helyi interfészére csatlakoznak nem a VPN-en keresztül fognak vezetni. Az opció kiválasztásának törlésével minden helyi forgalmat a VPN-hez irányíthat.</string>
+ <string name="blocklocal_title">VPN megkerülése helyi hálózatokhoz</string>
<string name="userpw_file">Felhasználónév/Jelszó fájl</string>
<string name="imported_from_file">[Innen importálva: %s]</string>
<string name="files_missing_hint">Néhány fájl nem található. Kérlek válaszd ki a fájlokat a profil importálásához:</string>
+ <string name="openvpn_is_no_free_vpn">Az alkalmazás használatához szüksége van egy VPN szolgáltatóra / VPN átjáróra ami támogatja az OpenVPN-t (gyakran a munkáltató szolgáltatja). Nézzen utána a http://community.openvpn.net/ címen további információért hogyan készíthet saját OpenVPN kiszolgálót.</string>
<string name="import_log">Importálási napló:</string>
+ <string name="ip_looks_like_subnet">VPN topológia \"%3$s\" specifikálva, de ifconfig %1$s %2$s inkább IP címnek tűnik hálózati maszkkal. \"Alhálózat\" topológiát feltételezve.</string>
+ <string name="mssfix_invalid_value">Az MSS felülbírálati értéknek egész számnak kell lennie 0 és 9000 között</string>
+ <string name="mssfix_value_dialog">Jelentse be a TCP munkameneteknek, hogy korlátozniuk kell a küldendő csomagjaik méretét hogy miután az OpenVPN bekapszulázza őket a peer-nek küldendő eredmény UDP csomag mérete ne haladhassa meg ezt a byte számot. (az alapérték 1450)</string>
+ <string name="mssfix_checkbox">TCP payload MSS felülbírálati érték</string>
+ <string name="mssfix_dialogtitle">MSS beállítás a TCP payload-hoz</string>
+ <string name="client_behaviour">Kliens viselkedés</string>
+ <string name="clear_external_apps">Engedélyezett külső alkalmazások törlése</string>
<string name="loading">Betöltés&#8230;</string>
- <string name="allowed_vpn_apps_info">Engedélyezett VPN programok: %1$s</string>
- <string name="disallowed_vpn_apps_info">Letiltott VPN programok: %1$s</string>
- <string name="app_no_longer_exists">%s csomag már nincs telepítve, eltávolítás a program engedélyező/letiltó listáról</string>
+ <string name="allowed_vpn_apps_info">Engedélyezett VPN alkalmazások: %1$s</string>
+ <string name="disallowed_vpn_apps_info">Letiltott VPN alkalmazások: %1$s</string>
+ <string name="app_no_longer_exists">%s csomag már nincs telepítve, eltávolítás az alkalmazások engedélyező/letiltó listájáról</string>
+ <string name="vpn_disallow_radio">VPN használata minden alkalmazáshoz kivéve a kiválasztottakat</string>
+ <string name="vpn_allow_radio">VPN használata kizárólag a kiválasztott alkalmazásokhoz</string>
+ <string name="query_delete_remote">Távoli kiszolgáló bejegyzés eltávolítása?</string>
<string name="keep">Megtartás</string>
<string name="delete">Törlés</string>
- <string name="server_list">Szerver lista</string>
+ <string name="add_remote">Új távoli kiszolgáló hozzáadása</string>
+ <string name="remote_random">Csatlakozási bejegyzések véletlenszerű használata csatlakozáskor</string>
+ <string name="remote_no_server_selected">Legalább egy távoli kiszolgálót definiálnia és engedélyeznie kell.</string>
+ <string name="server_list">Kiszolgáló lista</string>
+ <string name="vpn_allowed_apps">Engedélyezett Alkalmazások</string>
+ <string name="advanced_settings">Haladó Beállítások</string>
+ <string name="payload_options">Payload opciók</string>
+ <string name="tls_settings">TLS Beállítások</string>
+ <string name="no_remote_defined">Nincs kiszolgáló definiálva</string>
+ <string name="duplicate_vpn">VPN profil duplikálás</string>
+ <string name="duplicate_profile_title">Profil duplikálása: %s</string>
<string name="show_log">Napló mutatása</string>
+ <string name="faq_android_clients">Több OpenVPN kliens létezik Androidra. A leggyakoribb az OpenVPN for Android (ez a kliens), OpenVPN Connect és OpenVPN Settings.&lt;p&gt;A kliensek két csoportra oszthatóak: az OpenVPN for Android és az OpenVPN Connect a hivatalos VPNService API-t (Android 4.0+) használják és nem igényelnek root jogokat, és az OpenVPN Settings, ami root-ot használ.&lt;p&gt;Az OpenVPN for Android egy nyílt forráskódú kliens, amit Arne Schwabe fejleszt. Hozzáértőbb felhasználókat céloz meg, mivel rengeteg beállítást kínál, lehetőséget ad profilok fájlból történő importálására és alkalmazáson belüli konfigurálására/váltására. A kliens az OpenVPN közösségi verziójára épül, az OpenVPN 2.x verzió forráskódja alapján. Ezt a klienst tekinthetjük úgy, mint a félhivatalos közösségi klienst.&lt;p&gt;Az OpenVPN Connect nem nyílt forráskódú, amit az OpenVPN Technologies cég fejleszt. A klienst általános célra szánták az átlag felhasználók számára és engedi profilok importálását. Ez a kliens az OpenVPN C++ OpenVPN protokolljának újra-implementációjára épül (Ez volt az elvárás hogy az OpenVPN Technologies cég közzé tehessen egy iOS OpenVPN alkalmazást is). Ez a kliens az OpenVPN Technologies cég hivatalos kliense. &lt;p&gt; Az OpenVPN Settings a legrégebbi a kliensek között, egy UI a nyílt forráskódú OpenVPN-hez. Az OpenVPN for Android-dal szemben root jogosultságot igényel és nem használja az OpenVPN API-t. Nincs Android 4.0+ függése</string>
+ <string name="faq_androids_clients_title">Különbségek az Android OpenVPN kliensek között</string>
+ <string name="ignore_multicast_route">Multicast útvonal figyelmen kívül hagyása: %s</string>
+ <string name="ab_only_cidr">Az Android csak a CIDR útvonalakat támogatja a VPN-nél. Mivel nem-CIDR útvonalakat majdnem soha sem használnak, ezért az OpenVPN for ANdroid /32-t használ a nem-CIDR útvonalakhoz és figyelmeztetést ad.</string>
+ <string name="ab_tethering_44">Internetmegosztás működik mialatt a VPN aktív. A megosztott kapcsolat NEM fogja használni a VPN-t.</string>
+ <string name="ab_kitkat_mss">A korai KitKat verzió rosszul állítja be az MSS értéket a TCP kapcsolaton (#61948). Próbálja meg engedélyezni az mssfix opciót a hiba kiküszöbölésére.</string>
+ <string name="ab_proxy">Az Android továbbra is használni fogja a proxy beállításokat, amik a mobil/WiFi kapcsolathoz vannak megadva ameddig nincs beállítva DNS kiszolgáló. Az OpenVPN for Android erről figyelmeztetni fog a log-ban.<p>Amikor a VPN beállít egy DNS kiszolgálót, az Android nem fogja tovább használni a proxy-t. Nincs API proxy beállításra VPN kapcsolathoz.</p></string>
+ <string name="ab_lollipop_reinstall">A VPN alkalmazások nem biztos hogy működnek ha uninstallálják majd újra installálják. A részleteket lásd #80074</string>
+ <string name="ab_not_route_to_vpn">A konfigurált kliens IP és a hálózati maszkjában levő IP-k útvonala nem a VPN-en keresztül vezet. Az OpenVPN úgy küszöböli ki ezt a hibát, hogy explicit hozzáad egy útvonalat ami a kliens IP és hálózati maszkjának megfelel</string>
+ <string name="ab_persist_tun">Egy tun eszköz megnyitása, mialatt egy másik tun eszköz aktív, ami megmaradó-tun esetén használt, a VPNService összeomlását okozza az eszközön. A VPN újbóli működéséhez újraindítás szükséges. Az OpenVPN for Android megpróbálja elkerülni a tun eszköz újra megnyitását és ha valóban szükséges akkor először lezárja az aktuális TUN-t az új TUN megnyitása előtt az összeomlás elkerülése érdekében. Ez egy rövid ablakoz vezethet ami alatt csomagok továbbítódhatnak nem-VPN kapcsolaton keresztül. A VPNService ennek ellenére néha mégis összeomlik, ami az eszköz újraindítását igényli.</string>
+ <string name="ab_secondary_users">A VPN egyáltalán nem működik másodlagos felhasználóknak.</string>
+ <string name="ab_kitkat_reconnect">"Több felhasználó jelentette, hogy a mobil kapcsolat/mobil adat gyakran megszakad a VPN használata alatt. Ez a viselkedés úgy tűnik csak néhány mobil szolgáltató/eszköz kombinációt érint és eddig nem azonosítottak okot/kiküszöbölést a hibára. "</string>
+ <string name="ab_vpn_reachability_44">Csak azok a célállomások érhetőek el VPN-en, amik VPN nélkül is elérhetőek. Az IPv6 VPN egyáltalán nem működik.</string>
+ <string name="ab_only_cidr_title">Nem CIDR Útvonalak</string>
+ <string name="ab_proxy_title">Proxy viselkedés a VPN-ekhez</string>
+ <string name="ab_lollipop_reinstall_title">VPN alkalmazások újratelepítése</string>
+ <string name="version_upto">%s és korábbi</string>
+ <string name="copy_of_profile">%s másolata</string>
+ <string name="ab_not_route_to_vpn_title">Útvonal a konfigurált IP címhez</string>
+ <string name="ab_kitkat_mss_title">Rossz MSS érték a VPN kapcsolathoz</string>
+ <string name="ab_secondary_users_title">Másodlagos tablet felhasználók</string>
+ <string name="custom_connection_options_warng">Határozzon meg egyedi kapcsolat specifikus opciókat. Elővigyázatosan használja</string>
<string name="custom_connection_options">Egyéni beállítások</string>
- <string name="version_and_later">%s és később</string>
+ <string name="remove_connection_entry">Kapcsolat bejegyzés eltávolítása</string>
+ <string name="ab_kitkat_reconnect_title">Véletlenszerű lecsatlakozások a mobil hálózatról</string>
+ <string name="ab_vpn_reachability_44_title">A távoli hálózat nem elérhető</string>
+ <string name="ab_persist_tun_title">Megmaradó tun mód</string>
+ <string name="version_and_later">%s és későbbi</string>
+ <string name="tls_cipher_alert_title">Kapcsolódás sikertelen SSL23_GET_SERVER_HELLO:sslv3 alert handshake hibával</string>
+ <string name="tls_cipher_alert">Újabb OpenVPN for Android verziók (0.6.29/2015 március) biztonságosabb alapértelmezést használnak az engedélyezett rejtjelező kísérletekhez (tls-cipher \"DEFAULT:!EXP:!PSK:!SRP:!kRSA\"). Sajnos a kevésbé biztonságos és export rejtjelező kísérletek kihagyása, különösen azoknak a rejtjelező kísérleteknek a kihagyása amik nem támogatják a Perfect Forward Security-t (Diffie-Hellman), néhány problémát okoz. Ezt általában egy jószándékú de gyengén végrehajtott TLS biztonság fokozás okozza a szerveren vagy néhány beágyazott OS-nél lecsupaszított SSL-el (pl.: MikroTik).\nA probléma megoldásához állítsa a tls-rejtjelezés alapértelmezését ésszerűbbre a szerveren, mint például tls-cipher \"DEFAULT:!EXP:!PSK:!SRP:!kRSA\". A probléma kliensen történő kiküszöböléséhez adja hozzá az Android kliensben az egyedi opciókhoz hogy tls-cipher DEFAULT.</string>
+ <string name="message_no_user_edit">Ez a profil egy külső alkalmazásból (%s) lett hozzáadva és a felhasználó által nem szerkeszthetőnek lett jelölve.</string>
+ <string name="crl_file">Tanúsítvány Visszavonási Lista</string>
+ <string name="service_restarted">OpenVPN Service újraindítása (az alkalmazás valószínűleg összeomlott vagy memória nyomásra bezárták)</string>
+ <string name="import_config_error">A konfiguráció importálása akadályba ütközött, nem lehet menteni</string>
<string name="Search">Keresés</string>
+ <string name="lastdumpdate">(Utolsó dump %3$s (%1$d:%2$d))</string>
+ <string name="clear_log_on_connect">Napló törlése új kapcsolódáskor</string>
+ <string name="connect_timeout">Csatlakozás Időtúllépés</string>
+ <string name="no_allowed_app">Nincs engedélyezett alkalmazás hozzáadva. Saját magunk (%s) hozzáadása, hogy legalább egy alkalmazás legyen az engedélyezett alkalmazások listáján, hogy ne engedjünk meg minden alkalmazást</string>
+ <string name="query_permissions_sdcard">Az OpenVPN for Android képes automatikusan felderíteni a hiányzó fájlokat az SD kártyán. Az üzenetre koppintva elindul az engedély kérés.</string>
<string name="protocol">Protokoll</string>
<string name="enabled_connection_entry">Engedélyezett</string>
- <string name="months_left">%d hónap van hátra</string>
- <string name="days_left">%d nap van hátra</string>
- <string name="hours_left">%d óra van hátra</string>
+ <string name="abi_mismatch">Preferred native ABI precedence of this device (%1$s) and ABI reported by native libraries (%2$s) mismatch</string>
+ <string name="permission_revoked">A VPN engedélyt visszavonta az OS (pl.: másik VPN program indult), VPN leállítása</string>
+ <string name="pushpeerinfo">Peer információ küldése</string>
+ <string name="pushpeerinfosummary">Extra információ küldése a kiszolgálónak, pl.: SSL verzió és Android verzió</string>
+ <string name="pw_request_dialog_title">%1$s szükséges</string>
+ <string name="pw_request_dialog_prompt">Kérem adja meg a %1$s profilhoz tartozó jelszót</string>
+ <string name="menu_use_inline_data">Beágyazott adatok használata</string>
+ <string name="export_config_chooser_title">Konfigurációs fájl exportálása</string>
+ <string name="missing_tlsauth">Hiányzó tls-auth fájl</string>
+ <string name="missing_certificates">Hiányzó felhasználói tanúsítvány vagy privát kulcs fájl</string>
+ <string name="missing_ca_certificate">Hiányzó CA tanúsítvány</string>
+ <string name="crl_title">Tanúsítvány Visszavonási Lista (opcionális)</string>
+ <string name="reread_log">%d napló bejegyzés újraolvasása a log cache fájlból</string>
+ <string name="samsung_broken">Annak ellenére, hogy a Samsung telefonok a legtöbbet eladott Android telefonok közé tartoznak, a Samsung firmware-ek a leg bug-osabb Android firmware-ek. Ezeken az eszközökön a hibák nem csak a VPN működésre korlátozódnak, de nagy részük kiküszöbölhető. A következő néhány ilyen hiba leírása.\n\nA DNS nem működik hacsak nem a DNS kiszolgáló a VPN tartományban van.\n\nSok Samsung 5.x eszközön nem működik az engedélyezett/tiltott alkalmazások funkció.\nSamsung 6.0-n a VPN nem működik hacsak nem adjuk hozzá kivételként az alkalmazást a Powersave funkcióknál.</string>
+ <string name="samsung_broken_title">Samsung telefonok</string>
+ <string name="novpn_selected">Nincs VPN kiválasztva.</string>
+ <string name="reconnect">Újracsatlakozás</string>
+ <string name="qs_title">VPN be/kikapcsolás</string>
+ <string name="qs_connect">Csatlakozás %s-hez</string>
+ <string name="qs_disconnect">%s bontása</string>
+ <string name="connectretrymaxmessage">Adja meg a csatlakozási kísérletek közötti maximális időt. Az OpenVPN eddig az értékig fokozatosan növeli a sikertelen csatlakozási kísérletek közötti várakozási időt. 300 másodperc az alapértelmezett.</string>
+ <string name="connectretrymaxtitle">Csatlakozási kísérletek közötti maximális idő</string>
+ <string name="state_waitconnectretry">%s másodperc várakozás a csatlakozási kísérletek között</string>
+ <string name="nought_alwayson_warning"><![CDATA[Ha nem jelent meg a VPN megerősítés ablak, akkor egy másik alkalmazáshoz engedélyezve van a \"Mindig VPN-en\". Ebben az esetben csak az az alkalmazás csatlakozhat VPN-hez. Ellenőrizze a Beállítások -> Hálózatok további... -> VPN-ek alatt]]></string>
+ <string name="management_socket_closed">OpenVPN kapcsolatot lezárva (%s)</string>
+ <string name="change_sorting">Rendezés megváltoztatása</string>
+ <string name="sort">Rendezés</string>
+ <string name="sorted_lru">A profilok a legutóbbi használat szerint rendezve</string>
+ <string name="sorted_az">A profilok név szerint rendezve</string>
+ <string name="deprecated_tls_remote">A konfiguráció tls-remote opciót használ, ami a 2.3-ban elavulttá vált és a 2.4-ben végleg eltávolították</string>
</resources>
diff --git a/app/src/main/res/values-in/plurals-icsopenvpn.xml b/app/src/main/res/values-in/plurals-icsopenvpn.xml
new file mode 100755
index 00000000..6b7daaef
--- /dev/null
+++ b/app/src/main/res/values-in/plurals-icsopenvpn.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<resources>
+ <plurals name="months_left">
+ <item quantity="other">%d bulan kiri</item>
+ </plurals>
+ <plurals name="days_left">
+ <item quantity="other">%d hari lagi</item>
+ </plurals>
+</resources>
diff --git a/app/src/main/res/values-in/strings-icsopenvpn.xml b/app/src/main/res/values-in/strings-icsopenvpn.xml
index 132f25a1..e310d2f9 100755
--- a/app/src/main/res/values-in/strings-icsopenvpn.xml
+++ b/app/src/main/res/values-in/strings-icsopenvpn.xml
@@ -44,13 +44,14 @@
<string name="duplicate_profile_name">Silakan masukan nama profil yang berbeda</string>
<string name="profilename">Nama profil</string>
<string name="no_keystore_cert_selected">Anda harus memilih sertifikat pengguna</string>
+ <string name="no_ca_cert_selected">Opoeo</string>
<string name="no_error_found">Tidak ada kesalahan</string>
<string name="config_error_found">Konfigurasi Salah</string>
<string name="ipv4_format_error">Kesalahan penulisan alamat IPV4</string>
<string name="custom_route_format_error">Gagal menganalisa rute buatan</string>
<string name="pw_query_hint">(biarkan kosong untuk antrian permintaan)</string>
<string name="vpn_shortcut">Jalan Pintas OpenVPN</string>
- <string name="vpn_launch_title">Hubungkan VPN</string>
+ <string name="vpn_launch_title">Dyan</string>
<string name="shortcut_profile_notfound">Profil di shrotcut tidak ada</string>
<string name="random_host_prefix">Acak awalan Host </string>
<string name="random_host_summary">Tambah 6 karakter acak di depan nama host</string>
@@ -164,7 +165,7 @@
<string name="private_key_password">Sandi kunci pribadi</string>
<string name="password">Sandi</string>
<string name="file_icon">ikon berkas</string>
- <string name="tls_authentication">Otentikasi TLS</string>
+ <string name="tls_authentication">TLS Authentication / Enkripsi</string>
<string name="generated_config">Konfigurasi Dibuat</string>
<string name="generalsettings">Pengaturan</string>
<string name="owner_fix_summary">Mencoba menetapkan pemilik /dev/tun ke sistem. Beberapa gambar CM9 memerlukan ini untuk membuat API VPNService bekerja. Memerlukan akses Root.</string>
@@ -203,9 +204,8 @@
<string name="using_proxy">Menggunakan proxy %1$s %2$d</string>
<string name="use_system_proxy">Gunakan sistem proxy</string>
<string name="use_system_proxy_summary">Gunakan konfigurasi lebih luas untuk menyambung system melalui proxy HTTP/HTTPS</string>
- <string name="donatewithpaypal">Anda dapat melakukan donasi &lt;a href=\"https://www.paypal.com/cgi-bin/webscr?hosted_button_id=R2M6ZP9AF25LS&amp;amp;cmd=_s-xclick\"&gt;dengan PayPal&lt;/a&gt; </string>
- <string name="onbootrestartsummary">OpenVPN akan menyambung kembali VPN jika VPN aktif pada saat sistem reboot/shutdown. Silakan baca FAQ tentang peringatan sambungan sebelum menggunakan pilihan ini.</string>
- <string name="onbootrestart">Koneksi ulang saat perangkat dihidupkan kembali</string>
+ <string name="onbootrestartsummary">OpenVPN akan menghubungkan VPN ditentukan apakah itu aktif di sistem boot. Silakan baca koneksi peringatan FAQ sebelum menggunakan opsi ini pada Android &lt; 5.0.</string>
+ <string name="onbootrestart">Minatosuki</string>
<string name="ignore">Abaikan</string>
<string name="restart">Restart</string>
<string name="restart_vpn_after_change">Perubahan konfigurasi baru diterapkan setelah restart VPN. Restart VPN sekarang?</string>
@@ -252,7 +252,6 @@
<string name="state_tcp_connect">Menghubungkan (TCP)</string>
<string name="state_auth_failed">Otentifikasi gagal</string>
<string name="state_nonetwork">Menunggu jaringan yang dapat dipakai</string>
- <string name="statusline_bytecount">↓%2$s/s %1$s - ↑%4$s/s %3$s</string>
<string name="notifcation_title_notconnect">Tidak terhubung</string>
<string name="start_vpn_title">Menghubungkan ke VPN %s</string>
<string name="start_vpn_ticker">Menghubungkan ke VPN %s</string>
@@ -378,4 +377,10 @@
<string name="ab_persist_tun_title">Modus terowongan bertahan</string>
<string name="version_and_later">%s dan yang lebih baru</string>
<string name="tls_cipher_alert_title">Sambungan gagal dengan peringatan kegagalan jabat tangan SSL23_GET_SERVER_HELLO:sslv3</string>
+ <string name="tls_cipher_alert">Dyankoclok</string>
+ <string name="message_no_user_edit">Profil ini telah ditambahkan dari aplikasi eksternal (%s) dan telah ditandai sebagai pengguna tidak dapat diedit.</string>
+ <string name="crl_file">Certificate Revocation List</string>
+ <string name="service_restarted">Restart layanan OpenVPN (App jatuh mungkin jatuh atau dibunuh untuk memori tekanan)</string>
+ <string name="import_config_error">Mengimpor konfigurasi menghasilkan kesalahan, tidak bisa menyimpannya</string>
+ <string name="Search">Pencarian</string>
</resources>
diff --git a/app/src/main/res/values-it/plurals-icsopenvpn.xml b/app/src/main/res/values-it/plurals-icsopenvpn.xml
new file mode 100755
index 00000000..70489fbc
--- /dev/null
+++ b/app/src/main/res/values-it/plurals-icsopenvpn.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<resources></resources>
diff --git a/app/src/main/res/values-it/strings-icsopenvpn.xml b/app/src/main/res/values-it/strings-icsopenvpn.xml
index feb61f0d..b3774986 100755
--- a/app/src/main/res/values-it/strings-icsopenvpn.xml
+++ b/app/src/main/res/values-it/strings-icsopenvpn.xml
@@ -50,7 +50,6 @@
<string name="custom_route_format_error">Errore durante la lettura delle regole di reindirizzamento (routing)</string>
<string name="pw_query_hint">(non compilare perché venga sempre richiesto)</string>
<string name="vpn_shortcut">Collegamento a OpenVPN</string>
- <string name="vpn_launch_title">Connetti alla VPN</string>
<string name="shortcut_profile_notfound">Profilo indicato nel collegamento non trovato</string>
<string name="random_host_prefix">Prefisso Host casuale</string>
<string name="random_host_summary">Aggiunge 6 caratteri casuali prima dell\'hostname</string>
@@ -166,7 +165,6 @@ Effettuata la lettura del file di configurazione</string>
<string name="private_key_password">Password della chiave privata</string>
<string name="password">Password</string>
<string name="file_icon">icona del file</string>
- <string name="tls_authentication">Autenticazione TLS</string>
<string name="generated_config">Configurazione generata</string>
<string name="generalsettings">Impostazioni</string>
<string name="owner_fix_summary">Tenta di impostare system come proprietario di /dev/tun. Alcuni firmware CM9 necessitano di questa impostazione affinché le API del servizio VPN funzionino. E\' necessario essere root.</string>
@@ -204,9 +202,6 @@ Effettuata la lettura del file di configurazione</string>
<string name="using_proxy">Si sta utilizzando il proxy %1$s %2$d</string>
<string name="use_system_proxy">Utilizza il proxy di sistema</string>
<string name="use_system_proxy_summary">Utilizza la configurazione generale del sistema relativa ai proxy HTTP/HTTPS per connettersi.</string>
- <string name="donatewithpaypal">Puoi &lt;a href=\"https://www.paypal.com/cgi-bin/webscr?hosted_button_id=R2M6ZP9AF25LS&amp;amp;cmd=_s-xclick\"&gt;donare tramite PayPal&lt;/a&gt; </string>
- <string name="onbootrestartsummary">OpenVPN is riconnetterà alla VPN se era in funzione durante un riavvio od un spegnimento dell\'apparecchio. Leggi con attenzione le FAQ con gli avvertimenti sulla connessione prima di scegliere questa opzione.</string>
- <string name="onbootrestart">Riconnetti al riavvio</string>
<string name="ignore">Ignora</string>
<string name="restart">Riavvia</string>
<string name="restart_vpn_after_change">Le modifiche sarannoi applicate dopo aver riavviato la connessione VPN. Riavviare ora la connessione?</string>
@@ -253,7 +248,6 @@ Effettuata la lettura del file di configurazione</string>
<string name="state_tcp_connect">Connessione in corso (TCP)</string>
<string name="state_auth_failed">Autenticazione fallita</string>
<string name="state_nonetwork">In attesa di una rete utilizzabile</string>
- <string name="statusline_bytecount">↓%2$s/s %1$s - ↑%4$s/s %3$s</string>
<string name="notifcation_title_notconnect">Non connesso</string>
<string name="start_vpn_title">Connessione alla VPN %s in corso</string>
<string name="start_vpn_ticker">Connessione alla VPN %s in corso</string>
diff --git a/app/src/main/res/values-ja/plurals-icsopenvpn.xml b/app/src/main/res/values-ja/plurals-icsopenvpn.xml
new file mode 100755
index 00000000..0511286f
--- /dev/null
+++ b/app/src/main/res/values-ja/plurals-icsopenvpn.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<resources>
+ <plurals name="months_left">
+ <item quantity="other">残り%dヵ月</item>
+ </plurals>
+ <plurals name="days_left">
+ <item quantity="other">残り%d日</item>
+ </plurals>
+ <plurals name="hours_left">
+ <item quantity="other">残り%d時間</item>
+ </plurals>
+ <plurals name="minutes_left">
+ <item quantity="other">残り%d分</item>
+ </plurals>
+</resources>
diff --git a/app/src/main/res/values-ja/strings-icsopenvpn.xml b/app/src/main/res/values-ja/strings-icsopenvpn.xml
index 7e8be056..0f55b892 100755
--- a/app/src/main/res/values-ja/strings-icsopenvpn.xml
+++ b/app/src/main/res/values-ja/strings-icsopenvpn.xml
@@ -6,20 +6,20 @@
-->
<resources>
- <string name="address">サーãƒãƒ¼ã‚¢ãƒ‰ãƒ¬ã‚¹ï¼š</string>
+ <string name="address">サーãƒãƒ¼ã‚¢ãƒ‰ãƒ¬ã‚¹:</string>
<string name="port">ãƒãƒ¼ãƒˆç•ªå·ï¼š</string>
<string name="location">場所</string>
- <string name="cant_read_folder">ディレクトリãŒèª­ã¿å–ã‚Œã¾ã›ã‚“</string>
+ <string name="cant_read_folder">ディレクトリを読ã¿å–ã‚Œã¾ã›ã‚“</string>
<string name="select">é¸æŠž</string>
<string name="cancel">キャンセル</string>
- <string name="no_data">データãªã—</string>
+ <string name="no_data">データãŒã‚ã‚Šã¾ã›ã‚“</string>
<string name="useLZO">LZO圧縮</string>
- <string name="client_no_certificate">証明書ãŒã‚ã‚Šã¾ã›ã‚“。</string>
+ <string name="client_no_certificate">証明書ãŒã‚ã‚Šã¾ã›ã‚“</string>
<string name="client_certificate_title">クライアント証明書</string>
<string name="client_key_title">クライアント証明書ã®ã‚­ãƒ¼</string>
<string name="client_pkcs12_title">PKCS12ファイル</string>
- <string name="ca_title">CA 証明書</string>
- <string name="no_certificate">証明書をé¸æŠžã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚</string>
+ <string name="ca_title">CA証明書</string>
+ <string name="no_certificate">証明書をé¸æŠžã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™</string>
<string name="copyright_guicode">ソースコードã¨å•é¡Œç®¡ç†ã¯ã“ã¡ã‚‰ï¼š https://github.com/schwabe/ics-openvpn/</string>
<string name="copyright_others">プログラムã¯ã€æ¬¡ã®ã‚³ãƒ³ãƒãƒ¼ãƒãƒ³ãƒˆã‚’使用ã—ã¾ã™ã€‚完全ãªè©³ç´°ã«ã¤ã„ã¦ã¯ã‚½ãƒ¼ã‚¹ä¸Šã®ãƒ©ã‚¤ã‚»ãƒ³ã‚¹ã‚’å‚ç…§ã—ã¦ãã ã•ã„。</string>
<string name="about">ãƒãƒ¼ã‚¸ãƒ§ãƒ³æƒ…å ±</string>
@@ -27,7 +27,7 @@
<string name="vpn_type">種別</string>
<string name="pkcs12pwquery">PKCS12ã®ãƒ‘スワード</string>
<string name="file_select">é¸æŠž&#8230;</string>
- <string name="file_nothing_selected">ファイルをé¸æŠžã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚</string>
+ <string name="file_nothing_selected">ファイルをé¸æŠžã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™</string>
<string name="useTLSAuth">TLSèªè¨¼ã‚’使用ã™ã‚‹</string>
<string name="tls_direction">TLS Direction</string>
<string name="ipv6_dialog_tile">IPv6アドレスをCIDRå½¢å¼ã§å…¥åŠ›(例:2000:dd::23/64)</string>
@@ -43,37 +43,38 @@
<string name="add_profile_name_prompt">æ–°ã—ã„プロファイルを識別ã™ã‚‹åå‰ã‚’入力ã—ã¾ã™</string>
<string name="duplicate_profile_name">プロファイルåãŒé‡è¤‡ã—ã¦ã„ã¾ã™ã€‚</string>
<string name="profilename">プロファイルå</string>
- <string name="no_keystore_cert_selected">ユーザー証明書をé¸æŠžã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚</string>
- <string name="no_error_found">エラーã¯è¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚</string>
- <string name="config_error_found">設定ã«èª¤ã‚ŠãŒã‚ã‚Šã¾ã™ã€‚</string>
+ <string name="no_keystore_cert_selected">ユーザー証明書をé¸æŠžã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™</string>
+ <string name="no_ca_cert_selected">証明書をé¸æŠžã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™</string>
+ <string name="no_error_found">エラーã¯è¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸ</string>
+ <string name="config_error_found">設定ã«èª¤ã‚ŠãŒã‚ã‚Šã¾ã™</string>
<string name="ipv4_format_error">IPv4 アドレスã®è§£æžã‚¨ãƒ©ãƒ¼</string>
<string name="custom_route_format_error">カスタム経路ã®è§£æžã‚¨ãƒ©ãƒ¼</string>
<string name="pw_query_hint">å¿…è¦ã«å¿œã˜ã¦å…¥åŠ›ã™ã‚‹ã«ã¯ç©ºæ¬„ã«ã—ã¦ãã ã•ã„</string>
<string name="vpn_shortcut">OpenVPN ã®ã‚·ãƒ§ãƒ¼ãƒˆã‚«ãƒƒãƒˆ</string>
- <string name="vpn_launch_title">VPNã«æŽ¥ç¶š</string>
+ <string name="vpn_launch_title">VPNã«æŽ¥ç¶šã—ã¦ã„ã¾ã™...</string>
<string name="shortcut_profile_notfound">ショートカットã§æŒ‡å®šã•ã‚ŒãŸãƒ—ロファイルãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“</string>
<string name="random_host_prefix">ランダムãªãƒ›ã‚¹ãƒˆ プレフィックス</string>
<string name="random_host_summary">ランダムãª6文字をホストåã®å‰ã«ä»˜åŠ ã—ã¾ã™ã€‚</string>
<string name="custom_config_title">カスタム オプションを使用ã™ã‚‹</string>
<string name="custom_config_summary">カスタムオプションを指定ã—ã¾ã™ã€‚注æ„ã—ã¦ä½¿ç”¨ã—ã¦ãã ã•ã„!</string>
<string name="route_rejected">経路ãŒAndroidã«ã‚ˆã‚Šæ‹’å¦ã•ã‚Œã¾ã—ãŸã€‚</string>
- <string name="cancel_connection">切断</string>
- <string name="cancel_connection_long">VPNを切断ã—ã¾ã™</string>
+ <string name="cancel_connection">VPNを切断</string>
+ <string name="cancel_connection_long">VPN接続を切断</string>
<string name="clear_log">ログをクリア</string>
- <string name="title_cancel">キャンセルã®ç¢ºèª</string>
- <string name="cancel_connection_query">接続中ã¾ãŸã¯è©¦è¡Œä¸­ã®æŽ¥ç¶šã‚’キャンセルã—ã¾ã™ã‹ï¼Ÿ</string>
+ <string name="title_cancel">切断ã®ç¢ºèª</string>
+ <string name="cancel_connection_query">接続中ã®VPNを切断ã€ã¾ãŸã¯è©¦è¡Œä¸­ã®æŽ¥ç¶šã‚’キャンセルã—ã¾ã™ã‹ï¼Ÿ</string>
<string name="remove_vpn">VPN を削除</string>
- <string name="check_remote_tlscert">サーãƒãŒè¨¼æ˜Žæ›¸ã¨ã¨ã‚‚ã«TLSæ‹¡å¼µ(--remote-cert-tls server)を使用ã—ã¦ã„ã‚‹ã‹ç¢ºèªã™ã‚‹</string>
+ <string name="check_remote_tlscert">サーãƒãŒè¨¼æ˜Žæ›¸ã¨ã¨ã‚‚ã«TLSæ‹¡å¼µ(--remote-cert-tls server)を使用ã—ã¦ã„ã‚‹ã‹ç¢ºèªã—ã¾ã™ã€‚</string>
<string name="check_remote_tlscert_title">TLSサーãƒãƒ¼è¨¼æ˜Žæ›¸ã‚’è¦æ±‚ã™ã‚‹</string>
<string name="remote_tlscn_check_summary">リモートサーãƒãƒ¼è¨¼æ˜Žæ›¸ã®æ‰€æœ‰è€…識別å­(Subject DN)を確èªã—ã¾ã™ã€‚</string>
<string name="remote_tlscn_check_title">証明書ã®ãƒ›ã‚¹ãƒˆåを確èªã™ã‚‹</string>
<string name="enter_tlscn_dialog">リモート証明書ã®ç…§åˆã«ä½¿ç”¨ã™ã‚‹è­˜åˆ¥å(DN)を指定ã—ã¾ã™ã€‚(例: C=DE, L=Paderborn, OU=Avian IP Carriers, CN=openvpn.blinkt.de)\n\n完全ãªè­˜åˆ¥å(DN)ã¾ãŸã¯ç›¸å¯¾è­˜åˆ¥å(RDN)ã€ã‚ã‚‹ã„ã¯ç›¸å¯¾è­˜åˆ¥åã®ãƒ—リフィクスを指定ã—ã¾ã™ã€‚\n\nãŸã¨ãˆã°ç›¸å¯¾è­˜åˆ¥åã®ãƒ—リフィクスã¨ã—ã¦\"Server\"を指定ã™ã‚‹ã¨ã€\"Server-1\"ã¨\"Server-2\"ã«ãƒžãƒƒãƒã—ã¾ã™ã€‚\n\n空欄ã«ã—ãŸå ´åˆã¯ç›¸å¯¾è­˜åˆ¥åã¨ã‚µãƒ¼ãƒã®ãƒ›ã‚¹ãƒˆåã‚’ãƒã‚§ãƒƒã‚¯ã—ã¾ã™ã€‚\n\n詳細ã«ã¤ã„ã¦ã¯OpenVPN 2.3.1以é™ã®ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ã®ã€Œ--verify-x509-nameã€ã®é …ã‚’å‚ç…§ã—ã¦ãã ã•ã„。</string>
<string name="enter_tlscn_title">リモート証明書サブジェクト</string>
- <string name="tls_key_auth">TLSéµèªè¨¼ã‚’有効ã«ã™ã‚‹</string>
+ <string name="tls_key_auth">TLSéµèªè¨¼ã‚’有効ã«ã—ã¾ã™ã€‚</string>
<string name="tls_auth_file">TLS èªè¨¼ãƒ•ã‚¡ã‚¤ãƒ«</string>
<string name="pull_on_summary">IPアドレスã€çµŒè·¯æƒ…å ±ã€DNSãªã©ã®æƒ…報をサーãƒã‹ã‚‰å–å¾—ã—ã¾ã™ã€‚</string>
<string name="pull_off_summary">サーãƒã‹ã‚‰ã¯ä½•ã‚‚情報ãŒå–å¾—ã§ãã¾ã›ã‚“。指定ãŒå¿…è¦ãªè¨­å®šã¯ä»¥ä¸‹ã®é€šã‚Šã§ã™ã€‚</string>
- <string name="use_pull">情報å–å¾—ã®è¨­å®š</string>
+ <string name="use_pull">設定情報をå–å¾—ã™ã‚‹</string>
<string name="dns">DNS</string>
<string name="override_dns">DNSを手動設定ã™ã‚‹</string>
<string name="dns_override_summary">DNSをユーザå´ã§æŒ‡å®šã—ã¾ã™ã€‚</string>
@@ -84,18 +85,18 @@
<string name="backup_dns">セカンダリDNSサーãƒãƒ¼</string>
<string name="ignored_pushed_routes">サーãƒå´æŒ‡å®šã®çµŒè·¯æƒ…報を無視ã™ã‚‹</string>
<string name="ignore_routes_summary">サーãƒã‹ã‚‰ãƒ—ッシュã•ã‚ŒãŸçµŒè·¯æƒ…報を無視ã—ã¾ã™ã€‚</string>
- <string name="default_route_summary">ã™ã¹ã¦ã®é€šä¿¡ã‚’VPN経由ã«ã—ã¾ã™</string>
- <string name="use_default_title">既定ã®çµŒè·¯ã«ä½¿ç”¨</string>
+ <string name="default_route_summary">ã™ã¹ã¦ã®é€šä¿¡ã‚’VPN経由ã«ã—ã¾ã™ã€‚</string>
+ <string name="use_default_title">既定ã®çµŒè·¯ã«ä½¿ç”¨ã™ã‚‹</string>
<string name="custom_route_message">カスタム経路を入力ã—ã¾ã™ã€‚宛先ã®ã¿ã‚’CIDRå½¢å¼ã§æŒ‡å®šã—ã¾ã™ã€‚例ãˆã° \"10.0.0.0/8 2002::/16\"ã¨æŒ‡å®šã™ã‚Œã°10.0.0.0/8ã¨2002::/16ã¸ã®é€šä¿¡ã¯VPNã«å‘ã‘られã¾ã™ã€‚</string>
<string name="custom_route_message_excluded">VPNを経由ã—ãªã„ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚’指定ã—ã¾ã™ã€‚カスタム経路ã¨åŒã˜æ›¸å¼ã‚’使用ã—ã¾ã™ã€‚</string>
<string name="custom_routes_title">カスタム経路情報</string>
<string name="custom_routes_title_excluded">除外ã•ã‚ŒãŸãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯</string>
<string name="log_verbosity_level">ログã®è©³ç´°åº¦</string>
<string name="float_summary">èªè¨¼æ¸ˆã¿ãƒ‘ケットをã©ã®IPã‹ã‚‰ã§ã‚‚å—ã‘付ã‘ã¾ã™ã€‚</string>
- <string name="float_title">フローティング サーãƒãƒ¼ã‚’許å¯</string>
+ <string name="float_title">フローティング サーãƒãƒ¼ã‚’許å¯ã™ã‚‹</string>
<string name="custom_options_title">カスタムオプション</string>
- <string name="edit_vpn">VPN 設定ã®ç·¨é›†</string>
- <string name="remove_vpn_query">VPN プロファイル %s を削除ã—ã¾ã™ã‹ï¼Ÿ</string>
+ <string name="edit_vpn">VPN設定ã®ç·¨é›†</string>
+ <string name="remove_vpn_query">VPNプロファイル %s を削除ã—ã¾ã™ã‹ï¼Ÿ</string>
<string name="tun_error_helpful">ã„ãã¤ã‹ã®ã‚«ã‚¹ã‚¿ãƒ ICSイメージã¯ã€/dev/tunã®ãƒ‘ーミッションãŒç•°å¸¸ã‹ã€TUNモジュールãŒå«ã¾ã‚Œã¦ã„ã¾ã›ã‚“。CM9イメージã®å ´åˆã¯å…¨èˆ¬è¨­å®šã§æ‰€æœ‰æ¨©è¨­å®šã‚’修正ã—ã¦ãã ã•ã„。</string>
<string name="tun_open_error">TUNデãƒã‚¤ã‚¹ã‚’é–‹ã“ã†ã¨ã—ã¦å¤±æ•—ã—ã¾ã—ãŸã€‚</string>
<string name="error">"エラー:"</string>
@@ -116,15 +117,15 @@
<string name="ics_openvpn_log_file">ICS OpenVPN ログ ファイル</string>
<string name="copied_entry">ログ エントリをクリップボードã«ã‚³ãƒ”ーã—ã¾ã—ãŸ</string>
<string name="tap_mode">TAPモード</string>
- <string name="faq_tap_mode">TAPモードã¯éžroot化環境ã§ã¯å‹•ä½œã—ã¾ã›ã‚“。よã£ã¦ã“ã®ã‚¢ãƒ—リケーションã§ã¯TAPをサãƒãƒ¼ãƒˆã§ãã¾ã›ã‚“。</string>
+ <string name="faq_tap_mode">TAPモードã¯root化ã•ã‚Œã¦ã„ãªã„VPN APIã§ã¯å‹•ä½œã—ã¾ã›ã‚“。よã£ã¦ã“ã®ã‚¢ãƒ—リケーションã§ã¯TAPをサãƒãƒ¼ãƒˆã§ãã¾ã›ã‚“。</string>
<string name="tap_faq2">ã¾ãŸã§ã™ã‹ï¼ŸTAPモードã¯ã‚µãƒãƒ¼ãƒˆã•ã‚Œã¦ã„ã¾ã›ã‚“ã—ã€ã‚µãƒãƒ¼ãƒˆã•ã‚Œã‚‹ã‹ã©ã†ã‹ãƒ¡ãƒ¼ãƒ«ã‚’é€ã‚‹ã“ã¨ã¯ä½•ã®å½¹ã«ã‚‚ç«‹ã¡ã¾ã›ã‚“。</string>
- <string name="tap_faq3">3回目ã§ã™ã€‚本当ã®ã¨ã“ã‚ã€TUN上ã§å‹•ãレイヤ2エミュレータを書ãã“ã¨ã¯ã§ãã¾ã—ãŸã€‚(é€ä¿¡æ™‚ã®æƒ…報追加ã¨å—信時ã®æƒ…報削除ã§)。ã—ã‹ã—ã“ã®ã‚¨ãƒŸãƒ¥ãƒ¬ãƒ¼ã‚¿ã¯ARPã‚„ãŠãらãã¯DHCPをも実装ã—ãªã‘ã‚Œã°ãªã‚‰ãªã„ã§ã—ょã†ã€‚誰もã“ã®ã“ã¨ã«æ°—ãŒã¤ã„ã¦ã„ã¾ã›ã‚“。もã—ã‚ãªãŸãŒã“ã®æ©Ÿèƒ½ã‚’作る気ã«ãªã£ãŸã®ã§ã‚ã‚Œã°ã€ã©ã†ãžç§ã«é€£çµ¡ã—ã¦ãã ã•ã„。</string>
+ <string name="tap_faq3">3回目ã§ã™ã‹ï¼Ÿæœ¬å½“ã®ã¨ã“ã‚ã€TUN上ã§å‹•ãレイヤ2エミュレータを書ãã“ã¨ã¯ã§ãã¾ã—ãŸã€‚(é€ä¿¡æ™‚ã®æƒ…報追加ã¨å—信時ã®æƒ…報削除ã§)。ã—ã‹ã—ã“ã®ã‚¨ãƒŸãƒ¥ãƒ¬ãƒ¼ã‚¿ã¯ARPã‚„ãŠãらãã¯DHCPをも実装ã—ãªã‘ã‚Œã°ãªã‚‰ãªã„ã§ã—ょã†ã€‚誰もã“ã®ã“ã¨ã«æ°—ãŒã¤ã„ã¦ã„ã¾ã›ã‚“。もã—ã‚ãªãŸãŒã“ã®æ©Ÿèƒ½ã‚’作る気ã«ãªã£ãŸã®ã§ã‚ã‚Œã°ã€ã©ã†ãžç§ã«é€£çµ¡ã—ã¦ãã ã•ã„。</string>
<string name="faq">よãã‚る質å•</string>
<string name="copying_log_entries">ログ エントリã®ã‚³ãƒ”ー</string>
<string name="faq_copying">1è¡Œã®ãƒ­ã‚°ã‚¨ãƒ³ãƒˆãƒªã‚’コピーã™ã‚‹ã«ã¯ã€ãã®ã‚¨ãƒ³ãƒˆãƒªã‚’タッãƒã—続ã‘ã¾ã™ã€‚コピーï¼é€ä¿¡ã™ã‚‹ã«ã¯ã€Œãƒ­ã‚°ã‚¨ãƒ³ãƒˆãƒªã‚’é€ä¿¡ã€ã‚’使用ã—ã¾ã™ã€‚GUIã§è¡¨ç¤ºã•ã‚Œãªã„å ´åˆã¯ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ã®ãƒ¡ãƒ‹ãƒ¥ãƒ¼ãƒœã‚¿ãƒ³ã‚’使用ã—ã¦ãã ã•ã„。</string>
<string name="faq_shortcut">起動ショートカット</string>
<string name="faq_howto_shortcut">OpenVPNã‚’èµ·å‹•ã™ã‚‹ãŸã‚ã®ã‚·ãƒ§ãƒ¼ãƒˆã‚«ãƒƒãƒˆã‚’デスクトップã«é…ç½®ã§ãã¾ã™ã€‚ショートカットやウィジェットをé…ç½®ã§ãã‚‹ã‹ã©ã†ã‹ã¯ãƒ›ãƒ¼ãƒ ã‚¹ã‚¯ãƒªãƒ¼ãƒ³ãƒ—ログラムã«ä¾å­˜ã—ã¾ã™ã€‚</string>
- <string name="no_vpn_support_image">申ã—訳ã‚ã‚Šã¾ã›ã‚“ãŒã€ãŠä½¿ã„ã®ç’°å¢ƒã§ã¯VPNサービスãŒã‚µãƒãƒ¼ãƒˆã•ã‚Œã¦ã„ã¾ã›ã‚“。</string>
+ <string name="no_vpn_support_image">申ã—訳ã‚ã‚Šã¾ã›ã‚“ãŒã€ãŠä½¿ã„ã®ç’°å¢ƒã§ã¯VPNサービスãŒã‚µãƒãƒ¼ãƒˆã•ã‚Œã¦ã„ã¾ã›ã‚“</string>
<string name="encryption">æš—å·åŒ–</string>
<string name="cipher_dialog_title">æš—å·åŒ–æ–¹å¼ã‚’入力</string>
<string name="chipher_dialog_message">OpenVPNãŒæš—å·åŒ–ã«ä½¿ç”¨ã™ã‚‹æš—å·æ–¹å¼ã‚’入力ã—ã¦ãã ã•ã„。空欄ã«ã™ã‚‹ã¨ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã‚’使用ã—ã¾ã™ã€‚</string>
@@ -133,21 +134,21 @@
<string name="file_explorer_tab">ファイルをé¸æŠž</string>
<string name="inline_file_tab">インライン ファイル</string>
<string name="error_importing_file">ファイルã®ã‚¤ãƒ³ãƒãƒ¼ãƒˆ エラー</string>
- <string name="import_error_message">ファイルシステムã‹ã‚‰ãƒ•ã‚¡ã‚¤ãƒ«ã‚’インãƒãƒ¼ãƒˆã§ãã¾ã›ã‚“ã§ã—ãŸã€‚</string>
+ <string name="import_error_message">ファイルシステムã‹ã‚‰ãƒ•ã‚¡ã‚¤ãƒ«ã‚’インãƒãƒ¼ãƒˆã§ãã¾ã›ã‚“ã§ã—ãŸ</string>
<string name="inline_file_data">[インライン ファイル データ]</string>
<string name="opentun_no_ipaddr">IP情報ãªã—ã§ã®TUNデãƒã‚¤ã‚¹ä½¿ç”¨ã¯æ‹’å¦ã—ã¦ã„ã¾ã™</string>
<string name="menu_import">OVPNファイルã‹ã‚‰ãƒ—ロファイルをインãƒãƒ¼ãƒˆ</string>
<string name="menu_import_short">インãƒãƒ¼ãƒˆ</string>
<string name="import_content_resolve_error">インãƒãƒ¼ãƒˆã™ã‚‹ãƒ—ロファイルを読ã¿å–ã‚Œã¾ã›ã‚“ã§ã—ãŸã€‚</string>
- <string name="error_reading_config_file">構æˆãƒ•ã‚¡ã‚¤ãƒ«ã®èª­ã¿å–りエラー</string>
+ <string name="error_reading_config_file">設定ファイルã®èª­ã¿å–りエラー</string>
<string name="add_profile">プロファイルã®è¿½åŠ </string>
- <string name="import_could_not_open">インãƒãƒ¼ãƒˆã•ã‚ŒãŸæ§‹æˆãƒ•ã‚¡ã‚¤ãƒ«ã«è¨˜è¼‰ã•ã‚ŒãŸãƒ•ã‚¡ã‚¤ãƒ« %1$s ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。</string>
- <string name="importing_config">構æˆãƒ•ã‚¡ã‚¤ãƒ«ã‚’%1$sã‹ã‚‰ã‚¤ãƒ³ãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã™ã€‚</string>
+ <string name="import_could_not_open">インãƒãƒ¼ãƒˆã•ã‚ŒãŸè¨­å®šãƒ•ã‚¡ã‚¤ãƒ«ã«è¨˜è¼‰ã•ã‚ŒãŸãƒ•ã‚¡ã‚¤ãƒ« %1$s ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。</string>
+ <string name="importing_config">設定ファイルを%1$sã‹ã‚‰ã‚¤ãƒ³ãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã™ã€‚</string>
<string name="import_warning_custom_options">ユーザインターフェースã«ãƒžãƒƒãƒ”ングã•ã‚Œã¦ã„ãªã„ã„ãã¤ã‹ã®è¨­å®šé …ç›®ãŒã‚ã‚Šã¾ã™ã€‚ãれらã®è¨­å®šã¯ã‚«ã‚¹ã‚¿ãƒ ã‚ªãƒ—ションã¨ã—ã¦è¿½åŠ ã•ã‚Œã¾ã™ã€‚カスタムオプションを以下ã«è¡¨ç¤ºã—ã¾ã™ã€‚</string>
- <string name="import_done">構æˆãƒ•ã‚¡ã‚¤ãƒ«ã®èª­ã¿è¾¼ã¿ã‚’完了ã—ã¾ã—ãŸã€‚</string>
+ <string name="import_done">設定ファイルã®èª­ã¿è¾¼ã¿ã‚’完了ã—ã¾ã—ãŸã€‚</string>
<string name="nobind_summary">ローカル アドレスã¨ãƒãƒ¼ãƒˆã«ãƒã‚¤ãƒ³ãƒ‰ã‚’è¡Œã„ã¾ã›ã‚“。</string>
<string name="no_bind">ローカルãƒã‚¤ãƒ³ãƒ‰ã—ãªã„</string>
- <string name="import_configuration_file">構æˆãƒ•ã‚¡ã‚¤ãƒ«ã®ã‚¤ãƒ³ãƒãƒ¼ãƒˆ</string>
+ <string name="import_configuration_file">設定ファイルã®ã‚¤ãƒ³ãƒãƒ¼ãƒˆ</string>
<string name="faq_security_title">セキュリティã«é–¢ã™ã‚‹è€ƒæ…®äº‹é …</string>
<string name="faq_security">OpenVPNãŒã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£ã«æ•æ„Ÿã§ã‚るよã†ã«ã€ã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£ã«é–¢ã—ã¦ã®ã„ãã¤ã‹ã®æ³¨æ„事項ã¯ç†ã«ã‹ãªã£ã¦ã„ã¾ã™ã€‚
SDカード上ã®ãƒ‡ãƒ¼ã‚¿ã¯æœ¬è³ªçš„ã«ç„¡é˜²å‚™ã§ã™ã€‚ã™ã¹ã¦ã®ã‚¢ãƒ—リケーションãŒèª­ã¿å–ã‚Šå¯èƒ½ã§ã™ã€‚(ãŸã¨ãˆã°ã“ã®ãƒ—ログラムã¯SDカードã¸ã®ç‰¹åˆ¥ãªèª­ã¿å–り許å¯ã‚’å¿…è¦ã¨ã—ã¦ã„ã¾ã›ã‚“)
@@ -155,7 +156,7 @@ SDカード上ã®ãƒ‡ãƒ¼ã‚¿ã¯æœ¬è³ªçš„ã«ç„¡é˜²å‚™ã§ã™ã€‚ã™ã¹ã¦ã®ã‚¢ãƒ—リ
ãŸã ã—ã€ã“ã®ã‚¢ãƒ—リケーションã‹ã‚‰ã®ã¿èª­ã¿å–ã‚Šå¯èƒ½ã§ã¯ã‚ã‚‹ã‚‚ã®ã®ã€æš—å·åŒ–ã•ã‚Œã¦ã¯ã„ã¾ã›ã‚“。
機体をroot化ã—ãŸã‚Šã€ã‚ã‚‹ã„ã¯ãã®ä»–ã®è„†å¼±æ€§ã«ã‚ˆã£ã¦ãƒ•ã‚¡ã‚¤ãƒ«ã¯èª­ã¿å–ã‚‹ã“ã¨ãŒå¯èƒ½ã‹ã‚‚ã—ã‚Œã¾ã›ã‚“。パスワードã¯å¹³æ–‡ã§ä¿å­˜ã•ã‚Œã¦ã„ã¾ã™ã€‚PKCS12ファイルをAndroidã®è¨¼æ˜Žæ›¸ç®¡ç†æ©Ÿèƒ½ã«ã‚¤ãƒ³ãƒãƒ¼ãƒˆã—ã¦ä½¿ç”¨ã™ã‚‹ã“ã¨ãŒå¼·ã推奨ã•ã‚Œã¾ã™ã€‚</string>
<string name="import_vpn">インãƒãƒ¼ãƒˆ</string>
- <string name="broken_image_cert_title">証明書ã®é¸æŠžã§ã‚¨ãƒ©ãƒ¼ãŒè¡¨ç¤ºã•ã‚Œã¾ã™</string>
+ <string name="broken_image_cert_title">証明書ã®é¸æŠžç”»é¢ã§ã‚¨ãƒ©ãƒ¼</string>
<string name="broken_image_cert">Android 4.0以é™ã®è¨¼æ˜Žæ›¸é¸æŠžãƒ€ã‚¤ã‚¢ãƒ­ã‚°è¡¨ç¤ºã§ä¾‹å¤–を検知ã—ã¾ã—ãŸã€‚
ã“ã®äº‹è±¡ã¯æ¨™æº–çš„ãªAndroid 4.0以é™ã§ã¯ç™ºç”Ÿã—ã¾ã›ã‚“。ãŠä½¿ã„ã®Androidã®è¨¼æ˜Žæ›¸ç®¡ç†æ©Ÿæ§‹ãŒå£Šã‚Œã¦ã„ã‚‹å¯èƒ½æ€§ãŒã‚ã‚Šã¾ã™ã€‚</string>
<string name="ipv4">IPv4</string>
@@ -170,22 +171,22 @@ SDカード上ã®ãƒ‡ãƒ¼ã‚¿ã¯æœ¬è³ªçš„ã«ç„¡é˜²å‚™ã§ã™ã€‚ã™ã¹ã¦ã®ã‚¢ãƒ—リ
<string name="private_key_password">秘密éµã®ãƒ‘スワード</string>
<string name="password">パスワード</string>
<string name="file_icon">ファイルã®ã‚¢ã‚¤ã‚³ãƒ³</string>
- <string name="tls_authentication">TLSèªè¨¼</string>
- <string name="generated_config">生æˆã•ã‚ŒãŸæ§‹æˆ</string>
+ <string name="tls_authentication">TLSèªè¨¼/æš—å·åŒ–</string>
+ <string name="generated_config">生æˆã•ã‚ŒãŸè¨­å®š</string>
<string name="generalsettings">設定</string>
<string name="owner_fix_summary">システムã«/dev/tunã®æ‰€æœ‰è€…を設定ã—ã¾ã™ã€‚ã„ãã¤ã‹ã®CM9ã®ã‚¤ãƒ¡ãƒ¼ã‚¸ã§VPNService APIを動作ã•ã›ã‚‹ãŸã‚ã«å¿…è¦ã§ã™ã€‚root権é™ãŒå¿…è¦ã§ã™ã€‚</string>
<string name="owner_fix">/dev/tun ã®æ‰€æœ‰æ¨©ã‚’修正</string>
- <string name="generated_config_summary">生æˆã•ã‚ŒãŸ OpenVPN ã®æ§‹æˆãƒ•ã‚¡ã‚¤ãƒ«ã‚’表示ã—ã¾ã™</string>
+ <string name="generated_config_summary">生æˆã•ã‚ŒãŸ OpenVPN ã®è¨­å®šãƒ•ã‚¡ã‚¤ãƒ«ã‚’表示ã—ã¾ã™</string>
<string name="edit_profile_title">\"%s\"ã®ç·¨é›†</string>
- <string name="building_configration">構æˆä¸­ãƒ»ãƒ»ãƒ»</string>
+ <string name="building_configration">設定を構æˆä¸­ãƒ»ãƒ»ãƒ»</string>
<string name="netchange_summary">ã“ã®è¨­å®šã‚’有効ã«ã™ã‚‹ã¨ã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã®çŠ¶æ…‹å¤‰åŒ–時(WiFiï¼ãƒ¢ãƒã‚¤ãƒ«)ã«å†æŽ¥ç¶šã‚’è¡Œã„ã¾ã™ã€‚</string>
- <string name="netchange">ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯å¤‰åŒ–時ã«å†æŽ¥ç¶š</string>
+ <string name="netchange">ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯å¤‰åŒ–時ã«å†æŽ¥ç¶šã™ã‚‹</string>
<string name="netstatus">ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯çŠ¶æ…‹ï¼š %s</string>
<string name="extracahint">èªè¨¼å±€è¨¼æ˜Žæ›¸ï¼ˆCA cert)ã¯ã€é€šå¸¸ã€Android ã®ã‚­ãƒ¼ã‚¹ãƒˆã‚¢ã‹ã‚‰è¿”ã•ã‚Œã¾ã™ã€‚証明書ã®æ¤œè¨¼ã§ã‚¨ãƒ©ãƒ¼ã«ãªã‚‹å ´åˆã¯ã€å€‹åˆ¥ã®è¨¼æ˜Žæ›¸ã‚’指定ã—ã¾ã™ã€‚</string>
<string name="select_file">é¸æŠž</string>
<string name="keychain_nocacert">èªè¨¼å±€è¨¼æ˜Žæ›¸ï¼ˆCA Cert)ãŒAndroidã®ã‚­ãƒ¼ã‚¹ãƒˆã‚¢ã‹ã‚‰å–å¾—ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚èªè¨¼ã¯ãŠãらã失敗ã—ã¾ã™ã€‚</string>
<string name="show_log_summary">接続時ã«ãƒ­ã‚°ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã‚’表示ã—ã¾ã™ã€‚ログウィンドウã¯å¸¸ã«çŠ¶æ…‹é€šçŸ¥ã‹ã‚‰ã‚¢ã‚¯ã‚»ã‚¹ã§ãã¾ã™ã€‚</string>
- <string name="show_log_window">ログウィンドウを表示</string>
+ <string name="show_log_window">ログウィンドウを表示ã™ã‚‹</string>
<string name="mobile_info">%10$s %9$s ã¯æ¬¡ã®ç’°å¢ƒã§å®Ÿè¡Œä¸­ã§ã™ %3$s %1$s (%2$s), Android %6$s (%7$s) API %4$d, ABI %5$s, (%8$s)</string>
<string name="error_rsa_sign">Androidキーストアã«ä¿å­˜ã•ã‚ŒãŸã‚­ãƒ¼ %1$s: %2$sã®ç½²åエラーã§ã™</string>
<string name="faq_system_dialogs">VPN接続ã®è­¦å‘Šã¯ã€ã“ã®ã‚¢ãƒ—リケーションãŒVPNService APIを悪用ã—ã¦ã™ã¹ã¦ã®é€šä¿¡ã‚’å‚å—ã§ãã‚‹ã“ã¨ã‚’ã€ã‚·ã‚¹ãƒ†ãƒ ãŒã‚ãªãŸã«çŸ¥ã‚‰ã›ã‚‹ã‚‚ã®ã§ã™ã€‚\n
@@ -194,37 +195,38 @@ Androidã¯ã‚ãªãŸè‡ªèº«ã®å®‰å…¨æ€§ã®ãŸã‚ã«ã€ã“れらを迂回ã§ããªã
<string name="faq_system_dialogs_title">接続時ã®è­¦å‘Šã¨é€šçŸ¥éŸ³</string>
<string name="translationby">日本語翻訳 高橋正希@埼玉 &lt;tools@artin.nu&gt;</string>
<string name="ipdns">IPã¨DNS</string>
- <string name="basic">基本</string>
+ <string name="basic">基本設定</string>
<string name="routing">経路設定</string>
<string name="obscure">特殊ãªOpenVPNã®è¨­å®šã€‚通常ã¯å¿…è¦ã‚ã‚Šã¾ã›ã‚“</string>
- <string name="advanced">高度</string>
- <string name="export_config_title">ICSã®OpenVPN設定</string>
+ <string name="advanced">高度ãªè¨­å®š</string>
+ <string name="export_config_title">OpenVPN設定</string>
<string name="warn_no_dns">DNSサーãƒãƒ¼ãŒä½¿ç”¨ã•ã‚Œã¦ã„ã¾ã›ã‚“。åå‰è§£æ±ºãŒå‹•ä½œã—ãªã„å¯èƒ½æ€§ãŒã‚ã‚Šã¾ã™ã€‚カスタムDNSã®è¨­å®šã‚’検討ã—ã¦ãã ã•ã„。ã¾ãŸã€DNSãŒæŒ‡å®šã•ã‚Œã¦ã„ãªã„å ´åˆAndroidã¯ãƒ¢ãƒã‚¤ãƒ«å›žç·š/WiFi接続ã«è¨­å®šã—ãŸãƒ—ロキシを使用ã—続ã‘ã‚‹ã“ã¨ã«ã‚‚注æ„ã—ã¦ãã ã•ã„。</string>
<string name="dns_add_error">DNSサーム\"%1$s\" ã®è¿½åŠ ã«å¤±æ•—ã—ã¾ã—ãŸã€‚%2$sã«æ‹’å¦ã•ã‚Œã¾ã—ãŸã€‚</string>
<string name="ip_add_error">IPアドレス \"%1$s\"を設定ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚ システムã«æ‹’å¦ã•ã‚Œã¾ã—ãŸ: %2$s</string>
<string name="faq_howto">&lt;p&gt;動作確èªæ¸ˆã®è¨­å®šãƒ•ã‚¡ã‚¤ãƒ«ã‚’入手ã—ã¾ã™ã€‚(ã‚ãªãŸã®ã‚³ãƒ³ãƒ”ュータã§ãƒ†ã‚¹ãƒˆæ¸ˆã®ã‚‚ã®ã‚„ã€ãƒ—ロãƒã‚¤ãƒ€ã‚„会社ãªã©ã®çµ„ç¹”ã‹ã‚‰ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰ã—ãŸã‚‚ã®)&lt;/p&gt;
-&lt;p&gt;ã‚‚ã—ãã‚ŒãŒå˜ä¸€ã®ãƒ•ã‚¡ã‚¤ãƒ«ã§pemã‚„pks12ファイルを伴ã‚ãªã„ãªã‚‰ã€è‡ªåˆ†å®›ã®ãƒ¡ãƒ¼ãƒ«ã«æ·»ä»˜ã—ã¦é€ä»˜ã—ã€ãれを開ã„ã¦ãã ã•ã„。もã—複数ã®ãƒ•ã‚¡ã‚¤ãƒ«ã§æ§‹æˆã•ã‚Œã¦ã„ã‚‹ãªã‚‰SDカードã«æ ¼ç´ã—ã¦ãã ã•ã„。&lt;/p&gt;
+&lt;p&gt;ã‚‚ã—ãã‚ŒãŒå˜ä¸€ã®ãƒ•ã‚¡ã‚¤ãƒ«ã§PEMã‚„PKCS12ファイルを伴ã‚ãªã„ãªã‚‰ã€è‡ªåˆ†å®›ã®ãƒ¡ãƒ¼ãƒ«ã«æ·»ä»˜ã—ã¦é€ä»˜ã—ã€ãれを開ã„ã¦ãã ã•ã„。もã—複数ã®ãƒ•ã‚¡ã‚¤ãƒ«ã§æ§‹æˆã•ã‚Œã¦ã„ã‚‹ãªã‚‰SDカードã«æ ¼ç´ã—ã¦ãã ã•ã„。&lt;/p&gt;
&lt;p&gt;メールã®æ·»ä»˜ãƒ•ã‚¡ã‚¤ãƒ«ã‚’é–‹ãã€ã‚ã‚‹ã„ã¯VPNリストã®ãƒ•ã‚©ãƒ«ãƒ€ã‚¢ã‚¤ã‚³ãƒ³ã‚’クリックã—ã¦è¨­å®šãƒ•ã‚¡ã‚¤ãƒ«ã‚’インãƒãƒ¼ãƒˆã—ã¾ã™ã€‚&lt;/p&gt;
&lt;p&gt;ã‚‚ã—ファイルãŒè¶³ã‚Šãªã„ã¨ã„ã†ã‚¨ãƒ©ãƒ¼ãŒè¡¨ç¤ºã•ã‚ŒãŸã‚‰ã€è¶³ã‚Šãªã‹ã£ãŸãƒ•ã‚¡ã‚¤ãƒ«ã‚’SDカード上ã«æ ¼ç´ã—ã¦ãã ã•ã„。&lt;/p&gt;
&lt;p&gt;インãƒãƒ¼ãƒˆã•ã‚ŒãŸVPN設定をリストã«è¿½åŠ ã™ã‚‹ã«ã¯ã€ä¿å­˜ã‚¢ã‚¤ã‚³ãƒ³ã‚’クリックã—ã¾ã™ã€‚&lt;/p&gt;
&lt;p&gt;VPNを接続ã™ã‚‹ã«ã¯ã€VPNã®å称をクリックã—ã¾ã™ã€‚&lt;/p&gt;
-&lt;p&gt;ã‚‚ã—警告やエラーãŒãƒ­ã‚°ã‚¨ãƒ³ãƒˆãƒªã«è¡¨ç¤ºã•ã‚ŒãŸã‚‰ã€ãれらを調ã¹ã¦è§£æ±ºã—ã¦ãã ã•ã„。&lt;/p&gt;</string>
+&lt;p&gt;ã‚‚ã—警告やエラーãŒãƒ­ã‚°ã‚¨ãƒ³ãƒˆãƒªã«è¡¨ç¤ºã•ã‚ŒãŸã‚‰ã€ãれらを調ã¹ã¦è§£æ±ºã—ã¦ãã ã•ã„。&lt;/p&gt;
+</string>
<string name="faq_howto_title">クイックスタート</string>
<string name="setting_loadtun_summary">接続ã®è©¦è¡Œå‰ã«TUNデãƒã‚¤ã‚¹ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«(tun.ko)を読ã¿è¾¼ã¿ã¾ã™ã€‚デãƒã‚¤ã‚¹ã®root化ãŒå¿…è¦ã§ã™ã€‚</string>
<string name="setting_loadtun">TUNモジュールをロード</string>
<string name="importpkcs12fromconfig">PKCS12ã®è¨­å®šã‚’Androidã®ã‚­ãƒ¼ã‚¹ãƒˆã‚¢ã«ã‚¤ãƒ³ãƒãƒ¼ãƒˆã—ã¾ã™</string>
<string name="getproxy_error">プロキシ設定ã§ã‚¨ãƒ©ãƒ¼ï¼š %s</string>
<string name="using_proxy">プロキシを使用ã—ã¾ã™ %1$s %2$d</string>
- <string name="use_system_proxy">システムã®ãƒ—ロキシ設定を使用</string>
- <string name="use_system_proxy_summary">システム全体ã®æ§‹æˆã® HTTP/HTTPS プロキシ接続を使用ã—ã¾ã™ã€‚</string>
- <string name="donatewithpaypal">以下ã®URLより寄付ã„ãŸã ã‘ã¾ã™ã€‚ &lt;a href=\"https://www.paypal.com/cgi-bin/webscr?hosted_button_id=R2M6ZP9AF25LS&amp;amp;cmd=_s-xclick\"&gt;PayPalã§å¯„付&lt;/a&gt; </string>
- <string name="onbootrestartsummary">OpenVPNã¯ã‚·ã‚¹ãƒ†ãƒ ã®å†èµ·å‹•ã‚„シャットダウン時ã«å†æŽ¥ç¶šã™ã‚‹ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚ã“ã®ã‚ªãƒ—ションを使用ã™ã‚‹å‰ã«FAQã‚’ã”一読ãã ã•ã„。</string>
- <string name="onbootrestart">システム起動後ã«å†æŽ¥ç¶š</string>
+ <string name="use_system_proxy">システムã®ãƒ—ロキシ設定を使用ã™ã‚‹</string>
+ <string name="use_system_proxy_summary">接続ã«ã‚·ã‚¹ãƒ†ãƒ å…¨ä½“ã®æ§‹æˆã® HTTP/HTTPS プロキシを使用ã—ã¾ã™ã€‚</string>
+ <string name="onbootrestartsummary">有効ã«ã™ã‚‹ã¨ã€OpenVPNã¯ã‚·ã‚¹ãƒ†ãƒ ã®èµ·å‹•æ™‚ã«æŒ‡å®šã•ã‚ŒãŸVPNã«æŽ¥ç¶šã—ã¾ã™ã€‚Android 5.0よりå‰ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§ã“ã®ã‚ªãƒ—ションを使用ã™ã‚‹å ´åˆã¯ã€æŽ¥ç¶šæ™‚ã®è­¦å‘Šã«é–¢ã™ã‚‹ã€Œã‚ˆãã‚る質å•ã€ã‚’読んã§ãã ã•ã„。</string>
+ <string name="onbootrestart">システム起動時ã«æŽ¥ç¶š</string>
<string name="ignore">無視</string>
<string name="restart">å†èµ·å‹•</string>
<string name="restart_vpn_after_change">設定ã®å¤‰æ›´ã¯VPNã®å†èµ·å‹•å¾Œã«å映ã•ã‚Œã¾ã™ã€‚VPNã‚’(å†)èµ·å‹•ã—ã¾ã™ã‹ï¼Ÿ</string>
<string name="configuration_changed">設定ãŒå¤‰æ›´ã•ã‚Œã¾ã—ãŸ</string>
- <string name="log_no_last_vpn">編集ã•ã‚ŒãŸãŸã‚ã€æœ€å¾Œã«æŽ¥ç¶šã—ãŸãƒ—ロファイルを確èªã§ãã¾ã›ã‚“ã§ã—ãŸ</string>
+ <string name="log_no_last_vpn">編集ã•ã‚ŒãŸãŸã‚ã€æœ€å¾Œã«æŽ¥ç¶šã—ãŸãƒ—ロファイルを確èªã§ãã¾ã›ã‚“ã§ã—ãŸ
+</string>
<string name="faq_duplicate_notification_title">é‡è¤‡ã—ãŸé€šçŸ¥</string>
<string name="faq_duplicate_notification">ã‚‚ã—AndroidãŒãƒ¡ãƒ¢ãƒªä¸è¶³ã«é™¥ã£ãŸå ´åˆã€ãã®æ™‚点ã§å¿…è¦ã¨ã•ã‚Œãªã„アプリケーションやサービスã¯ã‚¢ã‚¯ãƒ†ã‚£ãƒ–ãªãƒ¡ãƒ¢ãƒªã‹ã‚‰æŽ’除ã•ã‚Œã¾ã™ã€‚
ã“ã®å‡¦ç†ã«ä¼´ã„ã€VPN接続ã¯çµ‚了ã•ã‚Œã¾ã™ã€‚
@@ -235,7 +237,7 @@ OpenVPNã®æŽ¥ç¶šã‚’ä¿è¨¼ã™ã‚‹ãŸã‚ã«ã¯ã€ã‚¢ãƒ—リケーションを高ã„å
<string name="no_vpn_profiles_defined">VPNã®ãƒ—ロファイルãŒå®šç¾©ã•ã‚Œã¦ã„ã¾ã›ã‚“</string>
<string name="add_new_vpn_hint">æ–°ã—ã„VPNを追加ã™ã‚‹ã«ã¯ &lt;img src=\"ic_menu_add\"/&gt; ã®ã‚¢ã‚¤ã‚³ãƒ³ã‚’使用ã—ã¾ã™</string>
<string name="vpn_import_hint">SDカードã‹ã‚‰ãƒ—ロファイル(.ovpnã‚„.conf)をインãƒãƒ¼ãƒˆã™ã‚‹ã«ã¯ &lt;img src=\"ic_menu_archive\"/&gt; ã®ã‚¢ã‚¤ã‚³ãƒ³ã‚’使用ã—ã¾ã™ã€‚</string>
- <string name="faq_hint">FAQを確èªã—ã¦ãã ã•ã„。クイックスタートガイドãŒã‚ã‚Šã¾ã™ã€‚</string>
+ <string name="faq_hint">「よãã‚る質å•ã€ã‚’確èªã—ã¦ãã ã•ã„。クイックスタートガイドãŒã‚ã‚Šã¾ã™ã€‚</string>
<string name="faq_routing_title">経路情報ï¼ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ãƒ¼ã‚¹è¨­å®š</string>
<string name="faq_routing">経路ã¨ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ãƒ¼ã‚¹ã®è¨­å®šã¯å¾“æ¥ã®ifconfig/routeコマンドã§ã¯ãªãVPNService APIを使用ã—ã¦è¡Œã‚ã‚Œã¾ã™ã€‚
ãã®çµæžœã€çµŒè·¯ã®è¨­å®šã¯ã»ã‹ã®OSã¨ã¯ç•°ãªã‚Šã¾ã™ã€‚\n
@@ -253,16 +255,16 @@ VPNService APIã¯VPNを経由ã™ã¹ãã§ãªã„ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã®æŒ‡å®šã‚’許
ã“ã£ãã‚Š:
Android 4.4以上ã¯ãƒãƒªã‚·ãƒ¼ãƒ«ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ã‚’使用ã—ã¾ã™ã€‚route/ifconfigコマンドã¯è¨­å®šã•ã‚ŒãŸçµŒè·¯ã‚’表示ã—ã¾ã›ã‚“。代ã‚ã‚Šã«ip ruleã¾ãŸã¯iptables -t mangle -Lを使用ã—ã¾ã™ã€‚</string>
- <string name="persisttun_summary">OpenVPNãŒå†æŽ¥ç¶šè©¦è¡Œä¸­ã¯ã€VPNãªã—状態を報告ã—ã¾ã›ã‚“。</string>
+ <string name="persisttun_summary">OpenVPNãŒå†æŽ¥ç¶šè©¦è¡Œä¸­ã¯ã€VPN接続ãªã—ã¨ã—ã¦å ±å‘Šã—ã¾ã›ã‚“。</string>
<string name="persistent_tun_title">永続的ãªTUNデãƒã‚¤ã‚¹</string>
- <string name="openvpn_log">OpenVPN ã®ãƒ­ã‚°</string>
- <string name="import_config">OpenVPN ã®æ§‹æˆã®ã‚¤ãƒ³ãƒãƒ¼ãƒˆ</string>
+ <string name="openvpn_log">OpenVPNログ</string>
+ <string name="import_config">OpenVPN ã®è¨­å®šã®ã‚¤ãƒ³ãƒãƒ¼ãƒˆ</string>
<string name="battery_consumption_title">ãƒãƒƒãƒ†ãƒªãƒ¼æ¶ˆè²»é‡</string>
<string name="baterry_consumption">個人的ãªæ¤œè¨¼ã§ã¯ã€OpenVPNãŒãƒãƒƒãƒ†ãƒªã‚’多ã消費ã™ã‚‹ä¸»ãªåŽŸå› ã¯keepaliveパケットã§ã™ã€‚
大部分ã®OpenVPNサーãƒã¯\'keepalive 10 60\'ã®ã‚ˆã†ãªè¨­å®šã‚’æŒã£ã¦ãŠã‚Šã€ã“ã‚Œã¯10秒ã”ã¨ã«ã‚µãƒ¼ãƒã¨ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã§ç›¸äº’ã«keepaliveパケットをé€ä¿¡ã—ã‚ã†ã“ã¨ã‚’æ„味ã—ã¾ã™ã€‚ &lt;p&gt;ã“れらã®ãƒ‘ケットã¯å°ã•ã多ãã®å¸¯åŸŸã¯ä½¿ç”¨ã—ã¾ã›ã‚“ãŒã€ãƒ¢ãƒã‚¤ãƒ«å›žç·šæ©Ÿèƒ½ã‚’常ã«ç¨¼å‹•ã•ã›ç¶šã‘電力消費を増大ã•ã›ã¾ã™ã€‚ &lt;p&gt;
(å‚考 &lt;a href=\"http://developer.android.com/training/efficient-downloads/efficient-network-access.html#RadioStateMachine\"&gt;The Radio State Machine | Android Developers&lt;/a&gt;)&lt;p&gt;ã“ã®keepalive設定ã¯ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆå´ã‹ã‚‰ã¯å¤‰æ›´ã§ãã¾ã›ã‚“。OpenVPNã®ã‚·ã‚¹ãƒ†ãƒ ç®¡ç†è€…ã®ã¿ãŒå¤‰æ›´å¯èƒ½ã§ã™ã€‚ &lt;p&gt; 残念ãªã“ã¨ã«ã€60秒より大ããªé–“éš”ã®UDP keepaliveã¯ã„ãã¤ã‹ã®NATゲートウェイã«ãŠã„ã¦ã¯æŽ¥ç¶šçŠ¶æ…‹ãŒç¶­æŒã§ããšã€ãれより短ã„時間ã§ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆã—ã¾ã™(検証ã§ã¯60秒)。 TCP keepaliveã¨é•·ã„タイムアウト時間ã®ä½¿ç”¨ã¯ã€å‹•ä½œã¯ã—ã¾ã™ãŒTCP over TCPå•é¡Œã‚’引ãèµ·ã“ã—ã¾ã™ã€‚(詳細ã¯&lt;a href=\"http://sites.inka.de/bigred/devel/tcp-tcp.html\"&gt;ãªãœTCP over TCPã¯æ‚ªã„アイディアãªã®ã‹&lt;/a&gt;ã‚’å‚ç…§)</string>
<string name="faq_tethering">Androidã®ãƒ†ã‚¶ãƒªãƒ³ã‚°æ©Ÿèƒ½(WiFi, USB, Bluetooth経由)ã¨VPNService API(ã“ã®ãƒ—ログラムã‹ã‚‰ä½¿ç”¨ã™ã‚‹æ©Ÿèƒ½)ã¯åŒæ™‚ã«åˆ©ç”¨ã§ãã¾ã›ã‚“。詳細ã«ã¤ã„ã¦ã¯&lt;a href=\"http://code.google.com/p/ics-openvpn/issues/detail?id=34\"&gt;issue #34&lt;/a&gt;ã‚’å‚ç…§</string>
- <string name="vpn_tethering_title">VPN ã¨ãƒ†ã‚¶ãƒªãƒ³ã‚°</string>
+ <string name="vpn_tethering_title">VPNã¨ãƒ†ã‚¶ãƒªãƒ³ã‚°</string>
<string name="connection_retries">接続ã®å†è©¦è¡Œå›žæ•°</string>
<string name="reconnection_settings">å†æŽ¥ç¶šã®è¨­å®š</string>
<string name="connectretrymessage">å†æŽ¥ç¶šã‚’試行ã™ã‚‹éš›ã®é–“éš”(秒)</string>
@@ -273,22 +275,22 @@ Android 4.4以上ã¯ãƒãƒªã‚·ãƒ¼ãƒ«ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ã‚’使用ã—ã¾ã™ã€‚route/ifc
<string name="notifcation_title">OpenVPN - %s</string>
<string name="session_ipv4string">%1$s - %2$s</string>
<string name="session_ipv6string">%1$s - %3$s, %2$s</string>
- <string name="state_connecting">接続中</string>
- <string name="state_wait">サーãƒãƒ¼ã®å¿œç­”ã‚’å¾…ã£ã¦ã„ã¾ã™ã€‚</string>
+ <string name="state_connecting">接続ã—ã¦ã„ã¾ã™</string>
+ <string name="state_wait">サーãƒãƒ¼ã®å¿œç­”ã‚’å¾…ã£ã¦ã„ã¾ã™</string>
<string name="state_auth">èªè¨¼ä¸­</string>
- <string name="state_get_config">クライアントã®æ§‹æˆã‚’å–得中</string>
+ <string name="state_get_config">クライアントã®è¨­å®šã‚’å–得中</string>
<string name="state_assign_ip">IPアドレスを割り当ã¦ä¸­</string>
<string name="state_add_routes">経路を追加中</string>
<string name="state_connected">接続ã—ã¾ã—ãŸ</string>
<string name="state_disconnected">切断</string>
- <string name="state_reconnecting">å†æŽ¥ç¶šä¸­</string>
+ <string name="state_reconnecting">å†æŽ¥ç¶šã—ã¦ã„ã¾ã™</string>
<string name="state_exiting">終了中</string>
<string name="state_noprocess">åœæ­¢ä¸­</string>
<string name="state_resolve">ホストåを解決中</string>
<string name="state_tcp_connect">接続中(TCP)</string>
<string name="state_auth_failed">èªè¨¼ã«å¤±æ•—ã—ã¾ã—ãŸ</string>
<string name="state_nonetwork">使用å¯èƒ½ãªãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚’待機中</string>
- <string name="statusline_bytecount">↓%2$s/s %1$s - ↑%4$s/s %3$s</string>
+ <string name="statusline_bytecount">↓%2$s %1$s - ↑%4$s %3$s</string>
<string name="notifcation_title_notconnect">未接続</string>
<string name="start_vpn_title">VPN %sã«æŽ¥ç¶šä¸­</string>
<string name="start_vpn_ticker">VPN %sã«æŽ¥ç¶šä¸­</string>
@@ -296,19 +298,19 @@ Android 4.4以上ã¯ãƒãƒªã‚·ãƒ¼ãƒ«ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ã‚’使用ã—ã¾ã™ã€‚route/ifc
<string name="encryption_cipher">æš—å·åŒ–æ–¹å¼</string>
<string name="packet_auth">パケットèªè¨¼</string>
<string name="auth_dialog_title">パケットèªè¨¼æ–¹å¼ã‚’入力ã—ã¦ãã ã•ã„。</string>
- <string name="built_by">%s ã«ã‚ˆã‚Šãƒ“ルド</string>
+ <string name="built_by">%s ã«ã‚ˆã‚Šãƒ“ルドã•ã‚Œã¾ã—ãŸ</string>
<string name="debug_build">デãƒãƒƒã‚° ビルド</string>
<string name="official_build">æ­£å¼ãƒ“ルド</string>
<string name="make_selection_inline">プロファイルã«ã‚³ãƒ”ー</string>
<string name="crashdump">クラッシュ ダンプ</string>
<string name="add">追加</string>
- <string name="send_config">構æˆãƒ•ã‚¡ã‚¤ãƒ«ã‚’é€ä¿¡</string>
+ <string name="send_config">設定ファイルをé€ä¿¡</string>
<string name="complete_dn">完全ãªè­˜åˆ¥å(DN)</string>
<string name="remotetlsnote">ã‚ãªãŸãŒã‚¤ãƒ³ãƒãƒ¼ãƒˆã—ãŸè¨­å®šã¯ç•°ãªã‚‹DNフォーマットを使用ã—ãŸéžæŽ¨å¥¨ã®tls-remoteオプションを使用ã—ã¦ã„ã¾ã™ã€‚</string>
<string name="rdn">相対識別å(RDNï¼å…±é€šå)</string>
<string name="rdn_prefix">相対識別å(RDN)プリフィクス</string>
<string name="tls_remote_deprecated"> tls-remote (éžæŽ¨å¥¨)</string>
- <string name="help_translate">翻訳作業を手ä¼ã£ã¦ã„ãŸã ã‘ã‚‹æ–¹ã¯æ¬¡ã®URL㸠http://crowdin.net/project/ics-openvpn/invite</string>
+ <string name="help_translate">次ã®URLã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã¨ã€ç¿»è¨³ä½œæ¥­ã‚’手ä¼ã†ã“ã¨ãŒã§ãã¾ã™ http://crowdin.net/project/ics-openvpn/invite</string>
<string name="prompt">%1$s 㯠%2$s を制御ã—よã†ã¨ã—ã¦ã„ã¾ã™ã€‚</string>
<string name="remote_warning">ã“ã®ã¾ã¾é€²ã‚€ã¨ã€ã‚ãªãŸã¯OpenVPN for Androidã®å®Œå…¨ãªåˆ¶å¾¡ã¨ã™ã¹ã¦ã®é€šä¿¡ã‚’å‚å—ã™ã‚‹æ¨©é™ã‚’アプリケーションã«å¯¾ã—与ãˆã‚‹ã“ã¨ã«ãªã‚Šã¾ã™ã€‚<b>アプリケーションãŒä¿¡é ¼ã§ããªã„é™ã‚Šã€æ‰¿è«¾ã—ãªã„ã§ãã ã•ã„。</b>ã•ã‚‚ãªã„ã¨ã€ã‚ãªãŸã®ãƒ‡ãƒ¼ã‚¿ãŒãƒžãƒ«ã‚¦ã‚§ã‚¢ã«ã‚ˆã‚Šæ¼æ´©ã•ã›ã‚‰ã‚Œã‚‹å±é™ºãŒã‚ã‚Šã¾ã™ã€‚</string>
<string name="remote_trust">ç§ã¯ã“ã®ã‚¢ãƒ—リケーションを信頼ã—ã¾ã™</string>
@@ -316,12 +318,12 @@ Android 4.4以上ã¯ãƒãƒªã‚·ãƒ¼ãƒ«ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ã‚’使用ã—ã¾ã™ã€‚route/ifc
<string name="allowed_apps">許å¯ã‚¢ãƒ—リ: %s</string>
<string name="clearappsdialog">許å¯ã‚¢ãƒ—リã®ä¸€è¦§ã‚’クリアã—ã¾ã™ã‹?\nç¾åœ¨ã®è¨±å¯ã‚¢ãƒ—リ一覧:\n\n%s</string>
<string name="screenoff_summary">スクリーンãŒã‚ªãƒ•ã‹ã¤60秒ã§64kB以下ã®ãƒ‡ãƒ¼ã‚¿è»¢é€é‡ã®å ´åˆã€VPN通信を中断ã—ã¾ã™ã€‚「永続的ãªTUNã€è¨­å®šãŒæœ‰åŠ¹ãªå ´åˆã€VPN接続ãŒä¸­æ–­ã•ã‚Œã‚‹ã¨é€šä¿¡ãŒã§ããªããªã‚Šã¾ã™ã€‚「永続的ãªTUNã€ã‚’無効ã«ã™ã‚‹ã¨ã€VPNã«ã‚ˆã‚‹æŽ¥ç¶šä¿è­·ã¯è¡Œã‚ã‚Œãªããªã‚Šã¾ã™ã€‚</string>
- <string name="screenoff_title">ç”»é¢ã‚ªãƒ•å¾Œã«VPN接続を中断</string>
+ <string name="screenoff_title">ç”»é¢ã‚ªãƒ•å¾Œã«VPN接続を中断ã™ã‚‹</string>
<string name="screenoff_pause">ç”»é¢ã‚ªãƒ•ã«ã‚ˆã‚ŠæŽ¥ç¶šã‚’中断ã—ã¦ã„ã¾ã™: %2$s秒ã§%1$s 以下 </string>
<string name="screen_nopersistenttun">警告: ã“ã®VPN接続ã«ã¯æ°¸ç¶šçš„ãªTUNデãƒã‚¤ã‚¹ãŒè¨­å®šã•ã‚Œã¦ã„ã¾ã›ã‚“。スクリーンオフ後ã®é€šä¿¡ã¯é€šå¸¸ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒãƒƒãƒˆæŽ¥ç¶šã‚’使用ã—ã¾ã™ã€‚</string>
<string name="save_password">パスワードをä¿å­˜</string>
<string name="pauseVPN">VPNを中断</string>
- <string name="resumevpn">VPNå†é–‹</string>
+ <string name="resumevpn">VPNã‚’å†é–‹</string>
<string name="state_userpause">ユーザã«ã‚ˆã£ã¦VPNã®ä¸­æ–­ãŒè¦æ±‚ã•ã‚Œã¾ã—ãŸ</string>
<string name="state_screenoff">VPN中断中 - ç”»é¢ã‚ªãƒ•</string>
<string name="device_specific">デãƒã‚¤ã‚¹å›ºæœ‰ã®ãƒãƒƒã‚¯</string>
@@ -352,7 +354,7 @@ Android 4.4以上ã¯ãƒãƒªã‚·ãƒ¼ãƒ«ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ã‚’使用ã—ã¾ã™ã€‚route/ifc
<string name="full_licenses">完全ãªãƒ©ã‚¤ã‚»ãƒ³ã‚¹å‘ŠçŸ¥</string>
<string name="blocklocal_summary">ローカルインターフェイスã«ç›´æŽ¥æŽ¥ç¶šã•ã‚Œã¦ã„ã‚‹ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã¯VPNを経由ã—ã¾ã›ã‚“。
ã“ã®ã‚ªãƒ—ションを外ã™ã¨ãƒ­ãƒ¼ã‚«ãƒ«ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯å®›ã®ã™ã¹ã¦ã®é€šä¿¡ã‚’VPNã«ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆã—ã¾ã™ã€‚</string>
- <string name="blocklocal_title">ローカルã¯VPNを経由ã—ãªã„</string>
+ <string name="blocklocal_title">ローカルãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã¯VPNを経由ã—ãªã„</string>
<string name="userpw_file">ユーザーå/パスワードファイル</string>
<string name="imported_from_file">[インãƒãƒ¼ãƒˆå…ƒ: %s]</string>
<string name="files_missing_hint">ã„ãã¤ã‹ã®ãƒ•ã‚¡ã‚¤ãƒ«ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚プロファイルをインãƒãƒ¼ãƒˆã™ã‚‹ãƒ•ã‚¡ã‚¤ãƒ«ã‚’é¸æŠžã—ã¦ãã ã•ã„:</string>
@@ -360,6 +362,7 @@ Android 4.4以上ã¯ãƒãƒªã‚·ãƒ¼ãƒ«ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ã‚’使用ã—ã¾ã™ã€‚route/ifc
<string name="import_log">インãƒãƒ¼ãƒˆãƒ­ã‚°ï¼š</string>
<string name="ip_looks_like_subnet">VPNトãƒãƒ­ã‚¸ \"%3$s\" ãŒè¨­å®šã•ã‚Œã¦ã„ã¾ã™ãŒ ifconfig %1$s %2$s ã¯IPアドレスã¨ãƒãƒƒãƒˆãƒžã‚¹ã‚¯ã®ã‚ˆã†ã«è¦‹ãˆã¾ã™ã€‚\"サブãƒãƒƒãƒˆ\"トãƒãƒ­ã‚¸ã‚’仮定ã—ã¾ã™ã€‚</string>
<string name="mssfix_invalid_value">MSSã«æŒ‡å®šã§ãる値ã¯0~9000ã®æ•´æ•°ã§ã™</string>
+ <string name="mtu_invalid_value">MTUã«æŒ‡å®šã§ãる値ã¯64~9000ã®æ•´æ•°ã§ã™</string>
<string name="mssfix_value_dialog">OpenVPNãŒã‚«ãƒ—セル化ã—ãŸã‚ã¨ã®ãƒ‘ケットサイズã§åˆ¶é™ã™ã‚‹ã‚ˆã†ãƒˆãƒ³ãƒãƒ«è¶Šã—ã®TCPセッションã«é€šçŸ¥ã—ã¾ã™ã€‚çµæžœã€OpenVPNãŒç›¸æ‰‹ã«é€ä¿¡ã™ã‚‹UDPパケットサイズã¯ã“ã®ãƒã‚¤ãƒˆæ•°ã‚’超ãˆãªããªã‚Šã¾ã™ã€‚(デフォルトã¯1450)</string>
<string name="mssfix_checkbox">TCPペイロードã®MSSを指定ã™ã‚‹</string>
<string name="mssfix_dialogtitle">TCPペイロードã®MSSを設定</string>
@@ -399,8 +402,8 @@ Android 4.4以上ã¯ãƒãƒªã‚·ãƒ¼ãƒ«ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ã‚’使用ã—ã¾ã™ã€‚route/ifc
<string name="ab_secondary_users">VPNã¯ã»ã‹ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«å¯¾ã—ã¦ã¯å‹•ä½œã—ã¾ã›ã‚“。</string>
<string name="ab_kitkat_reconnect">"複数ã®ãƒ¦ãƒ¼ã‚¶ãŒã€VPNアプリ使用中ã«ãƒ¢ãƒã‚¤ãƒ«æŽ¥ç¶šãŒé »ç¹ã«æ¬ è½ã™ã‚‹ã¨å ±å‘Šã—ã¦ã„ã¾ã™ã€‚ã“ã®æŒ™å‹•ã¯ç‰¹å®šã®ãƒ—ロãƒã‚¤ãƒ€ï¼ãƒ‡ãƒã‚¤ã‚¹ã®çµ„ã¿åˆã‚ã›ã§ã®ã¿ç™ºç”Ÿã™ã‚‹ã¨æ€ã‚ã‚Œã€ã“ã‚Œã¾ã§ã®ã¨ã“ã‚ã“ã®ãƒã‚°ã«å¯¾ã™ã‚‹åŽŸå› ã‚„回é¿ç­–ã¯ç‰¹å®šã•ã‚Œã¦ã„ã¾ã›ã‚“。"</string>
<string name="ab_vpn_reachability_44">VPNãªã—ã§ã‚‚到é”å¯èƒ½ãªãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã«ã®ã¿VPN経由ã§åˆ°é”ã§ãã‚‹å ´åˆã€‚IPv6 VPN ã¯å‹•ä½œã—ã¾ã›ã‚“。</string>
- <string name="ab_only_cidr_title">éžCIDRルート</string>
- <string name="ab_proxy_title">VPNã®ãƒ—ロキシ動作</string>
+ <string name="ab_only_cidr_title">CIDRå½¢å¼ã§ã¯ãªã„経路</string>
+ <string name="ab_proxy_title">VPNã¨ãƒ—ロキシã®æŒ™å‹•</string>
<string name="ab_lollipop_reinstall_title">VPNアプリをå†ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã™ã‚‹å ´åˆ</string>
<string name="version_upto">%sãŠã‚ˆã³ãれ以å‰</string>
<string name="copy_of_profile">%sã®ã‚³ãƒ”ー</string>
@@ -409,7 +412,7 @@ Android 4.4以上ã¯ãƒãƒªã‚·ãƒ¼ãƒ«ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ã‚’使用ã—ã¾ã™ã€‚route/ifc
<string name="ab_secondary_users_title">タブレットã®è¤‡æ•°ãƒ¦ãƒ¼ã‚¶ãƒ¼</string>
<string name="custom_connection_options_warng">カスタム指定ã®æŽ¥ç¶šã‚ªãƒ—ションを設定ã—ã¾ã™ã€‚æ…Žé‡ã«åˆ©ç”¨ã—ã¦ãã ã•ã„</string>
<string name="custom_connection_options">カスタムオプション</string>
- <string name="remove_connection_entry">接続エントリを削除ã—ã¾ã™</string>
+ <string name="remove_connection_entry">接続先設定を削除ã—ã¾ã™</string>
<string name="ab_kitkat_reconnect_title">モãƒã‚¤ãƒ«ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãŒçªç™ºçš„ã«åˆ‡æ–­ã•ã‚Œã‚‹</string>
<string name="ab_vpn_reachability_44_title">リモートãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã«åˆ°é”ã§ãã¾ã›ã‚“</string>
<string name="ab_persist_tun_title">æŒç¶šçš„ãªTUNモード</string>
@@ -429,13 +432,53 @@ Android 4.4以上ã¯ãƒãƒªã‚·ãƒ¼ãƒ«ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ã‚’使用ã—ã¾ã™ã€‚route/ifc
<string name="protocol">プロトコル</string>
<string name="enabled_connection_entry">有効</string>
<string name="abi_mismatch">Preferred native ABI precedence of this device (%1$s) and ABI reported by native libraries (%2$s) mismatch</string>
- <string name="months_left">残り %dヵ月</string>
- <string name="days_left">残り %d日</string>
- <string name="hours_left">残り %d時間</string>
<string name="permission_revoked">OSã«ã‚ˆã‚ŠVPNã®æ¨©é™ãŒå–り消ã•ã‚Œã¾ã—㟠(ã»ã‹ã®VPNプログラムãŒå‹•ä½œã—ãŸå ´åˆãªã©)。VPNã‚’åœæ­¢ã—ã¾ã™</string>
<string name="pushpeerinfo">ピア情報をé€ä¿¡ã™ã‚‹</string>
- <string name="pushpeerinfosummary">追加ã®æƒ…報をサーãƒã«é€ä¿¡ã™ã‚‹ (SSLã‚„Androidã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ç­‰)</string>
- <string name="pw_request_dialog_title">%1$s </string>
+ <string name="pushpeerinfosummary">追加ã®æƒ…報をサーãƒã«é€ä¿¡ã—ã¾ã™ã€‚ (SSLã‚„Androidã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ç­‰)</string>
+ <string name="pw_request_dialog_title">%1$s ã®ãƒ‘スワード</string>
<string name="pw_request_dialog_prompt">プロファイル %1$s ã®ãƒ‘スワードを入力ã—ã¦ãã ã•ã„</string>
<string name="menu_use_inline_data">インラインデータを使用ã™ã‚‹</string>
+ <string name="export_config_chooser_title">設定ファイルã®ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆ</string>
+ <string name="missing_tlsauth">tls-authファイルãŒä¸è¶³ã—ã¦ã„ã¾ã™</string>
+ <string name="missing_certificates">ユーザ証明書ã¾ãŸã¯ãƒ¦ãƒ¼ã‚¶è¨¼æ˜Žæ›¸ã‚­ãƒ¼ã®ãƒ•ã‚¡ã‚¤ãƒ«ãŒä¸è¶³ã—ã¦ã„ã¾ã™</string>
+ <string name="missing_ca_certificate">CA証明書ãŒä¸è¶³ã—ã¦ã„ã¾ã™</string>
+ <string name="crl_title">証明書ã®å¤±åŠ¹ãƒªã‚¹ãƒˆ(オプション)</string>
+ <string name="reread_log">ログキャッシュã‹ã‚‰ãƒ­ã‚°(%d個)ã‚’å†èª­ã¿è¾¼ã¿ã—ã¾ã—ãŸ</string>
+ <string name="samsung_broken">サムスン製ã®æºå¸¯é›»è©±ã¯æœ€ã‚‚販売ã•ã‚Œã¦ã„ã‚‹Androidæ©Ÿã§ã™ãŒã€ã‚µãƒ ã‚¹ãƒ³è£½ã®ãƒ•ã‚¡ãƒ¼ãƒ ã‚¦ã‚§ã‚¢ã¯æœ€ã‚‚ãƒã‚°ã‚’引ãèµ·ã“ã™Androidファームウェアã§ã™ã€‚ã“れらã®ãƒ‡ãƒã‚¤ã‚¹ã®ãƒã‚°ã¯VPNæ“作ã«é™ã£ãŸã“ã¨ã§ã¯ã‚ã‚Šã¾ã›ã‚“ãŒã€ãれらã®å¤šãã¯å›žé¿å¯èƒ½ã§ã™ã€‚以下ã«ã„ãã¤ã‹ã®ãƒã‚°ã‚’記載ã—ã¾ã™ã€‚\n\nDNSサーãƒãŒVPNã®ç¯„囲内ã«ãªã„ã¨DNSãŒå‹•ä½œã—ã¾ã›ã‚“。\n\nサムスン製Android 5.0ã®å¤šãã®æ©Ÿç¨®ã§ã¯ã€ã‚¢ãƒ—リã®è¨±å¯ï¼ä¸è¨±å¯æ©Ÿèƒ½ãŒå‹•ä½œã—ã¾ã›ã‚“。\nサムスン製Android 6.0機種ã®VPNã¯ã€VPNアプリをçœé›»åŠ›æ©Ÿèƒ½ã‹ã‚‰é™¤å¤–ã—ãªã„é™ã‚Šå‹•ä½œã—ãªã„ã“ã¨ãŒå ±å‘Šã•ã‚Œã¦ã„ã¾ã™ã€‚</string>
+ <string name="samsung_broken_title">サムスン製ã®æ©Ÿç¨®</string>
+ <string name="novpn_selected">VPNãŒé¸æŠžã•ã‚Œã¦ã„ã¾ã›ã‚“</string>
+ <string name="defaultvpn">既定ã®VPN</string>
+ <string name="defaultvpnsummary">既定ã®VPNãŒå¿…è¦ãªå ´é¢ã§ä½¿ç”¨ã•ã‚Œã¾ã™ã€‚ç¾åœ¨ã®ã¨ã“ã‚ã€èµ·å‹•æ™‚ã€å¸¸æ™‚接続ã€ã‚¯ã‚¤ãƒƒã‚¯è¨­å®šã‚¿ã‚¤ãƒ«ã§ä½¿ç”¨ã•ã‚Œã¾ã™ã€‚</string>
+ <string name="vpnselected">ç¾åœ¨é¸æŠžã•ã‚Œã¦ã„ã‚‹VPN: \'%s\'</string>
+ <string name="reconnect">å†æŽ¥ç¶š</string>
+ <string name="qs_title">VPNを切り替ãˆã‚‹</string>
+ <string name="qs_connect">%sã«æŽ¥ç¶š</string>
+ <string name="qs_disconnect">%sを切断</string>
+ <string name="connectretrymaxmessage">最大接続試行間隔を入力ã—ã¾ã™ã€‚OpenVPNã¯æŽ¥ç¶šã«å¤±æ•—ã™ã‚‹ã¨ã“ã®å€¤ã¾ã§å°‘ã—ãšã¤å¾…機時間を増やã—ã¦ã„ãã¾ã™ã€‚デフォルトã¯300秒ã§ã™ã€‚</string>
+ <string name="connectretrymaxtitle">接続試行ã®æœ€å¤§é–“éš”</string>
+ <string name="state_waitconnectretry">接続試行ã®é–“éš”ã¨ã—ã¦%s秒を待ã£ã¦ã„ã¾ã™</string>
+ <string name="nought_alwayson_warning"><![CDATA[VPNã®ç¢ºèªãƒ€ã‚¤ã‚¢ãƒ­ã‚°ãŒè¡¨ç¤ºã•ã‚Œãªã„å ´åˆã€ã»ã‹ã®ã‚¢ãƒ—リã®ãŸã‚ã«ã€Œå¸¸æ™‚VPN接続ã€ãŒæœ‰åŠ¹ã«ãªã£ã¦ã„ã‚‹ã‹ã‚‚ã—ã‚Œã¾ã›ã‚“。ã“ã®å ´åˆã€ãã®ã‚¢ãƒ—リã ã‘ãŒVPNã«æŽ¥ç¶šã§ãã¾ã™ã€‚「設定ã€-「ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã€-「もã£ã¨è¦‹ã‚‹ã€-「VPNã€ã‚’確èªã—ã¦ãã ã•ã„。]]></string>
+ <string name="management_socket_closed">OpenVPNã¸ã®æŽ¥ç¶šãŒé–‰ã˜ã‚‰ã‚Œã¾ã—㟠(%s)</string>
+ <string name="change_sorting">並ã¹æ›¿ãˆã®å¤‰æ›´</string>
+ <string name="sort">並ã¹æ›¿ãˆ</string>
+ <string name="sorted_lru">プロファイルを最近使ã£ãŸé †ã«ä¸¦ã¹æ›¿ãˆã¾ã—ãŸ</string>
+ <string name="sorted_az">プロファイルをåå‰é †ã«ä¸¦ã¹æ›¿ãˆã¾ã—ãŸ</string>
+ <string name="deprecated_tls_remote">設定ã¯tls-remoteを使用ã—ã¦ã„ã¾ã™(2.3ã§éžæŽ¨å¥¨ã€2.4ã§å‰Šé™¤ã•ã‚Œã¾ã—ãŸ)</string>
+ <string name="auth_failed_behaviour">èªè¨¼å¤±æ•—時ã®æŒ™å‹•</string>
+ <string name="graph">グラフ</string>
+ <string name="use_logarithmic_scale">対数スケールを使用ã™ã‚‹</string>
+ <string name="notenoughdata">データãŒä¸å分ã§ã™</string>
+ <string name="avghour">毎時間平å‡</string>
+ <string name="avgmin">毎分平å‡</string>
+ <string name="last5minutes">éŽåŽ»5分間</string>
+ <string name="data_in">In</string>
+ <string name="data_out">Out</string>
+ <string name="bits_per_second">%.0f bit/s</string>
+ <string name="kbits_per_second">%.1f kbit/s</string>
+ <string name="mbits_per_second">%.1f Mbit/s</string>
+ <string name="gbits_per_second">%.1f Gbit/s</string>
+ <string name="volume_byte">%.0f B</string>
+ <string name="volume_kbyte">%.1f kB</string>
+ <string name="volume_mbyte">%.1f MB</string>
+ <string name="volume_gbyte">%.1f GB</string>
</resources>
diff --git a/app/src/main/res/values-ko/plurals-icsopenvpn.xml b/app/src/main/res/values-ko/plurals-icsopenvpn.xml
new file mode 100755
index 00000000..70489fbc
--- /dev/null
+++ b/app/src/main/res/values-ko/plurals-icsopenvpn.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<resources></resources>
diff --git a/app/src/main/res/values-ko/strings-icsopenvpn.xml b/app/src/main/res/values-ko/strings-icsopenvpn.xml
index 640ee0f1..2ebdf272 100755
--- a/app/src/main/res/values-ko/strings-icsopenvpn.xml
+++ b/app/src/main/res/values-ko/strings-icsopenvpn.xml
@@ -50,7 +50,6 @@
<string name="custom_route_format_error">ì‚¬ìš©ìž ì§€ì • 경로 구문 ë¶„ì„ ì˜¤ë¥˜</string>
<string name="pw_query_hint">(비워ë‘ë©´ 요청시 쿼리ë¨)</string>
<string name="vpn_shortcut">OpenVPN 바로 가기</string>
- <string name="vpn_launch_title">VPNì— ì—°ê²° 하기</string>
<string name="shortcut_profile_notfound">ë°”ë¡œê°€ê¸°ì— ì§€ì • ëœ í”„ë¡œíŒŒì¼ì„ ì°¾ì„ ìˆ˜ 없습니다.</string>
<string name="random_host_prefix">ìž„ì˜ì˜ 호스트 ì ‘ë‘사</string>
<string name="random_host_summary">6ê°œ ìž„ì˜ì˜ 문ìžë¥¼ 호스트 ì´ë¦„ ì•žì— ì¶”ê°€</string>
@@ -105,6 +104,7 @@
<string name="dns_server_info">DNS 서버: %1$s, ë„ë©”ì¸: %2$s</string>
<string name="routes_info_incl">경로: %1$s %2$s</string>
<string name="routes_info_excl">ì œì™¸ëœ ê²½ë¡œ: %1$s %2$s</string>
+ <string name="routes_debug">VpnService 노선 설치: %1$s %2$s</string>
<string name="ip_not_cidr">ì¸í„°íŽ˜ì´ìŠ¤ ì •ë³´ %1$s와 %2$sì— ìžˆì–´, ë‘ ë²ˆì§¸ 주소를 ì›ê²© 피어 주소로 가정 하겠습니다. 로컬 IPì˜ ë„·ë§ˆìŠ¤í¬ë¡œëŠ” /32를 사용하겠습니다. OpenVPNì— ì˜í•´ 주어진 모드는 \"%3$s\" 입니다.</string>
<string name="route_not_cidr">CIDR 넷마스í¬ê°€ 있는 IP ë¼ìš°íŠ¸ %1$s 와 %2$s ì— ìžˆì–´ì„œ 처리가 불가능합니다. /32를 넷마스í¬ë¡œ 사용하겠습니다.</string>
<string name="route_not_netip">%1$s/%2$s ì—ì„œ %3$s/%2$së¡œ ë¼ìš°íŠ¸ 수정</string>
@@ -163,7 +163,6 @@
<string name="private_key_password">ê°œì¸ í‚¤ 암호</string>
<string name="password">암호</string>
<string name="file_icon">íŒŒì¼ ì•„ì´ì½˜</string>
- <string name="tls_authentication">TLS ì¸ì¦</string>
<string name="generated_config">ìƒì„± ëœ ì„¤ì •</string>
<string name="generalsettings">설정</string>
<string name="owner_fix_summary">/dev/tunì˜ ì†Œìœ ê¶Œì„ ì‹œìŠ¤í…œìœ¼ë¡œ 설정 하려고 합니다. ì¼ë¶€ CM9 ì´ë¯¸ì§€ì—ì„œ VPNService API를 사용하기 위해서는 ì•žì˜ ìž‘ì—…ì´ ìš”êµ¬ë©ë‹ˆë‹¤. rootê¶Œí•œì„ ê°€ì ¸ì•¼í•©ë‹ˆë‹¤.</string>
@@ -201,9 +200,8 @@
<string name="using_proxy">프ë¡ì‹œ %1$s %2$d ì„ ì‚¬ìš©</string>
<string name="use_system_proxy">시스템 프ë¡ì‹œë¥¼ 사용</string>
<string name="use_system_proxy_summary">ì—°ê²°ì‹œ ì „ 시스템 ì„¤ì •ì— ìžˆëŠ” HTTP/HTTPS 프ë¡ì‹œë¥¼ 사용합니다.</string>
- <string name="donatewithpaypal">ë‹¹ì‹ ì€ &lt;a href=\"https://www.paypal.com/cgi-bin/webscr?hosted_button_id=R2M6ZP9AF25LS&amp;amp;cmd=_s-xclick\"&gt;PayPalì„ í†µí•´ 기부할 수 있습니다.&lt;/a&gt; </string>
- <string name="onbootrestartsummary">OpenVPNì€ ì‹œìŠ¤í…œ 재부팅/ì¢…ë£Œì— í™œì„±í™” ë˜ì—ˆìœ¼ë©´ VPNì„ ë‹¤ì‹œ 연결합니다. ì´ ì˜µì…˜ì„ ì‚¬ìš© 하기 ì „ì— ì—°ê²° 경고 FAQ를 ì½ì–´ 보시기 ë°”ëžë‹ˆë‹¤.</string>
- <string name="onbootrestart">재시작 후 다시 연결</string>
+ <string name="onbootrestartsummary">ì´ ì‹œìŠ¤í…œ ë¶€íŒ…ì— í™œì„±í™” ëœ ê²½ìš° OpenVPNì„ ì§€ì •ëœ VPNì„ ì—°ê²°í•©ë‹ˆë‹¤. 안드로ì´ë“œ &lt; 5.0ì—ì´ ì˜µì…˜ì„ ì‚¬ìš©í•˜ê¸° ì „ì— ì—°ê²° 경고 FAQ를 ì½ì–´ 보시기 ë°”ëžë‹ˆë‹¤.</string>
+ <string name="onbootrestart">ë¶€íŒ…ì— ì—°ê²°</string>
<string name="ignore">무시</string>
<string name="restart">다시 시작</string>
<string name="restart_vpn_after_change">VPNì„ ë‹¤ì‹œ 시작한 후 설정 변경 ë‚´ìš©ì´ ì ìš© ë©ë‹ˆë‹¤. VPNì„ ì§€ê¸ˆ (재)시작?</string>
@@ -249,7 +247,6 @@
<string name="state_tcp_connect">연결중 (TCP)</string>
<string name="state_auth_failed">ì¸ì¦ 실패</string>
<string name="state_nonetwork">사용 가능한 ë„¤íŠ¸ì›Œí¬ ëŒ€ê¸°ì¤‘</string>
- <string name="statusline_bytecount">↓%2$s/s %1$s - ↑%4$s/s %3$s</string>
<string name="notifcation_title_notconnect">ì—°ê²° ë˜ì§€ ì•ŠìŒ</string>
<string name="start_vpn_title">VPN %s 연결중</string>
<string name="start_vpn_ticker">VPN %s 연결중</string>
diff --git a/app/src/main/res/values-nl/plurals-icsopenvpn.xml b/app/src/main/res/values-nl/plurals-icsopenvpn.xml
new file mode 100755
index 00000000..5dd855b4
--- /dev/null
+++ b/app/src/main/res/values-nl/plurals-icsopenvpn.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<resources>
+ <plurals name="months_left">
+ <item quantity="one">Nog één maand</item>
+ <item quantity="other">Nog %d maanden</item>
+ </plurals>
+ <plurals name="days_left">
+ <item quantity="one">Nog één dag</item>
+ <item quantity="other">Nog %d dagen</item>
+ </plurals>
+ <plurals name="hours_left">
+ <item quantity="one">Nog één uur</item>
+ <item quantity="other">Nog %d uren</item>
+ </plurals>
+ <plurals name="minutes_left">
+ <item quantity="one">Nog één minuut</item>
+ <item quantity="other">Nog %d minuten</item>
+ </plurals>
+</resources>
diff --git a/app/src/main/res/values-nl/strings-icsopenvpn.xml b/app/src/main/res/values-nl/strings-icsopenvpn.xml
index da57e5e0..838ae5b9 100755
--- a/app/src/main/res/values-nl/strings-icsopenvpn.xml
+++ b/app/src/main/res/values-nl/strings-icsopenvpn.xml
@@ -44,19 +44,20 @@
<string name="duplicate_profile_name">Profielnaam is al in gebruik</string>
<string name="profilename">Profiel name</string>
<string name="no_keystore_cert_selected">Geen gebruikerscertificaat geselecteerd</string>
+ <string name="no_ca_cert_selected">Je moet een CA certificaat selecteren</string>
<string name="no_error_found">Geen fout.</string>
<string name="config_error_found">Fout in de configuratie</string>
<string name="ipv4_format_error">Fout bij inlezen van IPv4-adres</string>
<string name="custom_route_format_error">Fout bij inlezen van aangepaste routes</string>
<string name="pw_query_hint">(vrij laten voor query op aanvraag)</string>
- <string name="vpn_shortcut">Open VPN shortcut</string>
- <string name="vpn_launch_title">Met VPN verbinden</string>
+ <string name="vpn_shortcut">OpenVPN snelkoppeling</string>
+ <string name="vpn_launch_title">Verbinding maken met VPN&#8230;</string>
<string name="shortcut_profile_notfound">Het profiel zoals aangegeven in de snelkoppeling kon niet gevonden worden.</string>
<string name="random_host_prefix">Willekeurig Host Voorvoegsel</string>
<string name="random_host_summary">Voegt 6 willekeurige tekens toe voor de hostname</string>
<string name="custom_config_title">Eigen configuratie opties</string>
<string name="custom_config_summary">Geef je eigen configuratieopties aan. Wees voorzichtig!</string>
- <string name="route_rejected">Route geweigert door Android</string>
+ <string name="route_rejected">Route geweigerd door Android</string>
<string name="cancel_connection">Verbinding verbreken</string>
<string name="cancel_connection_long">VPN verbinding verbreken</string>
<string name="clear_log">logboek wissen</string>
@@ -106,14 +107,19 @@
<string name="version_info">%1$s %2$s</string>
<string name="send_logfile">Logboek verzenden</string>
<string name="send">Verzenden</string>
+ <string name="ics_openvpn_log_file">ICS OpenVPN logbestand</string>
<string name="copied_entry">Kopiëer de log ingave naar het clip bord</string>
<string name="tap_mode">Tap mode</string>
<string name="faq_tap_mode">De VPN API van Android werkt zonder rooten van de telefoon en ondersteunt alleen de tun modus. Daarom is de tap modus niet mogelijk met deze app.</string>
<string name="tap_faq2">Alweer? Maak je een grapje? Nee, tap mode wordt echt niet ondersteund en meer mails sturen met het verzoek of het ondersteund kan worden zal echt niet helpen, dus Neen.</string>
<string name="faq">Veelgestelde vragen </string>
+ <string name="copying_log_entries">Loggegevens aan het kopiëren</string>
+ <string name="faq_shortcut">Snelkoppeling naar start</string>
<string name="encryption">Codering</string>
<string name="cipher_dialog_title">Codering methode</string>
+ <string name="menu_import">Importeer profiel van ovpn bestand</string>
<string name="menu_import_short">Import</string>
+ <string name="error_reading_config_file">Fout bij het lezen van het configuratiebestand</string>
<string name="add_profile">Profiel toevoegen</string>
<string name="import_could_not_open">Kon het bestand %1$s, zoals aangegeven in de geïmporteerde configuratie niet vinden</string>
<string name="importing_config">Geïmporteerde configuratie bestand uit %1$s</string>
@@ -133,10 +139,109 @@
<string name="private_key_password">Privé Sleutel Wachtwoord</string>
<string name="password">Wachtwoord</string>
<string name="file_icon">bestands pictogram</string>
- <string name="tls_authentication">TLS Verificatie</string>
<string name="generated_config">Gegenereerde Configuratie</string>
<string name="generalsettings">Instellingen</string>
+ <string name="owner_fix">Verbeter eigendom van /dev/tun</string>
+ <string name="generated_config_summary">Toont het gegenereerde OpenVPN configuratiebestand</string>
<string name="edit_profile_title">Bewerken van \"%s\"</string>
<string name="building_configration">Opbouwen configuratie&#8230;</string>
+ <string name="netchange_summary">Het inschakelen van deze optie zal opnieuw verbinden na het veranderen van de netwerk status (bijv. van WiFi naar mobiel) forceren</string>
+ <string name="netchange">Opnieuw verbinden na netwerkverandering</string>
+ <string name="netstatus">Netwerk status: %s</string>
+ <string name="select_file">Selecteer</string>
+ <string name="show_log_window">Toon logboekvenster</string>
+ <string name="error_rsa_sign">Fout bij het ondertekenen met Android keystore sleutel %1$s: %2$s</string>
+ <string name="faq_system_dialogs_title">Verbindingswaarschuwing en meldingsgeluid</string>
<string name="ipdns">IP en DNS</string>
+ <string name="advanced">Geanvanceerd</string>
+ <string name="export_config_title">ICS Openvpn configuratie</string>
+ <string name="faq_howto_title">Snelle start</string>
+ <string name="setting_loadtun">Laad tun module</string>
+ <string name="getproxy_error">Fout bij het opvragen van proxy-instellingen: %s</string>
+ <string name="use_system_proxy">Gebruik systeemproxy</string>
+ <string name="use_system_proxy_summary">Gebruik de systeemconfiguratie voor HTTP/HTTPS proxys om te verbinden.</string>
+ <string name="onbootrestart">Verbinden bij het opstarten</string>
+ <string name="ignore">Negeren</string>
+ <string name="restart">Opnieuw starten</string>
+ <string name="configuration_changed">Configuratie gewijzigd</string>
+ <string name="no_vpn_profiles_defined">Geen VPN-profielen gedefinieerd.</string>
+ <string name="persisttun_summary">Niet terugvallen op geen VPN-verbinding wanneer OpenVPN opnieuw aan het verbinden is.</string>
+ <string name="persistent_tun_title">Persistent tun</string>
+ <string name="openvpn_log">OpenVPN log</string>
+ <string name="import_config">Importeer OpenVPN configuratie</string>
+ <string name="battery_consumption_title">Batterijverbruik</string>
+ <string name="faq_tethering">De Android Tethering feature (via WiFi, USB of Bluetooth) en de VPNService API (die gebruikt wordt door dit programma) werken niet samen. Voor meer details, zie &lt;a href=\"https://github.com/schwabe/ics-openvpn/issues/34\"&gt;issue #34&lt;/a&gt;</string>
+ <string name="vpn_tethering_title">VPN en Tethering</string>
+ <string name="connection_retries">Verbinding pogingen</string>
+ <string name="reconnection_settings">Instellingen voor opnieuw verbinden</string>
+ <string name="connectretrywait">Seconden tussen verbindingen</string>
+ <string name="notifcation_title">OpenVPN - %s</string>
+ <string name="state_connecting">Aan het verbinden</string>
+ <string name="state_wait">Wachten op antwoord van de server</string>
+ <string name="state_get_config">Clientconfiguratie ophalen</string>
+ <string name="state_assign_ip">IP-addressen toewijzen</string>
+ <string name="state_connected">Verbonden</string>
+ <string name="state_disconnected">Verbinding verbreken</string>
+ <string name="state_reconnecting">Opnieuw aan het verbinden</string>
+ <string name="state_exiting">Afsluiten</string>
+ <string name="state_noprocess">Niet actief</string>
+ <string name="state_tcp_connect">Aan het verbinden (TCP)</string>
+ <string name="notifcation_title_notconnect">Niet verbonden</string>
+ <string name="start_vpn_title">Verbinding maken met VPN %s</string>
+ <string name="start_vpn_ticker">Verbinding maken met VPN %s</string>
+ <string name="built_by">gebouwd door %s</string>
+ <string name="debug_build">debug build</string>
+ <string name="official_build">officiële build</string>
+ <string name="make_selection_inline">Kopieer naar profiel</string>
+ <string name="crashdump">Crashdump</string>
+ <string name="add">Toevoegen</string>
+ <string name="send_config">Verstuur configureerbestand</string>
+ <string name="complete_dn">Volledige DN</string>
+ <string name="rdn_prefix">RDN voorvoegsel</string>
+ <string name="allowed_apps">Toegestane apps: %s</string>
+ <string name="save_password">Wachtwoord opslaan</string>
+ <string name="pauseVPN">Pauzeer VPN</string>
+ <string name="resumevpn">Hervat VPN</string>
+ <string name="state_screenoff">VPN gepauzeerd - scherm uit</string>
+ <string name="vpnbehaviour">VPN gedrag</string>
+ <string name="thanks_for_donation">Bedankt voor het doneren van %s!</string>
+ <string name="logCleared">Log gewist.</string>
+ <string name="show_password">Toon wachtwoord</string>
+ <string name="timestamp_short">Kort</string>
+ <string name="timestamp_iso">ISO</string>
+ <string name="timestamps_none">Geen</string>
+ <string name="uploaded_data">Upload</string>
+ <string name="downloaded_data">Download</string>
+ <string name="vpn_status">VPN Status</string>
+ <string name="logview_options">Toon opties</string>
+ <string name="full_licenses">Volledige licenties</string>
+ <string name="userpw_file">Gebruikersnaam/Wachtwoord bestand</string>
+ <string name="imported_from_file">[Geïmporteerd uit: %s]</string>
+ <string name="import_log">Importeer log:</string>
+ <string name="loading">Aan het laden&#8230;</string>
+ <string name="allowed_vpn_apps_info">Toegestane VPN apps: %1$s</string>
+ <string name="disallowed_vpn_apps_info">Niet toegestane VPN apps: %1$s</string>
+ <string name="keep">Houden</string>
+ <string name="delete">Verwijderen</string>
+ <string name="server_list">Serverlijst</string>
+ <string name="vpn_allowed_apps">Toegestane apps</string>
+ <string name="advanced_settings">Geavanceerde instellingen</string>
+ <string name="tls_settings">TLS-instellingen</string>
+ <string name="show_log">Toon logboek</string>
+ <string name="version_upto">%s en eerder</string>
+ <string name="copy_of_profile">Kopie van %s</string>
+ <string name="ab_secondary_users_title">Secundaire tabletgebruikers</string>
+ <string name="version_and_later">%s en hoger</string>
+ <string name="Search">Zoeken</string>
+ <string name="protocol">Protocol</string>
+ <string name="enabled_connection_entry">Ingeschakeld</string>
+ <string name="samsung_broken_title">Samsung telefoons</string>
+ <string name="novpn_selected">Geen VPN geselecteerd.</string>
+ <string name="reconnect">Opnieuw verbinden</string>
+ <string name="qs_connect">Verbinden met %s</string>
+ <string name="qs_disconnect">Verbinding met %s verbreken</string>
+ <string name="change_sorting">Verander sortering</string>
+ <string name="sort">Sorteer</string>
+ <string name="sorted_lru">Profielen gesorteerd op laatst recent gebruikte</string>
+ <string name="sorted_az">Profielen gesorteerd op naam</string>
</resources>
diff --git a/app/src/main/res/values-no/plurals-icsopenvpn.xml b/app/src/main/res/values-no/plurals-icsopenvpn.xml
new file mode 100755
index 00000000..f4716401
--- /dev/null
+++ b/app/src/main/res/values-no/plurals-icsopenvpn.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<resources>
+ <plurals name="months_left">
+ <item quantity="one">En måned igjen</item>
+ <item quantity="other">%d måneder igjen</item>
+ </plurals>
+ <plurals name="days_left">
+ <item quantity="one">En dag igjen</item>
+ <item quantity="other">%d dager igjen</item>
+ </plurals>
+ <plurals name="hours_left">
+ <item quantity="one">En time igjen</item>
+ <item quantity="other">%d timer igjen</item>
+ </plurals>
+ <plurals name="minutes_left">
+ <item quantity="one">Ett minutt igjen</item>
+ <item quantity="other">%d minutter igjen</item>
+ </plurals>
+</resources>
diff --git a/app/src/main/res/values-no/strings-icsopenvpn.xml b/app/src/main/res/values-no/strings-icsopenvpn.xml
index b227c4b6..4ebf757a 100755
--- a/app/src/main/res/values-no/strings-icsopenvpn.xml
+++ b/app/src/main/res/values-no/strings-icsopenvpn.xml
@@ -44,13 +44,14 @@
<string name="duplicate_profile_name">Skriv inn et unikt profilnavn</string>
<string name="profilename">Profilnavn</string>
<string name="no_keystore_cert_selected">Du må velge et brukersertifikat</string>
+ <string name="no_ca_cert_selected">Du må velge et CA-sertifikat</string>
<string name="no_error_found">Ingen feil funnet</string>
<string name="config_error_found">Feil i konfigurasjonen</string>
<string name="ipv4_format_error">Feil ved analyse av IPv4-adressen</string>
<string name="custom_route_format_error">Feil ved analyse av egendefinerte ruter</string>
<string name="pw_query_hint">(La stå tomt for å søke på forespørsel)</string>
<string name="vpn_shortcut">OpenVPN snarvei</string>
- <string name="vpn_launch_title">Koble til VPN</string>
+ <string name="vpn_launch_title">Kobler til VPN&#8230;</string>
<string name="shortcut_profile_notfound">Profilen som er angitt i snarveien ble ikke funnet</string>
<string name="random_host_prefix">Tilfeldig vert prefiks</string>
<string name="random_host_summary">Legger til 6 tilfeldige tegn foran vertsnavn</string>
@@ -67,28 +68,55 @@
<string name="check_remote_tlscert_title">Forvent TLS-serversertifikat</string>
<string name="remote_tlscn_check_summary">Kontrollerer eksternt tjenersertifikatemne DN</string>
<string name="remote_tlscn_check_title">Sjekk av vertsnavn i sertifikat</string>
+ <string name="tls_key_auth">Aktiver autentisering med TLS-nøkkel</string>
<string name="tls_auth_file">TLS-Auth-fil</string>
+ <string name="pull_on_summary">Etterspør IP-adresser, ruter og alternativer for timing fra serveren.</string>
+ <string name="pull_off_summary">Serveren etterspør ingen informasjon. Innstillinger må angis nedenfor.</string>
+ <string name="use_pull">Trekk innstillinger</string>
<string name="dns">DNS</string>
+ <string name="override_dns">Overstyr DNS-innstillinger etter Server</string>
<string name="dns_override_summary">Bruk din egen DNS-server</string>
<string name="dns1_summary">DNS-Server som skal brukes.</string>
<string name="dns_server">DNS-server</string>
+ <string name="secondary_dns_message">Sekundær DNS-server brukes hvis den vanlige DNS-serveren ikke kan nås.</string>
+ <string name="backup_dns">Backup-DNS-server</string>
+ <string name="default_route_summary">Omdirigerer all trafikk over VPN</string>
<string name="use_default_title">Bruk standard rute</string>
<string name="custom_routes_title">Egendefinert rute</string>
+ <string name="custom_routes_title_excluded">Ekskluder nettverk</string>
<string name="log_verbosity_level">Detaljnivå for Logging</string>
+ <string name="float_summary">Tillater autentiserte pakker fra enhver IP</string>
+ <string name="float_title">Tillat flytende server</string>
<string name="custom_options_title">Egendefinerte valg</string>
<string name="edit_vpn">Rediger VPN-innstillinger</string>
+ <string name="remove_vpn_query">Fjerne VPN-profilen \'%s\'?</string>
+ <string name="tun_open_error">Kunne ikke åpne tun-grensesnittet</string>
<string name="error">"Feil:"</string>
<string name="clear">Fjern</string>
+ <string name="last_openvpn_tun_config">Ã…pner tun-grensesnittet:</string>
+ <string name="local_ip_info">Lokal IPv4: %1$s/%2$d IPv6: %3$s MTU: %4$d</string>
+ <string name="dns_server_info">DNS-server: %1$s, domene: %2$s</string>
+ <string name="routes_info_incl">Ruter: %1$s %2$s</string>
+ <string name="routes_info_excl">Ekskluderte ruter: %1$s %2$s</string>
+ <string name="routes_debug">VpnService-ruter som er installert: %1$s %2$s</string>
<string name="version_info">%1$s %2$s</string>
<string name="send_logfile">Send loggfilen</string>
<string name="send">Send</string>
<string name="ics_openvpn_log_file">ICS OpenVPN loggfil</string>
+ <string name="copied_entry">Kopierte oppføring i loggen til utklippstavlen</string>
<string name="tap_mode">Tap modus</string>
+ <string name="faq_tap_mode">Tap-modus er ikke mulig med ikke-root APN API. Denne appen kan derfor ikke bidra med tap-støtte</string>
+ <string name="tap_faq2">Igjen? Tuller du? Nei, Tap-modus støttes ikke. Flere e-poster med forespørsler om det vil bli støtte vil heller ikke hjelpe.</string>
+ <string name="tap_faq3">En tredje gang? Egentlig så kan man skrive en taå-emulator basert på tun-grensesnittet som ville gitt layer2-informasjon ved sending og fjernet layer2-informasjon ved mottakelse. Men, denne tap-emulatoren ville også måtte ha implementert ARP og muligens en DHSP-klient. Som utvikler er jeg ikke kjent med at noen arbeider med noe i denne retningen. Ta kontakt med meg dersom du ønsker å programmere dette.</string>
<string name="faq">FAQ</string>
<string name="copying_log_entries">Kopier loggoppføringer</string>
<string name="faq_shortcut">Snarvei til start</string>
+ <string name="faq_howto_shortcut">Du kan legge inn en snarvei for å starte OpenVPN på skrivebordet. Avhengig av ditt startskjermprogram må du legge til enten en snarvei eller en widget.</string>
+ <string name="no_vpn_support_image">Bildet ditt støtter ikke VPNService API, beklager :(</string>
<string name="encryption">Kryptering</string>
<string name="cipher_dialog_title">Angi krypteringsmetode</string>
+ <string name="chipher_dialog_message">Skriv inn krypteringskrypteringsalgoritmen som brukes av OpenVPN. La det stå tomt for å bruke standard kryptering.</string>
+ <string name="auth_dialog_message">Skriv inn godkjenningsfordeling som brukes til OpenVPN. La være tom for å bruke standard fordøyelse.</string>
<string name="settings_auth">Autentisering/kryptering</string>
<string name="file_explorer_tab">Filutforsker</string>
<string name="error_importing_file">Feil ved import av fil</string>
@@ -101,9 +129,11 @@
<string name="import_could_not_open">Finner ikke filen %1$s nevnt i importert konfigurasjons fil</string>
<string name="importing_config">Importerer konfigurasjonsfilen fra kilde %1$s</string>
<string name="import_done">Ferdig med å lese konfigurasjons-filen.</string>
+ <string name="nobind_summary">Ikke bind til lokal adresse og port</string>
<string name="no_bind">Ingen lokale binding</string>
<string name="import_configuration_file">Importer konfigurasjonsfil</string>
<string name="faq_security_title">Sikkerhetsvurderinger</string>
+ <string name="faq_security">"Som OpenVPN er sikkerhetsfølsomt, er noen få notater om sikkerhet fornuftig. Alle data på SD-kortet er iboende usikre. Hvert program kan lese det (for eksempel krever dette programmet ingen spesielle SD-kortrettigheter). Dataene i denne applikasjonen kan bare leses Ved bruk av importalternativet for cacert/cert/nøkkel i fildialogen lagres dataene i VPN-profilen. VPN-profilene er bare tilgjengelige for dette programmet. (Ikke glem å slette kopier på SD Kort etterpå). Selv om det kun er tilgjengelig med denne applikasjonen, er dataene fortsatt ukrypterte. Ved å rote telefonen eller andre utnytelser kan det hende at dataene kan hentes. Lagrede passord lagres også i vanlig tekst. For pkcs12-filer anbefales det sterkt At du importerer dem inn i android-nøkkelbutikken. "</string>
<string name="import_vpn">Importer</string>
<string name="broken_image_cert_title">Feil ved visning av sertifikatvalg</string>
<string name="ipv4">IPv4</string>
@@ -116,15 +146,18 @@
<string name="private_key_password">Privat nøkkel passord</string>
<string name="password">Passord</string>
<string name="file_icon">fil ikon</string>
- <string name="tls_authentication">TLS-godkjenning</string>
+ <string name="tls_authentication">TLS Godkjenning/Kryptering</string>
<string name="generated_config">Generert konfigurasjon</string>
+ <string name="generalsettings">Innstillinger</string>
<string name="owner_fix">Fiks eierskap av /dev/tun</string>
+ <string name="generated_config_summary">Viser den genererte OpenVPN konfigurasjonsfilen</string>
<string name="edit_profile_title">Rediger \"%s\"</string>
<string name="building_configration">Lager konfigurasjon&#8230;</string>
<string name="netchange">Koble til på nytt ved nettverks endring</string>
<string name="netstatus">Nettverksstatus: %s</string>
<string name="select_file">Velg</string>
<string name="show_log_window">Vis logg-vindu</string>
+ <string name="faq_system_dialogs_title">Tilkoblingsvarsel og varslingslyd</string>
<string name="translationby">Norsk oversettelse av Jonny</string>
<string name="ipdns">IP og DNS</string>
<string name="basic">Grunnleggende</string>
@@ -138,8 +171,6 @@
<string name="using_proxy">Bruker proxy %1$s %2$d</string>
<string name="use_system_proxy">Bruk systemet proxy</string>
<string name="use_system_proxy_summary">Bruk global systemkonfigurasjon for HTTP/HTTPS proxy for å koble til.</string>
- <string name="donatewithpaypal">Du kan &lt;a href=\"https://www.paypal.com/cgi-bin/webscr?hosted_button_id=R2M6ZP9AF25LS&amp;amp;cmd=_s-xclick\"&gt;donere med PayPal&lt;/a&gt; </string>
- <string name="onbootrestart">Koble til på nytt ved restart</string>
<string name="ignore">Ignorer</string>
<string name="restart">Start på nytt</string>
<string name="configuration_changed">Konfigurasjon endret</string>
@@ -150,4 +181,45 @@
<string name="openvpn_log">OpenVPN Logg</string>
<string name="import_config">Importer OpenVPN konfigurasjon</string>
<string name="battery_consumption_title">Batteriforbruk</string>
+ <string name="minidump_generated">OpenVPN krasjet uventet. Vennligst vurder bruk av Minidump-alternativet i hovedmenyen</string>
+ <string name="send_minidump">Send Minidump til utvikler</string>
+ <string name="send_minidump_summary">Sender feilsøkingsinformasjon om siste krasj til utvikler</string>
+ <string name="notifcation_title">OpenVPN - %s</string>
+ <string name="session_ipv4string">%1$s - %2$s</string>
+ <string name="session_ipv6string">%1$s - %3$s, %2$s</string>
+ <string name="state_connecting">Kobler til</string>
+ <string name="state_wait">Venter på serverrespons</string>
+ <string name="state_auth">Autentisering</string>
+ <string name="state_get_config">FÃ¥ klient konfigurasjon</string>
+ <string name="state_assign_ip">Tilordne IP-adresser</string>
+ <string name="state_add_routes">Legge til ruter</string>
+ <string name="state_connected">Tilkoblet</string>
+ <string name="state_disconnected">Koble fra</string>
+ <string name="state_reconnecting">Koble til igjen</string>
+ <string name="state_exiting">Avslutter</string>
+ <string name="state_noprocess">Kjører ikke</string>
+ <string name="state_resolve">Løse vertsnavn</string>
+ <string name="state_tcp_connect">Kobler til (TCP)</string>
+ <string name="state_auth_failed">Autentisering mislyktes</string>
+ <string name="notifcation_title_notconnect">Ikke tilkoblet</string>
+ <string name="start_vpn_title">Kobler til VPN %s</string>
+ <string name="start_vpn_ticker">Kobler til VPN %s</string>
+ <string name="encryption_cipher">Kryptering chiffer</string>
+ <string name="packet_auth">Pakkegodkjenning</string>
+ <string name="auth_dialog_title">Angi pakkeautentiseringsmetode</string>
+ <string name="built_by">bygget av %s</string>
+ <string name="make_selection_inline">Kopier til profil</string>
+ <string name="add">Legg til</string>
+ <string name="send_config">Send konfigurasjonsfilen</string>
+ <string name="complete_dn">Fullfør DN</string>
+ <string name="remotetlsnote">Din importerte konfigurasjon brukte det gamle DEPRECATED tls-remote-alternativet som bruker et annet DN-format.</string>
+ <string name="rdn">RDN (vanlig navn)</string>
+ <string name="rdn_prefix">RDN prefiks</string>
+ <string name="help_translate">Du kan bidra til å oversette ved å besøke http://crowdin.net/project/ics-openvpn/invite</string>
+ <string name="screenoff_title">Pause VPN-tilkobling etter at skjermen er slått av</string>
+ <string name="import_log">Importer logg:</string>
+ <string name="client_behaviour">Klient adferd</string>
+ <string name="clear_external_apps">Slett tillatte eksterne apper</string>
+ <string name="loading">Laster&#8230;</string>
+ <string name="allowed_vpn_apps_info">Tillatte VPN-apper: %1$s</string>
</resources>
diff --git a/app/src/main/res/values-no/strings.xml b/app/src/main/res/values-no/strings.xml
index 500f5bcd..db93ebc6 100644
--- a/app/src/main/res/values-no/strings.xml
+++ b/app/src/main/res/values-no/strings.xml
@@ -2,7 +2,5 @@
<resources>
<string name="info">info</string>
<string name="show_connection_details">Vis Tilkoblingsdetaljer</string>
- <string name="dns_server_info">DNS-server: %s</string>
- <string name="dns_domain_info">DNS-domene: %s</string>
<string name="routes_info">Ruter: %s</string>
</resources>
diff --git a/app/src/main/res/values-pl/plurals-icsopenvpn.xml b/app/src/main/res/values-pl/plurals-icsopenvpn.xml
new file mode 100755
index 00000000..70489fbc
--- /dev/null
+++ b/app/src/main/res/values-pl/plurals-icsopenvpn.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<resources></resources>
diff --git a/app/src/main/res/values-pl/strings-icsopenvpn.xml b/app/src/main/res/values-pl/strings-icsopenvpn.xml
index 04b8f56c..40c9c522 100755
--- a/app/src/main/res/values-pl/strings-icsopenvpn.xml
+++ b/app/src/main/res/values-pl/strings-icsopenvpn.xml
@@ -9,7 +9,7 @@
<string name="address">Adres serwera:</string>
<string name="port">Port serwera:</string>
<string name="location">Ścieżka</string>
- <string name="cant_read_folder">Nie mogę odczytać katalogu</string>
+ <string name="cant_read_folder">Brak możliwości czytania z katalogu</string>
<string name="select">Wybierz</string>
<string name="cancel">Anuluj</string>
<string name="no_data">Brak danych</string>
@@ -21,7 +21,7 @@
<string name="ca_title">Certyfikat CA</string>
<string name="no_certificate">Musisz wybrać certyfikat</string>
<string name="copyright_guicode">Kod źródłowy i formularz zgłoszeniowy błędów dostępny pod https://github.com/schwabe/ics-openvpn/</string>
- <string name="copyright_others">Program ten wykorzystuje następujące składniki; Szczegółowe informacje o licencjach w kodzie źródłowym</string>
+ <string name="copyright_others">Program ten wykorzystuje następujące składniki; szczegółowe informacje o licencjach znajdziesz w kodzie źródłowym</string>
<string name="about">O programie</string>
<string name="vpn_list_title">Profile</string>
<string name="vpn_type">Typ</string>
@@ -44,13 +44,14 @@
<string name="duplicate_profile_name">Wybierz unikalnÄ… nazwÄ™ profilu</string>
<string name="profilename">Nazwa profilu</string>
<string name="no_keystore_cert_selected">Musisz wybrać certyfikat użytkownika</string>
+ <string name="no_ca_cert_selected">Musisz wybrać certyfikat CA</string>
<string name="no_error_found">Brak błędów</string>
<string name="config_error_found">BÅ‚Ä…d w konfiguracji</string>
<string name="ipv4_format_error">BÅ‚Ä…d analizowania adresu IPv4</string>
<string name="custom_route_format_error">BÅ‚Ä…d analizowania niestandardowych tras</string>
<string name="pw_query_hint">(Pozostaw puste, aby wywołać na żądanie)</string>
<string name="vpn_shortcut">Skrót OpenVPN</string>
- <string name="vpn_launch_title">Połącz się z siecią VPN</string>
+ <string name="vpn_launch_title">Podłączanie do VPN...</string>
<string name="shortcut_profile_notfound">Nie odnaleziono profilu określonego w skrócie</string>
<string name="random_host_prefix">Losowy prefiks hosta</string>
<string name="random_host_summary">Dodaje 6 losowych znaków przed nazwą hosta</string>
@@ -164,7 +165,7 @@
<string name="private_key_password">Hasło klucza prywatnego</string>
<string name="password">Hasło</string>
<string name="file_icon">plik ikony</string>
- <string name="tls_authentication">Uwierzytelnianie TLS</string>
+ <string name="tls_authentication">Uwierzytelnianie TLS / Szyfrowanie</string>
<string name="generated_config">Utworzona konfiguracja</string>
<string name="generalsettings">Ustawienia</string>
<string name="owner_fix_summary">Stara się ustawić właściciela /dev/tun na system. Niektóre obrazy CM9 wymagają tego, aby API VPNService zaczęło działać. Wymaga root-a.</string>
@@ -203,9 +204,8 @@
<string name="using_proxy">Używam proxy %1$s%2$d</string>
<string name="use_system_proxy">Użyj proxy systemowego</string>
<string name="use_system_proxy_summary">Połącz używając systemowej konfiguracji proxy HTTP/HTTPS.</string>
- <string name="donatewithpaypal">Możesz &lt;a href=\"https://www.paypal.com/cgi-bin/webscr?hosted_button_id=R2M6ZP9AF25LS&amp;amp;cmd=_s-xclick\"&gt;wspomóc przez PayPal&lt;/a&gt; </string>
- <string name="onbootrestartsummary">OpenVPN połączy ponownie z VPN jeśli połączenie było aktywne przy restarcie/zamknięciu systemu. Przeczytaj proszę FAQ z ostrzeżeniami przed użyciem tej opcji.</string>
- <string name="onbootrestart">Połącz po restarcie</string>
+ <string name="onbootrestartsummary">OpenVPN połączy się z wybranym VPN jeżeli będzie aktywny podczas startu systemu. Przeczytaj FAQ dotyczący połączeń przed zastosowaniem tej opcji na Androidzie &lt; 5.0.</string>
+ <string name="onbootrestart">Połącz przy starcie</string>
<string name="ignore">Ignoruj</string>
<string name="restart">Uruchom ponownie</string>
<string name="restart_vpn_after_change">Zmiany konfiguracji będą zatwierdzone po restarcie VPN. Uruchomić ponowie teraz?</string>
@@ -252,7 +252,6 @@
<string name="state_tcp_connect">ÅÄ…czenie (TCP)</string>
<string name="state_auth_failed">BÅ‚Ä…d autentykacji</string>
<string name="state_nonetwork">Czekam na sieć</string>
- <string name="statusline_bytecount">↓%2$s/s %1$s - ↑%4$s/s %3$s</string>
<string name="notifcation_title_notconnect">Niepołączony</string>
<string name="start_vpn_title">ÅÄ…czÄ™ z VPN %s</string>
<string name="start_vpn_ticker">ÅÄ…czÄ™ z VPN %s</string>
@@ -311,6 +310,7 @@
<string name="logview_options">Opcje widoku</string>
<string name="unhandled_exception">Nieobsługiwany wyjątek: %1$s\n\n%2$s</string>
<string name="unhandled_exception_context">%3$s: %1$s\n\n%2$s</string>
+ <string name="faq_system_dialog_xposed">Jeśli masz dostęp do roota możesz zaisntalować &lt;a href=\"http://xposed.info/\"&gt;Xposed framework&lt;/a&gt; oraz &lt;a href=\"http://repo.xposed.info/module/de.blinkt.vpndialogxposed\"&gt;VPN potwierdzi moduł&lt;/a&gt;na wsłasne ryzyko\"</string>
<string name="full_licenses">Pełne licencje</string>
<string name="blocklocal_summary">Sieci połączone bezpośrednio do lokalnych interfejsów nie będą kierowane przez VPN. Odznaczając tę opcję przeniesiesz cały ruch przeznaczony dla sieci lokalnych przez VPN.</string>
<string name="blocklocal_title">Obejdź VPN dla sieci lokalnych</string>
@@ -347,12 +347,16 @@
<string name="duplicate_vpn">Powiel profil VPN</string>
<string name="duplicate_profile_title">Powielam profil: %s</string>
<string name="show_log">Pokaż dziennik</string>
+ <string name="faq_android_clients">Istnieje wiele klientów OpenVPN dla systemu Android. Najpopularniejszym jest OpenVPN for Android (ten klient), OpenVPN Connect oraz OpenVPN Settings.&lt;p&gt;Aplikacje można podzielić na dwie grupy: OpenVPN for Android oraz OpenVPN Connect używają oficjalnego API VPNService (Android 4.0+) i nie wymagają rootowania urządzenia oraz OpenVPN Settings, który wymagania rootowania.&lt;p&gt;OpenVPN for Android jest klientem otwarto-źródłowym i stworzonym przez Arne Schwabe. Dedykowany jest dla bardziej zaawansowanych użytkowników oraz oferuje wiele opcji konfiguracji włącznie z możliwością importowania i modyfikacji konfiguracji zapisanych do pliku. Ten klient powstał w oparciu o społecznościową wersję OpenVPN w wersji 2.x. Ten klient może uchodzić za oficjalnego klienta używanego przez społeczność. &lt;p&gt;OpenVPN Connect nie jest aplikacją otwarto-źródłową i został stworzony przez OpenVPN Technologies, Inc. Klient przeznaczony jest do generalnego użytku, dedykowany dla przeciętnego użytkownika i również umożliwia importowanie konfiguracji. Ten klient bazuje na implementacji protokołu OpenVPN w języku C++ (podyktowanego to było warunkami umożliwiającymi OpenVPN Technologies, Inc opublikowanie wersji klienta dla systemu iOS). Jest to oficjalny klient OpenVPN Technologies, Inc. &lt;p&gt; OpenVPN Settings jest najstarszym z wymienionych klientów i jednocześnie interfejsem graficznym dla otwarto-źródłowego OpenVPN. W odróżnieniu od OpenVPN for Android wymaga rootowania urządzenia i nie wykorzystuje VPNService API. Nie wymaga do działania Android 4.0+</string>
<string name="faq_androids_clients_title">Różnice pomiędzy klientami OpenVPN dla Androida</string>
<string name="ignore_multicast_route">Ignoruj trasÄ™ multicast: %s</string>
<string name="ab_only_cidr">Android wspiera tylko trasy CIDR w sieci VPN. Jako, że trasy nie-CIDR nie są powszechnie używane, OpenVPN dla Androida użyje /32 dla tras w formacie nie-CIDR i wyświetli błąd.</string>
<string name="ab_tethering_44">Tethering działa podczas połączenia z VPN. Udostępnione połączenie NIE będzie używało VPN.</string>
<string name="ab_kitkat_mss">Wczesne wersje KitKat ustawiają złą wartość MSS połączeń TCP (#61948). Spróbuj ustawić opcję mssfix w celu obejścia tego problemu.</string>
+ <string name="ab_proxy">Android będzie używał Twoich ustawień proxy dla połączenia mobilnego/Wi-Fi kiedy nie jest sprecyzowany serwer DNS.
+OpenVPN dla Androida ostrzeże Cię o tym w logu.<p>Kiedy VPN ustawi serwer DNS Android nie będzie używał więcej proxy. Nie ma żadnego API do ustawienia proxy dla połączenia VPN.</p></string>
<string name="ab_lollipop_reinstall">Aplikacje VPN mogą przestać działać po odinstalowaniu i ponownej instalacji. W celu uzyskania szczegółów zobacz #80074</string>
+ <string name="ab_not_route_to_vpn">Brakuje konfiguracji tras dla adresu IP klienta oraz masek podsieci. OpenVPN rozwiÄ…zuje ten problem przez dodanie trasy odpowiedniej dla adresu IP klienta i maski jego podsieci</string>
<string name="ab_secondary_users">VPN absolutnie nie działa dla dodatkowych użytkowników.</string>
<string name="ab_kitkat_reconnect">"Jest grono użytkowników, którzy donoszą, iż podczas używania aplikacji VPN połączenie danych/komórkowe jest często zrywane. Zachowanie to wydaje się dotykać niewielkiej liczby urządzeń/dostawców danych komórkowych - na tę chwilę nieznana jest przyczyna, ani rozwiązanie problemu."</string>
<string name="ab_only_cidr_title">Trasy nie-CIDR</string>
@@ -370,6 +374,8 @@
<string name="ab_vpn_reachability_44_title">Zdalne sieci nie sÄ… osiÄ…galne</string>
<string name="ab_persist_tun_title">Tryb persist tun</string>
<string name="version_and_later">%s i późniejsze</string>
+ <string name="tls_cipher_alert_title">Uzgodnienie połączenia nie powiodło się z kodem błędu: SSL23_GET_SERVER_HELLO:sslv3</string>
+ <string name="tls_cipher_alert">Nowsze wersje OpenVPN for Android (od wersji 0.6.29 z marca 2015) używają domyślnie bezpieczniejszego szyfrowania (tls-cipher \"DEFAULT:!EXP:!PSK:!SRP:!kRSA\"). Niestety, pominięcie mniej bezpiecznego szyfrowania - w szczególności pominięcie metod szyfrowania niewspierających Perfekcyjnego Utajnienia Przekazywania - powoduje pewne problemy. Te, najczęściej są spowodowane przez dobrze motywowane lecz źle wykonane próby poprawienia bezpieczeństwa TLS przez ustawienie tls-cipher na serwerze lub niektórych systemach wbudowanych z ograniczonym SSL (np.: MikroTik).\n W celu rozwiązania tego problemu, ustaw tls-cipher na serwerze na rozsądną wartość (np.: tls-cipher \"DEFAULT:!EXP:!PSK:!SRP:!kRSA\"). W celu rozwiązania problemu po stronie klienta - ustaw niestandardową wartość: tls-cipher DEFAULT.</string>
<string name="message_no_user_edit">Ten profil został dodany przez zewnętrzną aplikację (%s) i został oznaczony jako nie edytowalny przez użytkownika.</string>
<string name="crl_file">Listy odwoławcze CRL</string>
<string name="service_restarted">Restartuję usługę OpenVPN (Aplikacja wywaliła się lub zabito ją z powodu braku pamięci)</string>
@@ -382,7 +388,31 @@
<string name="query_permissions_sdcard">OpenVPN dla Android spróbuje automatycznie wykryć brakujące pliki na karcie SD. Dotknij tego komunikatu, aby żądać uprawnień.</string>
<string name="protocol">Protokół</string>
<string name="enabled_connection_entry">WÅ‚Ä…czony</string>
- <string name="months_left">pozostało %d miesięcy</string>
- <string name="days_left">pozostało %d dni</string>
- <string name="hours_left">pozostało %d godzin</string>
+ <string name="permission_revoked">Pozwolenie VPN odwołane przez system (na przykład inny program VPN jest uruchomiony), zatrzymuję VPN</string>
+ <string name="pushpeerinfo">Naciśnij \"Peer info\"</string>
+ <string name="pushpeerinfosummary">Wyślij dodatkowe informację do serwera, na przykład wersję SSL oraz Androida</string>
+ <string name="pw_request_dialog_title">Potrzeba %1$s</string>
+ <string name="pw_request_dialog_prompt">Proszę podać hasło do profilu %1$s</string>
+ <string name="menu_use_inline_data">Użyj danych podanych explicite</string>
+ <string name="export_config_chooser_title">Eksportuj plik konfiguracyjny</string>
+ <string name="missing_tlsauth">Plik tls-auth nie odnaleziony</string>
+ <string name="missing_certificates">Brakujący certyfikat użytkownika lub plik klucza certyfikatu użytkownika</string>
+ <string name="missing_ca_certificate">Brak certyfikatu CA</string>
+ <string name="crl_title">Lista unieważnionych certyfikatów (opcjonalnie)</string>
+ <string name="reread_log">Odśwież %d wpis(ów) dziennika z pliku pamięci podręcznej</string>
+ <string name="samsung_broken">Pomimo, że telefony marki Samsung są jednymi z najliczniej sprzedawanych urządzeń z Androidem, oprogramowanie układowe Samsunga jest jednocześnie jednym z posiadających najwięcej błędów. Błędy nie ograniczają się wyłącznie do operacji związanych z VPN a wiele z nich zostało rozwiązanych technikami tymczasowymi. Poniższa lista przedstawia kilka ze wspomnianych błędów.\n\nDNS nie działa poza zakresem VPN.\n\nNa wielu urządzeniach marki Samsung z Androidem 5.x aplikacje dozwolone/niedozwolone nie działają.\n\nNa urządzeniach marki Samsung z Androidem 6.x VPN może nie działać podczas aktywnego oszczędzania energii.</string>
+ <string name="samsung_broken_title">Telefony Samsung</string>
+ <string name="novpn_selected">Nie wybrano VPN.</string>
+ <string name="reconnect">Podłącz ponownie</string>
+ <string name="qs_title">Przełącz VPN</string>
+ <string name="qs_connect">Połącz z %s</string>
+ <string name="qs_disconnect">Rozłącz %s</string>
+ <string name="connectretrymaxmessage">Podaj maksymalny czas pomiędzy kolejnymi próbami połączenia. OpenVPN będzie powoli zwiększał czas oczekiwania po każdej nieudanej próbie połączenia aż do podanej wartości. Domyślna wartość to 300 sekund.</string>
+ <string name="connectretrymaxtitle">Maksymalny czas między próbami połączenia</string>
+ <string name="state_waitconnectretry">Oczekiwanie %s sekund pomiędzy kolejnymi próbami połączenia</string>
+ <string name="management_socket_closed">Połączenie OpenVPN zamknięte (%s)</string>
+ <string name="change_sorting">Zmień sortowanie</string>
+ <string name="sort">Sortowanie</string>
+ <string name="sorted_lru">Profile posortowane według ostatnio używanych</string>
+ <string name="sorted_az">Profile sortowane według nazwy</string>
</resources>
diff --git a/app/src/main/res/values-pt/plurals-icsopenvpn.xml b/app/src/main/res/values-pt/plurals-icsopenvpn.xml
new file mode 100755
index 00000000..70489fbc
--- /dev/null
+++ b/app/src/main/res/values-pt/plurals-icsopenvpn.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<resources></resources>
diff --git a/app/src/main/res/values-pt/strings-icsopenvpn.xml b/app/src/main/res/values-pt/strings-icsopenvpn.xml
index 994c8cc2..00523b59 100755
--- a/app/src/main/res/values-pt/strings-icsopenvpn.xml
+++ b/app/src/main/res/values-pt/strings-icsopenvpn.xml
@@ -50,7 +50,6 @@
<string name="custom_route_format_error">Erro ao analisar as rotas personalizadas</string>
<string name="pw_query_hint">(deixe em branco para consulta a pedido)</string>
<string name="vpn_shortcut">Atalho do OpenVPN</string>
- <string name="vpn_launch_title">Ligar à VPN</string>
<string name="shortcut_profile_notfound">Perfil especificado no atalho não encontrado</string>
<string name="random_host_prefix">Prefixo de Host aleatório</string>
<string name="random_host_summary">Adiciona 6 caracteres aleatórios ao nome do host</string>
@@ -65,6 +64,7 @@
<string name="remove_vpn">Remover VPN</string>
<string name="check_remote_tlscert">Verifica se o servidor utiliza um certificado com extensões TLS Server (--remote-cert-tls server)</string>
<string name="check_remote_tlscert_title">Esperar certificado do servidor TLS</string>
+ <string name="remote_tlscn_check_summary">Verifica o assunto DN do certificado do servidor remoto</string>
<string name="remote_tlscn_check_title">Verificar nome de host do certificado</string>
<string name="enter_tlscn_title">Assunto do certificado remoto</string>
<string name="tls_key_auth">Ativa a autenticação de chave TLS</string>
@@ -155,7 +155,6 @@
<string name="private_key_password">Senha de chave privada</string>
<string name="password">Senha</string>
<string name="file_icon">ícone de ficheiro</string>
- <string name="tls_authentication">Autenticação TLS</string>
<string name="generated_config">Config gerado</string>
<string name="generalsettings">Configurações</string>
<string name="owner_fix">Corrija a propriedade de /dev/tun</string>
@@ -169,11 +168,16 @@
<string name="ipdns">IP e DNS</string>
<string name="basic">Básico</string>
<string name="routing">Encaminhamento</string>
+ <string name="obscure">Definições obscuras OpenVPN. Raramente necessário.</string>
<string name="advanced">Avançado</string>
+ <string name="export_config_title">Configuração Openvpn ICS</string>
<string name="faq_howto_title">Início Rápido</string>
+ <string name="setting_loadtun_summary">Tente carregar o módulo tun.ko do kernel antes de ligar. Necessita de acesso root ao dispositivo.</string>
+ <string name="setting_loadtun">Carregar o módulo tun</string>
+ <string name="getproxy_error">Erro ao obter definições proxy %s</string>
<string name="using_proxy">A utilizar proxy %1$s %2$d</string>
<string name="use_system_proxy">Usar a proxy do sistema</string>
- <string name="onbootrestart">Volte a ligar na reinicialização</string>
+ <string name="onbootrestart">Ligar no arranque</string>
<string name="ignore">Ignorar</string>
<string name="restart">Reiniciar</string>
<string name="restart_vpn_after_change">As alterações de configuração são aplicadas depois de reiniciar a VPN. Reiniciar a VPN agora?</string>
@@ -182,6 +186,7 @@
<string name="no_vpn_profiles_defined">Não há perfis de VPN definidos.</string>
<string name="add_new_vpn_hint">Use o &lt; img src = \"ic_menu_add\" / &gt; ícone para adicionar uma nova VPN</string>
<string name="vpn_import_hint">Use o &lt; img src = \"ic_menu_archive\" / &gt; ícone para importar um perfil existente (ovpn ou conf) do seu sdcard.</string>
+ <string name="faq_hint">Verifique as FAQ. Existe um guia rápido.</string>
<string name="faq_routing_title">Configuração de roteamento/Interface</string>
<string name="persistent_tun_title">Tun Persistente</string>
<string name="openvpn_log">OpenVPN Log</string>
@@ -192,6 +197,7 @@
<string name="reconnection_settings">Configurações de religação</string>
<string name="connectretrywait">Segundos entre ligações</string>
<string name="send_minidump">Enviar Minidump para desenvolvedor</string>
+ <string name="send_minidump_summary">Envia informação de depuração sobre falhas para o programador</string>
<string name="notifcation_title">OpenVPN - %s</string>
<string name="session_ipv4string">%1$s - %2$s</string>
<string name="session_ipv6string">%1$s - %3$s, %2$s</string>
@@ -210,7 +216,6 @@
<string name="state_tcp_connect">A ligar (TCP)</string>
<string name="state_auth_failed">Falha na autenticação</string>
<string name="state_nonetwork">A aguardar rede utilizável</string>
- <string name="statusline_bytecount">↓%2$s/s %1$s - ↑%4$s/s %3$s</string>
<string name="notifcation_title_notconnect">Não ligado</string>
<string name="start_vpn_title">A ligar a VPN %s</string>
<string name="start_vpn_ticker">A ligar a VPN %s</string>
@@ -233,6 +238,8 @@
<string name="remote_trust">Confio nesta aplicação.</string>
<string name="no_external_app_allowed">Nenhuma app pode usar a API externa</string>
<string name="allowed_apps">Aplicações permitidas:%s</string>
+ <string name="screenoff_title">Pausar a ligação VPN após desligar o ecrã</string>
+ <string name="screen_nopersistenttun">Aviso: Tun persistente não está ativado para esta VPN. Quando o ecrã estiver desligado o tráfego de internet usa a ligação normal.</string>
<string name="save_password">Guardar senha</string>
<string name="pauseVPN">Pausar VPN</string>
<string name="resumevpn">Retomar VPN</string>
@@ -261,8 +268,25 @@
<string name="userpw_file">Ficheiro de utilizador/senha</string>
<string name="imported_from_file">[Importado de: %s]</string>
<string name="import_log">Log de importação:</string>
+ <string name="mssfix_dialogtitle">Definir MSS do TCP payload</string>
+ <string name="client_behaviour">Comportamento cliente</string>
+ <string name="loading">A carregar&#8230;</string>
+ <string name="allowed_vpn_apps_info">Aplicações permitidas:%s</string>
+ <string name="query_delete_remote">Remover entrada do servidor remoto?</string>
+ <string name="keep">Manter</string>
+ <string name="delete">Eliminar</string>
+ <string name="server_list">Lista servidores</string>
+ <string name="vpn_allowed_apps">Aplicações permitidas</string>
+ <string name="advanced_settings">Definições avançadas</string>
+ <string name="tls_settings">Definições TLS</string>
+ <string name="duplicate_vpn">Perfil VPN duplicado</string>
+ <string name="show_log">Mostrar registo</string>
<string name="ignore_multicast_route">Ignorar caminho multicast: %s</string>
<string name="ab_only_cidr">Android apenas suporta rotas CIDR para a VPN. Pelo facto de as rotas não-CIDR quase nunca serem usadas, OpenVPN para Android irá usar uma rota /32 para rotas não-CIDR e emitir um aviso.</string>
<string name="ab_secondary_users">VPN não funcionar para utilizadores secundários.</string>
<string name="ab_only_cidr_title">Rotas não CIDR</string>
+ <string name="ab_proxy_title">Comportamento proxy para VPNs</string>
+ <string name="version_upto">%s e anteriores</string>
+ <string name="copy_of_profile">Copiar de %s</string>
+ <string name="custom_connection_options">Opções personalizadas</string>
</resources>
diff --git a/app/src/main/res/values-ro/plurals-icsopenvpn.xml b/app/src/main/res/values-ro/plurals-icsopenvpn.xml
new file mode 100755
index 00000000..8ca7bf07
--- /dev/null
+++ b/app/src/main/res/values-ro/plurals-icsopenvpn.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<resources>
+ <plurals name="months_left">
+ <item quantity="one">O lună rămasă</item>
+ <item quantity="few">%d luni rămase</item>
+ <item quantity="other">%d luni rămase</item>
+ </plurals>
+ <plurals name="days_left">
+ <item quantity="one">O zi rămasă</item>
+ <item quantity="few">%d zile rămase</item>
+ <item quantity="other">%d zile rămase</item>
+ </plurals>
+ <plurals name="hours_left">
+ <item quantity="one">O oră rămasă</item>
+ <item quantity="few">%d ore rămase</item>
+ <item quantity="other">%d ore rămase</item>
+ </plurals>
+ <plurals name="minutes_left">
+ <item quantity="one">Un minut rămas</item>
+ <item quantity="few">%d minute rămase</item>
+ <item quantity="other">%d minute rămase</item>
+ </plurals>
+</resources>
diff --git a/app/src/main/res/values-ro/strings-icsopenvpn.xml b/app/src/main/res/values-ro/strings-icsopenvpn.xml
index 856ffb06..cafe3011 100755
--- a/app/src/main/res/values-ro/strings-icsopenvpn.xml
+++ b/app/src/main/res/values-ro/strings-icsopenvpn.xml
@@ -44,13 +44,14 @@
<string name="duplicate_profile_name">Vă rugăm să introduceţi un nume de profil unic</string>
<string name="profilename">Nume profil</string>
<string name="no_keystore_cert_selected">Trebuie să selectați un certificat de utilizator</string>
+ <string name="no_ca_cert_selected">Trebuie să selectați un certificat CA</string>
<string name="no_error_found">Nu s-a găsit nici o eroare</string>
<string name="config_error_found">Eroare în configurare</string>
<string name="ipv4_format_error">Eroare parsare adresă IPv4</string>
<string name="custom_route_format_error">Eroare parsare rute particularizate</string>
<string name="pw_query_hint">(lăsaţi necompletat pentru a interoagre la cerere)</string>
<string name="vpn_shortcut">Scurtătură OpenVPN</string>
- <string name="vpn_launch_title">Conectare la VPN</string>
+ <string name="vpn_launch_title">Conectare la VPN&#8230;</string>
<string name="shortcut_profile_notfound">Profilul specificat în comanda rapidă nu a fost găsit</string>
<string name="random_host_prefix">Prefix host aleator</string>
<string name="random_host_summary">Adaugă 6 caractere aleatoare în faţa hostname</string>
@@ -87,7 +88,9 @@
<string name="default_route_summary">Redirecţionează tot traficul peste VPN</string>
<string name="use_default_title">FoloseÅŸte ruta default</string>
<string name="custom_route_message">Introduceţi rute particularizate. Introduceţi destinaţia în format CIDR. \"10.0.0.0/8 2002:: / 16\" va redirecta reţelele 10.0.0.0/8 şi 2002:: / 16 peste VPN.</string>
+ <string name="custom_route_message_excluded">Rute care NU ar trebui să fie direcționate prin VPN. Utilizați aceeași sintaxă ca și pentru rutele incluse.</string>
<string name="custom_routes_title">Rute particularizate</string>
+ <string name="custom_routes_title_excluded">Rețele Excluse</string>
<string name="log_verbosity_level">Nivel detaliu jurnal</string>
<string name="float_summary">Permite pachete autentificate de la orice IP</string>
<string name="float_title">Permite floating server</string>
@@ -101,6 +104,9 @@
<string name="last_openvpn_tun_config">Se deschide interfața tun:</string>
<string name="local_ip_info">Local IPv4: %1$s/%2$d IPv6: %3$s MTU: %4$d</string>
<string name="dns_server_info">Server DNS: %1$s, Domeniu: %2$s</string>
+ <string name="routes_info_incl">Rute: %1$s %2$s</string>
+ <string name="routes_info_excl">Rute excluse: %1$s %2$s</string>
+ <string name="routes_debug">Rute VpnService instalate: %1$s %2$s</string>
<string name="ip_not_cidr">S-au primit informaţiile despre interfaţă %1$s şi %2$s, presupun că a doua adresă este adresa peer a serverlui remote. Folosesc netmask /32 pentru IP local. Modul dat de OpenVPN este \"%3$s\".</string>
<string name="route_not_cidr">Nu se poate interpreta %1$s ÅŸi %2$s ca rute IP cu netmask CIDR, folosesc /32 ca netmask.</string>
<string name="route_not_netip">Am corectat ruta %1$s/%2$s ca %3$s/%2$s</string>
@@ -114,7 +120,7 @@
<string name="faq_tap_mode">Modul Tap nu este posibil folosind API-ul VPN non root. Astfel această aplicaţie nu poate oferi suport tap</string>
<string name="tap_faq2">Din nou? Glumesti? Nu, modul tap chiar nu este suportat şi trimiţând mai multe email-uri în care îl cereţi nu va ajuta.</string>
<string name="tap_faq3">A treia oară? De fapt, cineva ar putea scrie un emulator tap bazat pe tun ce ar adăuga informaţii din layer2 la trimitere şi are elimina informaţiile layer2 la primire. Dar acest emulator ar trebui sa implementeze ARP şi probabil un client DHCP. Nu sunt la curent cu cineva care lucrează la asta. Daca vreţi sa programaţi aceste funcţii mă puteţi contacta.</string>
- <string name="faq">FAQ</string>
+ <string name="faq">Întrebări frecvente</string>
<string name="copying_log_entries">Copiere linii jurnal</string>
<string name="faq_copying">Pentru a copia o singură linie din jurnal apăsaţi şi menţineţi apăsat pe acea linie. Pentru a copia/trimite întreg jurnalul folosiţi opţiunea Trimite Jurnal. Folosiţi butonul de meniu hardware dacă nu este vizibil în GUI.</string>
<string name="faq_shortcut">Shortcut pornire</string>
@@ -122,6 +128,7 @@
<string name="no_vpn_support_image">Imaginea dvs. nu suportă API-ul VPNService, îmi pare rău :(</string>
<string name="encryption">Criptare</string>
<string name="cipher_dialog_title">Alegeţi metoda de criptare</string>
+ <string name="chipher_dialog_message">Introduceți cifrul algoritmului de criptare folosit de OpenVPN. Lăsați liber pentru a utiliza cifrul implicit.</string>
<string name="auth_dialog_message">Introduceţi autentificarea digest ce este folosită de OpenVPN. Lăsaţi gol pentru digest predefinit.</string>
<string name="settings_auth">Autentificare/criptare</string>
<string name="file_explorer_tab">File Explorer</string>
@@ -158,7 +165,7 @@
<string name="private_key_password">Parola cheie privată</string>
<string name="password">Parola</string>
<string name="file_icon">icon fiÅŸier</string>
- <string name="tls_authentication">autentificare TLS</string>
+ <string name="tls_authentication">Autentificare / criptare TLS</string>
<string name="generated_config">Config generat</string>
<string name="generalsettings">Setări</string>
<string name="owner_fix_summary">Încearcă să seteze owner-ul /dev/tun ca sistem. Unele imagini CM9 au nevoie de asta pentru a permite API-ului VPNService să funcţioneze. Are nevoie de root.</string>
@@ -174,6 +181,7 @@
<string name="keychain_nocacert">Nici un certificat CA nu a fost returnat la citirea din keystore-ul Android. Autentificarea probabil va eÅŸua.</string>
<string name="show_log_summary">Afişează fereastra jurnal la conectare. Fereastra jurnal poate fi accesată oricând din statusul notificare.</string>
<string name="show_log_window">Arată fereastra Jurnal</string>
+ <string name="mobile_info">%10$s %9$s rulează pe %3$s %1$s (%2$s), Android %6$s (%7$s) API %4$d, ABI %5$s, (%8$s)</string>
<string name="error_rsa_sign">Eroare semnare cu Android keystore key %1$s: %2$s</string>
<string name="faq_system_dialogs">Avertizarea la conexiunea VPN ce vă spune că această aplicaţie poate intercepta întreg traficul este impusă de sistem pentru a preveni abuzul funcţiei API VPNService.\nNotificarea de conexiune VPN(simbolul cheie)este de asemenea impusă de sistemul Android pentru a semnala o conexiune VPN în derulare. În cadrul unor imagini această notificare face şi un sunet.\nAndroid a introdus aceste notificări pentru siguranţa dvs. şi este asigurat că nu pot fi evitate. (Din păcate în anumite imagini acestea includ şi un sunet de notificare)</string>
<string name="faq_system_dialogs_title">Alertă conexiune şi sunet notificare</string>
@@ -186,6 +194,7 @@
<string name="export_config_title">Configurare Openvpn ICS</string>
<string name="warn_no_dns">Nici un server DNS utilizat. Rezolvarea de nume poate să nu funcționeze. Luați în considerare stabilirea unor servere DNS personalizate. Vă rugăm, de asemenea, rețineți că Android va continua să utilizeze setările proxy specificate pentru conexiunea mobilă/Wi-Fi atunci când nu sunt stabilite servere DNS.</string>
<string name="dns_add_error">Nu s-a putut adăuga serverul DNS \"%1$s\", respins de sistem: %2$s</string>
+ <string name="ip_add_error">Adresa IP \"%1$s\" nu a putut fi configurată, respinsă de sistem: %2$s</string>
<string name="faq_howto">&lt;p&gt;Obţineţi o configurare funcţională (testată pe calculatorul dvs. sau descărcată de la provider/companie)&lt;/p&gt;&lt;p&gt;Dacă este un singur fişier fără alte fişiere pem/pks12 puteţi să vă trimiteţi fişierul prin email şi să deschideţi ataşamentul. Daca aveţi fişiere multiple le puteţi pune pe cardul sd.&lt;/p&gt;&lt;p&gt;Click pe ataşamentul email/Folosiţi icoana director din lista de vpn-ri pentru a importa fişierul de configurare.&lt;/p&gt;&lt;p&gt;Dacă sunt erori despre fişiere lipsă le puteţi pune pe cardul sd.&lt;/p&gt;&lt;p&gt;Click pe simbolul de salvare pentru a adăuga VPN-ul importat în lista dvs. de VPN-uri&lt;/p&gt;&lt;p&gt;Conectaţi VPN-ul dând click pe numele VPN-ului&lt;/p&gt;&lt;p&gt;Dacă sunt erori/avertismente în jurnal încercaţi să le înţelegeţi şi să le reparaţi&lt;/p&gt; </string>
<string name="faq_howto_title">Pornire rapidă</string>
<string name="setting_loadtun_summary">Încearcă încărcarea modului kernel tun.ko înainte de conectare. Are nevoie de un device root-at.</string>
@@ -195,9 +204,8 @@
<string name="using_proxy">Folosesc proxy %1$s %2$d</string>
<string name="use_system_proxy">FoloseÅŸte proxy sistem</string>
<string name="use_system_proxy_summary">FoloseÅŸte configurarea sistem pentru proxy HTTP/HTTPS folosit la conectare.</string>
- <string name="donatewithpaypal">Puteţi &lt;a href=\"https://www.paypal.com/cgi-bin/webscr?hosted_button_id=R2M6ZP9AF25LS&amp;amp;cmd=_s-xclick\"&gt;dona prin PayPal&lt;/a&gt; </string>
- <string name="onbootrestartsummary">OpenVPN va reconecta un VPN dacă a fost activ la reboot/shutdown. Citiţi avertizarea la Conexiune din FAQ înainte de a folosi această funcţie.</string>
- <string name="onbootrestart">Reconectarea la reboot</string>
+ <string name="onbootrestartsummary">OpenVPN va conecta VPN-ul specificat dacă vs fi activ la pornirea sistemului. Citiți întrebările frecvente privind avertizare de conexiune înainte de a utiliza această opțiune pe Android &lt; 5.0.</string>
+ <string name="onbootrestart">Conectare la pornire</string>
<string name="ignore">Ignora</string>
<string name="restart">Restart</string>
<string name="restart_vpn_after_change">Schimbările de configurare vor fi aplicate după restartarea VPN-ului. (Re)startaţi VPN-ul acum?</string>
@@ -210,6 +218,7 @@
<string name="vpn_import_hint">Folosiţi icoana &lt;img src=\"ic_menu_archive\"/&gt; pentru a importa un profil existent (.ovpn sau .conf) de pe cardul sd.</string>
<string name="faq_hint">Verificaţi şi FAQ. Acolo este ghid rapid de utilizare.</string>
<string name="faq_routing_title">Configurare Rutare/Interfaţă</string>
+ <string name="faq_routing">Rutarea și configurarea interfaței nu este făcută prin comenzile tradiționale ifconfig / route, ci prin utilizarea API-ului VPNService. Acest lucru are ca rezultat o altă configurație de rutare decât pe alte sisteme de operare. \nConfigurarea tunelului VPN constă în adresa IP și în rețelele prin care ar trebui să fie direcționată această interfață. În mod special, nu este necesară nicio adresă de peer sau o adresă de gateway. Nu sunt necesare rute speciale pentru a ajunge la serverul VPN (de exemplu, adăugate atunci când utilizați gateway-ul de redirecționare). Prin urmare, aplicația va ignora aceste setări atunci când importează o configurație. Aplicația asigură cu API-ul VPNService că conexiunea la server nu este direcționată prin tunelul VPN. \nAPI-ul VPNService nu permite specificarea unor rețele care nu ar trebui să fie direcționate prin VPN. Pentru a evita această problemă, aplicația încearcă să detecteze rețele care nu ar trebui să fie direcționate către tunel (de exemplu, route x.x.x.x y.y.y.y net_gateway) și calculează un set de rute care exclude aceste rute pentru a emula comportamentul altor platforme. Ferestrele de jurnal arată configurația serviciului VPNService la stabilirea conexiunii. \nPS: Android 4.4+ folosește rutarea politică. Utilizarea route/ifconfig nu va afișa rutele instalate. În schimb, utilizați regulile ip, iptables -t mangle -L</string>
<string name="persisttun_summary">Nu reveni la nici o conexiune VPN câtă vreme OpenVPN se reconectează.</string>
<string name="persistent_tun_title">Tun persistent</string>
<string name="openvpn_log">jurnal OpenVPN</string>
@@ -243,7 +252,7 @@
<string name="state_tcp_connect">Se conectează (TCP)</string>
<string name="state_auth_failed">Autentificare a eÅŸuat</string>
<string name="state_nonetwork">Se aşteaptă o reţea utilizabilă</string>
- <string name="statusline_bytecount">↓%2$s/s %1$s - ↑%4$s/s %3$s</string>
+ <string name="statusline_bytecount">↓%2$s %1$s - ↑%4$s %3$s</string>
<string name="notifcation_title_notconnect">Nu este conectat</string>
<string name="start_vpn_title">Conectare la VPN %s</string>
<string name="start_vpn_ticker">Conectare la VPN %s</string>
@@ -265,6 +274,7 @@
<string name="tls_remote_deprecated">tls-remote (ÃŽNVECHIT)</string>
<string name="help_translate">Puteţi ajuta la traducere vizitând http://crowdin.net/project/ics-openvpn/invite</string>
<string name="prompt">%1$s încercări de a controla %2$s</string>
+ <string name="remote_warning">Continuând, daţi permisiunea aplicaţiei de a controla complet OpenVPN pentru Android și de a intercepta tot traficul de rețea. <b>Nu acceptaţi decât dacă aveți încredere în aplicație</b> În caz contrar, riscaţi să aveţi datele compromise de software maliţios.\"</string>
<string name="remote_trust">Am încredere în această aplicaţie.</string>
<string name="no_external_app_allowed">Nici o aplicaţie nu are permisiunea de a folosi API-ul extern</string>
<string name="allowed_apps">Aplicaţii permise: %s</string>
@@ -274,4 +284,162 @@
<string name="screenoff_pause">Se suspendă conexiunea în starea ecran oprit: mai puţin de %1$s în %2$s</string>
<string name="screen_nopersistenttun">Atenție: TUN persistent nu este activat pentru acest VPN. Traficul va utiliza conexiunea Internet normala atunci când ecranul este oprit.</string>
<string name="save_password">Salvare parola</string>
+ <string name="pauseVPN">Pauză VPN</string>
+ <string name="resumevpn">Reluare VPN</string>
+ <string name="state_userpause">Întrerupere VPN solicitată de utilizator</string>
+ <string name="state_screenoff">VPN întrerupt - ecran stins</string>
+ <string name="device_specific">Trucuri specifice dispozitivului</string>
+ <string name="cannotparsecert">Nu se pot afișa informații privind certificatul</string>
+ <string name="appbehaviour">Comportamentul aplicației</string>
+ <string name="vpnbehaviour">Comportamentul VPN</string>
+ <string name="allow_vpn_changes">Permite modificări la Profilurile VPN</string>
+ <string name="hwkeychain">Hardware Keystore:</string>
+ <string name="permission_icon_app">Iconița aplicației care încearcă să utilizeze OpenVPN pentru Android</string>
+ <string name="faq_vpndialog43">"Începând cu versiunea Android 4.3, confirmarea VPN este protejată împotriva \"suprapunerii aplicațiilor\", și din acest motiv căsuța de dialog nu răspunde la atingere. Dacă aveți o aplicație care folosește suprapuneri, aceasta poate cauza acest comportament și contactați autorul acelei aplicații. Această problemă afectează toate aplicațiile VPN pe Android 4.3 și versiuni ulterioare. A se vedea, de asemenea, &lt;a href=\"https://github.com/schwabe/ics-openvpn/issues/185\"&gt;Issue 185&lt;a&gt; pentru detalii suplimentare"</string>
+ <string name="faq_vpndialog43_title">Dialog de Confirmare VPN</string>
+ <string name="donatePlayStore">Alternativ puteţi dona prin Play Store:</string>
+ <string name="thanks_for_donation">Vă mulțumim că ați donat %s!</string>
+ <string name="logCleared">Jurnal șters.</string>
+ <string name="show_password">Arată parola</string>
+ <string name="keyChainAccessError">KeyChain eroare de acces: %s</string>
+ <string name="timestamp_short">Scurt</string>
+ <string name="timestamp_iso">ISO</string>
+ <string name="timestamps">Marcaj de timp</string>
+ <string name="timestamps_none">Nici unul</string>
+ <string name="uploaded_data">Încărcare</string>
+ <string name="downloaded_data">Descărcare</string>
+ <string name="vpn_status">Stare VPN</string>
+ <string name="logview_options">Vezi opţiuni</string>
+ <string name="unhandled_exception">Excepție netrată: %1$s\n\n%2$s</string>
+ <string name="unhandled_exception_context">%3$s: %1$s\n\n%2$s</string>
+ <string name="faq_system_dialog_xposed">Dacă aveți dispozitivul Android rootat, puteți instala &lt;a href=\"http://xposed.info/\"&gt;Xposed&lt;/a&gt; și &lt;a href=\"http://repo.xposed.info/module/de.blinkt.vpndialogxposed\"&gt;modulul Dialog de Confirmare VPN&lt;/a&gt; pe propriul risc\"</string>
+ <string name="full_licenses">Licențe complete</string>
+ <string name="blocklocal_summary">Rețelele conectate direct la interfețele locale nu vor fi rutate prin VPN. Dacă dezactivați această opțiune, veți redirecționa prin VPN întregul trafic intenționat pentru rețelele locale.</string>
+ <string name="blocklocal_title">Bypass VPN pentru rețelele locale</string>
+ <string name="userpw_file">Fișier de utilizator și parolă</string>
+ <string name="imported_from_file">[Importat din %s]</string>
+ <string name="files_missing_hint">Unele fișiere nu au putut fi găsite. Selectați fișierele pentru a importa profilul:</string>
+ <string name="openvpn_is_no_free_vpn">Pentru a utiliza această aplicație, aveți nevoie de un furnizor VPN / gateway VPN care să suporte OpenVPN (adesea furnizat de angajatorul dvs.). Consultați http://community.openvpn.net/ pentru mai multe informații despre OpenVPN și despre configurarea propriului server OpenVPN.</string>
+ <string name="import_log">Jurnal de import:</string>
+ <string name="ip_looks_like_subnet">Topologia VPN \"%3$s\" este specificată, dar ifconfig %1$s %2$s arată mai mult ca o adresă IP cu o mască de rețea. Utilizăm topologia \"subrețelei\".</string>
+ <string name="mssfix_invalid_value">Valoarea de suprascriere MSS trebuie să fie un număr întreg între 0 și 9000</string>
+ <string name="mtu_invalid_value">Valoarea suprascrierii MTU trebuie să fie un număr întreg între 64 și 9000</string>
+ <string name="mssfix_value_dialog">Anunțați sesiunile TCP care rulează prin tunel că ar trebui să limiteze dimensiunile pachetelor de trimitere astfel încât, după ce OpenVPN le-a încapsulat, dimensiunea pachetului UDP rezultat pe care OpenVPN o trimite la partenerii săi nu va depăși acest număr de biți. (Implicit este 1450)</string>
+ <string name="mssfix_checkbox">Suprascrie valoarea MSS a datelor utile TCP</string>
+ <string name="mssfix_dialogtitle">Setați MSS a datelor utile TCP</string>
+ <string name="client_behaviour">Comportamentul clientului</string>
+ <string name="clear_external_apps">Ștergeți aplicațiile externe permise</string>
+ <string name="loading">Se încarcă&#8230;</string>
+ <string name="allowed_vpn_apps_info">Aplicaţii VPN permise: %1$s</string>
+ <string name="disallowed_vpn_apps_info">Aplicaţii VPN nepermise: %1$s</string>
+ <string name="app_no_longer_exists">Pachetul %s nu mai este instalat, eliminați-l din lista de acces / dezactivare a aplicației</string>
+ <string name="vpn_disallow_radio">VPN este utilizat pentru toate aplicațiile, cu excepția celor selectate</string>
+ <string name="vpn_allow_radio">VPN este utilizat numai pentru aplicațiile selectate</string>
+ <string name="query_delete_remote">Eliminați serverul la distanță?</string>
+ <string name="keep">Păstrează</string>
+ <string name="delete">Åžterge</string>
+ <string name="add_remote">Adăugați distanță nouă</string>
+ <string name="remote_random">Utilizați intrări de conectare în ordine aleatorie la conectare</string>
+ <string name="remote_no_server_selected">Trebuie să definiți și să activați cel puțin un server de la distanță.</string>
+ <string name="server_list">Listă de Servere</string>
+ <string name="vpn_allowed_apps">Aplicații Permise</string>
+ <string name="advanced_settings">Setări Avansate</string>
+ <string name="payload_options">Opțiuni de încărcare</string>
+ <string name="tls_settings">Setări TLS</string>
+ <string name="no_remote_defined">Nici o sursă la distanţă definită</string>
+ <string name="duplicate_vpn">Profil VPN duplicat</string>
+ <string name="duplicate_profile_title">Duplicând profilul: %s</string>
+ <string name="show_log">Arată jurnal</string>
+ <string name="faq_android_clients">Există mai mulți clienți OpenVPN pentru Android. Cele mai frecvente sunt OpenVPN pentru Android (acest client), OpenVPN Connect și OpenVPN Settings.&lt;p&gt;Clientii pot fi grupați în două grupuri: OpenVPN pentru Android și OpenVPN Connect utilizează API-ul oficial VPNService (Android 4.0+) și nu necesită root și OpenVPN Settings care utilizează root.&lt;p&gt;OpenVPN pentru Android sunt un client open source și este dezvoltat de Arne Schwabe. Este destinat utilizatorilor mai avansați și oferă multe setări și posibilitatea de a importa profiluri din fișiere și de a configura / schimba profiluri în interiorul aplicației. Clientul se bazează pe versiunea comunității OpenVPN. Se bazează pe codul sursă OpenVPN 2.x. Acest client poate fi văzut ca client semi-oficial al comunității. &lt;p&gt;OpenVPN Connect este un client non-open source care este dezvoltat de OpenVPN Technologies, Inc. Clientul este gândit să fie client de uz general și orientat mai mult spre utilizatorul mediu și permite importul de profile OpenVPN. Acest client se bazează pe reimplementarea OpenVPN C++ a protocolului OpenVPN (aceasta a fost necesară pentru a permite OpenVPN Technologies, Inc. să publice o aplicație iOS OpenVPN). Acest client este clientul oficial al tehnologiilor OpenVPN &lt;p&gt; OpenVPN Settings este cel mai vechi dintre clienți și, de asemenea, o interfață utilizator pentru OpenVPN open source. Spre deosebire de OpenVPN pentru Android, aceasta necesită root și nu utilizează API-ul VPNService. Nu depinde de Android 4.0+</string>
+ <string name="faq_androids_clients_title">Diferențele dintre clienții OpenVPN Android</string>
+ <string name="ignore_multicast_route">Ignorarea rutei multicast: %s</string>
+ <string name="ab_only_cidr">Android acceptă doar rute CIDR către VPN. Din moment ce rutele non-CIDR nu sunt aproape niciodată folosite, OpenVPN pentru Android va folosi o /32 pentru rute care nu sunt CIDR și emite un avertisment.</string>
+ <string name="ab_tethering_44">Funcția tethering funcționează în timp ce VPN-ul este activ. Conexiunea legată NU va utiliza VPN-ul.</string>
+ <string name="ab_kitkat_mss">Primele versiuni KitKat setao o valoare MSS greșită pe conexiunile TCP (#61948). Încercați să activați opțiunea mssfix pentru a rezolva această eroare.</string>
+ <string name="ab_proxy">Android va continua să utilizeze setările proxy specificate pentru conexiunea mobilă/Wi-Fi atunci când nu sunt setate servere DNS. OpenVPN pentru Android vă va avertiza despre acest lucru în fișierul log.<p>Când VPN stabilește un server DNS, Android nu va utiliza un proxy. Nu există niciun API pentru a seta un proxy pentru o conexiune VPN.</p></string>
+ <string name="ab_lollipop_reinstall">Aplicațiile VPN pot să nu mai funcționeze când sunt dezinstalate și reinstalate din nou. Pentru detalii, a se vedea #80074</string>
+ <string name="ab_not_route_to_vpn">IP-ul client configurat și IP-urile din masca sa de rețea nu sunt direcționate către VPN. OpenVPN funcționează în jurul acestui bug prin adăugarea explicită a unui traseu care corespunde IP-ului client și netmask-ului său</string>
+ <string name="ab_persist_tun">Deschiderea unui dispozitiv tun în timp ce un alt dispozitiv tun este activ, care este utilizat pentru suportul tun persistent, blochează serviciile VPN de pe dispozitiv. Este necesară o repornire pentru ca VPN să funcționeze din nou. OpenVPN pentru Android încearcă să evite redeschiderea dispozitivului tun și, dacă este necesar, mai întâi închide TUN-ul curent înainte de a deschide noul dispozitiv TUN pentru a evita accidentarea. Acest lucru poate duce la o fereastră scurtă în care pachetele sunt trimise prin conexiunea non-VPN. Chiar și cu această soluție, VPNServices se blochează uneori și necesită repornirea dispozitivului.</string>
+ <string name="ab_secondary_users">VPN nu funcționează deloc pentru utilizatorii secundari.</string>
+ <string name="ab_kitkat_reconnect">"Mai mulți utilizatori raportează că conexiunea mobilă/conexiunea de date mobilă se deconectează des în timp ce utilizați aplicația VPN. Comportamentul pare să afecteze numai o combinație de furnizori/dispozitive mobile și până în prezent nu a putut fi identificată nici o cauză/soluție pentru acest bug."</string>
+ <string name="ab_vpn_reachability_44">Numai destinația poate fi atinsă prin VPN care poate fi accesată fără VPN. Porturile IPv6 VPN nu funcționează deloc.</string>
+ <string name="ab_only_cidr_title">Rute non-CIDR</string>
+ <string name="ab_proxy_title">Comportamentul proxy pentru VPN-uri</string>
+ <string name="ab_lollipop_reinstall_title">Reinstalarea aplicațiilor VPN</string>
+ <string name="version_upto">%s sau mai puțin</string>
+ <string name="copy_of_profile">Copie a %s</string>
+ <string name="ab_not_route_to_vpn_title">Rutează prin adresa IP configurată</string>
+ <string name="ab_kitkat_mss_title">Valoare MSS greșită pentru conexiunea VPN</string>
+ <string name="ab_secondary_users_title">Utilizatori de tablete secundari</string>
+ <string name="custom_connection_options_warng">Specificați opțiunile specifice conexiunii personalizate. Folosiți cu grijă</string>
+ <string name="custom_connection_options">Opţiunile Particularizate</string>
+ <string name="remove_connection_entry">Ștergeți conexiunea</string>
+ <string name="ab_kitkat_reconnect_title">Se deconectează aleatoriu de la rețeaua mobilă</string>
+ <string name="ab_vpn_reachability_44_title">Rețelele la distanță nu sunt accesibile</string>
+ <string name="ab_persist_tun_title">Păstrați modul tun</string>
+ <string name="version_and_later">%s şi mai târziu</string>
+ <string name="tls_cipher_alert_title">Conexiunile eșuează cu SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure</string>
+ <string name="tls_cipher_alert">Noile versiuni OpenVPN pentru Android (0.6.29 / martie 2015) utilizează o setare implicită mai sigură pentru suitele de cifruri permise (codul \"DEFAULT:!EXP:!PSK:!SRP:!KRSA\"). Din nefericire, omiterea suitelor de cifruri mai puțin sigure și a suitelor de cifruri de export, în special omiterea suitelor de cifru care nu acceptă Perfect Forward Secrecy (Diffie-Hellman) crează unele probleme. Acest lucru este cauzat, de obicei, de o încercare bine intenționată, dar prost executată, de a consolida securitatea TLS prin setarea tls-cipher pe server sau pe anumite sisteme embedded cu SSL (de ex. MikroTik).\nPentru a rezolva această problemă, setați tls-chipher settings de pe server la implicit ca TLS-cipher \"DEFAULT:!EXP:!PSK:!SRP:!KRSA\". Pentru a rezolva problema pe client, adăugați opțiunea personalizată tls-cipher DEFAULT pe clientul Android.</string>
+ <string name="message_no_user_edit">Acest profil a fost adăugat dintr-o aplicație externă (%s) și a fost marcat ca nemodificabil de utilizator.</string>
+ <string name="crl_file">Lista de revocare a certificatelor</string>
+ <string name="service_restarted">Repornirea serviciului OpenVPN (aplicația s-a blocat probabil a blocat sau terminat pentru presiunea de memorie)</string>
+ <string name="import_config_error">Importarea configurației a dat o eroare, nu se poate salva</string>
+ <string name="Search">Căutare</string>
+ <string name="lastdumpdate">(Ultimul dump este %1$d:%2$dh old (%3$s))</string>
+ <string name="clear_log_on_connect">Ştergeți log-uri la conexiune nouă</string>
+ <string name="connect_timeout">Timp de expirare a conexiunii</string>
+ <string name="no_allowed_app">Nu a fost adăugată nicio aplicație permisă. Adăugându-ne (%s) să aibă cel puțin o aplicație în lista de aplicații permise pentru a nu permite tuturor aplicațiilor</string>
+ <string name="query_permissions_sdcard">OpenVPN pentru Android poate încerca să găsească automat fișierele lipsă pe cardul sdcard. Apăsați acest mesaj să porniți cererea de permisiune.</string>
+ <string name="protocol">Protocol</string>
+ <string name="enabled_connection_entry">Activat</string>
+ <string name="abi_mismatch">Precedența ABI-ului nativ preferat a acestui dispozitiv (%1$s) și ABI-ul raportat de bibliotecile native (%2$s) diferă</string>
+ <string name="permission_revoked">Permisiunea VPN revocată de sistemul de operare (de exemplu, a pornit un alt program VPN), se oprește VPN</string>
+ <string name="pushpeerinfo">Pasați informații de la Peer</string>
+ <string name="pushpeerinfosummary">Trimiteți informații suplimentare serverului, de exemplu, versiunea SSL și versiunea Android</string>
+ <string name="pw_request_dialog_title">Aveți nevoie de %1$s</string>
+ <string name="pw_request_dialog_prompt">Introduceți parola pentru profilul %1$s</string>
+ <string name="menu_use_inline_data">Utilizați date inline</string>
+ <string name="export_config_chooser_title">Exportați fișierul de configurare</string>
+ <string name="missing_tlsauth">Fișierul tls-auth lipsește</string>
+ <string name="missing_certificates">Lipsește certificatul de utilizator sau fișierul certificat cheie</string>
+ <string name="missing_ca_certificate">Certificatul CA lipsește</string>
+ <string name="crl_title">Lista de certificate revocate (opțional)</string>
+ <string name="reread_log">Recitesc (%d) elemente de log din fișierul de cache log</string>
+ <string name="samsung_broken">Chiar dacă telefoanele Samsung sunt printre cele mai vândute telefoane Android, firmware-ul Samsung este, de asemenea, printre cele mai pline de bug-uri firmware-uri Android. Bugurile nu se limitează la operațiunile VPN pe aceste dispozitive, dar multe dintre ele pot fi rezolvate. În continuare sunt descrise unele dintre aceste erori. \n\nDNS-ul nu funcționează decât dacă serverul DNS din gama VPN. \n\nPe multe dispozitive Samsung 5.x, funcția permis/nepermis a aplicațiilor nu funcționează. \nPe Samsung 6.x VPN-ul este raportat că nu funcționează decât dacă aplicația VPN este exceptată de la caracteristicile Powersave.</string>
+ <string name="samsung_broken_title">Telefoanele Samsung</string>
+ <string name="novpn_selected">Niciun VPN selectat.</string>
+ <string name="defaultvpn">VPN prestabilit</string>
+ <string name="defaultvpnsummary">VPN utilizat în locurile unde este necesară o rețea VPN implicită. Acestea sunt în prezent la pornire, pentru Always-On și placa Quick Settings.</string>
+ <string name="vpnselected">VPN selectat în prezent: \'%s\'</string>
+ <string name="reconnect">Reconectaţi</string>
+ <string name="qs_title">Comutare VPN</string>
+ <string name="qs_connect">Conectați-vă la %s</string>
+ <string name="qs_disconnect">Deconectați %s</string>
+ <string name="connectretrymaxmessage">Introduceți timpul maxim între încercările de conectare. OpenVPN va crește lent timpul de așteptare după o încercare de conexiune nereușită până la această valoare. Valoarea implicită este de 300 secunde.</string>
+ <string name="connectretrymaxtitle">Durata maximă între încercările de conectare</string>
+ <string name="state_waitconnectretry">Se așteaptă %s secunde până la următoarea conectare</string>
+ <string name="nought_alwayson_warning"><![CDATA[Dacă nu ați primit un dialog de confirmare VPN, aveți activată \"Always on VPN\" pentru o altă aplicație. În acest caz, numai acelei aplicații i se permite să se conecteze la o rețea VPN. Verificați din Setări-> Rețele mai .. -> VPNS]]></string>
+ <string name="management_socket_closed">Conexiunea la OpenVPN a fost închisă (%s)</string>
+ <string name="change_sorting">Modificați sortarea</string>
+ <string name="sort">Sortare</string>
+ <string name="sorted_lru">Profiluri ordonate după ultima utilizare recentă</string>
+ <string name="sorted_az">Profiluri sortate după nume</string>
+ <string name="deprecated_tls_remote">Config utilizează opțiunea tls-remote, care a fost depreciată în 2.3 și, în final, eliminată în 2.4</string>
+ <string name="auth_failed_behaviour">Comportament pentru AUTH_FAILED</string>
+ <string name="graph">Grafic</string>
+ <string name="use_logarithmic_scale">Utilizați scala logaritmică</string>
+ <string name="notenoughdata">Nu există date suficiente</string>
+ <string name="avghour">Media pe oră</string>
+ <string name="avgmin">Media pe minut</string>
+ <string name="last5minutes">Ultimele 5 minute</string>
+ <string name="data_in">Intrare</string>
+ <string name="data_out">Ieșire</string>
+ <string name="bits_per_second">%.0f bit/s</string>
+ <string name="kbits_per_second">%.1f kbit/s</string>
+ <string name="mbits_per_second">%.1f Mbit/s</string>
+ <string name="gbits_per_second">%.1f Gbit/s</string>
+ <string name="volume_byte">%.0f B</string>
+ <string name="volume_kbyte">%.1f kB</string>
+ <string name="volume_mbyte">%.1f MB</string>
+ <string name="volume_gbyte">%.1f GB</string>
</resources>
diff --git a/app/src/main/res/values-ru/plurals-icsopenvpn.xml b/app/src/main/res/values-ru/plurals-icsopenvpn.xml
new file mode 100755
index 00000000..fc40574a
--- /dev/null
+++ b/app/src/main/res/values-ru/plurals-icsopenvpn.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<resources>
+ <plurals name="months_left">
+ <item quantity="one">ОÑталÑÑ %d меÑÑц</item>
+ <item quantity="few">ОÑталоÑÑŒ %d меÑÑца</item>
+ <item quantity="other">ОÑталоÑÑŒ %d меÑÑцев</item>
+ </plurals>
+ <plurals name="days_left">
+ <item quantity="one">ОÑталÑÑ %d день</item>
+ <item quantity="few">ОÑталоÑÑŒ %d днÑ</item>
+ <item quantity="other">ОÑталоÑÑŒ %d дней</item>
+ </plurals>
+ <plurals name="hours_left">
+ <item quantity="one">ОÑталÑÑ %d чаÑ</item>
+ <item quantity="few">ОÑталоÑÑŒ %d чаÑа</item>
+ <item quantity="other">ОÑталоÑÑŒ %d чаÑов</item>
+ </plurals>
+ <plurals name="minutes_left">
+ <item quantity="one">ОÑталаÑÑŒ %d минута</item>
+ <item quantity="few">ОÑталоÑÑŒ %d минуты</item>
+ <item quantity="other">ОÑталоÑÑŒ %d минут</item>
+ </plurals>
+</resources>
diff --git a/app/src/main/res/values-ru/strings-icsopenvpn.xml b/app/src/main/res/values-ru/strings-icsopenvpn.xml
index f7419e2c..faa4ef22 100755
--- a/app/src/main/res/values-ru/strings-icsopenvpn.xml
+++ b/app/src/main/res/values-ru/strings-icsopenvpn.xml
@@ -17,10 +17,10 @@
<string name="client_no_certificate">Ðет Ñертификата</string>
<string name="client_certificate_title">Сертификат клиента</string>
<string name="client_key_title">Ключ Ñертификата клиента</string>
- <string name="client_pkcs12_title">PKCS12 файл</string>
- <string name="ca_title">CA Ñертификат</string>
- <string name="no_certificate">Вам необходимо выбрать Ñертификат</string>
- <string name="copyright_guicode">ИÑходники и Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾ верÑиÑÑ… находÑÑ‚ÑÑ Ð¿Ð¾ адреÑу http://code.google.com/p/ics-openvpn/</string>
+ <string name="client_pkcs12_title">Файл PKCS12</string>
+ <string name="ca_title">Сертификат ЦС</string>
+ <string name="no_certificate">Ðеобходимо выбрать Ñертификат</string>
+ <string name="copyright_guicode">ИÑходный код и отÑлеживание проблем доÑтупны на https://github.com/schwabe/ics-openvpn/</string>
<string name="copyright_others">Ð”Ð°Ð½Ð½Ð°Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð° иÑпользует Ñледующие компоненты; Ñмотрите иÑходный код Ð´Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð´Ñ€Ð¾Ð±Ð½Ð¾Ð¹ информации о лицензии</string>
<string name="about">О программе</string>
<string name="vpn_list_title">Профили</string>
@@ -30,44 +30,45 @@
<string name="file_nothing_selected">Вы должны выбрать файл</string>
<string name="useTLSAuth">ИÑпользовать аутентификацию TLS</string>
<string name="tls_direction">Ðаправление проверки TLS</string>
- <string name="ipv6_dialog_tile">Введите адреÑ/маÑку подÑети IPv6 в формате CIDR (например 2000:dd::23/64)</string>
- <string name="ipv4_dialog_title">Введите адреÑ/маÑку подÑети IPv4 в формате CIDR (например 1.2.3.4/24)</string>
+ <string name="ipv6_dialog_tile">Введите адреÑ/маÑку подÑети IPv6 в формате CIDR (например, 2000:dd::23/64)</string>
+ <string name="ipv4_dialog_title">Введите адреÑ/маÑку подÑети IPv4 в формате CIDR (например, 1.2.3.4/24)</string>
<string name="ipv4_address">ÐÐ´Ñ€ÐµÑ IPv4</string>
<string name="ipv6_address">ÐÐ´Ñ€ÐµÑ IPv6</string>
<string name="custom_option_warning">Введите дополнительные параметры OpenVPN. ИÑпользуйте Ñту возможноÑÑ‚ÑŒ Ñ Ð±Ð¾Ð»ÑŒÑˆÐ¾Ð¹ оÑторожноÑтью. ЕÑли вы Ñчитаете, что отÑутÑтвует важный параметр, ÑвÑжитеÑÑŒ Ñ Ð°Ð²Ñ‚Ð¾Ñ€Ð¾Ð¼</string>
<string name="auth_username">Ð˜Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ</string>
<string name="auth_pwquery">Пароль</string>
<string name="static_keys_info">Ð”Ð»Ñ ÐºÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ð¸ Ñ Ñтатичными Ñертификатами будут иÑпользоватьÑÑ ÐºÐ»ÑŽÑ‡Ð¸ TLS</string>
- <string name="configure_the_vpn">ÐаÑтройка VPN-туннелÑ</string>
+ <string name="configure_the_vpn">ÐаÑтройка VPN</string>
<string name="menu_add_profile">Добавить конфигурацию</string>
<string name="add_profile_name_prompt">Введите название новой конфигурации</string>
<string name="duplicate_profile_name">ПожалуйÑта, введите уникальное название конфигурации</string>
<string name="profilename">Ðазвание конфигурации</string>
<string name="no_keystore_cert_selected">Ðеобходимо выбрать Ñертификат пользователÑ</string>
+ <string name="no_ca_cert_selected">Ðеобходимо выбрать Ñертификат ЦС</string>
<string name="no_error_found">Ошибок не найдено</string>
<string name="config_error_found">Ошибка в конфигурации</string>
<string name="ipv4_format_error">Ðевозможно раÑпознать IPv4 адреÑ</string>
<string name="custom_route_format_error">Ðевозможно раÑпознать пользовательÑкие маршруты</string>
<string name="pw_query_hint">(оÑтавьте пуÑтым Ð´Ð»Ñ Ð·Ð°Ð¿Ñ€Ð¾Ñа по требованию)</string>
<string name="vpn_shortcut">Ярлык OpenVPN</string>
- <string name="vpn_launch_title">ПодключитьÑÑ Ðº VPN</string>
+ <string name="vpn_launch_title">Подключение к VPN&#8230;</string>
<string name="shortcut_profile_notfound">Ðе найден профиль, указанный в Ñрлыке</string>
<string name="random_host_prefix">Случайный Ð¿Ñ€ÐµÑ„Ð¸ÐºÑ ÑƒÐ·Ð»Ð°</string>
<string name="random_host_summary">ДобавлÑет 6 Ñлучайных Ñимволов перед именем хоÑта</string>
<string name="custom_config_title">Включить пользовательÑкие параметры</string>
<string name="custom_config_summary">ПользовательÑкие параметры. ИÑпользуйте Ñ Ð¾ÑторожноÑтью!</string>
- <string name="route_rejected">Маршрут отвергнут Android</string>
- <string name="cancel_connection">Отключение</string>
+ <string name="route_rejected">Маршрут отклонен Android</string>
+ <string name="cancel_connection">Отключить</string>
<string name="cancel_connection_long">Отключить VPN</string>
<string name="clear_log">очиÑтить журнал</string>
<string name="title_cancel">Подтверждение отмены</string>
- <string name="cancel_connection_query">Отключение активных VPN/Отмена попыток подключениÑ?</string>
+ <string name="cancel_connection_query">Отключить активный VPN/отменить попытку подключениÑ?</string>
<string name="remove_vpn">Удалить VPN</string>
- <string name="check_remote_tlscert">ПроверÑет, иÑпользует ли Ñервер Ñертификаты TLS (--remote-cert-tls server)</string>
- <string name="check_remote_tlscert_title">Ожидать TLS Ñертификат от Ñервера</string>
+ <string name="check_remote_tlscert">ПроверÑет, иÑпользует ли Ñервер Ñертификат Ñ Ñерверными раÑширениÑми TLS (--remote-cert-tls server)</string>
+ <string name="check_remote_tlscert_title">Ожидать Ñерверный Ñертификат TLS</string>
<string name="remote_tlscn_check_summary">Проверка DN объекта удаленного Ñертификата</string>
<string name="remote_tlscn_check_title">Проверка имени хоÑта Ñертификата</string>
- <string name="enter_tlscn_dialog">Переключатель ÑпоÑоба проверки DN Ñертификата (e.g. C=DE, L=Paderborn, OU=Avian IP Carriers, CN=openvpn.blinkt.de)\n\nВозможные значениÑ: полный DN, RDN (Ð´Ð»Ñ Ð¿Ñ€Ð¸Ð¼ÐµÑ€Ð° openvpn.blinkt.de) или только Ð¿Ñ€ÐµÑ„Ñ„Ð¸ÐºÑ RDN Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð²ÐµÑ€ÐºÐ¸.\n\nПри иÑпользовании преффикÑа RDN, например \"Server\", Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð±ÑƒÐ´ÑƒÑ‚ \"Server-1\", \"Server-2\" и Ñ‚.д.\n\nПри пуÑтом текÑтовом поле проверка будет проводитьÑÑ Ð¿Ð¾ имени хоÑта.\n\nÐ”Ð»Ñ Ð¿Ð¾Ð´Ñ€Ð¾Ð±Ð½Ð¾Ñтей Ñмотрите руководÑтво Ð´Ð»Ñ OpenVPN 2.3.1+, раздел —verify-x509-name</string>
+ <string name="enter_tlscn_dialog">Введите значение Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð²ÐµÑ€ÐºÐ¸ DN удалённого Ñертификата (например, C=DE, L=Paderborn, OU=Avian IP Carriers, CN=openvpn.blinkt.de)\n\nВозможные значениÑ: полный DN или RDN (в примере выше openvpn.blinkt.de) или только Ð¿Ñ€ÐµÑ„Ð¸ÐºÑ RDN Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð²ÐµÑ€ÐºÐ¸.\n\nПри иÑпользовании префикÑа RDN, «Server» подойдёт Ð´Ð»Ñ Â«Server-1» и «Server-2»\n\nПри пуÑтом текÑтовом поле будет проверÑÑ‚ÑŒÑÑ, что RDN Ñовпадает Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼ узла.\n\nПодробноÑти Ñмотрите в руководÑтве OpenVPN 2.3.1+, раздел --verify-x509-name</string>
<string name="enter_tlscn_title">Объект удаленного Ñертификата</string>
<string name="tls_key_auth">Включить аутентификацию по TLS ключу</string>
<string name="tls_auth_file">Файл аутентификации TLS</string>
@@ -85,17 +86,17 @@
<string name="ignored_pushed_routes">Игнорировать поÑылаемые маршруты</string>
<string name="ignore_routes_summary">Игнорировать маршруты, поÑылаемые Ñервером.</string>
<string name="default_route_summary">ПеренаправлÑет веÑÑŒ трафик через VPN</string>
- <string name="use_default_title">ИÑпользовать маршрут по-умолчанию</string>
+ <string name="use_default_title">ИÑпользовать маршрут по умолчанию</string>
<string name="custom_route_message">Введите пользовательÑкие маршруты. Только введите Ð°Ð´Ñ€ÐµÑ Ð½Ð°Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð² формате CIDR. \"10.0.0.0/8 2002::/16\" будет иÑпользовано Ð´Ð»Ñ 10.0.0.0/8 и 2002::/16 Ñетей через VPN.</string>
- <string name="custom_route_message_excluded">Маршруты которые не Ñледует направлÑÑ‚ÑŒ через VPN. ИÑпользуйте тот-же ÑинтакÑÐ¸Ñ ÐºÐ°Ðº и в Ñлучае Ñ Ð´Ñ€ÑƒÐ³Ð¸Ð¼Ð¸ маршрутами.</string>
+ <string name="custom_route_message_excluded">Маршруты, которые не Ñледует направлÑÑ‚ÑŒ через VPN. ИÑпользуйте тот же ÑинтакÑиÑ, как и в Ñлучае Ñ Ð´Ñ€ÑƒÐ³Ð¸Ð¼Ð¸ маршрутами.</string>
<string name="custom_routes_title">ПользовательÑкие маршруты</string>
<string name="custom_routes_title_excluded">ИÑключенные Ñети</string>
- <string name="log_verbosity_level">Уровень детализации лога</string>
- <string name="float_summary">Разрешить пакеты аутентификации Ñ Ð»ÑŽÐ±Ð¾Ð³Ð¾ IP-адреÑа</string>
- <string name="float_title">Разрешать \"плавающие\" Ñервера</string>
+ <string name="log_verbosity_level">Уровень детализации журнала</string>
+ <string name="float_summary">Разрешить аутентифицированные пакеты Ñ Ð»ÑŽÐ±Ð¾Ð³Ð¾ IP-адреÑа</string>
+ <string name="float_title">Разрешить «плавающий» Ñервер</string>
<string name="custom_options_title">ПользовательÑкие параметры</string>
<string name="edit_vpn">Редактирование параметров VPN</string>
- <string name="remove_vpn_query">Удалить VPN профиль %s?</string>
+ <string name="remove_vpn_query">Удалить профиль VPN «%s»?</string>
<string name="tun_error_helpful">Ðа некоторых каÑтомных Ñборках права на /dev/tun могут быть неверными или tun-модуль может быть не включен. Ð”Ð»Ñ Ð¿Ñ€Ð¾ÑˆÐ¸Ð²ÐºÐ¸ CM9 можете попробовать иÑправить владельца прÑмо из наÑтроек программы</string>
<string name="tun_open_error">Ðе удаетÑÑ Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚ÑŒ tun интерфейÑ</string>
<string name="error">"Ошибка: "</string>
@@ -114,77 +115,77 @@
<string name="send_logfile">Отправить файл журнала</string>
<string name="send">Отправить</string>
<string name="ics_openvpn_log_file">ICS OpenVPN лог файл</string>
- <string name="copied_entry">Скопировать лог в буфер обмена</string>
+ <string name="copied_entry">ЗапиÑÑŒ журнала Ñкопирована в буфер обмена</string>
<string name="tap_mode">Режим TAP</string>
<string name="faq_tap_mode">Режим TAP невозможен на уÑтройÑтвах без root-а. ПоÑтому Ñто приложение не поддерживает TAP</string>
<string name="tap_faq2">Снова? Ð’Ñ‹ издеваетеÑÑŒ? Ðе поддерживаетÑÑ Ñ€ÐµÐ¶Ð¸Ð¼ TAP и проÑьбы к автору об Ñтом не помогут ему реализоватьÑÑ.</string>
<string name="tap_faq3">Третий раз? Ðа Ñамом деле можно было бы пиÑать ÑмулÑтор tap, оÑнованные на tun, который бы добавлÑл информацию 2 ÑƒÑ€Ð¾Ð²Ð½Ñ Ð¿Ñ€Ð¸ отправке и извлекал бы ее при получении. Ðо Ñтот ÑмулÑтор потребует также ARP и, возможно, клиента DHCP. Я не знаю никого, кто мог бы Ñтим занÑÑ‚ÑŒÑÑ. СвÑжитеÑÑŒ Ñо мной, еÑли вы хотите занÑÑ‚ÑŒÑÑ Ñтим.</string>
<string name="faq">ВопроÑÑ‹ и ответы</string>
- <string name="copying_log_entries">Копирование запиÑей лога</string>
- <string name="faq_copying">Ð”Ð»Ñ ÐºÐ¾Ð¿Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¾Ð´Ð½Ð¾Ð³Ð¾ Ñлемента журнала необходимо нажать и удерживать. Ð”Ð»Ñ ÐºÐ¾Ð¿Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ/передачи вÑего файла журнала иÑпользуйте опцию \"Отправить файл журнала\". ИÑпользуйте hardware кнопку меню, еÑли вы не в графичеÑком интерфейÑе.</string>
+ <string name="copying_log_entries">Копирование запиÑей журнала</string>
+ <string name="faq_copying">Ð”Ð»Ñ ÐºÐ¾Ð¿Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¾Ð´Ð½Ð¾Ð¹ запиÑи журнала необходимо нажать на неё и удерживать. Чтобы Ñкопировать/отправить веÑÑŒ файл журнала, иÑпользуйте опцию «Отправить файл журнала». ЕÑли она Ñкрыта, иÑпользуйте аппаратную кнопку меню.</string>
<string name="faq_shortcut">Ярлык Ð´Ð»Ñ Ð·Ð°Ð¿ÑƒÑка</string>
<string name="faq_howto_shortcut">Ð’Ñ‹ можете Ñоздать Ñрлык Ð´Ð»Ñ Ð·Ð°Ð¿ÑƒÑка OpenVPN на рабочем Ñтоле. Ð’ завиÑимоÑти от вашего Ð¾ÐºÑ€ÑƒÐ¶ÐµÐ½Ð¸Ñ Ð½ÐµÐ¾Ð±Ñ…Ð¾Ð´Ð¸Ð¼Ð¾ добавить Ñрлык или виджет.</string>
<string name="no_vpn_support_image">Ваша прошивка не поддерживает VPNService API, извините :(</string>
<string name="encryption">Шифрование</string>
<string name="cipher_dialog_title">Укажите метод шифрованиÑ</string>
- <string name="chipher_dialog_message">Укажите алгоритм шифрованиÑ, иÑпользуемый OpenVPN. ОÑтавьте пуÑтым, чтобы иÑпользовать шифрование по-умолчанию.</string>
- <string name="auth_dialog_message">Введите дайджеÑÑ‚ аутентификацию иÑпользуемую в OpenVPN. ОÑтавьте пуÑтым Ð´Ð»Ñ Ð¸ÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð¿Ð¾-умолчанию.</string>
- <string name="settings_auth">ÐвторизациÑ/шифрование</string>
+ <string name="chipher_dialog_message">Укажите алгоритм шифрованиÑ, иÑпользуемый OpenVPN. ОÑтавьте пуÑтым, чтобы иÑпользовать шифрование по умолчанию.</string>
+ <string name="auth_dialog_message">Введите хеш-функцию Ð´Ð»Ñ Ð°ÑƒÑ‚ÐµÐ½Ñ‚Ð¸Ñ„Ð¸ÐºÐ°Ñ†Ð¸Ð¸ в OpenVPN. ОÑтавьте пуÑтым Ð´Ð»Ñ Ð¸ÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð¿Ð¾ умолчанию.</string>
+ <string name="settings_auth">ÐутентификациÑ/шифрование</string>
<string name="file_explorer_tab">Обзор файлов</string>
<string name="inline_file_tab">Ð’Ñтроенный файл</string>
<string name="error_importing_file">Ошибка при импорте файла</string>
<string name="import_error_message">Ðе удалоÑÑŒ импортировать файл из файловой ÑиÑтемы</string>
<string name="inline_file_data">[[Ð’Ñтроенный файл данных]]</string>
<string name="opentun_no_ipaddr">Отказ в открытии уÑтройÑтва tun без информации об IP-адреÑе</string>
- <string name="menu_import">Импорта конфигурации из файла .ovpn</string>
+ <string name="menu_import">Импорт конфигурации из файла .ovpn</string>
<string name="menu_import_short">Импорт</string>
<string name="import_content_resolve_error">Ðе удалоÑÑŒ прочитать конфигурацию Ð´Ð»Ñ Ð¸Ð¼Ð¿Ð¾Ñ€Ñ‚Ð°</string>
<string name="error_reading_config_file">Ошибка Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ñ„Ð°Ð¹Ð»Ð° конфигурации</string>
<string name="add_profile">добавить конфигурацию</string>
<string name="import_could_not_open">Ðе удалоÑÑŒ найти файл %1$s, указанный в файле конфигурации</string>
<string name="importing_config">Импорт файла конфигурации из иÑходного %1$s</string>
- <string name="import_warning_custom_options">Ваша ÐºÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ Ð¸Ð¼ÐµÐ» неÑколько параметров, которые не входÑÑ‚ в параметры Ñтандартной конфигурации. Эти параметры были вынеÑены в пользовательÑкую конфигурацию. ПользовательÑÐºÐ°Ñ ÐºÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶Ð°ÐµÑ‚ÑÑ Ð½Ð¸Ð¶Ðµ:</string>
+ <string name="import_warning_custom_options">Ваша ÐºÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ Ð¸Ð¼ÐµÐ»Ð° неÑколько параметров, которые не входÑÑ‚ в параметры Ñтандартной конфигурации. Эти параметры были вынеÑены в пользовательÑкую конфигурацию. ПользовательÑÐºÐ°Ñ ÐºÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶Ð°ÐµÑ‚ÑÑ Ð½Ð¸Ð¶Ðµ:</string>
<string name="import_done">Файл конфигурации уÑпешно прочитан.</string>
<string name="nobind_summary">Ðе привÑзыватьÑÑ Ðº локальному адреÑу и порту</string>
<string name="no_bind">Ðе иÑпользовать привÑзки</string>
<string name="import_configuration_file">Импорт файла конфигурации</string>
<string name="faq_security_title">Ð¡Ð¾Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð±ÐµÐ·Ð¾Ð¿Ð°ÑноÑти</string>
- <string name="faq_security">"Так как OpenVPN чувÑтвителен к безопаÑноÑти, то будут разумными неÑколько замечаний отноÑительно защиты. Ð’Ñе данные на sd карте по Ñути не защищены. Каждое приложение может прочеÑÑ‚ÑŒ их (например Ñта программа не требует Ñпециальных привилегий на sd карту). Данные Ñтого Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¼Ð¾Ð³ÑƒÑ‚ быть прочитаны только им Ñамим. При иÑпользовании опции импорта Ð´Ð»Ñ cacert/cert/key в диалоговом окне файл, данные ÑохранÑÑŽÑ‚ÑÑ Ð² VPN профиле. VPN профили доÑтупны только Ñтому приложению. (Потом не забудьте удалить копии на sd карте). ÐеÑÐ¼Ð¾Ñ‚Ñ€Ñ Ð½Ð° то, что данные доÑтупны только Ñтому приложению, они вÑе еще незашифрованы. Путем Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð°Ð² админиÑтратора (рута) на телефоне или другими ÑкÑплойтами возможно извлечь данные. Также Ñохраненные пароли хранÑÑ‚ÑÑ Ð² обычном текÑтовом виде. ÐаÑтоÑтельно рекомендуетÑÑ pkcs12 файлы импортировать в android keystore."</string>
+ <string name="faq_security">"Так как OpenVPN чувÑтвителен к безопаÑноÑти, то умеÑтны будут неÑколько замечаний на её Ñчёт. Ð’Ñе данные на SD-карте по Ñути не защищены. Каждое приложение может прочеÑÑ‚ÑŒ их (например, Ñта программа не требует Ñпециальных привилегий на SD-карту). Данные Ñтого Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¼Ð¾Ð³ÑƒÑ‚ быть прочитаны только им Ñамим. При иÑпользовании опции импорта Ñертификатов и ключей в диалоговом окне данные ÑохранÑÑŽÑ‚ÑÑ Ð² профиле VPN. Профили VPN доÑтупны только Ñтому приложению. (Ðе забудьте потом удалить копии на SD-карте). ÐеÑÐ¼Ð¾Ñ‚Ñ€Ñ Ð½Ð° то, что данные доÑтупны только Ñтому приложению, они вÑÑ‘ ещё не зашифрованы. При наличии прав админиÑтратора (рута) на телефоне или через некую уÑзвимоÑÑ‚ÑŒ Ñти данные можно извлечь. Также Ñохранённые пароли хранÑÑ‚ÑÑ Ð² обычном текÑтовом виде. ÐаÑтоÑтельно рекомендуетÑÑ Ñ„Ð°Ð¹Ð»Ñ‹ pkcs12 импортировать в android keystore."</string>
<string name="import_vpn">Импорт</string>
<string name="broken_image_cert_title">Ошибка вывода выбранного Ñертификата</string>
- <string name="broken_image_cert">Произошла ошибка при попытке вызова ÑиÑтемного диалога выбора Ñертификатов Android 4.0+ Этого не должно было ÑлучитьÑÑ Ð½Ð° Ñтандартной прошивке. Может быть в вашей прошивке иÑпорчено хранилище Ñертификатов</string>
+ <string name="broken_image_cert">Произошла ошибка при попытке вызова ÑиÑтемного диалога выбора Ñертификатов Android 4.0+. Этого не должно было ÑлучитьÑÑ Ð½Ð° Ñтандартной прошивке. Может быть в вашей прошивке иÑпорчено хранилище Ñертификатов</string>
<string name="ipv4">IPv4</string>
<string name="ipv6">IPv6</string>
<string name="speed_waiting">Ожидание ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¾ ÑоÑтоÑнии&#8230;</string>
<string name="converted_profile">импортируемый профиль</string>
<string name="converted_profile_i">импортируемый профиль %d</string>
<string name="broken_images">Сломанные прошивки</string>
- <string name="broken_images_faq">&lt;p&gt;ИзвеÑтвно, что официальные прошивки HTC имеют Ñтранные проблемы Ñ Ð¼Ð°Ñ€ÑˆÑ€ÑƒÑ‚Ð¸Ð·Ð°Ñ†Ð¸ÐµÐ¹, приводÑщей к тому, что трафик не идёт через туннель (Ñм. &lt;a href=\"http://code.google.com/p/ics-openvpn/issues/detail?id=18\"&gt;Issue 18&lt;/a&gt; в баг-трекере).&lt;/p&gt;&lt;p&gt;Также ÑообщалоÑÑŒ, что в Ñтарых официальных прошивках SONY от Xperia Arc S и Xperia Ray полноÑтью отÑутÑтвует ÑÐµÑ€Ð²Ð¸Ñ VPNService (Ñм. &lt;a href=\"http://code.google.com/p/ics-openvpn/issues/detail?id=29\"&gt;Issue 29&lt;/a&gt; в баг-трекере).&lt;/p&gt;&lt;p&gt;Ð’ некоторых вÑтроенных прошивках модуль tun может отÑутÑтвовать или иметь неправильные права на файл уÑтройÑтва /dev/tun. Ðекоторые CM9 прошивки могут требовать иÑправлений опции прав в главных наÑтройках.&lt;/p&gt;&lt;p&gt;И Ñамое главное: ЕÑли у Ð²Ð°Ñ Ð¿Ñ€Ð¾ÑˆÐ¸Ð²ÐºÐ° Ñ ÑƒÐºÐ°Ð·Ð°Ð½Ð½Ñ‹Ð¼Ð¸ проблемами, Ñообщите об Ñтом производителю уÑтройÑтва. Чем больше пользователей Ñообщит о проблеме, тем больше шанÑов, что Ñтот производитель иÑправит прошивку.&lt;/p&gt;</string>
+ <string name="broken_images_faq">&lt;p&gt;ИзвеÑтно, что официальные прошивки HTC имеют Ñтранные проблемы Ñ Ð¼Ð°Ñ€ÑˆÑ€ÑƒÑ‚Ð¸Ð·Ð°Ñ†Ð¸ÐµÐ¹, приводÑщей к тому, что трафик не идёт через туннель (Ñм. &lt;a href=\"https://github.com/schwabe/ics-openvpn/issues/18\"&gt;Issue 18&lt;/a&gt; в баг-трекере).&lt;/p&gt;&lt;p&gt;Также ÑообщалоÑÑŒ, что в Ñтарых официальных прошивках SONY от Xperia Arc S и Xperia Ray полноÑтью отÑутÑтвует ÑÐµÑ€Ð²Ð¸Ñ VPNService (Ñм. &lt;a href=\"https://github.com/schwabe/ics-openvpn/issues/29\"&gt;Issue 29&lt;/a&gt; в баг-трекере).&lt;/p&gt;&lt;p&gt;Ð’ некоторых неофициальных прошивках модуль tun может отÑутÑтвовать, или файл уÑтройÑтва /dev/tun может иметь неправильные права. Ðекоторые прошивки CM9 могут требовать иÑÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð°Ð² на /dev/tun в наÑтройках «Хаки Ð´Ð»Ñ Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾ уÑтройÑтва».&lt;/p&gt;&lt;p&gt;И Ñамое главное: еÑли у Ð²Ð°Ñ Ð¿Ñ€Ð¾ÑˆÐ¸Ð²ÐºÐ° Ñ ÑƒÐºÐ°Ð·Ð°Ð½Ð½Ñ‹Ð¼Ð¸ проблемами, Ñообщите об Ñтом производителю уÑтройÑтва. Чем больше пользователей Ñообщит о проблеме, тем больше шанÑов, что производитель её иÑправит.&lt;/p&gt;</string>
<string name="pkcs12_file_encryption_key">Файл PKCS12-ключа</string>
<string name="private_key_password">Пароль закрытого ключа</string>
<string name="password">Пароль</string>
<string name="file_icon">файл значка</string>
- <string name="tls_authentication">TLS-аутентификациÑ</string>
+ <string name="tls_authentication">ÐутентификациÑ/шифрование TLS</string>
<string name="generated_config">Ð¡Ð³ÐµÐ½ÐµÑ€Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð°Ñ ÐºÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ</string>
<string name="generalsettings">ÐаÑтройки</string>
<string name="owner_fix_summary">ПопытатьÑÑ Ð¸Ð·Ð¼ÐµÐ½Ð¸Ñ‚ÑŒ владельца Ð´Ð»Ñ /dev/tun. Ðекоторые прошивки CM9 требуют Ñтого Ð´Ð»Ñ ÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ð¾Ð¹ работы API OpenVPN. ТребуетÑÑ root.</string>
<string name="owner_fix">ИÑправить права Ð´Ð»Ñ /dev/tun</string>
<string name="generated_config_summary">Показать Ñгенерированный файл конфигурации OpenVPN</string>
- <string name="edit_profile_title">Правка \"%s\"</string>
+ <string name="edit_profile_title">Правка «%s»</string>
<string name="building_configration">Создание конфигурации&#8230;</string>
- <string name="netchange_summary">Включение Ñтого параметра заÑтавит переподключатьÑÑ, еÑли ÑоÑтоÑние интернет ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ (WIFI) изменитÑÑ</string>
+ <string name="netchange_summary">ПереподключатьÑÑ, еÑли изменÑетÑÑ ÑоÑтоÑние Ñети (например, при переключении Ñ Wi-Fi на мобильную и наоборот)</string>
<string name="netchange">Переподключение при изменении Ñети</string>
<string name="netstatus">Ð¡Ñ‚Ð°Ñ‚ÑƒÑ Ñети: %s</string>
- <string name="extracahint">Сертификат CA обычно возвращаетÑÑ Ð¸Ð· хранилища Android Keystore. Укажите отдельный Ñертификат, еÑли у Ð²Ð°Ñ Ð²Ð¾Ð·Ð½Ð¸ÐºÐ»Ð¸ ошибки при проверке Ñертификата.</string>
+ <string name="extracahint">Сертификат ЦС обычно хранитÑÑ Ð² Android Keystore. Укажите отдельный Ñертификат, еÑли у Ð²Ð°Ñ Ð²Ð¾Ð·Ð½Ð¸ÐºÐ»Ð¸ ошибки при проверке Ñертификата.</string>
<string name="select_file">Выбрать</string>
- <string name="keychain_nocacert">Ðе удалоÑÑŒ получить CA из хранилища ключей Android. ÐÑƒÑ‚ÐµÐ½Ñ‚Ð¸Ñ„Ð¸ÐºÐ°Ñ†Ð¸Ñ Ð½Ðµ удалаÑÑŒ.</string>
- <string name="show_log_summary">Показывает окно журнала при подключении. Окно журнала вÑегда может быть доÑтупно из панели уведомлений.</string>
+ <string name="keychain_nocacert">Ðе удалоÑÑŒ получить Ñертификат ЦС из хранилища ключей Android. ВероÑтно, Ð°ÑƒÑ‚ÐµÐ½Ñ‚Ð¸Ñ„Ð¸ÐºÐ°Ñ†Ð¸Ñ Ð·Ð°Ð²ÐµÑ€ÑˆÐ¸Ñ‚ÑÑ Ð¾ÑˆÐ¸Ð±ÐºÐ¾Ð¹.</string>
+ <string name="show_log_summary">Показывает окно журнала при подключении. Окно журнала вÑегда доÑтупно из панели уведомлений.</string>
<string name="show_log_window">Показать окно журнала</string>
<string name="mobile_info">%10$s %9$s работает на %3$s %1$s (%2$s), Android %6$s (%7$s) API %4$d, ABI %5$s, (%8$s)</string>
<string name="error_rsa_sign">Ошибка подпиÑи Ñ Ð¸Ñпользованием ключа из хранилища Android %1$s: %2$s</string>
- <string name="faq_system_dialogs">Предупреждение VPN ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ñообщает вам, что Ñто приложение может перехватывать веÑÑŒ Ñетевой трафик, и ÑообщаетÑÑ ÑиÑтемой предупреждений VPNService API.\nИзвещение о VPN Ñоединении (Ñимвол \"Ключа\") также формируетÑÑ ÑиÑтемой Android Ð´Ð»Ñ Ñигнализации иÑходÑщего VPN ÑоединениÑ. Ð’ некоторых прошивках Ñто оповещение ÑопровождаетÑÑ Ñигналом.\nAndroid иÑпользует Ñти Ð¾Ð¿Ð¾Ð²ÐµÑ‰ÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ð²Ð°ÑˆÐµÐ¹ ÑобÑтвенной безопаÑноÑти и из Ð½ÐµÐ»ÑŒÐ·Ñ Ð¾Ð±Ð¾Ð¹Ñ‚Ð¸. (К Ñожалению, на некоторых прошивках также издаетÑÑ Ð¾Ð¿Ð¾Ð²ÐµÑ‰ÐµÐ½Ð¸Ðµ звуком)</string>
+ <string name="faq_system_dialogs">Предупреждение VPN ÑоединениÑ, говорÑщее, что Ñто приложение может перехватывать веÑÑŒ Ñетевой трафик, показываетÑÑ ÑиÑтемой Ð´Ð»Ñ Ð¿Ñ€ÐµÐ´Ð¾Ñ‚Ð²Ñ€Ð°Ñ‰ÐµÐ½Ð¸Ñ Ð·Ð»Ð¾ÑƒÐ¿Ð¾Ñ‚Ñ€ÐµÐ±Ð»ÐµÐ½Ð¸Ñ API VPNService.\nУведомление о VPN Ñоединении (Ñимвол ключа) также формируетÑÑ ÑиÑтемой Android Ð´Ð»Ñ Ñигнализации иÑходÑщего VPN ÑоединениÑ. Ð’ некоторых прошивках Ñто уведомление ÑопровождаетÑÑ Ð·Ð²ÑƒÐºÐ¾Ð¼.\nAndroid иÑпользует Ñти ÑиÑтемные ÑƒÐ²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ð²Ð°ÑˆÐµÐ¹ же ÑобÑтвенной безопаÑноÑти и их Ð½ÐµÐ»ÑŒÐ·Ñ Ð¾Ð±Ð¾Ð¹Ñ‚Ð¸. (К Ñожалению, на некоторых прошивках Ñто отноÑитÑÑ Ð¸ к звуку уведомлениÑ)</string>
<string name="faq_system_dialogs_title">Сообщение о подключении и звук уведомлениÑ</string>
- <string name="translationby">РуÑÑкий перевод от RusFox &lt;horonitel@gmail.com&gt;</string>
+ <string name="translationby">РуÑÑкий перевод от RusFox &lt;horonitel@gmail.com&gt; и многих других</string>
<string name="ipdns">IP-Ð°Ð´Ñ€ÐµÑ Ð¸ DNS</string>
<string name="basic">ОÑновные</string>
<string name="routing">МаршрутизациÑ</string>
@@ -192,40 +193,39 @@
<string name="advanced">РаÑширенные</string>
<string name="export_config_title">ICS Openvpn конфигурациÑ</string>
<string name="warn_no_dns">Серверы DNS не иÑпользуютÑÑ. Разрешение имен может не работать. РаÑÑмотрите возможноÑÑ‚ÑŒ уÑтановки пользовательÑких DNS-Ñерверов. Также обратите внимание, что Android будет продолжать иÑпользовать параметры, указанные Ð´Ð»Ñ Ð²Ð°ÑˆÐµÐ³Ð¾ мобильного/Wi-Fi ÑоединениÑ, еÑли не указаны DNS-Ñерверы.</string>
- <string name="dns_add_error">Ðе удалоÑÑŒ добавить DNS-Ñервер \"%1$s\", отклонен ÑиÑтемой: %2$s</string>
- <string name="ip_add_error">Ðе удалоÑÑŒ наÑтроить IP-Ð°Ð´Ñ€ÐµÑ \"%1$s\", Ñообщение ÑиÑтемы: %2$s</string>
- <string name="faq_howto">&lt;p&gt;ИÑпользуйте готовую конфигурацию (протеÑтированную на вашем компьютере или полученную от вашего провайдера)&lt;/p&gt;&lt;p&gt;ЕÑли Ñто проÑтой файл без pem/pks12 вы можете отправить его по email на Ñвое уÑтройÑтво. ЕÑли же Ñто неÑколько файлов, вы можете иÑпользовать их Ñо Ñвоей карты памÑти.&lt;/p&gt;&lt;p&gt;ПроÑто кликните на .conf файл или выберите его Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ меню в программе Ð´Ð»Ñ Ð¸Ð¼Ð¿Ð¾Ñ€Ñ‚Ð° конфигурации&lt;/p&gt;&lt;p&gt;ЕÑли программа выдаÑÑ‚ ошибку о нехватке некоторых файлов, проÑто помеÑтите Ñти файлы на карту памÑти&lt;/p&gt;&lt;p&gt;Ðажмите кнопку ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¸Ð¼Ð¿Ð¾Ñ€Ñ‚Ð¸Ñ€ÑƒÐµÐ¼Ð¾Ð¹ конфигурации в программу&lt;/p&gt;&lt;p&gt;ЗапуÑтите ваш VPN-тоннель нажав на его название в ÑпиÑке&lt;/p&gt;&lt;p&gt;ЕÑли при запуÑке возникли ошибки попробуйте разобратьÑÑ Ð¸ уÑтранить их.&lt;/p&gt; </string>
+ <string name="dns_add_error">Ðе удалоÑÑŒ добавить DNS-Ñервер «%1$s», отклонён ÑиÑтемой: %2$s</string>
+ <string name="ip_add_error">Ðе удалоÑÑŒ наÑтроить IP-Ð°Ð´Ñ€ÐµÑ Â«%1$s», отклонён ÑиÑтемой: %2$s</string>
+ <string name="faq_howto">&lt;p&gt;ИÑпользуйте готовую конфигурацию (протеÑтированную на вашем компьютере или полученную от вашего провайдера)&lt;/p&gt;&lt;p&gt;ЕÑли Ñто проÑтой файл без pem/pkcs12, вы можете отправить его как вложение по Ñлектронной почте на Ñвоё уÑтройÑтво. ЕÑли же файлов неÑколько, вы можете иÑпользовать их Ñо Ñвоей карты памÑти.&lt;/p&gt;&lt;p&gt;ПроÑто откройте .conf файл или выберите его в диалоге импорта (значок папки в ÑпиÑке профилей)&lt;/p&gt;&lt;p&gt;ЕÑли программа выдаÑÑ‚ ошибку о нехватке некоторых файлов, проÑто помеÑтите Ñти файлы на карту памÑти.&lt;/p&gt;&lt;p&gt;Ðажмите кнопку ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¸Ð¼Ð¿Ð¾Ñ€Ñ‚Ð¸Ñ€ÑƒÐµÐ¼Ð¾Ð¹ конфигурации в программу&lt;/p&gt;&lt;p&gt;ЗапуÑтите ваш VPN-тоннель, нажав на его название в ÑпиÑке&lt;/p&gt;&lt;p&gt;ЕÑли при запуÑке возникли ошибки, попробуйте разобратьÑÑ Ð¸ уÑтранить их.&lt;/p&gt; </string>
<string name="faq_howto_title">БыÑтрый Ñтарт</string>
- <string name="setting_loadtun_summary">Попробуйте загрузить модуль Ñдра tun.ko прежде чем пытатьÑÑ Ð¿Ð¾Ð´ÐºÐ»ÑŽÑ‡Ð¸Ñ‚ÑŒÑÑ. ТребуетÑÑ root-доÑтуп на уÑтройÑтве.</string>
+ <string name="setting_loadtun_summary">Попробуйте загрузить модуль Ñдра tun.ko, прежде чем пытатьÑÑ Ð¿Ð¾Ð´ÐºÐ»ÑŽÑ‡Ð¸Ñ‚ÑŒÑÑ. ТребуетÑÑ root-доÑтуп на уÑтройÑтве.</string>
<string name="setting_loadtun">Загрузить tun-модуль</string>
<string name="importpkcs12fromconfig">Импорт PKCS12 из хранилища ключей Android</string>
<string name="getproxy_error">Ошибка при получении параметров прокÑи-Ñервера: %s</string>
<string name="using_proxy">ИÑпользуетÑÑ Ð¿Ñ€Ð¾ÐºÑи-Ñервер %1$s %2$d</string>
<string name="use_system_proxy">ИÑпользовать прокÑи-Ñервер ÑиÑтемы</string>
<string name="use_system_proxy_summary">ИÑпользовать ÑиÑтемную конфигурацию прокÑи HTTP/HTTPS Ð´Ð»Ñ ÑоединениÑ.</string>
- <string name="donatewithpaypal">Ð’Ñ‹ можете &lt;a href=\"https://www.paypal.com/cgi-bin/webscr?hosted_button_id=R2M6ZP9AF25LS&amp;amp;cmd=_s-xclick\"&gt;пожертвовать Ñ PayPal&lt;/a&gt; </string>
- <string name="onbootrestartsummary">OpenVPN будет переподключатьÑÑ, еÑли он был активен в момент выключениÑ/перезагрузки. ПожалуйÑта, прочтите FAQ перед тем, как иÑпользовать Ñту наÑтройку.</string>
- <string name="onbootrestart">Переподключение поÑле перезагрузки</string>
+ <string name="onbootrestartsummary">OpenVPN будет подключатьÑÑ Ðº указанному VPN, еÑли он был активен при загрузке ÑиÑтемы. ПожалуйÑта, прочитайте FAQ о предупреждении при подключении перед тем, как иÑпользовать Ñту опцию на Android &lt; 5.0.</string>
+ <string name="onbootrestart">Подключение при загрузке</string>
<string name="ignore">Игнорировать</string>
<string name="restart">ПерезапуÑк</string>
<string name="restart_vpn_after_change">Ð˜Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ ÐºÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ð¸ применÑÑŽÑ‚ÑÑ Ð¿Ð¾Ñле перезапуÑка VPN. (Пере)запуÑтить VPN ÑейчаÑ?</string>
<string name="configuration_changed">ÐšÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð°</string>
<string name="log_no_last_vpn">Ðе удалоÑÑŒ определить поÑледний иÑпользуемый профиль Ð´Ð»Ñ Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ</string>
<string name="faq_duplicate_notification_title">ДублирующиеÑÑ ÑƒÐ²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ñ</string>
- <string name="faq_duplicate_notification">ЕÑли в Android возникает нехватка оперативной памÑти (RAM), ненужные Ñлужбы и Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¾ÑтанавливаютÑÑ. Из-за Ñтого прерываетÑÑ ÑƒÑтановленное VPN-Ñоединение. Чтобы избежать Ñтого, приложение нужно запуÑкать Ñ Ð¿Ð¾Ð²Ñ‹ÑˆÐµÐ½Ð½Ñ‹Ð¼ приоритетом. Ð”Ð»Ñ Ð·Ð°Ð¿ÑƒÑка Ñ Ð²Ñ‹Ñоким приоритетом приложение должно вывеÑти предупреждение. ОÑÐ½Ð¾Ð²Ð½Ð°Ñ Ð¸ÐºÐ¾Ð½ÐºÐ° Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð±ÑƒÐ´ÐµÑ‚ закреплена наверху панели уведомлений Ñамой ÑиÑтемой, как опиÑано в предыдущем вопроÑе. Она не ÑвлÑетÑÑ ÑобÑтвенно уведомлением, Ñто ограничение раÑпроÑтранÑетÑÑ Ð½Ð° вÑе приложениÑ, запущенные Ñ Ð²Ñ‹Ñоким приоритетом.</string>
+ <string name="faq_duplicate_notification">ЕÑли в Android возникает нехватка оперативной памÑти (RAM), ненужные Ñлужбы и Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¾ÑтанавливаютÑÑ. Из-за Ñтого прерываетÑÑ ÑƒÑтановленное VPN-Ñоединение. Чтобы избежать Ñтого, приложение нужно запуÑкать Ñ Ð¿Ð¾Ð²Ñ‹ÑˆÐµÐ½Ð½Ñ‹Ð¼ приоритетом. Ð”Ð»Ñ Ð·Ð°Ð¿ÑƒÑка Ñ Ð²Ñ‹Ñоким приоритетом приложение должно вывеÑти уведомление. Значок ключа показываетÑÑ Ð½Ð°Ð²ÐµÑ€Ñ…Ñƒ панели уведомлений Ñамой ÑиÑтемой, как опиÑано в предыдущем вопроÑе. Он не ÑчитаетÑÑ Ñ‚ÐµÐ¼ уведомлением, которое приложению нужно Ð´Ð»Ñ Ð·Ð°Ð¿ÑƒÑка Ñ Ð²Ñ‹Ñоким приоритетом.</string>
<string name="no_vpn_profiles_defined">Профили VPN не указаны.</string>
- <string name="add_new_vpn_hint">ИÑпользуйте &lt;img src=\"ic_menu_add\"/&gt; иконку Ð´Ð»Ñ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð½Ð¾Ð²Ð¾Ð³Ð¾ VPN</string>
- <string name="vpn_import_hint">ИÑпользуйте &lt;img src=\"ic_menu_archive\"/&gt; кнопку Ð´Ð»Ñ Ð¸Ð¼Ð¿Ð¾Ñ€Ñ‚Ð° ÑущеÑтвующих профилей (.ovpn or .conf) Ñ Ð²Ð°ÑˆÐµÐ¹ карты памÑти.</string>
- <string name="faq_hint">Ðе забудьте заглÑнуть в FAQ. Также имеетÑÑ ÐºÑ€Ð°Ñ‚ÐºÐ¾Ðµ руководÑтво.</string>
+ <string name="add_new_vpn_hint">ИÑпользуйте значок &lt;img src=\"ic_menu_add\"/&gt; Ð´Ð»Ñ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð½Ð¾Ð²Ð¾Ð³Ð¾ VPN</string>
+ <string name="vpn_import_hint">ИÑпользуйте кнопку &lt;img src=\"ic_menu_archive\"/&gt; Ð´Ð»Ñ Ð¸Ð¼Ð¿Ð¾Ñ€Ñ‚Ð° ÑущеÑтвующих профилей (.ovpn или .conf) Ñ ÐºÐ°Ñ€Ñ‚Ñ‹ памÑти.</string>
+ <string name="faq_hint">Ðе забудьте заглÑнуть в FAQ. Там еÑÑ‚ÑŒ краткое руководÑтво.</string>
<string name="faq_routing_title">ÐšÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ Ð¼Ð°Ñ€ÑˆÑ€ÑƒÑ‚Ð¸Ð·Ð°Ñ†Ð¸Ð¸/интерфейÑа</string>
<string name="faq_routing">ÐšÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ Ð¼Ð°Ñ€ÑˆÑ€ÑƒÑ‚Ð¸Ð·Ð°Ñ†Ð¸Ð¸ и интерфейÑа производитÑÑ Ð½Ðµ через традиционные ifconfig/route команды, а Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ VPNService API. Это приводит к Ñозданию другой конфигурации маршрутизации, отличной от конфигураций, иÑпользуемых на других ОС. ÐšÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ VPN-Ñ‚ÑƒÐ½Ð½ÐµÐ»Ñ ÑоÑтоит из IP-адреÑов и Ñетей, которые должны направлÑÑ‚ÑŒÑÑ Ñ‡ÐµÑ€ÐµÐ· Ñтот интерфейÑ. Ðикаких оÑобых партнерÑких адреÑов или адреÑов шлюза не требуетÑÑ. Также не требуютÑÑ Ð¸ Ñпециальные маршруты Ð´Ð»Ñ ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ñ VPN-Ñервером (например, добавленные при иÑпользовании redirect-gateway). Следовательно, приложение будет игнорировать Ñти параметры при импорте конфигурации. Приложение Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ VPNService API гарантирует, что подключение к Ñерверу не направлÑетÑÑ Ñ‡ÐµÑ€ÐµÐ· VPN-туннель. ПоддерживаетÑÑ Ð½Ð°Ð¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ðµ через туннель только определенных Ñетей. Приложение пытаетÑÑ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ð¸Ñ‚ÑŒ Ñети, которые не должны быть направлены через туннель (например, маршрут x.x.x.x y.y.y.y net_gateway) и вычиÑлÑет ÑпиÑок маршрутов, в который не включаютÑÑ Ñти маршруты, чтобы Ñмулировать поведение других платформ. Окна журналов и логов показывают конфигурацию ÑервиÑа VPN поÑле уÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ ÑоединениÑ.</string>
- <string name="persisttun_summary">Ðе открывать диалог, когда проиÑходит переподключение VPN.</string>
- <string name="persistent_tun_title">ПоÑтоÑнный tun</string>
- <string name="openvpn_log">OpenVPN Журнал</string>
+ <string name="persisttun_summary">Ðе иÑпользовать обычное Ñоединение без VPN при переподключении OpenVPN.</string>
+ <string name="persistent_tun_title">ПоÑтоÑнный туннель</string>
+ <string name="openvpn_log">Журнал OpenVPN</string>
<string name="import_config">Импорт конфигурации OpenVPN</string>
<string name="battery_consumption_title">Потребление батареи</string>
- <string name="baterry_consumption">Ð’ моих теÑтах, главным иÑточником выÑокого Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ð»ÐµÐ½Ð¸Ñ ÑлектроÑнергии батареи были keepalive пакеты. БольшинÑтво OpenVPN-Ñерверов Ñодержат директиву вроде \'keepalive 10 60\', ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð¾Ñ‚Ð¿Ñ€Ð°Ð²Ð»Ñет keepalive-пакет Ñ ÐºÐ»Ð¸ÐµÐ½Ñ‚Ð° на Ñервер и Ñ Ñервера на клиент каждые 10 Ñекунд. &lt;p&gt; Хоть Ñти пакеты и маленькие и не раÑходуют много трафика, они заÑтавлÑÑŽÑ‚ радиомодуль потреблÑÑ‚ÑŒ много Ñнергии. (Ñм. &lt;a href=\"http://developer.android.com/training/efficient-downloads/efficient-network-access.html#RadioStateMachine\"&gt;The Radio State Machine | Android Developers&lt;/a&gt;) &lt;p&gt; ÐаÑтройки keepalive не могут быть изменены на клиенте, Ñто может Ñделать только ÑиÑтемный админиÑтратор OpenVPN.lt;pgt; К Ñожалению, иÑпользование keepalive более, чем 60 Ñекунд Ñ UDP, может вноÑить проблемы Ñ Ð½ÐµÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ð¼Ð¸ типами NAT, которые удалÑÑŽÑ‚ информацию о Ñоединении через короткое Ð²Ñ€ÐµÐ¼Ñ (в моем Ñлучае, Ñто было 60 Ñекунд). ИÑпользование TCP Ñ Ð±Ð¾Ð»ÑŒÑˆÐ¸Ð¼ keepalive-таймаутом будет работать, но производительноÑÑ‚ÑŒ Ñ‚ÑƒÐ½Ð½ÐµÐ»Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ TCP через TCP в ÑетÑÑ… Ñ Ð²Ñ‹Ñокой вероÑтноÑтью потери пакета крайне Ð½Ð¸Ð·ÐºÐ°Ñ (Ñм. &lt;a href=\"http://sites.inka.de/bigred/devel/tcp-tcp.html\"&gt;Why TCP Over TCP Is A Bad Idea&lt;/a&gt;).</string>
- <string name="faq_tethering">Тетеринг Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Android (через WiFi, USB или Bluetooth) и VPNService API (иÑпользуемое Ñтой программой) не работают вмеÑте. Подробней в &lt;a href=\"http://code.google.com/p/ics-openvpn/issues/detail?id=34\"&gt;проблеме â„–34&lt;/a&gt;</string>
+ <string name="baterry_consumption">Ð’ моих теÑтах главным иÑточником выÑокого Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ð»ÐµÐ½Ð¸Ñ ÑлектроÑнергии батареи были пакеты keepalive. БольшинÑтво OpenVPN-Ñерверов Ñодержат директиву вроде «keepalive 10 60», ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð·Ð°ÑтавлÑет клиент и Ñервер обмениватьÑÑ keepalive-пакетами каждые 10 Ñекунд. &lt;p&gt; Хоть Ñти пакеты и маленькие, и не раÑходуют много трафика, они заÑтавлÑÑŽÑ‚ радиомодуль вÑÑ‘ Ð²Ñ€ÐµÐ¼Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ð°Ñ‚ÑŒ, что повышает раÑход Ñнергии. (Ñм. &lt;a href=\"http://developer.android.com/training/efficient-downloads/efficient-network-access.html#RadioStateMachine\"&gt;The Radio State Machine | Android Developers&lt;/a&gt;) &lt;p&gt; ÐаÑтройки keepalive не могут быть изменены на клиенте, Ñто может Ñделать только ÑиÑтемный админиÑтратор OpenVPN. &lt;p&gt; К Ñожалению, иÑпользование keepalive более, чем 60 Ñекунд Ñ UDP, может привеÑти к тому, что некоторые шлюзы NAT будут обрывать Ñоединение из-за отÑутÑÑ‚Ð²Ð¸Ñ Ð°ÐºÑ‚Ð¸Ð²Ð½Ð¾Ñти. ИÑпользование TCP Ñ Ð±Ð¾Ð»ÑŒÑˆÐ¸Ð¼ keepalive-таймаутом будет работать, но производительноÑÑ‚ÑŒ Ñ‚ÑƒÐ½Ð½ÐµÐ»Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ TCP через TCP в ÑетÑÑ… Ñ Ð²Ñ‹Ñокими потерÑми пакетов крайне Ð½Ð¸Ð·ÐºÐ°Ñ (Ñм. &lt;a href=\"http://sites.inka.de/bigred/devel/tcp-tcp.html\"&gt;Why TCP Over TCP Is A Bad Idea&lt;/a&gt;)</string>
+ <string name="faq_tethering">Ð¤ÑƒÐ½ÐºÑ†Ð¸Ñ Ñ‚ÐµÑ‚ÐµÑ€Ð¸Ð½Ð³Ð° Android (через WiFi, USB или Bluetooth) и VPNService API (иÑпользуемое Ñтой программой) не работают вмеÑте. Подробней в &lt;a href=\"https://github.com/schwabe/ics-openvpn/issues/34\"&gt;проблеме â„–34&lt;/a&gt;</string>
<string name="vpn_tethering_title">VPN и Tethering</string>
<string name="connection_retries">Попытки подключениÑ</string>
<string name="reconnection_settings">Параметры переподключениÑ</string>
@@ -252,7 +252,7 @@
<string name="state_tcp_connect">Подключение (TCP)</string>
<string name="state_auth_failed">Ошибка аутентификации</string>
<string name="state_nonetwork">Ожидание работы Ñети</string>
- <string name="statusline_bytecount">↓%2$s/s %1$s - ↑%4$s/s %3$s</string>
+ <string name="statusline_bytecount">↓%2$s %1$s - ↑%4$s %3$s</string>
<string name="notifcation_title_notconnect">Разъединено</string>
<string name="start_vpn_title">Подключение к VPN %s</string>
<string name="start_vpn_ticker">Подключение к VPN %s</string>
@@ -268,7 +268,7 @@
<string name="add">Добавить</string>
<string name="send_config">Отправить конфигурационный файл</string>
<string name="complete_dn">Полное DN</string>
- <string name="remotetlsnote">ИмпортированнаÑе ÐºÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ Ð¸Ñпользует уÑтаревшую опцию tls-remote ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð¸Ð¼ÐµÐµÑ‚ другой формат DN.</string>
+ <string name="remotetlsnote">Ð˜Ð¼Ð¿Ð¾Ñ€Ñ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð½Ð°Ñ ÐºÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ Ð¸Ñпользует УСТÐРЕВШУЮ опцию tls-remote, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð¸Ð¼ÐµÐµÑ‚ другой формат DN.</string>
<string name="rdn">RDN (полное имÑ)</string>
<string name="rdn_prefix">ÐŸÑ€ÐµÑ„Ð¸ÐºÑ RDN</string>
<string name="tls_remote_deprecated">tls-remote (УСТÐРЕВШЕЕ)</string>
@@ -277,25 +277,25 @@
<string name="remote_warning">ПродолжаÑ, вы даете приложению права на управление \"OpenVPN Ð´Ð»Ñ Android\" и перехват вÑего Ñетевого трафика. <b> Ðе продолжайте, еÑли не доверÑете полноÑтью Ñтому приложению. </b> Ð’ противном Ñлучае вы риÑкуете утечкой и иÑпользованием ваших данных злоумышленниками.</string>
<string name="remote_trust">Я доверÑÑŽ Ñтому приложению.</string>
<string name="no_external_app_allowed">Ðет приложений, авторизованных Ð´Ð»Ñ Ð²Ð½ÐµÑˆÐ½ÐµÐ³Ð¾ API</string>
- <string name="allowed_apps">Ðвторизованные приложениÑ: %s</string>
+ <string name="allowed_apps">Разрешённые приложениÑ: %s</string>
<string name="clearappsdialog">ОчиÑтить ÑпиÑок авторизованных внешних приложений?\nСпиÑок разрешенных приложений:\n\n%s</string>
- <string name="screenoff_summary">VPN-Ñоединение приоÑтанавливаетÑÑ, еÑли Ñкран выключен или объем данных меньше 64kb за 60Ñек. ЕÑли включена Ð¾Ð¿Ñ†Ð¸Ñ \"Удержание ÑоединениÑ\", VPN-Ñоединение будет поÑтоÑнно активным. Без Ñтого параметра оно будет приоÑтанавливатьÑÑ Ð¿Ñ€Ð¸ Ñтих уÑловиÑÑ…..</string>
+ <string name="screenoff_summary">ПриоÑтанавливать VPN, еÑли Ñкран выключен и передано меньше 64kb данных за 60 Ñек. Когда включена Ð¾Ð¿Ñ†Ð¸Ñ \"ПоÑтоÑнный туннель\", приоÑтановка VPN оÑтавит ваше уÑтройÑтво без Ñетевого подключениÑ. Без опции \"ПоÑтоÑнный туннель\" уÑтройÑтво не будет иметь VPN-ÑоединениÑ/защиты.</string>
<string name="screenoff_title">ПриоÑтановить VPN-Ñоединение при выключенном Ñкране</string>
<string name="screenoff_pause">ПриоÑтановка ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¸ выключенном Ñкране: меньше, чем %1$s in %2$ss</string>
- <string name="screen_nopersistenttun">Внимание: поÑтоÑнный tun не включен Ð´Ð»Ñ Ñтого VPN. Трафик будет проходить через обычный доÑтуп в Интернет, когда Ñкран выключен.</string>
+ <string name="screen_nopersistenttun">Внимание: ПоÑтоÑнный туннель не включен Ð´Ð»Ñ Ñтого VPN. Трафик будет иÑпользовать обычное интернет Ñоединение, когда Ñкран выключен.</string>
<string name="save_password">Сохранить пароль</string>
<string name="pauseVPN">ПриоÑтановить VPN</string>
<string name="resumevpn">Продолжить VPN</string>
<string name="state_userpause">VPN приоÑтановлен по запроÑу пользователÑ</string>
<string name="state_screenoff">VPN приоÑтановлен - выкл. Ñкран</string>
- <string name="device_specific">Хак Ð´Ð»Ñ Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾ уÑтройÑтва</string>
+ <string name="device_specific">Хаки Ð´Ð»Ñ Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾ уÑтройÑтва</string>
<string name="cannotparsecert">Ðе удаетÑÑ Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð·Ð¸Ñ‚ÑŒ ÑÐ²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¾ Ñертификате</string>
<string name="appbehaviour">Поведение приложениÑ</string>
<string name="vpnbehaviour">Поведение VPN</string>
- <string name="allow_vpn_changes">Разрешить изменение VPN-профилей</string>
+ <string name="allow_vpn_changes">Разрешить изменение профилей VPN</string>
<string name="hwkeychain">Ðппаратное хранилище ключей:</string>
<string name="permission_icon_app">Иконка Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¿Ñ‹Ñ‚Ð°ÐµÑ‚ÑÑ Ð¸Ñпользовать OpenVPN Ð´Ð»Ñ Android</string>
- <string name="faq_vpndialog43">«ÐÐ°Ñ‡Ð¸Ð½Ð°Ñ Ñ Android 4.3, диалог Ð¿Ð¾Ð´Ñ‚Ð²ÐµÑ€Ð¶Ð´ÐµÐ½Ð¸Ñ VPN-ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ð·Ð°Ñ‰Ð¸Ñ‰ÐµÐ½ от приложений, \"накладывающихÑÑ Ð¿Ð¾Ð²ÐµÑ€Ñ… Ñкрана». Это приводит к тому, что диалоговое окно Ð¿Ð¾Ð´Ñ‚Ð²ÐµÑ€Ð¶Ð´ÐµÐ½Ð¸Ñ Ð½Ðµ реагирует на ÑенÑорные нажатиÑ. ЕÑли у Ð²Ð°Ñ Ð¸Ð¼ÐµÐµÑ‚ÑÑ Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ðµ, иÑпользующее наложениÑ, то Ñто может вызвать такое поведение. ЕÑли вы обнаружите где-либо такое приложение, ÑвÑжитеÑÑŒ Ñ Ð°Ð²Ñ‚Ð¾Ñ€Ð¾Ð¼ приложениÑ. Эта проблема затрагивает вÑе VPN Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð½Ð° Android 4.3 и более поздних верÑиÑÑ…. Смотрите также &lt; a href = \"http://code.google.com/p/ics-openvpn/issues/detail?id=185\" &gt; Проблему 185 &lt; &gt; Ð´Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ñ‹Ñ… Ñведений»</string>
+ <string name="faq_vpndialog43">"ÐÐ°Ñ‡Ð¸Ð½Ð°Ñ Ñ Android 4.3, диалог Ð¿Ð¾Ð´Ñ‚Ð²ÐµÑ€Ð¶Ð´ÐµÐ½Ð¸Ñ VPN-ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ð·Ð°Ñ‰Ð¸Ñ‰Ñ‘Ð½ от приложений, «накладывающихÑÑ Ð¿Ð¾Ð²ÐµÑ€Ñ… Ñкрана». Это приводит к тому, что диалоговое окно Ð¿Ð¾Ð´Ñ‚Ð²ÐµÑ€Ð¶Ð´ÐµÐ½Ð¸Ñ Ð½Ðµ реагирует на ÑенÑорные нажатиÑ. ЕÑли вам попадётÑÑ Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ðµ, иÑпользующее Ð½Ð°Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¸ вызывающее такое поведение, ÑвÑжитеÑÑŒ Ñ Ð°Ð²Ñ‚Ð¾Ñ€Ð¾Ð¼ Ñтого приложениÑ. Эта проблема затрагивает вÑе VPN Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð½Ð° Android 4.3 и более поздних верÑиÑÑ…. Смотрите также &lt;a href=\"https://github.com/schwabe/ics-openvpn/issues/185\"&gt;Issue 185&lt;a&gt; Ð´Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ñ‹Ñ… Ñведений"</string>
<string name="faq_vpndialog43_title">Окно Ð¿Ð¾Ð´Ñ‚Ð²ÐµÑ€Ð¶Ð´ÐµÐ½Ð¸Ñ VPN Ð´Ð»Ñ Android 4.3 и позже</string>
<string name="donatePlayStore">Также Ð’Ñ‹ можете выразить благодарноÑÑ‚ÑŒ в виде Ð¿Ð¾Ð¶ÐµÑ€Ñ‚Ð²Ð¾Ð²Ð°Ð½Ð¸Ñ Ð½Ð° Play Store:</string>
<string name="thanks_for_donation">СпаÑибо за пожертвование %s!</string>
@@ -309,29 +309,30 @@
<string name="uploaded_data">Выгружено</string>
<string name="downloaded_data">Загружено</string>
<string name="vpn_status">Ð¡Ñ‚Ð°Ñ‚ÑƒÑ VPN</string>
- <string name="logview_options">ПоÑмотреть наÑтройки</string>
- <string name="unhandled_exception">ÐÐµÐ¾Ð¿Ð¾Ð·Ð½Ð°Ð½Ð½Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ°: %1$s\n\n%2$s</string>
+ <string name="logview_options">ÐаÑтройки вида</string>
+ <string name="unhandled_exception">ÐÐµÐ¾Ð¿Ð¾Ð·Ð½Ð°Ð½Ð½Ð°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ°: %1$s\n\n%2$s</string>
<string name="unhandled_exception_context">%3$s: %1$s\n\n%2$s</string>
- <string name="faq_system_dialog_xposed">ЕÑли на Вашем уÑтройÑтве уÑтановлены Рут права, Ð’Ñ‹ можете уÑтановить &lt;a href=\"http://xposed.info/\"&gt;Xposed framework&lt;/a&gt; и &lt;a href=\"http://repo.xposed.info/module/de.blinkt.vpndialogxposed\"&gt;модуль автоматичеÑкого Ð¿Ð¾Ð´Ñ‚Ð²ÐµÑ€Ð¶Ð´ÐµÐ½Ð¸Ñ Ð´Ð¸Ð°Ð»Ð¾Ð³Ð° Ð¿Ð¾Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ VPN&lt;/a&gt; на Ñвой Ñтрах и риÑк</string>
+ <string name="faq_system_dialog_xposed">ЕÑли на вашем уÑтройÑтве еÑÑ‚ÑŒ root, можете уÑтановить &lt;a href=\"http://xposed.info/\"&gt;Xposed framework&lt;/a&gt; и &lt;a href=\"http://repo.xposed.info/module/de.blinkt.vpndialogxposed\"&gt;модуль автоматичеÑкого Ð¿Ð¾Ð´Ñ‚Ð²ÐµÑ€Ð¶Ð´ÐµÐ½Ð¸Ñ Ð´Ð¸Ð°Ð»Ð¾Ð³Ð° Ð¿Ð¾Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ VPN&lt;/a&gt; на Ñвой Ñтрах и риÑк</string>
<string name="full_licenses">Полные текÑÑ‚Ñ‹ лицензий</string>
- <string name="blocklocal_summary">Сети напрÑмую доÑтупные через локальный Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ Ð½Ðµ будут маршрутизированы через VPN. Отключите Ñту опцию чтобы направить трафик через VPN.</string>
+ <string name="blocklocal_summary">Сети, доÑтупные напрÑмую через локальный интерфейÑ, не будут маршрутизированы через VPN. Отключите Ñту опцию, чтобы направить трафик через VPN.</string>
<string name="blocklocal_title">Ðе иÑпользовать VPN Ð´Ð»Ñ Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ñ‹Ñ… адреÑов</string>
<string name="userpw_file">Файл логина и паролÑ</string>
<string name="imported_from_file">[Импортировано из: %s]</string>
<string name="files_missing_hint">Ðекоторые файлы не найдены. Выберите файлы Ð´Ð»Ñ Ð¸Ð¼Ð¿Ð¾Ñ€Ñ‚Ð° в профиль:</string>
- <string name="openvpn_is_no_free_vpn">Ð”Ð»Ñ Ð¸ÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾ Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð’Ð°Ð¼ необходим VPN провайдер/шлюз поддерживающий OpenVPN. Ð”Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ð¸ по наÑтройке ÑобÑтвенного OpenVPN Ñервера: http://community.openvpn.net/</string>
+ <string name="openvpn_is_no_free_vpn">Ð”Ð»Ñ Ð¸ÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾ Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð½ÐµÐ¾Ð±Ñ…Ð¾Ð´Ð¸Ð¼ провайдер/шлюз VPN, поддерживающий OpenVPN (чаÑто предоÑтавлÑетÑÑ Ñ€Ð°Ð±Ð¾Ñ‚Ð¾Ð´Ð°Ñ‚ÐµÐ»ÐµÐ¼). Ðа http://community.openvpn.net/ можно найти информацию про OpenVPN и как наÑтроить ÑобÑтвенный Ñервер OpenVPN.</string>
<string name="import_log">Лог импорта:</string>
- <string name="ip_looks_like_subnet">VPN топологии «%3$s» указан но ifconfig %1$s %2$s выглÑдит больше как IP-Ð°Ð´Ñ€ÐµÑ Ñ Ð¼Ð°Ñкой Ñети. ЕÑли Ñ‚Ð¾Ð¿Ð¾Ð»Ð¾Ð³Ð¸Ñ Â«Ð¿Ð¾Ð´Ñеть».</string>
+ <string name="ip_looks_like_subnet">Указана Ñ‚Ð¾Ð¿Ð¾Ð»Ð¾Ð³Ð¸Ñ VPN «%3$s», но ifconfig %1$s %2$s больше похоже на IP-Ð°Ð´Ñ€ÐµÑ Ñ Ð¼Ð°Ñкой Ñети. ИÑпользуетÑÑ Ñ‚Ð¾Ð¿Ð¾Ð»Ð¾Ð³Ð¸Ñ Â«Ð¿Ð¾Ð´Ñеть».</string>
<string name="mssfix_invalid_value">Значение, перезапиÑывающее MSS, должно быть целым чиÑлом от 0 до 9000</string>
- <string name="mssfix_value_dialog">ОбъÑвить TCP ÑеÑÑиÑм, работающим через туннель, что они должны ограниччить размер Ñвоих пакетов так, чтобы поÑле их инкапÑулÑции OpenVPN, результирующий размер UDP пакета, который OpenVPN поÑылает Ñвоим пирам, не превышал Ñто чиÑло байт. (1450 по умолчанию)</string>
- <string name="mssfix_checkbox">ПерепиÑать значение MSS Ð´Ð»Ñ TCP нагрузки</string>
- <string name="mssfix_dialogtitle">Задать MSS Ð´Ð»Ñ TCP нагрузки</string>
- <string name="client_behaviour">Поведение клиента-программы</string>
+ <string name="mtu_invalid_value">Значение, переопределÑющее MTU, должно быть целым чиÑлом от 64 до 9000</string>
+ <string name="mssfix_value_dialog">ОбъÑвить TCP ÑеÑÑиÑм, работающим через туннель, что они должны ограничить размер Ñвоих пакетов так, чтобы поÑле их инкапÑулÑции OpenVPN результирующий размер UDP-пакета, который OpenVPN поÑылает Ñвоим пирам, не превышал Ñто чиÑло байт. (1450 по умолчанию)</string>
+ <string name="mssfix_checkbox">Переопределить MSS Ð´Ð»Ñ Ð½Ð°Ð³Ñ€ÑƒÐ·ÐºÐ¸ TCP</string>
+ <string name="mssfix_dialogtitle">Задать MSS Ð´Ð»Ñ Ð½Ð°Ð³Ñ€ÑƒÐ·ÐºÐ¸ TCP</string>
+ <string name="client_behaviour">Поведение клиента</string>
<string name="clear_external_apps">ОчиÑтить разрешенные внешние приложениÑ</string>
<string name="loading">ЗагружаетÑÑ&#8230;</string>
- <string name="allowed_vpn_apps_info">Разрешенные VPN приложениÑ: %1$s</string>
- <string name="disallowed_vpn_apps_info">Запрещенные VPN приложениÑ: %1$s</string>
- <string name="app_no_longer_exists">Пакет %s больше не уÑтановлен, проиÑходит его удаление из ÑпиÑка разрешенных/запрещенных приложений</string>
+ <string name="allowed_vpn_apps_info">Разрешённые Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ VPN: %1$s</string>
+ <string name="disallowed_vpn_apps_info">Запрещённые Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ VPN: %1$s</string>
+ <string name="app_no_longer_exists">Пакет %s больше не уÑтановлен, он удалÑетÑÑ Ð¸Ð· ÑпиÑка разрешённых/запрещённых приложений</string>
<string name="vpn_disallow_radio">ИÑпользовать VPN Ð´Ð»Ñ Ð²Ñех приложений, кроме выбранных</string>
<string name="vpn_allow_radio">ИÑпользовать VPN только Ð´Ð»Ñ Ð²Ñ‹Ð±Ñ€Ð°Ð½Ð½Ñ‹Ñ… приложений</string>
<string name="query_delete_remote">Убрать запиÑÑŒ удаленного Ñервера?</string>
@@ -339,53 +340,106 @@
<string name="delete">Удалить</string>
<string name="add_remote">Добавить новую удаленку</string>
<string name="remote_random">ИÑпользовать ÑпиÑок подключений в Ñлучайном порÑдке при Ñоединении</string>
- <string name="remote_no_server_selected">Ð’Ñ‹ должны определить и включить как минумум один удаленный Ñервер.</string>
+ <string name="remote_no_server_selected">Ð’Ñ‹ должны определить и включить как минимум один удаленный Ñервер.</string>
<string name="server_list">СпиÑок Ñерверов</string>
- <string name="vpn_allowed_apps">Разрешенные ПриложениÑ</string>
+ <string name="vpn_allowed_apps">Разрешённые приложениÑ</string>
<string name="advanced_settings">РаÑширенные наÑтройки</string>
- <string name="payload_options">Опции нагрузки</string>
+ <string name="payload_options">ÐаÑтройки полезной нагрузки</string>
<string name="tls_settings">ÐаÑтройки TLS</string>
<string name="no_remote_defined">Ðет заданной удаленки</string>
- <string name="duplicate_vpn">Дублировать VPN профиль</string>
+ <string name="duplicate_vpn">Дублировать профиль VPN</string>
<string name="duplicate_profile_title">Дублирование профилÑ: %s</string>
<string name="show_log">Показать журнал</string>
- <string name="faq_android_clients">СущеÑтвуют различные OpenVPN клиенты Ð´Ð»Ñ Android. Самые раÑпроÑтраненные - OpenVPN for Android (Ñтот клиент), OpenVPN Connect и OpenVPN Settings.&lt;p&gt;Клиенты можно разделить на две группы: OpenVPN for Android и OpenVPN Connect иÑпользуют официальный VPNService API (Android 4.0+) и не трубуют root-доÑтуп, и OpenVPN Settings, который требует root.&lt;p&gt;OpenVPN for Android - клиент Ñ Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ñ‹Ð¼ иÑходным кодом, который разработал Arne Schwabe. Он предназначен Ð´Ð»Ñ Ð±Ð¾Ð»ÐµÐµ опытных пользователей и предоÑтавлÑет много наÑтроек и возможноÑÑ‚ÑŒ иÑпорта профилей из файлов и наÑтраивать/изменÑÑ‚ÑŒ профили внутри приложениÑ. Этот клиент оÑнован на общеÑтвенной верÑии OpenVPN. Ðа иÑходном коде OpenVPN 2.x. Этот клиент может быть предÑтавлен как полуофициальный клиент ÑообщеÑтва. &lt;p&gt;OpenVPN Connect - клиент Ñ Ð·Ð°ÐºÑ€Ñ‹Ñ‚Ñ‹Ð¼ иÑходным кодом, который разработан OpenVPN Technologies, Inc. Он призван Ð´Ð»Ñ Ð¾Ð±Ñ‹Ñ‡Ð½Ð¾Ð³Ð¾ иÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¸ предназначен Ð´Ð»Ñ Ñредних пользователей, и позволÑет импортировать профили из OpenVPN. Этот клиент оÑнован на OpenVPN C++ и напиÑал Ñ Ð¸Ñпользванием протокола OpenVPN (Это требовалоÑÑŒ Ð´Ð»Ñ Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ñ OpenVPN Technologies, Inc опубликовать приложение OpenVPN на iOS). Этот клиент - официальный клиент OpenVPN technologies &lt;p&gt; OpenVPN Settings - Ñтарейший из клиентов, а также UI Ð´Ð»Ñ OpenVPN Ñ Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ñ‹Ð¼ иÑходным кодом. Ð’ отличие от OpenVPN for Android, он требует root-прав и не иÑпользует VPNService API. Он не завиÑит от Android 4.0+</string>
- <string name="faq_androids_clients_title">Ð Ð°Ð·Ð»Ð¸Ñ‡Ð¸Ñ Ð¼ÐµÐ¶Ð´Ñƒ OpenVPN Android клиентами</string>
+ <string name="faq_android_clients">СущеÑтвуют различные клиенты OpenVPN Ð´Ð»Ñ Android. Самые раÑпроÑтранённые — OpenVPN Ð´Ð»Ñ Android (Ñтот клиент), OpenVPN Connect и OpenVPN Settings.&lt;p&gt;Клиенты можно разделить на две группы: OpenVPN Ð´Ð»Ñ Android и OpenVPN Connect иÑпользуют официальный VPNService API (Android 4.0+) и не требуют root-доÑтуп, и OpenVPN Settings, который требует root.&lt;p&gt;OpenVPN Ð´Ð»Ñ Android — клиент Ñ Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ñ‹Ð¼ иÑходным кодом, который разработал Arne Schwabe. Он предназначен Ð´Ð»Ñ Ð±Ð¾Ð»ÐµÐµ опытных пользователей и предоÑтавлÑет много наÑтроек, возможноÑÑ‚ÑŒ импорта профилей из файлов и наÑтраивать/изменÑÑ‚ÑŒ профили внутри приложениÑ. Этот клиент оÑнован на общеÑтвенной верÑии OpenVPN. Рименно на иÑходном коде OpenVPN 2.x. Этот клиент можно предÑтавить как полуофициальный клиент ÑообщеÑтва. &lt;p&gt;OpenVPN Connect — клиент Ñ Ð·Ð°ÐºÑ€Ñ‹Ñ‚Ñ‹Ð¼ иÑходным кодом, который разрабатываетÑÑ OpenVPN Technologies, Inc. Он призван Ð´Ð»Ñ Ð¾Ð±Ñ‹Ñ‡Ð½Ð¾Ð³Ð¾ иÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¸ предназначен Ð´Ð»Ñ Ð¿Ñ€Ð¾ÑÑ‚Ñ‹Ñ… пользователей, и позволÑет импортировать профили из OpenVPN. Этот клиент оÑнован на OpenVPN C++, другой реализации протокола OpenVPN (Это потребовалоÑÑŒ OpenVPN Technologies, Inc, чтобы опубликовать приложение OpenVPN на iOS). Этот клиент — официальный клиент OpenVPN technologies &lt;p&gt; OpenVPN Settings — Ñтарейший из клиентов, он также UI Ð´Ð»Ñ OpenVPN Ñ Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ñ‹Ð¼ иÑходным кодом. Ð’ отличие от OpenVPN Ð´Ð»Ñ Android, он требует root-прав и не иÑпользует VPNService API. Он не завиÑит от Android 4.0+</string>
+ <string name="faq_androids_clients_title">Ð Ð°Ð·Ð»Ð¸Ñ‡Ð¸Ñ Ð¼ÐµÐ¶Ð´Ñƒ клиентами OpenVPN Ð´Ð»Ñ Android</string>
<string name="ignore_multicast_route">ИгнорируетÑÑ Ð¼ÑƒÐ»ÑŒÑ‚Ð¸Ð°Ð´Ñ€ÐµÑный маршрут: %s</string>
- <string name="ab_only_cidr">Android поддерживет только CIDR маршруты к VPN. ПоÑкольку не CIDR маршруты почти никогда не иÑпользуютÑÑ, OpenVPN for Android будет иÑпользовать /32 Ð´Ð»Ñ Ð½Ðµ CIDR маршрутов и выдавать предупреждение.</string>
+ <string name="ab_only_cidr">Android поддерживает только CIDR маршруты к VPN. ПоÑкольку не CIDR маршруты почти никогда не иÑпользуютÑÑ, OpenVPN Ð´Ð»Ñ Android будет иÑпользовать /32 Ð´Ð»Ñ Ð½Ðµ CIDR маршрутов и выдавать предупреждение.</string>
<string name="ab_tethering_44">Тетеринг/раздача интернета работает, когда активен VPN. Модемное Ñоединение (тетеринг) ÐЕ БУДЕТ иÑпользовать VPN.</string>
- <string name="ab_kitkat_mss">Ранние верÑии KitKat уÑтанавливают неверное значение MSS Ð´Ð»Ñ TCP Ñоединений (#61948). OpenVPN for Android автоматичеÑки включает опцию mssfix, чтобы обойти Ñтот баг.</string>
+ <string name="ab_kitkat_mss">Ранние верÑии KitKat уÑтанавливают неверное значение MSS Ð´Ð»Ñ TCP Ñоединений (#61948). Попробуйте включить опцию mssfix, чтобы обойти Ñтот баг.</string>
<string name="ab_proxy">Android будет продолжать иÑпользовать ваши наÑтройки прокÑи, указанные Ð´Ð»Ñ Ð¼Ð¾Ð±Ð¸Ð»ÑŒÐ½Ð¾Ð³Ð¾/Wi-Fi ÑоединениÑ, когда не уÑтановлен DNS Ñервер. OpenVPN for Android предупредит Ð²Ð°Ñ Ð¾Ð± Ñтом в журнале.<p>Когда VPN уÑтанавливает DNS Ñервер Android не иÑпользует прокÑи. Ð”Ð»Ñ ÑƒÑтановки прокÑи Ð´Ð»Ñ VPN ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ð½ÐµÑ‚ API.</p></string>
- <string name="ab_lollipop_reinstall">VPN Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¼Ð¾Ð³ÑƒÑ‚ переÑтать работать поÑле ÑƒÐ´Ð°Ð»ÐµÐ½Ð¸Ñ Ð¸ повторной уÑтановки. ПодробноÑти Ñм. #80074</string>
- <string name="ab_not_route_to_vpn">IP Ñконфигурированного клиента и IPs в его Ñетевой маÑке немаршрутизированны к VPN. OpenVPN обходит Ñтот баг, Ñвно добавлÑÑ Ð¼Ð°Ñ€ÑˆÑ€ÑƒÑ‚, который ÑоответÑтвует клиентÑкому IP и его Ñетевой маÑке</string>
- <string name="ab_persist_tun">Открытие туннелÑ, когда туннель уже активен, Ð´Ð»Ñ ÐµÐ³Ð¾ поÑтоÑнного удержаниÑ, может привеÑти к ошибке и VPNServices закроетÑÑ Ð½Ð° уÑтройÑтве. Ð”Ð»Ñ Ð²Ð¾Ð·Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹ VPN требуетÑÑ Ð¿ÐµÑ€ÐµÐ·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ°. OpenVPN for Android пытаетÑÑ Ð¸Ð·Ð±ÐµÐ¶Ð°Ñ‚ÑŒ уÑтановки второго туннелÑ, и еÑли дейÑтвительно нужно - Ñначала закрывает текущий туннель, перед открытием нового, чтобы избежать краха программы. Это может привеÑти к маленькому интервалу, в котором передача пакетов проиÑходит по обычному (не VPN) Ñоединению. Даже Ñ Ñтими ухищрениÑми VPNServices иногда крашитÑÑ Ð¸ требует перезагрузки уÑтройÑтва.</string>
+ <string name="ab_lollipop_reinstall">ÐŸÑ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ VPN могут переÑтать работать поÑле ÑƒÐ´Ð°Ð»ÐµÐ½Ð¸Ñ Ð¸ повторной уÑтановки. ПодробноÑти Ñм. #80074</string>
+ <string name="ab_not_route_to_vpn">Сконфигурированный IP-Ð°Ð´Ñ€ÐµÑ ÐºÐ»Ð¸ÐµÐ½Ñ‚Ð° и IP-адреÑа в его подÑети (ÑоглаÑно Ñетевой маÑке) не направлÑÑŽÑ‚ÑÑ Ñ‡ÐµÑ€ÐµÐ· VPN. OpenVPN обходит Ñтот баг, Ñвно добавлÑÑ Ð¼Ð°Ñ€ÑˆÑ€ÑƒÑ‚, который ÑоответÑтвует клиентÑкому IP и его Ñетевой маÑке</string>
+ <string name="ab_persist_tun">Открытие туннелÑ, когда туннель уже активен, Ð´Ð»Ñ ÐµÐ³Ð¾ поÑтоÑнного удержаниÑ, может привеÑти к ошибке и VPNServices закроетÑÑ Ð½Ð° уÑтройÑтве. Ð”Ð»Ñ Ð²Ð¾Ð·Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹ VPN требуетÑÑ Ð¿ÐµÑ€ÐµÐ·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ°. OpenVPN Ð´Ð»Ñ Android пытаетÑÑ Ð¸Ð·Ð±ÐµÐ¶Ð°Ñ‚ÑŒ уÑтановки второго туннелÑ, и еÑли дейÑтвительно нужно - Ñначала закрывает текущий туннель, перед открытием нового, чтобы избежать краха программы. Это может привеÑти к маленькому интервалу, в котором передача пакетов проиÑходит по обычному (не VPN) Ñоединению. Даже Ñ Ñтими ухищрениÑми VPNServices иногда крашитÑÑ Ð¸ требует перезагрузки уÑтройÑтва.</string>
<string name="ab_secondary_users">VPN не работает ÑовÑем Ð´Ð»Ñ Ð²Ñ‚Ð¾Ñ€Ð¸Ñ‡Ð½Ñ‹Ñ… пользователей.</string>
- <string name="ab_kitkat_reconnect">"Различные пользователи Ñообщают, что Ð¼Ð¾Ð±Ð¸Ð»ÑŒÐ½Ð°Ñ ÑвÑзь/Ð¼Ð¾Ð±Ð¸Ð»ÑŒÐ½Ð°Ñ Ð¿ÐµÑ€ÐµÐ´Ð°Ñ‡Ð° данных чаÑто обрываетÑÑ, когда иÑпользуетÑÑ VPN приложение. Такое поведение, кажетÑÑ, затрагивает только некторые комбинации провайдеров/уÑтройÑтв, и пока что не выÑвлена причина/нет обхода Ñтого бага."</string>
+ <string name="ab_kitkat_reconnect">"Различные пользователи Ñообщают, что Ð¼Ð¾Ð±Ð¸Ð»ÑŒÐ½Ð°Ñ ÑвÑзь/Ð¼Ð¾Ð±Ð¸Ð»ÑŒÐ½Ð°Ñ Ð¿ÐµÑ€ÐµÐ´Ð°Ñ‡Ð° данных чаÑто обрываетÑÑ, когда иÑпользуетÑÑ VPN приложение. Такое поведение, кажетÑÑ, затрагивает только некоторые комбинации провайдеров/уÑтройÑтв, и пока что не выÑвлена причина/нет обхода Ñтого бага."</string>
<string name="ab_vpn_reachability_44">ÐдреÑа могут работать через VPN только те, которые доÑтупны без VPN. IPv6 VPN не работают вообще.</string>
<string name="ab_only_cidr_title">Ðе CIDR маршруты</string>
<string name="ab_proxy_title">Поведение прокÑи Ð´Ð»Ñ VPN</string>
- <string name="ab_lollipop_reinstall_title">ПереуÑтанавливаютÑÑ Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ VPN</string>
+ <string name="ab_lollipop_reinstall_title">ПереуÑтановка приложений VPN</string>
<string name="version_upto">%s и ранее</string>
<string name="copy_of_profile">ÐšÐ¾Ð¿Ð¸Ñ %s</string>
- <string name="ab_not_route_to_vpn_title">ÐœÐ°Ñ€ÑˆÑ€ÑƒÑ‚Ð¸Ð·Ð°Ñ†Ð¸Ñ Ðº уÑтановленному IP адреÑу</string>
+ <string name="ab_not_route_to_vpn_title">Маршрут Ð´Ð»Ñ ÑƒÑтановленного IP-адреÑа</string>
<string name="ab_kitkat_mss_title">Ðеверное значение MSS Ð´Ð»Ñ VPN ÑоединениÑ</string>
<string name="ab_secondary_users_title">Дополнительные пользователи уÑтройÑтва</string>
<string name="custom_connection_options_warng">Укажите оÑобые пользовательÑкие параметры подключениÑ. ИÑпользуйте Ñ Ð¾ÑторожноÑтью</string>
- <string name="custom_connection_options">ПользовательÑкие Параметры</string>
+ <string name="custom_connection_options">ПользовательÑкие параметры</string>
<string name="remove_connection_entry">Удалить запиÑÑŒ подключениÑ</string>
- <string name="ab_kitkat_reconnect_title">Случайные Ñ€Ð°Ð·ÑŠÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ð¾Ñ‚ мобильной Ñети</string>
+ <string name="ab_kitkat_reconnect_title">Случайные Ð¾Ñ‚ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð¾Ñ‚ мобильной Ñети</string>
<string name="ab_vpn_reachability_44_title">Удаленные Ñети недоÑтупны</string>
<string name="ab_persist_tun_title">Принудительный режим tun</string>
<string name="version_and_later">%s и выше</string>
<string name="tls_cipher_alert_title">Ðеудачное Ñоединение Ñ SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure</string>
- <string name="tls_cipher_alert">Ðовые верÑии OpenVPN Ð´Ð»Ñ Android (0.6.29/Март 2015) иÑпользуют более безопаÑные наÑтройки по умолчанию Ð´Ð»Ñ Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð½Ñ‹Ñ… наборов шифров (tls-шифрование \"DEFAULT:!EXP:!PSK:!SRP:!kRSA\"). К Ñожалению, прекращение иÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¼ÐµÐ½ÐµÐµ безопаÑных наборов шифров и ÑкÑпортирование наборов шифров, а оÑобенно прекращение иÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð½Ð°Ð±Ð¾Ñ€Ð¾Ð² шифров, которые не поддерживают Perfect Forward Secrecy (Diffie-Hellman), приводит к возникновению некоторых проблем. Обычно Ñто проиÑходит из-за изначально полезной, но плохо реализованной попытки уÑÐ¸Ð»ÐµÐ½Ð¸Ñ Ð±ÐµÐ·Ð¾Ð¿Ð°ÑноÑти TLS путем уÑтановки tls-ÑˆÐ¸Ñ„Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð½Ð° Ñервере или некоторых вÑтроенных ОС Ñ ÑƒÑ€ÐµÐ·Ð°Ð½Ð½Ñ‹Ð¼ SSL (например, MikroTik).\nЧтобы решить Ñту проблему, уÑтановите наÑтройки tls-ÑˆÐ¸Ñ„Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð½Ð° Ñервере на разумные по умолчанию, такие как tls-шифрование \"DEFAULT:!EXP:!PSK:!SRP:!kRSA\". Чтобы обойти проблему на клиенте, добавьте отдельную наÑтройку tls-ÑˆÐ¸Ñ„Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ tls-cipher DEFAULT в Android-клиент.</string>
+ <string name="tls_cipher_alert">Ðовые верÑии OpenVPN Ð´Ð»Ñ Android (0.6.29/Март 2015) иÑпользуют более безопаÑные наÑтройки по умолчанию Ð´Ð»Ñ Ñ€Ð°Ð·Ñ€ÐµÑˆÑ‘Ð½Ð½Ñ‹Ñ… наборов шифров (tls-cipher \"DEFAULT:!EXP:!PSK:!SRP:!kRSA\"). К Ñожалению, прекращение иÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¼ÐµÐ½ÐµÐµ безопаÑных и ÑкÑпортных наборов шифров, а оÑобенно тех наборов шифров, которые не поддерживают Perfect Forward Secrecy (Diffie-Hellman), приводит к некоторым проблемам. Обычно Ñто проиÑходит из-за благонамеренной, но плохо реализованной попытки уÑÐ¸Ð»ÐµÐ½Ð¸Ñ Ð±ÐµÐ·Ð¾Ð¿Ð°ÑноÑти TLS путём уÑтановки tls-cipher на Ñервере или некоторых вÑтроенных ОС Ñ ÑƒÑ€ÐµÐ·Ð°Ð½Ð½Ñ‹Ð¼ SSL (например, MikroTik).\nЧтобы решить Ñту проблему, уÑтановите наÑтройки tls-cipher на Ñервере на разумные по умолчанию, такие как tls-cipher \"DEFAULT:!EXP:!PSK:!SRP:!kRSA\". Чтобы обойти проблему на клиенте, добавьте отдельную наÑтройку tls-cipher DEFAULT в Android-клиент.</string>
+ <string name="message_no_user_edit">Данный профиль был добавлен из внешнего Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ (%s) и был отмечен как непригодный к редактированию пользователÑми.</string>
+ <string name="crl_file">СпиÑок отозванных Ñертификатов</string>
+ <string name="service_restarted">ПерезапуÑк ÑервиÑа OpenVPN (Приложение, вероÑтно, упало или было закрыто из-за нехватки памÑти)</string>
+ <string name="import_config_error">Импортирование конфигурации привело к ошибке, невозможно Ñохранить изменениÑ</string>
<string name="Search">ПоиÑк</string>
<string name="lastdumpdate">(ПоÑледний дамп Ñоздан %1$d ч. и %2$d м. назад (%3$s))</string>
<string name="clear_log_on_connect">Очищать журнал при новом Ñоединении</string>
<string name="connect_timeout">Ð’Ñ€ÐµÐ¼Ñ Ð¾Ð¶Ð¸Ð´Ð°Ð½Ð¸Ñ ÑоединениÑ</string>
+ <string name="no_allowed_app">Ðе добавлено разрешенных приложений. ДобавлÑем ÑÐµÐ±Ñ (%s), чтобы в ÑпиÑке разрешенных приложений было Ñ…Ð¾Ñ‚Ñ Ð±Ñ‹ одно приложение, иначе вÑе Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð´Ð¾Ð±Ð°Ð²ÑÑ‚ÑÑ Ð² ÑпиÑок разрешенных</string>
+ <string name="query_permissions_sdcard">OpenVPN Ð´Ð»Ñ Android может попытатьÑÑ Ð½Ð°Ð¹Ñ‚Ð¸ отÑутÑтвующие файлы на SD-карте автоматичеÑки. Ðажмите на Ñто Ñообщение, чтобы получить Ð·Ð°Ð¿Ñ€Ð¾Ñ Ð½Ð° разрешение.</string>
<string name="protocol">Протокол</string>
<string name="enabled_connection_entry">Включено</string>
- <string name="months_left">%d меÑ. оÑталоÑÑŒ</string>
- <string name="days_left">%d д. оÑталоÑÑŒ</string>
- <string name="hours_left">%d ч. оÑталоÑÑŒ</string>
+ <string name="abi_mismatch">Preferred native ABI precedence of this device (%1$s) and ABI reported by native libraries (%2$s) mismatch</string>
+ <string name="permission_revoked">Разрешение VPN отозвано ОС (например, запущена Ð´Ñ€ÑƒÐ³Ð°Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð° VPN), оÑтанавливаем VPN</string>
+ <string name="pushpeerinfo">Отправить информацию об учаÑтнике</string>
+ <string name="pushpeerinfosummary">Отправить дополнительную информацию на Ñервер, например, верÑию SSL и верÑию Android</string>
+ <string name="pw_request_dialog_title">ТребуетÑÑ %1$s</string>
+ <string name="pw_request_dialog_prompt">ПожалуйÑта, введите пароль Ð´Ð»Ñ Ð¿Ñ€Ð¾Ñ„Ð¸Ð»Ñ %1$s</string>
+ <string name="menu_use_inline_data">ИÑпользовать вÑтроенные данные</string>
+ <string name="export_config_chooser_title">ЭкÑпорт файла конфигурации</string>
+ <string name="missing_tlsauth">файл tls-auth отÑутÑтвует</string>
+ <string name="missing_certificates">ОтÑутÑтвует Ñертификат Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¸Ð»Ð¸ файл ключа Ñертификата пользователÑ</string>
+ <string name="missing_ca_certificate">ОтÑутÑтвует Ñертификат ЦС</string>
+ <string name="crl_title">СпиÑок отозванных Ñертификатов (опционально)</string>
+ <string name="reread_log">Перечитать (%d) Ñлементов лога из файла кÑша лога</string>
+ <string name="samsung_broken">Даже неÑÐ¼Ð¾Ñ‚Ñ€Ñ Ð½Ð° то, что телефоны Samsung ÑвлÑÑŽÑ‚ÑÑ Ð¾Ð´Ð½Ð¸Ð¼Ð¸ из наиболее продаваемых телефонов на Android, прошивки Samsung также ÑвлÑÑŽÑ‚ÑÑ Ð¸ наиболее проблемными прошивками на Android. Ошибки не ограничиваютÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ работой VPN на Ñтих уÑтройÑтвах, но многие из них можно обойти. Далее опиÑаны некоторые из Ñтих ошибок.\n\nDNS не работает, еÑли Ñервер DNS не в диапазоне VPN.\n\nÐа многих уÑтройÑтвах Samsung 5.x Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ñ€Ð°Ð·Ñ€ÐµÑˆÑ‘Ð½Ð½Ñ‹Ñ…/запрещённых приложений не работает.\nÐа Samsung 6.x, как ÑообщаетÑÑ, VPN не работает, пока приложению VPN не разрешено не Ñкономить зарÑд батареи.</string>
+ <string name="samsung_broken_title">Телефоны Samsung</string>
+ <string name="novpn_selected">Ðе выбрано VPN.</string>
+ <string name="defaultvpn">VPN по умолчанию</string>
+ <string name="defaultvpnsummary">VPN, который будет иÑпользоватьÑÑ Ð¿Ð¾ умолчанию, когда Ñто необходимо. Рименно, при загрузке, Ð´Ð»Ñ Â«ÐŸÐ¾ÑтоÑнной VPN» и Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÐºÐ»ÑŽÑ‡Ð°Ñ‚ÐµÐ»Ñ Ð² «БыÑтрых наÑтройках».</string>
+ <string name="vpnselected">Ð’ наÑтоÑщее Ð²Ñ€ÐµÐ¼Ñ Ð²Ñ‹Ð±Ñ€Ð°Ð½ VPN: \'%s\'</string>
+ <string name="reconnect">Переподключить</string>
+ <string name="qs_title">Переключение VPN</string>
+ <string name="qs_connect">ПодключитьÑÑ Ðº %s</string>
+ <string name="qs_disconnect">ОтключитьÑÑ Ð¾Ñ‚ %s</string>
+ <string name="connectretrymaxmessage">Введите макÑимальное Ð²Ñ€ÐµÐ¼Ñ Ð¼ÐµÐ¶Ð´Ñƒ попытками ÑоединениÑ. OpenVPN будет медленно поднимать Ñвое Ð²Ñ€ÐµÐ¼Ñ Ð¾Ð¶Ð¸Ð´Ð°Ð½Ð¸Ñ Ð¿Ð¾Ñле неудачной попытки Ð¿Ð¾Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð´Ð¾ Ñтого значениÑ. По умолчанию 300 Ñек.</string>
+ <string name="connectretrymaxtitle">МакÑимальное Ð²Ñ€ÐµÐ¼Ñ Ð¼ÐµÐ¶Ð´Ñƒ попытками ÑоединениÑ</string>
+ <string name="state_waitconnectretry">Ожидание %ss Ñекунд между попыткой подключениÑ</string>
+ <string name="nought_alwayson_warning"><![CDATA[ЕÑли диалог Ð¿Ð¾Ð´Ñ‚Ð²ÐµÑ€Ð¶Ð´ÐµÐ½Ð¸Ñ VPN не открылÑÑ, то у Ð²Ð°Ñ Ð²Ñ‹Ð±Ñ€Ð°Ð½Ð¾ другое приложение в «ПоÑтоÑÐ½Ð½Ð°Ñ VPN». Это значит, что только данному приложению разрешено подключатьÑÑ Ðº VPN. Проверьте ÐаÑтройки -> (Сети) Ещё -> VPN]]></string>
+ <string name="management_socket_closed">Подключение к OpenVPN закрыто (%s)</string>
+ <string name="change_sorting">Изменить Ñортировку</string>
+ <string name="sort">Сортировать</string>
+ <string name="sorted_lru">Профили отÑортированы по порÑдку поÑледнего иÑпользованиÑ</string>
+ <string name="sorted_az">Профили отÑортированы по названию</string>
+ <string name="deprecated_tls_remote">Файл наÑтройки иÑпользует опцию tls-remote, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð±Ñ‹Ð»Ð° объÑвлена уÑтаревшей в верÑии 2.3 и окончательно удалена в верÑии 2.4</string>
+ <string name="auth_failed_behaviour">Поведение при AUTH_FAILED</string>
+ <string name="graph">График</string>
+ <string name="use_logarithmic_scale">ИÑпользовать логарифмичеÑкую шкалу</string>
+ <string name="notenoughdata">ÐедоÑтаточно данных</string>
+ <string name="avghour">Ð’ Ñреднем за чаÑ</string>
+ <string name="avgmin">Ð’ Ñреднем за минуту</string>
+ <string name="last5minutes">ПоÑледние 5 минут</string>
+ <string name="data_in">ВходÑщий</string>
+ <string name="data_out">ИÑходÑщий</string>
+ <string name="bits_per_second">%.0f бит/Ñ</string>
+ <string name="kbits_per_second">%.1f Кбит/Ñ</string>
+ <string name="mbits_per_second">%.1f Мбит/Ñ</string>
+ <string name="gbits_per_second">%.1f Гбит/Ñ</string>
+ <string name="volume_byte">%.0f Б</string>
+ <string name="volume_kbyte">%.1f КБ</string>
+ <string name="volume_mbyte">%.1f МБ</string>
+ <string name="volume_gbyte">%.1f ГБ</string>
</resources>
diff --git a/app/src/main/res/values-sl/plurals-icsopenvpn.xml b/app/src/main/res/values-sl/plurals-icsopenvpn.xml
new file mode 100755
index 00000000..a5975083
--- /dev/null
+++ b/app/src/main/res/values-sl/plurals-icsopenvpn.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<resources>
+ <plurals name="months_left">
+ <item quantity="one">Preostal je Å¡e en mesec</item>
+ <item quantity="two">Preostala sta Å¡e %d meseca</item>
+ <item quantity="few">Preostali so Å¡e %d meseci</item>
+ <item quantity="other">Preostalo je Å¡e %d mesecev</item>
+ </plurals>
+ <plurals name="days_left">
+ <item quantity="one">Preostal je Å¡e en dan</item>
+ <item quantity="two">Preostala sta Å¡e %d dneva</item>
+ <item quantity="few">Preostali so Å¡e %d-je dnevi</item>
+ <item quantity="other">Preostalih je Å¡e %d dni</item>
+ </plurals>
+ <plurals name="hours_left">
+ <item quantity="one">Preostala je Å¡e ena ura</item>
+ <item quantity="two">Preostali sta Å¡e %d uri</item>
+ <item quantity="few">Preostale so Å¡e %d ure</item>
+ <item quantity="other">Preostalo je Å¡e %d ur</item>
+ </plurals>
+ <plurals name="minutes_left">
+ <item quantity="one">Preostala je Å¡e ena minuta</item>
+ <item quantity="two">Preostali sta Å¡e %d minuti</item>
+ <item quantity="few">Preostale so Å¡e %d minute</item>
+ <item quantity="other">Preostalo je Å¡e %d minut</item>
+ </plurals>
+</resources>
diff --git a/app/src/main/res/values-sl/strings-icsopenvpn.xml b/app/src/main/res/values-sl/strings-icsopenvpn.xml
index 28634668..019e27e4 100755
--- a/app/src/main/res/values-sl/strings-icsopenvpn.xml
+++ b/app/src/main/res/values-sl/strings-icsopenvpn.xml
@@ -44,15 +44,16 @@
<string name="duplicate_profile_name">Vnesite edinstveno ime profila</string>
<string name="profilename">Ime profila</string>
<string name="no_keystore_cert_selected">Izbrati morate uporabniško potrdilo</string>
- <string name="no_error_found">Nobene napake ni bilo najdene</string>
+ <string name="no_ca_cert_selected">Izbrati morate potrdilo overitelja potrdil</string>
+ <string name="no_error_found">Ni najdenih napak</string>
<string name="config_error_found">Napaka v nastavitvah</string>
<string name="ipv4_format_error">Napaka pri razÄlenjevanju naslova IPv4</string>
<string name="custom_route_format_error">Napaka pri razÄlenjevanju poti po meri</string>
<string name="pw_query_hint">(pustite prazno za poizvedbo na zahtevo)</string>
<string name="vpn_shortcut">Bližnjica OpenVPN</string>
- <string name="vpn_launch_title">Poveži se v VPN</string>
+ <string name="vpn_launch_title">Povezovanje v VPN &#8230;</string>
<string name="shortcut_profile_notfound">Profila, doloÄenega v bližnjici, ni bilo mogoÄe najti</string>
- <string name="random_host_prefix">Predpona naklj. gostitelja</string>
+ <string name="random_host_prefix">Predpona nakljuÄnega gostitelja</string>
<string name="random_host_summary">Doda 6 nakljuÄnih znakov pred ime gostitelja</string>
<string name="custom_config_title">OmogoÄi možnosti po meri</string>
<string name="custom_config_summary">DoloÄite možnosti po meri. Uporabljajte previdno!</string>
@@ -164,7 +165,7 @@
<string name="private_key_password">Geslo zasebnega kljuÄa</string>
<string name="password">Geslo</string>
<string name="file_icon">ikona datoteke</string>
- <string name="tls_authentication">Overitev TLS</string>
+ <string name="tls_authentication">Overitev/Å ifriranje TLS</string>
<string name="generated_config">Ustvarjene nastavitve</string>
<string name="generalsettings">Nastavitve</string>
<string name="owner_fix_summary">Poizkusi nastaviti lastnika mape /dev/tun na sistem. Nekateri odtisi CM9 to potrebujejo za delovanje API-ja storitve VPN. Zahteva skrbniški dostop.</string>
@@ -203,9 +204,8 @@
<string name="using_proxy">Uporaba posredniškega strežnika %1$s %2$d</string>
<string name="use_system_proxy">Uporabi sis. pos. str.</string>
<string name="use_system_proxy_summary">Za povezavo uporabi nastavitve celega sistema za posredniške strežnike HTTP/HTTPS.</string>
- <string name="donatewithpaypal">Darujete lahko s &lt;a href=\"https://www.paypal.com/cgi-bin/webscr?hosted_button_id=R2M6ZP9AF25LS&amp;amp;cmd=_s-xclick\"&gt;PayPalom&lt;/a&gt; </string>
- <string name="onbootrestartsummary">OpenVPN bo ponovno povezal VPN, Äe je bil dejaven ob zaustavitvi/ponovnem zagonu sistema. Preberite pogosta vpraÅ¡anja opozoril o povezavi pred uporabo te možnosti.</string>
- <string name="onbootrestart">Pon. povez. ob pon. zag.</string>
+ <string name="onbootrestartsummary">OpenVPN bo povezal navedeni VPN, Äe je bil dejaven ob zagonu sistema. Preberite pogosta vpraÅ¡anja o opozorilih glede povezav pred uporabo te možnosti na Androidu &lt; 5.0.</string>
+ <string name="onbootrestart">Poveži ob zagonu</string>
<string name="ignore">Prezri</string>
<string name="restart">Ponovno zaženi</string>
<string name="restart_vpn_after_change">Spremembe nastavitev se bodo uporabile po ponovnem zagonu VPN-a. (Ponovno) zaženi VPN zdaj?</string>
@@ -252,7 +252,6 @@
<string name="state_tcp_connect">Povezovanje (TCP)</string>
<string name="state_auth_failed">Overitev je spodletela</string>
<string name="state_nonetwork">Čakanje na uporabno omrežje</string>
- <string name="statusline_bytecount">↓%2$s/s %1$s - ↑%4$s/s %3$s</string>
<string name="notifcation_title_notconnect">Ni povezan</string>
<string name="start_vpn_title">Povezovanje v VPN %s</string>
<string name="start_vpn_ticker">Povezovanje v VPN %s</string>
@@ -392,13 +391,45 @@
<string name="protocol">Protokol</string>
<string name="enabled_connection_entry">OmogoÄeno</string>
<string name="abi_mismatch">Prednostna izvirna predhodnost ABI (%1$s) in ABI, ki ga sporoÄajo izvirne knjižnice (%2$s), se ne ujemata.</string>
- <string name="months_left">Preostalih Å¡e %d mesecev</string>
- <string name="days_left">Preostalih Å¡e %d dni</string>
- <string name="hours_left">Preostalih Å¡e %d ur</string>
<string name="permission_revoked">OS je preklical dovoljenje VPN (npr. zagnan je bil drug program VPN), ustavljanje VPN-a</string>
<string name="pushpeerinfo">Potisni podatke o soležniku</string>
<string name="pushpeerinfosummary">PoÅ¡lji dodatne podatke na strežnik, npr. razliÄico SSL in Android</string>
<string name="pw_request_dialog_title">Zahtevano %1$s</string>
<string name="pw_request_dialog_prompt">Vnesite geslo za profil %1$s</string>
<string name="menu_use_inline_data">Uporabi podatke v besedilu</string>
+ <string name="export_config_chooser_title">Izvozi nastavitveno datoteko</string>
+ <string name="missing_tlsauth">Datoteka tls-auth manjka</string>
+ <string name="missing_certificates">Manjka uporabniÅ¡ko potrdilo ali datoteka kljuÄa uporabniÅ¡kega potrdila</string>
+ <string name="missing_ca_certificate">Manjka potrdilo CA</string>
+ <string name="crl_title">Seznam preklicanih potrdil (izbirno)</string>
+ <string name="reread_log">Ponovno preberite predmete dnevnika (%d) iz njegove predpomnjene datoteke</string>
+ <string name="samsung_broken">ÄŒeprav so Samsungovi telefoni eni najbolj prodajanih telefonov z Androidom, je strojna programska oprema njihovih telefonov ena najbolj hroÅ¡Äastih. HroÅ¡Äi niso omejeni na delovanje VPN-a in se veliko od njih da zaobiti. Tukaj je opisanih nekaj hroÅ¡Äev.\n\nDNS ne deluje, Äe strežnik DNS ni v dosegu VPN-a.\n\nNa veliko napravah Samsung 5.x znaÄilnost dovoljeni/nedovoljeni programi ne deluje.\nZa Samsungu 6.x je bilo sporoÄeno, da VPN ne deluje razen Äe je program za VPN dodan na seznam izjem znaÄilnosti varÄevanja z energijo.</string>
+ <string name="samsung_broken_title">Telefoni Samsung</string>
+ <string name="novpn_selected">VPN ni izbran.</string>
+ <string name="vpnselected">Trenutno izbrani VPN: \'%s\'</string>
+ <string name="reconnect">Ponovno poveži</string>
+ <string name="qs_title">Preklopi VPN</string>
+ <string name="qs_connect">Poveži se v %s</string>
+ <string name="qs_disconnect">Prekini povezavo s/z %s</string>
+ <string name="connectretrymaxmessage">Vnesite najdaljÅ¡i Äas med poizkusi povezave. OpenVPN bo po neuspeÅ¡nem poizkusu povezave poÄasi poveÄeval Äakalni Äas do te vrednosti. Privzeto je 300 s.</string>
+ <string name="connectretrymaxtitle">NajdaljÅ¡i Äas med poizkusi povezave</string>
+ <string name="state_waitconnectretry">ÄŒakanje %s s med poizkusi povezave</string>
+ <string name="nought_alwayson_warning"><![CDATA[ÄŒe niste dobili potrditvenega pogovornega okna VPN, imate v drugem programu omogoÄeno \"Vedno z VPN-om\". V tem primeru se lahko v VPN poveže samo ta program. Preverite v Nastavitve -> Omrežje (veÄ) ... -> VPN-i]]></string>
+ <string name="management_socket_closed">Povezava v OmenVPN zaprta (%s)</string>
+ <string name="change_sorting">Spremeni razvrÅ¡Äanje</string>
+ <string name="sort">Razvrsti</string>
+ <string name="sorted_lru">Profili, razvrÅ¡Äeni po nazadnje uporabljenem</string>
+ <string name="sorted_az">Profili, razvrÅ¡Äeni po imenu</string>
+ <string name="deprecated_tls_remote">Nastavitve uporabljajo možnost tls-remote, ki je bila opuÅ¡Äena v raz. 2.3 in konÄno odstranjena v raz. 2.4</string>
+ <string name="graph">Graf</string>
+ <string name="notenoughdata">Ni dovolj podatkov</string>
+ <string name="last5minutes">Zadnjih 5 minut</string>
+ <string name="bits_per_second">%.0f bit/s</string>
+ <string name="kbits_per_second">%.1f kbit/s</string>
+ <string name="mbits_per_second">%.1f Mbit/s</string>
+ <string name="gbits_per_second">%.1f Gbit/s</string>
+ <string name="volume_byte">%.0f B</string>
+ <string name="volume_kbyte">%.1f kB</string>
+ <string name="volume_mbyte">%.1f MB</string>
+ <string name="volume_gbyte">%.1f GB</string>
</resources>
diff --git a/app/src/main/res/values-sv/plurals-icsopenvpn.xml b/app/src/main/res/values-sv/plurals-icsopenvpn.xml
new file mode 100755
index 00000000..9bab8338
--- /dev/null
+++ b/app/src/main/res/values-sv/plurals-icsopenvpn.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<resources>
+ <plurals name="months_left">
+ <item quantity="one">En månad kvar</item>
+ <item quantity="other">%d månader kvar</item>
+ </plurals>
+ <plurals name="days_left">
+ <item quantity="one">En dag kvar</item>
+ <item quantity="other">%d dagar kvar</item>
+ </plurals>
+ <plurals name="hours_left">
+ <item quantity="one">En timme kvar</item>
+ <item quantity="other">%d timmar kvar</item>
+ </plurals>
+ <plurals name="minutes_left">
+ <item quantity="one">En minut kvar</item>
+ <item quantity="other">%d minuter kvar</item>
+ </plurals>
+</resources>
diff --git a/app/src/main/res/values-sv/strings-icsopenvpn.xml b/app/src/main/res/values-sv/strings-icsopenvpn.xml
index 075de908..585844fa 100755
--- a/app/src/main/res/values-sv/strings-icsopenvpn.xml
+++ b/app/src/main/res/values-sv/strings-icsopenvpn.xml
@@ -44,13 +44,14 @@
<string name="duplicate_profile_name">Vänligen ange ett unikt Profilnamn</string>
<string name="profilename">Profilnamn</string>
<string name="no_keystore_cert_selected">Du måste välja ett användarcertifikat</string>
+ <string name="no_ca_cert_selected">Du måste välja ett CA-certifikat</string>
<string name="no_error_found">Inga fel hittades</string>
<string name="config_error_found">Fel i konfigurationen</string>
<string name="ipv4_format_error">Det går inte att tolka IPv4-adressen</string>
<string name="custom_route_format_error">Det går inte att tolka de anpassade rutterna</string>
<string name="pw_query_hint">(lämna tom för förfrågan vid behov)</string>
<string name="vpn_shortcut">OpenVPN genväg</string>
- <string name="vpn_launch_title">Ansluta till VPN</string>
+ <string name="vpn_launch_title">Ansluter till VPN&#8230;</string>
<string name="shortcut_profile_notfound">Profilen som anges i genvägen hittades inte</string>
<string name="random_host_prefix">Slumpmässigt värd-prefix</string>
<string name="random_host_summary">Lägger till 6 slumpmässiga tecken framför hostname</string>
@@ -159,12 +160,12 @@
<string name="converted_profile">importerad profil</string>
<string name="converted_profile_i">importerad profil %d</string>
<string name="broken_images">Trasiga ROM</string>
- <string name="broken_images_faq">lt;pgt;Officiella HTC ROM är kända för att ha ett konstigt rutt problem som orsakar att trafik inte går genom tunneln (Se även &lt;a href=\"http://code.google.com/p/ics-openvpn/issues/detail?id=18\"&gt;Ärende 18&lt;/a&gt; i äredehanteringen.)&lt;/p&gt;&lt;p&gt;Äldre officiella SONY ROM för Xperia Arc S och Xperia Ray har rapporterats sakna VPNService helt. (Se även &lt;a href=\"http://code.google.com/p/ics-openvpn/issues/detail?id=29\"&gt;Ärende 29&lt;/a&gt; i ärendehanteringen.)&lt;/p&gt;&lt;p&gt;I anpassade/modifierade ROM kan tun modulen saknas eller rättigheterna på /dev/tun kan vara fel. Vissa CM9 ROM behöver alternativet \"Fixa ägande\" under \"Modellanpassade hack\" ikryssat.&lt;/p&gt;&lt;p&gt;Viktigt: Om du har en trasig ROM, rapportera det till din leverantör. Ju fler människor som rapportera problemet till leverantören desto mer sannolikt är det att det kommer en rättning.&lt;/p&gt;</string>
+ <string name="broken_images_faq">&lt;p&gt;Officiella HTC ROM är kända för att ha ett konstigt rutt problem som orsakar att trafik inte går genom tunneln (Se även &lt;a href=\"http://code.google.com/p/ics-openvpn/issues/detail?id=18\"&gt;Ärende 18&lt;/a&gt; i äredehanteringen.)&lt;/p&gt;&lt;p&gt;Äldre officiella SONY ROM för Xperia Arc S och Xperia Ray har rapporterats sakna VPNService helt. (Se även &lt;a href=\"http://code.google.com/p/ics-openvpn/issues/detail?id=29\"&gt;Ärende 29&lt;/a&gt; i ärendehanteringen.)&lt;/p&gt;&lt;p&gt;I anpassade/modifierade ROM kan tun modulen saknas eller rättigheterna på /dev/tun kan vara fel. Vissa CM9 ROM behöver alternativet \"Fixa ägande\" under \"Modellanpassade hack\" ikryssat.&lt;/p&gt;&lt;p&gt;Viktigt: Om du har en trasig ROM, rapportera det till din leverantör. Ju fler människor som rapportera problemet till leverantören desto mer sannolikt är det att det kommer en rättning.&lt;/p&gt;</string>
<string name="pkcs12_file_encryption_key">Krypteringsnyckel för PKCS12-filen</string>
<string name="private_key_password">Lösenord för privat nyckel</string>
<string name="password">Lösenord</string>
<string name="file_icon">filikon</string>
- <string name="tls_authentication">TLS-autentisering</string>
+ <string name="tls_authentication">TLS-autentisering/kryptering</string>
<string name="generated_config">Genererad konfiguration</string>
<string name="generalsettings">Inställningar</string>
<string name="owner_fix_summary">Försöker att sätta ägaren av /dev/tun till system. Vissa CM9 ROM behöver detta för att VPNService API ska fungera. Detta kräver root.</string>
@@ -203,26 +204,27 @@
<string name="using_proxy">Använder proxy %1$s %2$d</string>
<string name="use_system_proxy">Använd system proxy</string>
<string name="use_system_proxy_summary">Använda systemkonfigurationen för HTTP/HTTPS proxy för att ansluta.</string>
- <string name="donatewithpaypal">Du kan &lt;a href=\"https://www.paypal.com/cgi-bin/webscr?hosted_button_id=R2M6ZP9AF25LS&amp;amp;cmd=_s-xclick\"&gt;donera via PayPal&lt;/a&gt; </string>
- <string name="onbootrestartsummary">OpenVPN återansluter VPN om den var aktiv vid avstängning/omstart. Läs FAQ om anslutningsvarning innan du använder detta alternativ.</string>
- <string name="onbootrestart">Ã…teranslut vid omstart</string>
+ <string name="onbootrestartsummary">OpenVPN kommer att ansluta angiven VPN om den var aktivt vid systemets uppstart. Vänligen läs anslutningsvarnings FAQ innan du använder det här alternativet på Android &lt; 5.0.</string>
+ <string name="onbootrestart">Anslut vid uppstart</string>
<string name="ignore">Ignorera</string>
<string name="restart">Starta om</string>
<string name="restart_vpn_after_change">Konfigurationsändringar tillämpas efter omstart av VPN. Starta(om) VPN nu?</string>
<string name="configuration_changed">Konfigurationen ändrades</string>
<string name="log_no_last_vpn">Kunde inte avgöra vilken den sista anslutna profilen var för redigering</string>
- <string name="faq_duplicate_notification_title">Dubblerade meddelanden</string>
+ <string name="faq_duplicate_notification_title">Dubbla noteringar</string>
<string name="faq_duplicate_notification">Om Android tillfälligt har brist på systemminne (RAM), tas program och tjänster som inte behövs just nu bort från aktiva minnet. Detta avslutar en pågående VPN-anslutning. För att se till att pågående anslutning/OpenVPN överlever körs denna tjänst med högre prioritet. För att köra med högre prioritet måste applikationen visa en notifikation. Nyckelikonen visas av systemet, som beskrivs i FAQ tidigare, och räknas inte som ett meddelande som ger rättighet att köra med högre prioritet.</string>
<string name="no_vpn_profiles_defined">Inga VPN-profiler har definierats.</string>
<string name="add_new_vpn_hint">Använd &lt;img src=\"ic_menu_add\"/&gt; ikonen för att lägga till en ny VPN</string>
<string name="vpn_import_hint">Använd &lt;img src=\"ic_menu_archive\"/&gt; ikonen för att importera en befintlig (.ovpn eller .conf) profil från ditt sd-kort.</string>
<string name="faq_hint">Tänk på att titta i FAQ\'n. Där finns en snabbstartguide.</string>
<string name="faq_routing_title">Konfiguration för rutter/gränssnitt</string>
+ <string name="faq_routing">Omdirigering och gränssnittskonfiguration görs inte via traditionella ifconfig/rutt kommandon men med hjälp av VPNService API. Detta resulterar i en annan omdirigering konfigurering än på andra operativsystem. \nKonfiguration av VPN-tunneln består av IP-adressen och de nätverk som ska dirigeras över detta gränssnitt. Speciellt behövs eller krävs ingen inbördes partner adress eller gatewayadress. Särskilda rutter för att nå VPN-server (t.ex. när du använder omdirigera-gateway) behövs inte heller. Applikationen kommer följaktligen ignorera dessa inställningar när du importerar en konfiguration. Applikationen försäkrar med VPNService API att anslutningen till servern inte dirigeras genom VPN-tunnel.\nVPNService API tillåter inte att specificera nätverk som inte ska dirigeras via VPN. Som en lösning försöker applikationen att identifiera nätverk som inte ska dirigeras över tunneln (t.ex. rutt x.x.x.x y.y.y.y net_gateway) och beräknar en uppsättning av rutter som utesluter dessa rutter att efterlikna beteendet hos andra plattformar. Loggnings fönstret visar konfigurationen av VPNService då en upprättning av anslutning.\nBakom kulisserna. Android 4.4+ använder policy omdirigering. Användning av rutt/ifconfig kommer inte att visa installerade rutter. Använd istället ip regel, iptables -t mangle -L</string>
<string name="persisttun_summary">Fall inte tillbaka till ingen VPN-anslutning när OpenVPN återansluter.</string>
<string name="persistent_tun_title">Ihållande tun</string>
<string name="openvpn_log">OpenVPN Log</string>
<string name="import_config">Importera OpenVPN konfiguration</string>
<string name="battery_consumption_title">Batteriförbrukning</string>
+ <string name="baterry_consumption">I mina personliga tester är den främsta orsaken till hög batteriförbrukning vid användning av OpenVPN hållvidliv-paketen. De flesta OpenVPN servrar har en konfiguration med \"keepalive 10 60\" som leder till att hållvidliv-paket skickas från klienten till servern och från servern till klienten var tionde sekund. &lt;p&gt; Även om dessa paket är små och inte använder mycket datatrafik håller de det mobila radionätet upptaget och ökar på så vis energiförbrukningen. (Se även &lt;a href=\"http://developer.android.com/training/efficient-downloads/efficient-network-access.html#RadioStateMachine\"&gt;The Radio State Machine | Android Developers&lt;/a&gt;) &lt;p&gt; Denna hållvidliv-inställning kan inte ändras i klienten. Endast systemadministratören för OpenVPN kan ändra inställningen. &lt;p&gt; Tyvärr leder en hållvidliv som är större än 60 sekunder med UDP till att vissa NAT-gateways tappar anslutningen efter en kort timeout (60 sekunder i mina tester). Via TCP med lång hållvidliv fungerar men ger TCP över TCP problem. (Se &lt;a href=\"http://sites.inka.de/bigred/devel/tcp-tcp.html\"&gt;varför TCP över TCP är en dålig idé&lt;/a&gt;)</string>
<string name="faq_tethering">Funktionen Internetdelning i Android (över WiFi, USB eller Bluetooth) och VPNService API (används av denna applikation) fungerar inte tillsammans. För mer information se &lt;a href=\"http://code.google.com/p/ics-openvpn/issues/detail?id=34\"&gt;ärende #34&lt;/a&gt;</string>
<string name="vpn_tethering_title">VPN och Internetdelning</string>
<string name="connection_retries">Anslutningsförsök</string>
@@ -250,7 +252,7 @@
<string name="state_tcp_connect">Ansluter (TCP)</string>
<string name="state_auth_failed">Autentisering misslyckades</string>
<string name="state_nonetwork">Väntar på användbart nätverk</string>
- <string name="statusline_bytecount">↓%2$s/s %1$s - ↑%4$s/s %3$s</string>
+ <string name="statusline_bytecount">↓%2$s %1$s - ↑%4$s %3$s</string>
<string name="notifcation_title_notconnect">Inte ansluten</string>
<string name="start_vpn_title">Ansluter till VPN %s</string>
<string name="start_vpn_ticker">Ansluter till VPN %s</string>
@@ -272,7 +274,7 @@
<string name="tls_remote_deprecated">TLS-remote (ej längre i bruk)</string>
<string name="help_translate">Du kan hjälpa till med översättningen genom att besöka http://crowdin.net/project/ics-openvpn/invite</string>
<string name="prompt">%1$s försöker styra %2$s</string>
- <string name="remote_warning">Genom att fortsätta ger du applikationen tilstånd att fullständigt styra OpenVPM för Android och att avlyssna all nätverkstrafik. <b>Acceptera INTE om du inte litar på applikationen.</b> Annars riskerar du att din data äventyras av skadlig programvara.\"</string>
+ <string name="remote_warning">Genom att fortsätta ger du applikationen tilstånd att fullständigt styra OpenVPN för Android och att avlyssna all nätverkstrafik. <b>Acceptera INTE om du inte litar på applikationen.</b> Annars riskerar du att din data äventyras av skadlig programvara.\"</string>
<string name="remote_trust">Jag litar på denna applikation.</string>
<string name="no_external_app_allowed">Ingen app får använda externa API</string>
<string name="allowed_apps">Tillåtna apps: %s</string>
@@ -286,46 +288,158 @@
<string name="resumevpn">Ã…teruppta VPN</string>
<string name="state_userpause">VPN paus begärs av användaren</string>
<string name="state_screenoff">VPN paus - skärmen av</string>
+ <string name="device_specific">Enhetsutförande Hacks</string>
<string name="cannotparsecert">Kan inte visa certifikatinformation</string>
<string name="appbehaviour">Ansökan beteende</string>
<string name="vpnbehaviour">VPN beteende</string>
<string name="allow_vpn_changes">Tillåta ändringar av VPN profiler</string>
<string name="hwkeychain">HÃ¥rdvara Keystore:</string>
<string name="permission_icon_app">Ikonen för appen försöker använda OpenVPN för Android</string>
+ <string name="faq_vpndialog43">"Från och med Android 4.3, så är dialogrutan för att godkänna VPN-anslutning skyddad mot \"appar som lägger sig över\". Detta gör att dialogen spärras mot tryckningar. Om du använder en app som lägger sig över andra appar, så kan detta orsaka det beteendet. Om du hittar den trilskande appen, kontakta skaparen av den appen. Detta problem påverkar alla VPN-appar på Android 4.3 och senare. Se också &lt;a href=\"https://github.com/schwabe/ics-openvpn/issues/185\"&gt;Ärende 185&lt;a&gt; för mer information"</string>
<string name="faq_vpndialog43_title">Vpn Bekräftelse Dialog</string>
<string name="donatePlayStore">Alternativt kan du skicka mig en donation med Play Store:</string>
+ <string name="thanks_for_donation">Tack för att du donerar %s!</string>
<string name="logCleared">Log rensas.</string>
<string name="show_password">Visa lösenord</string>
+ <string name="keyChainAccessError">Nyckelhanterare fel: %s</string>
<string name="timestamp_short">Kort</string>
<string name="timestamp_iso">ISO</string>
<string name="timestamps">Tidsstämplar</string>
<string name="timestamps_none">Ingen</string>
<string name="uploaded_data">Ladda upp</string>
<string name="downloaded_data">Hämta</string>
+ <string name="vpn_status">VPN-status</string>
<string name="logview_options">Visa alternativ</string>
+ <string name="unhandled_exception">Ohanterat undantag: %1$s\n\n%2$s</string>
<string name="unhandled_exception_context">%3$s: %1$s\n\n%2$s</string>
+ <string name="faq_system_dialog_xposed">Om du har rootat din Android-enhet, så kan du installera &lt;a href=\"http://xposed.info/\"&gt;Xposed-ramverket&lt;/a&gt; och &lt;a href=\"http://repo.xposed.info/module/de.blinkt.vpndialogxposed\"&gt;VPN-bekräftelsemodulen&lt;/a&gt; på egen risk\"</string>
+ <string name="full_licenses">Fullständiga licensavtal</string>
+ <string name="blocklocal_summary">Nätverk direkt kopplade till lokala gränssnitt kommer inte att dirigeras över VPN. Avmarkering av detta alternativ kommer att omdirigera all trafik avsedda för lokala nätverk till VPN.</string>
<string name="blocklocal_title">Kringgå VPN för lokala nätverk</string>
<string name="userpw_file">Användarnamn / lösenord fil</string>
<string name="imported_from_file">[Importerad från: %s]</string>
+ <string name="files_missing_hint">Vissa filer kunde inte hittas. Välj filer för att importera profil:</string>
+ <string name="openvpn_is_no_free_vpn">För att använda denna applikation behöver du en VPN-leverantör/VPN-gateway som stöder OpenVPN (ofta tillhandahållen av din arbetsgivare). Kolla http://community.openvpn.net/ för mer information om OpenVPN och hur man ställer in en egen OpenVPN-server.</string>
<string name="import_log">Importloggen:</string>
+ <string name="ip_looks_like_subnet">Vpn-topologi \"%3$s\" specifierad, men ifconfig %1$s %2$s ser ut att vara en IP-adress med en nätmask. Antar \"subnet\"-topologi.</string>
+ <string name="mssfix_invalid_value">MSS överbelastningsvärde måste vara en heltal mellan 0 och 9000</string>
+ <string name="mtu_invalid_value">MTU-överskridningsvärdet måste vara ett heltal mellan 64 och 9000</string>
+ <string name="mssfix_value_dialog">Meddela TCP-sessioner som körs över tunneln att de ska begränsa sina sändningspaketstorlekar så att efter OpenVPN har inkapslat dem, kommer den resulterande UDP-paketstorleken som OpenVPN skickar till dess peerer inte överstiga detta antal byte. (Standard är 1450)</string>
+ <string name="mssfix_checkbox">Kringgå MSS-värdet för innehållet i TCP-paket</string>
+ <string name="mssfix_dialogtitle">Ställ in MSS för innehållet i TCP-paket</string>
<string name="client_behaviour">Klientens beteende</string>
+ <string name="clear_external_apps">Rensa tillåtna externa applikationer</string>
<string name="loading">Laddar...</string>
+ <string name="allowed_vpn_apps_info">Tillåtna VPN-applikationer: %1$s</string>
+ <string name="disallowed_vpn_apps_info">Otillåtna VPN-applikationer: %1$s</string>
+ <string name="app_no_longer_exists">Paket %s är inte längre installerat, ta bort den från tillåtna/otillåtna applikationslistan</string>
+ <string name="vpn_disallow_radio">VPN används för alla applikationer men exkluderar valda</string>
+ <string name="vpn_allow_radio">VPN används endast för utvalda applikationer</string>
+ <string name="query_delete_remote">Radera serverpost?</string>
<string name="keep">Ha kvar</string>
<string name="delete">Radera</string>
+ <string name="add_remote">Lägg till ny server</string>
+ <string name="remote_random">Använd anslutnings poster i slumpmässig ordning på Anslut</string>
+ <string name="remote_no_server_selected">Du måste definiera och aktivera åtminstone en fjärrserver.</string>
<string name="server_list">Serverlista</string>
<string name="vpn_allowed_apps">Tillåtna appar</string>
+ <string name="advanced_settings">Avancerade inställningar</string>
+ <string name="payload_options">Alternativ för paketinnehåll</string>
+ <string name="tls_settings">TLS-inställningar</string>
+ <string name="no_remote_defined">Ingen server specifierad</string>
+ <string name="duplicate_vpn">Duplicera VPN-profil</string>
+ <string name="duplicate_profile_title">Duplicerar profil: %s</string>
<string name="show_log">Visa logg</string>
+ <string name="faq_android_clients">Flera OpenVPN klienter för Android finns. Den vanligaste är OpenVPN för Android (denna klient), OpenVPN Connect och OpenVPN Settings.&lt;p&gt;Klienterna kan delas in i två grupper: OpenVPN för Android och OpenVPN Connect använder den officiella VPNService API:n (Android 4.0+) och kräver ingen rot och OpenVPN Settings som använder rot.&lt;p&gt;OpenVPN for Android är en klient med öppen källkod som har utvecklats av Arne Schwabe. Den riktar sig till mer avancerade användare och erbjuder många inställningar och möjligheten som att importera profiler från filer och konfigurera/ändra profiler inuti appen. Klienten bygger på den gemensamma versionen av OpenVPN. Den är baserad på OpenVPN 2.x källkod. Denna klient kan ses som den halvt officiella klienten i gemenskapen. &lt;p&gt;OpenVPN Connect har inte öppen källkod klient och är utvecklad av OpenVPN Technologies, Inc. Klienten indragen för allmänt bruk och mer inriktad på den genomsnittlige användaren och tillåter importering av OpenVPN profiler. Denna klient är baserad på OpenVPN C ++ reimplementation av OpenVPN protokollet (detta krävdes för att tillåta OpenVPN Technologies, Inc att publicera en iOS OpenVPN app). Denna klient är den officiella klienten av OpenVPN teknik &lt;p&gt; OpenVPN Settings är den äldsta av klienterna och även för UI för OpenVPN öppna källkod. I motsats till OpenVPN för Android kräver den rot och använder inte VPNService API. Den beror inte på Android 4.0+</string>
<string name="faq_androids_clients_title">Skillnader mellan OpenVPN Android klienterna</string>
<string name="ignore_multicast_route">Ignorera multicast rutt: %s</string>
+ <string name="ab_only_cidr">Android stödjer bara rutter specifierade i CIDR-format för VPNet. Eftersom rutter specifierade utan CIDR nästan aldrig används, så kommer OpenVPN för Android använda /32 för dessa rutter, och ge en varning.</string>
+ <string name="ab_tethering_44">Internetdelning fungerar medans VPNet är aktivt. Den delade anslutningen kommer INTE gå via VPNet.</string>
<string name="ab_kitkat_mss">Tidigt KitKat version anger fel MSS värdet på TCP-anslutningar (# 61.948). Försök att göra det möjligt för mssfix möjlighet att kringgå denna bugg.</string>
+ <string name="ab_proxy">Android kommer att använda de proxyinställningar som har ställts in för anslutningen över mobilnät/trådlöst när inga DNS-servrar är inställda. OpenVPN kommer att varna för detta i loggen.<p>När en VPN-anslutning anger en DNS-server, kommer Android att hoppa över proxyn. Det finns inget API för att ange en proxy för en VPN-anslutning.</p></string>
<string name="ab_lollipop_reinstall">VPN appar kan sluta fungera när avinstalleras och installeras igen. För mer information se # 80074</string>
+ <string name="ab_not_route_to_vpn">Det konfigurerade klient-IPt och de IP-nummer som omfattas av dess nätmask är inte ruttade via VPNet. OpenVPN kommer att motarbeta denna bugg genom att explicit lägga till en rutt som omfattar klient-IPt och dess nätmask</string>
+ <string name="ab_persist_tun">Att öppna en tun-enhet medans en annan tun-enhet är aktiv, och denna används för ihållande tun, kommer att krascha VPN-funktionen på enheten. Detta innebär att enheten måste startas om för att VPN skall fungera igen. OpenVPN för Android försöker undvika att öppna tun-enheten på nytt, och om det verkligen behövs, då stänga befintliga tun-anslutningar innan den öppnar den nya tun-enheten för att undvika denna krasch. Detta kan leda till ett litet tidsfönster där paket kan läcka ut utanför VPN-anslutningen. Även med denna fix, så kraschar ibland VPN-funktionen, och kräver då att enheten startas om.</string>
+ <string name="ab_secondary_users">VPN fungerar inte över huvud taget för extra användarkonton.</string>
+ <string name="ab_kitkat_reconnect">"Flera användare har rapporterat att anslutningen till mobilnätverket går ner då och då medans denna VPN-app används. Detta beteende verkar bara påverka vissa kombinationer av operatörer/enheter, och vi har hittils inte hittat någon orsak/lösning för buggen."</string>
+ <string name="ab_vpn_reachability_44">Bara destination kan nås över VPN som kan nås utan VPN. IPv6-VPN fungerar inte alls.</string>
<string name="ab_only_cidr_title">Icke CIDR rutter</string>
+ <string name="ab_proxy_title">Proxy beteende för VPN</string>
<string name="ab_lollipop_reinstall_title">Installera om VPN appar</string>
<string name="version_upto">%s och tidigare</string>
<string name="copy_of_profile">Kopia av %s</string>
+ <string name="ab_not_route_to_vpn_title">Rutt till den konfigurerade IP-adressen</string>
+ <string name="ab_kitkat_mss_title">Fel MSS-värde för VPN-anslutning</string>
+ <string name="ab_secondary_users_title">Sekundära surfplattsanvändare</string>
+ <string name="custom_connection_options_warng">Ange anpassade anslutningsspecifika alternativ. Används med försiktighet</string>
+ <string name="custom_connection_options">Anpassade alternativ</string>
+ <string name="remove_connection_entry">Ta bort anslutningspost</string>
+ <string name="ab_kitkat_reconnect_title">Intermittienta frånkopplingar från mobilnätverk</string>
+ <string name="ab_vpn_reachability_44_title">VPN-nätverket är inte nåbart</string>
+ <string name="ab_persist_tun_title">Ihållande tun-läge</string>
+ <string name="version_and_later">%s och senare</string>
+ <string name="tls_cipher_alert_title">Anslutningar misslyckas med SSL23_GET_SERVER_HELLO:SSLv3 alert handskakningsfel</string>
+ <string name="tls_cipher_alert">Nyare OpenVPN för Android-versioner (0.6.29/mars 2015) använder en säkrare standard för de tillåtna krypteringssviter (tls-chiffer \"DEFAULT:!EXP:!PSK:!SRP:!kRSA\"). Tyvärr, utelämna mindre säker krypteringssviter och exportchiffersviter, särskilt utelämnandet av chiffersviter som inte stöder Perfect Forward Secrecy (Diffie-Hellman) orsakar några problem. Detta orsakas oftast av en välmenande men dåligt utförda försök att stärka TLS-säkerhet genom att tls-chiffer på servern eller några inbäddade operativsystem med avskalad SSL (t.ex. MikroTik).\nFör att lösa problemet, ställa in tls-chiffer inställningar på servern till rimlig standard som tls-siffran \"DEFAULT:!EXP:!PSK:!SRP:!kRSA\". För att komma runt problemet med klienten lägg till anpassad alternativ tls-chiffer DEFAULT i Android-klienten.</string>
+ <string name="message_no_user_edit">Den här profilen har lagts från en extern app (%s) och har markerats som oredigerbar av användare.</string>
+ <string name="crl_file">Lista över återkallade certifikat</string>
+ <string name="service_restarted">Startar om OpenVPN Service (Applikationen har antagligen kraschat eller avlivats för minnespress)</string>
+ <string name="import_config_error">Importera config gav ett fel, kan inte spara det</string>
<string name="Search">Sök</string>
+ <string name="lastdumpdate">(Senaste dumpningen är %1$d:%2$dh gamla (%3$s))</string>
+ <string name="clear_log_on_connect">Rensa loggen vid ny anslutning</string>
+ <string name="connect_timeout">Anslutningsavbrott</string>
+ <string name="no_allowed_app">Ingen godkänd app har lagts till. Denna app (%s) läggs till i listan över godkända appar för att inte alla appar skall godkännas</string>
+ <string name="query_permissions_sdcard">OpenVPN för Android kan försöka upptäcka de saknade fil(erna) på SD-kortet automatiskt. Tryck på det här meddelandet för att ge tillstånd för att starta.</string>
<string name="protocol">Protokoll</string>
<string name="enabled_connection_entry">Aktiverad</string>
- <string name="days_left">%d dagar kvar</string>
- <string name="hours_left">%d timmar kvar</string>
+ <string name="abi_mismatch">Önskemålet av ABI för denna enhet (%1$s) och det ABI som rapporteras av de inlästa biblioteken (%2$s) stämmer inte överens</string>
+ <string name="permission_revoked">VPN-tillstånd återkallas av operativsystemet (t.ex. andra VPN-program har startats), stoppar VPN</string>
+ <string name="pushpeerinfo">Skicka klientinformation till servern</string>
+ <string name="pushpeerinfosummary">Skicka extra information till servern, t.ex. SSL-versionen och Android-version</string>
+ <string name="pw_request_dialog_title">Behöver %1$s</string>
+ <string name="pw_request_dialog_prompt">Ange lösenordet för profil %1$s</string>
+ <string name="menu_use_inline_data">Använd inline-data</string>
+ <string name="export_config_chooser_title">Exportera konfigurationsfil</string>
+ <string name="missing_tlsauth">Filen för TLS-autensitering saknas</string>
+ <string name="missing_certificates">Filen för användarcertifikatet, eller filen för dess privata nyckel, saknas</string>
+ <string name="missing_ca_certificate">CA-certifikat saknas</string>
+ <string name="crl_title">Lista över återkallade certifikat (valfri)</string>
+ <string name="reread_log">Läs in (%d) loggrader från loggens cachefil på nytt</string>
+ <string name="samsung_broken">Även om Samsung telefoner är bland de mest säljande Android-telefoner, Samsungs mjukvara är också bland de mest buggiga Android mjukvarorna. Buggarna är inte begränsade till VPN driften på dessa enheter, men många av dem kan gås runt. Till följd beskrivs några av dessa buggar.\n\nDNS fungerar inte om inte DNS-servern finns VPN intervallet.\n\nPå många Samsung 5.x enheter fungerar inte de tillåtna/otillåtna programmen.\nSamsung 6.x VPN har rapporteras att inte fungera om VPN-appen är undantagen från energisparfunktioner.</string>
+ <string name="samsung_broken_title">Samsung-telefoner</string>
+ <string name="novpn_selected">Ingen VPN-anslutning vald.</string>
+ <string name="defaultvpn">Förvald VPN</string>
+ <string name="defaultvpnsummary">VPN används på platser där en förvald VPN behövs. Dessa är för närvarande vid uppstart, för Always-On och Quick Settings Tile.</string>
+ <string name="vpnselected">För närvarande vald VPN: \'%s\'</string>
+ <string name="reconnect">Ã…teransluta</string>
+ <string name="qs_title">Omkoppla VPN</string>
+ <string name="qs_connect">Anslut till %s</string>
+ <string name="qs_disconnect">Koppla från %s</string>
+ <string name="connectretrymaxmessage">Ange den maximala tiden mellan anslutningsförsök. OpenVPN kommer sakta höja dess väntetid efter ett misslyckat anslutningsförsök upp till detta värde. Standardvärdet är 300s.</string>
+ <string name="connectretrymaxtitle">Maximal tid mellan anslutningsförsök</string>
+ <string name="state_waitconnectretry">Vänta %ss sekunder mellan anslutningsförsök</string>
+ <string name="nought_alwayson_warning"><![CDATA[Om du inte fick en VPN-bekräftelsesdialog har du \"Alltid på VPN\" aktiverat för en annan app. I så fall får bara den appen ansluta till en VPN. Kontrollera under Inställningar-> Nätverk mer .. -> VPNS]]></string>
+ <string name="management_socket_closed">Anslutning till OpenVPN stängd (%s)</string>
+ <string name="change_sorting">Ändra sortering</string>
+ <string name="sort">Sortera</string>
+ <string name="sorted_lru">Profiler sorterade efter senast använt</string>
+ <string name="sorted_az">Profiler sorterade efter namn</string>
+ <string name="deprecated_tls_remote">Config använder alternativ tls-fjärrkontroll som avlägsnades i 2.3 och slutligen avlägsnades i 2.4</string>
+ <string name="auth_failed_behaviour">Beteende vid AUTH_FAILED</string>
+ <string name="graph">Graf</string>
+ <string name="use_logarithmic_scale">Använd logaritmisk skala</string>
+ <string name="notenoughdata">Inte tillräckligt med data</string>
+ <string name="avghour">Genomsnitt per timme</string>
+ <string name="avgmin">Genomsnitt per minut</string>
+ <string name="last5minutes">Senaste 5 minuter</string>
+ <string name="data_in">In</string>
+ <string name="data_out">Ut</string>
+ <string name="bits_per_second">%.0f bit/s</string>
+ <string name="kbits_per_second">%.1f kbit/s</string>
+ <string name="mbits_per_second">%.1f Mbit/s</string>
+ <string name="gbits_per_second">%.1f Gbit/s</string>
+ <string name="volume_byte">%.0f B</string>
+ <string name="volume_kbyte">%.1f kB</string>
+ <string name="volume_mbyte">%.1f MB</string>
+ <string name="volume_gbyte">%.1f GB</string>
</resources>
diff --git a/app/src/main/res/values-tr/plurals-icsopenvpn.xml b/app/src/main/res/values-tr/plurals-icsopenvpn.xml
new file mode 100755
index 00000000..c7d13659
--- /dev/null
+++ b/app/src/main/res/values-tr/plurals-icsopenvpn.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<resources>
+ <plurals name="months_left">
+ <item quantity="one">Bir ay kaldı</item>
+ <item quantity="other">%d ay kaldı</item>
+ </plurals>
+ <plurals name="days_left">
+ <item quantity="one">Bir gün kaldı</item>
+ <item quantity="other">%d gün kaldı</item>
+ </plurals>
+ <plurals name="hours_left">
+ <item quantity="one">Bir saat kaldı</item>
+ <item quantity="other">%d saat kaldı</item>
+ </plurals>
+ <plurals name="minutes_left">
+ <item quantity="one">Bir dakika kaldı</item>
+ <item quantity="other">%d dakika kaldı</item>
+ </plurals>
+</resources>
diff --git a/app/src/main/res/values-tr/strings-icsopenvpn.xml b/app/src/main/res/values-tr/strings-icsopenvpn.xml
index 9c88acf0..a8429009 100755
--- a/app/src/main/res/values-tr/strings-icsopenvpn.xml
+++ b/app/src/main/res/values-tr/strings-icsopenvpn.xml
@@ -44,13 +44,14 @@
<string name="duplicate_profile_name">Benzersiz bir profil adı girin</string>
<string name="profilename">Profil Adı</string>
<string name="no_keystore_cert_selected">Bir kullanıcı sertifikası seçmelisiniz</string>
+ <string name="no_ca_cert_selected">Bir CA sertifikası seçmelisiniz</string>
<string name="no_error_found">Hiçbir hata bulunamadı</string>
<string name="config_error_found">Yapılandırmada Hata</string>
<string name="ipv4_format_error">IPv4 adresi ayrıştırma hatası</string>
<string name="custom_route_format_error">Özel yolları ayrıştırma hatası</string>
<string name="pw_query_hint">(talep üzerine sorgulamak için boş bırakın)</string>
<string name="vpn_shortcut">OpenVPN Kısayolu</string>
- <string name="vpn_launch_title">VPN\'e BaÄŸlan</string>
+ <string name="vpn_launch_title">VPN\'e bağlanıyor&#8230;</string>
<string name="shortcut_profile_notfound">Kısayolu belirtilen profil bulunamadı</string>
<string name="random_host_prefix">Rastgele Ana Makine Ön Eki</string>
<string name="random_host_summary">Makine ismine 6 rastgele karakter ekler</string>
@@ -61,7 +62,7 @@
<string name="cancel_connection_long">VPN Bağlantısını Kes</string>
<string name="clear_log">kayıtları temizle</string>
<string name="title_cancel">İptal Onayı</string>
- <string name="cancel_connection_query">Bağlı VPN bağlantısını kesilsin veya bağlantı girişimini iptal edilsin mi?</string>
+ <string name="cancel_connection_query">Bağlı VPN bağlantısı kesilsin ya da bağlantı girişimi iptal edilsin mi?</string>
<string name="remove_vpn">VPN\'i Kaldır</string>
<string name="check_remote_tlscert">Sunucunun TLS Sunucu uzantıları ile bir sertifika kullanıp kullanmadığını denetler (--remote-cert-tls server)</string>
<string name="check_remote_tlscert_title">TLS sunucu sertifikası bekle</string>
@@ -164,7 +165,7 @@
<string name="private_key_password">Özel Anahtar Parolası</string>
<string name="password">Parola</string>
<string name="file_icon">dosya simgesi</string>
- <string name="tls_authentication">TLS Kimlik DoÄŸrulama</string>
+ <string name="tls_authentication">TLS Kimlik DoÄŸrulama/Åžifreleme</string>
<string name="generated_config">Oluşturulan Yapılandırma</string>
<string name="generalsettings">Ayarlar</string>
<string name="owner_fix_summary">/dev/tun sahipliğini sisteme vermeye çalışır. Bazı CM9 kalıpları VPNService API\'sinin çalışabilmesi için buna ihtiyaç duyar. Root gerektirir.</string>
@@ -203,9 +204,8 @@
<string name="using_proxy">%1$s %2$d vekil sunucusu kullanarak</string>
<string name="use_system_proxy">Sistem vekil sunucusunu kullan</string>
<string name="use_system_proxy_summary">Bağlanmak için sistem çapındaki HTTP/HTTPS vekil sunucularını kullan.</string>
- <string name="donatewithpaypal">&lt;a href=\"https://www.paypal.com/cgi-bin/webscr?hosted_button_id=R2M6ZP9AF25LS&amp;amp;cmd=_s-xclick\"&gt;PayPal ile bağış&lt;/a&gt; yapabilirsiniz; </string>
- <string name="onbootrestartsummary">OpenVPN, sistem yeniden başlatma/kapatma sırasında etkinse, tekrar bir VPN\'ye bağlanacak. Lütfen bu seçeneği kullanmadan önce Bağlantı uyarı SSS\'sini okuyun.</string>
- <string name="onbootrestart">Yeniden baÅŸlatmada tekrar baÄŸlan</string>
+ <string name="onbootrestartsummary">Sistem önyüklemesi üzerinde etkinse, OpenVPN belirtilen VPN bağlantısına bağlanır. Lütfen bu seçeneği Android &lt; 5.0 üzerinde kullanmadan önce bağlantı uyarısı için SSS bölümünü okuyun.</string>
+ <string name="onbootrestart">Önyükleme sırasında bağlan</string>
<string name="ignore">Yoksay</string>
<string name="restart">Yeniden BaÅŸlat</string>
<string name="restart_vpn_after_change">Yapılandırma değişiklikleri, VPN yeniden başlattıktan sonra geçerli olur. VPN (yeniden) başlatılsın mı?</string>
@@ -239,7 +239,7 @@
<string name="session_ipv6string">%1$s - %3$s, %2$s</string>
<string name="state_connecting">Bağlanıyor</string>
<string name="state_wait">Sunucudan yanıt bekleniyor</string>
- <string name="state_auth">Kimlik Doğrulanıyor</string>
+ <string name="state_auth">Kimlik doğrulanıyor</string>
<string name="state_get_config">İstemci yapılandırması alınıyor</string>
<string name="state_assign_ip">IP adresleri atanıyor</string>
<string name="state_add_routes">Yollar ekleniyor</string>
@@ -252,7 +252,7 @@
<string name="state_tcp_connect">Bağlanıyor (TCP)</string>
<string name="state_auth_failed">Kimlik doğrulaması başarısız</string>
<string name="state_nonetwork">Kullanılabilir ağ için bekleniyor</string>
- <string name="statusline_bytecount">↓%2$s/s %1$s - ↑%4$s/s %3$s</string>
+ <string name="statusline_bytecount">↓%2$s %1$s - ↑%4$s %3$s</string>
<string name="notifcation_title_notconnect">Bağlı değil</string>
<string name="start_vpn_title">VPN %s bağlanıyor</string>
<string name="start_vpn_ticker">VPN %s bağlanıyor</string>
@@ -323,6 +323,7 @@
<string name="import_log">Alma günlüğü:</string>
<string name="ip_looks_like_subnet">Vpn topolojisi \"%3$s\" belirtildi ancak ifconfig %1$s %2$s daha çok bir ağ maskesi içeren bir IP adresi gibi görünüyor. \"subnet\" topolojisi olarak varsayılacak.</string>
<string name="mssfix_invalid_value">MSS geçersiz kılma değeri 0 ile 9000 arasında bir tamsayı olmak zorundadır</string>
+ <string name="mtu_invalid_value">MTU geçersiz kılma değeri 64 ile 9000 arasında bir tamsayı olmak zorundadır</string>
<string name="mssfix_value_dialog">Tünel üzerinden çalışan TCP oturumlarına, gönderi paket boyutlarını OpenVPN kapladıktan sonra sınırlamalarını, OpenVPN\'nin eşine gönderdiği dönen UDP paket boyutunun bu bayt sayısını aşmayacağını bildir (öntanımlı 1450).</string>
<string name="mssfix_checkbox">TCP yükünün MSS değerini geçersiz kıl</string>
<string name="mssfix_dialogtitle">TCP yükünün MSS değerini ayarla</string>
@@ -392,13 +393,53 @@
<string name="protocol">Protokol</string>
<string name="enabled_connection_entry">Etkin</string>
<string name="abi_mismatch">Tercih edilen bu cihazın yerli ABI önceliği (%1$s) ile yerli kütüphanelerden bildirilen ABI (%2$s) uyuşmuyor</string>
- <string name="months_left">%d ay kaldı</string>
- <string name="days_left">%d gün kaldı</string>
- <string name="hours_left">%d saat kaldı</string>
<string name="permission_revoked">VPN izni işletim sistemi tarafından (örn. başlatılan diğer VPN programı) reddedildi, VPN durduruluyor</string>
<string name="pushpeerinfo">EÅŸ bilgisini it</string>
<string name="pushpeerinfosummary">Sunucuya ek bilgi gönder, örn. SSL sürümü ve Android sürümü</string>
<string name="pw_request_dialog_title">%1$s gerekli</string>
<string name="pw_request_dialog_prompt">Lütfen %1$s profili için parola girin</string>
<string name="menu_use_inline_data">Satır içi veri kullan</string>
+ <string name="export_config_chooser_title">Yapılandırma dosyasını dışa aktar</string>
+ <string name="missing_tlsauth">tls-auth dosyası kayıp</string>
+ <string name="missing_certificates">Kullanıcı sertifikası ve ya kullanıcı sertifika anahtar dosyası kayıp</string>
+ <string name="missing_ca_certificate">CA sertifikası kayıp</string>
+ <string name="crl_title">Sertifika İptal Listesi (isteğe bağlı)</string>
+ <string name="reread_log">Günlük önbellek dosyasından (%d) günlük ögesini tekrar oku</string>
+ <string name="samsung_broken">Samsung telefonlar en çok satan Android telefonlar arasında yer alıyor olsa da, Samsung\'un yazılım yazılımı en hatalı Android yazılımları arasında yer alıyor. Hatalar, bu aygıtlardaki VPN işlemi ile sınırlı değildir, ancak bunların birçoğuna geçici çözüm bulunabilir. Bu hataların bazıları aşağıda açıklanıyor.\n\n DNS, DNS sunucusu VPN aralığında olmadığı takdirde çalışmaz.\n\nÇoğu Samsung 5.x cihazında izin verilen/izin verilmeyen uygulamalar özelliği çalışmıyor.\nSamsung 6.x üzerinde, VPN uygulamasının Güç tasarrufu özelliklerinden muaf tutulmadıkça çalışmadığı bildirildi.</string>
+ <string name="samsung_broken_title">Samsung telefonlar</string>
+ <string name="novpn_selected">Seçili VPN yok.</string>
+ <string name="defaultvpn">Öntanımlı VPN</string>
+ <string name="defaultvpnsummary">Varsayılan olarak bir VPN gereken yerlerde VPN kullanılır. Bunlar şu anda: önyükleme sırasında, Her Zaman Açık ve Hızlı Ayarlar Döşemesi içindir.</string>
+ <string name="vpnselected">Şu anda seçili VPN: \'%s\'</string>
+ <string name="reconnect">Yeniden baÄŸlan</string>
+ <string name="qs_title">VPN\'i Aç/Kapat</string>
+ <string name="qs_connect">Åžuna baÄŸlan: %s</string>
+ <string name="qs_disconnect">%s bağlantısını kes</string>
+ <string name="connectretrymaxmessage">Bağlantı denemeleri arasındaki en uzun süreyi girin. OpenVPN bir başarısız bağlantı girişiminden sonra bu değer kadar onun bekleme süresini yavaş yavaş arttıracak. Varsayılan 300 sn.</string>
+ <string name="connectretrymaxtitle">Bağlantı denemeleri arasındaki azami süre</string>
+ <string name="state_waitconnectretry">Bağlantı denemesi arasında %s saniye bekleniyor</string>
+ <string name="nought_alwayson_warning"><![CDATA[VPN onay ekranını almıyorsanız başka bir uygulama için \"Her zaman açık VPN\" ayarını etkinleştirmişsinizdir. Bu durumda sadece o uygulama VPN\'e bağlanabilir. Ayarlar->Diğer Ağlar...->VPN bölümünden bu ayarı kontrol edin]]></string>
+ <string name="management_socket_closed">OpenVPN bağlantısı kapalı (%s)</string>
+ <string name="change_sorting">Sıralamayı değiştir</string>
+ <string name="sort">Sırala</string>
+ <string name="sorted_lru">Son kullanılan profillere göre sıralanmış</string>
+ <string name="sorted_az">Profil adına göre sıralanmış</string>
+ <string name="deprecated_tls_remote">Yapılandırma seçeneği tls-remote 2.3\'de kullanımdan kaldırıldı ve 2.4\'de sürümden tamamen çıkarıldı</string>
+ <string name="auth_failed_behaviour">AUTH_FAILED davranışı</string>
+ <string name="graph">Grafik</string>
+ <string name="use_logarithmic_scale">Logaritmik ölçek kullan</string>
+ <string name="notenoughdata">Yeterli veri yok</string>
+ <string name="avghour">Saat başına ortalama</string>
+ <string name="avgmin">Dakika başına ortalama</string>
+ <string name="last5minutes">Son 5 dakika</string>
+ <string name="data_in">GiriÅŸ</string>
+ <string name="data_out">Çıkış</string>
+ <string name="bits_per_second">%.0f bit/s</string>
+ <string name="kbits_per_second">%.1f kbit/s</string>
+ <string name="mbits_per_second">%.1f Mbit/s</string>
+ <string name="gbits_per_second">%.1f Gbit/s</string>
+ <string name="volume_byte">%.0f B</string>
+ <string name="volume_kbyte">%.1f kB</string>
+ <string name="volume_mbyte">%.1f MB</string>
+ <string name="volume_gbyte">%.1f GB</string>
</resources>
diff --git a/app/src/main/res/values-uk/plurals-icsopenvpn.xml b/app/src/main/res/values-uk/plurals-icsopenvpn.xml
new file mode 100755
index 00000000..70489fbc
--- /dev/null
+++ b/app/src/main/res/values-uk/plurals-icsopenvpn.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<resources></resources>
diff --git a/app/src/main/res/values-uk/strings-icsopenvpn.xml b/app/src/main/res/values-uk/strings-icsopenvpn.xml
index d97ced06..206457d9 100755
--- a/app/src/main/res/values-uk/strings-icsopenvpn.xml
+++ b/app/src/main/res/values-uk/strings-icsopenvpn.xml
@@ -44,13 +44,14 @@
<string name="duplicate_profile_name">Введіть унікальне ім\'Ñ Ð¿Ñ€Ð¾Ñ„Ñ–Ð»ÑŽ</string>
<string name="profilename">Ім\'Ñ Ð¿Ñ€Ð¾Ñ„Ñ–Ð»ÑŽ</string>
<string name="no_keystore_cert_selected">Потрібно вибрати Ñертифікат кориÑтувача</string>
+ <string name="no_ca_cert_selected">Ви повинні обрати кореневий (СÐ) Ñертифікат</string>
<string name="no_error_found">Помилок не знайдено</string>
<string name="config_error_found">Помилка конфігурації</string>
<string name="ipv4_format_error">Помилка при розборі адреÑи IPv4</string>
<string name="custom_route_format_error">Помилка аналізу налаштованих маршрутів</string>
<string name="pw_query_hint">(залиште порожнім Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñ‚Ñƒ на вимогу)</string>
<string name="vpn_shortcut">Ярлик OpenVPN</string>
- <string name="vpn_launch_title">ÐŸÑ–Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð½Ñ Ð´Ð¾ VPN</string>
+ <string name="vpn_launch_title">ÐŸÑ–Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð½Ñ Ð´Ð¾ VPN ...</string>
<string name="shortcut_profile_notfound">Профіль, вказаний у Ñрлику, не знайдено</string>
<string name="random_host_prefix">Випадковий Ð¿Ñ€ÐµÑ„Ñ–ÐºÑ Ð²ÑƒÐ·Ð»Ð°</string>
<string name="random_host_summary">Додає 6 випадкових Ñимволів перед іменем вузла</string>
@@ -164,7 +165,7 @@
<string name="private_key_password">Пароль закритого ключа</string>
<string name="password">Пароль</string>
<string name="file_icon">Піктограма файлу</string>
- <string name="tls_authentication">ÐÑƒÑ‚ÐµÐ½Ñ‚Ð¸Ñ„Ñ–ÐºÐ°Ñ†Ñ–Ñ TLS</string>
+ <string name="tls_authentication">TLS-Ð°ÑƒÑ‚ÐµÐ½Ñ‚Ð¸Ñ„Ñ–ÐºÐ°Ñ†Ñ–Ñ / ШифруваннÑ</string>
<string name="generated_config">Згенерована конфігураціÑ</string>
<string name="generalsettings">Параметри</string>
<string name="owner_fix_summary">Спробуйте змінити влаÑника Ð´Ð»Ñ /dev/tun. ДеÑкі прошивки CM9 вимагають цього Ð´Ð»Ñ ÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¾Ñ— роботи API OpenVPN. Потрібний root.</string>
@@ -180,6 +181,7 @@
<string name="keychain_nocacert">Ðе вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ СРÑертифікат при читанні із Ñховища ключів Ðндроїд. ÐÐ²Ñ‚ÐµÐ½Ñ‚Ð¸Ñ„Ñ–ÐºÐ°Ñ†Ñ–Ñ Ð½Ðµ вдалаÑÑ.</string>
<string name="show_log_summary">Показати вікно журналу при з\'єднанні. Вікно журналу може бути завжди дрÑтупним у панелі Ñповіщень.</string>
<string name="show_log_window">Показати вікно журналу</string>
+ <string name="mobile_info">%10$s %9$s працює на %3$s %1$s (%2$s), Android %6$s (%7$s) API %4$d, ABI %5$s, (%8$s)</string>
<string name="error_rsa_sign">Помилка підпиÑу з викориÑтаннÑм ключа із Ñховища Ðндроїд %1$s: %2$s</string>
<string name="faq_system_dialogs">ÐŸÐ¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ VPN з\'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÑÑ” вам, що цей додаток може перехоплювати веÑÑŒ мережевий трафік, Ñ– повідомлÑєтьÑÑ ÑиÑтемою попереджень VPNService API. \nÐ¡Ð¿Ð¾Ð²Ñ–Ñ‰ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¾ VPN з\'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ (Ñимвол \"Ключа\") також формуєтьÑÑ ÑиÑтемою Android Ð´Ð»Ñ Ñигналізації про вихідне VPN з\'єднаннÑ. У деÑких прошивках це ÑÐ¿Ð¾Ð²Ñ–Ñ‰ÐµÐ½Ð½Ñ ÑупроводжуєтьÑÑ Ñигналом. \nAndroid викориÑтовує ці cÐ¿Ð¾Ð²Ñ–Ñ‰ÐµÐ½Ð½Ñ Ð´Ð»Ñ Ð²Ð°ÑˆÐ¾Ñ— влаÑної безпеки Ñ– Ñ—Ñ… не можна обійти. (Ðа жаль, на деÑких прошивках також ÑÐ¿Ð¾Ð²Ñ–Ñ‰ÐµÐ½Ð½Ñ ÑупроводжуєтьÑÑ Ð·Ð²ÑƒÐºÐ¾Ð¼)</string>
<string name="faq_system_dialogs_title">ÐŸÐ¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¾ Ð¿Ñ–Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð½Ñ Ñ‚Ð° звук ÑповіщенÑ</string>
@@ -202,9 +204,8 @@
<string name="using_proxy">ВикориÑтовуєтьÑÑ Ð¿Ñ€Ð¾ÐºÑÑ– %1$s %2$d</string>
<string name="use_system_proxy">ВикориÑтовувати ÑиÑтемний прокÑÑ–</string>
<string name="use_system_proxy_summary">ВикориÑтовувати ÑиÑтемну конфігурацію HTTP/HTTPS прокÑÑ– Ð´Ð»Ñ Ð·\'єднаннÑ.</string>
- <string name="donatewithpaypal">Ви можете &lt;a href=\"https://www.paypal.com/cgi-bin/webscr?hosted_button_id=R2M6ZP9AF25LS&amp;amp;cmd=_s-xclick\"&gt;пожертвувати через PayPal&lt;/a&gt; </string>
- <string name="onbootrestartsummary">OpenVPN буде перепідключатиÑÑ, Ñкщо він був активний в момент вимиканнÑ/перезавантаженнÑ. Будь лаÑка, прочитайте ЧаП перед тим, Ñк викориÑтовувати цей параметр.</string>
- <string name="onbootrestart">Перепідключати при перезавантаженні</string>
+ <string name="onbootrestartsummary">OpenVPN підключатиметьÑÑ Ð´Ð¾ вказаного VPN, Ñкщо він був активний при завантаженні ÑиÑтеми. Будь лаÑка, прочитайте FAQ про Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¸ підключенні перед викориÑтаннÑм цієї опції на Android &lt; 5.0.</string>
+ <string name="onbootrestart">ÐŸÑ–Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¸ завантаженні</string>
<string name="ignore">Ігнорувати</string>
<string name="restart">ПерезапуÑтити</string>
<string name="restart_vpn_after_change">ПіÑÐ»Ñ Ð¿ÐµÑ€ÐµÐ·Ð°Ð¿ÑƒÑку VPN заÑтоÑувати зміни конфігурації. (Пере)запуÑтити VPN тепер?</string>
@@ -251,7 +252,6 @@
<string name="state_tcp_connect">ÐŸÑ–Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð½Ñ (TCP)</string>
<string name="state_auth_failed">Помилка автентифікації</string>
<string name="state_nonetwork">ÐžÑ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð½Ñ Ð½Ð° викориÑÑ‚Ð°Ð½Ð½Ñ Ð¼ÐµÑ€ÐµÐ¶Ñ–</string>
- <string name="statusline_bytecount">↓%2$s/s %1$s - ↑%4$s/s %3$s</string>
<string name="notifcation_title_notconnect">Ðе підключено</string>
<string name="start_vpn_title">ÐŸÑ–Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð½Ñ Ð´Ð¾ VPN %s</string>
<string name="start_vpn_ticker">ÐŸÑ–Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð½Ñ Ð´Ð¾ VPN %s</string>
@@ -377,10 +377,41 @@
<string name="ab_persist_tun_title">Зберігати tun режим</string>
<string name="version_and_later">%s і подальше</string>
<string name="tls_cipher_alert_title">ÐŸÑ–Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð½Ñ Ð½Ðµ вдаєтьÑÑ Ð· \"SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure\"</string>
+ <string name="message_no_user_edit">Цей профіль був доданий з зовнішнього додатку (%s) Ñ– був відзначений Ñк таким, що не керуєтьÑÑ ÐºÐ¾Ñ€Ð¸Ñтувачем.</string>
+ <string name="crl_file">СпиÑок відкликаних Ñертифікатів</string>
+ <string name="service_restarted">ПерезапуÑк OpenVPN Service (Додаток зупинивÑÑ Ð°Ð±Ð¾ закривÑÑ Ñ‡ÐµÑ€ÐµÐ· неÑтачу пам\'ÑÑ‚Ñ–)</string>
+ <string name="import_config_error">Ð†Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ ÐºÐ¾Ð½Ñ„Ñ–Ð³ÑƒÑ€Ð°Ñ†Ñ–Ñ— привелу до помилки, неможливо зберегти зміни</string>
<string name="Search">Пошук</string>
<string name="lastdumpdate">(ОÑтанній Dump %1$d:%2$dh Ñтарий (%3$s))</string>
<string name="clear_log_on_connect">ОчиÑтити журнал при новому підключенні</string>
<string name="connect_timeout">Ð§Ð°Ñ Ð¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð½Ñ Ð·\'єднаннÑ</string>
+ <string name="no_allowed_app">Ðе додано в ÑпиÑок дозволених додатків. Додайте Ñебе (%s), щоб мати принаймні один додаток в ÑпиÑку дозволених, щоб не дозволÑти вÑÑ– програми</string>
+ <string name="query_permissions_sdcard">OpenVPN Ð´Ð»Ñ Android може Ñпробувати знайти відÑутні файли на Sd карті автоматично. ÐатиÑніть на це повідомленнÑ, щоб отримати права на дозвіл.</string>
<string name="protocol">Протокол</string>
<string name="enabled_connection_entry">Ввімкнено</string>
+ <string name="permission_revoked">Дозвіл VPN відкликано ОС (наприклад, інша програма VPN запущена), зупинка VPN</string>
+ <string name="pushpeerinfo">Отримати інформацію про піра</string>
+ <string name="pushpeerinfosummary">ÐадіÑлати додаткову інформацію на Ñервер, наприклад верÑÑ–ÑŽ SSL та Android</string>
+ <string name="pw_request_dialog_title">Потрібно %1$s</string>
+ <string name="pw_request_dialog_prompt">Будь лаÑка, введіть пароль Ð´Ð»Ñ Ð¿Ñ€Ð¾Ñ„Ñ–Ð»ÑŽ %1$s</string>
+ <string name="menu_use_inline_data">ВикориÑтовувати вбудовані дані</string>
+ <string name="export_config_chooser_title">ЕкÑпортувати файл конфігурації</string>
+ <string name="missing_tlsauth">відÑутній файл tls-auth</string>
+ <string name="missing_certificates">ВідÑутній Ñертифікат кориÑтувача або файл ключа Ñертифікату кориÑтувача</string>
+ <string name="missing_ca_certificate">ВідÑутній Ñертифікат центру Ñертифікації</string>
+ <string name="crl_title">СпиÑок відкликаних Ñертифікатів (опціонально)</string>
+ <string name="reread_log">Перечитати (%d) елементів з кеш-файлу журналу Ñ–Ñторії</string>
+ <string name="samsung_broken">Ðавіть не зважаючи на те, що телефони Samsung Ñ” одними з найбільш популÑрних телефонів на Android, прошивка від Samsung також Ñ” однією з найбільш дирÑвими прошивками на Android. Ці помилки не обмежуютьÑÑ Ð»Ð¸ÑˆÐµ VPN операціÑми на цих приÑтроÑÑ…, але багато з них можна уникнути. Дальше деÑкі з цих помилок опиÑані. \n\nDNS не працює, Ñкщо Ñервер DNS в межах віртуальної приватної мережі. \n\nÐа багатьох приÑтроÑÑ… Samsung 5.x Ñ„ÑƒÐ½ÐºÑ†Ñ–Ñ Ð´Ð¾Ð·Ð²Ð¾Ð»ÐµÐ½Ð¸Ñ…/заборонених програм не працює. \n\nÐа Samsung 6.x VPN не працює, Ñкщо додаток VPN не звільнÑєтьÑÑ Ð²Ñ–Ð´ PowerSave функцій.</string>
+ <string name="samsung_broken_title">телефони Samsung</string>
+ <string name="novpn_selected">VPN не вибрано.</string>
+ <string name="reconnect">ПерепідключитиÑÑŒ</string>
+ <string name="qs_connect">ÐŸÑ–Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð½Ñ Ð´Ð¾ %s</string>
+ <string name="qs_disconnect">Ð’Ñ–Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð½Ñ %s</string>
+ <string name="connectretrymaxtitle">МакÑимальний Ñ‡Ð°Ñ Ð¼Ñ–Ð¶ Ñпробами підключеннÑ</string>
+ <string name="state_waitconnectretry">ÐžÑ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð½Ñ %ss Ñекунд між Ñпробами підключеннÑ</string>
+ <string name="management_socket_closed">ÐŸÑ–Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð½Ñ Ð´Ð¾ OpenVPN закрито (%s)</string>
+ <string name="change_sorting">Змінити ÑортуваннÑ</string>
+ <string name="sort">Cортувати</string>
+ <string name="sorted_lru">Профілі відÑортовано за чаÑом викориÑтовувавÑÑ</string>
+ <string name="sorted_az">Профілі відÑортовані за назвою</string>
</resources>
diff --git a/app/src/main/res/values-v21/refs.xml b/app/src/main/res/values-v21/refs.xml
index f3f43692..1af5ba02 100644
--- a/app/src/main/res/values-v21/refs.xml
+++ b/app/src/main/res/values-v21/refs.xml
@@ -5,13 +5,23 @@
-->
<resources>
- <drawable name="ic_menu_close_clear_cancel">@drawable/ic_close_white_24dp</drawable>
- <drawable name="ic_menu_play">@drawable/ic_play_arrow_white_24dp</drawable>
- <drawable name="ic_menu_pause">@drawable/ic_pause_white_24dp</drawable>
- <drawable name="ic_menu_share">@drawable/ic_share_white_24dp </drawable>
- <drawable name="ic_menu_save">@drawable/ic_check_white_24dp</drawable>
- <drawable name="ic_menu_view">@drawable/ic_filter_list_white_24dp</drawable>
- <drawable name="ic_menu_delete">@drawable/ic_delete_white_24dp</drawable>
- <drawable name="ic_menu_delete_grey">@drawable/ic_delete_grey600_24dp</drawable>
-</resources>
+ <drawable name="ic_menu_close_clear_cancel">@drawable/ic_close_white_24dp</drawable>
+ <drawable name="ic_menu_play">@drawable/ic_play_arrow_white_24dp</drawable>
+ <drawable name="ic_menu_pause">@drawable/ic_pause_white_24dp</drawable>
+ <drawable name="ic_menu_share">@drawable/ic_share_white_24dp </drawable>
+ <drawable name="ic_menu_save">@drawable/ic_check_white_24dp</drawable>
+ <drawable name="ic_menu_view">@drawable/ic_filter_list_white_24dp</drawable>
+ <drawable name="ic_menu_delete">@drawable/ic_delete_white_24dp</drawable>
+<!-- <drawable name="ic_menu_copy">@drawable/ic_content_copy_white_24dp</drawable> -->
+ <drawable name="ic_menu_delete_grey">@drawable/ic_delete_grey600_24dp</drawable>
+ <drawable name="ic_menu_edit">@drawable/ic_edit_white_24dp</drawable>
+<!-- <drawable name="ic_menu_import">@drawable/ic_archive_white_24dp</drawable> -->
+ <drawable name="vpn_item_edit">@drawable/ic_edit_grey600_24dp</drawable>
+ <!--<drawable name="ic_menu_add">@drawable/ic_add_circle_outline_white_24dp</drawable>-->
+ <!-- <drawable name="ic_dialog_alert">@drawable/ic_warning_black_36dp</drawable>
+ <drawable name="ic_menu_add_grey">@drawable/ic_add_circle_outline_grey600_24dp</drawable>
+ <drawable name="ic_menu_import_grey">@drawable/ic_archive_grey600_24dp</drawable>
+ <drawable name="ic_receipt">@drawable/ic_receipt_white_24dp</drawable>
+ <drawable name="ic_sort">@drawable/ic_sort_white_24dp</drawable> -->
+</resources> \ No newline at end of file
diff --git a/app/src/main/res/values-vi/plurals-icsopenvpn.xml b/app/src/main/res/values-vi/plurals-icsopenvpn.xml
new file mode 100755
index 00000000..d355f594
--- /dev/null
+++ b/app/src/main/res/values-vi/plurals-icsopenvpn.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<resources>
+ <plurals name="months_left">
+ <item quantity="other">Còn lại %d tháng</item>
+ </plurals>
+ <plurals name="days_left">
+ <item quantity="other">Còn lại %d ngày</item>
+ </plurals>
+ <plurals name="hours_left">
+ <item quantity="other">Còn lại %d giá»</item>
+ </plurals>
+ <plurals name="minutes_left">
+ <item quantity="other">Còn lại %d phút</item>
+ </plurals>
+</resources>
diff --git a/app/src/main/res/values-vi/strings-icsopenvpn.xml b/app/src/main/res/values-vi/strings-icsopenvpn.xml
index 625ab34f..9ca9bc4c 100755
--- a/app/src/main/res/values-vi/strings-icsopenvpn.xml
+++ b/app/src/main/res/values-vi/strings-icsopenvpn.xml
@@ -44,13 +44,14 @@
<string name="duplicate_profile_name">Vui lòng nhập một tên hồ sơ duy nhất</string>
<string name="profilename">Tên hồ sơ</string>
<string name="no_keystore_cert_selected">Bạn phải chá»n má»™t chứng chỉ ngÆ°á»i dùng</string>
+ <string name="no_ca_cert_selected">Bạn phải chá»n má»™t chứng chỉ CA</string>
<string name="no_error_found">Không tìm thấy lỗi</string>
<string name="config_error_found">Lỗi trong cấu hình</string>
<string name="ipv4_format_error">Lỗi phân tích cú pháp địa chỉ IPv4</string>
<string name="custom_route_format_error">Lỗi phân tích cú pháp định tuyến tùy chỉnh</string>
<string name="pw_query_hint">(để trống để truy vấn theo yêu cầu)</string>
<string name="vpn_shortcut">Lối tắt Open VPN</string>
- <string name="vpn_launch_title">Kết nối đến VPN</string>
+ <string name="vpn_launch_title">Äang kết nối tá»›i VPN&#8230;</string>
<string name="shortcut_profile_notfound">Hồ sơ quy định tại lối tắt không tìm thấy</string>
<string name="random_host_prefix">Tiá»n tố miá»n ngẫu nhiên</string>
<string name="random_host_summary">Thêm 6 ký tá»± ngẫu nhiên ở phía trÆ°á»›c tên miá»n</string>
@@ -164,7 +165,7 @@
<string name="private_key_password">Khóa mật khẩu riêng tư</string>
<string name="password">Mật khẩu</string>
<string name="file_icon">biểu tượng tập tin</string>
- <string name="tls_authentication">Xác thực TLS</string>
+ <string name="tls_authentication">Xác thực/mã hoá TLS</string>
<string name="generated_config">Tạo cấu hình</string>
<string name="generalsettings">Cài đặt</string>
<string name="owner_fix_summary">Cố gắng thiết lập chủ sở hữu của /dev/tun vào hệ thống. Một vài ROM CM9 cần việc này để thực hiện thiết lập VPN API. Yêu cầu root.</string>
@@ -203,9 +204,8 @@
<string name="using_proxy">Äang sá»­ dụng proxy %1$s %2$d</string>
<string name="use_system_proxy">Sử dụng proxy hệ thống</string>
<string name="use_system_proxy_summary">Sử dụng các cấu hình hệ thống rộng cho HTTP/HTTPS proxy để kết nối.</string>
- <string name="donatewithpaypal">Bạn có thể &lt;a href=\"https://www.paypal.com/cgi-bin/webscr?hosted_button_id=R2M6ZP9AF25LS&amp;amp;cmd=_s-xclick\"&gt;ủng hộ cho ứng dụng với PayPal&lt;/a&gt; </string>
- <string name="onbootrestartsummary">OpenVPN sẽ kết nối lại VPN nếu nó đã hoạt Ä‘á»™ng khi hệ thống khởi Ä‘á»™ng lại/tắt máy. Xin vui lòng Ä‘á»c phần cảnh báo kết nối trong các câu há»i thÆ°á»ng gặp trÆ°á»›c khi sá»­ dụng tùy chá»n này.</string>
- <string name="onbootrestart">Kết nối lại khi khởi động lại máy</string>
+ <string name="onbootrestartsummary">OpenVPN sẽ kết nối VPN xác định nếu nó đã hoạt Ä‘á»™ng trên hệ thống khởi Ä‘á»™ng. Xin vui lòng Ä‘á»c hÆ°Æ¡Ìng dẫn cảnh báo kết nối trÆ°á»›c khi sá»­ dụng tùy chá»n này trên Android &lt; 5.0.</string>
+ <string name="onbootrestart">Kết nối khi khởi động</string>
<string name="ignore">Bá» qua</string>
<string name="restart">Khởi động lại</string>
<string name="restart_vpn_after_change">Cấu hình sẽ được áp dụng sau khi khởi động lại VPN. (Khởi động) bắt đầu VPN lại ngay bây gi�</string>
@@ -252,7 +252,7 @@
<string name="state_tcp_connect">Äang kết nối (TCP)</string>
<string name="state_auth_failed">Chứng thực không thành công</string>
<string name="state_nonetwork">Äang đợi mạng khả dụng</string>
- <string name="statusline_bytecount">↓%2$s/s %1$s - ↑%4$s/s %3$s</string>
+ <string name="statusline_bytecount">↓ %2$s %1$s - ↑ %4$s %3$s</string>
<string name="notifcation_title_notconnect">Không kết nối</string>
<string name="start_vpn_title">Äang kết nối VPN %s</string>
<string name="start_vpn_ticker">Äang kết nối VPN %s</string>
@@ -323,6 +323,7 @@
<string name="import_log">Nhập bản ghi:</string>
<string name="ip_looks_like_subnet">Cấu trúc VPN \"%3$s\" quy định nhưng ifconfig %1$s %2$s trông giống như một địa chỉ IP với một mặt nạ mạng. Giả định cấu trúc liên kết \"mạng con\".</string>
<string name="mssfix_invalid_value">Các giá trị MSS phải là một số nguyên từ 0 đến 9000</string>
+ <string name="mtu_invalid_value">Các giá trị MTU phải là một số nguyên từ 64 đến 9000</string>
<string name="mssfix_value_dialog">Thông báo vá»›i các phiên TCP Ä‘ang chạy thông qua Ä‘Æ°á»ng truyá»n mà chúng nên hạn chế gá»­i kích cỡ gói dữ liệu sau khi Open VPN đã đóng gói nó, kết quả kích thÆ°á»›c gói dữ liệu UDP mà OpenVPN gá»­i tá»›i sẽ không vượt qua số byte này. (Mặc định là 1450)</string>
<string name="mssfix_checkbox">Ghi đè lên giá trị MSS của TCP payload</string>
<string name="mssfix_dialogtitle">Äặt MSS của TCP payload</string>
@@ -392,7 +393,30 @@
<string name="protocol">Giao thức</string>
<string name="enabled_connection_entry">Bật</string>
<string name="abi_mismatch">Ưu tiên ABI gốc của thiết bị này (%1$s) và ABI được báo cáo bởi thư viện gốc (%2$s) bất đối xứng</string>
- <string name="months_left">%d tháng còn lại</string>
- <string name="days_left">%d ngày còn lại</string>
- <string name="hours_left">%d giỠcòn lại</string>
+ <string name="permission_revoked">cho phép VPN bị thu hồi bởi hệ Ä‘iá»u hành (ví dụ nhÆ° chÆ°Æ¡ng trình VPN khác bắt đầu), dừng VPN</string>
+ <string name="pushpeerinfo">Äẩy thông tin ngang nhau</string>
+ <string name="pushpeerinfosummary">Gửi thông tin đến máy chủ, ví dụ như phiên bản SSL và phiên bản Android</string>
+ <string name="pw_request_dialog_title">Cần thêm %1$s</string>
+ <string name="pw_request_dialog_prompt">Vui lòng nhập mật khẩu cho %1$s</string>
+ <string name="menu_use_inline_data">Sử dụng dữ liệu nội tuyến</string>
+ <string name="export_config_chooser_title">Xuất tập tin cấu hình</string>
+ <string name="missing_tlsauth">tập tin tls-auth bị mất tích</string>
+ <string name="missing_certificates">Thiếu chứng chỉ ngÆ°á»i dùng hoặc chứng chỉ tập tin</string>
+ <string name="missing_ca_certificate">Thiếu chứng chỉ CA</string>
+ <string name="crl_title">Danh sách chứng chỉ thu hồi (tùy chá»n)</string>
+ <string name="reread_log">Äá»c lại (%d) mục đăng nhập từ tập tin bá»™ nhá»› cache đăng nhập</string>
+ <string name="samsung_broken">Even though Samsung phones are among the most selling Android phones, Samsung\'s firmware are also among the most buggy Android firmwares. The bugs are not limited to the VPN operation on these devices but many of them can be workarounded. In the following some of these bugs are described.\n\nDNS does not work unless the DNS server in the VPN range.\n\nOn many Samsung 5.x devices the allowed/disallowed apps feature does not work.\nOn Samsung 6.x VPN is reported not to work unless the VPN app is exempted from Powersave features.</string>
+ <string name="samsung_broken_title">Äiện thoại Samsung</string>
+ <string name="novpn_selected">Không VPN được chá»n.</string>
+ <string name="defaultvpn">VPN mặc định</string>
+ <string name="defaultvpnsummary">VPN được sá»­ dụng ở những nÆ¡i mà má»™t mặc định VPN cần thiết. Chúng hiện Ä‘ang khởi Ä‘á»™ng, Luôn-Bật và vào Cài Äặt Nhanh.</string>
+ <string name="vpnselected">VPN hiện được chá»n: \'%s\'</string>
+ <string name="reconnect">Kết nối lại</string>
+ <string name="qs_title">Bật tắt VPN</string>
+ <string name="qs_connect">Kết nối đến %s</string>
+ <string name="qs_disconnect">Ngắt kết nối đến %s</string>
+ <string name="connectretrymaxmessage">Hãy nhập tối Ä‘a thá»i gian giữa các kết nối lại. OpenVPN sẽ dần dần tăng thá»i gian chỠđợi của mình sau khi cố kết nối không thành công đến giá trị này. Mặc định là hệ thống 300.</string>
+ <string name="connectretrymaxtitle">Thá»i gian tối Ä‘a giữa kết nối lại</string>
+ <string name="state_waitconnectretry">Vui lòng chỠ%ss giây để kết nối</string>
+ <string name="sort">Sắp xếp</string>
</resources>
diff --git a/app/src/main/res/values-zh-rCN/plurals-icsopenvpn.xml b/app/src/main/res/values-zh-rCN/plurals-icsopenvpn.xml
new file mode 100755
index 00000000..70489fbc
--- /dev/null
+++ b/app/src/main/res/values-zh-rCN/plurals-icsopenvpn.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<resources></resources>
diff --git a/app/src/main/res/values-zh-rCN/strings-icsopenvpn.xml b/app/src/main/res/values-zh-rCN/strings-icsopenvpn.xml
index 2a3aac46..d37b9b57 100755
--- a/app/src/main/res/values-zh-rCN/strings-icsopenvpn.xml
+++ b/app/src/main/res/values-zh-rCN/strings-icsopenvpn.xml
@@ -6,32 +6,31 @@
-->
<resources>
- <string name="address">æœåŠ¡å™¨åœ°å€ï¼š</string>
- <string name="port">æœåŠ¡å™¨ç«¯å£ï¼š</string>
- <string name="location">地点</string>
+ <string name="address">æœåŠ¡å™¨åœ°å€</string>
+ <string name="port">Server Port:</string>
+ <string name="location">ä½ç½®</string>
<string name="cant_read_folder">无法读å–目录</string>
<string name="select">选择</string>
<string name="cancel">å–消</string>
<string name="no_data">未收到数æ®</string>
<string name="useLZO">å¯ç”¨ LZO 压缩算法</string>
- <string name="client_no_certificate">无客户端è¯ä¹¦</string>
+ <string name="client_no_certificate">没有è¯ä¹¦</string>
<string name="client_certificate_title">客户端è¯ä¹¦</string>
<string name="client_key_title">客户端è¯ä¹¦å¯†é’¥</string>
- <string name="client_pkcs12_title">PKCS12 文件</string>
+ <string name="client_pkcs12_title">PKCS12 è¯ä¹¦æ–‡ä»¶</string>
<string name="ca_title">CA è¯ä¹¦</string>
- <string name="no_certificate">您必须选择一个è¯ä¹¦</string>
- <string name="copyright_guicode">请å‰å¾€ http://code.google.com/p/ics-openvpn/ 查看æºç æˆ–æ供问题å馈</string>
- <string name="copyright_others">本程åºä½¿ç”¨ä»¥ä¸‹ç»„件,请在 Licenses 查看æºç èŽ·å–更详细内容。</string>
+ <string name="no_certificate">你必须选择一个è¯ä¹¦</string>
+ <string name="copyright_guicode">请å‰å¾€ https://github.com/schwabe/ics-openvpn/ 查看æºç æˆ–æ供问题å馈</string>
+ <string name="copyright_others">该程åºä½¿ç”¨ä»¥ä¸‹ç»„件,有关许å¯è¯çš„详细信æ¯è¯·å‚阅æºä»£ç </string>
<string name="about">关于</string>
<string name="vpn_list_title">é…置文件</string>
<string name="vpn_type">类型</string>
<string name="pkcs12pwquery">PKCS12 密ç </string>
<string name="file_select">请选择&#8230;</string>
- <string name="file_nothing_selected">您必须选择一个文件</string>
- <string name="useTLSAuth">使用 TLS 身份验è¯</string>
- <string name="tls_direction">TLS æ–¹å‘</string>
- <string name="ipv6_dialog_tile">输入 CIDR æ ¼å¼ IPv6 地å€/å­ç½‘掩ç ï¼ˆä¾‹å¦‚:2000:dd::23/64)</string>
- <string name="ipv4_dialog_title">输入 CIDR æ ¼å¼ IPv4 地å€/å­ç½‘掩ç ï¼ˆä¾‹å¦‚:1.2.3.4/24)</string>
+ <string name="file_nothing_selected">你必须选择一个文件</string>
+ <string name="useTLSAuth">使用 TLS 认è¯</string>
+ <string name="ipv6_dialog_tile">输入 CIDR æ ¼å¼çš„ IPv6 地å€/网络掩ç ï¼ˆä¾‹å¦‚ 2000:dd::23/64)</string>
+ <string name="ipv4_dialog_title">输入 CIDR æ ¼å¼çš„ IPv4 地å€/网络掩ç ï¼ˆä¾‹å¦‚ 1.2.3.4/24)</string>
<string name="ipv4_address">IPv4 地å€</string>
<string name="ipv6_address">IPv6 地å€</string>
<string name="custom_option_warning">请谨慎输入 OpenVPN 的自定义选项。此外请注æ„许多与 tun 模å—有关的 OpenVPN 设置由于系统 VPN 功能的设计而ä¸èƒ½å¾—到支æŒã€‚如果您觉得缺少一个很é‡è¦çš„选项,请与作者è”系。</string>
@@ -40,68 +39,37 @@
<string name="static_keys_info">é™æ€é…置中 TLS 身份验è¯å¯†é’¥å°†è¢«ç”¨ä½œé™æ€å¯†é’¥</string>
<string name="configure_the_vpn">é…ç½® VPN</string>
<string name="menu_add_profile">添加é…置文件</string>
- <string name="add_profile_name_prompt">输入新é…置文件å:</string>
+ <string name="add_profile_name_prompt">输入新é…置文件的åå­—</string>
<string name="duplicate_profile_name">请输入一个唯一的é…置文件å称</string>
<string name="profilename">é…置文件å称</string>
<string name="no_keystore_cert_selected">您必须选择一个用户è¯ä¹¦</string>
- <string name="no_error_found">未找到错误</string>
- <string name="config_error_found">é…置有错误</string>
<string name="ipv4_format_error">æ— æ³•è§£æž IPv4 地å€</string>
<string name="custom_route_format_error">无法解æžè‡ªå®šä¹‰è·¯ç”±</string>
<string name="pw_query_hint">(æ ¹æ®éœ€æ±‚留空)</string>
<string name="vpn_shortcut">OpenVPN 主å±å¹•å¿«æ·æ–¹å¼</string>
- <string name="vpn_launch_title">连接至 VPN</string>
- <string name="shortcut_profile_notfound">未找到快æ·æ–¹å¼ä¸­æŒ‡å®šçš„é…置文件</string>
- <string name="random_host_prefix">éšæœºä¸»æœºå‰ç¼€</string>
- <string name="random_host_summary">在主机åå‰æ·»åŠ 6个éšæœºå­—符</string>
- <string name="custom_config_title">å¯ç”¨è‡ªå®šä¹‰é€‰é¡¹</string>
- <string name="custom_config_summary">指定自定义选项。å°å¿ƒï¼</string>
- <string name="route_rejected">Android æ‹’ç»äº†è·¯ç”±</string>
- <string name="cancel_connection">æ–­å¼€</string>
- <string name="cancel_connection_long">断开连接</string>
- <string name="clear_log">清除日志</string>
- <string name="title_cancel">å–消确认</string>
- <string name="cancel_connection_query">断开已连接的 VPN / å–消连接å°è¯•ï¼Ÿ</string>
- <string name="remove_vpn">删除 VPN</string>
+ <string name="cancel_connection_long">æ–­å¼€VPN</string>
+ <string name="title_cancel">确认å–消</string>
<string name="check_remote_tlscert">检查æœåŠ¡å™¨æ˜¯å¦ä½¿ç”¨ TLS æœåŠ¡å™¨ç«¯æ‰©å±• (--remote-cert-tlsserver server)</string>
<string name="check_remote_tlscert_title">éœ€è¦ TLS æœåŠ¡å™¨è¯ä¹¦</string>
<string name="remote_tlscn_check_summary">检查远程æœåŠ¡å™¨è¯ä¹¦çš„ DN 属性</string>
<string name="remote_tlscn_check_title">è¯ä¹¦ä¸»æœºå检查</string>
<string name="enter_tlscn_dialog">勾选此项将验è¯è¿œç¨‹è¯ä¹¦çš„ DN 属性(例:C=DE, L=Paderborn, OU=Avian IP Carriers, CN=openvpn.blinkt.de)\n\n输入完整的 DN 或者 RDN 以便进行验è¯ã€‚\n\nRDNå‰ç¼€ \"Server\" å¯ä»¥åŒ¹é… \"Server-1\" ä»¥åŠ \"SERVER-2\"\n\nè‹¥ç•™ç©ºåˆ™å°†ä»…éªŒè¯ RDN 而ä¸éªŒè¯ä¸»æœºå。\n\n有关更多信æ¯è¯·æŸ¥çœ‹ OpenVPN 2.3.1+ å‚考手册的 --verify-x509-name å°èŠ‚</string>
<string name="enter_tlscn_title">远程è¯ä¹¦ä¸»é¢˜</string>
- <string name="tls_key_auth">å¯ç”¨ TLS 密钥认è¯</string>
- <string name="tls_auth_file">TLS 认è¯æ–‡ä»¶</string>
<string name="pull_on_summary">从æœåŠ¡å™¨è¯·æ±‚ IP 地å€ã€ 路由规则和计时选项。</string>
<string name="pull_off_summary">没有从æœåŠ¡å™¨è¯·æ±‚ä¿¡æ¯ã€‚设置需è¦åœ¨ä¸‹æ–¹è¢«æŒ‡å®šã€‚</string>
<string name="use_pull">Pull 设置</string>
- <string name="dns">DNS</string>
- <string name="override_dns">覆盖æœåŠ¡å™¨ DNS 设置</string>
- <string name="dns_override_summary">使用自定义 DNS æœåŠ¡å™¨</string>
- <string name="searchdomain">æœç´¢åŸŸ</string>
- <string name="dns1_summary">è¦ä½¿ç”¨çš„ DNS æœåŠ¡å™¨</string>
- <string name="dns_server">DNS æœåŠ¡å™¨</string>
- <string name="secondary_dns_message">如果无法达到主 DNS æœåŠ¡å™¨ï¼Œè¦ä½¿ç”¨è¾…助 DNS æœåŠ¡å™¨ã€‚</string>
- <string name="backup_dns">备用 DNS æœåŠ¡å™¨</string>
- <string name="ignored_pushed_routes">忽略推é€è·¯ç”±</string>
- <string name="ignore_routes_summary">忽略æœåŠ¡å™¨æŽ¨é€çš„路由</string>
+ <string name="secondary_dns_message">无法使用主 DNS æœåŠ¡å™¨æ—¶ä¼šä½¿ç”¨è¾…助 DNS æœåŠ¡å™¨ã€‚</string>
+ <string name="ignore_routes_summary">ä¸ä½¿ç”¨æœåŠ¡å™¨æŽ¨é€çš„路由</string>
<string name="default_route_summary">é‡å®šå‘所有æµé‡åˆ°VPN</string>
- <string name="use_default_title">使用默认路由</string>
- <string name="custom_route_message">输入自定义路由。输入 CIDR æ ¼å¼åœ°å€ã€‚</string>
- <string name="custom_route_message_excluded">路线ä¸åº”该被路由通过VPN。使用相åŒçš„语法包括路线。</string>
- <string name="custom_routes_title">自定义路由</string>
- <string name="custom_routes_title_excluded">排查网络</string>
- <string name="log_verbosity_level">日志详细级别</string>
- <string name="float_summary">å…许æ¥è‡ªä»»ä½• IP 的认è¯æ•°æ®åŒ…</string>
- <string name="float_title">å…许浮æœåŠ¡å™¨</string>
- <string name="custom_options_title">自定义选项</string>
- <string name="edit_vpn">编辑 VPN 设置</string>
+ <string name="custom_route_message">输入自定义路由。目标地å€åªèƒ½ç”¨CIDRæ ¼å¼ã€‚\"10.0.0.0/8 2002::/16\" 将会通过VPNé‡å®šå‘到10.0.0.0/8 å’Œ 2002::/16 网络。</string>
+ <string name="custom_route_message_excluded">ä¸åº”该通过VPN路由的路线。使用自定义路由相åŒçš„语法。</string>
+ <string name="custom_routes_title_excluded">排除的路线</string>
+ <string name="float_title">å…许ä¸å›ºå®šæœåŠ¡å™¨</string>
<string name="remove_vpn_query">移除 VPN é…置文件 \'%s\' å—?</string>
- <string name="tun_error_helpful">在æŸäº›è‡ªå®šä¹‰ ICS 版本上,/dev/tun çš„æƒé™å¯èƒ½ä¼šæœ‰é”™è¯¯ï¼Œæˆ–者根本就没有该文件。CM9 用户请å°è¯•é€šè¿‡æœ¬ç¨‹åºçš„设置功能修å¤æƒé™</string>
- <string name="tun_open_error">未能打开 tun 模å—</string>
- <string name="error">错误</string>
- <string name="clear">清除</string>
+ <string name="tun_error_helpful">在æŸäº›è‡ªå®šä¹‰ ICS 系统版本上,/dev/tun çš„æƒé™å¯èƒ½ä¼šæœ‰é”™è¯¯ï¼Œæˆ–者根本就没有该文件。CM9 系统用户请å°è¯•é€šè¿‡æœ¬ç¨‹åºè®¾ç½®ä¸­çš„ä¿®å¤é€‰é¡¹è¿›è¡Œæƒé™ä¿®å¤ã€‚</string>
+ <string name="tun_open_error">打开 tun 接å£å¤±è´¥</string>
+ <string name="error">错误:</string>
<string name="last_openvpn_tun_config">正在打开 tun 设备:</string>
- <string name="local_ip_info">本地 IPv4: %1$s/%2$d IPv6: %3$s MTU: %4$d</string>
<string name="dns_server_info">DNS æœåŠ¡å™¨: %1$s, 域å: %2$s</string>
<string name="routes_info_incl">路线: %1$s %2$s</string>
<string name="routes_info_excl">排除的路由: %1$s %2$s</string>
@@ -110,107 +78,48 @@
<string name="route_not_cidr">无法将 %1$s å’Œ %2$s 作为 CIDR å½¢å¼çš„路由,将使用 /32 çš„å­ç½‘掩ç ã€‚</string>
<string name="route_not_netip">纠正路由 %1$s/%2$s 为 %3$s/%2$s</string>
<string name="keychain_access">ä¸èƒ½è®¿é—® Android 密钥链è¯ä¹¦ã€‚è¿™å¯èƒ½æ˜¯ç”±äºŽå›ºä»¶å‡çº§æˆ–通过还原备份的应用程åº/软件设置造æˆçš„。请编辑 VPN é…置文件并在基本设置中é‡æ–°é€‰æ‹©è¯ä¹¦ä»¥é‡æ–°åˆ›å»ºè¯ä¹¦è®¿é—®æƒé™ã€‚</string>
- <string name="version_info">%1$s %2$s</string>
- <string name="send_logfile">å‘é€æ—¥å¿—文件</string>
- <string name="send">å‘é€</string>
- <string name="ics_openvpn_log_file">ICS OpenVPN 日志文件</string>
- <string name="copied_entry">日志æ¡ç›®å·²å¤åˆ¶å‰ªè´´æ¿</string>
- <string name="tap_mode">Tap 模å¼</string>
<string name="faq_tap_mode">Tap 模å¼åœ¨æœª root 的机器上ä¸å¯ç”¨ã€‚因此本程åºæ— æ³•æä¾› tap 模å—支æŒ</string>
<string name="tap_faq2">还æ¥? 您在开玩笑嘛? tap 连接模å¼æ˜¯ä¸æ”¯æŒçš„,ä¸è¦å†å‘邮件问这些问题了。</string>
<string name="tap_faq3">这已ç»æ˜¯ç¬¬ä¸‰æ¬¡æœ‰äººé—®è¿™ä¸ªé—®é¢˜äº†ã€‚好å§ï¼Œè™½ç„¶ç¡®å®žå¯ä»¥åœ¨ TAP 设备上写一个 TAP 模拟器,给å‘é€å‡ºåŽ»çš„æ•°æ®åŒ…添加第二层网络头,并去掉收到的数æ®åŒ…中的第二层网络头,但是这个 TAP 模拟器å¯èƒ½è¿˜éœ€è¦å®žçŽ° ARP 甚至 DHCP 客户端功能。我目å‰ä¸çŸ¥é“有è°åœ¨åšè¿™æ–¹é¢çš„工作。如果你想开展这方é¢çš„ç¼–ç å·¥ä½œçš„è¯ï¼Œè¯·è”系我。</string>
- <string name="faq">常è§é—®é¢˜</string>
- <string name="copying_log_entries">å¤åˆ¶æ—¥å¿—æ¡ç›®</string>
<string name="faq_copying">è‹¥è¦å¤åˆ¶å•æ¡æ—¥å¿—请在相应æ¡ç›®ä¸Šè½»æŒ‰å³å¯ã€‚è‹¥è¦å¤åˆ¶/å‘é€å…¨éƒ¨æ—¥å¿—请使用å‘é€æ—¥å¿—功能。如果该功能在界é¢ä¸­æ²¡æœ‰æ˜¾ç¤ºï¼Œè¯·ä½¿ç”¨è®¾å¤‡åŽŸç”Ÿçš„èœå•æŒ‰é’®ã€‚</string>
- <string name="faq_shortcut">å¯åŠ¨å¿«æ·æ–¹å¼</string>
<string name="faq_howto_shortcut">ä½ å¯ä»¥åœ¨æ¡Œé¢ä¸Šæ”¾ç½®ä¸€ä¸ªå¯åŠ¨ OpenVPN 的图标。如果你的桌é¢ç¨‹åºæ”¯æŒï¼Œä½ å¯ä»¥åœ¨æ¡Œé¢ä¸Šæ”¾ç½® OpenVPN çš„å¯åŠ¨å›¾æ ‡ï¼Œæˆ–者是 OpenVPN çš„æ¡Œé¢æŒ‚件</string>
<string name="no_vpn_support_image">很é—憾,您目å‰çš„系统ä¸æ”¯æŒ VPN æœåŠ¡æŽ¥å£</string>
- <string name="encryption">加密</string>
- <string name="cipher_dialog_title">输入加密方法</string>
<string name="chipher_dialog_message">输入 OpenVPN 所使用的加密密ç ç®—法。留空以使用默认算法。</string>
<string name="auth_dialog_message">输入 OpenVPN 使用的认è¯æ‘˜è¦ã€‚留空则使用默认的摘è¦ã€‚</string>
- <string name="settings_auth">认è¯/加密</string>
- <string name="file_explorer_tab">文件æµè§ˆå™¨</string>
<string name="inline_file_tab">内è”文件</string>
- <string name="error_importing_file">导入文件出错</string>
- <string name="import_error_message">无法导入文件系统文件</string>
<string name="inline_file_data">[[内è”文件数æ®]]</string>
<string name="opentun_no_ipaddr">æ—  IP ä¿¡æ¯ï¼Œæ‹’ç»æ‰“å¼€ tun 设备</string>
- <string name="menu_import">从 ovpn 文件中导入é…置文件</string>
- <string name="menu_import_short">导入</string>
- <string name="import_content_resolve_error">无法读å–è¦å¯¼å…¥çš„é…置文件</string>
- <string name="error_reading_config_file">读å–é…置文件å‘生出错</string>
- <string name="add_profile">添加é…置文件</string>
- <string name="import_could_not_open">无法找到导入é…置文件å‚考的文件: %1$s</string>
- <string name="importing_config">从 %1$s 中导入é…置文件</string>
<string name="import_warning_custom_options">您的é…置文件中有几个é…置项无法在é…ç½®èœå•ä¸­æŸ¥çœ‹å’Œä¿®æ”¹ï¼Œè¿™äº›é…置项将会当æˆè‡ªå®šä¹‰é…置选项。下é¢æ˜¯è¿™äº›è‡ªå®šä¹‰çš„é…置选项:</string>
- <string name="import_done">读å–é…置文件完æˆ</string>
- <string name="nobind_summary">ä¸å…³è”到本地地å€å’Œç«¯å£</string>
<string name="no_bind">无本地绑定</string>
- <string name="import_configuration_file">导入é…置文件</string>
- <string name="faq_security_title">安全注æ„</string>
<string name="faq_security">“OpenVPN 是éžå¸¸æ³¨é‡å®‰å…¨çš„,所以在此æ供一些安全方é¢çš„建议。所有ä¿å­˜åœ¨å­˜å‚¨å¡ä¸Šçš„æ•°æ®éƒ½æ˜¯ä¸å®‰å…¨çš„,任何应用都å¯ä»¥è¯»å–存储å¡ä¸Šçš„文件,å³ä½¿è¿™ä¸ªåº”用没有‘写入存储å¡â€™çš„æƒé™ä¹Ÿæ˜¯å¦‚此。应用自身的数æ®åªèƒ½è¢«åº”用自己读å–。在选择 CA è¯ä¹¦ã€è¯ä¹¦æ–‡ä»¶æˆ–者密钥文件的时候请使用导入功能,这样这些数æ®å°±ä¼šä¿å­˜åœ¨ OpenVPN 自身的数æ®æ–‡ä»¶ä¸­ï¼Œä¿è¯ä¸ä¼šè¢«å…¶ä»–的应用æ¶æ„读å–。当然导入è¯ä¹¦ä¹‹åŽè®°å¾—è¦æŠŠè¯ä¹¦ä»Žå­˜å‚¨å¡ä¸Šåˆ é™¤æŽ‰ã€‚ä¸è¿‡ï¼Œè™½ç„¶è¿™äº›æ•°æ®ä¸èƒ½è¢«å…¶ä»–应用读å–,但是这些数æ®æ˜¯æ˜Žæ–‡ä¿å­˜çš„,如果你的系统是 rooted 的,那么这些数æ®å°†èƒ½å¤Ÿè¢«ä»»ä½•æ‹¥æœ‰ root æƒé™çš„应用轻æ¾åœ°è¯»å–。ä¿å­˜åœ¨ OpenVPN 中的密ç ä¹Ÿæ˜¯ä»¥æ˜Žæ–‡ä¿å­˜çš„,如果设备被 rooted 了,这些密ç ä¹Ÿæœ‰å¯èƒ½è¢«å…¶ä»–应用æ¶æ„读å–。强烈建议使用 pkcs12 è¯ä¹¦å¹¶å°†è¯ä¹¦å¯¼å…¥åˆ° Android 自己的è¯ä¹¦ç®¡ç†ç³»ç»Ÿé‡Œã€‚â€</string>
- <string name="import_vpn">导入</string>
- <string name="broken_image_cert_title">显示è¯ä¹¦å‘生错误</string>
<string name="broken_image_cert">å°è¯•æ˜¾ç¤º Android 4.0 + è¯ä¹¦é€‰æ‹©å¯¹è¯æ¡†æ—¶å‡ºçŽ°å¼‚常。Android 4.0 以上的系统ä¸å¯èƒ½å‡ºçŽ°è¯¥é—®é¢˜ï¼Œå› ä¸ºè¿™æ˜¯æ ‡å‡†çš„系统功能。å¯èƒ½æ‚¨å½“å‰ ROM 中的è¯ä¹¦å­˜å‚¨å·²ç»æŸå。</string>
- <string name="ipv4">IPv4</string>
- <string name="ipv6">IPv6</string>
- <string name="speed_waiting">等待状æ€æ¶ˆæ¯</string>
- <string name="converted_profile">已导入é…置文件</string>
- <string name="converted_profile_i">已导入é…置文件 %d</string>
<string name="broken_images">图åƒå·²æŸå</string>
<string name="broken_images_faq">&lt;p&gt;HTC官方固件å¯èƒ½å­˜åœ¨å¼‚常的路由问题并会导致数æ®æµä¸é€šè¿‡éš§é“传输(详è§BUG追踪&lt;a href=\"http://code.google.com/p/ics-openvpn/issues/detail?id=18\"&gt;Issue 18&lt;/a&gt;)。&lt;/p&gt;&lt;p&gt;æ®æŠ¥å¯¼ï¼Œæ—§ç‰ˆçš„SONY Xperia Arc Så’ŒXperia Ray的官方固件完全ä¸åŒ…å«VPNService(详è§BUG追踪&lt;a href=\"http://code.google.com/p/ics-openvpn/issues/detail?id=29\"&gt;Issue 29&lt;/a&gt;)。&lt;/p&gt;&lt;p&gt;在自制固件中,tun
模å—å¯èƒ½ä¼šæœ‰ç¼ºå¤±ï¼Œæˆ–是未被设置正确的æƒé™ã€‚部分CM9固件需è¦å¯ç”¨â€œç‰¹å®šè®¾å¤‡HACKSâ€é¡¹ä¸‹çš„“修å¤/dev/tunçš„æƒé™â€çš„选项。&lt;/p&gt;&lt;p&gt;最é‡è¦çš„是:若您的设备的固件存在问题,请直接å‘您的设备供应商å馈。越多人å‘供应商å映问题,问题越有å¯èƒ½å¾—到解决。&lt;/p&gt;</string>
- <string name="pkcs12_file_encryption_key">PKCS12 文件加密密钥</string>
- <string name="private_key_password">ç§é’¥å¯†ç </string>
- <string name="password">密ç </string>
- <string name="file_icon">文件图标</string>
- <string name="tls_authentication">TLS 认è¯</string>
- <string name="generated_config">已生æˆçš„é…ç½®</string>
<string name="generalsettings">设置</string>
<string name="owner_fix_summary">å°è¯•è®¾å®š /dev/tun 的属主为 system。一些 CM9 ROM 需è¦å®ƒä»¥ä½¿ VPNService API 工作。本æ“ä½œéœ€è¦ root æƒé™ã€‚</string>
<string name="owner_fix">ä¿®å¤ /dev/tun çš„æƒé™</string>
- <string name="generated_config_summary">显示已生æˆçš„ OpenVPN é…置文件</string>
- <string name="edit_profile_title">编辑 %s</string>
- <string name="building_configration">正在生æˆé…ç½®</string>
- <string name="netchange_summary">å¯ç”¨è¯¥é€‰é¡¹ä»¥åœ¨ç½‘络å˜åŒ–(例如从蜂çªæ•°æ®åˆ° WiFi)时强制é‡æ–°è¿žæŽ¥</string>
- <string name="netchange">当转æ¢ç½‘络时é‡æ–°è¿žæŽ¥</string>
- <string name="netstatus">网络状æ€ï¼š %s</string>
+ <string name="netchange_summary">å¯ç”¨è¯¥é€‰é¡¹ä»¥åœ¨ç½‘络å˜åŒ–(例如在蜂çªæ•°æ®å’Œ WiFi 之间切æ¢ï¼‰æ—¶å¼ºåˆ¶é‡æ–°è¿žæŽ¥</string>
<string name="extracahint">Android 密钥库通常会自带 CA è¯ä¹¦ã€‚如果您获å–çš„è¯ä¹¦å‘生验è¯é”™è¯¯ï¼Œè¯·å•ç‹¬æŒ‡å®šä¸€ä¸ªè¯ä¹¦ã€‚</string>
- <string name="select_file">选择</string>
<string name="keychain_nocacert">在 Android 密钥库中未找到任何 CA è¯ä¹¦ã€‚å¯èƒ½éªŒè¯å¤±è´¥ã€‚</string>
<string name="show_log_summary">连接时显示日志窗å£ã€‚日志窗å£å¯å§‹ç»ˆä»Žé€šçŸ¥æ è®¿é—®ã€‚</string>
- <string name="show_log_window">显示日志窗å£</string>
+ <string name="mobile_info">%10$s %9$s running on %3$s %1$s (%2$s), Android %6$s (%7$s) API %4$d, ABI %5$s, (%8$s)</string>
<string name="error_rsa_sign">与 Android 密钥库 %1$s ç­¾å时出错: %2$s</string>
<string name="faq_system_dialogs">VPN 连接警告会告诉你有程åºæ­£è¦æ‹¦æˆªæ‰€æœ‰çš„网络æµé‡ï¼Œè¿™æ˜¯ä¸ºäº†ç¡®ä¿ VPN æœåŠ¡çš„ API ä¸è¢«æ¶æ„应用滥用。\nVPN 连接通知(通知æ ä¸Šçš„钥匙图标)是 Android 系统内建的,如果当å‰æœ‰ VPN 连接,Android 系统就会自动显示这个通知图标。一些系统上还会在 VPN 连接建立的时候å‘出æ示音。Android 这么åšçš„原因是为了ä¿æŠ¤ä½ ä¸å—æ¶æ„应用的欺骗。</string>
<string name="faq_system_dialogs_title">连接警告和通知声音</string>
<string name="translationby">中文翻译:Christopher Meng
&lt;trans@cicku.me&gt;</string>
- <string name="ipdns">IP 和 DNS 设置</string>
- <string name="basic">基本</string>
- <string name="routing">路由设置</string>
- <string name="obscure">其他 OpenVPN 设置,一般ä¸éœ€è¦ä¿®æ”¹ã€‚</string>
- <string name="advanced">高级设置</string>
<string name="export_config_title">ICS Openvpn é…ç½®</string>
<string name="warn_no_dns">没有使用 DNS æœåŠ¡å™¨ï¼Œæ— æ³•è§£æžåŸŸå,请考虑设置一个 DNS æœåŠ¡å™¨ã€‚请注æ„,å³ä½¿ä½ æ²¡æœ‰è®¾ç½® DNS æœåŠ¡å™¨ï¼Œä½ ä¸ºç§»åŠ¨ç½‘ç»œä»¥åŠ Wi-Fi 设置的代ç†æœåŠ¡å™¨é…置也是有效的。</string>
<string name="dns_add_error">无法添加 DNS æœåŠ¡å™¨ \"%1$s\",%2$s æ‹’ç»äº†æ‚¨çš„æ“作。</string>
<string name="ip_add_error">无法é…ç½® IP åœ°å€ %1$s,被系统拒ç»ï¼š%2$s</string>
<string name="faq_howto">&lt;p&gt;获å–ä½ çš„ VPN é…置文件,å¯ä»¥æ˜¯åœ¨ç”µè„‘上正在使用的 OpenVPN 客户端é…置文件,也å¯ä»¥å‘ä½ çš„ VPN æœåŠ¡å•†ç´¢å–é…置文件。&lt;/p&gt;&lt;p&gt;如果é…置文件åªæœ‰ä¸€ä¸ªï¼Œå¯ä»¥æŠŠé…置文件å‘到你自己的邮箱然åŽä»Žæ‰‹æœºä¸Šä¸‹è½½ã€‚如果é…置文件有很多个,å¯ä»¥å°†å®ƒä»¬å¤åˆ¶åˆ°å­˜å‚¨å¡å†…。&lt;/p&gt;&lt;p&gt;从邮件中下载附件,或者在 VPN 列表中点击文件夹图标æ¥å¯¼å…¥é…置文件。&lt;/p&gt;&lt;p&gt;如果æ示找ä¸åˆ°æ–‡ä»¶ï¼Œé‚£å°±å°†ç¼ºå¤±çš„文件å¤åˆ¶åˆ°å­˜å‚¨å¡å†…。&lt;/p&gt;&lt;p&gt;点击ä¿å­˜ï¼Œå°†é…置文件ä¿å­˜åˆ°ä½ çš„ VPN 列表中。&lt;/p&gt;&lt;p&gt;在 VPN 列表中点击 VPN 的连接的å字,就å¯ä»¥è¿žæŽ¥åˆ° VPN 了。&lt;/p&gt;&lt;p&gt;如果å‘生错误,å¯ä»¥çœ‹æ—¥å¿—窗å£ä¸­çš„日志,然åŽè®¾æ³•è§£å†³é—®é¢˜ã€‚&lt;/p&gt; </string>
- <string name="faq_howto_title">快速入门</string>
- <string name="setting_loadtun_summary">å°è¯•åœ¨è¿žæŽ¥ä¹‹å‰åŠ è½½ tun.ko 内核模å—ã€‚éœ€è¦ root æƒé™ã€‚</string>
- <string name="setting_loadtun">载入 tun 模å—</string>
- <string name="importpkcs12fromconfig">将 PKCS12 导入 Android 密钥库</string>
- <string name="getproxy_error">获å–代ç†è®¾ç½®æ—¶å‡ºé”™ï¼š%s</string>
<string name="using_proxy">ä½¿ç”¨ä»£ç† %1$s %2$d</string>
<string name="use_system_proxy">使用系统代ç†</string>
<string name="use_system_proxy_summary">使用系统设置连接 HTTP/HTTPS 代ç†æœåŠ¡å™¨ã€‚</string>
- <string name="donatewithpaypal">您å¯ä»¥ &lt;a href=\"https://www.paypal.com/cgi-bin/webscr?hosted_button_id=R2M6ZP9AF25LS&amp;amp;cmd=_s-xclick\"&gt; 通过 PayPal æ助&lt;/a&gt;</string>
- <string name="onbootrestartsummary">OpenVPN 将会在é‡å¯åŽè‡ªåŠ¨é‡æ–°è¿žæŽ¥ VPN。请在å¯ç”¨è¯¥é€‰é¡¹å‰å…ˆé˜…读连接警告的常è§é—®é¢˜è§£ç­”。</string>
- <string name="onbootrestart">é‡å¯æ—¶é‡æ–°è¿žæŽ¥</string>
- <string name="ignore">忽略</string>
- <string name="restart">é‡å¯</string>
+ <string name="onbootrestartsummary">如果在系统å¯åŠ¨æ—¶OpenVPN处于活动状æ€ï¼Œé‚£ä¹ˆå®ƒä¼šè¿žæŽ¥æŒ‡å®šçš„VPN。在Android 5.0上使用这个选项å‰ï¼Œè¯·é˜…读连接警告的常è§é—®é¢˜ã€‚</string>
+ <string name="onbootrestart">å¯åŠ¨æ—¶è¿žæŽ¥</string>
<string name="restart_vpn_after_change">é…置的å˜æ›´å°†åœ¨é‡å¯ VPN åŽç”Ÿæ•ˆï¼Œæ˜¯å¦ç«‹å³é‡å¯ï¼Ÿ</string>
- <string name="configuration_changed">é…置已更改</string>
<string name="log_no_last_vpn">无法判断最åŽä¸€æ¬¡è¿žæŽ¥ä½¿ç”¨çš„是哪个é…置文件,所以无法编辑é…置文件</string>
<string name="faq_duplicate_notification_title">é‡å¤çš„通知</string>
<string name="faq_duplicate_notification">当 Android 系统的内存(RAM)å³å°†è€—尽的时候,ä¸å†éœ€è¦çš„应用和æœåŠ¡å°†è¢«å…³é—­ä»¥è…¾å‡ºå†…存空间,这项机制也会影å“到 VPN 进程。为了ä¿è¯ OpenVPN åŠå…¶è¿žæŽ¥ä¸è¢«å…³é—­ï¼ŒOpenVPN æœåŠ¡ä¼šä»¥è¾ƒé«˜çš„优先级è¿è¡Œï¼Œè€Œä¸ºäº†ä»¥è¾ƒé«˜çš„优先级è¿è¡Œï¼ŒOpenVPN 必须在状æ€æ æ˜¾ç¤ºä¸€ä¸ªå›¾æ ‡ã€‚正如å‰é¢çš„问题中说过的,系统的“钥匙â€å›¾æ ‡æ˜¯ç³»ç»Ÿå†…建的,仅仅显示这个“钥匙â€å›¾æ ‡å¹¶ä¸èƒ½è®© OpenVPN 以更高的优先级è¿è¡Œã€‚</string>
@@ -220,8 +129,6 @@
<string name="faq_hint">请确ä¿é˜…读常è§é—®é¢˜è§£ç­”。这是一个快速å‘导。</string>
<string name="faq_routing_title">路由/接å£é…ç½®</string>
<string name="faq_routing">的路由和接å£é…ç½®ä¸é€šè¿‡ä¼ ç»Ÿçš„ifconfig /路由的命令而将用VPNService APIæ¥å®Œæˆã€‚这导致了比在其它æ“作系统ä¸åŒçš„路由é…置。 \ næ­¤VPN隧é“çš„é…置包括IP地å€ï¼Œå¹¶åº”被指定到该接å£çš„网络。特别是,没有åŒè¡Œä¼™ä¼´åœ°å€æˆ–网关地å€æ˜¯å¿…è¦çš„或需è¦ã€‚特殊的路由到达VPNæœåŠ¡å™¨ä¸éœ€è¦ä»»ä½•ï¼ˆä¾‹å¦‚,当使用é‡å®šå‘网关添加)。导入é…置时,应用程åºä¼šå› æ­¤å¿½ç•¥è¿™äº›è®¾ç½®ã€‚该应用程åºå¯ç¡®ä¿ä¸Žè¿žæŽ¥åˆ°æœåŠ¡å™¨æ²¡æœ‰é€šè¿‡VPN隧é“路由的VPNService API。\ næ­¤VPNService APIä¸å…许指定的网络,ä¸åº”该通过VPN路由。作为一ç§å˜é€šæ–¹æ³•çš„应用程åºä¼šæ£€æµ‹ç½‘络,ä¸åº”该被路由到隧é“(如路由XXXX YYYY net_gateway),并计算一组路由排除这ç§è·¯çº¿æ•ˆä»¿å…¶ä»–å¹³å°çš„行为。日志窗å£æ˜¾ç¤ºVPNService的在建立连接的é…ç½®\ nBehind的场景:安å“4.4+确实使用策略路由。使用route / ifconfig命令ä¸ä¼šæ˜¾ç¤ºå·²å®‰è£…的路径。而使用IP规则,iptablesçš„-t轧-L</string>
- <string name="persisttun_summary">当 OpenVPN é‡è¿žæ—¶ï¼Œä¹Ÿä¸€ç›´ä½¿ç”¨ VPN 连接。</string>
- <string name="persistent_tun_title">ä¿æŒ tun 通é“</string>
<string name="openvpn_log">OpenVPN 日志</string>
<string name="import_config">导入 OpenVPN é…置文件</string>
<string name="battery_consumption_title">电池消耗</string>
@@ -253,7 +160,6 @@
<string name="state_tcp_connect">连接中(TCP)</string>
<string name="state_auth_failed">验è¯å¤±è´¥</string>
<string name="state_nonetwork">等待å¯ç”¨ç½‘络</string>
- <string name="statusline_bytecount">↓%2$s/s %1$s - ↑%4$s/s %3$s</string>
<string name="notifcation_title_notconnect">未连接</string>
<string name="start_vpn_title">正在连接 VPN %s</string>
<string name="start_vpn_ticker">正在连接 VPN %s</string>
@@ -359,16 +265,61 @@
<string name="ab_kitkat_mss">早期的KitKat版本在TCP连接上设置了错误的MSS值 (#61948)。OpenVPN将自动å¯åŠ¨mssfix选项æ¥è§£å†³è¿™ä¸ªBug。</string>
<string name="ab_proxy">在DNSæœåŠ¡æ²¡æœ‰è®¾ç½®çš„情况下,安å“会继续使用手机wifi的代ç†è®¾ç½®ã€‚ 安å“OpenVPN会在日志文件中留下警告信æ¯ã€‚在VPN设置DNSæœåŠ¡æ—¶ï¼Œå®‰å“ä¸æ˜¯ä»£ç†ï¼›å®‰å“系统里没有为vpn连接设置代ç†çš„程åºæŽ¥å£ã€‚</string>
<string name="ab_lollipop_reinstall">在被å¸è½½æˆ–é‡æ–°å®‰è£…时,VPN程åºä¼šåœæ­¢å·¥ä½œï¼›è¯¦ç»†ä¿¡æ¯è¯·å‚看 #80074</string>
+ <string name="ab_not_route_to_vpn">The configured client IP and the IPs in its network mask are not routed to the VPN. OpenVPN works around this bug by explicitly adding a route that corrosponds to the client IP and its netmask</string>
+ <string name="ab_persist_tun">Opening a tun device while another tun device is active, which is used for persist-tun support, crashes the VPNServices on the device. A reboot is required to make VPN work again. OpenVPN for Android tries to avoid reopening the tun device and if really needed first closes the current TUN before opening the new TUN device to avoid to crash. This may lead to a short window where packets are sent over the non-VPN connection. Even with this workaround the VPNServices sometimes crashes and requires a reboot of the device.</string>
+ <string name="ab_secondary_users">对于次级用户而言,VPN是ä¸ä¼šèµ·ä½œç”¨çš„。</string>
+ <string name="ab_kitkat_reconnect">有多个用户报告说,在使用VPN应用时,移动连接/移动数æ®è¿žæŽ¥ç»å¸¸ä¼šæŽ‰çº¿ã€‚该行为似乎åªå½±å“一些移动è¿è¥å•†/设备组åˆï¼Œç›®å‰ä¸ºæ­¢å°šæœªç¡®å®šåŽŸå› åŠbug解决方案。</string>
+ <string name="ab_vpn_reachability_44">åªæœ‰ç›®æ ‡å¯ä»¥é€šè¿‡VPN,å¯ä»¥åˆ°è¾¾VPN没有达到。 IPv6çš„VPNä¸èƒ½åœ¨æ‰€æœ‰å·¥ä½œã€‚</string>
<string name="ab_only_cidr_title">éžCIDR路由</string>
+ <string name="ab_proxy_title">对于VPN的代ç†è¡Œä¸º</string>
<string name="ab_lollipop_reinstall_title">正在é‡æ–°å®‰è£…VPN应用</string>
+ <string name="version_upto">%såŠæ›´æ—©ç‰ˆæœ¬</string>
+ <string name="copy_of_profile">%s 的副本</string>
+ <string name="ab_not_route_to_vpn_title">路由到已é…置的 IP 地å€</string>
+ <string name="ab_kitkat_mss_title">VPN 连接出现 MSS 值错误</string>
+ <string name="ab_secondary_users_title">éžAndroidå¹³æ¿çš„主用户</string>
+ <string name="custom_connection_options_warng">指定自定义连接的特定选项。请谨慎使用</string>
<string name="custom_connection_options">自定义选项</string>
<string name="remove_connection_entry">删除连接æ¡ç›®</string>
+ <string name="ab_kitkat_reconnect_title">éšæœºä»Žç§»åŠ¨ç½‘络断开连接</string>
+ <string name="ab_vpn_reachability_44_title">远程网络ä¸å¯è¾¾</string>
<string name="ab_persist_tun_title">ä¿æŒ tun 通é“模å¼</string>
+ <string name="version_and_later">%s åŠæ›´é«˜ç‰ˆæœ¬</string>
+ <string name="tls_cipher_alert_title">连接失败 SSL23_GET_SERVER_HELLO:SSLv3警报 æ¡æ‰‹å¤±è´¥</string>
+ <string name="tls_cipher_alert">较新的OpenVPN for Android版本 (0.6.29/2015å¹´3月) 为 (tls-cipher \"DEFAULT:!EXP:!PSK:!SRP:!kRSA\") 密ç å¥—件使用更安全的默认设置。ä¸å¹¸çš„是,çœç•¥äº†ä¸å¤ªå®‰å…¨çš„加密套件和导出加密套件,尤其是完全正å‘ä¿å¯†å¯†ç å¥—件 (差分哈夫曼编ç ) 的缺失会导致一些问题。这通常是由用心良苦但执行力很差的家伙试图通过设置æœåŠ¡å™¨ä¸Šçš„TLS套件或在一些嵌入å¼æ“作系统 (如软路由系统Mikro Tik) 上定制SSL以加强TLS安全性导致。\n è¦è§£å†³å¯¼è‡´è¿™ä¸ªé—®é¢˜éœ€è¦åœ¨æœåŠ¡å™¨ä¸ŠæŠŠTLS-CIPHERé…置为åˆç†çš„默认值,比如tls-cipher \"DEFAULT:!EXP:!PSK:!SRP:!kRSA\"。如果你æžä¸å®šç³»ç»Ÿç®¡ç†å‘˜ï¼Œå¯ä»¥åœ¨å®¢æˆ·ç«¯è§£å†³ï¼Œåœ¨Android客户端添加自定义选项 tls-cipher DEFAULTå³å¯ã€‚</string>
+ <string name="message_no_user_edit">æ­¤æ¡£æ¡ˆå·²ä»Žå¤–éƒ¨ç¨‹åº (%s) 加载并被标记为ä¸å¯ç”¨æˆ·ç¼–辑。</string>
<string name="crl_file">è¯ä¹¦åŠé”€åˆ—表</string>
+ <string name="service_restarted">é‡æ–°å¯åŠ¨OpenVPNæœåŠ¡ä¸­ (应用程åºå´©æºƒ-å¯èƒ½æ˜¯çœŸå´©æºƒæˆ–由于内存ä¸å¤Ÿç”¨è¢«kill)</string>
+ <string name="import_config_error">导入é…置时出了点错,无法ä¿å­˜</string>
<string name="Search">æœç´¢</string>
+ <string name="lastdumpdate">(最åŽè½¬å‚¨ %1$d:%2$dh old (%3$s))</string>
<string name="clear_log_on_connect">建立新连接时清空日志</string>
<string name="connect_timeout">连接超时</string>
+ <string name="no_allowed_app">没有å…许的应用程åºè¢«æ·»åŠ ã€‚加入本应用 (%s) 以ä¿è¯å…许的应用程åºåˆ—表中至少有一个应用程åºä»Žè€Œç¦æ­¢å…¶ä»–所有应用</string>
<string name="query_permissions_sdcard">OpenVPN for Android å¯ä»¥å°è¯•è‡ªåŠ¨åœ¨ SD å¡ä¸Šå¯»æ‰¾ç¼ºå¤±çš„文件。点击此消æ¯å¼€å§‹è¯·æ±‚æƒé™è®¸å¯ã€‚</string>
<string name="protocol">åè®®</string>
<string name="enabled_connection_entry">å¯ç”¨</string>
+ <string name="abi_mismatch">Preferred native ABI precedence of this device (%1$s) and ABI reported by native libraries (%2$s) mismatch</string>
+ <string name="permission_revoked">VPNæƒé™è¢«æ“作系统撤销 (比如其他VPN程åºå¯åŠ¨äº†) ,VPNåœæ­¢ä¸­</string>
+ <string name="pushpeerinfo">推é€å®¢æˆ·ç«¯ä¿¡æ¯</string>
+ <string name="pushpeerinfosummary">å°†é¢å¤–çš„ä¿¡æ¯å‘é€åˆ°æœåŠ¡å™¨ï¼Œä¾‹å¦‚ SSL 版本和 Android 版本</string>
+ <string name="pw_request_dialog_title">éœ€è¦ %1$s</string>
+ <string name="pw_request_dialog_prompt">请为é…置文件 %1$s 输入密ç </string>
+ <string name="menu_use_inline_data">使用内è”æ•°æ®</string>
+ <string name="export_config_chooser_title">导出é…置文件</string>
+ <string name="missing_tlsauth">tls-auth 文件丢失</string>
+ <string name="missing_certificates">缺少用户è¯ä¹¦æˆ–用户è¯ä¹¦å¯†é’¥æ–‡ä»¶</string>
+ <string name="missing_ca_certificate">缺少CAè¯ä¹¦</string>
+ <string name="crl_title">è¯ä¹¦åŠé”€åˆ—表 (å¯é€‰)</string>
+ <string name="reread_log">从日志缓存文件é‡è¯» (%d) 日志项目</string>
+ <string name="samsung_broken">三星手机几乎是最热销的安å“机,åŒæ—¶ä¸‰æ˜Ÿçš„固件也是bug最多的 Android 固件。Bug 并ä¸å±€é™äºŽè¿è¡Œåœ¨è¿™äº›è®¾å¤‡ä¸Šçš„VPN,但其中许多å¯ä»¥æ˜¯å¯ä»¥æƒ³åŠžæ³•ç»•å¼€çš„。下é¢åˆ—出几个已知Bug:\n\nDNS ä¸å·¥ä½œï¼Œé™¤éžå…¶åœ¨VPN 地å€æ± å†….\n\n很多三星5.X设备上 å…许/ç¦æ­¢ 应用程åºçš„特性并ä¸èƒ½å·¥ä½œã€‚ \n在三星 6.x 机器上åªæœ‰VPN应用被加入çœç”µæ¨¡å¼ç™½åå•ä¹‹åŽVPNæ‰èƒ½å·¥ä½œã€‚</string>
+ <string name="samsung_broken_title">三星手机</string>
+ <string name="novpn_selected">没有选定的 VPN。</string>
+ <string name="reconnect">é‡æ–°è¿žæŽ¥</string>
+ <string name="qs_title">VPN切æ¢</string>
+ <string name="qs_connect">连接到%s</string>
+ <string name="qs_disconnect">æ–­å¼€%s</string>
+ <string name="connectretrymaxmessage">输入连接é‡è¯•æ—¶é—´é—´éš”的最大值。OpenVPN在æ¯æ¬¡ä¸æˆåŠŸçš„连接å°è¯•åŽéƒ½ä¼šæ…¢æ…¢æ高等待时间,直到æ高到这个值åŽåœæ­¢ã€‚默认值300秒。</string>
+ <string name="connectretrymaxtitle">连接é‡è¯•æœ€é•¿é—´éš”</string>
+ <string name="state_waitconnectretry">连接é‡è¯•æœŸé—´å·²ç­‰å¾… %s 秒</string>
</resources>
diff --git a/app/src/main/res/values-zh-rTW/plurals-icsopenvpn.xml b/app/src/main/res/values-zh-rTW/plurals-icsopenvpn.xml
new file mode 100755
index 00000000..70489fbc
--- /dev/null
+++ b/app/src/main/res/values-zh-rTW/plurals-icsopenvpn.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Generated by crowdin.com-->
+<resources></resources>
diff --git a/app/src/main/res/values-zh-rTW/strings-icsopenvpn.xml b/app/src/main/res/values-zh-rTW/strings-icsopenvpn.xml
index c9dfeee5..8ca37880 100755
--- a/app/src/main/res/values-zh-rTW/strings-icsopenvpn.xml
+++ b/app/src/main/res/values-zh-rTW/strings-icsopenvpn.xml
@@ -6,73 +6,74 @@
-->
<resources>
- <string name="address">伺æœå™¨åœ°å€:</string>
+ <string name="address">伺æœå™¨åœ°å€ï¼š</string>
<string name="port">伺æœå™¨ç«¯å£:</string>
<string name="location">ä½ç½®</string>
- <string name="cant_read_folder">目法讀å–檔案目錄</string>
+ <string name="cant_read_folder">無法讀å–檔案目錄</string>
<string name="select">é¸æ“‡</string>
<string name="cancel">å–消</string>
<string name="no_data">沒有資料</string>
- <string name="useLZO">LZO壓縮</string>
- <string name="client_no_certificate">沒有證書</string>
- <string name="client_certificate_title">客戶端證書</string>
- <string name="client_key_title">客戶端證書密鑰</string>
+ <string name="useLZO">LZO 壓縮</string>
+ <string name="client_no_certificate">沒有憑證</string>
+ <string name="client_certificate_title">客戶端憑證</string>
+ <string name="client_key_title">客戶端憑證密鑰</string>
<string name="client_pkcs12_title">PKCS12 檔案</string>
- <string name="ca_title">CA證書</string>
- <string name="no_certificate">您必須é¸æ“‡ä¸€å€‹è­‰æ›¸</string>
- <string name="copyright_guicode">æºä»£ç¢¼å’Œå•é¡Œè·Ÿè¸ªå™¨å¯åœ¨https://github.com/schwabe/ics-openvpn/</string>
- <string name="copyright_others">該方案採用了以下組件; 看到æºä»£ç¢¼çš„許å¯è­‰çš„全部細節</string>
- <string name="about">å·¦å³</string>
- <string name="vpn_list_title">簡介</string>
+ <string name="ca_title">CA 憑證</string>
+ <string name="no_certificate">您必須é¸æ“‡ä¸€å€‹æ†‘è­‰</string>
+ <string name="copyright_guicode">å–得原始碼與事件追蹤,å¯ä¸Š https://github.com/schwabe/ics-openvpn/</string>
+ <string name="copyright_others">本程å¼ä½¿ç”¨äº†ä»¥ä¸‹å…ƒä»¶ï¼Œåœ¨åŽŸå§‹ç¢¼ä¸­çš„授權æ¢æ¬¾æŸ¥çœ‹å®Œæ•´ç´°ç¯€ã€‚</string>
+ <string name="about">關於</string>
+ <string name="vpn_list_title">設定檔</string>
<string name="vpn_type">é¡žåž‹</string>
- <string name="pkcs12pwquery">PKCS12密碼</string>
- <string name="file_select">é¸æ“‡...</string>
- <string name="file_nothing_selected">ä½ å¿…é ˆé¸æ“‡ä¸€å€‹æ–‡ä»¶</string>
- <string name="useTLSAuth">使用TLSèªè­‰</string>
- <string name="tls_direction">TLSæ–¹å‘</string>
- <string name="ipv6_dialog_tile">進入IPv6地å€/å­ç¶²æŽ©ç¢¼CIDRæ ¼å¼ï¼ˆä¾‹å¦‚2000:DD ::å…­å四分之二å三)</string>
- <string name="ipv4_dialog_title">輸入IPv4地å€/å­ç¶²æŽ©ç¢¼CIDRæ ¼å¼ï¼ˆä¾‹å¦‚:1.2.3.4/24)</string>
- <string name="ipv4_address">IPv4地å€</string>
- <string name="ipv6_address">IPv6的地å€</string>
- <string name="custom_option_warning">輸入自定義的OpenVPNé¸é …。請謹慎使用。å¦å¤–請注æ„,許多囤地的相關OpenVPN的設置ä¸èƒ½è¢«VPNSettings的設計支æŒã€‚如果您èªç‚ºä¸€å€‹é‡è¦çš„é¸æ“‡ç¼ºå°‘è¯ç¹«ä½œè€…</string>
- <string name="auth_username">用戶å</string>
+ <string name="pkcs12pwquery">PKCS12 密碼</string>
+ <string name="file_select">é¸æ“‡&#8230;</string>
+ <string name="file_nothing_selected">ä½ å¿…é ˆé¸æ“‡ä¸€å€‹æª”案</string>
+ <string name="useTLSAuth">使用 TLS èªè­‰</string>
+ <string name="tls_direction">TLS æ–¹å‘</string>
+ <string name="ipv6_dialog_tile">以 CIDR æ ¼å¼è¼¸å…¥ IPv6 ä½å€/é®ç½© (例如 2000:dd::23/64)</string>
+ <string name="ipv4_dialog_title">以 CIDR æ ¼å¼è¼¸å…¥ IPv4 地å€/é®ç½© (例如 1.2.3.4/24)</string>
+ <string name="ipv4_address">IPv4 ä½å€</string>
+ <string name="ipv6_address">IPv6 地å€</string>
+ <string name="custom_option_warning">輸入自訂的 OpenVPN é¸é …。請謹慎使用。å¦å¤–請注æ„,VPNSettings 的設計並ä¸æ”¯æ´è¨±å¤š tun 通é“相關 OpenVPN 設定 。如果您èªç‚ºæœ‰ç¼ºå°‘é‡è¦çš„設定é¸é …,請è¯çµ¡ä½œè€…。</string>
+ <string name="auth_username">用戶å稱</string>
<string name="auth_pwquery">密碼</string>
- <string name="static_keys_info">為éœæ…‹é…置所述TLS驗證密鑰將被用來作為éœæ…‹å¯†é‘°</string>
- <string name="configure_the_vpn">é…ç½®VPN</string>
- <string name="menu_add_profile">添加簡介</string>
- <string name="add_profile_name_prompt">輸入一個å稱標識新的é…置文件</string>
- <string name="duplicate_profile_name">請輸入一個唯一的é…置文件å稱</string>
- <string name="profilename">é…置文件å稱</string>
- <string name="no_keystore_cert_selected">您必須é¸æ“‡ä¸€å€‹ç”¨æˆ¶è­‰æ›¸</string>
- <string name="no_error_found">未有找到錯誤</string>
- <string name="config_error_found">在é…置錯誤</string>
- <string name="ipv4_format_error">錯誤解æžIPv4地å€</string>
- <string name="custom_route_format_error">錯誤解æžè‡ªå®šç¾©è·¯ç·š</string>
- <string name="pw_query_hint">(留空按需查詢)</string>
- <string name="vpn_shortcut">OpenVPNæ·å¾‘</string>
- <string name="vpn_launch_title">連線到VPN</string>
- <string name="shortcut_profile_notfound">在快æ·æ–¹å¼æ‰¾ä¸åˆ°æŒ‡å®šçš„設定檔</string>
- <string name="random_host_prefix">隨機主機å稱字首</string>
- <string name="random_host_summary">在主機å稱å‰åŠ å…¥6個隨機字符</string>
+ <string name="static_keys_info">å°æ–¼éœæ…‹è¨­å®šï¼ŒTLS èªè­‰é‡‘鑰將會用作éœæ…‹é‡‘鑰。</string>
+ <string name="configure_the_vpn">設定 VPN</string>
+ <string name="menu_add_profile">新增設定檔</string>
+ <string name="add_profile_name_prompt">輸入新的設定檔å稱</string>
+ <string name="duplicate_profile_name">請輸入ä¸é‡è¤‡çš„設定檔å稱</string>
+ <string name="profilename">設定檔å稱</string>
+ <string name="no_keystore_cert_selected">ä½ å¿…é ˆé¸æ“‡ä¸€å€‹ä½¿ç”¨è€…憑證</string>
+ <string name="no_ca_cert_selected">您必須é¸æ“‡ä¸€å€‹æ†‘è­‰</string>
+ <string name="no_error_found">未找到錯誤</string>
+ <string name="config_error_found">設定中å«æœ‰éŒ¯èª¤</string>
+ <string name="ipv4_format_error">è§£æž IPv4 地å€æ™‚發生錯誤</string>
+ <string name="custom_route_format_error">解æžè‡ªè¨‚路由時發生錯誤</string>
+ <string name="pw_query_hint">(如需查詢,請留空)</string>
+ <string name="vpn_shortcut">OpenVPN æ·å¾‘</string>
+ <string name="vpn_launch_title">正在連線到 VPN...</string>
+ <string name="shortcut_profile_notfound">在æ·å¾‘中找ä¸åˆ°æŒ‡å®šçš„設定檔</string>
+ <string name="random_host_prefix">隨機主機å稱的å‰ç¶´å­—</string>
+ <string name="random_host_summary">在主機å稱å‰åŠ å…¥ 6 個隨機字元</string>
<string name="custom_config_title">啟用自訂é¸é …</string>
- <string name="custom_config_summary">自訂é¸é …,使用時請å°å¿ƒï¼</string>
- <string name="route_rejected">路由拒絕的Andr​​oid</string>
- <string name="cancel_connection">斷開連接</string>
- <string name="cancel_connection_long">æ–·é–‹VPN</string>
- <string name="clear_log">清除日誌</string>
- <string name="title_cancel">å–消確èª</string>
- <string name="cancel_connection_query">斷開連接的VPN /å–消連接嘗試?</string>
- <string name="remove_vpn">刪除VPN</string>
- <string name="check_remote_tlscert">檢查æœå‹™å™¨æ˜¯å¦ä½¿ç”¨TLSçš„æœå‹™å™¨æ“´å±•ï¼ˆ--remote-CERT-TLSæœå‹™å™¨ï¼‰çš„證書</string>
- <string name="check_remote_tlscert_title">é è¨ˆTLSæœå‹™å™¨è­‰æ›¸</string>
- <string name="remote_tlscn_check_summary">檢查é ç¨‹æœå‹™å™¨è­‰æ›¸ä¸»é¡ŒDN</string>
- <string name="remote_tlscn_check_title">證書主機å檢查</string>
+ <string name="custom_config_summary">指定自訂é¸é …,請å°å¿ƒä½¿ç”¨ï¼</string>
+ <string name="route_rejected">路由被 Android 拒絕</string>
+ <string name="cancel_connection">中斷連線</string>
+ <string name="cancel_connection_long">中斷 VPN 連線</string>
+ <string name="clear_log">清除記錄</string>
+ <string name="title_cancel">確èªå–消</string>
+ <string name="cancel_connection_query">中斷已連接的 VPN /å–消正在嘗試的連線?</string>
+ <string name="remove_vpn">移除 VPN</string>
+ <string name="check_remote_tlscert">檢查伺æœå™¨æ˜¯å¦ä½¿ç”¨æ†‘證與 TLS 伺æœå™¨æ“´å…… (--remote-cert-tls 伺æœå™¨) </string>
+ <string name="check_remote_tlscert_title">é æœŸçš„ TLS 伺æœå™¨æ†‘è­‰</string>
+ <string name="remote_tlscn_check_summary">檢查é ç«¯çš„伺æœå™¨æ†‘證主旨 DN</string>
+ <string name="remote_tlscn_check_title">憑證主機å稱檢查</string>
<string name="enter_tlscn_dialog">指定用於驗證é ç¨‹è­‰æ›¸çš„DN(例如C = DE,L =帕德åšæ©ï¼ŒOU =禽æµIPé‹ç‡Ÿå•†ï¼ŒCN = openvpn.blinkt.de)\ñ\ n指定完整的DN或RDN檢查(openvpn.blinkt.de在這個例å­ä¸­ï¼‰æˆ–RDNå‰ç¶´é€²è¡Œé©—證。\ N使用RDNå‰ç¶´â€œæœå‹™å™¨â€\ n當匹é…“æœå‹™å™¨1â€å’Œâ€œæœå‹™å™¨2â€\ñ\ nLeaving文本字段為空將檢查RDNå°æœå‹™å™¨çš„主機å。 \ñ\ n有關詳細信æ¯è«‹åƒè¦‹ä¸‹-verify-X509-åçš„OpenVPN 2.3.1+手冊é </string>
- <string name="enter_tlscn_title">é ç¨‹è­‰æ›¸ä¸»é¡Œ</string>
- <string name="tls_key_auth">啟用TLS密鑰èªè­‰</string>
- <string name="tls_auth_file">TLS驗證文件</string>
- <string name="pull_on_summary">請求,則來自æœå‹™å™¨çš„地å€ï¼Œè·¯ç·šå’Œæ™‚æ©Ÿé¸æ“‡ã€‚</string>
- <string name="pull_off_summary">沒有信æ¯å¾žæœå‹™å™¨è«‹æ±‚。設置需è¦è¦å®šå¦‚下。</string>
+ <string name="enter_tlscn_title">é ç«¯æ†‘證主旨</string>
+ <string name="tls_key_auth">啟用 TLS 密鑰èªè­‰</string>
+ <string name="tls_auth_file">TLS 驗證檔</string>
+ <string name="pull_on_summary">å‘伺æœå™¨è«‹æ±‚ IP 地å€,ã€è·¯ç”±å’Œæ™‚間資訊</string>
+ <string name="pull_off_summary">沒有來自伺æœå™¨çš„資訊,需è¦åœ¨ä¸‹é¢æŒ‡å®šè¨­å®šã€‚</string>
<string name="use_pull">拉設置</string>
<string name="dns">DNS</string>
<string name="override_dns">覆蓋的DNS設置æœå‹™å™¨</string>
@@ -82,45 +83,45 @@
<string name="dns_server">DNSæœå‹™å™¨</string>
<string name="secondary_dns_message">備用DNSæœå‹™å™¨ä½¿ç”¨ï¼Œå¦‚果正常的DNSæœå‹™å™¨ç„¡æ³•åˆ°é”。</string>
<string name="backup_dns">備份DNSæœå‹™å™¨</string>
- <string name="ignored_pushed_routes">忽略推路線</string>
+ <string name="ignored_pushed_routes">忽略伺æœå™¨æŽ¨é€çš„路由</string>
<string name="ignore_routes_summary">忽略路由推æœå‹™å™¨ã€‚</string>
- <string name="default_route_summary">é‡å®šå‘所有通éŽVPN</string>
- <string name="use_default_title">使用默èªè·¯ç”±</string>
+ <string name="default_route_summary">é‡æ–°æ‰€æœ‰æµé‡å°Žåˆ° VPN</string>
+ <string name="use_default_title">使用é è¨­è·¯ç”±</string>
<string name="custom_route_message">輸入自定義的路線。åªæœ‰åœ¨CIDRæ ¼å¼è¼¸å…¥ç›®çš„地。 “10.0.0.0/8 2002:: / 16â€å°±ç›´æŽ¥ç¶²çµ¡10.0.0.0/8å’Œ2002:: / 16通éŽVPN。</string>
<string name="custom_route_message_excluded">路線ä¸æ‡‰è©²è¢«è·¯ç”±é€šéŽVPN。使用相åŒçš„語法包括路線。</string>
<string name="custom_routes_title">自定義路線</string>
<string name="custom_routes_title_excluded">排除網絡</string>
- <string name="log_verbosity_level">日誌級別</string>
+ <string name="log_verbosity_level">日誌的詳細等級</string>
<string name="float_summary">å…許來自任何IP驗證的數據包</string>
- <string name="float_title">å…許浮動æœå‹™å™¨</string>
- <string name="custom_options_title">自定義é¸é …</string>
- <string name="edit_vpn">編輯VPN設置</string>
- <string name="remove_vpn_query">刪除VPNé…置文件“%sâ€ï¼Ÿ</string>
- <string name="tun_error_helpful">在一些定制IC圖片在/ dev / TUN的權é™å¯èƒ½æ˜¯éŒ¯èª¤çš„,或者囤模塊å¯èƒ½æœƒå®Œå…¨ä¸Ÿå¤±ã€‚å°æ–¼CM9圖åƒå˜—試在常è¦è¨­ç½®çš„固定所有權é¸é …</string>
- <string name="tun_open_error">無法打開囤接å£</string>
- <string name="error">“錯誤:â€</string>
+ <string name="float_title">å…許浮動伺æœå™¨</string>
+ <string name="custom_options_title">自訂é¸é …</string>
+ <string name="edit_vpn">編輯 VPN 設定</string>
+ <string name="remove_vpn_query">è¦ç§»é™¤VPN設定檔 %s å—Ž?</string>
+ <string name="tun_error_helpful">在一些自訂的 Android 4.0 (ICS) 中,/dev/tun 的權é™ä¹Ÿè¨±æ˜¯éŒ¯èª¤çš„或是完全沒有 tun æ¨¡çµ„ã€‚å° CM9 來說,試著在全域設定中,修改æ“有者的權é™é¸é …。</string>
+ <string name="tun_open_error">無法開啟 Tun 通é“介é¢</string>
+ <string name="error">"錯誤: "</string>
<string name="clear">清除</string>
- <string name="last_openvpn_tun_config">打開TUN接å£ï¼š</string>
- <string name="local_ip_info">本地IPv4:%1$s / %2$d的IPv6:%3$s MTU:%4$d</string>
- <string name="dns_server_info">DNSæœå‹™å™¨ï¼š%1$s,域å:%2$s</string>
- <string name="routes_info_incl">路線:%1$s %2$s</string>
- <string name="routes_info_excl">路線排除:%1$s %2$s</string>
- <string name="routes_debug">安è£VpnService路線:%1$s %2$s</string>
+ <string name="last_openvpn_tun_config">打開 tun 介é¢ï¼š</string>
+ <string name="local_ip_info">本地 IPv4:%1$s / %2$d IPv6:%3$s MTU:%4$d</string>
+ <string name="dns_server_info">DNS 伺æœå™¨å™¨ï¼š%1$s,域å:%2$s</string>
+ <string name="routes_info_incl">路由:%1$s %2$s</string>
+ <string name="routes_info_excl">排除的路由:%1$s %2$s</string>
+ <string name="routes_debug">VpnService 路由安è£ï¼š%1$s %2$s</string>
<string name="ip_not_cidr">GOT的接å£ä¿¡æ¯%1$så’Œ%2$s,å‡è¨­ç¬¬äºŒå€‹åœ°å€æ˜¯é ç¨‹çš„å°ç­‰åœ°å€ã€‚使用/ 32掩碼本地IP。通éŽOpenVPN的給定方å¼æ˜¯â€œ%3$sâ€ã€‚</string>
<string name="route_not_cidr">ä¸èƒ½ä½¿%1$så’Œ%2$s如IP路由CIDRå­ç¶²æŽ©ç¢¼æ„Ÿï¼Œä½¿ç”¨/ 32å­ç¶²æŽ©ç¢¼ã€‚</string>
- <string name="route_not_netip">修正路線%1$s / %2$s到%3$s / %2$s</string>
+ <string name="route_not_netip">修正路由 %1$s / %2$s 到 %3$s / %2$s</string>
<string name="keychain_access">無法訪å•Android鑰匙扣證書。這å¯ä»¥é€šéŽå›ºä»¶å‡ç´šæˆ–通éŽæ¢å¾©çš„應用程åº/應用程åºè¨­ç½®çš„備份引起。請編輯VPNå’Œé‡æ–°é¸æ“‡ä¸‹åŸºæœ¬è¨­ç½®è­‰æ›¸é‡æ–°è¨ªå•è­‰æ›¸çš„權é™ã€‚</string>
<string name="version_info">%1$s %2$s</string>
- <string name="send_logfile">發é€æ—¥èªŒæ–‡ä»¶</string>
- <string name="send">æ´¾</string>
- <string name="ics_openvpn_log_file">ICS OpenVPN的日誌文件</string>
- <string name="copied_entry">複製日誌æ¢ç›®å¤¾æ¿</string>
- <string name="tap_mode">點擊模å¼</string>
+ <string name="send_logfile">é€å‡ºæ—¥èªŒæª”案</string>
+ <string name="send">傳é€</string>
+ <string name="ics_openvpn_log_file">ICS OpenVPN 日誌檔案</string>
+ <string name="copied_entry">已將記錄複製到剪貼簿</string>
+ <string name="tap_mode">Tap 模å¼</string>
<string name="faq_tap_mode">點擊模å¼æ˜¯ä¸å¯èƒ½çš„éžæ ¹VPN API。因此,該應用程åºä¸èƒ½æ供自來水的支æŒ</string>
- <string name="tap_faq2">了嗎?你在開玩笑å§ï¼Ÿä¸ï¼Œæ”»ç‰™æ¨¡å¼çœŸçš„ä¸æ”¯æŒå’Œç™¼é€æ›´å¤šçš„郵件,詢å•æ˜¯å¦å°‡æ”¯æŒä¹Ÿç„¡æ¿Ÿæ–¼äº‹ã€‚</string>
+ <string name="tap_faq2">å†ä¸€æ¬¡ï¼Ÿä½ åœ¨é–‹çŽ©ç¬‘å§ï¼Ÿé€™çœŸçš„ä¸æ”¯æ´ tap 模å¼ï¼Œå°±ç®—å†å¯„é›»å­éƒµä»¶è©¢å•èƒ½ä¸èƒ½æ”¯æ´ä¹Ÿæ˜¯æ²’用的。</string>
<string name="faq">FAQ</string>
- <string name="copying_log_entries">複製記錄檔æ¢ç›®</string>
- <string name="faq_copying">è¦è¤‡è£½å–®å€‹æ—¥èªŒæ¢ç›®æŒ‰ä½ä¸Šçš„日誌æ¢ç›®ã€‚è‹¥è¦è¤‡è£½/發é€å…¨éƒ¨æ—¥èªŒè«‹ä½¿ç”¨ç™¼é€æ—¥èªŒé¸é …。使用硬件èœå–®æŒ‰éˆ•æ™‚,如果按鈕沒有在GUIå¯è¦‹ã€‚</string>
+ <string name="copying_log_entries">複製記錄項目</string>
+ <string name="faq_copying">è‹¥è¦è¤‡è£½å–®ç­†è¨˜éŒ„,在此記錄項目上點é¸ã€‚è‹¥è¦è¤‡è£½/é€å‡ºæ•´ç­†è¨˜éŒ„,使用é€å‡ºè¨˜éŒ„é¸é …。如果這個按鈕在畫é¢ä¸­ç„¡æ³•é¡¯ç¤ºï¼Œè«‹ä½¿ç”¨å¯¦é«”çš„é¸å–®æŒ‰éˆ•ã€‚</string>
<string name="faq_shortcut">以快æ·æ–¹å¼å•Ÿå‹•</string>
<string name="faq_howto_shortcut">您å¯ä»¥å°‡å¿«æ·æ–¹å¼å•Ÿå‹• OpenVPN 在您的桌é¢ä¸Šã€‚根據您的主畫é¢ç¨‹å¼å¿…須添加一個快æ·æ–¹å¼æˆ–å°éƒ¨ä»¶ã€‚</string>
<string name="no_vpn_support_image">ä½ çš„Android ROMä¸æ”¯æ´VPNæœå‹™API,抱歉了。 :(</string>
@@ -134,8 +135,8 @@
<string name="error_importing_file">匯入éŽç¨‹ä¸­ç™¼ç”ŸéŒ¯èª¤</string>
<string name="import_error_message">無法從檔案系統中匯入檔案</string>
<string name="inline_file_data">&lt;內嵌於設定檔&gt;</string>
- <string name="opentun_no_ipaddr">拒絕沒有IPä¿¡æ¯æ‰“é–‹tun設備</string>
- <string name="menu_import">匯入.ovpn檔案</string>
+ <string name="opentun_no_ipaddr">拒絕開啟 tun 沒有 IP 資訊的è£ç½®</string>
+ <string name="menu_import">從 .ovpn 檔案匯入設定檔</string>
<string name="menu_import_short">匯入</string>
<string name="import_content_resolve_error">匯入éŽç¨‹ä¸­ç„¡æ³•è®€å–設定檔</string>
<string name="error_reading_config_file">讀å–設定檔時發生錯誤</string>
@@ -156,16 +157,16 @@
<string name="ipv6">IPv6</string>
<string name="speed_waiting">等待狀態訊æ¯&#8230;</string>
<string name="converted_profile">匯入設定檔</string>
- <string name="converted_profile_i">匯入設定檔%d</string>
- <string name="broken_images">破碎的形象</string>
+ <string name="converted_profile_i">匯入設定檔 %d</string>
+ <string name="broken_images">æ壞的映åƒ</string>
<string name="broken_images_faq">&lt;p&gt;Official HTC圖åƒï¼Œå·²çŸ¥æœ‰ä¸€ç¨®å¥‡æ€ªçš„路由å•é¡Œé€ æˆäº¤é€šä¸æµéŽéš§é“(也&lt;a href=\"https://github.com/schwabe/ics-openvpn/issues/18\"&gt;Issue 18&lt;/a&gt;看到bug跟踪系統。)的的Xperia弧S和的Xperiaé›·&lt;/p&gt;&lt;p&gt;Older官方SONY圖åƒå·²è¢«å ±å°Žå®Œå…¨ç¼ºå°‘VPNService從圖åƒã€‚ (也&lt;a href=\"https://github.com/schwabe/ics-openvpn/issues/29\"&gt;Issue 29&lt;/a&gt;看到bug跟踪系統。)&lt;/p&gt;&lt;p&gt;On自定義生æˆçš„TUN模塊å¯èƒ½æœƒä¸Ÿå¤±ç…§ç‰‡æˆ–為/ dev / TUN的權利å¯èƒ½æ˜¯éŒ¯èª¤çš„。一些CM9圖åƒéœ€è¦åœ¨â€œè¨­å‚™ç‰¹å®šçš„黑客â€enabled.&lt;/p&gt;&lt;p&gt;Mosté‡è¦çš„是“修復所有權â€é¸é …:如果您的設備有一個破碎的機器人形象,報告給你的供應商。越多的人誰給供應商報告å•é¡Œæ™‚,他們越有å¯èƒ½è§£æ±ºit.&lt;/p&gt;</string>
<string name="pkcs12_file_encryption_key">PKCS12檔加密金鑰</string>
<string name="private_key_password">ç§å¯†é‡‘鑰密碼</string>
<string name="password">密碼</string>
<string name="file_icon">檔案圖標</string>
- <string name="tls_authentication">傳輸層防ç«ç‰†(TLS Firewall)</string>
+ <string name="tls_authentication">TLS 驗證/加密</string>
<string name="generated_config">生æˆçš„設定檔</string>
- <string name="generalsettings">設置</string>
+ <string name="generalsettings">設定</string>
<string name="owner_fix_summary">嘗試修正/dev/tunæ“有者權é™ã€‚已知有些CM9 ROM需è¦é€éŽé€™å€‹ä¾†æ‰èƒ½ä½¿å¾—VPNæœå‹™API得以é‹ä½œã€‚本功能需è¦Root。</string>
<string name="owner_fix">修正 /dev/tun çš„æ“有者</string>
<string name="generated_config_summary">顯示本程åºç”Ÿæˆçš„設定檔</string>
@@ -177,11 +178,11 @@
<string name="extracahint">該CA證書通常是從Android密鑰庫返回。指定一個單ç¨çš„證書,如果你拿到證書驗證錯誤。</string>
<string name="select_file">é¸æ“‡</string>
<string name="keychain_nocacert">沒有CA證書返回,而從Android的密鑰庫讀å–。身份驗證å¯èƒ½æœƒå¤±æ•—。</string>
- <string name="show_log_summary">連接時顯示記錄檔視窗。記錄檔視窗å¯ä»¥éš¨æ™‚從通知欄中進入。</string>
+ <string name="show_log_summary">連接時顯示記錄視窗。記錄視窗å¯ä»¥éš¨æ™‚從通知列中存å–。</string>
<string name="show_log_window">顯示記錄視窗</string>
<string name="mobile_info">%10$s %9$s上%3$s %1$s(%2$s),é‹è¡ŒAndroid %6$s(%7$s)API %4$d,ABI %5$s,(%8$s)</string>
<string name="error_rsa_sign">錯誤簽å與Android密鑰庫密鑰%1$s:%2$s</string>
- <string name="faq_system_dialogs">VPN連接警告信æ¯ï¼Œå‘Šè¨´ä½ ï¼Œé€™å€‹ç¨‹åºå¯ä»¥æ””截所有æµé‡æ˜¯ç”±ç³»çµ±æ–½åŠ çš„防止濫用VPNServiceçš„API。\ næ­¤VPN連接的通知(關éµæ¨™èªŒï¼‰ä¹Ÿå¾µæ”¶Android系統的信號æŒçºŒVPN連接。在æŸäº›åœ–åƒæ­¤é€šçŸ¥æ’­æ”¾è²éŸ³ã€‚\ nAndroid介紹這些系統å°è©±æ¡†ç‚ºè‡ªå·±çš„安全,並確ä¿ä»–們無法è¦é¿ã€‚ (在æŸäº›åœ–片這個ä¸å¹¸çš„是包括通知è²éŸ³ï¼‰</string>
+ <string name="faq_system_dialogs">系統的 VPN 連線警告說明這個應用程å¼å¯ä»¥æ””截所有æµé‡ï¼Œé€™æ˜¯é˜²æ­¢ VPNService API 被濫用。\n為了æ示正在進行的 VPN 連線, Android 系統會產生通知 (鑰匙符號) ,在一些系統中,會發出æ示è²ã€‚\nAndroid 這麼åšæ˜¯ç‚ºäº†ç¢ºä¿ä½ çš„安全。</string>
<string name="faq_system_dialogs_title">連線警告和通知時發出音效</string>
<string name="translationby">ç¹é«”中文</string>
<string name="ipdns">IPå’ŒDNS</string>
@@ -195,103 +196,209 @@
<string name="ip_add_error">無法é…ç½®IP地å€â€œ%1$sâ€ï¼Œç³»çµ±æ‹’絕:%2$s</string>
<string name="faq_howto">&lt;p&gt;Get工作的é…置(從供應商/機構檢測您的電腦或下載)&lt;/p&gt;&lt;p&gt;If它沒有多餘的PEM / pks12文件,你å¯ä»¥è‡ªå·±é€šéŽé›»å­éƒµä»¶ç™¼é€æ–‡ä»¶å’Œæ‰“開附件的單個文件。如果您有多個文件,把它們放在你的SD card.&lt;/p&gt;&lt;p&gt;Click上的電å­éƒµä»¶é™„件/使用的文件夾圖標,在VPN列表導入é…ç½®file&lt;/p&gt;&lt;p&gt;If大約有丟失的文件將丟失的文件在你的SD card.&lt;/p&gt;&lt;p&gt;Click上ä¿å­˜éŒ¯èª¤æ¨™èªŒå°‡å°Žå…¥çš„VPN添加到您的VPN list&lt;/p&gt;&lt;p&gt;Connectçš„VPN通éŽé»žæ“ŠVPN&lt;/p&gt;&lt;p&gt;Ifçš„å字有錯誤或警告日誌試著去了解警告/錯誤,並嘗試修復them&lt;/p&gt; </string>
<string name="faq_howto_title">快速入門</string>
- <string name="setting_loadtun_summary">在連線å‰å˜—試載入Tun模組,需è¦Root。</string>
- <string name="setting_loadtun">載入Tun模組</string>
+ <string name="setting_loadtun_summary">在連線å‰å˜—試載入 Tun æ¨¡çµ„ï¼Œéœ€è¦ Root。</string>
+ <string name="setting_loadtun">載入 tun 模組</string>
<string name="importpkcs12fromconfig">å°Žå…¥PKCS12從é…置到Android的密鑰庫</string>
<string name="getproxy_error">å–得代ç†ä¼ºæœå™¨è³‡è¨Šæ™‚發生錯誤: %s</string>
<string name="using_proxy">使用代ç†ä¼ºæœå™¨ %1$s %2$d</string>
<string name="use_system_proxy">使用系統代ç†</string>
<string name="use_system_proxy_summary">使用系統é…置的 HTTP/HTTPS 代ç†ä¼ºæœå™¨é€²è¡Œé€£ç·šã€‚</string>
- <string name="donatewithpaypal">ä½ å¯ä»¥é€éŽ &lt;a href=\"https://www.paypal.com/cgi-bin/webscr?hosted_button_id=R2M6ZP9AF25LS&amp;amp;cmd=_s-xclick\"&gt;PayPal&lt;/a&gt; æä¾›æ助</string>
- <string name="onbootrestartsummary">如果在é‡æ–°é–‹æ©Ÿæˆ–關機å‰æ­£é€£ç·šVPN,開機時自動é‡æ–°é€£ç·šã€‚在使用這個é¸é …之å‰è«‹å…ˆé–±è®€é€£ç·šè­¦å‘ŠFAQ。</string>
- <string name="onbootrestart">開機時é‡æ–°é€£ç·š</string>
+ <string name="onbootrestartsummary">OpenVPN 將會在系統啟動時連線到特定的 VPN。在 Android &lt; 5.0 上使用這個設定å‰ï¼Œè«‹é–±è®€é€£ç·šè­¦å‘Š FAQ。</string>
+ <string name="onbootrestart">啟動時連線</string>
<string name="ignore">忽略</string>
<string name="restart">é‡ç½®</string>
<string name="restart_vpn_after_change">é…置變更åªæœƒåœ¨é‡æ–°å•Ÿå‹•VPN時æ‰ç”Ÿæ•ˆï¼Œç¾åœ¨è¦(é‡æ–°)å•Ÿå‹•VPN嗎?</string>
<string name="configuration_changed">設定已變更</string>
<string name="log_no_last_vpn">無法判斷最後一次連線使用的設定檔,因此無法編輯設定檔。</string>
<string name="faq_duplicate_notification_title">é‡è¤‡çš„通知</string>
- <string name="faq_duplicate_notification">如果Android是在系統內存中的一些並ä¸éœ€è¦çš„時刻(RAM)的壓力,應用程åºå’Œæœå‹™ï¼Œå¾žç©æ¥µçš„內存中刪除。這將終止正在進行的VPN連接。為了確ä¿é€£æŽ¥/ OpenVPN的生存æœå‹™çš„é‹è¡Œå…·æœ‰æ›´é«˜çš„優先級。於具有較高優先級é‹è¡Œçš„應用程åºå¿…須顯示通知。關éµçš„通知圖標是由系統中的å‰ä¸€å€‹FAQæ¢ç›®ä¸­æ述的罰款。它並ä¸èƒ½ç®—作應用程åºé€šçŸ¥å…·æœ‰è¼ƒé«˜å„ªå…ˆç´šé‹è¡Œçš„目的。</string>
- <string name="no_vpn_profiles_defined">沒有VPNé…置文件定義。</string>
+ <string name="faq_duplicate_notification">如果 Android 在系統記憶體 (RAM) 壓力下,會從ç¾ç”¨çš„記憶體中移除在當下ä¸éœ€è¦çš„應用程å¼å’Œæœå‹™ã€‚這將中止正在進行的 VPN 連線。為了確ä¿é€£ç·š/OpenVPN ä¸è¢«çµ‚止,因此,此應用程å¼å¿…須顯示在通知列中,æ‰å°‡å…·æœ‰è¼ƒé«˜å„ªå…ˆçš„é †åºåŸ·è¡Œã€‚如之å‰å¸¸è¦‹å•é¡Œä¸­èªªæ˜Žçš„,鑰匙圖示是系統產生的,這ä¸èƒ½ç•¶ä½œæ˜¯æ‡‰ç”¨ç¨‹å¼ç‚ºäº†ä»¥æ›´é«˜çš„執行順åºã€‚</string>
+ <string name="no_vpn_profiles_defined">沒有定義的 VPN 設定檔。</string>
<string name="add_new_vpn_hint">使用&lt;img src=\"ic_menu_add\"/&gt;圖標添加新的VPN</string>
<string name="vpn_import_hint">使用&lt;img src=\"ic_menu_archive\"/&gt;圖標,導入從您的SDå¡ç¾æœ‰çš„(.ovpn或.conf文件)é…置文件。</string>
<string name="faq_hint">此外,請務必檢查出的常見å•â€‹â€‹é¡Œè§£ç­”。有一個快速入門指å—。</string>
<string name="faq_routing_title">路由/ç¶²çµ¡ä»‹é¢ è¨­å®š</string>
<string name="faq_routing">路由和接å£é…ç½®ä¸ç¶“由傳統的ifconfig /路由命令,但通éŽä½¿ç”¨VPNService API來完æˆã€‚這將導致比其他æ“作系統ä¸åŒçš„路由é…置。 \ næ­¤VPN隧é“çš„é…置包括IP地å€å’Œæ‡‰è©²è¢«è·¯ç”±é€šéŽè©²æŽ¥å£çš„網絡。特別是,沒有åŒè¡Œå¤¥ä¼´åœ°å€æˆ–網關地å€æ˜¯å¿…è¦çš„或需è¦ã€‚特殊的路由到é”VPNæœå‹™å™¨ä¸éœ€è¦ä»»ä¸€ï¼ˆä¾‹å¦‚,當使用é‡å®šå‘網關加)。導入é…置時,應用程åºå°‡å› æ­¤è€Œå¿½ç•¥é€™äº›è¨­ç½®ã€‚該應用程åºå¯ç¢ºä¿èˆ‡é€£æŽ¥åˆ°æœå‹™å™¨æ²’有通éŽVPN隧é“路由到的VPNService API。\ næ­¤VPNService APIä¸å…許指定網絡ä¸æ‡‰è©²é€šéŽVPN路由。作為一種變通方法的應用程åºæœƒè‡ªå‹•æª¢æ¸¬ç¶²çµ¡ï¼Œä¸æ‡‰è©²è¢«è·¯ç”±åˆ°éš§é“(如航線XXXX YYYY net_gateway),並計算一組路由排除此路線效仿其他平å°çš„行為。日誌窗å£é¡¯ç¤ºVPNService的在建立一個連接的é…ç½®\ nBehind場景:安å“4.4+確實使用策略路由。利用路由/ ifconfig命令將ä¸é¡¯ç¤ºå·²å®‰è£çš„路線。相å,使用IPè¦å‰‡ï¼Œiptablesçš„-t軋-L</string>
- <string name="persisttun_summary">ä¸è¦é€€å›žåˆ°æ²’有VPN連接時,OpenVPN是é‡æ–°é€£æŽ¥ã€‚</string>
+ <string name="persisttun_summary">當 OpenVPN é‡æ–°é€£ç·šæ™‚,æŒçºŒä½¿ç”¨ VPN 連線。</string>
+ <string name="persistent_tun_title">ä¿æŒ tun 通é“</string>
<string name="openvpn_log">OpenVPN é‹ä½œè¨˜éŒ„</string>
<string name="import_config">匯入 OpenVPN é…ç½®</string>
<string name="battery_consumption_title">電池消耗</string>
- <string name="vpn_tethering_title">VPN與å¯æ”œå¼ç„¡ç·šåŸºåœ°å°</string>
- <string name="connection_retries">é‡æ–°é€£ç·šæ¬¡æ•¸</string>
+ <string name="faq_tethering">網路共用的功能 (é€éŽ Wi-Fiã€USB 或è—牙) å’Œ VPNService API (此程å¼ä½¿ç”¨) ä¸ä¸€èµ·ä½œç”¨ã€‚更多細節請看 &lt;a href=\"https://github.com/schwabe/ics-openvpn/issues/34\"&gt;issue #34&lt;/a&gt;</string>
+ <string name="vpn_tethering_title">VPN 與網路共用</string>
+ <string name="connection_retries">連線é‡è©¦æ¬¡æ•¸</string>
<string name="reconnection_settings">é‡æ–°é€£ç·šè¨­å®š</string>
<string name="connectretrymessage">嘗試é‡æ–°é€£ç·šä¹‹é–“的等待秒數。</string>
<string name="connectretrywait">é‡æ–°é€£ç·šçš„間隔時間</string>
- <string name="minidump_generated">OpenVPNéžé æœŸåœ°å´©æ½°ï¼Œä½ æˆ–者會考慮在主é¸å–®ä¸‹å‚³é€Minidump給開發人員。</string>
- <string name="send_minidump">å‘開發人員傳é€Minidump</string>
+ <string name="minidump_generated">OpenVPN 發生éžé æœŸçš„異常,你å¯ä»¥ä½¿ç”¨åœ¨ä¸»é¸å–®ä¸­çš„發é€ç•°å¸¸å‚¾å°é¸é …,將資訊æ供給開發人員。</string>
+ <string name="send_minidump">å‘開發人員傳é€ç•°å¸¸å‚¾å°</string>
+ <string name="send_minidump_summary">傳é€ç¨‹å¼ä¸Šä¸€å€‹ç•°å¸¸åœæ­¢çš„除錯資訊給開發人員</string>
+ <string name="notifcation_title">OpenVPN - %s</string>
+ <string name="session_ipv4string">%1$s - %2$s</string>
+ <string name="session_ipv6string">%1$s - %3$s, %2$s</string>
<string name="state_connecting">連線中</string>
+ <string name="state_wait">等待伺æœå™¨å›žè¦†</string>
+ <string name="state_auth">身份驗證</string>
+ <string name="state_get_config">å–得客戶端é…ç½®</string>
+ <string name="state_assign_ip">åˆ†é… IP ä½å€</string>
+ <string name="state_add_routes">添加路由</string>
<string name="state_connected">已連線</string>
<string name="state_disconnected">中斷連線</string>
<string name="state_reconnecting">正在é‡æ–°é€£ç·š</string>
+ <string name="state_exiting">退出</string>
+ <string name="state_noprocess">ä¸åœ¨åŸ·è¡Œ</string>
+ <string name="state_resolve">解æžä¸»æ©Ÿå稱</string>
<string name="state_tcp_connect">連線中 (TCP)</string>
+ <string name="state_auth_failed">身份驗證失敗</string>
+ <string name="state_nonetwork">等待å¯ä½¿ç”¨çš„網路</string>
<string name="notifcation_title_notconnect">未連線</string>
<string name="start_vpn_title">正在連接至 VPN %s</string>
<string name="start_vpn_ticker">正在連接至 VPN %s</string>
- <string name="device_specific">設備的特性黑客</string>
- <string name="cannotparsecert">無法顯示證書信æ¯</string>
- <string name="appbehaviour">應用行為</string>
- <string name="vpnbehaviour">VPN行為</string>
- <string name="allow_vpn_changes">å…許更改VPNé…置文件</string>
- <string name="hwkeychain">硬件密鑰庫:</string>
- <string name="permission_icon_app">應用程åºå˜—試使用OpenVPN的為Android的圖標</string>
- <string name="faq_vpndialog43">“與Android 4.3å•Ÿå‹•VPN確èªæ˜¯é˜²ç¯„â€è¦†è“‹æ‡‰ç”¨ç¨‹åºâ€œï¼Œé€™å°‡å°Žè‡´è©²å°è©±æ¡†æ²’有å應,觸摸輸入。如果你有一個使用覆蓋一個應用程åºå¯èƒ½æœƒå°Žè‡´æ­¤è¡Œç‚ºã€‚如果發ç¾é•è¦æ‡‰ç”¨ç¨‹åºè¯ç¹«ä½œè€…該應用程åºçš„。這個å•é¡Œå½±éŸ¿åˆ°åœ¨Android 4.3åŠæ›´é«˜ç‰ˆæœ¬çš„所有VPN應用。å¦è¦‹&lt;a href=\"https://github.com/schwabe/ics-openvpn/issues/185\"&gt;Issue 185&lt;a&gt;了解更多詳細信æ¯â€œ</string>
- <string name="faq_vpndialog43_title">Vpn確èªå°è©±æ¡†</string>
- <string name="donatePlayStore">或者你å¯ä»¥çµ¦æˆ‘çš„Play商店æ贈:</string>
- <string name="thanks_for_donation">æ„Ÿè¬æè´ˆ%sï¼</string>
- <string name="logCleared">日誌清除。</string>
+ <string name="jelly_keystore_alphanumeric_bug">如果,密鑰憑證的å稱包å«éžå­—æ¯æ•¸å­—å­—å…ƒ (如空白ã€åº•ç·šã€ç ´æŠ˜è™Ÿ),在æŸäº› Android 4.1 版本å¯èƒ½æœƒå‡ºç¾å•é¡Œã€‚請嘗試é‡æ–°åŒ¯å…¥ä¸å«ç‰¹æ®Šå­—元的憑證。</string>
+ <string name="encryption_cipher">加密密鑰</string>
+ <string name="packet_auth">å°åŒ…é©—è­‰</string>
+ <string name="auth_dialog_title">輸入å°åŒ…驗證方法</string>
+ <string name="built_by">由 %s 建立</string>
+ <string name="debug_build">除錯版本</string>
+ <string name="official_build">æ­£å¼ç‰ˆæœ¬</string>
+ <string name="make_selection_inline">複製到設定檔</string>
+ <string name="crashdump">異常傾å°</string>
+ <string name="add">添加</string>
+ <string name="send_config">發é€é…置檔</string>
+ <string name="complete_dn">完整的 DN</string>
+ <string name="remotetlsnote">你匯入的設定使用了已經éŽèˆŠä¸”ä¸å»ºè­°çš„ tls-remote é¸é …使用了ä¸åŒçš„ DN æ ¼å¼ã€‚</string>
+ <string name="rdn">RDN (common name)</string>
+ <string name="rdn_prefix">RDN å‰ç¶´</string>
+ <string name="tls_remote_deprecated">tls-remote (ä¸å»ºè­°ä½¿ç”¨)</string>
+ <string name="help_translate">您å¯ä»¥è¨ªå•
+http://crowdin.net/project/ics-openvpn/invite
+幫助我們翻譯本軟體</string>
+ <string name="prompt">%1$s 試圖控制 %2$s</string>
+ <string name="remote_warning">你正在æ供這個應用程å¼å®Œå…¨æŽ§åˆ¶ OpenVPN for Android 與攔截所有網路æµé‡çš„權é™ï¼Œ<b>ä¸å…許,除éžä¿¡ä»»æ­¤æ‡‰ç”¨ç¨‹å¼ã€‚</b>å¦å‰‡ï¼Œä½ çš„資料會å—到惡æ„軟體洩æ¼çš„風險。</string>
+ <string name="remote_trust">信任此應用程å¼</string>
+ <string name="no_external_app_allowed">ä¸å…許應用程å¼ä½¿ç”¨å¤–部 API </string>
+ <string name="allowed_apps">å…許的應用程å¼ï¼š%s</string>
+ <string name="clearappsdialog">清除å…許外部應用程å¼çš„清單?\nç›®å‰çš„å…許應用程å¼çš„清單:\n\n%s</string>
+ <string name="screenoff_summary">當螢幕關閉和 60 秒內的傳輸資料,å°æ–¼ 60 KB çš„æ™‚ï¼Œæš«åœ VPN。當 「ä¿æŒ Tun 通é“ã€é¸é …é–‹å•Ÿæ™‚ï¼Œæš«åœ VPN 會讓你的è£ç½®æ²’有網路連線。如果ä¸ä½¿ç”¨ã€Œä¿æŒ Tun 通é“ã€é¸é …,這個è£ç½®æœƒæ²’有 VPN 連線/ä¿è­·ã€‚</string>
+ <string name="screenoff_title">當螢幕關閉時暫åœVPN連線</string>
+ <string name="screenoff_pause">螢幕在關閉狀態時暫åœé€£ç·šï¼šå°‘æ–¼ %1$s 在 %2$s 秒</string>
+ <string name="screen_nopersistenttun">警告:ä¿æŒ tun 通é“沒有在此 VPN 中開啟。當螢幕關閉時,將會使用一般的網際網路連線。</string>
+ <string name="save_password">記ä½å¯†ç¢¼</string>
+ <string name="pauseVPN">æš«åœVPN</string>
+ <string name="resumevpn">æ¢å¾© VPN</string>
+ <string name="state_userpause">使用者è¦æ±‚æš«åœ VPN</string>
+ <string name="state_screenoff">VPN æš«åœ - 螢幕關閉</string>
+ <string name="device_specific">è£ç½®ç‰¹å®šçš„ Hacks</string>
+ <string name="cannotparsecert">無法顯示憑證資訊</string>
+ <string name="appbehaviour">應用程å¼è¡Œç‚º</string>
+ <string name="vpnbehaviour">VPN 行為</string>
+ <string name="allow_vpn_changes">å…許更改 VPN 設定檔</string>
+ <string name="hwkeychain">硬體金鑰庫︰</string>
+ <string name="permission_icon_app">應用程å¼å˜—試使用 OpenVPN for Android å°åœ–示</string>
+ <string name="faq_vpndialog43">\"從 Android 4.3 開始,VPN 確èªé˜²æ­¢ã€Œè¦†è“‹æ‡‰ç”¨ç¨‹å¼ã€ï¼Œæœƒå°Žè‡´å°è©±æ¡†è§¸ç¢°æ™‚沒有å應。如果你的應用程å¼ä¸­æœ‰ä½¿ç”¨è¦†è“‹æ‡‰ç”¨ç¨‹å¼çš„功能,å¯èƒ½æˆ–造æˆé€™å€‹ç¾è±¡ã€‚如果,發ç¾é€ æˆé€™å€‹å•é¡Œçš„應用程å¼ï¼Œè«‹è¯çµ¡é€™å€‹æ­¤æ‡‰ç”¨ç¨‹å¼çš„作者。這個å•é¡Œæœƒå½±éŸ¿åˆ°æ‰€æœ‰åœ¨ Android 4.3 åŠæ›´é«˜ç‰ˆæœ¬çš„ VPN 應用程å¼ã€‚å¦è«‹åƒè¦‹ï¼šSee also &lt;a href=\"https://github.com/schwabe/ics-openvpn/issues/185\"&gt;Issue 185&lt;a&gt; 了解更多詳細資訊。</string>
+ <string name="faq_vpndialog43_title">VPN 確èªå°è©±æ¡†</string>
+ <string name="donatePlayStore">或者,你å¯ä»¥é€éŽ Play 商店æ贈我:</string>
+ <string name="thanks_for_donation">æ„Ÿè¬æè´ˆ %sï¼</string>
+ <string name="logCleared">日誌已清除。</string>
<string name="show_password">顯示密碼</string>
- <string name="keyChainAccessError">鑰匙串訪å•éŒ¯èª¤ï¼š%s</string>
+ <string name="keyChainAccessError">鑰匙圈存å–錯誤:%s</string>
<string name="timestamp_short">短</string>
<string name="timestamp_iso">ISO</string>
- <string name="timestamps">時間戳</string>
+ <string name="timestamps">時間戳記</string>
<string name="timestamps_none">ç„¡</string>
<string name="uploaded_data">上傳</string>
<string name="downloaded_data">下載</string>
- <string name="vpn_status">Vpn狀態</string>
+ <string name="vpn_status"> VPN 狀態</string>
<string name="logview_options">查看é¸é …</string>
- <string name="unhandled_exception">未處ç†çš„異常:%1$s \ñ\ n%2$s</string>
- <string name="unhandled_exception_context">%3$s:%1$s \ñ\ n%2$s</string>
- <string name="faq_system_dialog_xposed">如果你已經æ¤æ ¹Android設備å¯ä»¥å®‰è£&lt;a href=\"http://xposed.info/\"&gt;Xposed framework&lt;/a&gt;和的&lt;a href=\"http://repo.xposed.info/module/de.blinkt.vpndialogxposed\"&gt;VPNå°è©±æ¡†ç¢ºèªmodule&lt;/a&gt;需è¦æ‚¨è‡ªæ“”風險“</string>
+ <string name="unhandled_exception">未處ç†çš„異常:%1$s \n\n %2$s</string>
+ <string name="unhandled_exception_context">%3$s:%1$s \n\n %2$s</string>
+ <string name="faq_system_dialog_xposed">如果你的 Android è£ç½®å·²å–å¾— root 權é™ï¼Œä½ å¯ä»¥è‡ªè¡Œæ‰¿æ“”é¢¨éšªå®‰è£ &lt;a href=\"http://xposed.info/\"&gt;Xposed framework&lt;/a&gt; å’Œ &lt;a href=\"http://repo.xposed.info/module/de.blinkt.vpndialogxposed\"&gt;VPN Dialog confirm module&lt;/a&gt;</string>
<string name="full_licenses">證照齊全</string>
<string name="blocklocal_summary">直接連接到本地接å£çš„網絡將ä¸è¢«è·¯ç”±é€šéŽVPN。å–消é¸æ“‡æ­¤é¸é …將縮進é‡å®šå‘本地網絡的VPN的所有æµé‡ã€‚</string>
- <string name="blocklocal_title">æ—è·¯VPN本地網絡</string>
- <string name="userpw_file">用戶å/密碼文件</string>
- <string name="imported_from_file">[進å£ï¼š%s]</string>
+ <string name="blocklocal_title">å°å€åŸŸç¶²è·¯ç¹žéŽ VPN</string>
+ <string name="userpw_file">用戶å稱/密碼</string>
+ <string name="imported_from_file">[從匯入:%s]</string>
<string name="files_missing_hint">一些文件無法找到。請é¸æ“‡è¦å°Žå…¥çš„文件的é…置文件:</string>
<string name="openvpn_is_no_free_vpn">è¦ä½¿ç”¨é€™å€‹ç¨‹åºï¼Œä½ éœ€è¦ä¸€å€‹VPN供應商/ VPN支æŒOpenVPN的網關(通常由雇主æ供)。查看http://community.openvpn.net/關於OpenVPN的更多信æ¯ï¼Œä»¥åŠå¦‚何設置自己的OpenVPNæœå‹™å™¨ã€‚</string>
- <string name="import_log">導入日誌:</string>
+ <string name="import_log">匯入日誌:</string>
<string name="ip_looks_like_subnet">VPN拓撲“%3$sâ€è¦å®šï¼Œä½†ä½¿ç”¨ifconfig %1$s %2$s看起來更åƒæ˜¯ä¸€å€‹ç¶²çµ¡æŽ©ç¢¼çš„IP地å€ã€‚å‡è¨­â€œå­ç¶²â€çš„æ‹“æ’²çµæ§‹ã€‚</string>
<string name="mssfix_invalid_value">MSS的覆蓋值必須在0到9000的整數</string>
<string name="mssfix_value_dialog">宣布é‹è¡Œåœ¨ä»–們應當é™åˆ¶å…¶ç™¼é€çš„包大å°ï¼Œä½¿å¾—後的OpenVPN已包å°å®ƒå€‘,將所得的UDP包大å°çš„OpenVPN給å°ç«¯ç™¼é€å°‡ä¸è¶…éŽæ­¤å­—節數的隧é“çš„TCP會話。 (默èªç‚º1450)</string>
- <string name="mssfix_checkbox">é‡å¯« TCP 負載的 MSS 的值</string>
- <string name="mssfix_dialogtitle">設置的 TCP MSS 負載</string>
+ <string name="mssfix_checkbox">覆寫TCP è£è¼‰è³‡æ–™ (payload) çš„æœ€å¤§åˆ†æ®µå¤§å° (MSS) 值</string>
+ <string name="mssfix_dialogtitle">設定 TCP è£è¼‰è³‡æ–™ (payload) çš„æœ€å¤§åˆ†æ®µå¤§å° (MSS)</string>
<string name="client_behaviour">客戶端行為</string>
<string name="clear_external_apps">清除å…許外部應用程åº</string>
<string name="loading">載入中...</string>
<string name="allowed_vpn_apps_info">å…許上傳的VPN應用程åºï¼š%1$s</string>
- <string name="disallowed_vpn_apps_info">ä¸å…許VPN應用程åºï¼š%1$s</string>
+ <string name="disallowed_vpn_apps_info">ä¸å…許的 VPN 應用程å¼ï¼š%1$s</string>
<string name="app_no_longer_exists">包%sä¸å†å®‰è£ï¼Œå¾žæ‡‰ç”¨ç¨‹åºåˆªé™¤å®ƒå…許/ç¦æ­¢åˆ—表</string>
<string name="vpn_disallow_radio">VPNé©ç”¨æ–¼æ‰€æœ‰çš„應用程åºï¼Œä½†ä¸åŒ…括所é¸</string>
<string name="vpn_allow_radio">çš„VPN僅用於å°é¸å®šçš„應用程åº</string>
- <string name="query_delete_remote">刪除é ç¨‹æœå‹™å™¨æ¢ç›®ï¼Ÿ</string>
+ <string name="query_delete_remote">刪除é ç«¯ä¼ºæœå™¨é …目?</string>
<string name="keep">養</string>
<string name="delete">刪</string>
<string name="add_remote">添加新的é ç¨‹</string>
+ <string name="remote_random">連線時,隨機é¸æ“‡é€£ç·šé …ç›®</string>
+ <string name="remote_no_server_selected">您需è¦å®šç¾©å’Œå•Ÿç”¨è‡³å°‘一個é ç«¯ä¼ºæœå™¨ã€‚</string>
+ <string name="server_list">伺æœå™¨åˆ—表</string>
+ <string name="vpn_allowed_apps">å…許的應用程å¼</string>
+ <string name="advanced_settings">進階設定</string>
+ <string name="payload_options">資料 (payload) é¸é …</string>
+ <string name="tls_settings">TLS設定</string>
+ <string name="no_remote_defined">é ç«¯æ²’有定義</string>
+ <string name="duplicate_vpn">é‡è¤‡çš„ VPN 設定檔</string>
+ <string name="duplicate_profile_title">複製設定檔︰ %s</string>
+ <string name="show_log">顯示記錄</string>
+ <string name="faq_androids_clients_title">OpenVPN Android 用戶端之間的差異</string>
+ <string name="ignore_multicast_route">忽略多點傳é€è·¯å¾‘:%s</string>
+ <string name="ab_only_cidr">Android åªæ”¯æ´ç„¡é¡žåˆ¥åŸŸé–“ (CIDR) 路由到此 VPN。因為éžç„¡é¡žåˆ¥åŸŸé–“ (CIDR) 路由幾乎ä¸æœƒè¢«ä½¿ç”¨ï¼ŒOpenVPN for Android 將使用 /32 éžç„¡é¡žåˆ¥åŸŸé–“ (CIDR) 路由處ç†é€™å€‹è­¦å‘Šã€‚</string>
+ <string name="ab_tethering_44">當 VPN 啟用時,網路共用ä»å¯é‹ä½œï¼Œä½†ç¶²è·¯å…±ç”¨çš„連線ä¸æœƒé€éŽ VPN。</string>
+ <string name="ab_kitkat_mss">早期的 KitKat 版本在 TCP é€£ç·šä¸­ï¼Œè¨­å®šéŒ¯èª¤çš„æœ€å¤§åˆ†æ®µå¤§å° (MSS) 值 (#61948)。試著開啟 mssfix é¸é …來繞開這個 bug。</string>
+ <string name="ab_proxy">Android 沒有 DNS 伺æœå™¨è¨­å®šæ™‚,會繼續使用你指定的行動/Wi-Fi 連線代ç†è¨­å®šã€‚OpenVPN for Android 會在日誌中記錄警告訊æ¯ã€‚<p>當 VPN 有設定 DNS 伺æœå™¨æ™‚,因為,Android API 中無法為 VPN 連線設定代ç†ï¼Œæ‰€ä»¥ï¼Œå°‡ä¸æœƒä½¿ç”¨ä»£ç†è¨­å®šã€‚</p></string>
+ <string name="ab_lollipop_reinstall">當解除安è£æˆ–é‡æ–°å®‰è£ï¼ŒVPN 應用程å¼ä¹Ÿæœƒåœæ­¢é‹ä½œã€‚詳細資訊起åƒé–± #80074</string>
+ <string name="ab_secondary_users">VPN ä¸æœƒå°æ¬¡ç´šä½¿ç”¨è€…作用。</string>
+ <string name="ab_only_cidr_title">éžç„¡é¡žåˆ¥åŸŸé–“ (CIDR) 路由</string>
+ <string name="ab_proxy_title">VPN 的代ç†è¡Œç‚º</string>
+ <string name="ab_lollipop_reinstall_title">é‡æ–°å®‰è£ VPN 應用程å¼</string>
+ <string name="version_upto">%s åŠæ›´æ—©ç‰ˆæœ¬</string>
+ <string name="copy_of_profile">%s 的副本</string>
+ <string name="ab_not_route_to_vpn_title">路由到設定的 IP ä½å€</string>
+ <string name="ab_kitkat_mss_title">VPN é€£ç·šéŒ¯èª¤çš„æœ€å¤§åˆ†æ®µå¤§å° (MSS) 值</string>
+ <string name="custom_connection_options_warng">指定自訂連線的特定é¸é …,請å°å¿ƒä½¿ç”¨</string>
+ <string name="custom_connection_options">自定義é¸é …</string>
+ <string name="remove_connection_entry">刪除連線項目</string>
+ <string name="ab_vpn_reachability_44_title">é ç«¯ç¶²è·¯ç„¡æ³•é€£ç·š</string>
+ <string name="ab_persist_tun_title">ä¿æŒ tun 模å¼</string>
+ <string name="version_and_later">%s åŠæ›´é«˜ç‰ˆæœ¬</string>
+ <string name="tls_cipher_alert_title">連接失敗,SSL23_GET_SERVER_HELLO:sslv3 æ¡æ‰‹å¤±æ•—</string>
+ <string name="message_no_user_edit">é€™å€‹è¨­å®šæª”å·²è¢«å¾žå¤–éƒ¨æ‡‰ç”¨ç¨‹å¼ (%s) 新增,並標記為使用者無法編輯。</string>
+ <string name="crl_file">憑證撤銷清單</string>
+ <string name="import_config_error">å°Žå…¥é…置產生錯誤,無法ä¿å­˜</string>
+ <string name="Search">æœç´¢</string>
+ <string name="lastdumpdate">(最後傾å°æ˜¯ %1$d:%2$dh ä¹… (%3$s))</string>
+ <string name="clear_log_on_connect">清除新連線的記錄</string>
+ <string name="connect_timeout">連線超時</string>
<string name="query_permissions_sdcard">添加新的é ç¨‹</string>
<string name="protocol">å”定</string>
<string name="enabled_connection_entry">啟用</string>
<string name="abi_mismatch">該設備的優先考慮的æ¯èªžABI優先級(%1$s)和ABI報告本地庫(%2$s)ä¸åŒ¹é…</string>
- <string name="months_left">離開%d個月</string>
- <string name="days_left">離開%d天</string>
- <string name="hours_left">%då°æ™‚離開</string>
+ <string name="pushpeerinfo">發é€ç«¯è³‡è¨Š</string>
+ <string name="pushpeerinfosummary">傳é€é¡å¤–的資訊到伺æœå™¨ï¼Œä¾‹å¦‚ SSL 版本與 Android 版本</string>
+ <string name="pw_request_dialog_title">éœ€è¦ %1$s</string>
+ <string name="pw_request_dialog_prompt">請輸入 %1$s 設定檔的密碼</string>
+ <string name="menu_use_inline_data">使用行內 (inline) 資料</string>
+ <string name="export_config_chooser_title">匯出設定檔</string>
+ <string name="missing_tlsauth">缺少 tls-auth 檔案</string>
+ <string name="missing_certificates">缺少使用者憑證或使用者憑證金鑰檔案</string>
+ <string name="missing_ca_certificate">缺少 CA 憑證</string>
+ <string name="crl_title">憑證撤銷清單 (å¯é¸)</string>
+ <string name="samsung_broken_title">三星手機</string>
+ <string name="novpn_selected">沒有 VPN 被é¸æ“‡</string>
+ <string name="reconnect">é‡æ–°é€£ç·š</string>
+ <string name="qs_title">åˆ‡æ› VPN</string>
+ <string name="qs_connect">連線到 %s</string>
+ <string name="qs_disconnect">中斷連線 %s</string>
+ <string name="connectretrymaxtitle">連線嘗試最大間隔</string>
+ <string name="state_waitconnectretry">連線é‡è©¦é–“,等待 %s 秒。</string>
+ <string name="change_sorting">更改排åº</string>
+ <string name="sort">排åº</string>
</resources>
diff --git a/app/src/main/res/values/colours.xml b/app/src/main/res/values/colours.xml
index d06bc233..cf4a2a7f 100644
--- a/app/src/main/res/values/colours.xml
+++ b/app/src/main/res/values/colours.xml
@@ -18,4 +18,7 @@
<color name="background_tab_pressed">#1AFFFFFF</color>
+
+ <color name="dataIn">#ff0000</color>
+ <color name="dataOut">#0000ff</color>
</resources> \ No newline at end of file
diff --git a/app/src/main/res/values/plurals-icsopenvpn.xml b/app/src/main/res/values/plurals-icsopenvpn.xml
new file mode 100644
index 00000000..1c5a03bc
--- /dev/null
+++ b/app/src/main/res/values/plurals-icsopenvpn.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<resources>
+ <plurals name="months_left">
+ <item quantity="one">One month left</item>
+ <item quantity="other">%d months left</item>
+ </plurals>
+ <plurals name="days_left">
+ <item quantity="one">One day left</item>
+ <item quantity="other">%d days left</item>
+ </plurals>
+ <plurals name="hours_left">
+ <item quantity="one">One hour left</item>
+ <item quantity="other">%d hours left</item>
+ </plurals>
+ <plurals name="minutes_left">
+ <item quantity="one">One minute left</item>
+ <item quantity="other">%d minutes left</item>
+ </plurals>
+</resources> \ No newline at end of file
diff --git a/app/src/main/res/values/refs.xml b/app/src/main/res/values/refs.xml
index 4d3c257a..2b00d5b5 100644
--- a/app/src/main/res/values/refs.xml
+++ b/app/src/main/res/values/refs.xml
@@ -5,12 +5,23 @@
-->
<resources>
- <drawable name="ic_menu_close_clear_cancel">@android:drawable/ic_menu_close_clear_cancel</drawable>
- <drawable name="ic_menu_play">@android:drawable/ic_media_play</drawable>
- <drawable name="ic_menu_pause">@android:drawable/ic_media_pause</drawable>
- <drawable name="ic_menu_share">@android:drawable/ic_menu_share </drawable>
- <drawable name="ic_menu_save">@android:drawable/ic_menu_save</drawable>
- <drawable name="ic_menu_view">@android:drawable/ic_menu_view</drawable>
- <drawable name="ic_menu_delete">@android:drawable/ic_menu_delete</drawable>
- <drawable name="ic_menu_edit">@android:drawable/ic_menu_edit</drawable>
-</resources>
+ <drawable name="ic_menu_close_clear_cancel">@android:drawable/ic_menu_close_clear_cancel</drawable>
+ <drawable name="ic_menu_play">@android:drawable/ic_media_play</drawable>
+ <drawable name="ic_menu_pause">@android:drawable/ic_media_pause</drawable>
+ <drawable name="ic_menu_share">@android:drawable/ic_menu_share </drawable>
+ <drawable name="ic_menu_save">@android:drawable/ic_menu_save</drawable>
+ <drawable name="ic_menu_view">@android:drawable/ic_menu_view</drawable>
+ <drawable name="ic_menu_delete">@android:drawable/ic_menu_delete</drawable>
+ <drawable name="ic_menu_edit">@android:drawable/ic_menu_edit</drawable>
+ <!--<drawable name="ic_menu_import">@drawable/ic_menu_archive</drawable>-->
+ <!--<drawable name="vpn_item_edit">@drawable/vpn_item_settings </drawable>-->
+ <drawable name="ic_menu_add">@android:drawable/ic_menu_add</drawable>
+ <drawable name="ic_dialog_alert">@android:drawable/ic_dialog_alert</drawable>
+ <drawable name="ic_menu_add_grey">@android:drawable/ic_menu_add</drawable>
+ <!--<drawable name="ic_menu_import_grey">@drawable/ic_menu_archive</drawable>-->
+ <drawable name="ic_menu_delete_grey">@android:drawable/ic_menu_delete</drawable>
+ <!--<drawable name="ic_menu_copy">@drawable/ic_menu_copy_holo_light</drawable>-->
+ <!--<drawable name="ic_receipt">@drawable/ic_menu_log</drawable> -->
+ <drawable name="ic_sort">@android:drawable/ic_menu_sort_by_size</drawable>
+
+</resources> \ No newline at end of file
diff --git a/app/src/main/res/values/strings-icsopenvpn.xml b/app/src/main/res/values/strings-icsopenvpn.xml
index 3956604e..52abd9a5 100755
--- a/app/src/main/res/values/strings-icsopenvpn.xml
+++ b/app/src/main/res/values/strings-icsopenvpn.xml
@@ -42,13 +42,14 @@
<string name="duplicate_profile_name">Please enter a unique Profile Name</string>
<string name="profilename">Profile Name</string>
<string name="no_keystore_cert_selected">You must select a User certificate</string>
+ <string name="no_ca_cert_selected">You must select a CA certificate</string>
<string name="no_error_found">No error found</string>
<string name="config_error_found">Error in Configuration</string>
<string name="ipv4_format_error">Error parsing the IPv4 address</string>
<string name="custom_route_format_error">Error parsing the custom routes</string>
<string name="pw_query_hint">(leave empty to query on demand)</string>
<string name="vpn_shortcut">OpenVPN Shortcut</string>
- <string name="vpn_launch_title">Connect to VPN</string>
+ <string name="vpn_launch_title">Connecting to VPN…</string>
<string name="shortcut_profile_notfound">Profile specified in shortcut not found</string>
<string name="random_host_prefix">Random Host Prefix</string>
<string name="random_host_summary">Adds 6 random chars in front of hostname</string>
@@ -162,7 +163,7 @@
<string name="private_key_password">Private Key Password</string>
<string name="password">Password</string>
<string name="file_icon">file icon</string>
- <string name="tls_authentication">TLS Authentication</string>
+ <string name="tls_authentication">TLS Authentication/Encryption</string>
<string name="generated_config">Generated Config</string>
<string name="generalsettings">Settings</string>
<string name="owner_fix_summary">Tries to set the owner of /dev/tun to system. Some CM9 images need this to make the VPNService API work. Requires root.</string>
@@ -201,9 +202,8 @@
<string name="using_proxy">Using proxy %1$s %2$d</string>
<string name="use_system_proxy">Use system proxy</string>
<string name="use_system_proxy_summary">Use the system wide configuration for HTTP/HTTPS proxies to connect.</string>
- <string name="donatewithpaypal">You can &lt;a href=\"https://www.paypal.com/cgi-bin/webscr?hosted_button_id=R2M6ZP9AF25LS&amp;amp;cmd=_s-xclick\"&gt;donate with PayPal&lt;/a&gt; </string>
- <string name="onbootrestartsummary">OpenVPN will reconnect a VPN if it was active on system reboot/shutdown. Please read the Connection warning FAQ before using this option.</string>
- <string name="onbootrestart">Reconnect on reboot</string>
+ <string name="onbootrestartsummary">OpenVPN will connect the specified VPN if it was active on system boot. Please read the connection warning FAQ before using this option on Android &lt; 5.0.</string>
+ <string name="onbootrestart">Connect on boot</string>
<string name="ignore">Ignore</string>
<string name="restart">Restart</string>
<string name="restart_vpn_after_change">Configuration changes are applied after restarting the VPN. (Re)start the VPN now?</string>
@@ -250,7 +250,7 @@
<string name="state_tcp_connect">Connecting (TCP)</string>
<string name="state_auth_failed">Authentication failed</string>
<string name="state_nonetwork">Waiting for usable network</string>
- <string name="statusline_bytecount">↓%2$s/s %1$s - ↑%4$s/s %3$s</string>
+ <string name="statusline_bytecount">↓%2$s %1$s - ↑%4$s %3$s</string>
<string name="notifcation_title_notconnect">Not connected</string>
<string name="start_vpn_title">Connecting to VPN %s</string>
<string name="start_vpn_ticker">Connecting to VPN %s</string>
@@ -277,7 +277,7 @@
<string name="no_external_app_allowed">No app allowed to use external API</string>
<string name="allowed_apps">Allowed apps: %s</string>
<string name="clearappsdialog">Clear list of allowed external apps?\nCurrent list of allowed apps:\n\n%s</string>
- <string name="screenoff_summary">"Pause VPN when screen is off and less than 64 kB transferred data in 60s. When the \"Persistent Tun\" option is enabled pausing the VPN will leave your device with NO network connectivity. Without the \"Persistent Tun\" option the device will have no VPN connection/protection.</string>
+ <string name="screenoff_summary">Pause VPN when screen is off and less than 64 kB transferred data in 60s. When the \"Persistent Tun\" option is enabled pausing the VPN will leave your device with NO network connectivity. Without the \"Persistent Tun\" option the device will have no VPN connection/protection.</string>
<string name="screenoff_title">Pause VPN connection after screen off</string>
<string name="screenoff_pause">Pausing connection in screen off state: less than %1$s in %2$ss</string>
<string name="screen_nopersistenttun">Warning: Persistent tun not enabled for this VPN. Traffic will use the normal Internet connection when the screen is off.</string>
@@ -310,7 +310,7 @@
<string name="logview_options">View options</string>
<string name="unhandled_exception">Unhandled exception: %1$s\n\n%2$s</string>
<string name="unhandled_exception_context">%3$s: %1$s\n\n%2$s</string>
- <string name="faq_system_dialog_xposed">If you have rooted your Android device you can install the &lt;a href=\"http://xposed.info/\"&gt;Xposed framework&lt;/a&gt; and a the &lt;a href=\"http://repo.xposed.info/module/de.blinkt.vpndialogxposed\"&gt;VPN Dialog confirm module&lt;/a&gt; at your own risk"</string>
+ <string name="faq_system_dialog_xposed">If you have rooted your Android device you can install the &lt;a href=\"http://xposed.info/\"&gt;Xposed framework&lt;/a&gt; and the &lt;a href=\"http://repo.xposed.info/module/de.blinkt.vpndialogxposed\"&gt;VPN Dialog confirm module&lt;/a&gt; at your own risk"</string>
<string name="full_licenses">Full licenses</string>
<string name="blocklocal_summary">Networks directly connected to the local interfaces will not be routed over the VPN. Deselecting this option will redirect all traffic intented for local networks to the VPN.</string>
<string name="blocklocal_title">Bypass VPN for local networks</string>
@@ -321,6 +321,7 @@
<string name="import_log">Import log:</string>
<string name="ip_looks_like_subnet">Vpn topology \"%3$s\" specified but ifconfig %1$s %2$s looks more like an IP address with a network mask. Assuming \"subnet\" topology.</string>
<string name="mssfix_invalid_value">The MSS override value has to be a integer between 0 and 9000</string>
+ <string name="mtu_invalid_value">The MTU override value has to be a integer between 64 and 9000</string>
<string name="mssfix_value_dialog">Announce to TCP sessions running over the tunnel that they should limit their send packet sizes such that after OpenVPN has encapsulated them, the resulting UDP packet size that OpenVPN sends to its peer will not exceed this number of bytes. (default is 1450)</string>
<string name="mssfix_checkbox">Override MSS value of TCP payload</string>
<string name="mssfix_dialogtitle">Set MSS of TCP payload</string>
@@ -390,9 +391,6 @@
<string name="protocol">Protocol</string>
<string name="enabled_connection_entry">Enabled</string>
<string name="abi_mismatch">Preferred native ABI precedence of this device (%1$s) and ABI reported by native libraries (%2$s) mismatch</string>
- <string name="months_left">%d months left</string>
- <string name="days_left">%d days left</string>
- <string name="hours_left">%d hours left</string>
<string name="permission_revoked">VPN permission revoked by OS (e.g. other VPN program started), stopping VPN</string>
<string name="pushpeerinfo">Push Peer info</string>
<string name="pushpeerinfosummary">Send extra information to the server, e.g. SSL version and Android version</string>
@@ -405,4 +403,49 @@
<string name="missing_ca_certificate">Missing CA certificate</string>
<string name="crl_title">Certifcate Revoke List (optional)</string>
<string name="reread_log">Reread (%d) log items from log cache file</string>
+ <string name="samsung_broken">Even though Samsung phones are among the most selling Android phones, Samsung\'s firmware are also among the most buggy Android firmwares. The bugs are not limited to the VPN operation on these devices but many of them can be workarounded. In the following some of these bugs are described.\n\nDNS does not work unless the DNS server in the VPN range.\n\nOn many Samsung 5.x devices the allowed/disallowed apps feature does not work.\nOn Samsung 6.x VPN is reported not to work unless the VPN app is exempted from Powersave features.</string>
+ <string name="samsung_broken_title">Samsung phones</string>
+ <string name="novpn_selected">No VPN selected.</string>
+ <string name="defaultvpn">Default VPN</string>
+ <string name="defaultvpnsummary">VPN used in places where a default VPN needed. These are currently on boot, for Always-On and the Quick Settings Tile.</string>
+ <string name="vpnselected">Currently selected VPN: \'%s\'</string>
+ <string name="reconnect">Reconnect</string>
+ <string name="qs_title">Toggle VPN</string>
+ <string name="qs_connect">Connect to %s</string>
+ <string name="qs_disconnect">Disconnect %s</string>
+ <string name="connectretrymaxmessage">Enter the maximum time between connection attempts. OpenVPN will slowly raise its waiting time after an unsuccessful connection attempt up to this value. Defaults to 300s.</string>
+ <string name="connectretrymaxtitle">Maximum time between connection attempts</string>
+ <string name="state_waitconnectretry">Waiting %ss seconds between connection attempt</string>
+ <string name="nought_alwayson_warning"><![CDATA[If you did not get a VPN confirmation dialog, you have \"Always on VPN\" enabled for another app. In that case only that app is allowed to connect to a VPN. Check under Settings-> Networks more .. -> VPNS]]></string>
+ <string name="management_socket_closed">Connection to OpenVPN closed (%s)</string>
+ <string name="change_sorting">Change sorting</string>
+ <string name="sort">Sort</string>
+ <string name="sorted_lru">Profiles sorted by last recently used</string>
+ <string name="sorted_az">Profiles sorted by name</string>
+ <string name="deprecated_tls_remote">Config uses option tls-remote that was deprecated in 2.3 and finally removed in 2.4</string>
+ <string name="auth_failed_behaviour">Behaviour on AUTH_FAILED</string>
+ <string name="graph">Graph</string>
+ <string name="use_logarithmic_scale">Use logarithmic scale</string>
+ <string name="notenoughdata">Not enough data</string>
+ <string name="avghour">Average per hour</string>
+ <string name="avgmin">Average per minute</string>
+ <string name="last5minutes">Last 5 minutes</string>
+ <string name="data_in">In</string>
+ <string name="data_out">Out</string>
+ <string name="bits_per_second">%.0f bit/s</string>
+ <string name="kbits_per_second">%.1f kbit/s</string>
+ <string name="mbits_per_second">%.1f Mbit/s</string>
+ <string name="gbits_per_second">%.1f Gbit/s</string>
+ <string name="weakmd">&lt;p>Starting with OpenSSL version 1.1, OpenSSL rejects weak signatures in certificates like MD5.&lt;/p>&lt;p>&lt;b>MD5 signatures are insecure and should not be used anymore.&lt;/b> MD5 collisions can be created in &lt;a href="https://natmchugh.blogspot.de/2015/02/create-your-own-md5-collisions.html">few hours at a minimal cost.&lt;/a>. You should update the VPN certificates as soon as possible.&lt;/p>&lt;p>Unfortunately, older easy-rsa distributions included the config option "default_md md5". If you are using an old easy-rsa version, update to the &lt;a href="https://github.com/OpenVPN/easy-rsa/releases">latest version&lt;/a>) or change md5 to sha256 and regenerate your certificates.&lt;/p>&lt;p>If you really want to use old and broken certificates use the custom configuration option tls-cipher "DEFAULT:@SECLEVEL=0" under advanced configuration or as additional line in your imported configuration&lt;/p></string>
+
+<string name="volume_byte">%.0f B</string>
+ <string name="volume_kbyte">%.1f kB</string>
+ <string name="volume_mbyte">%.1f MB</string>
+ <string name="volume_gbyte">%.1f GB</string>
+ <string name="channel_name_background">Connection statistics</string>
+ <string name="channel_description_background">Ongoing statistics of the established OpenVPN connection</string>
+ <string name="channel_name_status">Connection status change</string>
+ <string name="channel_description_status">Status changes of the OpenVPN connection (Connecting, authenticating,…)</string>
+ <string name="weakmd_title">Weak (MD5) hashes in certificate signature (SSL_CTX_use_certificate md too weak)</string>
+
</resources>
diff --git a/app/src/main/res/values/untranslatable.xml b/app/src/main/res/values/untranslatable.xml
index a73cad33..2d7f904b 100644
--- a/app/src/main/res/values/untranslatable.xml
+++ b/app/src/main/res/values/untranslatable.xml
@@ -2,7 +2,8 @@
<resources>
<string name="app" translatable="false">Bitmask</string>
<string name="app_name" translatable="false">Bitmask</string>
-
+ <string name="notifcation_title_bitmask">Bitmask - %s</string>
+
<string name="copyright_leapgui" translatable="false">Copyright 2012-2014\nLEAP Encryption Access Project &lt;info@leap.se></string>
<string name="opevpn_copyright" translatable="false">Copyright © 2002–2010 OpenVPN Technologies, Inc. &lt;sales@openvpn.net>\n
diff --git a/app/src/ovpn3/java/de/blinkt/openvpn/core/OpenVPNThreadv3.java b/app/src/ovpn3/java/de/blinkt/openvpn/core/OpenVPNThreadv3.java
index e595106c..850983a9 100644
--- a/app/src/ovpn3/java/de/blinkt/openvpn/core/OpenVPNThreadv3.java
+++ b/app/src/ovpn3/java/de/blinkt/openvpn/core/OpenVPNThreadv3.java
@@ -22,7 +22,7 @@ public class OpenVPNThreadv3 extends ClientAPI_OpenVPNClient implements Runnable
static {
/*System.loadLibrary("crypto");
System.loadLibrary("ssl");*/
- System.loadLibrary("polarssl-dynamic");
+ //System.loadLibrary("polarssl-dynamic");
System.loadLibrary("ovpn3");
}
@@ -77,7 +77,8 @@ public class OpenVPNThreadv3 extends ClientAPI_OpenVPNClient implements Runnable
statuspoller.stop();
}
- @Override
+
+ @Override
public boolean tun_builder_set_remote_address(String address, boolean ipv6) {
mService.setMtu(1500);
return true;
@@ -94,9 +95,8 @@ public class OpenVPNThreadv3 extends ClientAPI_OpenVPNClient implements Runnable
return true;
}
- @Override
- public boolean tun_builder_add_route(String address, int prefix_length,
- boolean ipv6) {
+ @Override
+ public boolean tun_builder_add_route(String address, int prefix_length, int metric, boolean ipv6) {
if (address.equals("remote_host"))
return false;
@@ -107,7 +107,20 @@ public class OpenVPNThreadv3 extends ClientAPI_OpenVPNClient implements Runnable
return true;
}
- @Override
+ @Override
+ public boolean tun_builder_exclude_route(String address, int prefix_length, int metric, boolean ipv6) {
+ if(ipv6)
+ mService.addRoutev6(address + "/" + prefix_length, "wifi0");
+ else {
+ //TODO
+ mService.addRoute(address, String.valueOf(prefix_length), "1.2.3.4" , "wifi0");
+ }
+ return true;
+ }
+
+
+
+ @Override
public boolean tun_builder_add_search_domain(String domain) {
mService.setDomain(domain);
return true;
@@ -126,15 +139,15 @@ public class OpenVPNThreadv3 extends ClientAPI_OpenVPNClient implements Runnable
- @Override
- public boolean tun_builder_add_address(String address, int prefix_length,
- boolean ipv6) {
- if(!ipv6)
- mService.setLocalIP(new CIDRIP(address, prefix_length));
- else
- mService.setLocalIPv6(address+ "/" + prefix_length);
- return true;
- }
+
+ @Override
+ public boolean tun_builder_add_address(String address, int prefix_length, String gateway, boolean ipv6, boolean net30) {
+ if(!ipv6)
+ mService.setLocalIP(new CIDRIP(address, prefix_length));
+ else
+ mService.setLocalIPv6(address+ "/" + prefix_length);
+ return true;
+ }
@Override
public boolean tun_builder_new() {
@@ -142,19 +155,19 @@ public class OpenVPNThreadv3 extends ClientAPI_OpenVPNClient implements Runnable
return true;
}
- @Override
- public boolean tun_builder_reroute_gw(String server_address,
- boolean server_address_ipv6, boolean ipv4, boolean ipv6, long flags) {
- // ignore
- return true;
- }
- @Override
- public boolean tun_builder_exclude_route(String address, int prefix_length,
- boolean ipv6) {
- //ignore
- return true;
- }
+ @Override
+ public boolean tun_builder_set_layer(int layer) {
+ return layer == 3;
+ }
+
+
+ @Override
+ public boolean tun_builder_reroute_gw(boolean ipv4, boolean ipv6, long flags) {
+ //ignore
+ return true;
+ }
+
private boolean setConfig(String vpnconfig) {
@@ -228,11 +241,20 @@ public class OpenVPNThreadv3 extends ClientAPI_OpenVPNClient implements Runnable
mService =openVpnService;
}
- @Override
- public void pause(pauseReason pauseReason)
- {
- pause();
- }
+
+ @Override
+ public boolean stopVPN(boolean replaceConnection) {
+ return false;
+ }
+
+ @Override
+ public void networkChange(boolean sameNetwork) {
+
+ }
+
+ @Override
+ public void setPauseCallback(PausedStateCallback callback) {
+ }
@Override
public void log(ClientAPI_LogInfo arg0) {
@@ -262,9 +284,10 @@ public class OpenVPNThreadv3 extends ClientAPI_OpenVPNClient implements Runnable
return true;
}
- public boolean stopVPN() {
- stop();
- return true;
+
+ @Override
+ public void stop() {
+ super.stop();
}
@Override
@@ -272,4 +295,9 @@ public class OpenVPNThreadv3 extends ClientAPI_OpenVPNClient implements Runnable
reconnect(1);
}
+ @Override
+ public void pause(pauseReason reason) {
+ super.pause(reason.toString());
+ }
+
}
diff --git a/app/src/production/java/se/leap/bitmaskclient/ProviderAPI.java b/app/src/production/java/se/leap/bitmaskclient/ProviderAPI.java
index b9b449f0..ff6c0d41 100644
--- a/app/src/production/java/se/leap/bitmaskclient/ProviderAPI.java
+++ b/app/src/production/java/se/leap/bitmaskclient/ProviderAPI.java
@@ -16,26 +16,63 @@
*/
package se.leap.bitmaskclient;
-import android.app.*;
-import android.content.*;
-import android.content.res.*;
-import android.os.*;
-import android.util.*;
-
-import java.io.*;
-import java.math.*;
-import java.net.*;
-import java.security.*;
-import java.security.cert.*;
-import java.security.interfaces.*;
-import java.util.*;
-
-import javax.net.ssl.*;
-
-import org.json.*;
-import org.thoughtcrime.ssl.pinning.util.*;
-
-import se.leap.bitmaskclient.eip.*;
+import android.app.IntentService;
+import android.content.Intent;
+import android.content.SharedPreferences;
+import android.content.res.Resources;
+import android.os.Bundle;
+import android.os.ResultReceiver;
+import android.util.Base64;
+
+import org.json.JSONException;
+import org.json.JSONObject;
+import org.thoughtcrime.ssl.pinning.util.PinningHelper;
+
+import java.io.DataOutputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.UnsupportedEncodingException;
+import java.math.BigInteger;
+import java.net.ConnectException;
+import java.net.CookieHandler;
+import java.net.CookieManager;
+import java.net.CookiePolicy;
+import java.net.MalformedURLException;
+import java.net.SocketTimeoutException;
+import java.net.URL;
+import java.net.URLConnection;
+import java.net.URLEncoder;
+import java.net.UnknownHostException;
+import java.security.KeyManagementException;
+import java.security.KeyStore;
+import java.security.KeyStoreException;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+import java.security.SecureRandom;
+import java.security.cert.CertificateEncodingException;
+import java.security.cert.CertificateException;
+import java.security.cert.X509Certificate;
+import java.security.interfaces.RSAPrivateKey;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Locale;
+import java.util.Map;
+import java.util.NoSuchElementException;
+import java.util.Scanner;
+
+import javax.net.ssl.HostnameVerifier;
+import javax.net.ssl.HttpsURLConnection;
+import javax.net.ssl.KeyManager;
+import javax.net.ssl.SSLContext;
+import javax.net.ssl.SSLHandshakeException;
+import javax.net.ssl.SSLSession;
+import javax.net.ssl.TrustManager;
+import javax.net.ssl.TrustManagerFactory;
+import javax.net.ssl.X509TrustManager;
+
+import se.leap.bitmaskclient.eip.Constants;
+import se.leap.bitmaskclient.eip.EIP;
import se.leap.bitmaskclient.userstatus.SessionDialog;
import se.leap.bitmaskclient.userstatus.User;
import se.leap.bitmaskclient.userstatus.UserStatus;
@@ -952,6 +989,7 @@ public class ProviderAPI extends IntentService {
}
}
+ //FIXME: don't save private keys in shared preferences! use the keystore
private boolean loadCertificate(String cert_string) {
try {
// API returns concatenated cert & key. Split them for OpenVPN options
diff --git a/app/src/test/java/de/blinkt/openvpn/core/TestConfigParser.java b/app/src/test/java/de/blinkt/openvpn/core/TestConfigParser.java
new file mode 100644
index 00000000..560d4fc8
--- /dev/null
+++ b/app/src/test/java/de/blinkt/openvpn/core/TestConfigParser.java
@@ -0,0 +1,37 @@
+/*
+ * Copyright (c) 2012-2016 Arne Schwabe
+ * Distributed under the GNU GPL v2 with additional terms. For full terms see the file doc/LICENSE.txt
+ */
+
+package de.blinkt.openvpn.core;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+import java.io.IOException;
+import java.io.StringReader;
+
+import de.blinkt.openvpn.VpnProfile;
+
+/**
+ * Created by arne on 03.10.16.
+ */
+
+public class TestConfigParser {
+
+ String miniconfig = "client\nremote test.blinkt.de\n";
+
+ @Test
+ public void testHttpProxyPass() throws IOException, ConfigParser.ConfigParseError {
+ String httpproxypass = "<http-proxy-user-pass>\n" +
+ "foo\n" +
+ "bar\n" +
+ "</http-proxy-user-pass>\n";
+
+ ConfigParser cp = new ConfigParser();
+ cp.parseConfig(new StringReader(miniconfig + httpproxypass));
+ VpnProfile p = cp.convertProfile();
+ Assert.assertTrue(p.mCustomConfigOptions.contains(httpproxypass));
+
+ }
+}
diff --git a/app/src/test/java/de/blinkt/openvpn/core/TestIpParser.java b/app/src/test/java/de/blinkt/openvpn/core/TestIpParser.java
new file mode 100644
index 00000000..37f9fdcd
--- /dev/null
+++ b/app/src/test/java/de/blinkt/openvpn/core/TestIpParser.java
@@ -0,0 +1,38 @@
+/*
+ * Copyright (c) 2012-2016 Arne Schwabe
+ * Distributed under the GNU GPL v2 with additional terms. For full terms see the file doc/LICENSE.txt
+ */
+
+package de.blinkt.openvpn.core;
+
+import junit.framework.Assert;
+
+import org.junit.Test;
+
+import java.net.Inet6Address;
+import java.net.InetAddress;
+import java.net.UnknownHostException;
+
+/**
+ * Created by arne on 23.07.16.
+ */
+
+public class TestIpParser {
+
+ @Test
+ public void parseIPv6Zeros() throws UnknownHostException {
+
+ testAddress("2020:0:1234::", 45, "2020:0:1234::/45");
+ testAddress("::", 0, "::/0");
+ testAddress("2a02:2e0:3fe:1001:302::", 128, "2a02:2e0:3fe:1001:302::/128");
+ testAddress("2a02:2e0:3fe:1001:302::70", 128, "2a02:2e0:3fe:1001:302:0:0:70/128");
+ }
+
+ void testAddress(String input, int mask, String output) throws UnknownHostException {
+ Inet6Address ip = (Inet6Address) InetAddress.getByName(input);
+
+ NetworkSpace.ipAddress netIp = new NetworkSpace.ipAddress(ip, mask, true);
+
+ Assert.assertEquals(output, netIp.toString());
+ }
+}
diff --git a/app/src/test/java/de/blinkt/openvpn/core/TestLogFileHandler.java b/app/src/test/java/de/blinkt/openvpn/core/TestLogFileHandler.java
index 476d8151..b32e5efa 100644
--- a/app/src/test/java/de/blinkt/openvpn/core/TestLogFileHandler.java
+++ b/app/src/test/java/de/blinkt/openvpn/core/TestLogFileHandler.java
@@ -1,137 +1,124 @@
+/*
+ * Copyright (c) 2012-2017 Arne Schwabe
+ * Distributed under the GNU GPL v2 with additional terms. For full terms see the file doc/LICENSE.txt
+ */
+
package de.blinkt.openvpn.core;
-//import android.annotation.SuppressLint;
-//
-//import junit.framework.Assert;
-//
-//import org.junit.Before;
-//import org.junit.Ignore;
-//import org.junit.Test;
-//
-//import java.io.ByteArrayInputStream;
-//import java.io.ByteArrayOutputStream;
-//import java.io.IOException;
-//import java.io.InputStream;
-//import java.io.OutputStream;
-//import java.io.UnsupportedEncodingException;
-//import java.util.Arrays;
-
-/**
- * NOTE [@aguestuser|04.11.17]:
- *
- * As the tests below:
- *
- * (1) are testing the logic of library code (the openvpn class `LogFileHandler`)
- * -- thus making them low-value tests
- * (2) currently diverge from the signatures of the class under test (overriding non-existent methods, etc.)
- * -- thus failing to compile and breaking the build
- *
- * I am taking the liberty of commenting them out, and proposing we delete this file altogether
- * upon feedback from the team.
- *
- **/
-
-
-//@Ignore
-//public class TestLogFileHandler {
-//
-// byte[] testUnescaped = new byte[]{0x00, 0x55, -27, 0x00, 0x56, 0x10, -128, 0x55, 0x54};
-// byte[] expectedEscaped = new byte[]{0x55, 0x00, 0x00, 0x00, 0x09, 0x00, 0x56, 0x00, -27, 0x00, 0x56, 0x01, 0x10, -128, 0x56, 0x00, 0x54};
-// private TestingLogFileHandler lfh;
-//
-//
-// @Before
-// public void setup() {
-// lfh = new TestingLogFileHandler();
-// }
-//
-// @Test
-// public void testWriteByteArray() throws IOException {
-//
-// ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
-//
-// lfh.setLogFile(byteArrayOutputStream);
-//
-// lfh.writeEscapedBytes(testUnescaped);
-//
-// byte[] result = byteArrayOutputStream.toByteArray();
-// Assert.assertTrue(Arrays.equals(expectedEscaped, result));
-// }
-//
-// @Test
-// public void readByteArray() throws IOException {
-//
-// ByteArrayInputStream in = new ByteArrayInputStream(expectedEscaped);
-//
-// lfh.readCacheContents(in);
-//
-// Assert.assertTrue(Arrays.equals(testUnescaped, lfh.mRestoredByteArray));
-//
-// }
-//
-// @Test
-// public void testMarschal() throws UnsupportedEncodingException {
-// LogItem li = new LogItem(VpnStatus.LogLevel.DEBUG, 72, "foobar");
-// LogItem li2 = marschalAndBack(li);
-// testEquals(li, li2);
-// Assert.assertEquals(li, li2);
-// }
-//
-// @Test
-// public void testMarschalArgs() throws UnsupportedEncodingException {
-// LogItem li = new LogItem(VpnStatus.LogLevel.DEBUG, 72, 772, "sinnloser Text", 7723, 723.2f, 7.2);
-// LogItem li2 = marschalAndBack(li);
-// testEquals(li, li2);
-// Assert.assertEquals(li, li2);
-// }
-//
-// @Test
-// public void testMarschalString() throws UnsupportedEncodingException {
-// LogItem li = new LogItem(VpnStatus.LogLevel.DEBUG, "Nutzlose Nachricht");
-// LogItem li2 = marschalAndBack(li);
-// testEquals(li, li2);
-// Assert.assertEquals(li, li2);
-// }
-//
-//
-// private void testEquals(LogItem li, LogItem li2) {
-// Assert.assertEquals(li.getLogLevel(), li2.getLogLevel());
-// Assert.assertEquals(li.getLogtime(), li2.getLogtime());
-// Assert.assertEquals(li.getVerbosityLevel(), li2.getVerbosityLevel());
-// Assert.assertEquals(li.toString(), li2.toString());
-//
-// }
-//
-// private LogItem marschalAndBack(LogItem li) throws UnsupportedEncodingException {
-// byte[] bytes = li.getMarschaledBytes();
-//
-// return new LogItem(bytes, bytes.length);
-// }
-//
-//
-// @SuppressLint("HandlerLeak")
-// static class TestingLogFileHandler extends LogFileHandler {
-//
-// public byte[] mRestoredByteArray;
-//
-// public TestingLogFileHandler() {
-// super(null);
-// }
-//
-// public void setLogFile(OutputStream out) {
-// mLogFile = out;
-// }
-//
-// @Override
-// public void readCacheContents(InputStream in) throws IOException {
-// super.readCacheContents(in);
-// }
-//
-// @Override
-// protected void restoreLogItem(byte[] buf, int len) {
-// mRestoredByteArray = Arrays.copyOf(buf, len);
-// }
-// }
-//
-//
-//} \ No newline at end of file
+import android.annotation.SuppressLint;
+
+import junit.framework.Assert;
+
+import org.junit.Before;
+import org.junit.Test;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.io.UnsupportedEncodingException;
+import java.util.Arrays;
+
+public class TestLogFileHandler {
+
+ byte[] testUnescaped = new byte[]{0x00, 0x55, -27, 0x00, 0x56, 0x10, -128, 0x55, 0x54};
+ byte[] expectedEscaped = new byte[]{0x55, 0x00, 0x00, 0x00, 0x09, 0x00, 0x56, 0x00, -27, 0x00, 0x56, 0x01, 0x10, -128, 0x56, 0x00, 0x54};
+ private TestingLogFileHandler lfh;
+
+
+ @Before
+ public void setup() {
+ lfh = new TestingLogFileHandler();
+ }
+
+ @Test
+ public void testWriteByteArray() throws IOException {
+
+ ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
+
+ lfh.setLogFile(byteArrayOutputStream);
+
+ lfh.writeEscapedBytes(testUnescaped);
+
+ byte[] result = byteArrayOutputStream.toByteArray();
+ Assert.assertTrue(Arrays.equals(expectedEscaped, result));
+ }
+
+ @Test
+ public void readByteArray() throws IOException {
+
+ ByteArrayInputStream in = new ByteArrayInputStream(expectedEscaped);
+
+ lfh.readCacheContents(in);
+
+ Assert.assertTrue(Arrays.equals(testUnescaped, lfh.mRestoredByteArray));
+
+ }
+
+ @Test
+ public void testMarschal() throws UnsupportedEncodingException {
+ LogItem li = new LogItem(VpnStatus.LogLevel.DEBUG, 72, "foobar");
+ LogItem li2 = marschalAndBack(li);
+ testEquals(li, li2);
+ Assert.assertEquals(li, li2);
+ }
+
+ @Test
+ public void testMarschalArgs() throws UnsupportedEncodingException {
+ LogItem li = new LogItem(VpnStatus.LogLevel.DEBUG, 72, 772, "sinnloser Text", 7723, 723.2f, 7.2);
+ LogItem li2 = marschalAndBack(li);
+ testEquals(li, li2);
+ Assert.assertEquals(li, li2);
+ }
+
+ @Test
+ public void testMarschalString() throws UnsupportedEncodingException {
+ LogItem li = new LogItem(VpnStatus.LogLevel.DEBUG, "Nutzlose Nachricht");
+ LogItem li2 = marschalAndBack(li);
+ testEquals(li, li2);
+ Assert.assertEquals(li, li2);
+ }
+
+
+ private void testEquals(LogItem li, LogItem li2) {
+ Assert.assertEquals(li.getLogLevel(), li2.getLogLevel());
+ Assert.assertEquals(li.getLogtime(), li2.getLogtime());
+ Assert.assertEquals(li.getVerbosityLevel(), li2.getVerbosityLevel());
+ Assert.assertEquals(li.toString(), li2.toString());
+
+ }
+
+ private LogItem marschalAndBack(LogItem li) throws UnsupportedEncodingException {
+ byte[] bytes = li.getMarschaledBytes();
+
+ return new LogItem(bytes, bytes.length);
+ }
+
+
+ @SuppressLint("HandlerLeak")
+ static class TestingLogFileHandler extends LogFileHandler {
+
+ public byte[] mRestoredByteArray;
+
+ public TestingLogFileHandler() {
+ super(null);
+ }
+
+ public void setLogFile(OutputStream out) {
+ mLogFile = out;
+ }
+
+ @Override
+ public void readCacheContents(InputStream in) throws IOException {
+ super.readCacheContents(in);
+ }
+
+ @Override
+ protected void restoreLogItem(byte[] buf, int len) {
+ mRestoredByteArray = Arrays.copyOf(buf, len);
+ }
+ }
+
+
+} \ No newline at end of file
diff --git a/ics-openvpn b/ics-openvpn
-Subproject 7dbaa266ed2aac4ab82672955282a6bfb43008b
+Subproject 05b9a9ce15dc139a7ff97b3052dec8fd2e3207e