Compare commits

..

65 Commits

Author SHA1 Message Date
b39ee68c2f 2.5.1 2024-05-16 09:18:57 -04:00
3cb746594c Fix url text 2024-05-05 10:23:46 -04:00
27adae63eb Update forum URLs 2024-05-05 10:11:45 -04:00
85890d3b68 update CI files 2024-04-29 20:49:41 -04:00
96b045eb2a update CI files 2024-04-29 20:45:05 -04:00
8d00c5fa31 fix sync CI file 2024-04-29 20:28:08 -04:00
fc93a71552 Use CI to sync with gitlab 2024-04-29 18:59:34 -04:00
18e4aef4ca I2P for Android 2.5.0 2024-04-08 23:31:40 -04:00
5315e35adc I2P for Android 2.5.0 2024-04-08 23:23:24 -04:00
9ad9bc07ff Fix keystore name to produce signed build 2024-04-06 23:18:15 -04:00
bde92be29d Fix keystore path to produce signed build 2024-04-06 23:13:25 -04:00
849150ffa6 list keystore location at final step of CI so I can fix properties file 2024-04-06 23:08:51 -04:00
52dad19c7a list keystore location at final step of CI so I can fix properties file 2024-04-06 23:03:52 -04:00
e84a51097d fix base64 decode syntax 2024-04-05 16:13:54 -04:00
5289f5068a fix base64 decode syntax 2024-04-05 16:10:02 -04:00
09c7d9cfd8 fix base64 decode syntax 2024-04-05 16:06:12 -04:00
14d293fe6f Move keystore directory to runner user 2024-04-05 16:01:37 -04:00
7cd08cfd4c Assure keystore directory exists 2024-04-05 15:58:05 -04:00
aa22d83a44 fix syntax error 2024-04-05 15:10:11 -04:00
a1fd8d41b2 fix syntax error 2024-04-05 15:09:13 -04:00
9d24e68b57 remove secrets from sign.yml 2024-04-05 15:02:42 -04:00
d5e2804ea4 fix secret access to sign.yml 2024-04-05 14:58:33 -04:00
1edabd7252 fix secret access to sign.yml 2024-04-05 14:56:42 -04:00
52c1901eba fix secret access to sign.yml 2024-04-05 14:55:41 -04:00
a6f5221975 add secret access to sign.yml 2024-04-05 14:52:41 -04:00
caa57bbc3a add secret access to sign.yml 2024-04-05 14:51:34 -04:00
b28e5d741e add secret access to sign.yml 2024-04-05 14:50:20 -04:00
0f3a61390c fix typo in sign.yml 2024-04-05 14:46:58 -04:00
30a1f1d800 Create signing keys for dev-build specific builds 2024-04-05 14:41:38 -04:00
22d5d126f6 Create signing keys for dev-build specific builds 2024-04-05 14:36:18 -04:00
70e4ea810f Attempt signed CI builds(will fail right now) 2024-04-03 15:38:53 -04:00
b5c6e1489a Attempt signed CI builds(will fail right now) 2024-04-03 15:37:35 -04:00
333a1a49b1 Attempt CI builds 2024-04-03 15:26:58 -04:00
2ea93f106e unzip only tagged apk 2024-03-25 15:05:28 -04:00
d99ed0e5da Reduce timeout for release uploader 2024-03-25 14:53:34 -04:00
3881966ddb see if I can get trunk builds to work 2024-03-25 14:46:55 -04:00
9de9f46489 when a release is tagged copy over artifacts 2024-03-25 14:30:17 -04:00
149881522e specify a tag for non-trunk CI builds 2024-03-25 14:25:52 -04:00
df26d89310 attempt a trunk build too 2024-03-25 14:18:37 -04:00
707dcbbc78 create local.properties for routerjars 2024-03-25 14:08:25 -04:00
812aea9873 clone i2p.i2p in CI 2024-03-25 14:04:49 -04:00
aeb7614b62 clone i2p.i2p in CI 2024-03-25 14:00:30 -04:00
9bf9d27c5a use Java 11 in CI 2024-03-25 13:58:07 -04:00
f2cfe4cee5 start a CI build of the Android APK 2024-03-25 13:55:38 -04:00
45865ff5b9 Increment version code and upload to GPlay 2023-12-19 13:45:24 -05:00
96f9905952 Update I2P library version to 2.4.0 2023-12-19 13:44:04 -05:00
idk
41ca3fe527 tx pull 2023-07-05 18:18:32 -04:00
idk
c5468e4829 migrate transifex configs 2023-07-05 18:17:16 -04:00
idk
174bb7f827 increment version code 2023-07-05 15:51:33 -04:00
idk
3d92f32c13 update I2P library 2023-07-05 13:54:21 -04:00
idk
2fae27a3b3 bump version code 2023-04-15 05:46:17 +00:00
idk
71d38c64e0 fix version 2023-04-15 02:37:48 +00:00
idk
ddb651a602 pull in new translations 2023-03-18 04:04:56 +00:00
idk
a8ad1d8d47 update changelog 2023-03-18 04:02:13 +00:00
idk
912602bfc0 bump versioncode 2023-03-18 04:01:16 +00:00
idk
24e3358ffa check in stats page translation fix, update for release 2023-03-18 01:29:12 +00:00
idk
fcc51c429d update version code again 2023-03-04 23:09:41 +00:00
idk
de0ee87db3 bump versionCode and I2P_ANDROID_VERSION 2023-03-04 23:05:24 +00:00
idk
2102d55315 update javadoc on long copypasta section 2023-02-10 00:21:36 +00:00
idk
2f900ebe2d blocklist entries first attempt 2023-02-10 00:20:48 +00:00
idk
5c03981a61 don't overwrite subscriptions.txt TODO look into possible permissions issues obscuring the behavior of cRTFIA 2023-01-31 22:34:12 +00:00
idk
c68f0ff23a Add broadcast intent change from @RyeMantis to changelog 2023-01-23 00:36:14 +00:00
idk
b01f44ae1f enable adding base32 destinations from the addressbook interface. Allow base32 addresses which contain ports to validate 2023-01-23 00:32:26 +00:00
idk
05aeb0cf37 Merge branch 'remote-start' into 'master'
Allow third-party apps to start I2P on Android via a Bradcast Intent

Closes #39

See merge request i2p-hackers/i2p.android.base!3
2023-01-22 23:28:43 +00:00
fd8d596064 Allow third-party apps to start I2P on Android via a Bradcast Intent 2023-01-22 23:28:43 +00:00
36 changed files with 638 additions and 361 deletions

73
.github/workflows/ant.yml vendored Normal file
View File

@ -0,0 +1,73 @@
# Mostly copied from https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-java-with-ant
# zlatinb
name: Java CI
on: [push]
permissions:
contents: read
pages: write
id-token: write
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: GetText
run: sudo apt install gettext git
- uses: actions/checkout@v4
- name: Set up JDK 11
uses: actions/setup-java@v4
with:
java-version: '11'
distribution: 'temurin'
- name : Generate override.properties
run: |
rm -f override.properties
echo "build.built-by=GitHub Actions" >> override.properties
echo "noExe=true" >> override.properties
- name: build with Gradle
run: |
echo "i2psrc=$HOME/i2p.i2p" > routerjars/local.properties
git clone -b i2p-2.4.0 https://github.com/i2p/i2p.i2p "$HOME/i2p.i2p"
./gradlew assembleDebug
find . -name '*.apk'
- name: Upload i2p-debug-${{ github.sha }}.apk
uses: actions/upload-artifact@v4
with:
name: i2p-debug.apk
path: ./app/build/outputs/apk/free/debug/app-free-debug.apk
trunk:
runs-on: ubuntu-latest
steps:
- name: GetText
run: sudo apt install gettext git
- uses: actions/checkout@v4
- name: Set up JDK 11
uses: actions/setup-java@v4
with:
java-version: '11'
distribution: 'temurin'
- name : Generate override.properties
run: |
rm -f override.properties
echo "build.built-by=GitHub Actions" >> override.properties
echo "noExe=true" >> override.properties
grep -v I2P_ gradle.properties > gradle.properties.update
echo "I2P_VERSION=2.5.0-1" >> gradle.properties.update
echo "I2P_ANDROID_VERSION=2.5.0-1" >> gradle.properties.update
cp -v gradle.properties.update gradle.properties
- name: build with Gradle
run: |
echo "i2psrc=$HOME/i2p.i2p" > routerjars/local.properties
git clone -b master https://github.com/i2p/i2p.i2p "$HOME/i2p.i2p"
bash -c "cd $HOME/i2p.i2p && ./installer/resources/maven-dev-release.sh 1"
./gradlew assembleDebug
find . -name '*.apk'
- name: Upload i2p-debug-${{ github.sha }}.apk
uses: actions/upload-artifact@v4
with:
name: i2p-debug-trunk-${{ github.sha }}.apk
path: ./app/build/outputs/apk/free/debug/app-free-debug.apk

22
.github/workflows/github-sync.yml vendored Normal file
View File

@ -0,0 +1,22 @@
# File: .github/workflows/github-sync.yml for i2p-hackers/i2p.android.base
on:
schedule:
- cron: "*/5 * * * *"
workflow_dispatch:
jobs:
repo-sync:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
persist-credentials: false
- name: repo-sync
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
uses: repo-sync/github-sync@v2
with:
source_repo: "https://i2pgit.org/i2p-hackers/i2p.android.base"
source_branch: "master"
destination_branch: "master"
github_token: ${{ secrets.PAT }}

62
.github/workflows/release.yml vendored Normal file
View File

