diff options
author | cyberta <cyberta@riseup.net> | 2017-09-29 07:27:19 +0000 |
---|---|---|
committer | cyberta <cyberta@riseup.net> | 2017-09-29 07:27:19 +0000 |
commit | fc913a46cfc85c0bdb0c9d19b2c94c8b53f93b1f (patch) | |
tree | 247408a15cd7caf621206d574af61d0c16d25876 | |
parent | 51afe1eeba990c2cd57bd842a96f7a756df51ce8 (diff) | |
parent | 7322b8e01f852bb4d0243a6ff2fc563422ba274c (diff) |
Merge branch 'feature/updateDependencies' into 'master'
Feature/update dependencies
See merge request leap/bitmask_android!8
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 <a href=\"https://www.paypal.com/cgi-bin/webscr?hosted_button_id=R2M6ZP9AF25LS&amp;cmd=_s-xclick\">PayPal</a> </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…</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"><a href=\"https://www.paypal.com/cgi-bin/webscr?hosted_button_id=R2M6ZP9AF25LS&amp;cmd=_s-xclick\">Spenden mit PayPal</a> </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 <a href=\"https://www.paypal.com/cgi-bin/webscr?hosted_button_id=R2M6ZP9AF25LS&amp;cmd=_s-xclick\">donar con PayPal</a> </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 < 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…</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 <a href=\"https://www.paypal.com/cgi-bin/webscr?hosted_button_id=R2M6ZP9AF25LS&amp;cmd=_s-xclick\">annetada PayPal vahendusel</a> </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 < 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 …</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…</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…</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"><>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.: <a href=\"http://code.google.com/p/ics-openvpn/issues/detail?id=18\">Issue 18</a> dans le \"bug tacker\")</p><p>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.: <a href=\"http://code.google.com/p/ics-openvpn/issues/detail?id=29\">Issue 29</a> dans le \"bug tacker\")</p><p>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\"/</p><p>Important: Si votre ROM a un problème, contactez le vendeur, il se peut que qu\'il vous fournisse un patch.</p></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…</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<stanislasbach@gmail.com></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 <a href=\"https://www.paypal.com/cgi-bin/webscr?hosted_button_id=R2M6ZP9AF25LS&cmd=_s-xclick\">don avec PayPal</ a> "</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 < 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 <img src=\"ic_menu_add\"/ pour ajouter un nouveau VPN"</string> <string name="vpn_import_hint">"Utilisez l\'icône <img src=\"ic_menu_archive\"/> 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. <p> 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 <a href=\"http://developer.android.com/training/efficient-downloads/efficient-network-access.html#RadioStateMachine\">The Radio State Machine | Android Developers</a>) <p> This keepalive setting cannot be changed on the client. Only the system administrator of the OpenVPN can change the setting. <p> 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 <a href=\"http://sites.inka.de/bigred/devel/tcp-tcp.html\">Why TCP Over TCP Is A Bad Idea</a>)</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 <a href=\"http://code.google.com/p/ics-openvpn/issues/detail?id=34\" > page #34 </a></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 <a href=\"https://github.com/schwabe/ics-openvpn/issues/34\">issue #34</a></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 <a href=\"http://code.google.com/p/ics-openvpn/issues/detail?id=185\">Issue 185<a> 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 <a href=\"http://xposed.info/\">Xposed framework</a> et <a href=\"http://repo.xposed.info/module/de.blinkt.vpndialogxposed\">le module de confirmation VPN</a> à 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…</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..<p>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.<p>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é.<p>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<p>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…</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"><p>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 <a href=\"https://github.com/schwabe/ics-openvpn/issues/18\">Issue 18</a> a bug tracker-ben.)</p><p>Régebbi hivatalos SONY Xperia Arc S és Xperia Ray lemezképekbÅ‘l jelentették, hogy a VPNService teljesen hiányzik. (Lásd <a href=\"https://github.com/schwabe/ics-openvpn/issues/29\">Issue 29</a> a bug tracker-ben.)</p><p>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.</p><p>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.</p></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…</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 <msc@digitaltrip.hu></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"><p>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)</p><p>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.</p><p>Kattintson az email csatolmányra/Használja a mappa ikont a VPN listában az importáláshoz</p><p>Ha hibaüzenetet kap hiányzó fájlokról, másolja azokat is az SD kártyára.</p><p>Kattintson a mentés szimbólumra az importált VPN kapcsolat VPN listához adásához</p><p>Csatlakozzon a VPN-hez a VPN nevére kattintva</p><p>Ha hiba- vagy figyelmeztetÅ‘ üzenetek vannak a log-ban, próbálja meg értelmezni és kijavÃtani Å‘ket. </p> </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"><a href=\"https://www.paypal.com/cgi-bin/webscr?hosted_button_id=R2M6ZP9AF25LS&amp;cmd=_s-xclick\">Adakozhat PayPal-al</a> </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 < 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 <img src=\"ic_menu_add\"/> ikont új VPN hozzáadásához</string> <string name="vpn_import_hint">Használd az <img src=\"ic_menu_archive\"/> 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. <p> 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 <a href=\"http://developer.android.com/training/efficient-downloads/efficient-network-access.html#RadioStateMachine\">The Radio State Machine | Android Developers</a>) <p> 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. <p> 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 <a href=\"http://sites.inka.de/bigred/devel/tcp-tcp.html\">Why TCP Over TCP Is A Bad Idea</a>)</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 <a href=\"https://github.com/schwabe/ics-openvpn/issues/34\">issue #34</a></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 <a href=\"https://github.com/schwabe/ics-openvpn/issues/185\">Issue 185<a> 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 <a href=\"http://xposed.info/\">Xposed framework</a> -öt és a <a href=\"http://repo.xposed.info/module/de.blinkt.vpndialogxposed\">VPN Dialog confirm module</a> -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…</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.<p>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.<p>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.<p>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. <p> 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 <a href=\"https://www.paypal.com/cgi-bin/webscr?hosted_button_id=R2M6ZP9AF25LS&amp;cmd=_s-xclick\">dengan PayPal</a> </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 < 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 <a href=\"https://www.paypal.com/cgi-bin/webscr?hosted_button_id=R2M6ZP9AF25LS&amp;cmd=_s-xclick\">donare tramite PayPal</a> </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">é¸æŠž…</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">日本語翻訳 高橋æ£å¸Œï¼ 埼玉 <tools@artin.nu></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"><p>動作確èªæ¸ˆã®è¨å®šãƒ•ã‚¡ã‚¤ãƒ«ã‚’入手ã—ã¾ã™ã€‚(ã‚ãªãŸã®ã‚³ãƒ³ãƒ”ュータã§ãƒ†ã‚¹ãƒˆæ¸ˆã®ã‚‚ã®ã‚„ã€ãƒ—ãƒãƒã‚¤ãƒ€ã‚„会社ãªã©ã®çµ„ç¹”ã‹ã‚‰ãƒ€ã‚¦ãƒ³ãƒãƒ¼ãƒ‰ã—ãŸã‚‚ã®)</p> -<p>ã‚‚ã—ãã‚ŒãŒå˜ä¸€ã®ãƒ•ã‚¡ã‚¤ãƒ«ã§pemã‚„pks12ファイルを伴ã‚ãªã„ãªã‚‰ã€è‡ªåˆ†å®›ã®ãƒ¡ãƒ¼ãƒ«ã«æ·»ä»˜ã—ã¦é€ä»˜ã—ã€ãれを開ã„ã¦ãã ã•ã„。もã—複数ã®ãƒ•ã‚¡ã‚¤ãƒ«ã§æ§‹æˆã•ã‚Œã¦ã„ã‚‹ãªã‚‰SDカードã«æ ¼ç´ã—ã¦ãã ã•ã„。</p> +<p>ã‚‚ã—ãã‚ŒãŒå˜ä¸€ã®ãƒ•ã‚¡ã‚¤ãƒ«ã§PEMã‚„PKCS12ファイルを伴ã‚ãªã„ãªã‚‰ã€è‡ªåˆ†å®›ã®ãƒ¡ãƒ¼ãƒ«ã«æ·»ä»˜ã—ã¦é€ä»˜ã—ã€ãれを開ã„ã¦ãã ã•ã„。もã—複数ã®ãƒ•ã‚¡ã‚¤ãƒ«ã§æ§‹æˆã•ã‚Œã¦ã„ã‚‹ãªã‚‰SDカードã«æ ¼ç´ã—ã¦ãã ã•ã„。</p> <p>メールã®æ·»ä»˜ãƒ•ã‚¡ã‚¤ãƒ«ã‚’é–‹ãã€ã‚ã‚‹ã„ã¯VPNリストã®ãƒ•ã‚©ãƒ«ãƒ€ã‚¢ã‚¤ã‚³ãƒ³ã‚’クリックã—ã¦è¨å®šãƒ•ã‚¡ã‚¤ãƒ«ã‚’インãƒãƒ¼ãƒˆã—ã¾ã™ã€‚</p> <p>ã‚‚ã—ファイルãŒè¶³ã‚Šãªã„ã¨ã„ã†ã‚¨ãƒ©ãƒ¼ãŒè¡¨ç¤ºã•ã‚ŒãŸã‚‰ã€è¶³ã‚Šãªã‹ã£ãŸãƒ•ã‚¡ã‚¤ãƒ«ã‚’SDカード上ã«æ ¼ç´ã—ã¦ãã ã•ã„。</p> <p>インãƒãƒ¼ãƒˆã•ã‚ŒãŸVPNè¨å®šã‚’リストã«è¿½åŠ ã™ã‚‹ã«ã¯ã€ä¿å˜ã‚¢ã‚¤ã‚³ãƒ³ã‚’クリックã—ã¾ã™ã€‚</p> <p>VPNを接続ã™ã‚‹ã«ã¯ã€VPNã®å称をクリックã—ã¾ã™ã€‚</p> -<p>ã‚‚ã—è¦å‘Šã‚„エラーãŒãƒã‚°ã‚¨ãƒ³ãƒˆãƒªã«è¡¨ç¤ºã•ã‚ŒãŸã‚‰ã€ãれらを調ã¹ã¦è§£æ±ºã—ã¦ãã ã•ã„。</p></string> +<p>ã‚‚ã—è¦å‘Šã‚„エラーãŒãƒã‚°ã‚¨ãƒ³ãƒˆãƒªã«è¡¨ç¤ºã•ã‚ŒãŸã‚‰ã€ãれらを調ã¹ã¦è§£æ±ºã—ã¦ãã ã•ã„。</p> +</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より寄付ã„ãŸã ã‘ã¾ã™ã€‚ <a href=\"https://www.paypal.com/cgi-bin/webscr?hosted_button_id=R2M6ZP9AF25LS&amp;cmd=_s-xclick\">PayPalã§å¯„付</a> </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ã‚’è¿½åŠ ã™ã‚‹ã«ã¯ <img src=\"ic_menu_add\"/> ã®ã‚¢ã‚¤ã‚³ãƒ³ã‚’使用ã—ã¾ã™</string> <string name="vpn_import_hint">SDカードã‹ã‚‰ãƒ—ãƒãƒ•ã‚¡ã‚¤ãƒ«(.ovpnã‚„.conf)をインãƒãƒ¼ãƒˆã™ã‚‹ã«ã¯ <img src=\"ic_menu_archive\"/> ã®ã‚¢ã‚¤ã‚³ãƒ³ã‚’使用ã—ã¾ã™ã€‚</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パケットをé€ä¿¡ã—ã‚ã†ã“ã¨ã‚’æ„味ã—ã¾ã™ã€‚ <p>ã“れらã®ãƒ‘ケットã¯å°ã•ã多ãã®å¸¯åŸŸã¯ä½¿ç”¨ã—ã¾ã›ã‚“ãŒã€ãƒ¢ãƒã‚¤ãƒ«å›žç·šæ©Ÿèƒ½ã‚’常ã«ç¨¼å‹•ã•ã›ç¶šã‘電力消費を増大ã•ã›ã¾ã™ã€‚ <p> (å‚考 <a href=\"http://developer.android.com/training/efficient-downloads/efficient-network-access.html#RadioStateMachine\">The Radio State Machine | Android Developers</a>)<p>ã“ã®keepaliveè¨å®šã¯ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆå´ã‹ã‚‰ã¯å¤‰æ›´ã§ãã¾ã›ã‚“。OpenVPNã®ã‚·ã‚¹ãƒ†ãƒ 管ç†è€…ã®ã¿ãŒå¤‰æ›´å¯èƒ½ã§ã™ã€‚ <p> 残念ãªã“ã¨ã«ã€60秒より大ããªé–“éš”ã®UDP keepaliveã¯ã„ãã¤ã‹ã®NATゲートウェイã«ãŠã„ã¦ã¯æŽ¥ç¶šçŠ¶æ…‹ãŒç¶æŒã§ããšã€ãれよりçŸã„時間ã§ã‚¿ã‚¤ãƒ アウトã—ã¾ã™(検証ã§ã¯60秒)。 TCP keepaliveã¨é•·ã„タイムアウト時間ã®ä½¿ç”¨ã¯ã€å‹•ä½œã¯ã—ã¾ã™ãŒTCP over TCPå•é¡Œã‚’引ãèµ·ã“ã—ã¾ã™ã€‚(詳細ã¯<a href=\"http://sites.inka.de/bigred/devel/tcp-tcp.html\">ãªãœTCP over TCPã¯æ‚ªã„アイディアãªã®ã‹</a>ã‚’å‚ç…§)</string> <string name="faq_tethering">Androidã®ãƒ†ã‚¶ãƒªãƒ³ã‚°æ©Ÿèƒ½(WiFi, USB, Bluetooth経由)ã¨VPNService API(ã“ã®ãƒ—ãƒã‚°ãƒ©ãƒ ã‹ã‚‰ä½¿ç”¨ã™ã‚‹æ©Ÿèƒ½)ã¯åŒæ™‚ã«åˆ©ç”¨ã§ãã¾ã›ã‚“。詳細ã«ã¤ã„ã¦ã¯<a href=\"http://code.google.com/p/ics-openvpn/issues/detail?id=34\">issue #34</a>ã‚’å‚ç…§</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">ë‹¹ì‹ ì€ <a href=\"https://www.paypal.com/cgi-bin/webscr?hosted_button_id=R2M6ZP9AF25LS&amp;cmd=_s-xclick\">PayPalì„ í†µí•´ ê¸°ë¶€í• ìˆ˜ 있습니다.</a> </string> - <string name="onbootrestartsummary">OpenVPNì€ ì‹œìŠ¤í…œ 재부팅/ì¢…ë£Œì— í™œì„±í™” ë˜ì—ˆìœ¼ë©´ VPNì„ ë‹¤ì‹œ 연결합니다. ì´ ì˜µì…˜ì„ ì‚¬ìš© 하기 ì „ì— ì—°ê²° ê²½ê³ FAQ를 ì½ì–´ 보시기 ë°”ëžë‹ˆë‹¤.</string> - <string name="onbootrestart">재시작 후 다시 ì—°ê²°</string> + <string name="onbootrestartsummary">ì´ ì‹œìŠ¤í…œ ë¶€íŒ…ì— í™œì„±í™” ëœ ê²½ìš° OpenVPNì„ ì§€ì •ëœ VPNì„ ì—°ê²°í•©ë‹ˆë‹¤. 안드로ì´ë“œ < 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…</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…</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 <a href=\"https://github.com/schwabe/ics-openvpn/issues/34\">issue #34</a></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…</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…</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…</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 <a href=\"https://www.paypal.com/cgi-bin/webscr?hosted_button_id=R2M6ZP9AF25LS&amp;cmd=_s-xclick\">donere med PayPal</a> </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…</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 <a href=\"https://www.paypal.com/cgi-bin/webscr?hosted_button_id=R2M6ZP9AF25LS&amp;cmd=_s-xclick\">wspomóc przez PayPal</a> </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 < 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ć <a href=\"http://xposed.info/\">Xposed framework</a> oraz <a href=\"http://repo.xposed.info/module/de.blinkt.vpndialogxposed\">VPN potwierdzi moduÅ‚</a>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.<p>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.<p>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ść. <p>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. <p> 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 < img src = \"ic_menu_add\" / > Ãcone para adicionar uma nova VPN</string> <string name="vpn_import_hint">Use o < img src = \"ic_menu_archive\" / > Ã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…</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…</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"><p>ObÅ£ineÅ£i o configurare funcÅ£ională (testată pe calculatorul dvs. sau descărcată de la provider/companie)</p><p>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.</p><p>Click pe ataÅŸamentul email/FolosiÅ£i icoana director din lista de vpn-ri pentru a importa fiÅŸierul de configurare.</p><p>Dacă sunt erori despre fiÅŸiere lipsă le puteÅ£i pune pe cardul sd.</p><p>Click pe simbolul de salvare pentru a adăuga VPN-ul importat în lista dvs. de VPN-uri</p><p>ConectaÅ£i VPN-ul dând click pe numele VPN-ului</p><p>Dacă sunt erori/avertismente în jurnal încercaÅ£i să le înÅ£elegeÅ£i ÅŸi să le reparaÅ£i</p> </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 <a href=\"https://www.paypal.com/cgi-bin/webscr?hosted_button_id=R2M6ZP9AF25LS&amp;cmd=_s-xclick\">dona prin PayPal</a> </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 < 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 <img src=\"ic_menu_archive\"/> 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, <a href=\"https://github.com/schwabe/ics-openvpn/issues/185\">Issue 185<a> 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 <a href=\"http://xposed.info/\">Xposed</a> È™i <a href=\"http://repo.xposed.info/module/de.blinkt.vpndialogxposed\">modulul Dialog de Confirmare VPN</a> 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ă…</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.<p>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.<p>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. <p>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 <p> 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…</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">Ожидание ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¾ ÑоÑтоÑнии…</string> <string name="converted_profile">импортируемый профиль</string> <string name="converted_profile_i">импортируемый профиль %d</string> <string name="broken_images">Сломанные прошивки</string> - <string name="broken_images_faq"><p>ИзвеÑтвно, что официальные прошивки HTC имеют Ñтранные проблемы Ñ Ð¼Ð°Ñ€ÑˆÑ€ÑƒÑ‚Ð¸Ð·Ð°Ñ†Ð¸ÐµÐ¹, приводÑщей к тому, что трафик не идёт через туннель (Ñм. <a href=\"http://code.google.com/p/ics-openvpn/issues/detail?id=18\">Issue 18</a> в баг-трекере).</p><p>Также ÑообщалоÑÑŒ, что в Ñтарых официальных прошивках SONY от Xperia Arc S и Xperia Ray полноÑтью отÑутÑтвует ÑÐµÑ€Ð²Ð¸Ñ VPNService (Ñм. <a href=\"http://code.google.com/p/ics-openvpn/issues/detail?id=29\">Issue 29</a> в баг-трекере).</p><p>Ð’ некоторых вÑтроенных прошивках модуль tun может отÑутÑтвовать или иметь неправильные права на файл уÑтройÑтва /dev/tun. Ðекоторые CM9 прошивки могут требовать иÑправлений опции прав в главных наÑтройках.</p><p>И Ñамое главное: ЕÑли у Ð²Ð°Ñ Ð¿Ñ€Ð¾ÑˆÐ¸Ð²ÐºÐ° Ñ ÑƒÐºÐ°Ð·Ð°Ð½Ð½Ñ‹Ð¼Ð¸ проблемами, Ñообщите об Ñтом производителю уÑтройÑтва. Чем больше пользователей Ñообщит о проблеме, тем больше шанÑов, что Ñтот производитель иÑправит прошивку.</p></string> + <string name="broken_images_faq"><p>ИзвеÑтно, что официальные прошивки HTC имеют Ñтранные проблемы Ñ Ð¼Ð°Ñ€ÑˆÑ€ÑƒÑ‚Ð¸Ð·Ð°Ñ†Ð¸ÐµÐ¹, приводÑщей к тому, что трафик не идёт через туннель (Ñм. <a href=\"https://github.com/schwabe/ics-openvpn/issues/18\">Issue 18</a> в баг-трекере).</p><p>Также ÑообщалоÑÑŒ, что в Ñтарых официальных прошивках SONY от Xperia Arc S и Xperia Ray полноÑтью отÑутÑтвует ÑÐµÑ€Ð²Ð¸Ñ VPNService (Ñм. <a href=\"https://github.com/schwabe/ics-openvpn/issues/29\">Issue 29</a> в баг-трекере).</p><p>Ð’ некоторых неофициальных прошивках модуль tun может отÑутÑтвовать, или файл уÑтройÑтва /dev/tun может иметь неправильные права. Ðекоторые прошивки CM9 могут требовать иÑÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð°Ð² на /dev/tun в наÑтройках «Хаки Ð´Ð»Ñ Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾ уÑтройÑтва».</p><p>И Ñамое главное: еÑли у Ð²Ð°Ñ Ð¿Ñ€Ð¾ÑˆÐ¸Ð²ÐºÐ° Ñ ÑƒÐºÐ°Ð·Ð°Ð½Ð½Ñ‹Ð¼Ð¸ проблемами, Ñообщите об Ñтом производителю уÑтройÑтва. Чем больше пользователей Ñообщит о проблеме, тем больше шанÑов, что производитель её иÑправит.</p></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">Создание конфигурации…</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 <horonitel@gmail.com></string> + <string name="translationby">РуÑÑкий перевод от RusFox <horonitel@gmail.com> и многих других</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"><p>ИÑпользуйте готовую конфигурацию (протеÑтированную на вашем компьютере или полученную от вашего провайдера)</p><p>ЕÑли Ñто проÑтой файл без pem/pks12 вы можете отправить его по email на Ñвое уÑтройÑтво. ЕÑли же Ñто неÑколько файлов, вы можете иÑпользовать их Ñо Ñвоей карты памÑти.</p><p>ПроÑто кликните на .conf файл или выберите его Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ меню в программе Ð´Ð»Ñ Ð¸Ð¼Ð¿Ð¾Ñ€Ñ‚Ð° конфигурации</p><p>ЕÑли программа выдаÑÑ‚ ошибку о нехватке некоторых файлов, проÑто помеÑтите Ñти файлы на карту памÑти</p><p>Ðажмите кнопку ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¸Ð¼Ð¿Ð¾Ñ€Ñ‚Ð¸Ñ€ÑƒÐµÐ¼Ð¾Ð¹ конфигурации в программу</p><p>ЗапуÑтите ваш VPN-тоннель нажав на его название в ÑпиÑке</p><p>ЕÑли при запуÑке возникли ошибки попробуйте разобратьÑÑ Ð¸ уÑтранить их.</p> </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"><p>ИÑпользуйте готовую конфигурацию (протеÑтированную на вашем компьютере или полученную от вашего провайдера)</p><p>ЕÑли Ñто проÑтой файл без pem/pkcs12, вы можете отправить его как вложение по Ñлектронной почте на Ñвоё уÑтройÑтво. ЕÑли же файлов неÑколько, вы можете иÑпользовать их Ñо Ñвоей карты памÑти.</p><p>ПроÑто откройте .conf файл или выберите его в диалоге импорта (значок папки в ÑпиÑке профилей)</p><p>ЕÑли программа выдаÑÑ‚ ошибку о нехватке некоторых файлов, проÑто помеÑтите Ñти файлы на карту памÑти.</p><p>Ðажмите кнопку ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¸Ð¼Ð¿Ð¾Ñ€Ñ‚Ð¸Ñ€ÑƒÐµÐ¼Ð¾Ð¹ конфигурации в программу</p><p>ЗапуÑтите ваш VPN-тоннель, нажав на его название в ÑпиÑке</p><p>ЕÑли при запуÑке возникли ошибки, попробуйте разобратьÑÑ Ð¸ уÑтранить их.</p> </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">Ð’Ñ‹ можете <a href=\"https://www.paypal.com/cgi-bin/webscr?hosted_button_id=R2M6ZP9AF25LS&amp;cmd=_s-xclick\">пожертвовать Ñ PayPal</a> </string> - <string name="onbootrestartsummary">OpenVPN будет переподключатьÑÑ, еÑли он был активен в момент выключениÑ/перезагрузки. ПожалуйÑта, прочтите FAQ перед тем, как иÑпользовать Ñту наÑтройку.</string> - <string name="onbootrestart">Переподключение поÑле перезагрузки</string> + <string name="onbootrestartsummary">OpenVPN будет подключатьÑÑ Ðº указанному VPN, еÑли он был активен при загрузке ÑиÑтемы. ПожалуйÑта, прочитайте FAQ о предупреждении при подключении перед тем, как иÑпользовать Ñту опцию на 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="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">ИÑпользуйте <img src=\"ic_menu_add\"/> иконку Ð´Ð»Ñ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð½Ð¾Ð²Ð¾Ð³Ð¾ VPN</string> - <string name="vpn_import_hint">ИÑпользуйте <img src=\"ic_menu_archive\"/> кнопку Ð´Ð»Ñ Ð¸Ð¼Ð¿Ð¾Ñ€Ñ‚Ð° ÑущеÑтвующих профилей (.ovpn or .conf) Ñ Ð²Ð°ÑˆÐµÐ¹ карты памÑти.</string> - <string name="faq_hint">Ðе забудьте заглÑнуть в FAQ. Также имеетÑÑ ÐºÑ€Ð°Ñ‚ÐºÐ¾Ðµ руководÑтво.</string> + <string name="add_new_vpn_hint">ИÑпользуйте значок <img src=\"ic_menu_add\"/> Ð´Ð»Ñ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð½Ð¾Ð²Ð¾Ð³Ð¾ VPN</string> + <string name="vpn_import_hint">ИÑпользуйте кнопку <img src=\"ic_menu_archive\"/> Ð´Ð»Ñ Ð¸Ð¼Ð¿Ð¾Ñ€Ñ‚Ð° ÑущеÑтвующих профилей (.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 Ñекунд. <p> Хоть Ñти пакеты и маленькие и не раÑходуют много трафика, они заÑтавлÑÑŽÑ‚ радиомодуль потреблÑÑ‚ÑŒ много Ñнергии. (Ñм. <a href=\"http://developer.android.com/training/efficient-downloads/efficient-network-access.html#RadioStateMachine\">The Radio State Machine | Android Developers</a>) <p> ÐаÑтройки keepalive не могут быть изменены на клиенте, Ñто может Ñделать только ÑиÑтемный админиÑтратор OpenVPN.lt;pgt; К Ñожалению, иÑпользование keepalive более, чем 60 Ñекунд Ñ UDP, может вноÑить проблемы Ñ Ð½ÐµÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ð¼Ð¸ типами NAT, которые удалÑÑŽÑ‚ информацию о Ñоединении через короткое Ð²Ñ€ÐµÐ¼Ñ (в моем Ñлучае, Ñто было 60 Ñекунд). ИÑпользование TCP Ñ Ð±Ð¾Ð»ÑŒÑˆÐ¸Ð¼ keepalive-таймаутом будет работать, но производительноÑÑ‚ÑŒ Ñ‚ÑƒÐ½Ð½ÐµÐ»Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ TCP через TCP в ÑетÑÑ… Ñ Ð²Ñ‹Ñокой вероÑтноÑтью потери пакета крайне Ð½Ð¸Ð·ÐºÐ°Ñ (Ñм. <a href=\"http://sites.inka.de/bigred/devel/tcp-tcp.html\">Why TCP Over TCP Is A Bad Idea</a>).</string> - <string name="faq_tethering">Тетеринг Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Android (через WiFi, USB или Bluetooth) и VPNService API (иÑпользуемое Ñтой программой) не работают вмеÑте. Подробней в <a href=\"http://code.google.com/p/ics-openvpn/issues/detail?id=34\">проблеме â„–34</a></string> + <string name="baterry_consumption">Ð’ моих теÑтах главным иÑточником выÑокого Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ð»ÐµÐ½Ð¸Ñ ÑлектроÑнергии батареи были пакеты keepalive. БольшинÑтво OpenVPN-Ñерверов Ñодержат директиву вроде «keepalive 10 60», ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð·Ð°ÑтавлÑет клиент и Ñервер обмениватьÑÑ keepalive-пакетами каждые 10 Ñекунд. <p> Хоть Ñти пакеты и маленькие, и не раÑходуют много трафика, они заÑтавлÑÑŽÑ‚ радиомодуль вÑÑ‘ Ð²Ñ€ÐµÐ¼Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ð°Ñ‚ÑŒ, что повышает раÑход Ñнергии. (Ñм. <a href=\"http://developer.android.com/training/efficient-downloads/efficient-network-access.html#RadioStateMachine\">The Radio State Machine | Android Developers</a>) <p> ÐаÑтройки keepalive не могут быть изменены на клиенте, Ñто может Ñделать только ÑиÑтемный админиÑтратор OpenVPN. <p> К Ñожалению, иÑпользование keepalive более, чем 60 Ñекунд Ñ UDP, может привеÑти к тому, что некоторые шлюзы NAT будут обрывать Ñоединение из-за отÑутÑÑ‚Ð²Ð¸Ñ Ð°ÐºÑ‚Ð¸Ð²Ð½Ð¾Ñти. ИÑпользование TCP Ñ Ð±Ð¾Ð»ÑŒÑˆÐ¸Ð¼ keepalive-таймаутом будет работать, но производительноÑÑ‚ÑŒ Ñ‚ÑƒÐ½Ð½ÐµÐ»Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ TCP через TCP в ÑетÑÑ… Ñ Ð²Ñ‹Ñокими потерÑми пакетов крайне Ð½Ð¸Ð·ÐºÐ°Ñ (Ñм. <a href=\"http://sites.inka.de/bigred/devel/tcp-tcp.html\">Why TCP Over TCP Is A Bad Idea</a>)</string> + <string name="faq_tethering">Ð¤ÑƒÐ½ÐºÑ†Ð¸Ñ Ñ‚ÐµÑ‚ÐµÑ€Ð¸Ð½Ð³Ð° Android (через WiFi, USB или Bluetooth) и VPNService API (иÑпользуемое Ñтой программой) не работают вмеÑте. Подробней в <a href=\"https://github.com/schwabe/ics-openvpn/issues/34\">проблеме â„–34</a></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 и более поздних верÑиÑÑ…. Смотрите также < a href = \"http://code.google.com/p/ics-openvpn/issues/detail?id=185\" > Проблему 185 < > Ð´Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ñ‹Ñ… Ñведений»</string> + <string name="faq_vpndialog43">"ÐÐ°Ñ‡Ð¸Ð½Ð°Ñ Ñ Android 4.3, диалог Ð¿Ð¾Ð´Ñ‚Ð²ÐµÑ€Ð¶Ð´ÐµÐ½Ð¸Ñ VPN-ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ð·Ð°Ñ‰Ð¸Ñ‰Ñ‘Ð½ от приложений, «накладывающихÑÑ Ð¿Ð¾Ð²ÐµÑ€Ñ… Ñкрана». Ðто приводит к тому, что диалоговое окно Ð¿Ð¾Ð´Ñ‚Ð²ÐµÑ€Ð¶Ð´ÐµÐ½Ð¸Ñ Ð½Ðµ реагирует на ÑенÑорные нажатиÑ. ЕÑли вам попадётÑÑ Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ðµ, иÑпользующее Ð½Ð°Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¸ вызывающее такое поведение, ÑвÑжитеÑÑŒ Ñ Ð°Ð²Ñ‚Ð¾Ñ€Ð¾Ð¼ Ñтого приложениÑ. Ðта проблема затрагивает вÑе VPN Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð½Ð° Android 4.3 и более поздних верÑиÑÑ…. Смотрите также <a href=\"https://github.com/schwabe/ics-openvpn/issues/185\">Issue 185<a> Ð´Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ñ‹Ñ… Ñведений"</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">ЕÑли на Вашем уÑтройÑтве уÑтановлены Рут права, Ð’Ñ‹ можете уÑтановить <a href=\"http://xposed.info/\">Xposed framework</a> и <a href=\"http://repo.xposed.info/module/de.blinkt.vpndialogxposed\">модуль автоматичеÑкого Ð¿Ð¾Ð´Ñ‚Ð²ÐµÑ€Ð¶Ð´ÐµÐ½Ð¸Ñ Ð´Ð¸Ð°Ð»Ð¾Ð³Ð° Ð¿Ð¾Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ VPN</a> на Ñвой Ñтрах и риÑк</string> + <string name="faq_system_dialog_xposed">ЕÑли на вашем уÑтройÑтве еÑÑ‚ÑŒ root, можете уÑтановить <a href=\"http://xposed.info/\">Xposed framework</a> и <a href=\"http://repo.xposed.info/module/de.blinkt.vpndialogxposed\">модуль автоматичеÑкого Ð¿Ð¾Ð´Ñ‚Ð²ÐµÑ€Ð¶Ð´ÐµÐ½Ð¸Ñ Ð´Ð¸Ð°Ð»Ð¾Ð³Ð° Ð¿Ð¾Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ VPN</a> на Ñвой Ñтрах и риÑк</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">ЗагружаетÑÑ…</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.<p>Клиенты можно разделить на две группы: OpenVPN for Android и OpenVPN Connect иÑпользуют официальный VPNService API (Android 4.0+) и не трубуют root-доÑтуп, и OpenVPN Settings, который требует root.<p>OpenVPN for Android - клиент Ñ Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ñ‹Ð¼ иÑходным кодом, который разработал Arne Schwabe. Он предназначен Ð´Ð»Ñ Ð±Ð¾Ð»ÐµÐµ опытных пользователей и предоÑтавлÑет много наÑтроек и возможноÑÑ‚ÑŒ иÑпорта профилей из файлов и наÑтраивать/изменÑÑ‚ÑŒ профили внутри приложениÑ. Ðтот клиент оÑнован на общеÑтвенной верÑии OpenVPN. Ðа иÑходном коде OpenVPN 2.x. Ðтот клиент может быть предÑтавлен как полуофициальный клиент ÑообщеÑтва. <p>OpenVPN Connect - клиент Ñ Ð·Ð°ÐºÑ€Ñ‹Ñ‚Ñ‹Ð¼ иÑходным кодом, который разработан OpenVPN Technologies, Inc. Он призван Ð´Ð»Ñ Ð¾Ð±Ñ‹Ñ‡Ð½Ð¾Ð³Ð¾ иÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¸ предназначен Ð´Ð»Ñ Ñредних пользователей, и позволÑет импортировать профили из OpenVPN. Ðтот клиент оÑнован на OpenVPN C++ и напиÑал Ñ Ð¸Ñпользванием протокола OpenVPN (Ðто требовалоÑÑŒ Ð´Ð»Ñ Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ñ OpenVPN Technologies, Inc опубликовать приложение OpenVPN на iOS). Ðтот клиент - официальный клиент OpenVPN technologies <p> 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.<p>Клиенты можно разделить на две группы: OpenVPN Ð´Ð»Ñ Android и OpenVPN Connect иÑпользуют официальный VPNService API (Android 4.0+) и не требуют root-доÑтуп, и OpenVPN Settings, который требует root.<p>OpenVPN Ð´Ð»Ñ Android — клиент Ñ Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ñ‹Ð¼ иÑходным кодом, который разработал Arne Schwabe. Он предназначен Ð´Ð»Ñ Ð±Ð¾Ð»ÐµÐµ опытных пользователей и предоÑтавлÑет много наÑтроек, возможноÑÑ‚ÑŒ импорта профилей из файлов и наÑтраивать/изменÑÑ‚ÑŒ профили внутри приложениÑ. Ðтот клиент оÑнован на общеÑтвенной верÑии OpenVPN. Рименно на иÑходном коде OpenVPN 2.x. Ðтот клиент можно предÑтавить как полуофициальный клиент ÑообщеÑтва. <p>OpenVPN Connect — клиент Ñ Ð·Ð°ÐºÑ€Ñ‹Ñ‚Ñ‹Ð¼ иÑходным кодом, который разрабатываетÑÑ OpenVPN Technologies, Inc. Он призван Ð´Ð»Ñ Ð¾Ð±Ñ‹Ñ‡Ð½Ð¾Ð³Ð¾ иÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¸ предназначен Ð´Ð»Ñ Ð¿Ñ€Ð¾ÑÑ‚Ñ‹Ñ… пользователей, и позволÑет импортировать профили из OpenVPN. Ðтот клиент оÑнован на OpenVPN C++, другой реализации протокола OpenVPN (Ðто потребовалоÑÑŒ OpenVPN Technologies, Inc, чтобы опубликовать приложение OpenVPN на iOS). Ðтот клиент — официальный клиент OpenVPN technologies <p> 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 …</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 <a href=\"https://www.paypal.com/cgi-bin/webscr?hosted_button_id=R2M6ZP9AF25LS&amp;cmd=_s-xclick\">PayPalom</a> </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 < 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…</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 <a href=\"http://code.google.com/p/ics-openvpn/issues/detail?id=18\">Ärende 18</a> i äredehanteringen.)</p><p>Äldre officiella SONY ROM för Xperia Arc S och Xperia Ray har rapporterats sakna VPNService helt. (Se även <a href=\"http://code.google.com/p/ics-openvpn/issues/detail?id=29\">Ärende 29</a> i ärendehanteringen.)</p><p>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.</p><p>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.</p></string> + <string name="broken_images_faq"><p>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 <a href=\"http://code.google.com/p/ics-openvpn/issues/detail?id=18\">Ärende 18</a> i äredehanteringen.)</p><p>Äldre officiella SONY ROM för Xperia Arc S och Xperia Ray har rapporterats sakna VPNService helt. (Se även <a href=\"http://code.google.com/p/ics-openvpn/issues/detail?id=29\">Ärende 29</a> i ärendehanteringen.)</p><p>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.</p><p>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.</p></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 <a href=\"https://www.paypal.com/cgi-bin/webscr?hosted_button_id=R2M6ZP9AF25LS&amp;cmd=_s-xclick\">donera via PayPal</a> </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 < 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 <img src=\"ic_menu_add\"/> ikonen för att lägga till en ny VPN</string> <string name="vpn_import_hint">Använd <img src=\"ic_menu_archive\"/> 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. <p> Ä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 <a href=\"http://developer.android.com/training/efficient-downloads/efficient-network-access.html#RadioStateMachine\">The Radio State Machine | Android Developers</a>) <p> Denna hÃ¥llvidliv-inställning kan inte ändras i klienten. Endast systemadministratören för OpenVPN kan ändra inställningen. <p> 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 <a href=\"http://sites.inka.de/bigred/devel/tcp-tcp.html\">varför TCP över TCP är en dÃ¥lig idé</a>)</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 <a href=\"http://code.google.com/p/ics-openvpn/issues/detail?id=34\">ärende #34</a></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Ã¥ <a href=\"https://github.com/schwabe/ics-openvpn/issues/185\">Ärende 185<a> 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 <a href=\"http://xposed.info/\">Xposed-ramverket</a> och <a href=\"http://repo.xposed.info/module/de.blinkt.vpndialogxposed\">VPN-bekräftelsemodulen</a> 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.<p>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.<p>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. <p>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 <p> 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…</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"><a href=\"https://www.paypal.com/cgi-bin/webscr?hosted_button_id=R2M6ZP9AF25LS&amp;cmd=_s-xclick\">PayPal ile bağış</a> 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 < 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">Ви можете <a href=\"https://www.paypal.com/cgi-bin/webscr?hosted_button_id=R2M6ZP9AF25LS&amp;cmd=_s-xclick\">пожертвувати через PayPal</a> </string> - <string name="onbootrestartsummary">OpenVPN буде перепідключатиÑÑ, Ñкщо він був активний в момент вимиканнÑ/перезавантаженнÑ. Будь лаÑка, прочитайте ЧаП перед тим, Ñк викориÑтовувати цей параметр.</string> - <string name="onbootrestart">Перепідключати при перезавантаженні</string> + <string name="onbootrestartsummary">OpenVPN підключатиметьÑÑ Ð´Ð¾ вказаного VPN, Ñкщо він був активний при завантаженні ÑиÑтеми. Будь лаÑка, прочитайте FAQ про Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¸ підключенні перед викориÑтаннÑм цієї опції на 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> @@ -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…</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ể <a href=\"https://www.paypal.com/cgi-bin/webscr?hosted_button_id=R2M6ZP9AF25LS&amp;cmd=_s-xclick\">ủng há»™ cho ứng dụng vá»›i PayPal</a> </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 < 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">请选择…</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"><p>HTC官方固件å¯èƒ½å˜åœ¨å¼‚常的路由问题并会导致数æ®æµä¸é€šè¿‡éš§é“ä¼ è¾“ï¼ˆè¯¦è§BUG追踪<a href=\"http://code.google.com/p/ics-openvpn/issues/detail?id=18\">Issue 18</a>)。</p><p>æ®æŠ¥å¯¼ï¼Œæ—§ç‰ˆçš„SONY Xperia Arc Så’ŒXperia Ray的官方固件完全ä¸åŒ…å«VPNService(详è§BUG追踪<a href=\"http://code.google.com/p/ics-openvpn/issues/detail?id=29\">Issue 29</a>)。</p><p>在自制固件ä¸ï¼Œtun 模å—å¯èƒ½ä¼šæœ‰ç¼ºå¤±ï¼Œæˆ–是未被设置æ£ç¡®çš„æƒé™ã€‚部分CM9固件需è¦å¯ç”¨â€œç‰¹å®šè®¾å¤‡HACKSâ€é¡¹ä¸‹çš„“修å¤/dev/tunçš„æƒé™â€çš„选项。</p><p>最é‡è¦çš„是:若您的设备的固件å˜åœ¨é—®é¢˜ï¼Œè¯·ç›´æŽ¥å‘您的设备供应商å馈。越多人å‘供应商åæ˜ é—®é¢˜ï¼Œé—®é¢˜è¶Šæœ‰å¯èƒ½å¾—到解决。</p></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 <trans@cicku.me></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"><p>获å–ä½ çš„ VPN é…置文件,å¯ä»¥æ˜¯åœ¨ç”µè„‘上æ£åœ¨ä½¿ç”¨çš„ OpenVPN 客户端é…置文件,也å¯ä»¥å‘ä½ çš„ VPN æœåŠ¡å•†ç´¢å–é…置文件。</p><p>如果é…置文件åªæœ‰ä¸€ä¸ªï¼Œå¯ä»¥æŠŠé…置文件å‘åˆ°ä½ è‡ªå·±çš„é‚®ç®±ç„¶åŽä»Žæ‰‹æœºä¸Šä¸‹è½½ã€‚如果é…置文件有很多个,å¯ä»¥å°†å®ƒä»¬å¤åˆ¶åˆ°å˜å‚¨å¡å†…。</p><p>从邮件ä¸ä¸‹è½½é™„件,或者在 VPN 列表ä¸ç‚¹å‡»æ–‡ä»¶å¤¹å›¾æ ‡æ¥å¯¼å…¥é…置文件。</p><p>如果æ示找ä¸åˆ°æ–‡ä»¶ï¼Œé‚£å°±å°†ç¼ºå¤±çš„文件å¤åˆ¶åˆ°å˜å‚¨å¡å†…。</p><p>点击ä¿å˜ï¼Œå°†é…置文件ä¿å˜åˆ°ä½ çš„ VPN 列表ä¸ã€‚</p><p>在 VPN 列表ä¸ç‚¹å‡» VPN 的连接的åå—,就å¯ä»¥è¿žæŽ¥åˆ° VPN 了。</p><p>如果å‘生错误,å¯ä»¥çœ‹æ—¥å¿—窗å£ä¸çš„日志,然åŽè®¾æ³•è§£å†³é—®é¢˜ã€‚</p> </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">您å¯ä»¥ <a href=\"https://www.paypal.com/cgi-bin/webscr?hosted_button_id=R2M6ZP9AF25LS&amp;cmd=_s-xclick\"> 通过 PayPal æ助</a></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">é¸æ“‡…</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"><內嵌於è¨å®šæª”></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">ç‰å¾…狀態訊毅</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"><p>Official HTC圖åƒï¼Œå·²çŸ¥æœ‰ä¸€ç¨®å¥‡æ€ªçš„路由å•é¡Œé€ æˆäº¤é€šä¸æµéŽéš§é“(也<a href=\"https://github.com/schwabe/ics-openvpn/issues/18\">Issue 18</a>看到bug跟踪系統。)的的Xperia弧S和的Xperiaé›·</p><p>Older官方SONY圖åƒå·²è¢«å ±å°Žå®Œå…¨ç¼ºå°‘VPNService從圖åƒã€‚ (也<a href=\"https://github.com/schwabe/ics-openvpn/issues/29\">Issue 29</a>看到bug跟踪系統。)</p><p>On自定義生æˆçš„TUN模塊å¯èƒ½æœƒä¸Ÿå¤±ç…§ç‰‡æˆ–為/ dev / TUN的權利å¯èƒ½æ˜¯éŒ¯èª¤çš„。一些CM9圖åƒéœ€è¦åœ¨â€œè¨å‚™ç‰¹å®šçš„黑客â€enabled.</p><p>Mosté‡è¦çš„是“修復所有權â€é¸é …:如果您的è¨å‚™æœ‰ä¸€å€‹ç ´ç¢Žçš„æ©Ÿå™¨äººå½¢è±¡ï¼Œå ±å‘Šçµ¦ä½ çš„ä¾›æ‡‰å•†ã€‚è¶Šå¤šçš„äººèª°çµ¦ä¾›æ‡‰å•†å ±å‘Šå•é¡Œæ™‚,他們越有å¯èƒ½è§£æ±ºit.</p></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"><p>Get工作的é…置(從供應商/機構檢測您的電腦或下載)</p><p>If它沒有多餘的PEM / pks12æ–‡ä»¶ï¼Œä½ å¯ä»¥è‡ªå·±é€šéŽé›»å郵件發é€æ–‡ä»¶å’Œæ‰“é–‹é™„ä»¶çš„å–®å€‹æ–‡ä»¶ã€‚å¦‚æžœæ‚¨æœ‰å¤šå€‹æ–‡ä»¶ï¼ŒæŠŠå®ƒå€‘æ”¾åœ¨ä½ çš„SD card.</p><p>Click上的電å郵件附件/使用的文件夾圖標,在VPN列表導入é…ç½®file</p><p>Ifå¤§ç´„æœ‰ä¸Ÿå¤±çš„æ–‡ä»¶å°‡ä¸Ÿå¤±çš„æ–‡ä»¶åœ¨ä½ çš„SD card.</p><p>Click上ä¿å˜éŒ¯èª¤æ¨™èªŒå°‡å°Žå…¥çš„VPNæ·»åŠ åˆ°æ‚¨çš„VPN list</p><p>Connectçš„VPN通éŽé»žæ“ŠVPN</p><p>Ifçš„åå—有錯誤或è¦å‘Šæ—¥èªŒè©¦è‘—去了解è¦å‘Š/錯誤,並嘗試修復them</p> </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">ä½ å¯ä»¥é€éŽ <a href=\"https://www.paypal.com/cgi-bin/webscr?hosted_button_id=R2M6ZP9AF25LS&amp;cmd=_s-xclick\">PayPal</a> æä¾›æ助</string> - <string name="onbootrestartsummary">如果在é‡æ–°é–‹æ©Ÿæˆ–關機å‰æ£é€£ç·šVPN,開機時自動é‡æ–°é€£ç·šã€‚在使用這個é¸é …之å‰è«‹å…ˆé–±è®€é€£ç·šè¦å‘ŠFAQ。</string> - <string name="onbootrestart">開機時é‡æ–°é€£ç·š</string> + <string name="onbootrestartsummary">OpenVPN 將會在系統啟動時連線到特定的 VPN。在 Android < 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">使用<img src=\"ic_menu_add\"/>åœ–æ¨™æ·»åŠ æ–°çš„VPN</string> <string name="vpn_import_hint">使用<img src=\"ic_menu_archive\"/>圖標,導入從您的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 (æ¤ç¨‹å¼ä½¿ç”¨) ä¸ä¸€èµ·ä½œç”¨ã€‚更多細節請看 <a href=\"https://github.com/schwabe/ics-openvpn/issues/34\">issue #34</a></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應用。å¦è¦‹<a href=\"https://github.com/schwabe/ics-openvpn/issues/185\">Issue 185<a>了解更多詳細信æ¯â€œ</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 <a href=\"https://github.com/schwabe/ics-openvpn/issues/185\">Issue 185<a> 了解更多詳細資訊。</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è¨å‚™å¯ä»¥å®‰è£<a href=\"http://xposed.info/\">Xposed framework</a>和的<a href=\"http://repo.xposed.info/module/de.blinkt.vpndialogxposed\">VPNå°è©±æ¡†ç¢ºèªmodule</a>需è¦æ‚¨è‡ªæ“”風險“</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 權é™ï¼Œä½ å¯ä»¥è‡ªè¡Œæ‰¿æ“”é¢¨éšªå®‰è£ <a href=\"http://xposed.info/\">Xposed framework</a> å’Œ <a href=\"http://repo.xposed.info/module/de.blinkt.vpndialogxposed\">VPN Dialog confirm module</a></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 <a href=\"https://www.paypal.com/cgi-bin/webscr?hosted_button_id=R2M6ZP9AF25LS&amp;cmd=_s-xclick\">donate with PayPal</a> </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 < 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 <a href=\"http://xposed.info/\">Xposed framework</a> and a the <a href=\"http://repo.xposed.info/module/de.blinkt.vpndialogxposed\">VPN Dialog confirm module</a> at your own risk"</string> + <string name="faq_system_dialog_xposed">If you have rooted your Android device you can install the <a href=\"http://xposed.info/\">Xposed framework</a> and the <a href=\"http://repo.xposed.info/module/de.blinkt.vpndialogxposed\">VPN Dialog confirm module</a> 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"><p>Starting with OpenSSL version 1.1, OpenSSL rejects weak signatures in certificates like MD5.</p><p><b>MD5 signatures are insecure and should not be used anymore.</b> MD5 collisions can be created in <a href="https://natmchugh.blogspot.de/2015/02/create-your-own-md5-collisions.html">few hours at a minimal cost.</a>. You should update the VPN certificates as soon as possible.</p><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 <a href="https://github.com/OpenVPN/easy-rsa/releases">latest version</a>) or change md5 to sha256 and regenerate your certificates.</p><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</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 <info@leap.se></string> <string name="opevpn_copyright" translatable="false">Copyright © 2002–2010 OpenVPN Technologies, Inc. <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 |