Compare commits
49 Commits
android-0.
...
android-0.
Author | SHA1 | Date | |
---|---|---|---|
f3d1e89002 | |||
f39c9a0fc4 | |||
3186caa6bb | |||
fc1259d8a8 | |||
848d07331e | |||
9794d26d0c | |||
76cd9c85ef | |||
d4c7c480fb | |||
00aa80d104 | |||
20086685aa | |||
86a8effd82 | |||
55d6e6d24e | |||
3b05046df3 | |||
b8587cd0ab | |||
61dd550040 | |||
478ff63889 | |||
e747619b85 | |||
f043bb3d72 | |||
98d8106f56 | |||
74eb0ce4f6 | |||
d79813d6d1 | |||
8f60c6ce9e | |||
7e0d017858 | |||
8470435ee2 | |||
5023d69222 | |||
34c7464f5b | |||
2da6fe9c62 | |||
1927c9e5a3 | |||
1ace085d13 | |||
95e6c1f7a6 | |||
03bdd575a7 | |||
98c5313d75 | |||
c047bdf085 | |||
e113ef0002 | |||
3e9b47307d | |||
2d864ad8b1 | |||
5b7f9bd452 | |||
3c89749f94 | |||
edbd5fd7ea | |||
faf8bf74af | |||
851e774e7a | |||
dcea801116 | |||
cb5235e6da | |||
5c7eaf2484 | |||
764cfc91ec | |||
177a2c6dc1 | |||
4dccd1dbae | |||
50141eb24b | |||
4dab632bc8 |
@ -4,7 +4,7 @@ lang_map = he: iw, id: in, pt_BR: pt-rBR, ru_RU: ru, sv_SE: sv, tr_TR: tr, uk_UA
|
||||
|
||||
[I2P.android]
|
||||
file_filter = app/src/main/res/values-<lang>/strings.xml
|
||||
minimum_perc = 30
|
||||
minimum_perc = 22
|
||||
source_file = app/src/main/res/values/strings.xml
|
||||
source_lang = en
|
||||
type = ANDROID
|
||||
|
38
CHANGELOG
38
CHANGELOG
@ -1,3 +1,41 @@
|
||||
0.9.41 / 2019-07-03
|
||||
* New 64 bit libjbigi (ticket #2503)
|
||||
* Update 32 bit jbigi to GMP 6.1.2
|
||||
* Fix for client tunnels not starting after reseed
|
||||
* UPnP Fixes (ticket #2499)
|
||||
* WebView crash fixes (ticket #2390)
|
||||
* i2ptunnel crash fix (ticket #2552)
|
||||
* i2ptunnel ANR fix (ticket #2491)
|
||||
* Browser help pages improvements (tickets #2521, 2523)
|
||||
* Code cleanups and fixes
|
||||
* Update visibility of floating menu items
|
||||
* Put our router info at top of list
|
||||
* Table layout cleanups
|
||||
* Fixes for threads remaining after router stop
|
||||
* Remove BOB
|
||||
* Remove welterde IRC tunnel
|
||||
* Various lint fixes
|
||||
* New translations: Add cs, da, el
|
||||
* Add missing translations to menu: ar, fi, gl, hu, zh_TW
|
||||
|
||||
0.9.40 / 2019-05-10
|
||||
* Open local I2CP socket for 3rd party apps
|
||||
* Fix News URLs
|
||||
* Numerous bug fixes (see trac)
|
||||
|
||||
0.9.39 / 2019-03-23
|
||||
* Set App ID
|
||||
|
||||
0.9.38 / 2019-01-27
|
||||
|
||||
0.9.37 / 2018-10-10
|
||||
|
||||
0.9.36 / 2018-08-27
|
||||
|
||||
0.9.35 / 2018-07-03
|
||||
|
||||
0.9.34 / 2018-04-25
|
||||
|
||||
0.9.33 / 2018-02-18
|
||||
* Translation updates
|
||||
|
||||
|
11
DEVELOPMENT-README.md
Normal file
11
DEVELOPMENT-README.md
Normal file
@ -0,0 +1,11 @@
|
||||
# Development Readme
|
||||
|
||||
## How to build development builds of the router core for android?
|
||||
|
||||
Check the RELEASE-PROCESS.md file for general information about how to build and to bump the version.
|
||||
|
||||
In your i2p.i2p codebase checkout, execute `./installer/resources/maven-dev-release.sh` with your build number as first argument.
|
||||
The script locates itself and uses the same codebase as it's in, to produce the maven builds which will be locally installed.
|
||||
|
||||
Next, add the build number to the gradle.properties and build the android build as usual.
|
||||
|
@ -7,8 +7,8 @@
|
||||
- Java SDK (preferably Oracle/Sun or OpenJDK) 1.6.0 or higher
|
||||
- Apache Ant 1.8.0 or higher
|
||||
- I2P source
|
||||
- Android SDK for API 21
|
||||
- Android Build Tools 21.1.2
|
||||
- Android SDK for API 28 or higher
|
||||
- Android Build Tools 28.0.0 or higher
|
||||
- Android Support Repository
|
||||
- Gradle 2.2.1
|
||||
|
||||
|
@ -19,17 +19,19 @@
|
||||
|
||||
1. Edit `routerjars/local.properties` to use the clean i2p.i2p copy.
|
||||
2. Pull the latest translations with `tx pull -a` and commit them. (If you don't have the `tx` command, do `pip install transifex-client` )
|
||||
2a. If there are any new translations, `mtn add` them, and add them to `app/src/main/res/values/arrays.xml` (two places, alphabetical order please)
|
||||
3. Ensure that `signing.properties` contains the details of the release key.
|
||||
4. Edit `gradle.properties` to bump the I2P version.
|
||||
5. Edit `app/build.gradle` to bump the Android version number.
|
||||
6. If the helper has changed since the last release, edit
|
||||
6. Edit `CHANGELOG` to add the release and date.
|
||||
7. If the helper has changed since the last release, edit
|
||||
`lib/helper/gradle.properties` to bump the version.
|
||||
7. `./gradlew clean assembleRelease`
|
||||
8. `./gradlew clean assembleRelease`
|
||||
|
||||
### Steps to take if the android helper is updated and should be released
|
||||
### Libraries
|
||||
|
||||
1. `./gradlew :lib:client:uploadArchives`
|
||||
2. If the helper version was changed: `./gradlew :lib:helper:uploadArchives`
|
||||
2. If the helper version was changed and should be released: `./gradlew :lib:helper:uploadArchives`
|
||||
3. Check on Sonatype that everything worked, and close/release.
|
||||
|
||||
## F-Droid Guide
|
||||
@ -52,6 +54,7 @@
|
||||
3. Push free and donate builds to Google Play via https://play.google.com/apps/publish/
|
||||
4. Tag the new release. Example `mtn tag h: android-0.9.36`
|
||||
5. Push the monotone changes
|
||||
6. Update download page (version and hash, including F-Droid)
|
||||
|
||||
|
||||
|
||||
|
@ -1,9 +1,13 @@
|
||||
apply plugin: 'com.android.application'
|
||||
repositories {
|
||||
mavenLocal()
|
||||
mavenCentral()
|
||||
}
|
||||
|
||||
android {
|
||||
compileSdkVersion 28
|
||||
defaultConfig {
|
||||
versionCode 4745248
|
||||
versionCode 4745249
|
||||
versionName "$I2P_VERSION"
|
||||
minSdkVersion 14
|
||||
targetSdkVersion Integer.parseInt(project.ANDROID_BUILD_TARGET_SDK_VERSION as String)
|
||||
@ -73,10 +77,13 @@ dependencies {
|
||||
implementation 'com.inkapplications.viewpageindicator:library:2.4.4'
|
||||
implementation 'com.pnikosis:materialish-progress:1.7'
|
||||
implementation "net.i2p:router:$I2P_VERSION"
|
||||
implementation "net.i2p:i2p:$I2P_VERSION"
|
||||
implementation "net.i2p.client:mstreaming:$I2P_VERSION"
|
||||
implementation "net.i2p.client:streaming:$I2P_VERSION"
|
||||
implementation 'net.i2p.android.ext:floatingactionbutton:1.10.1'
|
||||
implementation 'org.sufficientlysecure:html-textview:3.1'
|
||||
// Testing-only dependencies
|
||||
androidTestImplementation('com.android.support.test.espresso:espresso-core:2.2.2') {
|
||||
androidTestImplementation('com.android.support.test.espresso:espresso-core:3.0.2') {
|
||||
exclude group: 'com.android.support', module: 'support-annotations'
|
||||
}
|
||||
}
|
||||
|
@ -11,6 +11,9 @@
|
||||
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
||||
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
|
||||
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
|
||||
<!-- following two are for UPnP -->
|
||||
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
|
||||
<uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" />
|
||||
|
||||
<application
|
||||
android:icon="@drawable/ic_launcher_itoopie"
|
||||
|
@ -125,7 +125,8 @@ public class MaterialSeekBarController implements SeekBar.OnSeekBarChangeListene
|
||||
}
|
||||
|
||||
private void setPaddedValue(int value) {
|
||||
mSeekBarValue.setText(String.format("%0" + mMaxDigits +"d", value));
|
||||
//mSeekBarValue.setText(String.format("%0" + mMaxDigits +"d", value));
|
||||
mSeekBarValue.setText(String.format("%" + mMaxDigits +"d", value));
|
||||
}
|
||||
|
||||
|
||||
|
@ -5,6 +5,8 @@ import java.io.FileInputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.OutputStream;
|
||||
import java.util.Locale;
|
||||
|
||||
import net.i2p.I2PAppContext;
|
||||
import net.i2p.data.DataHelper;
|
||||
import net.i2p.util.EepGet;
|
||||
@ -83,7 +85,7 @@ public class EepGetFetcher implements EepGet.StatusListener {
|
||||
int semi = rv.indexOf(";");
|
||||
if (semi > 0)
|
||||
rv = rv.substring(0, semi);
|
||||
return rv.toLowerCase();
|
||||
return rv.toLowerCase(Locale.US);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -5,6 +5,10 @@ import android.content.Context;
|
||||
import net.i2p.android.router.NewsActivity;
|
||||
import net.i2p.android.router.R;
|
||||
import net.i2p.android.router.util.Notifications;
|
||||
import net.i2p.app.ClientApp;
|
||||
import net.i2p.app.ClientAppManager;
|
||||
import net.i2p.app.ClientAppState;
|
||||
import static net.i2p.app.ClientAppState.*;
|
||||
import net.i2p.crypto.SU3File;
|
||||
import net.i2p.data.DataHelper;
|
||||
import net.i2p.router.RouterContext;
|
||||
@ -13,6 +17,7 @@ import net.i2p.router.news.NewsMetadata;
|
||||
import net.i2p.router.news.NewsXMLParser;
|
||||
import net.i2p.util.EepGet;
|
||||
import net.i2p.util.FileUtil;
|
||||
import net.i2p.util.I2PAppThread;
|
||||
import net.i2p.util.Log;
|
||||
import net.i2p.util.ReusableGZIPInputStream;
|
||||
import net.i2p.util.SecureFileOutputStream;
|
||||
@ -32,8 +37,11 @@ import java.util.List;
|
||||
/**
|
||||
* From router console, simplified since we don't deal with router versions
|
||||
* or updates.
|
||||
*
|
||||
* As of 0.9.41, implements ClientApp to hang us off the ClientAppManager,
|
||||
* so we can remove the static reference.
|
||||
*/
|
||||
public class NewsFetcher implements Runnable, EepGet.StatusListener {
|
||||
public class NewsFetcher implements Runnable, EepGet.StatusListener, ClientApp {
|
||||
private final Context mCtx;
|
||||
private final RouterContext _context;
|
||||
private final Notifications _notif;
|
||||
@ -44,20 +52,18 @@ public class NewsFetcher implements Runnable, EepGet.StatusListener {
|
||||
private boolean _invalidated;
|
||||
private File _newsFile;
|
||||
private File _tempFile;
|
||||
private static NewsFetcher _instance;
|
||||
private volatile boolean _isRunning = true;
|
||||
private Thread _thread;
|
||||
private final ClientAppManager _mgr;
|
||||
private volatile ClientAppState _state = UNINITIALIZED;
|
||||
public static final String APP_NAME = "NewsFetcher";
|
||||
|
||||
public static /*final */ NewsFetcher getInstance() {
|
||||
return _instance;
|
||||
}
|
||||
|
||||
/**
|
||||
* As of 0.9.41, returns a new one every time. Only call once.
|
||||
*/
|
||||
public static /* final */ synchronized NewsFetcher getInstance(
|
||||
Context context, RouterContext ctx, Notifications notif) {
|
||||
if (_instance != null)
|
||||
return _instance;
|
||||
_instance = new NewsFetcher(context, ctx, notif);
|
||||
return _instance;
|
||||
return new NewsFetcher(context, ctx, notif);
|
||||
}
|
||||
|
||||
private static final String NEWS_DIR = "docs";
|
||||
@ -82,7 +88,6 @@ public class NewsFetcher implements Runnable, EepGet.StatusListener {
|
||||
mCtx = context;
|
||||
_context = ctx;
|
||||
_notif = notif;
|
||||
_context.addShutdownTask(new Shutdown());
|
||||
_log = ctx.logManager().getLog(NewsFetcher.class);
|
||||
try {
|
||||
String last = ctx.getProperty(PROP_LAST_CHECKED);
|
||||
@ -96,6 +101,9 @@ public class NewsFetcher implements Runnable, EepGet.StatusListener {
|
||||
_newsFile = new File(newsDir, NEWS_FILE);
|
||||
_tempFile = new File(_context.getTempDir(), TEMP_NEWS_FILE);
|
||||
updateLastFetched();
|
||||
_mgr = ctx.clientAppManager();
|
||||
changeState(INITIALIZED);
|
||||
_mgr.register(this);
|
||||
}
|
||||
|
||||
private void updateLastFetched() {
|
||||
@ -134,7 +142,17 @@ public class NewsFetcher implements Runnable, EepGet.StatusListener {
|
||||
private static final long RUN_DELAY = 30 * 60 * 1000;
|
||||
|
||||
public void run() {
|
||||
_thread = Thread.currentThread();
|
||||
changeState(RUNNING);
|
||||
try {
|
||||
run2();
|
||||
} finally {
|
||||
_mgr.unregister(this);
|
||||
changeState(STOPPED);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private void run2() {
|
||||
try {
|
||||
Thread.sleep(INITIAL_DELAY);
|
||||
} catch (InterruptedException ie) {
|
||||
@ -276,14 +294,6 @@ public class NewsFetcher implements Runnable, EepGet.StatusListener {
|
||||
public void attempting(String url) {
|
||||
}
|
||||
|
||||
private class Shutdown implements Runnable {
|
||||
public void run() {
|
||||
_isRunning = false;
|
||||
if (_thread != null)
|
||||
_thread.interrupt();
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// SU3 handlers
|
||||
//
|
||||
@ -417,4 +427,69 @@ public class NewsFetcher implements Runnable, EepGet.StatusListener {
|
||||
} catch (IOException ioe) {}
|
||||
}
|
||||
}
|
||||
|
||||
////// begin ClientApp interface
|
||||
|
||||
/**
|
||||
* @since 0.9.41
|
||||
*/
|
||||
public synchronized void startup() {
|
||||
changeState(STARTING);
|
||||
_thread = new I2PAppThread(this, "NewsFetcher", true);
|
||||
_thread.start();
|
||||
}
|
||||
|
||||
/**
|
||||
* @since 0.9.41
|
||||
*/
|
||||
public synchronized void shutdown(String[] args) {
|
||||
if (_state != RUNNING)
|
||||
return;
|
||||
changeState(STOPPING);
|
||||
_isRunning = false;
|
||||
if (_thread != null)
|
||||
_thread.interrupt();
|
||||
changeState(STOPPED);
|
||||
}
|
||||
|
||||
/**
|
||||
* @since 0.9.41
|
||||
*/
|
||||
public ClientAppState getState() {
|
||||
return _state;
|
||||
}
|
||||
|
||||
/**
|
||||
* @since 0.9.41
|
||||
*/
|
||||
public String getName() {
|
||||
return APP_NAME;
|
||||
}
|
||||
|
||||
/**
|
||||
* @since 0.9.41
|
||||
*/
|
||||
public String getDisplayName() {
|
||||
return APP_NAME;
|
||||
}
|
||||
|
||||
////// end ClientApp interface
|
||||
////// begin ClientApp helpers
|
||||
|
||||
/**
|
||||
* @since 0.9.41
|
||||
*/
|
||||
private void changeState(ClientAppState state) {
|
||||
changeState(state, null);
|
||||
}
|
||||
|
||||
/**
|
||||
* @since 0.9.41
|
||||
*/
|
||||
private synchronized void changeState(ClientAppState state, Exception e) {
|
||||
_state = state;
|
||||
_mgr.notify(this, state, null, e);
|
||||
}
|
||||
|
||||
////// end ClientApp helpers
|
||||
}
|
||||
|
@ -1,19 +1,26 @@
|
||||
package net.i2p.android.help;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.content.pm.ResolveInfo;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.net.Uri;
|
||||
import android.support.annotation.NonNull;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
|
||||
public class Browser implements Comparable<Browser> {
|
||||
public final String packageName;
|
||||
public final CharSequence label;
|
||||
public final Drawable icon;
|
||||
public final boolean isInstalled;
|
||||
public final boolean isKnown;
|
||||
public final boolean isSupported;
|
||||
public final boolean isRecommended;
|
||||
|
||||
private boolean isInstalled;
|
||||
/**
|
||||
* A browser that we don't know about.
|
||||
*
|
||||
@ -80,4 +87,23 @@ public class Browser implements Comparable<Browser> {
|
||||
} else
|
||||
return 2;
|
||||
}
|
||||
|
||||
public boolean isInstalled(Context context){
|
||||
if (isInstalled) {
|
||||
return true;
|
||||
}
|
||||
// Find all installed browsers that listen for ".i2p"
|
||||
Intent intent = new Intent(Intent.ACTION_VIEW);
|
||||
intent.setData(Uri.parse("http://stats.i2p"));
|
||||
|
||||
final PackageManager pm = context.getPackageManager();
|
||||
List<ResolveInfo> installedBrowsers = pm.queryIntentActivities(intent, 0);
|
||||
for (ResolveInfo browser : installedBrowsers) {
|
||||
if (browser.activityInfo.packageName.equals(packageName)) {
|
||||
isInstalled = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return isInstalled;
|
||||
}
|
||||
}
|
||||
|
@ -73,11 +73,15 @@ public class BrowserAdapter extends RecyclerView.Adapter<BrowserAdapter.ViewHold
|
||||
holder.mLabel.setText(browser.label);
|
||||
|
||||
if (browser.isKnown) {
|
||||
if (browser.isRecommended && browser.isInstalled) {
|
||||
if (browser.isRecommended && browser.isInstalled(mCtx)) {
|
||||
holder.mStatus.setImageDrawable(
|
||||
mCtx.getResources().getDrawable(R.drawable.ic_stars_white_24dp));
|
||||
holder.mStatus.setVisibility(View.VISIBLE);
|
||||
} else if (browser.isSupported && !browser.isInstalled) {
|
||||
} else if (browser.isSupported && browser.isInstalled(mCtx)) {
|
||||
holder.mStatus.setImageDrawable(
|
||||
mCtx.getResources().getDrawable(R.drawable.ic_stars_white_24dp));
|
||||
holder.mStatus.setVisibility(View.INVISIBLE);
|
||||
} else if (browser.isSupported && !browser.isInstalled(mCtx)) {
|
||||
holder.mStatus.setImageDrawable(
|
||||
mCtx.getResources().getDrawable(R.drawable.ic_shop_white_24dp));
|
||||
holder.mStatus.setOnClickListener(new View.OnClickListener() {
|
||||
@ -94,7 +98,7 @@ public class BrowserAdapter extends RecyclerView.Adapter<BrowserAdapter.ViewHold
|
||||
}
|
||||
});
|
||||
holder.mStatus.setVisibility(View.VISIBLE);
|
||||
} else if (!browser.isSupported) {
|
||||
} else if (browser.isInstalled(mCtx) && !browser.isSupported) {
|
||||
// Make the icon gray-scale to show it is unsupported
|
||||
ColorMatrix matrix = new ColorMatrix();
|
||||
matrix.setSaturation(0);
|
||||
|
@ -26,6 +26,8 @@ import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@ -121,8 +123,9 @@ public class BrowserListFragment extends Fragment implements
|
||||
intent.setData(Uri.parse("http://stats.i2p"));
|
||||
|
||||
final PackageManager pm = getContext().getPackageManager();
|
||||
List<ResolveInfo> installedBrowsers = pm.queryIntentActivities(intent, 0);
|
||||
Set<ResolveInfo> installedBrowsers = new HashSet<>(pm.queryIntentActivities(intent, 0));
|
||||
|
||||
// Compare installed browsers to supported browsers
|
||||
for (ResolveInfo browser : installedBrowsers) {
|
||||
if (recommended.contains(browser.activityInfo.packageName)) {
|
||||
browsers.add(new Browser(pm, browser, true, true));
|
||||
|
@ -158,6 +158,16 @@ public class TunnelEntryAdapter extends RecyclerView.Adapter<RecyclerView.ViewHo
|
||||
tvh.itemView.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
// TODO
|
||||
// lint priority 8/10
|
||||
// lint: Do not treat position as fixed; only use immediately and call holder.getAdapterPosition() to look it up later
|
||||
// javadocs: Note that unlike ListView, RecyclerView will not call this method again
|
||||
// if the position of the item changes in the data set unless the item itself is invalidated
|
||||
// or the new position cannot be determined.
|
||||
// For this reason, you should only use the position parameter while acquiring
|
||||
// the related data item inside this method and should not keep a copy of it.
|
||||
// If you need the position of an item later on (e.g. in a click listener),
|
||||
// use RecyclerView.ViewHolder.getAdapterPosition() which will have the updated adapter position.
|
||||
int oldPosition = mActivatedPosition;
|
||||
mActivatedPosition = position;
|
||||
notifyItemChanged(oldPosition);
|
||||
|
@ -16,6 +16,9 @@ import net.i2p.i2ptunnel.TunnelControllerGroup;
|
||||
import net.i2p.i2ptunnel.ui.TunnelConfig;
|
||||
|
||||
import java.util.concurrent.ExecutionException;
|
||||
import java.util.concurrent.CancellationException;
|
||||
import java.util.concurrent.TimeoutException;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
public abstract class BaseTunnelPreferenceFragment extends CustomPreferenceFragment {
|
||||
protected static final String ARG_TUNNEL_ID = "tunnelId";
|
||||
@ -88,11 +91,15 @@ public abstract class BaseTunnelPreferenceFragment extends CustomPreferenceFragm
|
||||
// TODO: There used to be a possible ANR here, because the underlying I2P code
|
||||
// checks if the session is open as part of updating its config. We may need to save
|
||||
// completely asynchronously (and ensure we do actually save before the app closes).
|
||||
task.execute().get();
|
||||
task.execute().get(2, TimeUnit.SECONDS);
|
||||
} catch (InterruptedException e) {
|
||||
Util.e("Interrupted while saving tunnel config", e);
|
||||
} catch (ExecutionException e) {
|
||||
Util.e("Error while saving tunnel config", e);
|
||||
} catch (CancellationException e) {
|
||||
Util.e("Cancelled while saving tunnel config", e);
|
||||
} catch (TimeoutException e) {
|
||||
Util.e("Timed out while savomg tunnel config", e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -7,6 +7,7 @@ import android.os.Bundle;
|
||||
|
||||
import net.i2p.I2PAppContext;
|
||||
import net.i2p.android.router.R;
|
||||
import net.i2p.android.router.util.Util;
|
||||
import net.i2p.android.wizard.model.Page;
|
||||
import net.i2p.i2ptunnel.TunnelController;
|
||||
import net.i2p.i2ptunnel.TunnelControllerGroup;
|
||||
@ -589,12 +590,17 @@ public class TunnelUtil extends GeneralHelper {
|
||||
// Update the TunnelConfig from the tunnel wizard settings
|
||||
String kClientServer = res.getString(R.string.i2ptunnel_wizard_k_client_server);
|
||||
String kType = res.getString(R.string.i2ptunnel_wizard_k_type);
|
||||
String clientServer = data.getBundle(kClientServer).getString(Page.SIMPLE_DATA_KEY);
|
||||
String typeName = data.getBundle(clientServer + ":" + kType).getString(Page.SIMPLE_DATA_KEY);
|
||||
String type = getTypeFromName(typeName, ctx);
|
||||
cfg.setType(type);
|
||||
try {
|
||||
String clientServer = data.getBundle(kClientServer).getString(Page.SIMPLE_DATA_KEY);
|
||||
String typeName = data.getBundle(clientServer + ":" + kType).getString(Page.SIMPLE_DATA_KEY);
|
||||
String type = getTypeFromName(typeName, ctx);
|
||||
cfg.setType(type);
|
||||
|
||||
new TunnelConfigFromWizard(cfg, data, res, _group, type).runLogic();
|
||||
} catch (NullPointerException ex) {
|
||||
Util.e("Exception while trying to create config from wizard: "+ex.getMessage());
|
||||
}
|
||||
|
||||
new TunnelConfigFromWizard(cfg, data, res, _group, type).runLogic();
|
||||
|
||||
return cfg;
|
||||
}
|
||||
|
@ -1,5 +1,6 @@
|
||||
package net.i2p.android.preferences;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
import android.content.Context;
|
||||
import android.content.SharedPreferences;
|
||||
import android.os.Bundle;
|
||||
@ -30,6 +31,7 @@ public class TransportsPreferenceFragment extends I2PreferenceFragment {
|
||||
((SettingsActivity) getActivity()).getSupportActionBar().setTitle(R.string.settings_label_transports);
|
||||
}
|
||||
|
||||
@SuppressLint("ApplySharedPref")
|
||||
private void loadProperties() {
|
||||
Context context= getActivity();
|
||||
RouterContext ctx = Util.getRouterContext();
|
||||
|
@ -20,7 +20,7 @@ public class IntListPreference extends ListPreference {
|
||||
getPersistedInt(0);
|
||||
} catch (ClassCastException e) {
|
||||
// Fix for where this preference was previously stored in a ListPreference
|
||||
getSharedPreferences().edit().remove(getKey()).commit();
|
||||
getSharedPreferences().edit().remove(getKey()).apply();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -12,6 +12,7 @@ import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
|
||||
import net.i2p.android.ext.floatingactionbutton.FloatingActionsMenu;
|
||||
import net.i2p.android.ext.floatingactionbutton.FloatingActionsMenu.OnFloatingActionsMenuUpdateListener;
|
||||
import net.i2p.android.router.dialog.AboutDialog;
|
||||
import net.i2p.android.router.dialog.TextResourceDialog;
|
||||
import net.i2p.android.router.log.LogActivity;
|
||||
@ -42,6 +43,17 @@ public class ConsoleContainer extends Fragment {
|
||||
}
|
||||
|
||||
mConsoleMenu = (FloatingActionsMenu) v.findViewById(R.id.console_action_menu);
|
||||
// update visibility based on router state
|
||||
mConsoleMenu.setOnFloatingActionsMenuUpdateListener(new OnFloatingActionsMenuUpdateListener() {
|
||||
public void onMenuExpanded() {
|
||||
// this is called after the animation starts, sadly
|
||||
setMenuVisibility();
|
||||
}
|
||||
public void onMenuCollapsed() {
|
||||
// call it here too so the expand animation isn't glitchy as often
|
||||
setMenuVisibility();
|
||||
}
|
||||
});
|
||||
mConsoleMenu.findViewById(R.id.action_news).setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
|
@ -375,9 +375,9 @@ public class MainFragment extends I2PFragmentBase {
|
||||
String uptime = DataHelper.formatDuration(ctx.router().getUptime());
|
||||
int active = ctx.commSystem().countActivePeers();
|
||||
int known = Math.max(ctx.netDb().getKnownRouters() - 1, 0);
|
||||
vUptime.setText("" + uptime);
|
||||
vActive.setText("" + active);
|
||||
vKnown.setText("" + known);
|
||||
vUptime.setText(uptime);
|
||||
vActive.setText(Integer.toString(active));
|
||||
vKnown.setText(Integer.toString(known));
|
||||
|
||||
// Load running tunnels
|
||||
loadDestinations(ctx);
|
||||
@ -587,7 +587,7 @@ public class MainFragment extends I2PFragmentBase {
|
||||
PreferenceManager.getDefaultSharedPreferences(getActivity())
|
||||
.edit()
|
||||
.putString(getString(R.string.PREF_LANGUAGE), language)
|
||||
.commit();
|
||||
.apply();
|
||||
// Close the dialog
|
||||
dialog.dismiss();
|
||||
// Broadcast the change to RouterService just in case the router is running
|
||||
|
@ -13,6 +13,7 @@ import android.widget.TextView;
|
||||
|
||||
import net.i2p.android.apps.NewsFetcher;
|
||||
import net.i2p.android.router.util.Util;
|
||||
import net.i2p.router.RouterContext;
|
||||
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.File;
|
||||
@ -33,12 +34,16 @@ public class NewsFragment extends I2PFragmentBase {
|
||||
@Override
|
||||
public void onResume() {
|
||||
super.onResume();
|
||||
NewsFetcher nf = NewsFetcher.getInstance();
|
||||
if (nf != null) {
|
||||
// Always update the status
|
||||
TextView tv = (TextView) getActivity().findViewById(R.id.news_status);
|
||||
tv.setText(nf.status().replace(" ", " "));
|
||||
tv.setVisibility(View.VISIBLE);
|
||||
RouterContext ctx = getRouterContext();
|
||||
if (ctx != null) {
|
||||
NewsFetcher nf = (NewsFetcher) ctx.clientAppManager().getRegisteredApp(NewsFetcher.APP_NAME);
|
||||
if (nf != null) {
|
||||
// Always update the status
|
||||
// This is the news last updated/checked text at the bottom
|
||||
TextView tv = (TextView) getActivity().findViewById(R.id.news_status);
|
||||
tv.setText(nf.status().replace(" ", " "));
|
||||
tv.setVisibility(View.VISIBLE);
|
||||
}
|
||||
}
|
||||
|
||||
// Only update the content if we need to
|
||||
|
@ -154,6 +154,8 @@ public class NetDbDetailFragment extends I2PFragmentBase {
|
||||
String val = (String)e.getValue();
|
||||
addTableRow(table, DataHelper.stripHTML(key), DataHelper.stripHTML(val));
|
||||
}
|
||||
// spacer
|
||||
addTableRow(table, "", "");
|
||||
|
||||
addresses.addView(table);
|
||||
}
|
||||
@ -230,9 +232,11 @@ public class NetDbDetailFragment extends I2PFragmentBase {
|
||||
TextView tl1, tl2;
|
||||
|
||||
row = new TableRow(getActivity());
|
||||
// left top right bottom
|
||||
row.setPadding(10, 0, 0, 0);
|
||||
|
||||
tl1 = new TextView(getActivity());
|
||||
tl1.setPadding(0, 0, 20, 0);
|
||||
tl2 = new TextView(getActivity());
|
||||
|
||||
tl1.setText(key);
|
||||
|
@ -5,6 +5,7 @@ import android.support.v4.content.AsyncTaskLoader;
|
||||
|
||||
import net.i2p.android.router.util.Util;
|
||||
import net.i2p.data.Destination;
|
||||
import net.i2p.data.Hash;
|
||||
import net.i2p.data.LeaseSet;
|
||||
import net.i2p.data.router.RouterInfo;
|
||||
import net.i2p.router.RouterContext;
|
||||
@ -24,14 +25,27 @@ public class NetDbEntryLoader extends AsyncTaskLoader<List<NetDbEntry>> {
|
||||
mRouters = routers;
|
||||
}
|
||||
|
||||
/** put us on top */
|
||||
private static class RouterInfoComparator implements Comparator<RouterInfo> {
|
||||
private final Hash _us;
|
||||
|
||||
public RouterInfoComparator(Hash us) {
|
||||
_us = us;
|
||||
}
|
||||
|
||||
public int compare(RouterInfo l, RouterInfo r) {
|
||||
return l.getIdentity().getHash().toBase64().compareTo(r.getIdentity().getHash().toBase64());
|
||||
Hash lh = l.getIdentity().getHash();
|
||||
Hash rh = r.getIdentity().getHash();
|
||||
if (lh.equals(_us))
|
||||
return -1;
|
||||
if (rh.equals(_us))
|
||||
return 1;
|
||||
return lh.toBase64().compareTo(rh.toBase64());
|
||||
}
|
||||
}
|
||||
|
||||
private class LeaseSetComparator implements Comparator<LeaseSet> {
|
||||
private RouterContext mRContext;
|
||||
private final RouterContext mRContext;
|
||||
|
||||
public LeaseSetComparator(RouterContext rContext) {
|
||||
super();
|
||||
@ -53,9 +67,9 @@ public class NetDbEntryLoader extends AsyncTaskLoader<List<NetDbEntry>> {
|
||||
public List<NetDbEntry> loadInBackground() {
|
||||
List<NetDbEntry> ret = new ArrayList<>();
|
||||
RouterContext routerContext = Util.getRouterContext();
|
||||
if (routerContext != null && routerContext.netDb().isInitialized()) {
|
||||
if (routerContext != null && routerContext.netDb().isInitialized() && routerContext.routerHash() != null) {
|
||||
if (mRouters) {
|
||||
Set<RouterInfo> routers = new TreeSet<>(new RouterInfoComparator());
|
||||
Set<RouterInfo> routers = new TreeSet<>(new RouterInfoComparator(routerContext.routerHash()));
|
||||
routers.addAll(routerContext.netDb().getRouters());
|
||||
for (RouterInfo ri : routers) {
|
||||
NetDbEntry entry = NetDbEntry.fromRouterInfo(routerContext, ri);
|
||||
|
@ -17,7 +17,7 @@ import java.util.Set;
|
||||
import java.util.TreeSet;
|
||||
|
||||
public class NetDbStatsLoader extends AsyncTaskLoader<List<ObjectCounter<String>>> {
|
||||
private RouterContext mRContext;
|
||||
private final RouterContext mRContext;
|
||||
private List<ObjectCounter<String>> mData;
|
||||
|
||||
public NetDbStatsLoader(Context context, RouterContext rContext) {
|
||||
|
@ -77,6 +77,7 @@ public class NetDbSummaryTableFragment extends Fragment {
|
||||
titleRow.setPadding(10, 0, 0, 0);
|
||||
|
||||
tl1 = new TextView(getActivity());
|
||||
tl1.setPadding(0, 0, 20, 0);
|
||||
tl1.setTextSize(20);
|
||||
tl2 = new TextView(getActivity());
|
||||
tl2.setTextSize(20);
|
||||
@ -108,6 +109,7 @@ public class NetDbSummaryTableFragment extends Fragment {
|
||||
row.setPadding(10, 0, 0, 0);
|
||||
|
||||
tl1 = new TextView(getActivity());
|
||||
tl1.setPadding(0, 0, 20, 0);
|
||||
tl2 = new TextView(getActivity());
|
||||
|
||||
tl1.setText(name);
|
||||
|
@ -2,6 +2,7 @@ package net.i2p.android.router.provider;
|
||||
|
||||
import android.content.ContentProvider;
|
||||
import android.content.ContentValues;
|
||||
import android.content.Context;
|
||||
import android.content.SharedPreferences;
|
||||
import android.database.Cursor;
|
||||
import android.net.Uri;
|
||||
@ -18,6 +19,7 @@ import java.io.IOException;
|
||||
import java.io.OutputStream;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
@ -153,7 +155,7 @@ public class CacheProvider extends ContentProvider {
|
||||
// first seg is empty since string starts with /
|
||||
String nonce = segs.length > 1 ? segs[1] : null;
|
||||
String scheme = segs.length > 2 ? segs[2] : null;
|
||||
String host = segs.length > 3 ? segs[3].toLowerCase() : null;
|
||||
String host = segs.length > 3 ? segs[3].toLowerCase(Locale.US) : null;
|
||||
String realPath = segs.length > 4 ? segs[4] : "";
|
||||
String query = uri.getEncodedQuery();
|
||||
if (query == null) {
|
||||
@ -230,10 +232,11 @@ public class CacheProvider extends ContentProvider {
|
||||
}
|
||||
|
||||
private ParcelFileDescriptor eepFetch(Uri uri) throws FileNotFoundException {
|
||||
AppCache cache = AppCache.getInstance(getContext());
|
||||
Context ctx = getContext();
|
||||
AppCache cache = AppCache.getInstance(ctx);
|
||||
OutputStream out;
|
||||
try {
|
||||
out = cache.createCacheFile(uri);
|
||||
out = cache.createCacheFile(ctx, uri);
|
||||
} catch (IOException ioe) {
|
||||
throw new FileNotFoundException(ioe.toString());
|
||||
}
|
||||
@ -244,7 +247,7 @@ public class CacheProvider extends ContentProvider {
|
||||
File file = cache.getCacheFile(uri);
|
||||
if (file.length() > 0) {
|
||||
// this call will insert it back to us (don't set as current base)
|
||||
Uri content = cache.addCacheFile(uri, false);
|
||||
Uri content = cache.addCacheFile(ctx, uri, false);
|
||||
return ParcelFileDescriptor.open(file, ParcelFileDescriptor.MODE_READ_ONLY);
|
||||
} else {
|
||||
Util.d("CacheProvider Sucess but no data " + uri);
|
||||
@ -252,7 +255,7 @@ public class CacheProvider extends ContentProvider {
|
||||
} else {
|
||||
Util.d("CacheProvider Eepget fail " + uri);
|
||||
}
|
||||
AppCache.getInstance().removeCacheFile(uri);
|
||||
cache.removeCacheFile(ctx, uri);
|
||||
throw new FileNotFoundException("eepget fail");
|
||||
}
|
||||
|
||||
@ -319,7 +322,7 @@ public class CacheProvider extends ContentProvider {
|
||||
for (String key : toDelete) {
|
||||
edit.remove(key);
|
||||
}
|
||||
edit.commit();
|
||||
edit.apply();
|
||||
}
|
||||
}
|
||||
|
||||
@ -355,11 +358,10 @@ public class CacheProvider extends ContentProvider {
|
||||
return _sharedPrefs.getString(pref, null);
|
||||
}
|
||||
|
||||
/** @return success */
|
||||
private boolean setPref(String pref, String val) {
|
||||
private void setPref(String pref, String val) {
|
||||
SharedPreferences.Editor edit = _sharedPrefs.edit();
|
||||
edit.putString(pref, val);
|
||||
return edit.commit();
|
||||
edit.apply();
|
||||
}
|
||||
|
||||
/** @return success */
|
||||
|
@ -15,6 +15,11 @@ public class OnBootReceiver extends BroadcastReceiver implements I2PConstants {
|
||||
|
||||
@Override
|
||||
public void onReceive(Context context, Intent intent) {
|
||||
if (!Intent.ACTION_BOOT_COMPLETED.equals(intent.getAction())) {
|
||||
Util.e("spoofed BOOT_COMPLETED");
|
||||
return;
|
||||
}
|
||||
|
||||
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
|
||||
boolean startOnBoot = prefs.getBoolean(PREF_START_ON_BOOT, false);
|
||||
|
||||
|
@ -2,7 +2,7 @@ package net.i2p.android.router.service;
|
||||
|
||||
import android.content.Context;
|
||||
|
||||
import net.i2p.BOB.BOB;
|
||||
//import net.i2p.BOB.BOB;
|
||||
import net.i2p.I2PAppContext;
|
||||
import net.i2p.addressbook.DaemonThread;
|
||||
import net.i2p.android.apps.NewsFetcher;
|
||||
@ -12,6 +12,7 @@ import net.i2p.i2ptunnel.TunnelControllerGroup;
|
||||
import net.i2p.router.Job;
|
||||
import net.i2p.router.JobImpl;
|
||||
import net.i2p.router.RouterContext;
|
||||
import net.i2p.router.startup.RouterAppManager;
|
||||
import net.i2p.util.I2PAppThread;
|
||||
|
||||
import java.io.IOException;
|
||||
@ -37,13 +38,13 @@ import java.io.IOException;
|
||||
*/
|
||||
class LoadClientsJob extends JobImpl {
|
||||
|
||||
private Context mCtx;
|
||||
private Notifications _notif;
|
||||
private final Context mCtx;
|
||||
private final Notifications _notif;
|
||||
private DaemonThread _addressbook;
|
||||
private BOB _bob;
|
||||
//private BOB _bob;
|
||||
|
||||
/** this is the delay to load (and start) the clients. */
|
||||
private static final long LOAD_DELAY = 90*1000;
|
||||
private static final long LOAD_DELAY = 60*1000;
|
||||
|
||||
|
||||
public LoadClientsJob(Context ctx, RouterContext rCtx, Notifications notif) {
|
||||
@ -63,20 +64,11 @@ class LoadClientsJob extends JobImpl {
|
||||
t.setPriority(Thread.NORM_PRIORITY - 1);
|
||||
t.start();
|
||||
|
||||
NewsFetcher fetcher = NewsFetcher.getInstance(mCtx, getContext(), _notif);
|
||||
t = new I2PAppThread(fetcher, "NewsFetcher", true);
|
||||
t.start();
|
||||
|
||||
_addressbook = new DaemonThread(new String[] {"addressbook"});
|
||||
_addressbook.setName("Addressbook");
|
||||
_addressbook.setDaemon(true);
|
||||
_addressbook.start();
|
||||
|
||||
// add other clients here
|
||||
_bob = new BOB(I2PAppContext.getGlobalContext(), null, new String[0]);
|
||||
try {
|
||||
_bob.startup();
|
||||
} catch (IOException ioe) {}
|
||||
//_bob = new BOB(I2PAppContext.getGlobalContext(), null, new String[0]);
|
||||
//try {
|
||||
// _bob.startup();
|
||||
//} catch (IOException ioe) {}
|
||||
|
||||
getContext().addShutdownTask(new ClientShutdownHook());
|
||||
}
|
||||
@ -90,12 +82,29 @@ class LoadClientsJob extends JobImpl {
|
||||
public String getName() { return "Start I2P Tunnel"; }
|
||||
|
||||
public void runJob() {
|
||||
while (!getContext().router().isRunning()) {
|
||||
try { Thread.sleep(1000); } catch (InterruptedException ie) { return; }
|
||||
if (!getContext().router().isAlive()) {
|
||||
Util.e("Router stopped before i2ptunnel could start");
|
||||
return;
|
||||
}
|
||||
}
|
||||
Util.d("Starting i2ptunnel");
|
||||
TunnelControllerGroup tcg = TunnelControllerGroup.getInstance();
|
||||
TunnelControllerGroup tcg = TunnelControllerGroup.getInstance(getContext());
|
||||
try {
|
||||
tcg.startup();
|
||||
int sz = tcg.getControllers().size();
|
||||
Util.d("i2ptunnel started " + sz + " clients");
|
||||
|
||||
// no use starting these until i2ptunnel starts
|
||||
RouterContext ctx = getContext();
|
||||
NewsFetcher fetcher = NewsFetcher.getInstance(mCtx, getContext(), _notif);
|
||||
ctx.routerAppManager().addAndStart(fetcher, new String[0]);
|
||||
|
||||
_addressbook = new DaemonThread(new String[] {"addressbook"});
|
||||
_addressbook.setName("Addressbook");
|
||||
_addressbook.setDaemon(true);
|
||||
_addressbook.start();
|
||||
} catch (IllegalArgumentException iae) {
|
||||
Util.e("i2ptunnel failed to start", iae);
|
||||
}
|
||||
@ -109,8 +118,8 @@ class LoadClientsJob extends JobImpl {
|
||||
// i2ptunnel registers its own hook
|
||||
// StatSummarizer registers its own hook
|
||||
// NewsFetcher registers its own hook
|
||||
if (_bob != null)
|
||||
_bob.shutdown(null);
|
||||
//if (_bob != null)
|
||||
// _bob.shutdown(null);
|
||||
if (_addressbook != null)
|
||||
_addressbook.halt();
|
||||
}
|
||||
|
@ -105,7 +105,7 @@ public class RouterService extends Service {
|
||||
if(lastState == State.RUNNING || lastState == State.ACTIVE) {
|
||||
Intent intent = new Intent(this, RouterService.class);
|
||||
intent.putExtra(EXTRA_RESTART, true);
|
||||
onStartCommand(intent, 12345, 67890);
|
||||
onStartCommand(intent, START_FLAG_REDELIVERY | START_FLAG_RETRY, 67890);
|
||||
} else if(lastState == State.MANUAL_QUITTING || lastState == State.GRACEFUL_SHUTDOWN) {
|
||||
synchronized(_stateLock) {
|
||||
setState(State.MANUAL_QUITTED);
|
||||
@ -214,6 +214,7 @@ public class RouterService extends Service {
|
||||
// Launch the router!
|
||||
// TODO Store this somewhere instead of relying on global context?
|
||||
Router r = new Router();
|
||||
r.setUPnPScannerCallback(new SSDPLocker(RouterService.this));
|
||||
r.runRouter();
|
||||
synchronized(_stateLock) {
|
||||
if(_state != State.STARTING) {
|
||||
|
@ -0,0 +1,33 @@
|
||||
package net.i2p.android.router.service;
|
||||
|
||||
import android.content.Context;
|
||||
import android.net.wifi.WifiManager;
|
||||
import android.net.wifi.WifiManager.MulticastLock;
|
||||
|
||||
import net.i2p.router.transport.UPnPScannerCallback;
|
||||
|
||||
/**
|
||||
* To lock/unlock UPnP, so it works on some phones.
|
||||
* Many many phones don't require this, but do be safe...
|
||||
*
|
||||
* @since 0.9.41
|
||||
*/
|
||||
public class SSDPLocker implements UPnPScannerCallback {
|
||||
|
||||
private final MulticastLock lock;
|
||||
|
||||
public SSDPLocker(Context context) {
|
||||
WifiManager wifi = (WifiManager) context.getApplicationContext().getSystemService(Context.WIFI_SERVICE);
|
||||
lock = wifi.createMulticastLock("ssdp");
|
||||
lock.setReferenceCounted(false);
|
||||
}
|
||||
|
||||
public void beforeScan() {
|
||||
lock.acquire();
|
||||
}
|
||||
|
||||
public void afterScan() {
|
||||
if (lock.isHeld())
|
||||
lock.release();
|
||||
}
|
||||
}
|
@ -30,7 +30,6 @@ public class AppCache {
|
||||
private static AppCache _instance;
|
||||
private static File _cacheDir;
|
||||
private static long _totalSize;
|
||||
private static ContentResolver _resolver;
|
||||
/** the LRU cache */
|
||||
private final Map<Integer, Object> _cache;
|
||||
|
||||
@ -62,7 +61,6 @@ public class AppCache {
|
||||
_cacheDir = new File(ctx.getCacheDir(), DIR_NAME);
|
||||
_cacheDir.mkdir();
|
||||
Util.d("AppCache cache dir " + _cacheDir);
|
||||
_resolver = ctx.getContentResolver();
|
||||
_cache = new LHM(MAX_FILES);
|
||||
initialize();
|
||||
}
|
||||
@ -72,9 +70,9 @@ public class AppCache {
|
||||
* addCacheFile() or removeCacheFile() after the data is written.
|
||||
* @param key no fragment allowed
|
||||
*/
|
||||
public OutputStream createCacheFile(Uri key) throws IOException {
|
||||
public OutputStream createCacheFile(Context ctx, Uri key) throws IOException {
|
||||
// remove any old file so the total stays correct
|
||||
removeCacheFile(key);
|
||||
removeCacheFile(ctx, key);
|
||||
File f = toFile(key);
|
||||
f.getParentFile().mkdirs();
|
||||
return new FileOutputStream(f);
|
||||
@ -88,7 +86,7 @@ public class AppCache {
|
||||
* @param key no fragment allowed
|
||||
* @param setAsCurrentBase tell CacheProvider
|
||||
*/
|
||||
public Uri addCacheFile(Uri key, boolean setAsCurrentBase) {
|
||||
public Uri addCacheFile(Context ctx, Uri key, boolean setAsCurrentBase) {
|
||||
int hash = toHash(key);
|
||||
synchronized(_cache) {
|
||||
_cache.put(hash, DUMMY);
|
||||
@ -96,19 +94,19 @@ public class AppCache {
|
||||
// file:/// uri
|
||||
//return Uri.fromFile(toFile(hash)).toString();
|
||||
// content:// uri
|
||||
return insertContent(key, setAsCurrentBase);
|
||||
return insertContent(ctx, key, setAsCurrentBase);
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove a previously written file from the cache index and disk.
|
||||
* @param key no fragment allowed
|
||||
*/
|
||||
public void removeCacheFile(Uri key) {
|
||||
public void removeCacheFile(Context ctx, Uri key) {
|
||||
int hash = toHash(key);
|
||||
synchronized(_cache) {
|
||||
_cache.remove(hash);
|
||||
}
|
||||
deleteContent(key);
|
||||
deleteContent(ctx, key);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -118,7 +116,7 @@ public class AppCache {
|
||||
*
|
||||
* @param key no fragment allowed
|
||||
*/
|
||||
public Uri getCacheUri(Uri key) {
|
||||
public Uri getCacheUri(Context ctx, Uri key) {
|
||||
int hash = toHash(key);
|
||||
// poke the LRU
|
||||
Object present;
|
||||
@ -126,7 +124,7 @@ public class AppCache {
|
||||
present = _cache.get(hash);
|
||||
}
|
||||
if (present != null)
|
||||
setAsCurrentBase(key);
|
||||
setAsCurrentBase(ctx, key);
|
||||
return CacheProvider.getContentUri(key);
|
||||
}
|
||||
|
||||
@ -242,7 +240,7 @@ public class AppCache {
|
||||
/**
|
||||
* @return the uri inserted or null on failure
|
||||
*/
|
||||
private static Uri insertContent(Uri key, boolean setAsCurrentBase) {
|
||||
private static Uri insertContent(Context ctx, Uri key, boolean setAsCurrentBase) {
|
||||
String path = toFile(key).getAbsolutePath();
|
||||
ContentValues cv = new ContentValues();
|
||||
cv.put(CacheProvider.DATA, path);
|
||||
@ -250,8 +248,9 @@ public class AppCache {
|
||||
cv.put(CacheProvider.CURRENT_BASE, Boolean.TRUE);
|
||||
Uri uri = CacheProvider.getContentUri(key);
|
||||
if (uri != null) {
|
||||
_resolver.insert(uri, cv);
|
||||
return uri;
|
||||
ContentResolver resolver = ctx.getContentResolver();
|
||||
resolver.insert(uri, cv);
|
||||
return uri;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
@ -259,19 +258,23 @@ public class AppCache {
|
||||
/**
|
||||
* Set key as current base. May be content or i2p key.
|
||||
*/
|
||||
private static void setAsCurrentBase(Uri key) {
|
||||
private static void setAsCurrentBase(Context ctx, Uri key) {
|
||||
ContentValues cv = new ContentValues();
|
||||
cv.put(CacheProvider.CURRENT_BASE, Boolean.TRUE);
|
||||
Uri uri = CacheProvider.getContentUri(key);
|
||||
if (uri != null)
|
||||
_resolver.insert(uri, cv);
|
||||
if (uri != null) {
|
||||
ContentResolver resolver = ctx.getContentResolver();
|
||||
resolver.insert(uri, cv);
|
||||
}
|
||||
}
|
||||
|
||||
/** ok for now but we will need to store key in the map and delete by integer */
|
||||
private static void deleteContent(Uri key) {
|
||||
private static void deleteContent(Context ctx, Uri key) {
|
||||
Uri uri = CacheProvider.getContentUri(key);
|
||||
if (uri != null)
|
||||
_resolver.delete(uri, null, null);
|
||||
if (uri != null) {
|
||||
ContentResolver resolver = ctx.getContentResolver();
|
||||
resolver.delete(uri, null, null);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -34,6 +34,7 @@ import java.util.Collection;
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
import java.util.Properties;
|
||||
|
||||
@ -185,9 +186,9 @@ public abstract class Util implements I2PConstants {
|
||||
toRemove.setProperty("routerconsole.lang", "");
|
||||
toRemove.setProperty("routerconsole.country", "");
|
||||
} else {
|
||||
routerProps.setProperty("routerconsole.lang", language[0].toLowerCase());
|
||||
routerProps.setProperty("routerconsole.lang", language[0].toLowerCase(Locale.US));
|
||||
if (language.length == 2)
|
||||
routerProps.setProperty("routerconsole.country", language[1].toUpperCase());
|
||||
routerProps.setProperty("routerconsole.country", language[1].toUpperCase(Locale.US));
|
||||
else
|
||||
toRemove.setProperty("routerconsole.country", "");
|
||||
}
|
||||
|
@ -28,10 +28,11 @@ import java.io.FileNotFoundException;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.OutputStream;
|
||||
import java.util.Locale;
|
||||
|
||||
public class I2PWebViewClient extends WebViewClient {
|
||||
|
||||
private Fragment _parentFrag;
|
||||
private final Fragment _parentFrag;
|
||||
private BGLoad _lastTask;
|
||||
/** save it here so we can dismiss it in onPageFinished() */
|
||||
private ProgressDialog _lastDialog;
|
||||
@ -76,7 +77,7 @@ public class I2PWebViewClient extends WebViewClient {
|
||||
fail(view, "Bad URL " + url);
|
||||
return true;
|
||||
}
|
||||
s = s.toLowerCase();
|
||||
s = s.toLowerCase(Locale.US);
|
||||
if (!(s.equals("http") || s.equals("https") ||
|
||||
s.equals(CONTENT))) {
|
||||
Util.d("Not loading URL " + url);
|
||||
@ -93,7 +94,7 @@ public class I2PWebViewClient extends WebViewClient {
|
||||
return true;
|
||||
}
|
||||
|
||||
h = h.toLowerCase();
|
||||
h = h.toLowerCase(Locale.US);
|
||||
if (h.endsWith(".i2p")) {
|
||||
if (!s.equals("http")) {
|
||||
fail(view, "Bad URL " + url);
|
||||
@ -211,7 +212,8 @@ public class I2PWebViewClient extends WebViewClient {
|
||||
//reverse back to a i2p URI so we can delete it from the AppCache
|
||||
uri = CacheProvider.getI2PUri(uri);
|
||||
Util.d("clearing AppCache entry for current page " + uri);
|
||||
AppCache.getInstance(view.getContext()).removeCacheFile(uri);
|
||||
Context ctx = view.getContext();
|
||||
AppCache.getInstance(ctx).removeCacheFile(ctx, uri);
|
||||
} catch (FileNotFoundException fnfe) {
|
||||
// this actually only deletes the row in the provider,
|
||||
// not the actual file, but it will be overwritten in the reload.
|
||||
@ -315,9 +317,10 @@ public class I2PWebViewClient extends WebViewClient {
|
||||
protected Integer doInBackground(String... urls) {
|
||||
final String url = urls[0];
|
||||
Uri uri = Uri.parse(url);
|
||||
File cacheFile = AppCache.getInstance(_ctx).getCacheFile(uri);
|
||||
final AppCache cache = AppCache.getInstance(_ctx);
|
||||
File cacheFile = cache.getCacheFile(uri);
|
||||
if (cacheFile.exists()) {
|
||||
final Uri resUri = AppCache.getInstance(_ctx).getCacheUri(uri);
|
||||
final Uri resUri = cache.getCacheUri(_ctx, uri);
|
||||
Util.d("Loading " + url + " from resource cache " + resUri);
|
||||
_view.post(new Runnable() {
|
||||
@Override
|
||||
@ -335,7 +338,7 @@ public class I2PWebViewClient extends WebViewClient {
|
||||
//EepGetFetcher fetcher = new EepGetFetcher(url);
|
||||
OutputStream out = null;
|
||||
try {
|
||||
out = AppCache.getInstance(_ctx).createCacheFile(uri);
|
||||
out = cache.createCacheFile(_ctx, uri);
|
||||
// write error to stream
|
||||
EepGetFetcher fetcher = new EepGetFetcher(url, out, true);
|
||||
fetcher.addStatusListener(this);
|
||||
@ -348,11 +351,11 @@ public class I2PWebViewClient extends WebViewClient {
|
||||
if (success) {
|
||||
// store in cache, get content URL, and load that way
|
||||
// Set as current base
|
||||
final Uri content = AppCache.getInstance(_ctx).addCacheFile(uri, true);
|
||||
final Uri content = cache.addCacheFile(_ctx, uri, true);
|
||||
if (content != null) {
|
||||
Util.d("Stored cache in " + content);
|
||||
} else {
|
||||
AppCache.getInstance(_ctx).removeCacheFile(uri);
|
||||
cache.removeCacheFile(_ctx, uri);
|
||||
Util.d("cache create error");
|
||||
return 0;
|
||||
}
|
||||
@ -391,7 +394,7 @@ public class I2PWebViewClient extends WebViewClient {
|
||||
if (fis != null) try { fis.close(); } catch (IOException ioe) {}
|
||||
}
|
||||
}
|
||||
AppCache.getInstance(_ctx).removeCacheFile(uri);
|
||||
cache.removeCacheFile(_ctx, uri);
|
||||
Util.d("loading error data URL: " + url);
|
||||
final String finalMsg = msg;
|
||||
_view.post(new Runnable() {
|
||||
@ -439,8 +442,9 @@ public class I2PWebViewClient extends WebViewClient {
|
||||
} else {
|
||||
// nothing
|
||||
}
|
||||
} catch (IllegalArgumentException iae) {
|
||||
} catch (RuntimeException iae) {
|
||||
// throws IAE - not attached to window manager - perhaps due to screen rotation?
|
||||
// Also includes android.view.WindowManager$BadTokenException extends RuntimeException
|
||||
Util.e("Error while updating I2PWebViewClient dialog", iae);
|
||||
}
|
||||
}
|
||||
|
@ -7,6 +7,8 @@ import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.TextView;
|
||||
|
||||
import java.util.Locale;
|
||||
|
||||
import com.eowise.recyclerview.stickyheaders.StickyHeadersAdapter;
|
||||
|
||||
import net.i2p.android.router.R;
|
||||
@ -49,7 +51,7 @@ public class AlphanumericHeaderAdapter implements StickyHeadersAdapter<Alphanume
|
||||
|
||||
@Override
|
||||
public void onBindViewHolder(ViewHolder headerViewHolder, int position) {
|
||||
String sortString = mAdapter.getSortString(position).toUpperCase();
|
||||
String sortString = mAdapter.getSortString(position).toUpperCase(Locale.getDefault());
|
||||
if (sortString.isEmpty())
|
||||
headerViewHolder.itemView.setVisibility(View.GONE);
|
||||
else {
|
||||
@ -63,7 +65,7 @@ public class AlphanumericHeaderAdapter implements StickyHeadersAdapter<Alphanume
|
||||
|
||||
@Override
|
||||
public long getHeaderId(int position) {
|
||||
String sortString = mAdapter.getSortString(position).toUpperCase();
|
||||
String sortString = mAdapter.getSortString(position).toUpperCase(Locale.getDefault());
|
||||
if (sortString.isEmpty())
|
||||
return Integer.MAX_VALUE;
|
||||
|
||||
|
@ -3,19 +3,17 @@ package net.i2p.android.util;
|
||||
import android.support.v4.app.Fragment;
|
||||
import android.support.v4.app.FragmentManager;
|
||||
import android.support.v4.app.FragmentPagerAdapter;
|
||||
import android.util.SparseArray;
|
||||
import android.view.ViewGroup;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
public abstract class MemoryFragmentPagerAdapter extends FragmentPagerAdapter {
|
||||
private FragmentManager mFragmentManager;
|
||||
private Map<Integer, String> mFragmentTags;
|
||||
private final FragmentManager mFragmentManager;
|
||||
private final SparseArray<String> mFragmentTags;
|
||||
|
||||
public MemoryFragmentPagerAdapter(FragmentManager fm) {
|
||||
super(fm);
|
||||
mFragmentManager = fm;
|
||||
mFragmentTags = new HashMap<>();
|
||||
mFragmentTags = new SparseArray<>();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -11,7 +11,7 @@
|
||||
</ul>
|
||||
|
||||
<h2>Using clients with pre-configured tunnels</h2>
|
||||
<p>The app starts an HTTP proxy tunnel at localhost port 4444 and IRC client tunnels at localhost ports 6668 - 6672. The IRC clients are "shared clients" on the same tunnels. Once you see the tunnel icon turn green on the main console (several minutes after startup), you should be able to connect.</p>
|
||||
<p>The app starts an HTTP proxy tunnel at 127.0.0.1 port 4444 and IRC client tunnels at 127.0.0.1 ports 6668 - 6672. The IRC clients are "shared clients" on the same tunnels. Once you see the tunnel icon turn green on the main console (several minutes after startup), you should be able to connect.</p>
|
||||
|
||||
<h2>What does the clock icon on a yellow background mean?</h2>
|
||||
<p>When a tunnel's indicator is yellow with a clock icon, the tunnel is in standby mode. This means that I2P has not built the tunnel yet, but will do so automatically when you start using it. This helps to minimize resource use and conserve battery life.</p>
|
||||
|
@ -1,11 +1,11 @@
|
||||
<html>
|
||||
<head></head>
|
||||
<body>
|
||||
<h2>How to configure Orweb:</h2>
|
||||
<ol>
|
||||
<li>Open Orweb's settings menu.</li>
|
||||
<li>Change the "Proxy Port" to <code>4444</code>.</li>
|
||||
<li>Exit Orweb using the back button, then open it again.</li>
|
||||
</ol>
|
||||
<h2>Sorry, this browser is unsupported</h2>
|
||||
<ul>
|
||||
<li>OrFox has been deprecated by the Guardian Project in favor of Tor
|
||||
Browser for Android. It is no longer supported.
|
||||
</li>
|
||||
</ul>
|
||||
</body>
|
||||
</html>
|
||||
</html>
|
||||
|
@ -1,17 +1,11 @@
|
||||
<html>
|
||||
<head></head>
|
||||
<body>
|
||||
<h2>How to configure Orfox:</h2>
|
||||
<ol>
|
||||
<li>Install the ProxyMob add-on. Click <a
|
||||
href="https://guardianproject.info/downloads/proxymob.xpi">HERE</a>, and choose to open
|
||||
the URL in Firefox.
|
||||
<h2>Sorry, this browser is unsupported</h2>
|
||||
<ul>
|
||||
<li>OrFox has been deprecated by the Guardian Project in favor of Tor
|
||||
Browser for Android. It is no longer supported.
|
||||
</li>
|
||||
<li>In the main Firefox menu, click "Tools", then "Add-ons".</li>
|
||||
<li>Click on "Proxy Mobile".</li>
|
||||
<li>Change the value of "HTTP Proxy Port" to <code>4444</code>.</li>
|
||||
<li>Change the value of "HTTPS Proxy Port" to <code>4444</code>.</li>
|
||||
<li>You can now browse I2P eepsites!</li>
|
||||
</ol>
|
||||
</ul>
|
||||
</body>
|
||||
</html>
|
||||
</html>
|
||||
|
@ -9,8 +9,8 @@
|
||||
<p>With this app installed, other apps that are designed for I2P will use it automatically.</p>
|
||||
|
||||
<h2>Pre-configured HTTP proxy</h2>
|
||||
<p>The app starts an HTTP proxy at localhost port 4444. To use it, configure your browser's HTTP proxy setting to use localhost:4444.</p>
|
||||
<p>The app starts an HTTP proxy at 127.0.0.1 port 4444. To use it, configure your browser's HTTP proxy setting to use 127.0.0.1:4444.</p>
|
||||
<p>The HTTP proxy is tested with the "Orweb" app. It should also work with Firefox 4 Mobile and the ProxyMob Firefox plugin, if you have at least 512 MB of RAM.</p>
|
||||
<p>See the "Browser configuration" help page for more info.</p>
|
||||
</body>
|
||||
</html>
|
||||
</html>
|
||||
|
35
app/src/main/res/raw/help_org_gnu_icecat.html
Normal file
35
app/src/main/res/raw/help_org_gnu_icecat.html
Normal file
@ -0,0 +1,35 @@
|
||||
<html>
|
||||
<head></head>
|
||||
<body>
|
||||
<h2>How to configure GNU IceCat:</h2>
|
||||
<ol>
|
||||
<li>Click <a href="about:config?filter=network.proxy">HERE</a>, and choose to open the URL in IceCatMobile.</li>
|
||||
<li>Change the value of "network.proxy.type" to <code>1</code>.</li>
|
||||
<li>Change the value of "network.proxy.http" to <code>127.0.0.1</code>.</li>
|
||||
<li>Change the value of "network.proxy.http_port" to <code>4444</code>.</li>
|
||||
<li>Change the value of "network.proxy.ssl" to <code>127.0.0.1</code>.</li>
|
||||
<li>Change the value of "network.proxy.ssl_port" to <code>4444</code>.</li>
|
||||
<li>Change the value of "media.peerconnection.ice.proxy_only" to <code>true</code>.</li>
|
||||
<li>You may also wish to install plugins to help manage your browser's
|
||||
default javascript settings, such as NoScript and/or uMatrix, and use
|
||||
Private Browsing to manage your browser's cache.
|
||||
</li>
|
||||
<li>You can now browse I2P eepsites!</li>
|
||||
</ol>
|
||||
<h3>Alternate Configuration(Requires Root!)</h3>
|
||||
<ol>
|
||||
<li>Install <a href="https://github.com/v1nc/user.js-updater">user.js-updater</a></li>
|
||||
<li>Select IceCatMobile from the list of browsers</li>
|
||||
<li>Paste the following URL where it says "type custom user.js url" <a href="https://github.com/eyedeekay/firefox.profile.i2p/raw/master/firefox.profile.i2p/user.js">https://github.com/eyedeekay/firefox.profile.i2p/raw/master/firefox.profile.i2p/user.js</a></li>
|
||||
<li>Tap "Update"</li>
|
||||
<li>You can now browse I2P eepsites!</li>
|
||||
</ol>
|
||||
<h3>Experimental Rootless Configuration via Webextension</h3>
|
||||
<strong><p>Use at your own risk</p></strong>
|
||||
<ol>
|
||||
<li>Open this link in GNU IceCat and get the WebExtension from <a href="https://github.com/eyedeekay/i2psetproxy.js/releases">Github</a></li>
|
||||
<li>Click through the "Blocked Extension" warning</li>
|
||||
<li>You can now browse I2P eepsites!</li>
|
||||
</ol>
|
||||
</body>
|
||||
</html>
|
35
app/src/main/res/raw/help_org_mozilla_fennec_fdroid.html
Normal file
35
app/src/main/res/raw/help_org_mozilla_fennec_fdroid.html
Normal file
@ -0,0 +1,35 @@
|
||||
<html>
|
||||
<head></head>
|
||||
<body>
|
||||
<h2>How to configure Fennec Firefox:</h2>
|
||||
<ol>
|
||||
<li>Click <a href="about:config?filter=proxy">HERE</a>, and choose to open the URL in Fennec.</li>
|
||||
<li>Change the value of "network.proxy.type" to <code>1</code>.</li>
|
||||
<li>Change the value of "network.proxy.http" to <code>127.0.0.1</code>.</li>
|
||||
<li>Change the value of "network.proxy.http_port" to <code>4444</code>.</li>
|
||||
<li>Change the value of "network.proxy.ssl" to <code>127.0.0.1</code>.</li>
|
||||
<li>Change the value of "network.proxy.ssl_port" to <code>4444</code>.</li>
|
||||
<li>Change the value of "media.peerconnection.ice.proxy_only" to <code>true</code>.</li>
|
||||
<li>You may also wish to install plugins to help manage your browser's
|
||||
default javascript settings, such as NoScript and/or uMatrix, and use
|
||||
Private Browsing to manage your browser's cache.
|
||||
</li>
|
||||
<li>You can now browse I2P eepsites!</li>
|
||||
</ol>
|
||||
<h3>Alternate Configuration(Requires Root!)</h3>
|
||||
<ol>
|
||||
<li>Install <a href="https://github.com/v1nc/user.js-updater">user.js-updater</a></li>
|
||||
<li>Select Fennec from the list of browsers</li>
|
||||
<li>Paste the following URL where it says "type custom user.js url" <a href="https://github.com/eyedeekay/firefox.profile.i2p/raw/master/firefox.profile.i2p/user.js">https://github.com/eyedeekay/firefox.profile.i2p/raw/master/firefox.profile.i2p/user.js</a></li>
|
||||
<li>Tap "Update"</li>
|
||||
<li>You can now browse I2P eepsites!</li>
|
||||
</ol>
|
||||
<h3>Experimental Rootless Configuration via Webextension</h3>
|
||||
<strong><p>Use at your own risk</p></strong>
|
||||
<ol>
|
||||
<li>Open this link in Fennec and get the WebExtension from <a href="https://github.com/eyedeekay/i2psetproxy.js/releases">Github</a></li>
|
||||
<li>Click through the "Blocked Extension" warning</li>
|
||||
<li>You can now browse I2P eepsites!</li>
|
||||
</ol>
|
||||
</body>
|
||||
</html>
|
@ -3,12 +3,32 @@
|
||||
<body>
|
||||
<h2>How to configure Firefox:</h2>
|
||||
<ol>
|
||||
<li>Click <a href="about:config?filter=network.proxy">HERE</a>, and choose to open the URL in Firefox.</li>
|
||||
<li>Click <a href="about:config?filter=proxy">HERE</a>, and choose to open the URL in Firefox.</li>
|
||||
<li>Change the value of "network.proxy.type" to <code>1</code>.</li>
|
||||
<li>Change the value of "network.proxy.http" to <code>127.0.0.1</code>.</li>
|
||||
<li>Change the value of "network.proxy.http_port" to <code>4444</code>.</li>
|
||||
<li>Change the value of "network.proxy.ssl" to <code>127.0.0.1</code>.</li>
|
||||
<li>Change the value of "network.proxy.ssl_port" to <code>4444</code>.</li>
|
||||
<li>Change the value of "media.peerconnection.ice.proxy_only" to <code>true</code>.</li>
|
||||
<li>You may also wish to install plugins to help manage your browser's
|
||||
default javascript settings, such as NoScript and/or uMatrix, and use
|
||||
Private Browsing to manage your browser's cache.
|
||||
</li>
|
||||
<li>You can now browse I2P eepsites!</li>
|
||||
</ol>
|
||||
<h3>Alternate Configuration(Requires Root!)</h3>
|
||||
<ol>
|
||||
<li>Install <a href="https://github.com/v1nc/user.js-updater">user.js-updater</a></li>
|
||||
<li>Select Firefox from the list of browsers</li>
|
||||
<li>Paste the following URL where it says "type custom user.js url" <a href="https://github.com/eyedeekay/firefox.profile.i2p/raw/master/firefox.profile.i2p/user.js">https://github.com/eyedeekay/firefox.profile.i2p/raw/master/firefox.profile.i2p/user.js</a></li>
|
||||
<li>Tap "Update"</li>
|
||||
<li>You can now browse I2P eepsites!</li>
|
||||
</ol>
|
||||
<h3>Experimental Rootless Configuration via Webextension</h3>
|
||||
<strong><p>Use at your own risk</p></strong>
|
||||
<ol>
|
||||
<li>Open this link in Firefox and get the WebExtension from <a href="https://github.com/eyedeekay/i2psetproxy.js/releases">Github</a></li>
|
||||
<li>Click through the "Blocked Extension" warning</li>
|
||||
<li>You can now browse I2P eepsites!</li>
|
||||
</ol>
|
||||
</body>
|
||||
|
@ -4,6 +4,6 @@
|
||||
<h2>This browser is unknown</h2>
|
||||
<p>We have not tested this browser with I2P, so we don't know anything about it.</p>
|
||||
<p>But if this browser supports proxies, it will work with I2P.</p>
|
||||
<p>Configure this browser's HTTP and HTTPS proxy settings to use <code>localhost:4444</code>.</p>
|
||||
<p>Configure this browser's HTTP and HTTPS proxy settings to use <code>127.0.0.1:4444</code>.</p>
|
||||
</body>
|
||||
</html>
|
||||
</html>
|
||||
|
@ -8,7 +8,7 @@ tunnel.0.type=httpclient
|
||||
tunnel.0.sharedClient=false
|
||||
tunnel.0.interface=127.0.0.1
|
||||
tunnel.0.listenPort=4444
|
||||
tunnel.0.proxyList=false.i2p
|
||||
tunnel.0.proxyList=false.i2p,blue.proxynet.i2p
|
||||
tunnel.0.i2cpHost=127.0.0.1
|
||||
tunnel.0.i2cpPort=7654
|
||||
tunnel.0.option.inbound.nickname=I2P HTTP Proxy
|
||||
@ -18,7 +18,7 @@ tunnel.0.option.i2cp.reduceIdleTime=600000
|
||||
tunnel.0.option.i2cp.reduceOnIdle=true
|
||||
tunnel.0.option.i2cp.reduceQuantity=1
|
||||
tunnel.0.option.i2p.streaming.connectDelay=1000
|
||||
tunnel.0.option.i2ptunnel.httpclient.SSLOutproxies=false.i2p
|
||||
tunnel.0.option.i2ptunnel.httpclient.SSLOutproxies=false.i2p,blue.proxynet.i2p
|
||||
tunnel.0.option.inbound.length=2
|
||||
tunnel.0.option.inbound.lengthVariance=0
|
||||
tunnel.0.option.outbound.length=2
|
||||
@ -100,28 +100,3 @@ tunnel.3.option.outbound.length=2
|
||||
tunnel.3.option.outbound.lengthVariance=0
|
||||
tunnel.3.option.outbound.priority=15
|
||||
tunnel.3.startOnLoad=true
|
||||
|
||||
# irc
|
||||
tunnel.4.name=IRC welterde
|
||||
tunnel.4.description=IRC tunnel to welterde's network
|
||||
tunnel.4.type=ircclient
|
||||
tunnel.4.sharedClient=true
|
||||
tunnel.4.interface=127.0.0.1
|
||||
tunnel.4.listenPort=6669
|
||||
tunnel.4.targetDestination=irc.welterde.i2p
|
||||
tunnel.4.i2cpHost=127.0.0.1
|
||||
tunnel.4.i2cpPort=7654
|
||||
tunnel.4.option.inbound.nickname=shared clients
|
||||
tunnel.4.option.outbound.nickname=shared clients
|
||||
tunnel.4.option.i2cp.delayOpen=true
|
||||
tunnel.4.option.i2cp.reduceIdleTime=600000
|
||||
tunnel.4.option.i2cp.reduceOnIdle=true
|
||||
tunnel.4.option.i2cp.reduceQuantity=1
|
||||
tunnel.4.option.i2p.streaming.connectDelay=1000
|
||||
tunnel.4.option.i2p.streaming.maxWindowSize=16
|
||||
tunnel.4.option.inbound.length=2
|
||||
tunnel.4.option.inbound.lengthVariance=0
|
||||
tunnel.4.option.outbound.length=2
|
||||
tunnel.4.option.outbound.lengthVariance=0
|
||||
tunnel.4.option.outbound.priority=15
|
||||
tunnel.4.startOnLoad=true
|
109
app/src/main/res/values-cs/strings.xml
Normal file
109
app/src/main/res/values-cs/strings.xml
Normal file
@ -0,0 +1,109 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<resources>
|
||||
<string name="app_name">I2P</string>
|
||||
<string name="desc_i2p_logo">I2P logo</string>
|
||||
<string name="welcome_new_install">Vítejte v I2P! Tato aplikace je ALPHA software a neposkytuje silnou anonymitu. Prosím přečtěte si poznámky k verzi a informace o licenci.</string>
|
||||
<string name="welcome_new_version">Nová verze aktualizována. Prosím přečtěte si poznámky k verzi. Verze:</string>
|
||||
<string name="label_tunnels">Tunely</string>
|
||||
<string name="label_status">Status</string>
|
||||
<string name="label_addressbook">Adresář</string>
|
||||
<string name="label_i2ptunnel_client">Tunely klienta</string>
|
||||
<string name="label_i2ptunnel_server">Tunely serveru</string>
|
||||
<string name="label_logs">Záznamy</string>
|
||||
<string name="label_error_logs">Záznamy chyb</string>
|
||||
<string name="label_news">Novinky</string>
|
||||
<string name="label_peers_status">Peery</string>
|
||||
<string name="label_release_notes">Poznámky k verzi</string>
|
||||
<string name="label_licenses">Licence</string>
|
||||
<string name="label_browse">Procházet</string>
|
||||
<string name="label_graphs">Grafy</string>
|
||||
<string name="button_router_off">Dlouze stiskněte pro spuštění I2P</string>
|
||||
<string name="button_router_on">I2P běží (dlouze stiskněte pro zastavení)</string>
|
||||
<string name="hidden">Skryté</string>
|
||||
<!--Parameter is a time, e.g. 32s or 2m-->
|
||||
<!--Character to indicate a client tunnel. Usually first letter of the word "client".-->
|
||||
<string name="char_client_tunnel">C</string>
|
||||
<!--Character to indicate a server tunnel. Usually first letter of the word "server".-->
|
||||
<string name="char_server_tunnel">B</string>
|
||||
<string name="download">Stáhnout</string>
|
||||
<string name="upload">Nahrát</string>
|
||||
<string name="first_start_title">Gratulujeme k nainstalování I2P!</string>
|
||||
<string name="first_start_welcome"><b>Vítejte v I2P\'</b>Prosíme<b>buďte trpěliví</b> dokud I2P nenastartuje a najde peery.</string>
|
||||
<string name="first_start_read">Během čekání si prosím přečtěte poznámky k verzi a úvodní stránku.</string>
|
||||
<string name="first_start_faq">Jakmile budete mít klientské tunely, prosíme <b>podívejte se</b> na naše FAQ:</string>
|
||||
<string name="first_start_faq_nonanon">Nebo použijte neanonymní link pokud nechcete čekat na tunely:</string>
|
||||
<string name="first_start_irc">Nasměrujte svého IRC klienta na <b>localhost:6668</b> a pozdravte nás na:</string>
|
||||
<string name="action_search">Hledat</string>
|
||||
<string name="action_add">Přidat</string>
|
||||
<string name="action_edit">Editovat</string>
|
||||
<string name="action_delete">Smazat</string>
|
||||
<string name="action_i2ptunnel_start">Zapnout tunel</string>
|
||||
<string name="action_i2ptunnel_stop">Vypnout tunel</string>
|
||||
<string name="action_i2ptunnel_start_all">Zapnout všechny tunely</string>
|
||||
<string name="action_i2ptunnel_stop_all">Vypnout všechny tunely</string>
|
||||
<string name="action_i2ptunnel_restart_all">Restartovat všechny tunely</string>
|
||||
<string name="action_reload">Načíst znovu</string>
|
||||
<string name="action_refresh">Obnovit</string>
|
||||
<string name="hint_search_addressbook">Prohledat adresář</string>
|
||||
<string name="action_reload_subscriptions">Znovu načíst odběry</string>
|
||||
<string name="router_not_running">Tento router nepracuje</string>
|
||||
<string name="stats_not_ready">Manažer statistik ještě není připraven. Zkuste to prosím později.</string>
|
||||
<string name="no_graphs_configured">Žádné grafy nebyly konfigurovány. Můžete si vybrat převod statistik do grafů v menu nastavení. Jakékoliv změny se projeví po 60 sekundách.</string>
|
||||
<string name="configure_graphs">Konfigurovat grafy</string>
|
||||
<string name="country">Země</string>
|
||||
<string name="version">Verze</string>
|
||||
<string name="netdb_routers_empty">Žádné routery ve vaší NetDB</string>
|
||||
<string name="netdb_leases_empty">Žádné LeaseSets ve vaší NetDB</string>
|
||||
<string name="menu_settings">Nastavení</string>
|
||||
<string name="settings_enable">Zapnout</string>
|
||||
<string name="settings_label_network">Síť</string>
|
||||
<string name="settings_label_appearance">Podoba</string>
|
||||
<string name="settings_label_language">Jazyk</string>
|
||||
<string name="settings_default">Výchozí</string>
|
||||
<string name="settings_label_advanced">Pokročilé</string>
|
||||
<string name="settings_label_expl_length">Délka</string>
|
||||
<string name="menu_about">O programu</string>
|
||||
<string name="about_version">Version:</string>
|
||||
<string name="menu_help">Pomoc</string>
|
||||
<string name="general">Hlavní</string>
|
||||
<string name="addressbook_add_wizard_k_name">Jméno</string>
|
||||
<string name="addressbook_add_wizard_k_destination">Cíl</string>
|
||||
<string name="i2ptunnel_type_client">Standardní klient</string>
|
||||
<string name="i2ptunnel_type_httpclient">Klient pro HTTP</string>
|
||||
<string name="i2ptunnel_type_ircclient">Klient pro IRC</string>
|
||||
<string name="i2ptunnel_type_server">Standardní server</string>
|
||||
<string name="i2ptunnel_type_httpserver">HTTP server</string>
|
||||
<string name="i2ptunnel_type_sockstunnel">SOCKS 4/4a/5 proxy</string>
|
||||
<string name="i2ptunnel_type_socksirctunnel">SOCKS IRC proxy</string>
|
||||
<string name="i2ptunnel_type_connectclient">CONNECT/SSL/HTTPS proxy</string>
|
||||
<string name="i2ptunnel_type_ircserver">IRC server</string>
|
||||
<string name="i2ptunnel_type_streamrclient">Streamr klient</string>
|
||||
<string name="i2ptunnel_type_streamrserver">Streamr server</string>
|
||||
<string name="i2ptunnel_type_httpbidirserver">HTTP bidir</string>
|
||||
<string name="i2ptunnel_new_tunnel">Nový tunel</string>
|
||||
<string name="i2ptunnel_msg_config_saved">Změny nastavení byly uloženy</string>
|
||||
<string name="i2ptunnel_msg_config_save_failed">Nepodařilo se uložit nastavení</string>
|
||||
<string name="i2ptunnel_msg_tunnel_starting">Startuji tunel</string>
|
||||
<string name="i2ptunnel_msg_tunnel_stopping">Zastavuji tunel</string>
|
||||
<string name="i2ptunnel_wizard_k_name">Jméno</string>
|
||||
<string name="i2ptunnel_wizard_k_desc">Popis</string>
|
||||
<string name="i2ptunnel_wizard_k_dest">Cíl</string>
|
||||
<string name="i2ptunnel_wizard_k_outproxies">Výstupní proxy (Outproxies)</string>
|
||||
<string name="next">Další</string>
|
||||
<string name="prev">Předchozí</string>
|
||||
<string name="finish">Předložit</string>
|
||||
<string name="enabled">Povoleno</string>
|
||||
<string name="i2ptunnel_view_target">Cíl</string>
|
||||
<string name="name">Jméno</string>
|
||||
<string name="description">Popis</string>
|
||||
<string name="outproxies">Výstupní proxy (Outproxies)</string>
|
||||
<string name="use_ssl">Použít SSL</string>
|
||||
<string name="disabled">Vypnuto</string>
|
||||
<string name="whitelist">Seznam povolených (whitelist)</string>
|
||||
<string name="blacklist">Seznam zakázaných (blacklist)</string>
|
||||
<string name="http_client">Klient pro HTTP</string>
|
||||
<string name="username">Uživatelské jméno</string>
|
||||
<string name="password">Heslo</string>
|
||||
<string name="other">Další</string>
|
||||
<string name="no_messages">Žádné zprávy</string>
|
||||
</resources>
|
91
app/src/main/res/values-da/strings.xml
Normal file
91
app/src/main/res/values-da/strings.xml
Normal file
@ -0,0 +1,91 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<resources>
|
||||
<string name="label_tunnels">Tunneler</string>
|
||||
<string name="label_status">Status</string>
|
||||
<string name="label_addressbook">Adressebog</string>
|
||||
<string name="label_logs">Logs</string>
|
||||
<string name="label_peers_status">Peers</string>
|
||||
<string name="label_release_notes">Udgivelsesnoter</string>
|
||||
<string name="label_browse">Brows</string>
|
||||
<string name="label_graphs">Grafer</string>
|
||||
<string name="hidden">Gemt</string>
|
||||
<string name="testing">Tester</string>
|
||||
<string name="firewalled">Firewalled</string>
|
||||
<string name="symmetric_nat">Symmetric NAT</string>
|
||||
<!--Parameter is a time, e.g. 32s or 2m-->
|
||||
<string name="uptime">Oppetid</string>
|
||||
<!--Character to indicate a client tunnel. Usually first letter of the word "client".-->
|
||||
<string name="char_client_tunnel">C</string>
|
||||
<!--Character to indicate a server tunnel. Usually first letter of the word "server".-->
|
||||
<string name="char_server_tunnel">S</string>
|
||||
<string name="download">Hente</string>
|
||||
<string name="upload">Upload</string>
|
||||
<string name="action_search">Søg</string>
|
||||
<string name="action_add">Tilføje</string>
|
||||
<string name="action_edit">Ændre</string>
|
||||
<string name="action_delete">Slet</string>
|
||||
<string name="action_reload">Genindlæs</string>
|
||||
<string name="action_refresh">Genopfrisk</string>
|
||||
<string name="routers">Routere</string>
|
||||
<string name="leasesets">LeaseSets</string>
|
||||
<string name="country">Land</string>
|
||||
<string name="transport">Transport</string>
|
||||
<string name="version">Version</string>
|
||||
<string name="count">Antal</string>
|
||||
<string name="tname_0">Gemt eller under opstart</string>
|
||||
<string name="menu_settings">Indstillinger</string>
|
||||
<string name="settings_enable">Aktiver</string>
|
||||
<string name="settings_label_bandwidth">Båndbredde</string>
|
||||
<string name="settings_label_network">Netværk</string>
|
||||
<string name="settings_label_logging">Logning</string>
|
||||
<string name="settings_label_default_log_level">Standard log niveau</string>
|
||||
<string name="settings_label_appearance">Udseende</string>
|
||||
<string name="settings_label_language">Sprog</string>
|
||||
<string name="settings_default">Standard</string>
|
||||
<string name="settings_label_advanced">Avanceret</string>
|
||||
<string name="settings_label_transports">Transporter</string>
|
||||
<string name="settings_label_expl_length">Længde</string>
|
||||
<string name="settings_label_expl_quantity">Mængde</string>
|
||||
<string name="settings_label_expl_backupQuantity">Reserve mængde</string>
|
||||
<string name="menu_about">Om</string>
|
||||
<string name="about_version">Version:</string>
|
||||
<string name="menu_help">Hjælp</string>
|
||||
<string name="general">Genarelt </string>
|
||||
<string name="addressbook_add_wizard_k_name">Navn</string>
|
||||
<string name="addressbook_add_wizard_k_destination">Destination</string>
|
||||
<string name="i2ptunnel_type_client">Standard klient</string>
|
||||
<string name="i2ptunnel_type_httpclient">HTTP klient</string>
|
||||
<string name="i2ptunnel_type_ircclient">Klient for IRC</string>
|
||||
<string name="i2ptunnel_type_server">Standard server</string>
|
||||
<string name="i2ptunnel_type_httpserver">HTTP server</string>
|
||||
<string name="i2ptunnel_type_sockstunnel">SOCKS 4/4a/5 proxy</string>
|
||||
<string name="i2ptunnel_type_socksirctunnel">SOCKS IRC proxy</string>
|
||||
<string name="i2ptunnel_type_connectclient">CONNECT/SSL/HTTPS proxy</string>
|
||||
<string name="i2ptunnel_type_ircserver">Server for IRC</string>
|
||||
<string name="i2ptunnel_type_streamrclient">Klient for Streamr</string>
|
||||
<string name="i2ptunnel_type_streamrserver">Server for Streamr</string>
|
||||
<string name="i2ptunnel_type_httpbidirserver">HTTP bidir</string>
|
||||
<string name="i2ptunnel_new_tunnel">Ny Tunnel</string>
|
||||
<string name="i2ptunnel_msg_config_saved">Konfiguration ændringer gemt</string>
|
||||
<string name="i2ptunnel_msg_config_save_failed">Det mislykkedes at gemme konfigurationen</string>
|
||||
<string name="i2ptunnel_msg_tunnel_starting">Starter tunnel</string>
|
||||
<string name="i2ptunnel_msg_tunnel_stopping">Stopper tunnel</string>
|
||||
<string name="i2ptunnel_wizard_k_name">Navn</string>
|
||||
<string name="i2ptunnel_wizard_k_desc">Beskrivelse</string>
|
||||
<string name="i2ptunnel_wizard_k_dest">Destination</string>
|
||||
<string name="next">Næste</string>
|
||||
<string name="prev">Foregående</string>
|
||||
<string name="finish">Indsend</string>
|
||||
<string name="review">Gennemgå</string>
|
||||
<string name="enabled">Aktiveret</string>
|
||||
<string name="i2ptunnel_view_target">Mål</string>
|
||||
<string name="name">Navn</string>
|
||||
<string name="description">Beskrivelse</string>
|
||||
<string name="use_ssl">Brug SSL</string>
|
||||
<string name="disabled">Deaktiveret</string>
|
||||
<string name="http_client">HTTP klient</string>
|
||||
<string name="username">Brugernavn</string>
|
||||
<string name="password">Adgangskode</string>
|
||||
<string name="other">Andet</string>
|
||||
<string name="all">Alle</string>
|
||||
</resources>
|
@ -10,7 +10,7 @@
|
||||
<string name="label_console">Konsole</string>
|
||||
<string name="label_addresses">Adressen</string>
|
||||
<string name="label_addressbook">Adressbuch</string>
|
||||
<string name="label_i2ptunnel_client">Client Tunnel</string>
|
||||
<string name="label_i2ptunnel_client">Clienttunnel</string>
|
||||
<string name="label_i2ptunnel_server">Servertunnel</string>
|
||||
<string name="label_logs">Statusberichte</string>
|
||||
<string name="label_error_logs">Fehlerprotokolle</string>
|
||||
@ -30,7 +30,7 @@
|
||||
<string name="testing">Im Test</string>
|
||||
<string name="firewalled">Durch Firewall geschützt</string>
|
||||
<string name="symmetric_nat">Symmetrisches NAT</string>
|
||||
<string name="net_status_error_i2cp">Klientenmanager I2CP Fehler - bitte Fehlerberichte überprüfen</string>
|
||||
<string name="net_status_error_i2cp">Clientmanager I2CP Fehler - bitte Fehlerberichte überprüfen</string>
|
||||
<!--Parameter is a time, e.g. 32s or 2m-->
|
||||
<string name="net_status_error_skew">Zeitabweichung von %s</string>
|
||||
<string name="net_status_error_unresolved_tcp">Nicht aufgelöste TCP-Adresse</string>
|
||||
@ -42,7 +42,7 @@
|
||||
<string name="net_status_error_no_active_peers">Keine aktiven Teilnehmer - überprüfen Sie die Netzwerkverbindung und Firewall</string>
|
||||
<string name="net_status_error_udp_disabled_tcp_not_set">UDP deaktiviert und eingehender TCP-Host/Port nicht festgelegt</string>
|
||||
<string name="net_status_warn_firewalled_udp_disabled">Mit Firewall und deaktiviertem UDP</string>
|
||||
<string name="shared_clients">Mehrere Klienten</string>
|
||||
<string name="shared_clients">Mehrere Clients</string>
|
||||
<string name="uptime">Betriebszeit</string>
|
||||
<string name="active_peers">Aktive Teilnehmer</string>
|
||||
<string name="known_peers">Bekannte Teilnehmer</string>
|
||||
@ -58,9 +58,9 @@
|
||||
<string name="first_start_title">Herzlichen Glückwunsch, Sie haben I2P installiert!</string>
|
||||
<string name="first_start_welcome"><b>Willkommen im I2P</b> Bitte <b>haben Sie Geduld</b>, während I2P startet und Teilnehmer findet.</string>
|
||||
<string name="first_start_read">Lesen Sie bitte die Veröffentlichungshinweise und die Startseite während Sie warten.</string>
|
||||
<string name="first_start_faq">Sobald Sie Kliententunnels haben, <b>lesen</b> Sie bitte unsere FAQ:</string>
|
||||
<string name="first_start_faq_nonanon">Oder verwenden Sie unsere nicht-anonymen Links, wenn Sie nicht auf die Tunnel warten wollen.</string>
|
||||
<string name="first_start_irc">Verbinden Sie Ihren IRC-Klienten mit <b>localhost:6668</b> und schauen Sie bei uns vorbei:</string>
|
||||
<string name="first_start_faq">Sobald Sie Clienttunnel haben, <b>lesen</b> Sie bitte unsere FAQ:</string>
|
||||
<string name="first_start_faq_nonanon">Oder verwenden Sie unseren nicht-anonymen Link, wenn Sie nicht auf die Tunnel warten wollen:</string>
|
||||
<string name="first_start_irc">Verbinden Sie Ihren IRC-Client mit <b>localhost:6668</b> und schauen Sie bei uns vorbei:</string>
|
||||
<string name="action_search">Suche</string>
|
||||
<string name="action_add">Hinzufügen</string>
|
||||
<string name="action_edit">Bearbeiten</string>
|
||||
@ -102,8 +102,8 @@
|
||||
<string name="notification_status_waiting">I2P wartet auf eine Netzwerkverbindung</string>
|
||||
<string name="notification_status_starting_after_waiting">Netzwerk verbunden, I2P wird gestartet</string>
|
||||
<string name="notification_status_running">I2P läuft</string>
|
||||
<string name="notification_status_client_ready">Client-Tunnel sind bereit</string>
|
||||
<string name="notification_status_client_down">Client-Tunnel sind außer Betrieb</string>
|
||||
<string name="notification_status_client_ready">Clienttunnel sind bereit</string>
|
||||
<string name="notification_status_client_down">Clienttunnel sind außer Betrieb</string>
|
||||
<string name="notification_status_graceful">I2P wird in %s gestoppt</string>
|
||||
<string name="notification_status_stopping">I2P wird gestoppt</string>
|
||||
<string name="notification_status_stopping_after_net">Netzwerk getrennt, I2P wird gestoppt</string>
|
||||
@ -112,13 +112,13 @@
|
||||
<string name="notification_status_bw">Bandbreite: %1$sB/s eingehend / %2$sB/s ausgehend</string>
|
||||
<string name="notification_status_peers">Teilnehmer: %1$d aktiv, %2$d bekannt</string>
|
||||
<string name="notification_status_expl">Erkundungstunnel: %1$d/%2$d</string>
|
||||
<string name="notification_status_client">Kliententunnel: %1$d/%2$d</string>
|
||||
<string name="notification_status_client">Clienttunnel: %1$d/%2$d</string>
|
||||
<string name="menu_settings">Einstellungen</string>
|
||||
<string name="settings_enable">Erlauben</string>
|
||||
<string name="settings_desc_subscriptions">Abonnements-URLs</string>
|
||||
<string name="settings_label_bandwidth_net">Bandbreite und Netzwerk</string>
|
||||
<string name="settings_label_startOnBoot">Beim booten I2P starten</string>
|
||||
<string name="settings_desc_startOnBoot">Automatisch zu I2P verbinden wenn dieses Android Gerät startet</string>
|
||||
<string name="settings_label_startOnBoot">Beim Booten I2P starten</string>
|
||||
<string name="settings_desc_startOnBoot">Automatisch zu I2P verbinden wenn dieses Android-Gerät startet</string>
|
||||
<string name="settings_label_bandwidth">Bandbreite</string>
|
||||
<string name="settings_label_bw_inbound">Eingehende Übertragungsgeschwindigkeit</string>
|
||||
<string name="settings_desc_bw_inbound">Maximale eingehende Übertragungsgeschwindigkeit</string>
|
||||
@ -186,22 +186,22 @@
|
||||
<string name="nsu_iae_cannot_end_with">Hostnamen dürfen nicht auf \"%s\" enden</string>
|
||||
<string name="nsu_iae_cannot_contain">Hostnamen dürfen kein \"%s\" beinhalten</string>
|
||||
<string name="nsu_iae_requires_conversion">Hostname \"%s\" muss nach ASCII konvertiert werden, aber die Konvertierungsbibliothek ist in deiner Android-Version nicht verfügbar.</string>
|
||||
<string name="i2ptunnel_type_client">Standardklient</string>
|
||||
<string name="i2ptunnel_type_httpclient">HTTP-Klient</string>
|
||||
<string name="i2ptunnel_type_ircclient">IRC-Klient</string>
|
||||
<string name="i2ptunnel_type_client">Standardclient</string>
|
||||
<string name="i2ptunnel_type_httpclient">HTTP-Client</string>
|
||||
<string name="i2ptunnel_type_ircclient">IRC-Client</string>
|
||||
<string name="i2ptunnel_type_server">Standard-Server</string>
|
||||
<string name="i2ptunnel_type_httpserver">HTTP-Server</string>
|
||||
<string name="i2ptunnel_type_sockstunnel">SOCKS-4/4a/5-Proxy</string>
|
||||
<string name="i2ptunnel_type_socksirctunnel">SOCKS IRC-Proxy</string>
|
||||
<string name="i2ptunnel_type_connectclient">CONNECT/SSL/HTTPS-Proxy</string>
|
||||
<string name="i2ptunnel_type_ircserver">IRC-Server</string>
|
||||
<string name="i2ptunnel_type_streamrclient">Streamr-Klient</string>
|
||||
<string name="i2ptunnel_type_streamrclient">Streamr-Client</string>
|
||||
<string name="i2ptunnel_type_streamrserver">Streamr-Server</string>
|
||||
<string name="i2ptunnel_type_httpbidirserver">HTTP bidirektional</string>
|
||||
<string name="install_recommended_app">Empfohlene App installieren?</string>
|
||||
<string name="app_needed_for_this_tunnel_type">Sie müssen eine App installieren, um diesen Tunnel nutzen zu können. Möchten Sie die empfohlene App installieren?</string>
|
||||
<string name="i2ptunnel_not_initialized">Tunnel sind noch nicht initialisiert. Bitte laden Sie die Seite in zwei Minuten erneut.</string>
|
||||
<string name="no_configured_client_tunnels">Keine konfigurierten Client-Tunnel.</string>
|
||||
<string name="no_configured_client_tunnels">Keine konfigurierten Clienttunnel.</string>
|
||||
<string name="no_configured_server_tunnels">Keine konfigurierten Server-Tunnel.</string>
|
||||
<string name="i2ptunnel_new_tunnel">Neuer Tunnel</string>
|
||||
<string name="i2ptunnel_msg_config_saved">Änderungen gespeichert</string>
|
||||
@ -211,8 +211,8 @@
|
||||
<string name="i2ptunnel_delete_confirm_message">Tunnel löschen?</string>
|
||||
<string name="i2ptunnel_delete_confirm_button">Tunnel löschen</string>
|
||||
<string name="i2ptunnel_no_tunnel_details">Tunneldetails konnten nicht geladen werden</string>
|
||||
<string name="i2ptunnel_wizard_k_client_server">Klient oder Server</string>
|
||||
<string name="i2ptunnel_wizard_v_client">Kliententunnel</string>
|
||||
<string name="i2ptunnel_wizard_k_client_server">Client oder Server</string>
|
||||
<string name="i2ptunnel_wizard_v_client">Clienttunnel</string>
|
||||
<string name="i2ptunnel_wizard_v_server">Servertunnel</string>
|
||||
<string name="i2ptunnel_wizard_k_type">Tunneltyp</string>
|
||||
<string name="i2ptunnel_wizard_k_name">Name</string>
|
||||
@ -231,12 +231,12 @@
|
||||
<string name="enabled">Aktiviert</string>
|
||||
<string name="i2ptunnel_wizard_desc_name">Der Name des Tunnels zur Erkennung in der Tunnelliste.</string>
|
||||
<string name="i2ptunnel_wizard_desc_desc">Eine optionale, aber für Sie aussagekräftige Beschreibung des Tunnels.</string>
|
||||
<string name="i2ptunnel_wizard_desc_dest">Tragen Sie das I2P Ziel des Dienstes ein, zu welchem sich dieser Klient-Tunnel verbinden soll. Dies kann ein kompletter Base 64 Ziel-Schlüssel oder ein I2P Hostname von Ihrem Adressbuch sein.</string>
|
||||
<string name="i2ptunnel_wizard_desc_dest">Tragen Sie das I2P-Ziel des Dienstes ein, zu welchem sich dieser Clienttunnel verbinden soll. Dies kann ein kompletter Base-64-Zielschlüssel oder ein I2P-Hostname aus Ihrem Adressbuch sein.</string>
|
||||
<string name="i2ptunnel_wizard_desc_outproxies">Falls Sie Ausgangsproxies für diese Tunnelart kennen (entweder HTTP oder SOCKS), geben Sie sie hier ein. Trennen Sie mehrere Proxies mit Kommas.</string>
|
||||
<string name="i2ptunnel_wizard_desc_target_host">Das ist die IP, unter der der Dienst erreichbar ist. Normalerweise ist er auf der gleichen Maschine, also wird 127.0.0.1 automatisch ausgefüllt.</string>
|
||||
<string name="i2ptunnel_wizard_desc_target_port">Dies ist der Port, unter dem der Dienst erreichbar ist.</string>
|
||||
<string name="i2ptunnel_wizard_desc_reachable_on">Dies legt fest, welche Computer oder Smartphones den Tunnel erreichen können.</string>
|
||||
<string name="i2ptunnel_wizard_desc_binding_port">Dies ist der Port, über den der Klient den Tunnel lokal erreichen kann. Das ist auch der Klient-Port des bidirektionalen HTTP-Server-Tunnels.</string>
|
||||
<string name="i2ptunnel_wizard_desc_binding_port">Dies ist der Port, auf dem der Client auf den Tunnel lokal zugreifen kann. Das ist auch der Client-Port des bidirektionalen HTTP-Servertunnels.</string>
|
||||
<string name="i2ptunnel_wizard_desc_auto_start">Soll der Tunnel automatisch mit dem Router starten?</string>
|
||||
<string name="i2ptunnel_wizard_submit_confirm_message">Tunnel erstellen?</string>
|
||||
<string name="i2ptunnel_wizard_submit_confirm_button">Tunnel erstellen</string>
|
||||
@ -250,8 +250,8 @@
|
||||
<string name="auto_start">Automatischer Start</string>
|
||||
<string name="tunnel_summ_auto_start">Tunnel mit dem Router starten.</string>
|
||||
<string name="tunnel_cat_ports">Lokale Ports</string>
|
||||
<string name="shared_client">Gemeinsamer Klient</string>
|
||||
<string name="tunnel_summ_shared_client">Benutzt die selbe Destiantion und Tunnel wie andere geteilte Klienten </string>
|
||||
<string name="shared_client">Gemeinsamer Client</string>
|
||||
<string name="tunnel_summ_shared_client">Benutzt dasselbe Ziel und denselben Tunnel wie andere geteilte Clients</string>
|
||||
<string name="target_destination">Zielort</string>
|
||||
<string name="persistent_key">Persistenter Schlüssel</string>
|
||||
<string name="persistent_key_conflict_title">Neue Schlüssel beim erneuten Öffnen deaktivieren?</string>
|
||||
@ -259,13 +259,13 @@
|
||||
<string name="tunnel_summ_persistent_key">Ziel des Tunnels bei einem Neustart beibehalten</string>
|
||||
<string name="reachable_on">Erreichbarkeit ein</string>
|
||||
<string name="listen_port">Lauschport</string>
|
||||
<string name="client_ssl">Klient-SSL</string>
|
||||
<string name="tunnel_summ_client_ssl">Klienten müssen SSL zum Verbinden verwenden</string>
|
||||
<string name="client_ssl">Client-SSL</string>
|
||||
<string name="tunnel_summ_client_ssl">Clients müssen mit SSL verbinden</string>
|
||||
<string name="outproxies">Ausgangsproxies</string>
|
||||
<string name="ssl_outproxies">SSL-Ausgangsproxies</string>
|
||||
<string name="irc">IRC</string>
|
||||
<string name="enable_dcc">DCC aktivieren</string>
|
||||
<string name="tunnel_summ_enable_dcc">IRC-Klienten die Verwendung von DCC erlauben</string>
|
||||
<string name="tunnel_summ_enable_dcc">IRC-Clients die Verwendung von DCC erlauben</string>
|
||||
<string name="website_domain_name">Webseiten-Domainname</string>
|
||||
<string name="target_host">Zielhost</string>
|
||||
<string name="target_port">Zielport</string>
|
||||
@ -289,7 +289,7 @@
|
||||
<string name="tunnel_summ_unique_local">Verwenden Sie eindeutige localhost-IPs für jeden Client</string>
|
||||
<string name="multihome">Multihome</string>
|
||||
<string name="tunnel_summ_multihome">Aktiviere Optimierungen fürs Multihoming</string>
|
||||
<string name="client_connection_limits">Klient-Verbindungsbegrenzungen</string>
|
||||
<string name="client_connection_limits">Client-Verbindungsbegrenzungen</string>
|
||||
<string name="connections_per_minute">Verbindungen pro Minute</string>
|
||||
<string name="connections_per_hour">Verbindungen pro Stunde</string>
|
||||
<string name="connections_per_day">Verbindungen pro Tag</string>
|
||||
@ -306,7 +306,7 @@
|
||||
<string name="post_limits">POST-Begrenzungen</string>
|
||||
<string name="limit_period">Zeitabschnitt begrenzen</string>
|
||||
<string name="client_posts_per_period">Client-POSTs pro Zeitabschnitt</string>
|
||||
<string name="client_ban_length">Länge der Bannzeit für Klienten</string>
|
||||
<string name="client_ban_length">Länge der Bannzeit für Clients</string>
|
||||
<string name="total_posts_per_period">Gesamte POSTs pro Zeitabschnitt</string>
|
||||
<string name="total_ban_length">Totale Bannzeit</string>
|
||||
<string name="power_saving">Energie sparen</string>
|
||||
@ -321,7 +321,7 @@
|
||||
<string name="new_keys_on_reopen">Neue Schlüssel beim erneuten Öffnen</string>
|
||||
<string name="new_keys_on_reopen_conflict_title">Permanente Schlüssel deaktivieren?</string>
|
||||
<string name="new_keys_on_reopen_conflict_msg">Sie können die Funktion \"Neue Schlüssel beim Start des Tunnels\" nicht nutzen während \"dauerhafter Schlüssel\" aktiviert ist. Möchten Sie \"dauerhafter Schlüssel\" deaktivieren?</string>
|
||||
<string name="http_client">HTTP-Klient</string>
|
||||
<string name="http_client">HTTP-Client</string>
|
||||
<string name="tunnel_summ_user_agent">\"Benutzer-Agent\"-Kopfzeile durchleiten</string>
|
||||
<string name="tunnel_summ_referer">\"Referer\"-Kopfzeile durchleiten</string>
|
||||
<string name="tunnel_summ_accept">\"Accept-*\"-Kopfzeilen durchleiten</string>
|
||||
|
95
app/src/main/res/values-el/strings.xml
Normal file
95
app/src/main/res/values-el/strings.xml
Normal file
@ -0,0 +1,95 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<resources>
|
||||
<string name="app_name">I2P</string>
|
||||
<string name="desc_i2p_logo">I2P λογότυπο</string>
|
||||
<string name="choose_language">Επιλογή Γλώσσας</string>
|
||||
<string name="label_tunnels">Τούνελ</string>
|
||||
<string name="label_status">Κατάσταση</string>
|
||||
<string name="label_console">Κονσόλα</string>
|
||||
<string name="label_addresses">Διεύθυνσεις</string>
|
||||
<string name="label_addressbook">Βιβλίο Διεθύνσεων</string>
|
||||
<string name="label_logs">Εγγραφές</string>
|
||||
<string name="label_error_logs">Λάθη Εγγραφών</string>
|
||||
<string name="label_news">Νέα</string>
|
||||
<string name="label_peers_status">Ομότιμοι</string>
|
||||
<string name="label_release_notes">Σημειώσεις έκδοσης</string>
|
||||
<string name="label_licenses">Αδειες</string>
|
||||
<string name="label_browse">Περιήγηση</string>
|
||||
<string name="label_graphs">Γραφήματα</string>
|
||||
<string name="hidden">κρυμμένο</string>
|
||||
<string name="testing">Δοκιμάζει</string>
|
||||
<string name="symmetric_nat">Συμμετρικό NAT</string>
|
||||
<!--Parameter is a time, e.g. 32s or 2m-->
|
||||
<string name="net_status_info_disconnected">Αποσυνδέθηκε-ελένξετε την σύνδεση Δικτύου</string>
|
||||
<!--Character to indicate a client tunnel. Usually first letter of the word "client".-->
|
||||
<string name="char_client_tunnel">C</string>
|
||||
<!--Character to indicate a server tunnel. Usually first letter of the word "server".-->
|
||||
<string name="char_server_tunnel">S</string>
|
||||
<string name="download">Κατέβασμα</string>
|
||||
<string name="upload">Ανέβασμα</string>
|
||||
<string name="first_start_title">Συνχαριτήρια για την εγκατάσταση του I2P!</string>
|
||||
<string name="action_search">Αναζήτηση</string>
|
||||
<string name="action_add">Προσθήκη</string>
|
||||
<string name="action_edit">Επεξεργασία</string>
|
||||
<string name="action_delete">Διαγραφή</string>
|
||||
<string name="action_i2ptunnel_start">Εκκίνηση τούνελ</string>
|
||||
<string name="action_i2ptunnel_stop">Σταματημα τούνελ</string>
|
||||
<string name="action_i2ptunnel_start_all">Εκκίνηση όλων των τούνελ</string>
|
||||
<string name="action_i2ptunnel_stop_all">Σταματημα όλων των τούνελ</string>
|
||||
<string name="action_i2ptunnel_restart_all">Επανεκκίνηση όλων των τούνελ</string>
|
||||
<string name="action_reload">Επαναφόρτωση</string>
|
||||
<string name="action_refresh">Ανανέωση</string>
|
||||
<string name="hint_search_addressbook">Αναζήτηση βιβλίου διευθήνσεων</string>
|
||||
<string name="news_updated">Νέα ανανεώθηκαν</string>
|
||||
<string name="router_not_running">Ο ρούτερ δέν τρέχει.</string>
|
||||
<string name="select_an_address">Επιλέξτε μια διεύθυνση.</string>
|
||||
<string name="statistics">Στατιστικά</string>
|
||||
<string name="routers">Δρομολογητές</string>
|
||||
<string name="countries">Χώρες</string>
|
||||
<string name="country">Χώρα</string>
|
||||
<string name="transport">Transport</string>
|
||||
<string name="versions">Εκδόσεις</string>
|
||||
<string name="version">Εκδοση</string>
|
||||
<string name="tname_0">Κρυμμένο κατά την εκκίνηση</string>
|
||||
<string name="menu_settings">Ρυθμίσεις</string>
|
||||
<string name="settings_enable">Ενεργοποίηση </string>
|
||||
<string name="settings_label_bandwidth">Εύρος Ζώνης</string>
|
||||
<string name="settings_label_network">Δίκτυο</string>
|
||||
<string name="settings_label_hiddenMode">Συμμετοχή</string>
|
||||
<string name="settings_label_logging">Συνδέεται </string>
|
||||
<string name="settings_label_appearance">Εμφάνιση</string>
|
||||
<string name="settings_label_language">Γλώσσα</string>
|
||||
<string name="settings_default">Εξ\'ορισμού</string>
|
||||
<string name="settings_label_advanced">Προχωρημένα</string>
|
||||
<string name="settings_label_expl_length">Μήκος</string>
|
||||
<string name="settings_summ_expl_lengthVariance">%s</string>
|
||||
<string name="settings_label_expl_quantity">Ποσότητα</string>
|
||||
<string name="menu_about">Σχετικά με</string>
|
||||
<string name="about_version">Έκδοση</string>
|
||||
<string name="menu_help">Βοήθεια</string>
|
||||
<string name="general">Γενικά</string>
|
||||
<string name="addressbook_add_wizard_k_name">Όνομα</string>
|
||||
<string name="addressbook_add_wizard_k_destination">Προορισμός</string>
|
||||
<string name="addressbook_add_wizard_desc_name">Το όνομα</string>
|
||||
<string name="i2ptunnel_type_httpserver">Διακομιστής HTTP</string>
|
||||
<string name="i2ptunnel_new_tunnel">Νέο Τούνελ</string>
|
||||
<string name="i2ptunnel_wizard_k_name">Όνομα</string>
|
||||
<string name="i2ptunnel_wizard_k_desc">Περιγραφή</string>
|
||||
<string name="i2ptunnel_wizard_k_dest">Προορισμός</string>
|
||||
<string name="next">Επόμενο</string>
|
||||
<string name="prev">Προηγούμενο</string>
|
||||
<string name="finish">Υποβολή</string>
|
||||
<string name="enabled">Ενεργοποιημένο</string>
|
||||
<string name="i2ptunnel_view_target">Στόχος</string>
|
||||
<string name="name">Όνομα</string>
|
||||
<string name="description">Περιγραφή</string>
|
||||
<string name="use_ssl">Χρήση SSL</string>
|
||||
<string name="profile">Προφίλ</string>
|
||||
<string name="disabled">Απενεργοποιημένο</string>
|
||||
<string name="unlimited">Απεριόριστο</string>
|
||||
<string name="username">Όνομα χρήστη</string>
|
||||
<string name="password">Κωδικός</string>
|
||||
<string name="other">Άλλ</string>
|
||||
<string name="all">Όλοι</string>
|
||||
<string name="no_messages">Κανένα μήνυμα</string>
|
||||
</resources>
|
219
app/src/main/res/values-fa/strings.xml
Normal file
219
app/src/main/res/values-fa/strings.xml
Normal file
@ -0,0 +1,219 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<resources>
|
||||
<string name="app_name">I2P</string>
|
||||
<string name="desc_i2p_logo">لوگو I2P</string>
|
||||
<string name="choose_language">انتخاب زبان</string>
|
||||
<string name="welcome_new_install">به I2P خوش آمدید! این اپلیکیشن برنامه ی ALPHA است و نامحسوسی را بطور کامل پیاده نمیکند.
|
||||
لطفا توضیحات انتشار و توضیحات گواهینامه را مطالعه کنید.</string>
|
||||
<string name="welcome_new_version">نسخه جدید نصب شد. لطفا توضیحات انتشار را مطالعه کنید. نسخه :</string>
|
||||
<string name="label_tunnels">تونل ها</string>
|
||||
<string name="label_status">وضعیت</string>
|
||||
<string name="label_console">کنسول</string>
|
||||
<string name="label_addresses">آدرسها</string>
|
||||
<string name="label_addressbook">دفتر آدرس ها</string>
|
||||
<string name="label_i2ptunnel_client">تونل های کاربر</string>
|
||||
<string name="label_i2ptunnel_server">تونل های سرور</string>
|
||||
<string name="label_logs">گزارش ها</string>
|
||||
<string name="label_error_logs">گزارش خطاها</string>
|
||||
<string name="label_news">اخبار</string>
|
||||
<string name="label_peers_status">همتایان</string>
|
||||
<string name="label_release_notes">توضیحات انتشار</string>
|
||||
<string name="label_licenses">گواهینامه ها</string>
|
||||
<string name="label_browse">جستجو</string>
|
||||
<string name="label_graphs">گراف ها</string>
|
||||
<string name="button_router_off">لمس طولانی برای اجرای I2P</string>
|
||||
<string name="button_router_on">I2P در حال اجرا است (لمس طولانی برای توقف)</string>
|
||||
<string name="button_router_graceful">I2P در %s خاموش خواهد شد</string>
|
||||
<string name="no_internet">هیچ اتصال اینترنتی موجود نمی باشد</string>
|
||||
<string name="hidden">پنهان</string>
|
||||
<string name="symmetric_nat">NAT همگام</string>
|
||||
<!--Parameter is a time, e.g. 32s or 2m-->
|
||||
<string name="net_status_error_unresolved_tcp">آدرس های TCP حل نشده</string>
|
||||
<string name="net_status_error_private_tcp">آدرس TCP خصوصی</string>
|
||||
<string name="shared_clients">کلاینت های به اشتراک گذاشته شده</string>
|
||||
<string name="active_peers">همتایان فعال</string>
|
||||
<string name="known_peers">همتایان شناخته شده</string>
|
||||
<!--Character to indicate a client tunnel. Usually first letter of the word "client".-->
|
||||
<string name="char_client_tunnel">C</string>
|
||||
<!--Character to indicate a server tunnel. Usually first letter of the word "server".-->
|
||||
<string name="char_server_tunnel">S</string>
|
||||
<string name="download">بارگذاری</string>
|
||||
<string name="upload">آپلود</string>
|
||||
<string name="configure_browser_title">پیکربندی مرورگر؟</string>
|
||||
<string name="first_start_title">تبریک بابت نصب I2P!</string>
|
||||
<string name="action_search">جستجو</string>
|
||||
<string name="action_add">اضافه کردن</string>
|
||||
<string name="action_edit">ویرایش </string>
|
||||
<string name="action_delete">پاک کردن</string>
|
||||
<string name="action_i2ptunnel_start">شروع تونل</string>
|
||||
<string name="action_i2ptunnel_stop">توقف تونل</string>
|
||||
<string name="action_i2ptunnel_start_all">شروع تمام تونل ها</string>
|
||||
<string name="action_i2ptunnel_stop_all">توقف تمام تونل ها</string>
|
||||
<string name="action_i2ptunnel_restart_all">راه اندازی مجدد تمام تونل ها</string>
|
||||
<string name="action_reload">بارگذاری مجدد</string>
|
||||
<string name="action_refresh">تازه کردن</string>
|
||||
<string name="hint_search_addressbook">جستجو دفتر آدرس ها</string>
|
||||
<string name="action_reload_subscriptions">بارگذاری مجدد اشتراک ها</string>
|
||||
<string name="news_last_updated">اخبار آخرین بار %s پیش به روز رسانی شد</string>
|
||||
<string name="news_last_checked">اخبار آخرین بار %s پیش بررسی شد</string>
|
||||
<string name="news_updated">اخبار به روز رسانی شد</string>
|
||||
<string name="view_news">برای دیدن آخرین اخبار I2P کلیک کنید</string>
|
||||
<string name="router_not_running">روتر در حال اجرا نیست.</string>
|
||||
<string name="router_shutting_down">روتر در حال خاموش شدن است.</string>
|
||||
<string name="select_an_address">یک آدرس انتخاب کنید.</string>
|
||||
<string name="configure_graphs">پیکربندی گراف ها</string>
|
||||
<string name="graphs_not_ready">گراف ها هنوز آماده نیستند. لطفا بعدا تلاش کنید.</string>
|
||||
<string name="statistics">آمار</string>
|
||||
<string name="routers">روترها</string>
|
||||
<string name="countries">کشورها</string>
|
||||
<string name="country">کشور</string>
|
||||
<string name="transport">انتقال</string>
|
||||
<string name="versions">نسخه ها</string>
|
||||
<string name="version">نسخه</string>
|
||||
<string name="notification_status_starting">I2P در حال شروع می باشد</string>
|
||||
<string name="notification_status_restarting">I2P در حال راه اندازی مجدد است</string>
|
||||
<string name="notification_status_starting_after_waiting">شبکه اتصال یافت، I2P در حال آغاز است</string>
|
||||
<string name="notification_status_running">I2P در حال اجراست</string>
|
||||
<string name="notification_status_client_ready">تونل های کلاینت آماده می باشند</string>
|
||||
<string name="notification_status_graceful">توقف سازی I2P در %s</string>
|
||||
<string name="notification_status_stopping">در حال توقف I2P</string>
|
||||
<string name="notification_status_stopping_after_net">اتصال شبکه قطع شد، در حال توقف سازی I2P</string>
|
||||
<string name="notification_status_shutdown_cancelled">خاموش کردن لغو شد</string>
|
||||
<string name="notification_status_shutting_down">I2P در حال خاموش شدن است</string>
|
||||
<string name="notification_status_peers">همتایان: %1$d فعال، %2$d شناخته شده</string>
|
||||
<string name="notification_status_client">تونل های کلاینت: %1$d/%2$d</string>
|
||||
<string name="menu_settings">تنظیمات</string>
|
||||
<string name="settings_enable">فعّال</string>
|
||||
<string name="settings_desc_subscriptions">آدرس های اینترنتی اشتراک</string>
|
||||
<string name="settings_label_bandwidth_net">پهنای باند و شبکه</string>
|
||||
<string name="settings_label_startOnBoot">شروع I2P در هنگام بوت</string>
|
||||
<string name="settings_label_bandwidth">پهنای باند</string>
|
||||
<string name="settings_label_network">شبکه</string>
|
||||
<string name="settings_desc_hiddenMode">خاموش کردن حالت پنهان</string>
|
||||
<string name="settings_label_sharePercent">اشتراک گذاری درصد</string>
|
||||
<string name="settings_desc_upnp">باز کردن درگاه های دیوار آتشین به صورت خودکار</string>
|
||||
<string name="settings_label_appearance">ظاهر</string>
|
||||
<string name="settings_label_language">زبان</string>
|
||||
<string name="settings_default">پیش فرض</string>
|
||||
<string name="settings_label_advanced">پیشرفته </string>
|
||||
<string name="settings_label_showStats">آمار های روتر</string>
|
||||
<string name="settings_summ_showStats">نمایش آمار های پیشرفته در کنسول اصلی</string>
|
||||
<string name="settings_label_transports">انتقال ها</string>
|
||||
<string name="settings_label_maxConns">اتصالات بیشینه</string>
|
||||
<string name="settings_label_i2cp">رابط I2CP</string>
|
||||
<string name="settings_desc_exploratory_pool">پارامتر های تونل</string>
|
||||
<string name="settings_label_expl_length">طول</string>
|
||||
<string name="settings_summ_expl_length">%s واسطه</string>
|
||||
<string name="settings_summ_expl_lengthVariance">%s</string>
|
||||
<string name="settings_label_expl_quantity">تعداد</string>
|
||||
<string name="settings_summ_expl_quantity">%s تونل</string>
|
||||
<string name="settings_summ_expl_backupQuantity">%s تونل</string>
|
||||
<string name="menu_about">درباره</string>
|
||||
<string name="about_version">نسخه:</string>
|
||||
<string name="about_project">خانه پروژه:</string>
|
||||
<string name="about_bugs">باگ ها و پشتیبانی:</string>
|
||||
<string name="about_helpwanted">نیاز به کمک داریم!</string>
|
||||
<string name="about_volunteer">آیا میخواهید کمک کنید تا برنامه را بهبود ببخشید؟ روی انجمن اندروید داوطلب شوید:</string>
|
||||
<string name="menu_help">راهنمایی</string>
|
||||
<string name="general">عمومی</string>
|
||||
<string name="label_router">آدرس های عمومی</string>
|
||||
<string name="label_private">آدرس های خصوصی</string>
|
||||
<string name="addressbook_is_empty">دفتر آدرس ها خالی می باشد</string>
|
||||
<string name="addressbook_search_header">%s یافت شد</string>
|
||||
<string name="addressbook_add_wizard_k_name">نام</string>
|
||||
<string name="addressbook_add_wizard_k_destination">مقصد</string>
|
||||
<string name="addressbook_add_wizard_desc_name">نام</string>
|
||||
<string name="nsu_iae_cannot_contain">نام میزبان نمی تواند حاوی \"%s\" باشد</string>
|
||||
<string name="i2ptunnel_type_client">کلاینت استاندارد</string>
|
||||
<string name="i2ptunnel_type_httpclient">کلاینت HTTP</string>
|
||||
<string name="i2ptunnel_type_ircclient">کلاینت IRC</string>
|
||||
<string name="i2ptunnel_type_server">سرور استاندارد</string>
|
||||
<string name="i2ptunnel_type_httpserver">سرور HTTP</string>
|
||||
<string name="i2ptunnel_type_ircserver">سرور IRC</string>
|
||||
<string name="i2ptunnel_type_streamrclient">کلاینت Streamr</string>
|
||||
<string name="i2ptunnel_type_streamrserver">سرور Streamr</string>
|
||||
<string name="install_recommended_app">نصب برنامه پیشنهاد شده؟</string>
|
||||
<string name="i2ptunnel_not_initialized">تونل ها فعلا مقداردهی اولیه نشده اند، لطفا در 2 دقیقه دیگر بارگذاری مجدد کنید.</string>
|
||||
<string name="i2ptunnel_new_tunnel">تونل جدید</string>
|
||||
<string name="i2ptunnel_msg_config_saved">تغییرات پیکربندی ذخیره شد</string>
|
||||
<string name="i2ptunnel_msg_config_save_failed">ناموفقیت در ذخیره سازی پیکربندی</string>
|
||||
<string name="i2ptunnel_msg_tunnel_starting">شروع تونل</string>
|
||||
<string name="i2ptunnel_msg_tunnel_stopping">توقف تونل</string>
|
||||
<string name="i2ptunnel_delete_confirm_message">حذف تونل؟</string>
|
||||
<string name="i2ptunnel_delete_confirm_button">حذف تونل</string>
|
||||
<string name="i2ptunnel_wizard_k_client_server">کلاینت یا سرور</string>
|
||||
<string name="i2ptunnel_wizard_v_client">تونل کلاینت</string>
|
||||
<string name="i2ptunnel_wizard_v_server">تونل سرور</string>
|
||||
<string name="i2ptunnel_wizard_k_type">نوع تونل</string>
|
||||
<string name="i2ptunnel_wizard_k_name">نام</string>
|
||||
<string name="i2ptunnel_wizard_k_desc">شرح</string>
|
||||
<string name="i2ptunnel_wizard_k_dest">مقصد</string>
|
||||
<string name="i2ptunnel_wizard_k_target_host">میزبان هدف</string>
|
||||
<string name="i2ptunnel_wizard_k_target_port">درگاه هدف</string>
|
||||
<string name="i2ptunnel_wizard_k_reachable_on">قابل دسترس روی</string>
|
||||
<string name="i2ptunnel_wizard_k_auto_start">شروع خودکار</string>
|
||||
<string name="next">بعدی</string>
|
||||
<string name="prev">قبلی</string>
|
||||
<string name="finish">ثبت کردن</string>
|
||||
<string name="review">مرور کنید.</string>
|
||||
<string name="enabled">فعال است</string>
|
||||
<string name="i2ptunnel_wizard_submit_confirm_message">ایجاد تونل؟</string>
|
||||
<string name="i2ptunnel_wizard_submit_confirm_button">ایجاد تونل</string>
|
||||
<string name="i2ptunnel_view_target">هدف</string>
|
||||
<string name="i2ptunnel_view_access_point">نقطه دسترسی</string>
|
||||
<string name="i2ptunnel_view_autostart">شروع-خودکار</string>
|
||||
<string name="address_copied_to_clipboard">آدرس به کلیپ بورد کپی شد</string>
|
||||
<string name="edit_tunnel">ویرایش تونل</string>
|
||||
<string name="name">نام</string>
|
||||
<string name="description">شرح</string>
|
||||
<string name="auto_start">شروع-خودکار</string>
|
||||
<string name="tunnel_summ_auto_start">شروع تونل در هنگام شروع روتر.</string>
|
||||
<string name="tunnel_cat_ports">پورت های محلی</string>
|
||||
<string name="shared_client">کلاینت به اشتراک گذاشته شده</string>
|
||||
<string name="target_destination">مقصد هدف</string>
|
||||
<string name="persistent_key">کلید مداوم</string>
|
||||
<string name="reachable_on">قابل دسترس روی</string>
|
||||
<string name="listen_port">پورت شنود</string>
|
||||
<string name="client_ssl">SSL کلاینت</string>
|
||||
<string name="tunnel_summ_client_ssl">کلاینت ها باید از SSL برای اتصال استفاده کنند</string>
|
||||
<string name="irc">IRC</string>
|
||||
<string name="enable_dcc">فعال سازی DCC</string>
|
||||
<string name="tunnel_summ_enable_dcc">اجازه به کلاینت های IRC برای استفاده از DCC</string>
|
||||
<string name="website_domain_name">نام دامنه وبسایت</string>
|
||||
<string name="target_host">میزبان هدف</string>
|
||||
<string name="target_port">درگاه هدف</string>
|
||||
<string name="use_ssl">از SSL استفاده کن</string>
|
||||
<string name="tunnel_summ_use_ssl">استفاده از SSL برای اتصال به هدف</string>
|
||||
<string name="tunnel_parameters">پارامتر های تونل</string>
|
||||
<string name="profile">پروفایل</string>
|
||||
<string name="restricted_access">دسترسی محدود</string>
|
||||
<string name="disabled">غیر فعال شد</string>
|
||||
<string name="whitelist">لیست سفید</string>
|
||||
<string name="blacklist">لیست سیاه</string>
|
||||
<string name="access_list">لیست دسترسی</string>
|
||||
<string name="client_connection_limits">محدودیت های اتصال کلاینت</string>
|
||||
<string name="connections_per_minute">اتصال ها در دقیقه</string>
|
||||
<string name="connections_per_hour">اتصال ها در ساعت</string>
|
||||
<string name="connections_per_day">اتصال ها در روز</string>
|
||||
<string name="num_per_minute">%s در دقیقه</string>
|
||||
<string name="num_per_hour">%s در ساعت</string>
|
||||
<string name="num_per_day">%s در روز</string>
|
||||
<string name="unlimited">نامحدود</string>
|
||||
<string name="post_limits">محدودیت های POST</string>
|
||||
<string name="limit_period">دوره محدودیت</string>
|
||||
<string name="reduce_quantity">کاهش تعداد</string>
|
||||
<string name="num_minutes">%s دقیقه</string>
|
||||
<string name="new_keys_on_reopen_conflict_title">غیرفعال سازی کلید های مداوم؟</string>
|
||||
<string name="http_client">کلاینت HTTP</string>
|
||||
<string name="jump_url_list">پرش لیست آدرس اینترنتی</string>
|
||||
<string name="proxy_auth">احراز هویت پراکسی</string>
|
||||
<string name="username">نام کاربری</string>
|
||||
<string name="password">رمز عبور</string>
|
||||
<string name="other">دیگر</string>
|
||||
<string name="signature_type">نوع امضا</string>
|
||||
<string name="custom_options">گزینه های سفارشی</string>
|
||||
<string name="all">همه</string>
|
||||
<string name="no_messages">هیچ پیام</string>
|
||||
<string name="no_error_messages">هیچ پیام خطا</string>
|
||||
<string name="label_browser_configuration">پیکربندی مرورگر</string>
|
||||
</resources>
|
@ -1,10 +1,10 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<resources>
|
||||
<string name="app_name">I2P</string>
|
||||
<string name="desc_i2p_logo">Logo I2P</string>
|
||||
<string name="desc_i2p_logo">Logo d’I2P</string>
|
||||
<string name="choose_language">Choisir la langue</string>
|
||||
<string name="welcome_new_install">Bienvenue sur I2P ! Cette appli est un logiciel en version ALPHA de développement et n’offre pas un niveau d’anonymat élevé. Veuillez lire les notes de mise à jour et les informations de licence.</string>
|
||||
<string name="welcome_new_version">La nouvelle version est installée. Veuillez lire les notes de mise à jour. Version :</string>
|
||||
<string name="welcome_new_install">Bienvenue sur I2P ! Cette appli est un logiciel en version ALPHA et n’offre pas un niveau d’anonymat élevé. Veuillez lire les notes de mise à jour et les informations de licence.</string>
|
||||
<string name="welcome_new_version">La nouvelle version est installée. Veuillez lire les notes de mise à jour. Version :</string>
|
||||
<string name="label_tunnels">Tunnels</string>
|
||||
<string name="label_status">État</string>
|
||||
<string name="label_console">Console</string>
|
||||
@ -26,22 +26,22 @@
|
||||
<string name="button_shutdown_now">Appuyer longuement pour arrêter maintenant</string>
|
||||
<string name="button_cancel_graceful">Appuyer longuement pour annuler la fermeture</string>
|
||||
<string name="no_internet">Aucune connexion Internet n’est disponible</string>
|
||||
<string name="hidden">Caché</string>
|
||||
<string name="testing">En test</string>
|
||||
<string name="firewalled">Derrière un pare-feu</string>
|
||||
<string name="symmetric_nat">Traduction d’adresses réseau symétrique</string>
|
||||
<string name="net_status_error_i2cp">Erreur I2CP du gestionnaire de clients - Vérifier les journaux</string>
|
||||
<string name="hidden">caché</string>
|
||||
<string name="testing">en test</string>
|
||||
<string name="firewalled">derrière un pare-feu</string>
|
||||
<string name="symmetric_nat">traduction d’adresses réseau symétrique</string>
|
||||
<string name="net_status_error_i2cp">Erreur I2CP du gestionnaire de clients — Vérifier les journaux</string>
|
||||
<!--Parameter is a time, e.g. 32s or 2m-->
|
||||
<string name="net_status_error_skew">Décalage d’horloge de %s</string>
|
||||
<string name="net_status_error_unresolved_tcp">Adresse TCP non résolue</string>
|
||||
<string name="net_status_error_private_tcp">Adresse TCP privée</string>
|
||||
<string name="net_status_warn_firewalled_inbound_tcp">Derrière un pare-feu avec le TCP entrant activé</string>
|
||||
<string name="net_status_warn_firewalled_floodfill">Derrière un pare-feu et remplissage par diffusion</string>
|
||||
<string name="net_status_info_disconnected">Déconnecté - Vérifier la connexion réseau</string>
|
||||
<string name="net_status_error_udp_port">Le port UDP est utilisé - Le changer dans les paramètres et redémarrer</string>
|
||||
<string name="net_status_error_no_active_peers">Aucun pair actif - Vérifier la connexion au réseau et le pare-feu</string>
|
||||
<string name="net_status_warn_firewalled_inbound_tcp">derrière un pare-feu avec le TCP entrant activé</string>
|
||||
<string name="net_status_warn_firewalled_floodfill">derrière un pare-feu et remplissage par diffusion</string>
|
||||
<string name="net_status_info_disconnected">Déconnecté — Vérifiez la connexion réseau</string>
|
||||
<string name="net_status_error_udp_port">Le port UDP est utilisé — Changez-le dans les paramètres et redémarrer</string>
|
||||
<string name="net_status_error_no_active_peers">Aucun pair actif — Vérifiez la connexion au réseau et le pare-feu</string>
|
||||
<string name="net_status_error_udp_disabled_tcp_not_set">L’UDP est désactivé et les port et hôte TCP entrants ne sont pas définis</string>
|
||||
<string name="net_status_warn_firewalled_udp_disabled">Derrière un pare-feu avec UDP désactivé</string>
|
||||
<string name="net_status_warn_firewalled_udp_disabled">derrière un pare-feu avec UDP désactivé</string>
|
||||
<string name="shared_clients">Clients partagés</string>
|
||||
<string name="uptime">Durée d’activité</string>
|
||||
<string name="active_peers">Pairs actifs</string>
|
||||
@ -53,14 +53,14 @@
|
||||
<string name="no_tunnels_running">Aucun tunnel n’est encore en fonction.</string>
|
||||
<string name="download">Téléchargement</string>
|
||||
<string name="upload">Téléversement</string>
|
||||
<string name="configure_browser_title">Configurer le navigateur ?</string>
|
||||
<string name="configure_browser_for_i2p">Souhaitez-vous configurer un navigateur pour visualiser les sites I2P ? (vous pouvez aussi le faire plus tard grâce au menu d’aide)</string>
|
||||
<string name="first_start_title">Félicitations pour votre installation d’I2P !</string>
|
||||
<string name="first_start_welcome"><b>Bienvenue sur I2P !</b> Veuillez <b>patienter</b> pendant qu’I2P s’amorce et trouve des pairs.</string>
|
||||
<string name="configure_browser_title">Configurer le navigateur ?</string>
|
||||
<string name="configure_browser_for_i2p">Souhaitez-vous configurer un navigateur pour visualiser les sites I2P ? (Vous pouvez aussi le faire plus tard grâce au menu d’aide.)</string>
|
||||
<string name="first_start_title">Félicitations pour votre installation d’I2P !</string>
|
||||
<string name="first_start_welcome"><b>Bienvenue sur I2P !</b> Veuillez <b>patienter</b> pendant qu’I2P s’amorce et trouve des pairs.</string>
|
||||
<string name="first_start_read">Pendant que vous patientez, veuillez consulter les notes de mise à jour et la page d’accueil.</string>
|
||||
<string name="first_start_faq">Une fois que vous aurez des tunnels client, veuillez <b>consulter</b> notre FAQ :</string>
|
||||
<string name="first_start_faq_nonanon">Ou utilisez ce lien non anonyme si vous ne voulez pas attendre les tunnels :</string>
|
||||
<string name="first_start_irc">Dirigez votre client IRC vers <b>localhost:6668</b> et dites-nous bonjour sur :</string>
|
||||
<string name="first_start_faq">Une fois que vous aurez des tunnels client, veuillez <b>consulter</b> notre FAQ :</string>
|
||||
<string name="first_start_faq_nonanon">Ou utilisez ce lien non anonyme si vous ne voulez pas attendre les tunnels :</string>
|
||||
<string name="first_start_irc">Dirigez votre client IRC vers <b>localhost:6668</b> et dites-nous bonjour sur :</string>
|
||||
<string name="action_search">Recherche</string>
|
||||
<string name="action_add">Ajouter</string>
|
||||
<string name="action_edit">Modifier</string>
|
||||
@ -109,10 +109,10 @@
|
||||
<string name="notification_status_stopping_after_net">Le réseau est déconnecté, arrêt d’I2P</string>
|
||||
<string name="notification_status_shutdown_cancelled">La fermeture a été annulée</string>
|
||||
<string name="notification_status_shutting_down">I2P est en cours de fermeture</string>
|
||||
<string name="notification_status_bw">Bande passante : %1$sBps aval / %2$sBps amont</string>
|
||||
<string name="notification_status_peers">Pairs : %1$d actifs, %2$d connus</string>
|
||||
<string name="notification_status_expl">Tunnels exploratoires : %1$d/%2$d</string>
|
||||
<string name="notification_status_client">Tunnels client : %1$d/%2$d</string>
|
||||
<string name="notification_status_bw">Bande passante : %1$sBps aval / %2$sBps amont</string>
|
||||
<string name="notification_status_peers">Pairs : %1$d actifs, %2$d connus</string>
|
||||
<string name="notification_status_expl">Tunnels exploratoires : %1$d/%2$d</string>
|
||||
<string name="notification_status_client">Tunnels client : %1$d/%2$d</string>
|
||||
<string name="menu_settings">Paramètres</string>
|
||||
<string name="settings_enable">Activer</string>
|
||||
<string name="settings_desc_subscriptions">URL d’abonnement</string>
|
||||
@ -124,7 +124,7 @@
|
||||
<string name="settings_desc_bw_inbound">Vitesse entrante maximale</string>
|
||||
<string name="settings_label_bw_outbound">Vitesse sortante</string>
|
||||
<string name="settings_desc_bw_outbound">Vitesse sortante maximale</string>
|
||||
<string name="settings_label_network">Réseau</string>
|
||||
<string name="settings_label_network">Réseau </string>
|
||||
<string name="settings_label_hiddenMode">Participation</string>
|
||||
<string name="settings_desc_hiddenMode">Désactiver le mode caché</string>
|
||||
<string name="settings_label_maxPartTunnels">Maximum de tunnels participants</string>
|
||||
@ -139,7 +139,7 @@
|
||||
<string name="settings_label_appearance">Apparence</string>
|
||||
<string name="settings_label_language">Langue</string>
|
||||
<string name="settings_default">Valeur par défaut</string>
|
||||
<string name="settings_label_advanced">Évolué</string>
|
||||
<string name="settings_label_advanced">Avancé</string>
|
||||
<string name="settings_label_showStats">Statistiques du routeur</string>
|
||||
<string name="settings_summ_showStats">Afficher les statistiques évoluées dans la console principale</string>
|
||||
<string name="settings_label_transports">Transports</string>
|
||||
@ -165,12 +165,12 @@
|
||||
<string name="settings_need_transport_enabled">Au moins un transport doit être activé</string>
|
||||
<string name="settings_router_restart_required">Veuillez redémarrer I2P afin d’appliquer les changements</string>
|
||||
<string name="menu_about">À propos</string>
|
||||
<string name="about_version">Version :</string>
|
||||
<string name="about_project">Page d’accueil du projet :</string>
|
||||
<string name="about_bugs">Bogues et assistance :</string>
|
||||
<string name="about_helpwanted">Aide recherchée !</string>
|
||||
<string name="about_volunteer">Vous souhaitez aider à améliorer l’appli ? Portez-vous volontaire sur le forum Android :</string>
|
||||
<string name="about_donate">Vous souhaitez faire un don d’argent ou en bitcoin pour acheter plus d’appareils Android pour le développement et les tests ? Rendez-vous sur :</string>
|
||||
<string name="about_version">Version :</string>
|
||||
<string name="about_project">Page d’accueil du projet :</string>
|
||||
<string name="about_bugs">Bogues et assistance :</string>
|
||||
<string name="about_helpwanted">Aide recherchée !</string>
|
||||
<string name="about_volunteer">Souhaitez-vous aider à améliorer l’appli ? Portez-vous volontaire sur le forum Android :</string>
|
||||
<string name="about_donate">Souhaitez-vous faire un don en argent ou en bitcoins pour acheter plus d’appareils Android pour le développement et les tests ? Rendez-vous sur :</string>
|
||||
<string name="menu_help">Aide</string>
|
||||
<string name="general">Général</string>
|
||||
<string name="label_router">Adresses publiques</string>
|
||||
@ -198,8 +198,8 @@
|
||||
<string name="i2ptunnel_type_streamrclient">Client Streamr</string>
|
||||
<string name="i2ptunnel_type_streamrserver">Serveur Streamr</string>
|
||||
<string name="i2ptunnel_type_httpbidirserver">Bidir HTTP</string>
|
||||
<string name="install_recommended_app">Installer l’appli recommandée ?</string>
|
||||
<string name="app_needed_for_this_tunnel_type">Vous devez installer une appli pour utiliser ce tunnel. Souhaitez-vous installer l’appli recommandée ?</string>
|
||||
<string name="install_recommended_app">Installer l’appli recommandée ?</string>
|
||||
<string name="app_needed_for_this_tunnel_type">Vous devez installer une appli pour utiliser ce tunnel. Souhaitez-vous installer l’appli recommandée ?</string>
|
||||
<string name="i2ptunnel_not_initialized">Les tunnels ne sont pas encore initialisés, veuillez recharger dans deux minutes.</string>
|
||||
<string name="no_configured_client_tunnels">Aucun tunnel client n’est configuré.</string>
|
||||
<string name="no_configured_server_tunnels">Aucun tunnel serveur n’est configuré.</string>
|
||||
@ -208,7 +208,7 @@
|
||||
<string name="i2ptunnel_msg_config_save_failed">Échec d’enregistrement de la configuration</string>
|
||||
<string name="i2ptunnel_msg_tunnel_starting">Démarrage du tunnel</string>
|
||||
<string name="i2ptunnel_msg_tunnel_stopping">Arrêt du tunnel</string>
|
||||
<string name="i2ptunnel_delete_confirm_message">Supprimer le tunnel ?</string>
|
||||
<string name="i2ptunnel_delete_confirm_message">Supprimer le tunnel ?</string>
|
||||
<string name="i2ptunnel_delete_confirm_button">Suppression du tunnel</string>
|
||||
<string name="i2ptunnel_no_tunnel_details">Impossible de charger les détails du tunnel</string>
|
||||
<string name="i2ptunnel_wizard_k_client_server">Client ou serveur</string>
|
||||
@ -227,7 +227,7 @@
|
||||
<string name="next">Suivant</string>
|
||||
<string name="prev">Précédent</string>
|
||||
<string name="finish">Envoyer</string>
|
||||
<string name="review">Évaluer</string>
|
||||
<string name="review">Révision</string>
|
||||
<string name="enabled">Activé</string>
|
||||
<string name="i2ptunnel_wizard_desc_name">Le nom du tunnel, pour identification dans la liste des tunnels.</string>
|
||||
<string name="i2ptunnel_wizard_desc_desc">Une description du tunnel. Ceci est facultatif et purement informatif.</string>
|
||||
@ -237,8 +237,8 @@
|
||||
<string name="i2ptunnel_wizard_desc_target_port">Le port sur lequel le service accepte des connexions.</string>
|
||||
<string name="i2ptunnel_wizard_desc_reachable_on">Cela limite quels ordinateurs ou téléphones intelligents peuvent accéder à ce tunnel.</string>
|
||||
<string name="i2ptunnel_wizard_desc_binding_port">Le port par lequel l’on accédera localement au tunnel client. C’est aussi le port client pour le tunnel serveur HTTP bidir.</string>
|
||||
<string name="i2ptunnel_wizard_desc_auto_start">Le tunnel devrait-il démarrer automatiquement quand le routeur démarre ?</string>
|
||||
<string name="i2ptunnel_wizard_submit_confirm_message">Créer un tunnel ?</string>
|
||||
<string name="i2ptunnel_wizard_desc_auto_start">Le tunnel devrait-il démarrer automatiquement quand le routeur démarre ?</string>
|
||||
<string name="i2ptunnel_wizard_submit_confirm_message">Créer un tunnel ?</string>
|
||||
<string name="i2ptunnel_wizard_submit_confirm_button">Créer un tunnel</string>
|
||||
<string name="i2ptunnel_view_target">Cible</string>
|
||||
<string name="i2ptunnel_view_access_point">Point d’accès</string>
|
||||
@ -254,8 +254,8 @@
|
||||
<string name="tunnel_summ_shared_client">Utiliser la même destination et les mêmes tunnels que les autres clients partagés</string>
|
||||
<string name="target_destination">Destination cible</string>
|
||||
<string name="persistent_key">Clé persistante</string>
|
||||
<string name="persistent_key_conflict_title">Désactiver les nouvelles clés lors d’une réouverture ?</string>
|
||||
<string name="persistent_key_conflict_msg">Vous ne pouvez pas activer les clés persistantes alors que le tunnel est configuré pour générer de nouvelles clés lors d’une réouverture. Voulez-vous désactiver les nouvelles clés lors d’une réouverture ?</string>
|
||||
<string name="persistent_key_conflict_title">Désactiver les nouvelles clés à la réouverture ?</string>
|
||||
<string name="persistent_key_conflict_msg">Vous ne pouvez pas activer les clés persistantes alors que le tunnel est configuré pour générer de nouvelles clés à la réouverture. Voulez-vous désactiver les nouvelles clés à la réouverture ?</string>
|
||||
<string name="tunnel_summ_persistent_key">Garder la destination de ce tunnel quand il redémarre</string>
|
||||
<string name="reachable_on">Accessible sur</string>
|
||||
<string name="listen_port">Port d’écoute</string>
|
||||
@ -319,12 +319,12 @@
|
||||
<string name="reduced_tunnel_quantity">La quantité de tunnels a été réduite</string>
|
||||
<string name="close_tunnels">Fermer les tunnels quand ils sont inactifs</string>
|
||||
<string name="new_keys_on_reopen">Nouvelles clés lors d’une réouverture</string>
|
||||
<string name="new_keys_on_reopen_conflict_title">Désactiver les clés persistantes ?</string>
|
||||
<string name="new_keys_on_reopen_conflict_msg">Vous ne pouvez pas activer la génération de nouvelles clés lors d’une réouverture alors que le tunnel est configuré pour utiliser des clés persistantes. Voulez-vous désactiver les clés persistantes ?</string>
|
||||
<string name="new_keys_on_reopen_conflict_title">Désactiver les clés persistantes ?</string>
|
||||
<string name="new_keys_on_reopen_conflict_msg">Vous ne pouvez pas activer la génération de nouvelles clés à la réouverture alors que le tunnel est configuré pour avoir des clés persistantes. Voulez-vous désactiver les clés persistantes ?</string>
|
||||
<string name="http_client">Client HTTP</string>
|
||||
<string name="tunnel_summ_user_agent">Passer l’en-tête « agent utilisateur »</string>
|
||||
<string name="tunnel_summ_referer">Passer l’en-tête Référent</string>
|
||||
<string name="tunnel_summ_accept">Passer l’en-tête « Accept-* »</string>
|
||||
<string name="tunnel_summ_user_agent">Passer l’en-tête « agent utilisateur »</string>
|
||||
<string name="tunnel_summ_referer">Passer l’en-tête « Référent »</string>
|
||||
<string name="tunnel_summ_accept">Passer l’en-tête « Accept-* »</string>
|
||||
<string name="tunnel_summ_allow_ssl">Permettre SSL vers des adresses I2P</string>
|
||||
<string name="jump_url_list">Liste d’URL de saut</string>
|
||||
<string name="proxy_auth">Autorisation du mandataire</string>
|
||||
|
@ -23,12 +23,16 @@
|
||||
<string name="firewalled">Tűzfalazva</string>
|
||||
<string name="symmetric_nat">Szimmetrikus NAT</string>
|
||||
<!--Parameter is a time, e.g. 32s or 2m-->
|
||||
<string name="net_status_error_no_active_peers">Nincsenek aktív peerek - ellenőrizd a hálózati kapcsolatot és a tűzfalat</string>
|
||||
<string name="uptime">Indítás óta eltelt idő</string>
|
||||
<string name="active_peers">Aktív peerek</string>
|
||||
<string name="known_peers">Ismert peerek</string>
|
||||
<!--Character to indicate a client tunnel. Usually first letter of the word "client".-->
|
||||
<string name="char_client_tunnel">M</string>
|
||||
<!--Character to indicate a server tunnel. Usually first letter of the word "server".-->
|
||||
<string name="char_server_tunnel">S</string>
|
||||
<string name="download">Letöltés</string>
|
||||
<string name="first_start_welcome"><b>Üdvözöl az I2P!</b> Kérlek <b>légy türelemmel</b> amíg az I2P elindul és peer-eket talál.</string>
|
||||
<string name="action_search">Keresés</string>
|
||||
<string name="action_add">Hozzáadás</string>
|
||||
<string name="action_edit">Szerkesztés</string>
|
||||
@ -42,6 +46,7 @@
|
||||
<string name="version">Verzió</string>
|
||||
<string name="count">Mennyiség</string>
|
||||
<string name="tname_0">Rejtett vagy indul</string>
|
||||
<string name="notification_status_peers">Peer-ek: %1$d aktív, %2$d ismert</string>
|
||||
<string name="menu_settings">Beállítások</string>
|
||||
<string name="settings_enable">Engedélyezés</string>
|
||||
<string name="settings_label_bandwidth">Sávszélesség</string>
|
||||
|
@ -22,6 +22,7 @@
|
||||
<string name="button_router_off">Mbaje tastin për ta filluar I2P\'në</string>
|
||||
<string name="button_router_on">I2P është në funkcion (mbaje tastin gjatë për ta ndalur) </string>
|
||||
<string name="hidden">Fshehur</string>
|
||||
<string name="testing">Po provohet</string>
|
||||
<!--Parameter is a time, e.g. 32s or 2m-->
|
||||
<!--Character to indicate a client tunnel. Usually first letter of the word "client".-->
|
||||
<string name="char_client_tunnel">C</string>
|
||||
@ -171,6 +172,7 @@
|
||||
<string name="i2ptunnel_wizard_desc_auto_start">Të startojë tuneli njëkohësisht me router\'in?</string>
|
||||
<string name="i2ptunnel_wizard_submit_confirm_message">Krijo tunel?</string>
|
||||
<string name="i2ptunnel_wizard_submit_confirm_button">Krijo tunel</string>
|
||||
<string name="i2ptunnel_view_target">Objektiv</string>
|
||||
<string name="i2ptunnel_view_autostart">Autostarto</string>
|
||||
<string name="name">Emër</string>
|
||||
<string name="description">Përshkrim</string>
|
||||
|
@ -144,7 +144,7 @@
|
||||
<string name="settings_summ_showStats">Ana konsolda ayrıntılı istatistikler görüntülensin</string>
|
||||
<string name="settings_label_transports">Aktarımlar</string>
|
||||
<string name="settings_label_maxConns">En fazla bağlantı</string>
|
||||
<string name="settings_label_i2cp">I2CP Arayüzü</string>
|
||||
<string name="settings_label_i2cp">I2CP Arabirimi</string>
|
||||
<string name="settings_desc_i2cp">Üçüncü taraf uygulamalar tünel oluşturabilsin (yönelticinin yeniden başlatılması gerekir)</string>
|
||||
<string name="settings_label_exploratory_pool">Keşif havuzu</string>
|
||||
<string name="settings_desc_exploratory_pool">Tunel ayarları</string>
|
||||
@ -204,8 +204,8 @@
|
||||
<string name="no_configured_client_tunnels">Henüz ayarlanmış bir istemci tüneli yok.</string>
|
||||
<string name="no_configured_server_tunnels">Henüz ayarlanmış bir sunucu tüneli yok.</string>
|
||||
<string name="i2ptunnel_new_tunnel">Yeni Tünel</string>
|
||||
<string name="i2ptunnel_msg_config_saved">Ayar değişiklikleri kaydedildi</string>
|
||||
<string name="i2ptunnel_msg_config_save_failed">Ayarlar kaydedilemedi</string>
|
||||
<string name="i2ptunnel_msg_config_saved">Yapılandırma değişiklikleri kaydedildi</string>
|
||||
<string name="i2ptunnel_msg_config_save_failed">Yapılandırma kaydedilemedi</string>
|
||||
<string name="i2ptunnel_msg_tunnel_starting">Tünel açılıyor</string>
|
||||
<string name="i2ptunnel_msg_tunnel_stopping">Tünel kapatılıyor</string>
|
||||
<string name="i2ptunnel_delete_confirm_message">Tüneli sil</string>
|
||||
@ -353,7 +353,7 @@
|
||||
<string name="i2p_android_logs">I2P Android Günlükleri</string>
|
||||
<string name="error_logs_copied_to_clipboard">Hata günlükleri panoya kopyalandı</string>
|
||||
<string name="logs_copied_to_clipboard">Günlükler panoya kopyalandı</string>
|
||||
<string name="label_browser_configuration">Tarayıcı ayarları</string>
|
||||
<string name="label_browser_configuration">Tarayıcı yapılandırması</string>
|
||||
<string name="no_market_app">Herhangi bir mağaza uygulaması bulunamadı, lütfen el ile kurun</string>
|
||||
<string name="unset">Ayarı Kaldır</string>
|
||||
</resources>
|
||||
|
@ -145,6 +145,7 @@
|
||||
<string name="settings_label_transports">传输</string>
|
||||
<string name="settings_label_maxConns">最大连接数</string>
|
||||
<string name="settings_label_i2cp">I2CP 接口</string>
|
||||
<string name="settings_desc_i2cp">允许第三方应用创建隧道(需要路由重启)</string>
|
||||
<string name="settings_label_exploratory_pool">探索隧道池</string>
|
||||
<string name="settings_desc_exploratory_pool">隧道参数</string>
|
||||
<string name="settings_label_expl_inbound">入站隧道</string>
|
||||
|
@ -31,13 +31,21 @@
|
||||
</string-array>
|
||||
<string-array name="languages">
|
||||
<item>zz</item>
|
||||
<item>ar</item>
|
||||
<item>az</item>
|
||||
<item>en</item>
|
||||
<item>ca</item>
|
||||
<item>zh</item>
|
||||
<item>zh_TW</item>
|
||||
<item>cs</item>
|
||||
<item>da</item>
|
||||
<item>de</item>
|
||||
<item>en</item>
|
||||
<item>es</item>
|
||||
<item>fi</item>
|
||||
<item>fr</item>
|
||||
<item>gl</item>
|
||||
<item>el</item>
|
||||
<item>hu</item>
|
||||
<item>in</item>
|
||||
<item>it</item>
|
||||
<item>ja</item>
|
||||
@ -59,13 +67,21 @@
|
||||
</string-array>
|
||||
<string-array name="language_names">
|
||||
<item>@string/settings_default</item>
|
||||
<item>Arabic ﻉﺮﺒﻳﺓ</item>
|
||||
<item>Azerbaijani</item>
|
||||
<item>English</item>
|
||||
<item>Català</item>
|
||||
<item>Chinese 中国的</item>
|
||||
<item>Chinese 中国台湾</item>
|
||||
<item>Czech</item>
|
||||
<item>Dansk</item>
|
||||
<item>Deutsch</item>
|
||||
<item>English</item>
|
||||
<item>Español</item>
|
||||
<item>Suomi</item>
|
||||
<item>Français</item>
|
||||
<item>Galego</item>
|
||||
<item>Greek Ελληνικά</item>
|
||||
<item>Hungarian</item>
|
||||
<item>Indonesia</item>
|
||||
<item>Italiano</item>
|
||||
<item>Japanese 日本語</item>
|
||||
@ -98,20 +114,29 @@
|
||||
<item>Lightning</item>
|
||||
</string-array>
|
||||
<string-array name="supported_browsers">
|
||||
<item>info.guardianproject.browser</item>
|
||||
<item>org.mozilla.firefox</item>
|
||||
<item>org.mozilla.fennec_fdroid</item>
|
||||
<item>org.gnu.icecat</item>
|
||||
</string-array>
|
||||
<string-array name="supported_browser_labels">
|
||||
<item>Orweb</item>
|
||||
<item>Firefox</item>
|
||||
<item>Fennec F-Droid</item>
|
||||
<item>IceCatMobile</item>
|
||||
</string-array>
|
||||
<string-array name="unsupported_browsers">
|
||||
<item>com.android.chrome</item>
|
||||
<item>com.brave.browser</item>
|
||||
<item>com.android.browser</item>
|
||||
<item>com.sec.android.app.sbrowser</item>
|
||||
<item>com.stoutner.privacybrowser.standard</item>
|
||||
<item>info.guardianproject.browser</item>
|
||||
<item>mobi.mgeek.TunnyBrowser</item>
|
||||
<item>com.lastpass.lpandroid</item>
|
||||
<item>org.mozilla.focus</item>
|
||||
<item>org.mozilla.rocket</item>
|
||||
<item>org.mozilla.klar</item>
|
||||
<item>org.torproject.torbrowser</item>
|
||||
<item>org.torproject.torbrowser_alpha</item>
|
||||
</string-array>
|
||||
<string-array name="tunnel_profiles">
|
||||
<item>bulk</item>
|
||||
|
@ -33,6 +33,9 @@
|
||||
<!-- net.i2p.util.LogManager -->
|
||||
<string name="PROP_DEFAULTLEVEL" translatable="false">logger.defaultLevel</string>
|
||||
|
||||
<!-- net.i2p.router.client.ClientManager -->
|
||||
<string name="PROP_DISABLE_EXTERNAL" translatable="false">i2cp.disableInterface</string>
|
||||
|
||||
<!-- Others -->
|
||||
<string name="PREF_LANGUAGE" translatable="false">pref_language</string>
|
||||
</resources>
|
||||
</resources>
|
||||
|
@ -17,7 +17,7 @@
|
||||
Un-hidden in 0.9.40 because domain sockets don't work for third-party apps.
|
||||
-->
|
||||
<CheckBoxPreference
|
||||
android:key="i2cp.disableInterface"
|
||||
android:key="@string/PROP_DISABLE_EXTERNAL"
|
||||
android:defaultValue="false"
|
||||
android:title="@string/settings_label_i2cp"
|
||||
android:summary="@string/settings_desc_i2cp"
|
||||
|
@ -1,3 +1,4 @@
|
||||
|
||||
GROUP=net.i2p.android
|
||||
|
||||
org.gradle.jvmargs=-Xmx1536M
|
||||
@ -13,6 +14,6 @@ POM_DEVELOPER_ID=str4d
|
||||
POM_DEVELOPER_NAME=str4d
|
||||
POM_DEVELOPER_EMAIL=str4d@i2pmail.org
|
||||
|
||||
I2P_VERSION=0.9.40
|
||||
I2P_VERSION=0.9.41
|
||||
ANDROID_BUILD_TARGET_SDK_VERSION=26
|
||||
ANDROID_BUILD_SDK_VERSION=28
|
||||
|
@ -1,11 +1,15 @@
|
||||
apply plugin: 'com.android.library'
|
||||
|
||||
version = "$I2P_VERSION"
|
||||
repositories {
|
||||
mavenLocal()
|
||||
mavenCentral()
|
||||
}
|
||||
|
||||
android {
|
||||
compileSdkVersion Integer.parseInt(project.ANDROID_BUILD_SDK_VERSION as String)
|
||||
defaultConfig {
|
||||
minSdkVersion 9
|
||||
minSdkVersion 14
|
||||
targetSdkVersion Integer.parseInt(project.ANDROID_BUILD_TARGET_SDK_VERSION as String)
|
||||
}
|
||||
buildTypes {
|
||||
|
BIN
lib/client/src/main/jniLibs/arm64-v8a/libjbigi.so
Executable file
BIN
lib/client/src/main/jniLibs/arm64-v8a/libjbigi.so
Executable file
Binary file not shown.
Binary file not shown.
@ -2,6 +2,12 @@
|
||||
#
|
||||
# build GMP and libjbigi.so using the Android tools directly
|
||||
#
|
||||
# WARNING:
|
||||
# BROKEN - not updated for r19 NDK, aarch64, or GMP 6.1.2
|
||||
# Use the following in i2p.i2p source core/c/jbigi:
|
||||
# TARGET=android BITS=32 mbuild_all.sh
|
||||
# TARGET=android BITS=64 mbuild_all.sh
|
||||
#
|
||||
# TODO: Get more settings from environment variables set in ../custom-rules.xml
|
||||
#
|
||||
|
||||
@ -71,7 +77,7 @@ JBIGI="$I2PBASE/core/c/jbigi"
|
||||
# libcrypto crashes on emulator, don't trust it
|
||||
# jbigi about 20-25% slower than java on emulator
|
||||
#
|
||||
GMPVER=6.0.0
|
||||
GMPVER=6.1.2
|
||||
GMP="$JBIGI/gmp-$GMPVER"
|
||||
|
||||
if [ ! -d "$GMP" ]; then
|
||||
|
@ -5,7 +5,7 @@ version = '0.9.5'
|
||||
android {
|
||||
compileSdkVersion Integer.parseInt(project.ANDROID_BUILD_SDK_VERSION as String)
|
||||
defaultConfig {
|
||||
minSdkVersion 9
|
||||
minSdkVersion 14
|
||||
targetSdkVersion Integer.parseInt(project.ANDROID_BUILD_TARGET_SDK_VERSION as String)
|
||||
}
|
||||
buildTypes {
|
||||
@ -25,7 +25,10 @@ android {
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation 'com.android.support:support-v4:25.3.1'
|
||||
// Android Support Repository dependencies
|
||||
def supportVersion = '28.0.0'
|
||||
implementation "com.android.support:support-v4:$supportVersion"
|
||||
// Testing-only dependencies
|
||||
testImplementation 'junit:junit:4.12'
|
||||
testImplementation 'org.mockito:mockito-core:2.11.0'
|
||||
}
|
||||
|
@ -3,4 +3,7 @@
|
||||
<string name="yes">بله</string>
|
||||
<string name="no">خیر</string>
|
||||
<string name="install_i2p_android">نصب I2P اندروید؟</string>
|
||||
<string name="you_must_have_i2p_android">I2P اندروید باید نصب شده باشد و در حال اجرا باشد. آیا مایل هستید آن را نصب کنید؟</string>
|
||||
<string name="start_i2p_android">آغاز I2P اندروید؟</string>
|
||||
<string name="would_you_like_to_start_i2p_android">به نظر می آید که I2P اندروید در حال اجرا نمی باشد. آیا مایل به آغاز آن میباشید؟</string>
|
||||
</resources>
|
||||
|
@ -17,7 +17,7 @@ artifacts {
|
||||
routerjars file: file('libs/i2ptunnel.jar'), builtBy: buildRouter
|
||||
routerjars file: file('libs/i2ptunnel-ui.jar'), builtBy: buildRouter
|
||||
routerjars file: file('libs/addressbook.jar'), builtBy: buildRouter
|
||||
routerjars file: file('libs/BOB.jar'), builtBy: buildRouter
|
||||
//routerjars file: file('libs/BOB.jar'), builtBy: buildRouter
|
||||
}
|
||||
|
||||
clean.dependsOn cleanBuildRouter
|
||||
|
@ -36,7 +36,7 @@
|
||||
<ant dir="${i2pbase}" inheritall="false" useNativeBasedir="true" target="buildBOB" />
|
||||
</target>
|
||||
|
||||
<target name="buildrouter" depends="buildNewsXMLJar, buildI2PTunnelJar, buildAddressbook, buildBOB">
|
||||
<target name="buildrouter" depends="buildNewsXMLJar, buildI2PTunnelJar, buildAddressbook">
|
||||
<mkdir dir="${jar.libs.dir}" />
|
||||
|
||||
<!-- newsxml -->
|
||||
@ -50,7 +50,9 @@
|
||||
<copy file="${i2plib}/addressbook.jar" todir="${jar.libs.dir}" />
|
||||
|
||||
<!-- bob -->
|
||||
<!--
|
||||
<copy file="${i2plib}/BOB.jar" todir="${jar.libs.dir}" />
|
||||
-->
|
||||
|
||||
</target>
|
||||
|
||||
|
Reference in New Issue
Block a user