@ -0,0 +1,62 @@
name: Release
#on: [push]
on:
push:
# Sequence of patterns matched against refs/tags
tags:
- 'i2p-android-*.*.*' # Release i2p-firefox-1.2.3
- 'i2p-android-*.*.*-*' # Release i2p-firefox-1.2.3
jobs:
build:
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- uses: actions/checkout@v4
with:
sparse-checkout: |
CHANGELOG.md
sparse-checkout-cone-mode: false
- name: sleep 6 minutes
run: |
echo "sleeping 6 minutes to wait for artifacts"
sleep 1m
echo "sleeping 5 minutes to wait for artifacts"
sleep 1m
echo "sleeping 4 minutes to wait for artifacts"
sleep 1m
echo "sleeping 3 minutes to wait for artifacts"
sleep 1m
echo "sleeping 2 minutes to wait for artifacts"
sleep 1m
echo "sleeping 1 minutes to wait for artifacts"
sleep 1m
- name: Download artifacts
id: download-artifact
uses: dawidd6/action-download-artifact@v3
with:
skip_unpack: true
workflow: ant.yml
if_no_artifact_found: fail
# remove .zip file extension
#- run: for f in *.zip; do unzip "$f"; rm "$f"; done
- run: unzip i2p-debug.apk.zip
- run: echo "" | tee -a RELEASE.md
- run: echo "## Checksums" | tee -a RELEASE.md
- run: echo "" | tee -a RELEASE.md
- run: echo '```' | tee -a RELEASE.md
- run: sha256sum * | tee -a RELEASE.md
- run: echo '```' | tee -a RELEASE.md
- run: echo "" | tee -a RELEASE.md
- run: echo '```' | tee -a RELEASE.md
- run: file * | tee -a RELEASE.md
- run: echo '```' | tee -a RELEASE.md
- run: echo "" | tee -a RELEASE.md
- name: Upload artifacts
uses: ncipollo/release-action@v1
with:
artifacts: "*"
bodyFile: "RELEASE.md"

95
.github/workflows/sign.yml vendored Normal file
View File

@ -0,0 +1,95 @@
# Mostly copied from https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-java-with-ant
# zlatinb
name: Java Signed CI
on: [push]
permissions:
contents: read
pages: write
id-token: write
jobs:
build-signed:
runs-on: ubuntu-latest
steps:
- name: GetText
run: sudo apt install gettext git
- uses: actions/checkout@v4
- name: Set up JDK 11
uses: actions/setup-java@v4
with:
java-version: '11'
distribution: 'temurin'
- name: Generate override.properties
env:
DEV_SIGNING_KEY: ${{ secrets.DEV_SIGNING_KEY }}
DEV_PASSWORD: ${{ secrets.DEV_PASSWORD }}
run: |
rm -f override.properties
mv etc/github.gradle.properties gradle.properties
mv etc/github.signing.properties signing.properties
mkdir -p $HOME/keystores/
echo $DEV_SIGNING_KEY | base64 --decode > $HOME/keystores/android-release.keystore
echo "KEY_ALIAS=mykey" >> signing.properties
echo "KEY_PASSWORD=$DEV_PASSWORD" >> signing.properties
echo "build.built-by=GitHub Actions" >> override.properties
echo "noExe=true" >> override.properties
- name: build with Gradle
run: |
echo "i2psrc=$HOME/i2p.i2p" > routerjars/local.properties
git clone -b i2p-2.4.0 https://github.com/i2p/i2p.i2p "$HOME/i2p.i2p"
./gradlew assembleRelease
find . -name '*.apk'
ls -lah $HOME/keystores/android-release.keystore
ls -d $HOME
- name: Upload i2p-debug-${{ github.sha }}.apk
uses: actions/upload-artifact@v4
with:
name: i2p-debug.apk
path: ./app/build/outputs/apk/free/debug/app-free-debug.apk
trunk-signed:
runs-on: ubuntu-latest
steps:
- name: GetText
run: sudo apt install gettext git
- uses: actions/checkout@v4
- name: Set up JDK 11
uses: actions/setup-java@v4
with:
java-version: '11'
distribution: 'temurin'
- name: Generate override.properties
env:
DEV_SIGNING_KEY: ${{ secrets.DEV_SIGNING_KEY }}
DEV_PASSWORD: ${{ secrets.DEV_PASSWORD }}
run: |
rm -f override.properties
echo "build.built-by=GitHub Actions" >> override.properties
echo "noExe=true" >> override.properties
mv etc/github.gradle.properties gradle.properties
mv etc/github.signing.properties signing.properties
mkdir -p $HOME/keystores/
echo $DEV_SIGNING_KEY | base64 --decode > $HOME/keystores/android-release.keystore
echo "KEY_ALIAS=mykey" >> signing.properties
echo "KEY_PASSWORD=$DEV_PASSWORD" >> signing.properties
grep -v I2P_ gradle.properties > gradle.properties.update
echo "I2P_VERSION=2.5.0-1" >> gradle.properties.update
echo "I2P_ANDROID_VERSION=2.5.0-1" >> gradle.properties.update
cp -v gradle.properties.update gradle.properties
- name: build with Gradle
run: |
echo "i2psrc=$HOME/i2p.i2p" > routerjars/local.properties
git clone -b master https://github.com/i2p/i2p.i2p "$HOME/i2p.i2p"
bash -c "cd $HOME/i2p.i2p && ./installer/resources/maven-dev-release.sh 1"
./gradlew assembleRelease
find . -name '*.apk'
ls -lah $HOME/keystores/android-release.keystore
ls -d $HOME
- name: Upload i2p-debug-${{ github.sha }}.apk
uses: actions/upload-artifact@v4
with:
name: i2p-debug-trunk-${{ github.sha }}.apk
path: ./app/build/outputs/apk/free/debug/app-free-debug.apk

View File

@ -1,18 +1,18 @@
[main]
host = https://www.transifex.com
lang_map = he: iw, id: in, pt_BR: pt-rBR, ru_RU: ru, sv_SE: sv, tr_TR: tr, uk_UA: uk, yi: ji, zh_CN: zh, zh_TW: zh-rTW
host = https://www.transifex.com
lang_map = pt_BR: pt-rBR, yi: ji, zh_CN: zh, zh_TW: zh-rTW, id: in, ru_RU: ru, sv_SE: sv, tr_TR: tr, uk_UA: uk, he: iw
[I2P.android]
file_filter = app/src/main/res/values-<lang>/strings.xml
[o:otf:p:I2P:r:android]
file_filter = app/src/main/res/values-<lang>/strings.xml
source_file = app/src/main/res/values/strings.xml
source_lang = en
type = ANDROID
minimum_perc = 22
source_file = app/src/main/res/values/strings.xml
source_lang = en
type = ANDROID
[I2P.android_lib_helper]
file_filter = lib/helper/src/main/res/values-<lang>/strings.xml
[o:otf:p:I2P:r:android_lib_helper]
file_filter = lib/helper/src/main/res/values-<lang>/strings.xml
source_file = lib/helper/src/main/res/values/strings.xml
source_lang = en
type = ANDROID
minimum_perc = 50
source_file = lib/helper/src/main/res/values/strings.xml
source_lang = en
type = ANDROID

View File

@ -1,3 +1,19 @@
2.4.0
* Update I2P Library
2.3.0
* Update I2P Library
2.2.0
* Add blocklist feed support
* Fix translations on stats page
* Various bugfixes
2.1.0-1
* adds support for adding base32 addresses to the local addressbook
* adds support for destinations with ports in the string to i2ptunnel
* adds support for remote applications launching I2P, via MR#3 from @RyeMantis
2.1.0
* Upgrades router to version 2.1.0
* Adds jcenter repository back to app/ target, removes jcenter from other targets

View File

@ -33,7 +33,7 @@ translation.
5. Ensure you have the Mockito framework and accompanying documentation in your $JAVA_HOME
6. Ensure to have updated the changelog with the changes done.
7. Ensure that you are configured to build i2p.i2p with Java 8. On Debian it is easiest to set with
`update-java-alternatives --set java-8-openjdk-amd64` and picking Java 8. **TODO:** add instructions for non-Debian-based
`update-java-alternatives --set java-1.8.0-openjdk-amd64` and picking Java 8. **TODO:** add instructions for non-Debian-based
systems.
8. Ensure that you have a Java 1.7 bootclasspath available. (See **Maven Central** step 2A.)

View File

@ -8,7 +8,7 @@ repositories {
android {
compileSdkVersion Integer.parseInt(project.ANDROID_BUILD_TARGET_SDK_VERSION as String)
defaultConfig {
versionCode 4745274
versionCode 4745282
versionName "$I2P_ANDROID_VERSION"
minSdkVersion 21
targetSdkVersion Integer.parseInt(project.ANDROID_BUILD_TARGET_SDK_VERSION as String)

View File

@ -44,6 +44,14 @@
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
<receiver
android:name=".receiver.RemoteStartReceiver"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="net.i2p.android.router.receiver.START_I2P" />
</intent-filter>
</receiver>
<activity
android:name="net.i2p.android.I2PActivity"

View File

@ -88,7 +88,7 @@ class InitActivities {
File abDir = new File(myDir, "addressbook");
abDir.mkdir();
copyResourceToFile(R.raw.subscriptions_txt, "addressbook/subscriptions.txt");
copyResourceToFileIfAbsent(R.raw.subscriptions_txt, "addressbook/subscriptions.txt");
mergeResourceToFile(R.raw.addressbook_config_txt, "addressbook/config.txt", null);
File docsDir = new File(myDir, "docs");

View File

@ -1,5 +1,13 @@
package net.i2p.android.apps;
import static net.i2p.app.ClientAppState.INITIALIZED;
import static net.i2p.app.ClientAppState.RUNNING;
import static net.i2p.app.ClientAppState.STARTING;
import static net.i2p.app.ClientAppState.STOPPED;
import static net.i2p.app.ClientAppState.STOPPING;
import static net.i2p.app.ClientAppState.UNINITIALIZED;
import static net.i2p.update.UpdateType.BLOCKLIST;
import android.content.Context;
import net.i2p.android.router.NewsActivity;
@ -8,20 +16,26 @@ 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.Base64;
import net.i2p.data.DataHelper;
import net.i2p.data.Hash;
import net.i2p.router.Banlist;
import net.i2p.router.Blocklist;
import net.i2p.router.RouterContext;
import net.i2p.router.news.BlocklistEntries;
import net.i2p.router.news.NewsEntry;
import net.i2p.router.news.NewsMetadata;
import net.i2p.router.news.NewsXMLParser;
import net.i2p.util.Addresses;
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;
import net.i2p.util.RFC822Date;
import net.i2p.util.ReusableGZIPInputStream;
import net.i2p.util.SecureFile;
import net.i2p.util.SecureFileOutputStream;
import java.io.BufferedWriter;
import java.io.File;
@ -32,6 +46,7 @@ import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
/**
@ -58,6 +73,10 @@ public class NewsFetcher implements Runnable, EepGet.StatusListener, ClientApp {
private volatile ClientAppState _state = UNINITIALIZED;
public static final String APP_NAME = "NewsFetcher";
static final String PROP_BLOCKLIST_TIME = "router.blocklistVersion";
private static final String BLOCKLIST_DIR = "docs/feed/blocklist";
private static final String BLOCKLIST_FILE = "blocklist.txt";
/**
* As of 0.9.41, returns a new one every time. Only call once.
*/
@ -333,6 +352,11 @@ public class NewsFetcher implements Runnable, EepGet.StatusListener, ClientApp {
xml.delete();
NewsMetadata data = parser.getMetadata();
List<NewsEntry> entries = parser.getEntries();
BlocklistEntries ble = parser.getBlocklistEntries();
if (ble != null && ble.isVerified())
processBlocklistEntries(ble);
else
_log.info("No blocklist entries found in news feed");
String sudVersion = su3.getVersionString();
String signingKeyName = su3.getSignerString();
File to3 = new File(_context.getTempDir(), "tmp3-" + _context.random().nextInt() + ".xml");
@ -343,6 +367,104 @@ public class NewsFetcher implements Runnable, EepGet.StatusListener, ClientApp {
}
}
/**
* Process blocklist entries
*
* @since 0.9.57
*/
private void processBlocklistEntries(BlocklistEntries ble) {
long oldTime = _context.getProperty(PROP_BLOCKLIST_TIME, 0L);
if (ble.updated <= oldTime) {
if (_log.shouldWarn())
_log.warn("Not processing blocklist " + DataHelper.formatDate(ble.updated) +
", already have " + DataHelper.formatDate(oldTime));
return;
}
Blocklist bl = _context.blocklist();
Banlist ban = _context.banlist();
String reason = "Blocklist feed " + DataHelper.formatDate(ble.updated);
int banned = 0;
for (Iterator<String> iter = ble.entries.iterator(); iter.hasNext(); ) {
String s = iter.next();
if (s.length() == 44) {
byte[] b = Base64.decode(s);
if (b == null || b.length != Hash.HASH_LENGTH) {
iter.remove();
continue;
}
Hash h = Hash.create(b);
if (!ban.isBanlistedForever(h)) {
ban.banlistRouterForever(h, reason);
_context.commSystem().forceDisconnect(h);
}
} else {
byte[] ip = Addresses.getIP(s);
if (ip == null) {
iter.remove();
continue;
}
if (!bl.isBlocklisted(ip))
bl.add(ip);
}
if (++banned >= BlocklistEntries.MAX_ENTRIES) {
// prevent somebody from destroying the whole network
break;
}
}
for (String s : ble.removes) {
if (s.length() == 44) {
byte[] b = Base64.decode(s);
if (b == null || b.length != Hash.HASH_LENGTH)
continue;
Hash h = Hash.create(b);
if (ban.isBanlistedForever(h))
ban.unbanlistRouter(h);
} else {
byte[] ip = Addresses.getIP(s);
if (ip == null)
continue;
if (bl.isBlocklisted(ip))
bl.remove(ip);
}
}
// Save the blocks. We do not save the unblocks.
File f = new SecureFile(_context.getConfigDir(), BLOCKLIST_DIR);
f.mkdirs();
f = new File(f, BLOCKLIST_FILE);
boolean fail = false;
BufferedWriter out = null;
try {
out = new BufferedWriter(new OutputStreamWriter(new SecureFileOutputStream(f), "UTF-8"));
out.write("# ");
out.write(ble.supdated);
out.newLine();
banned = 0;
for (String s : ble.entries) {
s = s.replace(':', ';'); // IPv6
out.write(reason);
out.write(':');
out.write(s);
out.newLine();
if (++banned >= BlocklistEntries.MAX_ENTRIES)
break;
}
} catch (IOException ioe) {
_log.error("Error writing blocklist", ioe);
fail = true;
} finally {
if (out != null) try {
out.close();
} catch (IOException ioe) {}
}
if (!fail) {
f.setLastModified(ble.updated);
String upd = Long.toString(ble.updated);
_context.router().saveConfig(PROP_BLOCKLIST_TIME, upd);
}
if (_log.shouldWarn())
_log.warn("Processed " + ble.entries.size() + " blocks and " + ble.removes.size() + " unblocks from news feed");
}
/**
* Gunzip the file
*

View File

@ -406,20 +406,21 @@ public class MainFragment extends I2PFragmentBase {
//ctx.commSystem().getReachabilityStatus();
String status =
"Exploratory Tunnels in/out: " + inEx + " / " + outEx
+ "\nClient Tunnels in/out: " + inCl + " / " + outCl;
getString(R.string.notification_status_expl, inEx, outEx) + '\n' +
getString(R.string.notification_status_client, inCl, outCl);
// Need to see if we have the participation option set to on.
// I thought there was a router method for that? I guess not! WHY NOT?
// It would be easier if we had a number to test status.
String participate = "\nParticipation: " + tunnelStatus + " (" + part + ")";
String participate = '\n' + getString(R.string.settings_label_hiddenMode) + ": " + tunnelStatus + " (" + part + ")";
String details =
"\nMemory: " + DataHelper.formatSize(Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory())
+ "B / " + DataHelper.formatSize(Runtime.getRuntime().maxMemory()) + 'B'
+ "\nJob Lag: " + jobLag
+ "\nMsg Delay: " + msgDelay;
'\n' + getString(R.string.stats_memory) + ": " +
DataHelper.formatSize(Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory()) +
"B / " + DataHelper.formatSize(Runtime.getRuntime().maxMemory()) + 'B' +
'\n' + getString(R.string.stats_lag) + ": " + jobLag +
'\n' + getString(R.string.stats_delay) + ": " + msgDelay;
_savedStatus = status + participate + details;
vAdvStatusText.setText(_savedStatus);
@ -661,7 +662,7 @@ public class MainFragment extends I2PFragmentBase {
// even if an error occurs. http://trac.i2p2.i2p/ticket/2783
intent.setAction(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS);
intent.setData(Uri.parse("package:" + packageName));
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
try {
mContext.startActivity(intent);
} catch (ActivityNotFoundException activityNotFound) {

View File

@ -4,7 +4,7 @@ import android.content.Context;
import android.content.res.Resources;
import net.i2p.android.router.R;
import net.i2p.android.wizard.model.AbstractWizardModel;
import net.i2p.android.wizard.model.I2PB64DestinationPage;
import net.i2p.android.wizard.model.I2PDestinationPage;
import net.i2p.android.wizard.model.PageList;
import net.i2p.android.wizard.model.SingleTextFieldPage;
@ -22,7 +22,7 @@ public class AddressbookAddWizardModel extends AbstractWizardModel {
.setDescription(res.getString(R.string.addressbook_add_wizard_desc_name))
.setRequired(true),
new I2PB64DestinationPage(this, res.getString(R.string.addressbook_add_wizard_k_destination))
new I2PDestinationPage(this, res.getString(R.string.i2ptunnel_wizard_k_dest))
.setDescription(res.getString(R.string.addressbook_add_wizard_desc_destination))
.setRequired(true)
);

View File

@ -0,0 +1,23 @@
package net.i2p.android.router.receiver;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;
import net.i2p.android.router.service.RouterService;
import net.i2p.android.router.util.Util;
public class RemoteStartReceiver extends BroadcastReceiver {
public void onReceive(Context context, Intent intent) {
if(Util.getRouterContext() == null){
Intent rsIntent = new Intent(context, RouterService.class);
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O){
context.startForegroundService(rsIntent);
} else {
context.startService(rsIntent);
}
Toast.makeText(context, "Starting I2P Router", Toast.LENGTH_SHORT).show();
}
}
}

View File

@ -46,16 +46,36 @@ public class NamingServiceUtil {
String displayHost = host.equals(hostName) ? hostName :
hostName + " (" + host + ')';
String destB64 = data.getBundle(kDest).getString(Page.SIMPLE_DATA_KEY);
Destination dest = new Destination();
try {
dest.fromBase64(destB64);
} catch (DataFormatException e) {} // Already validated
String dest = data.getBundle(kDest).getString(Page.SIMPLE_DATA_KEY).split(":")[0];
Destination destination = new Destination();
if (dest.endsWith(".b32.i2p")) {
NamingService dns = NamingServiceUtil.getNamingService(Util.getRouterContext(),"");
destination = dns.lookup(dest);
int i = 0;
while (destination == null) {
dns = NamingServiceUtil.getNamingService(Util.getRouterContext(),"");
destination = dns.lookup(dest);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
i++;
if (i > 500){
break;
}
}
} else {
try {
destination.fromBase64(dest);
} catch (DataFormatException e) {
e.printStackTrace();
}
}
// Check if already in addressbook
Destination oldDest = ns.lookup(host);
if (oldDest != null) {
if (destB64.equals(oldDest.toBase64()))
if (destination.toBase64().equals(oldDest.toBase64()))
Toast.makeText(ctx,
"Host name " + displayHost + " is already in address book, unchanged.",
Toast.LENGTH_LONG).show();
@ -65,7 +85,7 @@ public class NamingServiceUtil {
Toast.LENGTH_LONG).show();
} else {
// Put the new host name
success = ns.put(host, dest);
success = ns.put(host, destination);
if (!success)
Toast.makeText(ctx,
"Failed to add Destination " + displayHost + " to naming service " + ns.getName(),

View File

@ -1,47 +0,0 @@
package net.i2p.android.wizard.model;
import android.support.v4.app.Fragment;
import net.i2p.android.wizard.ui.I2PB64DestinationFragment;
import net.i2p.data.DataFormatException;
import net.i2p.data.Destination;
/**
* A page asking for an I2P Destination.
* This must be the B64 representation of a Destination.
*/
public class I2PB64DestinationPage extends SingleTextFieldPage {
private String mFeedback;
public I2PB64DestinationPage(ModelCallbacks callbacks, String title) {
super(callbacks, title);
}
@Override
public Fragment createFragment() {
return I2PB64DestinationFragment.create(getKey());
}
@Override
public boolean isValid() {
String data = mData.getString(SIMPLE_DATA_KEY);
try {
new Destination().fromBase64(data);
} catch (DataFormatException dfe) {
mFeedback = "Invalid B64";
return false;
}
mFeedback = "";
return true;
}
@Override
public boolean showFeedback() {
return true;
}
@Override
public String getFeedback() {
return mFeedback;
}
}

View File

@ -4,9 +4,12 @@ import java.util.Locale;
import android.support.v4.app.Fragment;
import net.i2p.I2PAppContext;
import net.i2p.android.wizard.ui.I2PDestinationFragment;
import net.i2p.client.naming.NamingService;
import net.i2p.data.DataFormatException;
import net.i2p.data.Destination;
import net.i2p.client.naming.DummyNamingService;
/**
* A page asking for an I2P Destination.
@ -27,12 +30,18 @@ public class I2PDestinationPage extends SingleTextFieldPage {
@Override
public boolean isValid() {
String data = mData.getString(SIMPLE_DATA_KEY);
String data = mData.getString(SIMPLE_DATA_KEY).split(":")[0];
if (data.toLowerCase(Locale.US).endsWith(".b32.i2p")) { /* B32 */
if (data.length() == BASE32_HASH_LENGTH + 8 || data.length() >= BASE32_HASH_LENGTH + 12) {
if (data.length() == BASE32_HASH_LENGTH){
mFeedback = "";
return true;
}
if (data.length() >= BASE32_HASH_LENGTH + 8) {
if (data.length() <= BASE32_HASH_LENGTH + 12) {
mFeedback = "";
return true;
}
}
mFeedback = "Invalid B32";
return false;
} else if (data.endsWith(".i2p")) { /* Domain */

View File

@ -1,208 +0,0 @@
/*
* Copyright 2013 str4d
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package net.i2p.android.wizard.ui;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.os.ParcelFileDescriptor;
import android.support.v4.app.Fragment;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.inputmethod.InputMethodManager;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
import net.i2p.android.router.R;
import net.i2p.android.router.util.Util;
import net.i2p.android.wizard.model.Page;
import net.i2p.android.wizard.model.SingleTextFieldPage;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
public class I2PB64DestinationFragment extends Fragment {
static final int REQUEST_DESTINATION_FILE = 1;
private static final String ARG_KEY = "key";
private PageFragmentCallbacks mCallbacks;
private SingleTextFieldPage mPage;
protected TextView mFieldView;
private TextView mFeedbackView;
public static I2PB64DestinationFragment create(String key) {
Bundle args = new Bundle();
args.putString(ARG_KEY, key);
I2PB64DestinationFragment fragment = new I2PB64DestinationFragment();
fragment.setArguments(args);
return fragment;
}
public I2PB64DestinationFragment() {
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Bundle args = getArguments();
String mKey = args.getString(ARG_KEY);
mPage = (SingleTextFieldPage) mCallbacks.onGetPage(mKey);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_wizard_page_single_text_field_picker, container, false);
((TextView) rootView.findViewById(android.R.id.title)).setText(mPage.getTitle());
((TextView) rootView.findViewById(R.id.wizard_text_field_desc)).setText(mPage.getDesc());
Button b = (Button) rootView.findViewById(R.id.wizard_text_field_pick);
b.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
Intent i = new Intent(Intent.ACTION_GET_CONTENT);
i.setType("text/plain");
i.addCategory(Intent.CATEGORY_OPENABLE);
try {
startActivityForResult(
Intent.createChooser(i,"Select B64 file"),
REQUEST_DESTINATION_FILE);
} catch (android.content.ActivityNotFoundException ex) {
Toast.makeText(getActivity(), "Please install a File Manager.",
Toast.LENGTH_SHORT).show();
}
}
});
mFieldView = ((TextView) rootView.findViewById(R.id.wizard_text_field));
mFieldView.setHint(mPage.getTitle());
if (mPage.getData().getString(Page.SIMPLE_DATA_KEY) != null)
mFieldView.setText(mPage.getData().getString(Page.SIMPLE_DATA_KEY));
else if (mPage.getDefault() != null) {
mFieldView.setText(mPage.getDefault());
mPage.getData().putString(Page.SIMPLE_DATA_KEY, mPage.getDefault());
}
mFeedbackView = (TextView) rootView.findViewById(R.id.wizard_text_field_feedback);
return rootView;
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
if (!(activity instanceof PageFragmentCallbacks)) {
throw new ClassCastException("Activity must implement PageFragmentCallbacks");
}
mCallbacks = (PageFragmentCallbacks) activity;
}
@Override
public void onDetach() {
super.onDetach();
mCallbacks = null;
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
mFieldView.addTextChangedListener(new TextWatcher() {
public void beforeTextChanged(CharSequence charSequence, int i, int i1,
int i2) {
}
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
public void afterTextChanged(Editable editable) {
mPage.getData().putString(Page.SIMPLE_DATA_KEY,
(editable != null) ? editable.toString() : null);
mPage.notifyDataChanged();
if (mPage.showFeedback()) {
mFeedbackView.setText(mPage.getFeedback());
}
}
});
}
@Override
public void setMenuVisibility(boolean menuVisible) {
super.setMenuVisibility(menuVisible);
// In a future update to the support library, this should override setUserVisibleHint
// instead of setMenuVisibility.
if (mFieldView != null) {
InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(
Context.INPUT_METHOD_SERVICE);
if (!menuVisible) {
imm.hideSoftInputFromWindow(getView().getWindowToken(), 0);
}
}
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_DESTINATION_FILE) {
if (resultCode == Activity.RESULT_OK) {
Uri result = data.getData();
BufferedReader br = null;
try {
ParcelFileDescriptor pfd = getActivity().getContentResolver().openFileDescriptor(result, "r");
br = new BufferedReader(
new InputStreamReader(
new ParcelFileDescriptor.AutoCloseInputStream(pfd)));
try {
mFieldView.setText(br.readLine());
} catch (IOException ioe) {
Util.e("Failed to read B64 file", ioe);
Toast.makeText(getActivity(), "Failed to read B64 file.",
Toast.LENGTH_SHORT).show();
}
} catch (FileNotFoundException fnfe) {
Util.e("Could not find B64 file", fnfe);
Toast.makeText(getActivity(), "Could not find B64 file.",
Toast.LENGTH_SHORT).show();
} catch (SecurityException se) {
Util.e("Could not open B64 file", se);
Toast.makeText(getActivity(), "Could not open B64 file.",
Toast.LENGTH_SHORT).show();
} finally {
if (br != null)
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
}

View File

@ -82,8 +82,7 @@ call!</li>
href="http://i2pforum.i2p/" target="_blank">i2pforum.i2p</a>: A secure
and anonymous online forum community where developers
and users alike discuss problems and ideas relating to I2P and associated
topics, and <a href="http://zzz.i2p/" target="_blank">zzz's developer
forums</a> for both end users and developers.</li>
topics.</li>
<li class="tidylist"><b>I2P Anonymous Pastebin</b><br><a
href="http://paste.idk.i2p/" target="_blank">paste.idk.i2p</a>: Secure and
anonymous paste service allowing anonymous text and text-based code
@ -148,7 +147,7 @@ via <a href="irc://irc.freenode.net/i2p">Freenode IRC</a>.
<li class="tidylist"><b>Reporting Bugs</b><br>If you'd like to report a bug,
please file a ticket on <a href="http://git.idk.i2p/"
target="_blank">git.idk.i2p</a>. For developer-related discussions, please
visit <a href="http://zzz.i2p/" target="_blank">zzz's developer forums</a> or
visit <a href="http://i2pforum.i2p/" target="_blank">I2P's developer forums</a> or
come and visit the <a href="irc://127.0.0.1:6668/i2p-dev">developer channel</a>
on I2P's IRC network. Developers can browse source at <a
href="git.idk.i2p/i2p-hackers/i2p.i2p/-/commits/master" target="_blank">git.idk.i2p</a> or

View File

@ -46,6 +46,7 @@
<string name="action_refresh">تحديث</string>
<string name="stats_not_ready">مدير الإحصاءات غير جاهز حاليا. يرجى المحاولة لاحقا</string>
<string name="routers">الموجه</string>
<string name="countries">بلدان</string>
<string name="country">البلد</string>
<string name="transport">نقل</string>
<string name="version">إصدار</string>
@ -105,6 +106,7 @@
<string name="description">وصف</string>
<string name="auto_start">تشغيل آلي</string>
<string name="outproxies">بروكسي خارجي</string>
<string name="irc">IRC</string>
<string name="use_ssl">استعمل SSL</string>
<string name="profile">بروفايل</string>
<string name="access_control">سيطرة الوصول</string>

View File

@ -25,6 +25,7 @@
<string name="firewalled">Firewalled</string>
<string name="symmetric_nat">Symetrický NAT</string>
<!--Parameter is a time, e.g. 32s or 2m-->
<string name="uptime">Dostupnost</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".-->
@ -65,6 +66,7 @@
<string name="settings_label_network">Síť</string>
<string name="settings_label_hiddenMode">Participace</string>
<string name="settings_dialog_sharePercent">Procento šířky pásma ke sdílení</string>
<string name="settings_label_logging">Logování</string>
<string name="settings_label_appearance">Podoba</string>
<string name="settings_label_language">Jazyk</string>
<string name="settings_default">Výchozí</string>

View File

@ -84,6 +84,7 @@
<string name="name">Navn</string>
<string name="description">Beskrivelse</string>
<string name="use_ssl">Brug SSL</string>
<string name="profile">Profil</string>
<string name="access_control">Adgangskontrol</string>
<string name="disabled">Deaktiveret</string>
<string name="http_client">HTTP klient</string>

View File

@ -115,6 +115,11 @@
<string name="notification_status_peers">Pares: %1$d activos, %2$d conocidos</string>
<string name="notification_status_expl">Túneles exploratorios: %1$d/%2$d</string>
<string name="notification_status_client">Túneles de cliente: %1$d/%2$d</string>
<string name="stats_memory">Memoria usada/max</string>
<string name="stats_lag">Demora de tareas</string>
<string name="stats_delay">Demora de mensajes</string>
<string name="copied_base32_system_notification_title">Base32 copiado al portapapeles</string>
<string name="copied_base32_system_notification_body">La dirección de su túnel I2P se ha copiado en el portapapeles.</string>
<string name="menu_settings">Configuración</string>
<string name="settings_enable">Activar</string>
<string name="settings_desc_subscriptions">URLs de suscripción</string>
@ -147,6 +152,13 @@
<string name="settings_label_transports">Transportes</string>
<string name="settings_label_maxConns">Conexiones máximas</string>
<string name="settings_label_i2cp">Interfaz de I2CP</string>
<string name="settings_desc_i2cp">Permitir que las aplicaciones de terceros creen túneles usando I2CP (requiere el reinicio del enrutador)</string>
<string name="settings_label_sam">Interfaz SAM</string>
<string name="settings_desc_sam">Permitir que las aplicaciones de terceros creen túneles usando SAM (requiere el reinicio del enrutador)</string>
<string name="settings_confirm_sam">Una aplicación está intentando establecer una conexión SAM.</string>
<string name="settings_confirm_sam_id">Nombre de conexión/ID:</string>
<string name="settings_confirm_allow_sam">Toca para permitir</string>
<string name="settings_confirm_deny_sam">Ignorar para negar</string>
<string name="settings_label_exploratory_pool">Grupo exploratorio</string>
<string name="settings_desc_exploratory_pool">Parámetros de túneles</string>
<string name="settings_label_expl_inbound">Túneles de entrada</string>
@ -171,6 +183,7 @@
<string name="about_bugs">Fallos y soporte:</string>
<string name="about_helpwanted">¡Buscamos ayuda!</string>
<string name="about_volunteer">¿Quiere ayudar a hacer mejor la aplicación? Ofrézcase voluntario en el foro de Android:</string>
<string name="about_gitlab">¿Quiere sugerir una función o corregir un error? haga una solicitud de fusión en Android Gitlab:</string>
<string name="menu_help">Ayuda</string>
<string name="general">General</string>
<string name="label_router">Direcciones públicas</string>
@ -231,6 +244,7 @@
<string name="enabled">Habilitado</string>
<string name="i2ptunnel_wizard_desc_name">El nombre del túnel, para su identificación en la lista de túneles.</string>
<string name="i2ptunnel_wizard_desc_desc">Una descripción del túnel. Esto es opcional y puramente informativo.</string>
<string name="i2ptunnel_wizard_desc_dest">Especifique aquí la dirección .i2p o destino (hostname.i2p, b32 o b64) del túnel.</string>
<string name="i2ptunnel_wizard_desc_outproxies">Si sabe de cualquier proxy de salida para este tipo de túnel (bien HTTP o SOCKS), introdúzcalo. Separe los proxys con comas.</string>
<string name="i2ptunnel_wizard_desc_target_host">Esta es la IP sobre la que su servicio está ejecutándose, como este normalmente está en la misma máquina, se autorellena con 127.0.0.1</string>
<string name="i2ptunnel_wizard_desc_target_port">Este es el puerto sobre el que el servicio está aceptando conexiones.</string>
@ -357,4 +371,5 @@
<string name="label_browser_configuration">Configuración del navegador</string>
<string name="no_market_app">No se encontró la aplicación en Android market, por favor, instálela manualmente</string>
<string name="unset">No configurado</string>
<string name="running_background">I2P se ejecuta en segundo plano</string>
</resources>

View File

@ -21,7 +21,7 @@
<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_on">I2Pは稼働中 (長押しで止)</string>
<string name="button_router_graceful">I2Pは%sでシャットダウン</string>
<string name="button_shutdown_now">長押しで今すぐ停止</string>
<string name="button_cancel_graceful">長押ししてシャットダウンをキャンセル</string>
@ -55,8 +55,8 @@
<string name="upload">アップロード</string>
<string name="configure_browser_title">ブラウザの設定をしますか?</string>
<string name="configure_browser_for_i2p">I2Pサイトを見るためにブラウザを設定しますか(あとでヘルプメニューからも設定できます)</string>
<string name="configure_no_doze_title">バッテリー最適化を管理?</string>
<string name="configure_no_doze">I2Pは稼働し続けていれば最もよく動作します。Androidが電気の節約を試みたときにI2Pを終了しないようにするため、バッテリー例外リストにI2Pを追加できます。これにより、アプリケーションの信頼性が大幅に上昇します。\n\nI2Pをバックグラウンドで稼働し続けますか推奨</string>
<string name="configure_no_doze_title">電池最適化を管理?</string>
<string name="configure_no_doze">I2Pは稼働し続けていれば最もよく動作します。Androidが電気の節約を試みたときにI2Pを終了しないようにするため、電池例外の一覧にI2Pを追加できます。これにより、アプリケーションの信頼性が大幅に上昇します。\n\nI2Pをバックグラウンドで稼働し続けますか推奨</string>
<string name="first_start_title">I2P のインストールおめでとうございます!</string>
<string name="first_start_welcome"><b>I2P へようこそ!</b> I2P が立ち上がり、ピアを見つけるまで<b>我慢してください</b></string>
<string name="first_start_read">待っている間、リリースノートとウェルカムページをお読みください。</string>
@ -116,12 +116,14 @@
<string name="notification_status_expl">調査トンネル: %1$d/%2$d</string>
<string name="notification_status_client">クライアントトンネル: %1$d/%2$d</string>
<string name="stats_memory">メモリ 使用/最大</string>
<string name="copied_base32_system_notification_title">Base32をクリップボードにコピー</string>
<string name="copied_base32_system_notification_body">あなたのI2Pトンネルのアドレスはクリップボードにコピーされました。</string>
<string name="menu_settings">設定</string>
<string name="settings_enable">有効</string>
<string name="settings_desc_subscriptions">URL を登録</string>
<string name="settings_label_bandwidth_net">帯域幅とネットワーク</string>
<string name="settings_label_startOnBoot">デバイスの起動時にI2Pも起動</string>
<string name="settings_desc_startOnBoot">デバイスの起動時に自動でI2Pに接続</string>
<string name="settings_label_startOnBoot">端末の起動時にI2Pも起動</string>
<string name="settings_desc_startOnBoot">Android端末の起動時に自動でI2Pに接続</string>
<string name="settings_label_bandwidth">帯域幅</string>
<string name="settings_label_bw_inbound">受信速度</string>
<string name="settings_desc_bw_inbound">最大受信速度</string>
@ -148,6 +150,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">サードパーティのアプリがI2CPを使用するトンネルを作成することを許可ルーターの再起動が必要</string>
<string name="settings_label_sam">SAMインターフェース</string>
<string name="settings_desc_sam">サードパーティのアプリがSAMを使用するトンネルを作成することを許可ルーターの再起動が必要</string>
<string name="settings_confirm_sam">アプリケーションはSAM接続を作成することを試行中。</string>
@ -177,12 +180,12 @@
<string name="about_project">プロジェクトホーム:</string>
<string name="about_bugs">バグとサポート:</string>
<string name="about_helpwanted">人手募集中!</string>
<string name="about_volunteer">アプリの改善を手伝いたいですか? Android フォーラム上でボランティア:</string>
<string name="about_volunteer">アプリの改善を手伝いたいですか? Android フォーラム上で助力:</string>
<string name="about_gitlab">機能またはバグ修正の提案を行いますか Android Gitlab上でMerge要求を作成してください:</string>
<string name="menu_help">ヘルプ</string>
<string name="general">一般</string>
<string name="label_router">公開アドレス</string>
<string name="label_private">プライベートなアドレス</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>
@ -261,9 +264,9 @@
<string name="shared_client">共有クライアント</string>
<string name="tunnel_summ_shared_client">他の共有クライアントと同じ宛先を使う</string>
<string name="target_destination">対象の宛先</string>
<string name="persistent_key">永続的なキー</string>
<string name="persistent_key_conflict_title">新しいキーの再開放を無効にしますか?</string>
<string name="persistent_key_conflict_msg">再開放で新しいキーを生成するようトンネルを設定している間に永続キーを有効にできません。新しいキーの再開放を無効にしますか?</string>
<string name="persistent_key">永続的な</string>
<string name="persistent_key_conflict_title">新しいの再開放を無効にしますか?</string>
<string name="persistent_key_conflict_msg">再開放で新しいを生成するようトンネルを設定している間に永続を有効にできません。新しいの再開放を無効にしますか?</string>
<string name="tunnel_summ_persistent_key">再起動時にこのトンネルの宛先を維持する</string>
<string name="reachable_on">到達可能</string>
<string name="listen_port">着信ポート</string>
@ -317,18 +320,18 @@
<string name="client_ban_length">クライアントの禁止の長さ</string>
<string name="total_posts_per_period">期間当たりの合計POST数</string>
<string name="total_ban_length">禁止の長さの合計</string>
<string name="power_saving">パワーセーブ</string>
<string name="delay_open">オープンを遅れさせる</string>
<string name="tunnel_summ_delay_open">要求されるまでトンネルのオープンを遅らせる</string>
<string name="power_saving">出力温存</string>
<string name="delay_open">開放を遅れさせる</string>
<string name="tunnel_summ_delay_open">要求されるまでトンネルの開放を遅らせる</string>
<string name="reduce_quantity">数を減らす</string>
<string name="tunnel_summ_reduce_quantity">アイドル時トンネルの数を減らす</string>
<string name="idle_time">アイドル時間</string>
<string name="num_minutes">%s /分</string>
<string name="reduced_tunnel_quantity">減らしたトンネルの数量</string>
<string name="close_tunnels">アイドル時トンネルを閉じる</string>
<string name="new_keys_on_reopen">再開放で新しいキーにする</string>
<string name="new_keys_on_reopen_conflict_title">持続的なキーを無効化する?</string>
<string name="new_keys_on_reopen_conflict_msg">トンネルが永続キーを持つよう設定している間に新しいキーの再解放を有効にできません。永続キーを無効にしますか?</string>
<string name="new_keys_on_reopen">再開放で新しいにする</string>
<string name="new_keys_on_reopen_conflict_title">持続的なを無効化する?</string>
<string name="new_keys_on_reopen_conflict_msg">トンネルが永続を持つよう設定している間に新しいの再解放を有効にできません。永続を無効にしますか?</string>
<string name="http_client">HTTPクライアント</string>
<string name="tunnel_summ_user_agent">\'User-Agent\'ヘッダーを通す</string>
<string name="tunnel_summ_referer">\'リファラー\'ヘッダーを通す</string>
@ -345,7 +348,7 @@
<string name="signature_type">署名形式</string>
<string name="custom_options">カスタムオプション</string>
<string name="all">すべて</string>
<string name="no_messages">本文がありません</string>
<string name="no_messages">本文なし</string>
<string name="no_error_messages">エラーメッセージなし</string>
<plurals name="log_error_messages">
<item quantity="other">%d エラーメッセージ、新しい順</item>

View File

@ -115,6 +115,11 @@
<string name="notification_status_peers">Pares: %1$d ativos, %2$d conhecidos</string>
<string name="notification_status_expl">Túneis exploratórios: %1$d/%2$d</string>
<string name="notification_status_client">Túneis cliente: %1$d/%2$d</string>
<string name="stats_memory">Memória usada/max</string>
<string name="stats_lag">Atraso no trabalho</string>
<string name="stats_delay">Atraso de mensagem</string>
<string name="copied_base32_system_notification_title">Base32 copiado para a área de transferência</string>
<string name="copied_base32_system_notification_body">O endereço do túnel I2P foi copiado para a área de transferência.</string>
<string name="menu_settings">Especificações</string>
<string name="settings_enable">Ativar</string>
<string name="settings_desc_subscriptions">URLs para inscrição</string>
@ -147,6 +152,13 @@
<string name="settings_label_transports">Transportes</string>
<string name="settings_label_maxConns">Número máximo de conexões</string>
<string name="settings_label_i2cp">Interface do I2CP</string>
<string name="settings_desc_i2cp">Permitir que aplicativos de terceiros criem túneis usando I2CP (requer a reinicialização do roteador)</string>
<string name="settings_label_sam">Interface SAM</string>
<string name="settings_desc_sam">Permitir que aplicativos de terceiros criem túneis usando SAM (requer a reinicialização do roteador)</string>
<string name="settings_confirm_sam">Um aplicativo está tentando fazer uma conexão SAM.</string>
<string name="settings_confirm_sam_id">Nome/ID da conexão:</string>
<string name="settings_confirm_allow_sam">Toque para permitir</string>
<string name="settings_confirm_deny_sam">Ignorar para negar</string>
<string name="settings_label_exploratory_pool">Reservatório exploratório</string>
<string name="settings_desc_exploratory_pool">Parâmetros do túnel</string>
<string name="settings_label_expl_inbound">Túneis entrantes</string>
@ -171,6 +183,7 @@
<string name="about_bugs">Falhas e Suporte:</string>
<string name="about_helpwanted">Procura-se ajuda!</string>
<string name="about_volunteer">Quer ajudar a tornar o aplicativo melhor? Seja voluntário no fórum Android:</string>
<string name="about_gitlab">Quer sugerir um recurso ou corrigir um bug? faça uma solicitação de mesclagem no Gitlab do Android:</string>
<string name="menu_help">Ajuda</string>
<string name="general">Geral</string>
<string name="label_router">Endereços públicos</string>
@ -231,6 +244,7 @@
<string name="enabled">Ativado</string>
<string name="i2ptunnel_wizard_desc_name">O nome do túnel, para identificação na lista de túneis.</string>
<string name="i2ptunnel_wizard_desc_desc">Uma descrição do túnel. Isso é opcional e puramente informativo.</string>
<string name="i2ptunnel_wizard_desc_dest">Especifique o endereço .i2p ou o destino (hostname.i2p, b32 ou b64) do túnel aqui.</string>
<string name="i2ptunnel_wizard_desc_outproxies">Se você souber de algum proxies de saída para este tipo de túnel (seja HTTP ou SOCKS), digite-os. Separe os múltiplos proxies com vírgulas.</string>
<string name="i2ptunnel_wizard_desc_target_host">Esse é o IP no qual o serviço está rodando, isto está geralmente na mesma maquina então 127.0.0.1 é autopreenchido.</string>
<string name="i2ptunnel_wizard_desc_target_port">Essa é a porta pela qual o serviço está aceitando conexões.</string>
@ -357,4 +371,5 @@
<string name="label_browser_configuration">Configuração do navegador</string>
<string name="no_market_app">Nenhum aplicativo de mercado encontrado, por favor, instale manualmente</string>
<string name="unset">Desligado</string>
<string name="running_background">I2P está sendo executado em segundo plano</string>
</resources>

View File

@ -115,6 +115,11 @@
<string name="notification_status_peers">Nós: %1$d ativos, %2$d conhecidos</string>
<string name="notification_status_expl">Túneis exploratórios: %1$d/%2$d</string>
<string name="notification_status_client">Túneis de cliente: %1$d/%2$d</string>
<string name="stats_memory">Memória usada/max</string>
<string name="stats_lag">Atraso no trabalho</string>
<string name="stats_delay">Atraso de mensagem</string>
<string name="copied_base32_system_notification_title">Base32 copiado para a área de transferência</string>
<string name="copied_base32_system_notification_body">O endereço do túnel I2P foi copiado para a área de transferência.</string>
<string name="menu_settings">Configurações</string>
<string name="settings_enable">Ativar</string>
<string name="settings_desc_subscriptions">URLs de Subscrição</string>
@ -147,6 +152,13 @@
<string name="settings_label_transports">Transportes</string>
<string name="settings_label_maxConns">Nr. máx. de ligações</string>
<string name="settings_label_i2cp">Interface I2CP</string>
<string name="settings_desc_i2cp">Permitir que aplicativos de terceiros criem túneis usando I2CP (requer a reinicialização do roteador)</string>
<string name="settings_label_sam">Interface SAM</string>
<string name="settings_desc_sam">Permitir que aplicativos de terceiros criem túneis usando SAM (requer a reinicialização do roteador)</string>
<string name="settings_confirm_sam">Um aplicativo está tentando fazer uma conexão SAM.</string>
<string name="settings_confirm_sam_id">Nome/ID da conexão:</string>
<string name="settings_confirm_allow_sam">Toque para permitir</string>
<string name="settings_confirm_deny_sam">Ignorar para negar</string>
<string name="settings_label_exploratory_pool">Poço exploratório</string>
<string name="settings_desc_exploratory_pool">Parâmetros dos túneis</string>
<string name="settings_label_expl_inbound">Túneis de entrada</string>
@ -171,6 +183,7 @@
<string name="about_bugs">Erros e Suporte</string>
<string name="about_helpwanted">Preciso de Ajuda!</string>
<string name="about_volunteer">Queres tornar a aplicação melhor? Voluntariar-te no fórum do Android </string>
<string name="about_gitlab">Quer sugerir um recurso ou corrigir um bug? faça uma solicitação de mesclagem no Gitlab do Android:</string>
<string name="menu_help">Ajuda</string>
<string name="general">Geral</string>
<string name="label_router">Endereços públicos</string>
@ -231,6 +244,7 @@
<string name="enabled">Ativado</string>
<string name="i2ptunnel_wizard_desc_name">O nome do túnel, para identificação na lista de túneis.</string>
<string name="i2ptunnel_wizard_desc_desc">A descrição do túnel. Este elemento é opcional e puramente informativo.</string>
<string name="i2ptunnel_wizard_desc_dest">Especifique o endereço .i2p ou o destino (hostname.i2p, b32 ou b64) do túnel aqui.</string>
<string name="i2ptunnel_wizard_desc_outproxies">Pode aqui introduzir proxies de saída para este tipo de túnel (HTTP ou SOCKS). Separe as proxies com vírgulas.</string>
<string name="i2ptunnel_wizard_desc_target_host">Este é o endereço IP no qual o seu serviço I2P está a correr. Normalmente corresponde à mesma máquina, portanto é automaticamente preenchido com 127.0.0.1.</string>
<string name="i2ptunnel_wizard_desc_target_port">Este é a porta na qual o seu serviço aceita ligações.</string>
@ -357,4 +371,5 @@
<string name="label_browser_configuration">Configuração do navegador</string>
<string name="no_market_app">Nenhum aplicativo de mercado encontrado, por favor, instale manualmente</string>
<string name="unset">Desselecionar</string>
<string name="running_background">I2P está sendo executado em segundo plano</string>
</resources>

View File

@ -197,4 +197,5 @@
<string name="other">Ďalší</string>
<string name="custom_options">Vlastné nastavenia</string>
<string name="all">Všetko</string>
<string name="no_messages">Žiadne správy</string>
</resources>

View File

@ -31,6 +31,7 @@
<string name="action_delete">Fshije</string>
<string name="action_reload">Ringarkoje</string>
<string name="action_refresh">Rifreskoje</string>
<string name="statistics">Statistika</string>
<string name="country">Vendi</string>
<string name="version">Version</string>
<string name="count">Numër</string>

View File

@ -9,14 +9,14 @@
<string name="label_status">Durum</string>
<string name="label_console">Pano</string>
<string name="label_addresses">Adresler</string>
<string name="label_addressbook">Adres Defteri</string>
<string name="label_addressbook">Adres defteri</string>
<string name="label_i2ptunnel_client">İstemci tünelleri</string>
<string name="label_i2ptunnel_server">Sunucu tünelleri</string>
<string name="label_logs">Günlükler</string>
<string name="label_error_logs">Hata Günlükleri</string>
<string name="label_error_logs">Hata günlükleri</string>
<string name="label_news">Haberler</string>
<string name="label_peers_status">Eşler</string>
<string name="label_release_notes">Yayım Notları</string>
<string name="label_release_notes">Yayım notları</string>
<string name="label_licenses">Lisanslar</string>
<string name="label_browse">Göz at</string>
<string name="label_graphs">Çizelgeler</string>
@ -30,15 +30,15 @@
<string name="testing">Sınanıyor</string>
<string name="firewalled">Güvenlik duvarlı</string>
<string name="symmetric_nat">Simetrik NAT</string>
<string name="net_status_error_i2cp">İstemci yöneticisi I2CP hatası - günlüklere bakın</string>
<string name="net_status_error_i2cp">İstemci yöneticisi I2CP hatası. Günlüklere bakın</string>
<!--Parameter is a time, e.g. 32s or 2m-->
<string name="net_status_error_skew">%s saat sapması</string>
<string name="net_status_error_unresolved_tcp">Çözümlenmemiş TCP adresi</string>
<string name="net_status_error_private_tcp">Kişisel TCP adresi</string>
<string name="net_status_warn_firewalled_inbound_tcp">Geliş TCP bağlantısı güvenlik duvarı etkinleştirilmiş </string>
<string name="net_status_warn_firewalled_floodfill">Güvenlik duvarı arkasında otomatik doldurma</string>
<string name="net_status_info_disconnected">Bağlantı kesildi - ağ bağlantısını denetleyin</string>
<string name="net_status_error_udp_port">UDP bağlantı noktası kullanılıyor - ayarları değiştirip yeniden başlatın</string>
<string name="net_status_info_disconnected">Bağlantı kesildi. Ağ bağlantısını denetleyin</string>
<string name="net_status_error_udp_port">UDP bağlantı noktası kullanılıyor. Ayarları değiştirip yeniden başlatın</string>
<string name="net_status_error_no_active_peers">Etkin eş yok, ağ bağlantısını ve güvenlik duvarını denetleyin</string>
<string name="net_status_error_udp_disabled_tcp_not_set">UDP devre dışı ve Geliş TCP bağlantısı sunucu/bağlantı noktası ayarlanmamış</string>
<string name="net_status_warn_firewalled_udp_disabled">Güvenlik duvarı ve UDP devre dışı</string>
@ -58,9 +58,9 @@
<string name="configure_no_doze_title">Pil kullanımı yönetilsin mi?</string>
<string name="configure_no_doze">I2P için en iyi durum sürekli çalışmasıdır. I2P uygulamasının Android üzerinde pili korumak için kapatılmasını engellemek için uygulamayı pil kullanımı istisnası listesine ekleyebilirsiniz. Bu durumda uygulamanın güvenirliği önemli ölçüde artacaktır.\n\nI2P arka planda çalışır durumda tutulsun mu (önerilir)?</string>
<string name="first_start_title">Tebrikler, I2P kuruldu!</string>
<string name="first_start_welcome"><b>I2P uygulamasına hoş geldiniz</b> Lütfen I2P yüklenip eşleri bulana kadar <b>sabırlı olun</b>.</string>
<string name="first_start_welcome"><b>I2P uygulamasına hoş geldiniz</b> Lütfen I2P ılıp eşleri bulana kadar <b>sabırlı olun</b>.</string>
<string name="first_start_read">Beklerken, lütfen sürüm notları ve hoş geldiniz sayfalarını okuyun.</string>
<string name="first_start_faq">İstemci tünelleri bulunduğunda, lütfen Sık Sorulan Sorular bölümüne <b>bakın</b>:</string>
<string name="first_start_faq">İstemci tünelleri bulunduğunda, lütfen sık sorulan sorular bölümüne <b>bakın</b>:</string>
<string name="first_start_faq_nonanon">Ya da tünelleri beklemek istemiyorsanız anonim olmayan şu bağlantıyı kullanın:</string>
<string name="first_start_irc">IRC istemcinizi <b>localhost:6668</b> adresine yönlendirip şuradan bize merhaba deyin:</string>
<string name="action_search">Arama</string>
@ -72,13 +72,13 @@
<string name="action_i2ptunnel_start_all">Tüm tünelleri aç</string>
<string name="action_i2ptunnel_stop_all">Tüm tünelleri kapat</string>
<string name="action_i2ptunnel_restart_all">Tüm tünelleri yeniden aç</string>
<string name="action_reload">Yeniden Yükle</string>
<string name="action_reload">Yeniden yükle</string>
<string name="action_refresh">Yenile</string>
<string name="hint_search_addressbook">Adres defterinde arama</string>
<string name="action_reload_subscriptions">Abonelikleri yeniden yükle</string>
<string name="news_last_updated">Haberler en son %s önce güncellendi</string>
<string name="news_last_checked">Haberler en son %s önce denetlendi</string>
<string name="news_updated">Haberler Güncellendi</string>
<string name="news_updated">Haberler güncellendi</string>
<string name="view_news">I2P yeniliklerini görmek için dokunun</string>
<string name="router_not_running">Yöneltici çalışmıyor.</string>
<string name="router_shutting_down">Yöneltici kapatılıyor.</string>
@ -97,8 +97,8 @@
<string name="version">Sürüm</string>
<string name="count">Sayı</string>
<string name="tname_0">Gizli ya da başlatılıyor</string>
<string name="netdb_routers_empty">\"Ağ veritabanınızda\" (NetDB) bir yöneltici bulunamadı.</string>
<string name="netdb_leases_empty">\"Ağ veritabanınızda\" (NetDB) bir \"Kiralama kümesi\" (LeaseSet) bulunamadı.</string>
<string name="netdb_routers_empty">\"Ağ veri tabanınızda\" (NetDB) bir yöneltici bulunamadı.</string>
<string name="netdb_leases_empty">\"Ağ veri tabanınızda\" (NetDB) bir \"Kiralama kümesi\" (LeaseSet) bulunamadı.</string>
<string name="notification_status_starting">I2P başlatılıyor</string>
<string name="notification_status_restarting">I2P yeniden başlatılıyor</string>
<string name="notification_status_waiting">I2P bir ağ bağlantısının kurulmasını bekliyor</string>
@ -122,9 +122,9 @@
<string name="copied_base32_system_notification_body">I2P tünelinizin adresi panoya kopyalandı.</string>
<string name="menu_settings">Ayarlar</string>
<string name="settings_enable">Etkinleştir</string>
<string name="settings_desc_subscriptions">Abonelik İnternet Adresleri</string>
<string name="settings_desc_subscriptions">Abonelik adresleri</string>
<string name="settings_label_bandwidth_net">Bant genişliği ve ağ</string>
<string name="settings_label_startOnBoot">I2P Açılışta Başlatılsın</string>
<string name="settings_label_startOnBoot">I2P açılışta başlatılsın</string>
<string name="settings_desc_startOnBoot">Android aygıtınız başlatıldığında I2P kendiliğinden bağlanır</string>
<string name="settings_label_bandwidth">Bant genişliği</string>
<string name="settings_label_bw_inbound">Geliş bağlantısı hızı</string>
@ -151,9 +151,9 @@
<string name="settings_summ_showStats">Ana panoda ayrıntılı istatistikler görüntülensin</string>
<string name="settings_label_transports">Taşıyıcılar</string>
<string name="settings_label_maxConns">En fazla bağlantı</string>
<string name="settings_label_i2cp">I2CP Arabirimi</string>
<string name="settings_label_i2cp">I2CP arabirimi</string>
<string name="settings_desc_i2cp">Üçüncü taraf uygulamalar I2CP ile tüneller oluşturabilsin (yöneltici yeniden başlatılmalıdır)</string>
<string name="settings_label_sam">SAM arayüzü</string>
<string name="settings_label_sam">SAM arabirimi</string>
<string name="settings_desc_sam">Üçüncü taraf uygulamalar SAM ile tüneller oluşturabilsin (yöneltici yeniden başlatılmalıdır)</string>
<string name="settings_confirm_sam">Bir uygulama bir SAM bağlantısı kurmaya çalışıyor.</string>
<string name="settings_confirm_sam_id">Bağlantı adı/kodu:</string>
@ -179,9 +179,9 @@
<string name="settings_router_restart_required">Değişikliklerin etkili olması için I2P yeniden başlatılmalı</string>
<string name="menu_about">Hakkında</string>
<string name="about_version">Sürüm:</string>
<string name="about_project">Proje Web Sitesi:</string>
<string name="about_bugs">Hatalar ve Destek</string>
<string name="about_helpwanted">Yardımınız Gerekli!</string>
<string name="about_project">Proje sitesi:</string>
<string name="about_bugs">Hatalar ve destek</string>
<string name="about_helpwanted">Yardımınız gerekli!</string>
<string name="about_volunteer">Uygulamayı daha iyi duruma getirmek için yardımcı olmak ister misiniz? Android forumunda gönüllü olun:</string>
<string name="about_gitlab">Bir öneride bulunmak ya da hata bildirmek mi istiyorsunuz? Android GitLab üzerinden bir birleştirme isteği yapın:</string>
<string name="menu_help">Yardım</string>
@ -213,10 +213,10 @@
<string name="i2ptunnel_type_httpbidirserver">HTTP bidir</string>
<string name="install_recommended_app">Önerilen uygulama kurulsun mu?</string>
<string name="app_needed_for_this_tunnel_type">Bu tüneli kullanmak için bir uygulama kurmalısınız. Önerilen uygulamayı kurmak ister misiniz?</string>
<string name="i2ptunnel_not_initialized">Tüneller henüz hazır değil, lütfen iki dakika sonra yeniden yükleyin.</string>
<string name="i2ptunnel_not_initialized">Tüneller henüz hazır değil. Lütfen iki dakika sonra yeniden yükleyin.</string>
<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_new_tunnel">Yeni tünel</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>
@ -224,7 +224,7 @@
<string name="i2ptunnel_delete_confirm_message">Tüneli sil</string>
<string name="i2ptunnel_delete_confirm_button">Tüneli sil</string>
<string name="i2ptunnel_no_tunnel_details">Tünel ayrıntıları yüklenemedi</string>
<string name="i2ptunnel_wizard_k_client_server">İstemci ya da Sunucu</string>
<string name="i2ptunnel_wizard_k_client_server">İstemci ya da sunucu</string>
<string name="i2ptunnel_wizard_v_client">İstemci tüneli</string>
<string name="i2ptunnel_wizard_v_server">Sunucu tüneli</string>
<string name="i2ptunnel_wizard_k_type">Tünel türü</string>
@ -240,7 +240,7 @@
<string name="next">Sonraki</string>
<string name="prev">Önceki</string>
<string name="finish">Gönder</string>
<string name="review">Gözden Geçir</string>
<string name="review">Gözden geçir</string>
<string name="enabled">Etkin</string>
<string name="i2ptunnel_wizard_desc_name">Tünel listesinde görüntülenecek tünel adı.</string>
<string name="i2ptunnel_wizard_desc_desc">İsteğe bağlı olarak yazılabilecek tünel açıklaması.</string>
@ -272,21 +272,21 @@
<string name="tunnel_summ_persistent_key">Yeniden başlatıldığında bu tünelin hedefi korunsun</string>
<string name="reachable_on">Şuradan erişilebilir</string>
<string name="listen_port">Dinlenecek bağlantı noktası</string>
<string name="client_ssl">SSL İstemci</string>
<string name="client_ssl">İstemcide SSL</string>
<string name="tunnel_summ_client_ssl">İstemci yalnızca SSL üzerinden bağlanabilir</string>
<string name="outproxies">Çıkış vekil sunucuları</string>
<string name="ssl_outproxies">SSL çıkış vekil sunucuları</string>
<string name="irc">IRC</string>
<string name="enable_dcc">DCC Kullanılsın</string>
<string name="enable_dcc">DCC kullanılsın</string>
<string name="tunnel_summ_enable_dcc">IRC istemcileri DCC kullanabilsin</string>
<string name="website_domain_name">Web sitesinin etki alanı</string>
<string name="website_domain_name">Sitenin etki alanı</string>
<string name="target_host">Hedef sunucu</string>
<string name="target_port">Hedef bağlantı noktası</string>
<string name="use_ssl">SSL Kullanılsın</string>
<string name="use_ssl">SSL kullanılsın</string>
<string name="tunnel_summ_use_ssl">Hedefe bağlanmak için SSL kullanılsın</string>
<string name="tunnel_parameters">Tünel parametreleri</string>
<string name="profile">Profil</string>
<string name="profile_bulk">Toplu bağlantı (indirme/web siteleri/BT)</string>
<string name="profile_bulk">Toplu bağlantı (indirmeler/siteler/BT)</string>
<string name="profile_interactive">Etkileşimli bağlantı</string>
<string name="delay_connect">Bağlantı gecikmesi</string>
<string name="tunnel_summ_delay_connect">Bağlantı yanıtları için etkinleştirin</string>
@ -335,14 +335,14 @@
<string name="new_keys_on_reopen_conflict_title">Sürekli anahtarlar kullanılamasın</string>
<string name="new_keys_on_reopen_conflict_msg">Tünel yeniden açıldığında yeni anahtarlar oluşturuluyorsa sürekli anahtarlar kullanılamaz. Sürekli anahtarlar devre dışı bırakılsın mı?</string>
<string name="http_client">HTTP istemcisi</string>
<string name="tunnel_summ_user_agent">\'User-Agent\' üstbilgisi geçirilsin</string>
<string name="tunnel_summ_referer">\'Referer\' üstbilgisi geçirilsin</string>
<string name="tunnel_summ_accept">\'Accept-*\' üstbilgisi geçirilsin</string>
<string name="tunnel_summ_user_agent">\'User-Agent\' üst bilgisi geçirilsin</string>
<string name="tunnel_summ_referer">\'Referer\' üst bilgisi geçirilsin</string>
<string name="tunnel_summ_accept">\'Accept-*\' üst bilgisi geçirilsin</string>
<string name="tunnel_summ_allow_ssl">I2P adreslerinde SSL kullanılabilsin</string>
<string name="jump_url_list">Sıçrama adresi listesi</string>
<string name="proxy_auth">Vekil sunucu kimlik doğrulaması</string>
<string name="tunnel_summ_proxy_auth">Bu vekil sunucuda oturum açmak için kimlik doğrulaması istensin</string>
<string name="username">Kullanıcı Adı</string>
<string name="username">Kullanıcı adı</string>
<string name="password">Parola</string>
<string name="outproxy_auth">Çıkış vekil sunucusu kimlik doğrulaması</string>
<string name="tunnel_summ_outproxy_auth">Çıkış vekil sunucusu için oturum açılması gerekiyor</string>
@ -360,14 +360,14 @@
<item quantity="one">%d ileti, yeniden eskiye</item>
<item quantity="other">%d ileti, yeniden eskiye</item>
</plurals>
<string name="log_entry">Günlük Kaydı</string>
<string name="log_entry">Günlük kaydı</string>
<string name="copy_logs">Günlükleri kopyala</string>
<string name="i2p_android_error_logs">I2P Android Hata Günlükleri</string>
<string name="i2p_android_logs">I2P Android Günlükleri</string>
<string name="i2p_android_error_logs">I2P Android hata günlükleri</string>
<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ı 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>
<string name="unset">Ayarı kaldır</string>
<string name="running_background">I2P arka planda çalışıyor</string>
</resources>

View File

@ -28,6 +28,7 @@
<string name="action_reload">Tải lại</string>
<string name="action_refresh">Nạp lại</string>
<string name="statistics">Thống kê</string>
<string name="countries">Quốc Gia</string>
<string name="country">Quốc gia</string>
<string name="version">Phiên bản</string>
<string name="count">Số lượng</string>

View File

@ -352,6 +352,12 @@
<string name="all">全部</string>
<string name="no_messages">沒有訊息</string>
<string name="no_error_messages">无错误消息</string>
<plurals name="log_error_messages">
<item quantity="other">%d 条错误消息,新消息优先</item>
</plurals>
<plurals name="log_messages">
<item quantity="other">%d 条消息,新消息优先</item>
</plurals>
<string name="log_entry">日志条目</string>
<string name="copy_logs">复制日志</string>
<string name="i2p_android_error_logs">I2P Android 错误日志</string>

View File

@ -150,6 +150,10 @@
<string name="notification_status_expl">Exploratory tunnels: %1$d/%2$d</string>
<string name="notification_status_client">Client tunnels: %1$d/%2$d</string>
<string name="stats_memory">Memory used/max</string>
<string name="stats_lag">Job Lag</string>
<string name="stats_delay">Message Delay</string>
<string name="copied_base32_system_notification_title">Base32 copied to clipboard</string>
<string name="copied_base32_system_notification_body">The address of your I2P tunnel has been copied to the clipboard.</string>
@ -217,7 +221,7 @@
<string name="about_project">Project Home:</string>
<string name="url_project" translatable="false">https://geti2p.net | http://i2p-projekt.i2p</string>
<string name="about_bugs">Bugs and Support:</string>
<string name="url_android_forum" translatable="false">http://zzz.i2p/forums/17</string>
<string name="url_android_forum" translatable="false">http://i2pforum.i2p</string>
<string name="about_helpwanted">Help Wanted!</string>
<string name="about_volunteer">Want to help make the app better? Volunteer on the Android forum:</string>
<string name="about_gitlab">Want to suggest a feature or fix a bug? make a Merge Request on the Android Gitlab:</string>

View File

@ -0,0 +1,23 @@
GROUP=net.i2p.android
org.gradle.jvmargs=-Xmx1536M
POM_URL=https://github.com/i2p/i2p.android.base
POM_SCM_URL=https://github.com/i2p/i2p.android.base
POM_SCM_CONNECTION=scm:git:git@github.com:i2p/i2p.android.base.git
POM_SCM_DEV_CONNECTION=scm:git:git@github.com:i2p/i2p.android.base.git
POM_LICENCE_NAME=The Apache Software License, Version 2.0
POM_LICENCE_URL=http://www.apache.org/licenses/LICENSE-2.0.txt
POM_LICENCE_DIST=repo
POM_DEVELOPER_ID=github-ci
POM_DEVELOPER_NAME=github-ci
POM_DEVELOPER_EMAIL=hankhill19580@gmail.com
ANDROID_BUILD_TARGET_SDK_VERSION=33
ANDROID_BUILD_SDK_VERSION=33
I2P_VERSION=2.4.0
I2P_ANDROID_VERSION=2.4.0
android.disableAutomaticComponentCreation=true
android.useAndroidX=true

View File

@ -0,0 +1,2 @@
STORE_FILE=/home/runner/keystores/android-release.keystore
KEY_ALIAS=mykey

View File

@ -17,7 +17,7 @@ POM_DEVELOPER_EMAIL=hankhill19580@gmail.com
ANDROID_BUILD_TARGET_SDK_VERSION=33
ANDROID_BUILD_SDK_VERSION=33
I2P_VERSION=2.1.0
I2P_ANDROID_VERSION=2.1.0
I2P_VERSION=2.5.1
I2P_ANDROID_VERSION=2.5.1
android.disableAutomaticComponentCreation=true
android.useAndroidX=true

View File

@ -1,9 +0,0 @@
<?xml version='1.0' encoding='UTF-8'?>
<resources>
<string name="yes"></string>
<string name="no">No</string>
<string name="install_i2p_android">¿Instalar I2P Android?</string>
<string name="you_must_have_i2p_android">Ha de tener I2P Android instalado y ejecutándose. ¿Le gustaría instalarlo?</string>
<string name="start_i2p_android">¿Iniciar I2P Android?</string>
<string name="would_you_like_to_start_i2p_android">Parece que I2P Android no se está ejecutando. ¿Desea ejecutarlo?</string>
</resources>