Migrate translations to gettext

This commit is contained in:
2022-12-26 15:14:16 +01:00
parent e4c89f4baa
commit 14ef9100d5
37 changed files with 2511 additions and 757 deletions

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
*~

View File

@ -24,14 +24,9 @@ Recommended schedule:
Translating:
------------
Copy `lang_en.php` and rename it to `lang_YOUR_LANGCODE.php`
Then edit the file and translate the messages into your language and change $I to $T at the top.
If you ever use a ' character, you have to escape it by using \' instead, or the script will fail.
When you are done, you have to edit `common_config.php`, to include your translation. Simply add a line with
`'lang_code' => 'Language name',`
to the $L array below the settings, similar to what I did for the German translation.
Please share your translation with me, so I can add it to the official version.
To update your translation, you can copy each new string to your translation file or edit the automated `lang_update.php` script to reflect you language and run it.
The scrip `update-translations.sh` can be used to update the language template and translation files from source.
It will generate the file `locale/main-website.pot` which you can then use as basis to create a new language file in `YOUR_LANG_CODE/LC_MESSAGES/main-website.po` and edit it with a translation program, such as [Poedit](https://poedit.net/).
Once you are done, you can open a pull request, or [email me](mailto:daniel@danwin1210.de), to include the translation.
Live Demo:
----------

View File

@ -2,7 +2,7 @@
/*
* Onion Link List - Configuration
*
* Copyright (C) 2016-2020 Daniel Winzen <daniel@danwin1210.me>
* Copyright (C) 2016-2020 Daniel Winzen <daniel@danwin1210.de>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@ -35,54 +35,76 @@ const PER_PAGE = 50; // Sites listed per page
const VERSION = '1.1'; // Script version
const DBVERSION = 8; // Database layout version
const REQUIRE_APPROVAL = false; // require admin approval of new sites? true/false
const CANONICAL_URL = 'https://onions.danwin1210.me'; // our preferred domain for search engines
const CANONICAL_URL = 'https://onions.danwin1210.de'; // our preferred domain for search engines
//Categories - new links will always be put into the first one, leave it to Unsorted
//once configured, only add new categories at the end or you have to manually adjust the database.
$categories=['Unsorted', 'Adult/Porn', 'Communication/Social', 'Forums', 'Hacking/Programming/Software', 'Hosting', 'Libraries/Wikis', 'Link Lists', 'Market/Shop/Store', 'Other', 'Personal Sites/Blogs', 'Security/Privacy/Encryption', 'Whistleblowing', 'Empty/Error/Unknown', 'Cryptocurrencies', 'Scams', 'Fun/Games/Joke', 'Search'];
// Language selection
$I = $T = [];
$language = LANG;
$L=[
'de' => 'Deutsch',
'en' => 'English',
'fa' => 'فارسی',
'ja' => '日本語',
'pt' => 'Português',
'tr' => 'Türkçe',
const LANGUAGES = [
'de' => ['name' => 'Deutsch', 'locale' => 'de_DE', 'flag' => '🇩🇪', 'show_in_menu' => true, 'dir' => 'ltr'],
'en' => ['name' => 'English', 'locale' => 'en_GB', 'flag' => '🇬🇧', 'show_in_menu' => true, 'dir' => 'ltr'],
'fa' => ['name' => 'فارسی', 'locale' => 'fa_IR', 'flag' => '🇮🇷', 'show_in_menu' => true, 'dir' => 'rtl'],
'ja' => ['name' => '日本語', 'locale' => 'ja_JP', 'flag' => '🇯🇵', 'show_in_menu' => true, 'dir' => 'ltr'],
'pt' => ['name' => 'Português', 'locale' => 'pt_PT', 'flag' => '🇵🇹', 'show_in_menu' => true, 'dir' => 'ltr'],
'tr' => ['name' => 'Türkçe', 'locale' => 'tr_TR', 'flag' => '🇹🇷', 'show_in_menu' => true, 'dir' => 'ltr'],
];
if(isset($_REQUEST['lang']) && isset($L[$_REQUEST['lang']])){
$language=$_REQUEST['lang'];
if(!isset($_COOKIE['language']) || $_COOKIE['language']!==$language){
set_secure_cookie('language', $language);
$language = LANG;
$locale = LANGUAGES[LANG]['locale'];
$dir = LANGUAGES[LANG]['dir'];
if(isset($_REQUEST['lang']) && isset(LANGUAGES[$_REQUEST['lang']])){
$locale = LANGUAGES[$_REQUEST['lang']]['locale'];
$language = $_REQUEST['lang'];
$dir = LANGUAGES[$_REQUEST['lang']]['dir'];
setcookie('language', $_REQUEST['lang'], ['expires' => 0, 'path' => '/', 'domain' => '', 'secure' => ($_SERVER['HTTPS'] ?? '' === 'on'), 'httponly' => true, 'samesite' => 'Strict']);
}elseif(isset($_COOKIE['language']) && isset(LANGUAGES[$_COOKIE['language']])){
$locale = LANGUAGES[$_COOKIE['language']]['locale'];
$language = $_COOKIE['language'];
$dir = LANGUAGES[$_COOKIE['language']]['dir'];
}elseif(!empty($_SERVER['HTTP_ACCEPT_LANGUAGE'])){
$prefLocales = array_reduce(
explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']),
function (array $res, string $el) {
list($l, $q) = array_merge(explode(';q=', $el), [1]);
$res[$l] = (float) $q;
return $res;
}, []);
arsort($prefLocales);
foreach($prefLocales as $l => $q){
$lang = locale_lookup(array_keys(LANGUAGES), $l);
if(!empty($lang)){
$locale = LANGUAGES[$lang]['locale'];
$language = $lang;
$dir = LANGUAGES[$lang]['dir'];
setcookie('language', $lang, ['expires' => 0, 'path' => '/', 'domain' => '', 'secure' => ($_SERVER['HTTPS'] ?? '' === 'on'), 'httponly' => true, 'samesite' => 'Strict']);
break;
}
}elseif(isset($_COOKIE['language']) && isset($L[$_COOKIE['language']])){
$language=$_COOKIE['language'];
}
require_once(__DIR__.'/lang_en.php'); //always include English
if($language!=='en'){
require_once(__DIR__."/lang_$language.php"); //replace with translation if available
foreach($T as $name=>$translation){
$I[$name]=$translation;
}
}
putenv('LC_ALL='.$locale);
setlocale(LC_ALL, $locale);
function print_langs(){
global $I, $L;
echo "<ul class=\"list\"><li>$I[language]:</li>";
bindtextdomain('onion-link-list', __DIR__.'/locale');
bind_textdomain_codeset('onion-link-list', 'UTF-8');
textdomain('onion-link-list');
function print_langs(): void
{
echo "<ul class=\"list\"><li>"._('Language:')."</li>";
$query=ltrim(preg_replace('/&?lang=[a-z_\-]*/i', '', $_SERVER['QUERY_STRING']), '&');
foreach($L as $code=>$name){
foreach(LANGUAGES as $code => $data){
if($query===''){
$uri="?lang=$code";
}else{
$uri='?'.htmlspecialchars($query)."&amp;lang=$code";
}
echo "<li><a href=\"$uri\" target='_self' hreflang=\"$code\">$name</a></li>";
echo "<li><a href=\"$uri\" target='_self' hreflang=\"$code\">$data[name]</a></li>";
}
echo '</ul>';
}
function blacklist_scams(string $address, string $content){
function blacklist_scams(string $address, string $content): void
{
global $db;
$scams = ['Black&White Cards :: Index', 'Shadow guide | The ultimate guide of dark web ', 'ONIONLIST - SAFE .ONION LINKS LISTING', 'Dir ', 'netAuth', 'POPBUY MARKET', 'Digital Goods - Verified by GoDark Search, Hidden Links, Wiki, Escrow', 'Delta - Secure Black Market', 'DeDope', 'Unlocker - iCloud Activation Services', '222LOTTO!', 'STREAMING SERVICES ACCOUNTS', 'Red Room', 'Digital Cash'];
$cp_scams = ['Wonderful shop', '~ DROP BY TARYAXX ~', 'Magic CP', 'Lolita Club', 'Daft Tadjikskiy Sex Video _ Inductively Fiberless Porno Qom Along With Post Porn Com Numb _ Porn Zdarma', 'xPlay - hosting service for porn videos', 'DARK PRIVATE PACK', 'Good Porn'];
@ -113,7 +135,8 @@ function blacklist_scams(string $address, string $content){
}
}
function send_headers(array $styles = []){
function send_headers(array $styles = []): void
{
header('Content-Type: text/html; charset=UTF-8');
header('Pragma: no-cache');
header('Cache-Control: no-cache, no-store, must-revalidate, max-age=0, private');
@ -130,40 +153,20 @@ function send_headers(array $styles = []){
header("Content-Security-Policy: base-uri 'self'; default-src 'none'; form-action 'self'; frame-ancestors 'none'; img-src data: 'self'; style-src $style_hashes");
header('X-Content-Type-Options: nosniff');
header('X-Frame-Options: deny');
header('X-XSS-Protection: 1; mode=block');
header('X-XSS-Protection: 0');
if($_SERVER['REQUEST_METHOD'] === 'HEAD'){
exit; // headers sent, no further processing needed
}
}
function set_secure_cookie(string $name, string $value){
if (version_compare(PHP_VERSION, '7.3.0') >= 0) {
setcookie($name, $value, ['expires' => 0, 'path' => '/', 'domain' => '', 'secure' => is_definitely_ssl(), 'httponly' => true, 'samesite' => 'Strict']);
}else{
setcookie($name, $value, 0, '/', '', is_definitely_ssl(), true);
}
}
function is_definitely_ssl() : bool {
if (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off') {
return true;
}
if (isset($_SERVER['SERVER_PORT']) && ('443' == $_SERVER['SERVER_PORT'])) {
return true;
}
if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && ('https' === $_SERVER['HTTP_X_FORWARDED_PROTO'])) {
return true;
}
return false;
}
function set_curl_options($ch){
function set_curl_options($ch): void
{
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_USERAGENT, USERAGENT);
curl_setopt($ch, CURLOPT_PROXY, PROXY);
curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5_HOSTNAME);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 60);
curl_setopt($ch, CURLOPT_TIMEOUT, 60);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 120);
curl_setopt($ch, CURLOPT_TIMEOUT, 120);
curl_setopt($ch, CURLOPT_ENCODING, '');
}

View File

@ -5,7 +5,7 @@ require_once(__DIR__.'/../common_config.php');
try{
$db=new PDO('mysql:host=' . DBHOST . ';dbname=' . DBNAME . ';charset=utf8mb4', DBUSER, DBPASS, [PDO::ATTR_ERRMODE=>PDO::ERRMODE_WARNING, PDO::ATTR_PERSISTENT=>PERSISTENT]);
}catch(PDOException $e){
die($I['nodb']);
die(_('No database connection!'));
}
$ch=curl_init();
set_curl_options($ch);
@ -14,7 +14,8 @@ set_curl_options($ch);
//check('http://skunksworkedp2cg.onion/sites.html', 'http://skunkrdunsylcfqd.onion/sites.html');
//check('http://dhosting4xxoydyaivckq7tsmtgi4wfs3flpeyitekkmqwu4v4r46syd.onion/list.php', 'http://dhostingwwafxyuaxhs6bkhzo5e2mueztbmhqe6wsng547ucvzfuh2ad.onion/list.php');
function check(string $link, string $phishing_link){
function check(string $link, string $phishing_link): void
{
global $ch, $db;
curl_setopt($ch, CURLOPT_URL, $link);
$links=curl_exec($ch);

View File

@ -4,7 +4,7 @@ require_once(__DIR__.'/../common_config.php');
try{
$db=new PDO('mysql:host=' . DBHOST . ';dbname=' . DBNAME, DBUSER, DBPASS, [PDO::ATTR_ERRMODE=>PDO::ERRMODE_WARNING, PDO::ATTR_PERSISTENT=>PERSISTENT]);
}catch(PDOException $e){
die($I['nodb']);
die(_('No database connection!'));
}
$ch=curl_init();
set_curl_options($ch);
@ -30,7 +30,8 @@ add_onions($onions, $db);
//delete links that were not seen within a month
$db->exec('DELETE FROM ' . PREFIX . "onions WHERE address!='' AND timediff>2419200 AND lasttest-timeadded>2419200;");
function check_links(array &$onions, $ch, string $link_to_check, bool $scan_children = false, array &$scanned_onoins = []){
function check_links(array &$onions, $ch, string $link_to_check, bool $scan_children = false, array &$scanned_onoins = []): void
{
curl_setopt($ch, CURLOPT_URL, $link_to_check);
$links=curl_exec($ch);
if(preg_match_all('~(https?://)?([a-z0-9]*\.)?([a-z2-7]{55}d).onion(/[^\s><"]*)?~i', $links, $addr)){
@ -80,7 +81,8 @@ function check_links(array &$onions, $ch, string $link_to_check, bool $scan_chil
}
}
function add_onions(&$onions, $db){
function add_onions(&$onions, $db): void
{
$stmt=$db->query('SELECT md5sum FROM ' . PREFIX . 'onions;');
while($tmp=$stmt->fetch(PDO::FETCH_NUM)){
if(isset($onions[$tmp[0]])){

View File

@ -3,7 +3,7 @@ require_once(__DIR__.'/../common_config.php');
try{
$db=new PDO('mysql:host=' . DBHOST . ';dbname=' . DBNAME, DBUSER, DBPASS, [PDO::ATTR_ERRMODE=>PDO::ERRMODE_WARNING, PDO::ATTR_PERSISTENT=>PERSISTENT]);
}catch(PDOException $e){
die('No Connection to MySQL database!');
die(_('No database connection!'));
}
$ch=curl_init();
set_curl_options($ch);

View File

@ -3,7 +3,7 @@ require_once(__DIR__.'/../common_config.php');
try{
$db=new PDO('mysql:host=' . DBHOST . ';dbname=' . DBNAME . ';charset=utf8mb4', DBUSER, DBPASS, [PDO::ATTR_ERRMODE=>PDO::ERRMODE_WARNING, PDO::ATTR_PERSISTENT=>true]);
}catch(PDOException $e){
die('No Connection to MySQL database!');
die(_('No database connection!'));
}
$stmt=$db->query("SELECT onions.address FROM onions LEFT JOIN phishing ON (phishing.onion_id=onions.id) WHERE onions.address!='' AND onions.category!=15 AND onions.category!=18 AND isnull(phishing.onion_id) LIMIT 2100,10000;");
$move=$db->prepare("UPDATE onions SET category=18, locked=1, timechanged=? WHERE address=?;");

View File

@ -3,7 +3,7 @@ require_once(__DIR__.'/../common_config.php');
try{
$db=new PDO('mysql:host=' . DBHOST . ';dbname=' . DBNAME . ';charset=utf8mb4', DBUSER, DBPASS, [PDO::ATTR_ERRMODE=>PDO::ERRMODE_WARNING, PDO::ATTR_PERSISTENT=>true]);
}catch(PDOException $e){
die('No Connection to MySQL database!');
die(_('No database connection!'));
}
$stmt=$db->query("SELECT onions.address FROM onions LEFT JOIN phishing ON (phishing.onion_id=onions.id) WHERE onions.address!='' AND onions.category!=15 AND isnull(phishing.onion_id) AND timeadded>1506800000;");
$move=$db->prepare("UPDATE onions SET category=15, locked=1, description='WARNING - This site will crash your browser with infinite iframes.', timechanged=? WHERE address=?;");

View File

@ -3,7 +3,7 @@ require_once(__DIR__.'/../common_config.php');
try{
$db=new PDO('mysql:host=' . DBHOST . ';dbname=' . DBNAME . ';charset=utf8mb4', DBUSER, DBPASS, [PDO::ATTR_ERRMODE=>PDO::ERRMODE_WARNING, PDO::ATTR_PERSISTENT=>true]);
}catch(PDOException $e){
die('No Connection to MySQL database!');
die(_('No database connection!'));
}
$stmt=$db->query("SELECT onions.address FROM onions LEFT JOIN phishing ON (phishing.onion_id=onions.id) WHERE onions.address!='' AND isnull(phishing.onion_id) AND onions.id>22439;");
$move=$db->prepare("UPDATE onions SET category=18, locked=1, description='Add injecting phishing clone of an existing site - SCAM', timechanged=? WHERE address=?;");

View File

@ -3,7 +3,7 @@ require_once(__DIR__.'/../common_config.php');
try{
$db=new PDO('mysql:host=' . DBHOST . ';dbname=' . DBNAME . ';charset=utf8mb4', DBUSER, DBPASS, [PDO::ATTR_ERRMODE=>PDO::ERRMODE_WARNING, PDO::ATTR_PERSISTENT=>true]);
}catch(PDOException $e){
die('No Connection to MySQL database!');
die(_('No database connection!'));
}
$stmt=$db->query("SELECT onions.address FROM onions LEFT JOIN phishing ON (phishing.onion_id=onions.id) WHERE onions.address!='' AND onions.locked=0 AND isnull(phishing.onion_id);");
$move=$db->prepare("UPDATE onions SET category=18, locked=1, description='CP - SCAM', timechanged=? WHERE address=?;");

View File

@ -3,7 +3,7 @@ require_once(__DIR__.'/../common_config.php');
try{
$db=new PDO('mysql:host=' . DBHOST . ';dbname=' . DBNAME . ';charset=utf8mb4', DBUSER, DBPASS, [PDO::ATTR_ERRMODE=>PDO::ERRMODE_WARNING, PDO::ATTR_PERSISTENT=>true]);
}catch(PDOException $e){
die('No Connection to MySQL database!');
die(_('No database connection!'));
}
$stmt=$db->query("SELECT onions.address FROM onions LEFT JOIN phishing ON (phishing.onion_id=onions.id) WHERE onions.address!='' AND onions.locked=0 AND isnull(phishing.onion_id);");
$move=$db->prepare("UPDATE onions SET category=18, locked=1, description='Part of scam network - SCAM', timechanged=? WHERE address=?;");

View File

@ -3,7 +3,7 @@ require_once(__DIR__.'/../common_config.php');
try{
$db=new PDO('mysql:host=' . DBHOST . ';dbname=' . DBNAME . ';charset=utf8mb4', DBUSER, DBPASS, [PDO::ATTR_ERRMODE=>PDO::ERRMODE_WARNING, PDO::ATTR_PERSISTENT=>true]);
}catch(PDOException $e){
die('No Connection to MySQL database!');
die(_('No database connection!'));
}
$stmt=$db->query("SELECT onions.address FROM onions LEFT JOIN phishing ON (phishing.onion_id=onions.id) WHERE onions.address!='' AND onions.locked=0 AND isnull(phishing.onion_id);");
$move=$db->prepare("UPDATE onions SET category=18, locked=1, description='Part of scam network - SCAM', timechanged=? WHERE address=?;");

View File

@ -3,7 +3,7 @@ require_once(__DIR__.'/../common_config.php');
try{
$db=new PDO('mysql:host=' . DBHOST . ';dbname=' . DBNAME . ';charset=utf8mb4', DBUSER, DBPASS, [PDO::ATTR_ERRMODE=>PDO::ERRMODE_WARNING, PDO::ATTR_PERSISTENT=>true]);
}catch(PDOException $e){
die('No Connection to MySQL database!');
die(_('No database connection!'));
}
$stmt=$db->prepare("SELECT null FROM onions WHERE md5sum = ?;");
$move=$db->prepare("UPDATE onions SET category=18, locked=1, description=CONCAT(description, ' - Part of scam network - SCAM'), timechanged=? WHERE md5sum = ? AND locked=0;");

View File

@ -1,77 +0,0 @@
<?php
$T=[
'all' => 'Alle',
'all_legitimate'=> 'Alle legitimen',
'lastadded' => 'Zuletzt hinzugefügt',
'offline' => 'Offline > 1 Woche',
'removed' => 'Entfernt/Kinderporno',
'phishingclones'=> 'Phishingklon',
'title' => 'Onion Linkliste',
'error' => 'FEHLER',
'nodb' => 'Keine Datenbankverbindung!',
'addonion' => 'Onion-Adresse',
'adddesc' => 'Beschreibung',
'category' => 'Kategorie',
'search' => 'Suchen',
'searchterm' => 'Suchwort',
'specialcat' => 'Spezielle Kategorien',
'categories' => 'Kategorien',
'pages' => 'Seiten',
'invalonion' => 'Ungültige Onion-Adresse!',
'valid' => 'Eine gültige Adresse sieht so aus',
'succadd' => 'Onion-Adresse erfolgreich hinzugefügt!',
'faillocked' => 'Entschuldigung, das Bearbeiten dieser Onion-Adresse wurde gesperrt!',
'succupddesc' => 'Beschreibung erfolgreich aktualisiert!',
'succupdcat' => 'Kategorie erfolgreich aktualisiert!',
'alreadyknown' => 'Danke, aber ich kannte diese Adresse bereits.',
'searchresult' => 'Suche nach "%1$s", %2$d Ergebnisse gefunden:',
'link' => 'Onion Link',
'description' => 'Beschreibung',
'lasttested' => 'Zuletzt getested',
'lastup' => 'Zuletzt online',
'timeadded' => 'Hinzgefügt am',
'actions' => 'Aktionen',
'edit' => 'Bearbeiten',
'test' => 'Testen',
'never' => 'Nie',
'cloneof' => 'Klon von',
'admintitle' => 'Admin Schnittstelle',
'password' => 'Passwort',
'login' => 'Anmelden',
'bitcoins' => 'Bitcoins',
'remove' => 'Entfernen',
'readd' => 'Wieder hinzufügen',
'lock' => 'Sperren',
'unlock' => 'Entsperren',
'promote' => 'Hervorheben',
'unpromote' => 'Nicht mehr hervorheben',
'phishing' => 'Phishing',
'unphishing' => 'Kein Phishing',
'update' => 'Aktualisieren',
'succremove' => 'Onion-Adresse erfolgreich entfernt!',
'succreadd' => 'Onion-Adresse erfolgreich wieder hinzugefügt!',
'succlock' => 'Onion-Adresse erfolgreich gesperrt!',
'succunlock' => 'Onion-Adresse erfolgreich entsperrt!',
'succpromote' => 'Onion-Adresse erfolgreich hervorgehoben bis %1$s!',
'succunpromote' => 'Onion-Adresse erfolgreich nicht mehr hervorgehoben!',
'succaddphish' => 'Phishingklon erfolgreich hinzugefügt!',
'samephish' => 'Phishingklon nicht hinzugefügt! Phishing und original haben die gleiche Adresse.',
'succrmphish' => 'Phishingklon erfolgreich entfernt!',
'noaction' => 'Keine Aktion ausgeführt!',
'wrongpass' => 'Falsches Passwort!',
'testtitle' => 'Online-Test',
'testdesc' => 'Hier kann getestet werden, ob eine Onion-Adresse online ist oder nicht.',
'testonline' => 'Ja, der Dienst ist online!',
'testoffline' => 'Nein, der Dienst ist offline!',
'testphishing' => 'Warnung, diese Adresse ist ein bekannter Phishingklon. Die Original-Seite ist hier: %s.',
'unknown' => 'Unbekannt',
'language' => 'Sprache',
'format' => 'Format',
'hidelocked' => 'Gesperrte nicht anzeigen',
'pendingapproval' => 'Genehmigung ausstehend',
'rejected' => 'Abgelehnt',
'reject' => 'Ablehnen',
'approve' => 'Akzeptieren',
'switchviewmode' => 'Ansichtsmodus wechseln',
'statusok' => 'Status: OK',
];

View File

@ -1,79 +0,0 @@
<?php
$I=[
'all' => 'All',
'all_legitimate'=> 'All legitimate',
'lastadded' => 'Last added',
'offline' => 'Offline > 1 week',
'removed' => 'Removed/Child porn',
'phishingclones'=> 'Phishing Clones',
'title' => 'Onion link list',
'error' => 'ERROR',
'nodb' => 'No database connection!',
'addonion' => 'Onion address',
'adddesc' => 'Description',
'category' => 'Category',
'search' => 'Search',
'searchterm' => 'Search term',
'specialcat' => 'Special categories',
'categories' => 'Categories',
'pages' => 'Pages',
'invalonion' => 'Invalid onion address!',
'valid' => 'A valid address looks like this',
'succadd' => 'Successfully added onion address!',
'faillocked' => 'Sorry, editing this onion address has been locked!',
'succupddesc' => 'Successfully updated description!',
'succupdcat' => 'Successfully updated category!',
'alreadyknown' => 'Thanks, but I already knew this address!',
'searchresult' => 'Searching for "%1$s", %2$d results found:',
'link' => 'Onion link',
'description' => 'Description',
'lasttested' => 'Last tested',
'lastup' => 'Last seen',
'timeadded' => 'Added at',
'actions' => 'Actions',
'edit' => 'Edit',
'test' => 'Test',
'never' => 'Never',
'cloneof' => 'Clone of',
'admintitle' => 'Admin interface',
'password' => 'Password',
'login' => 'Login',
'bitcoins' => 'Bitcoins',
'remove' => 'Remove',
'readd' => 'Re-add',
'lock' => 'Lock',
'unlock' => 'Unlock',
'promote' => 'Promote',
'unpromote' => 'Un-promote',
'phishing' => 'Phishing',
'unphishing' => 'No phishing',
'update' => 'Update',
'succremove' => 'Successfully removed onion address!',
'succreadd' => 'Successfully re-added onion address!',
'succlock' => 'Successfully locked onion address!',
'succunlock' => 'Successfully unlocked onion address!',
'succpromote' => 'Successfully promoted onion address until %1$s!',
'succunpromote' => 'Successfully un-promoted onion address!',
'succaddphish' => 'Successfully added Phishing clone!',
'samephish' => 'Not added Phishing clone! Phishing and original have the same address.',
'succrmphish' => 'Successfully removed Phishing clone!',
'noaction' => 'No action taken!',
'wrongpass' => 'Wrong Pass!',
'testtitle' => 'Online-Test',
'testdesc' => 'Here an onion address can be tested, for whether it is online or not.',
'testonline' => 'Yes, the service is online!',
'testoffline' => 'No, the service is offline!',
'testphishing' => 'Warning, this is a known phishing clone. The original site is located at %s.',
'unknown' => 'Unknown',
'language' => 'Language',
'format' => 'Format',
'hidelocked' => 'Hide locked',
'pendingapproval' => 'Pending approval',
'rejected' => 'Rejected',
'reject' => 'Reject',
'approve' => 'Approve',
'succreject' => 'Successfully rejected onion address',
'succapprove' => 'Successfully approved onion address',
'switchviewmode' => 'Switch view mode',
'statusok' => 'Status: OK',
];

View File

@ -1,78 +0,0 @@
<?php
$T=[
'all' => 'همه',
'lastadded' => 'آخرین تغییرات',
'offline' => 'غیر فعال > 1 هفته',
'removed' => 'حذف/ پورن کودکان',
'phishingclones'=> 'کلاهبرداری فیشینگ',
'title' => 'پیوندهای پیازی',
'error' => 'خطا',
'nodb' => 'مشکل در اتصال به دیتابیس',
'addonion' => 'آدرس پیازی',
'adddesc' => 'توضیحات',
'category' => 'دسته بندی',
'search' => 'جستجو',
'searchterm' => 'جستجوی اصطلاح',
'specialcat' => 'دسته بندی های خاص',
'categories' => 'دسته بندی ها',
'pages' => 'صفحه',
'invalonion' => 'آدرس پیازی غیر مجاز!',
'valid' => 'آدرس معتبری به این شکل است',
'succadd' => 'آدرس پیازی با موفقیت اضافه شد!',
'faillocked' => 'متاسفیم، این آدرس قفل شده است نمیتوانید ویرایش کنید!',
'succupddesc' => 'توضیحات با موفقیت بروزرسانی شد !',
'succupdcat' => 'دسته بندی به موفقیت بروزرسانی شد!',
'alreadyknown' => 'با تشکر ، اما این آدرس موجود است !',
'searchresult' => 'جستجو برای "%1$s", %2$d نتیجه یافت شد:',
'link' => 'پیوند پیازی',
'description' => 'توضیح',
'lasttested' => 'آخرین آزمون',
'lastup' => 'آخرین بازدید',
'timeadded' => 'اضافه شده در',
'actions' => 'اقدامات',
'edit' => 'ویرایش',
'test' => 'آزمون',
'never' => 'هرگز',
'cloneof' => 'کلون از',
'admintitle' => 'رابط مدیریت',
'password' => 'رمز عبور',
'login' => 'ورود',
'bitcoins' => 'بیت کوین',
'remove' => 'حذف',
'readd' => 'دوباره-اضافه',
'lock' => 'قفل',
'unlock' => 'قفل باز',
'promote' => 'تبلیغ',
'unpromote' => 'لغو-تبلیغ',
'phishing' => 'فیشینگ',
'unphishing' => 'بدون فیشینگ',
'update' => 'بروزرسانی',
'succremove' => 'آدرس پیازی با موفقیت حذف شد!',
'succreadd' => 'آدرس پیازی با موفقیت دوباره اضافه شد !',
'succlock' => 'آدرس پیازی با موفقیت قفل شد !',
'succunlock' => 'قفل آدرس پیازی با موفقیت باز شد !',
'succpromote' => 'آدرس پیازی با موفقیت تبلیغ شد تا %1$s!',
'succunpromote' => 'تبلیغ آدرس با موفقیت لغو شد!',
'succaddphish' => 'کلون فیشینگ با موفقیت اضافه شد !',
'samephish' => 'کلون فیشینگ اضافه نشد! فیشینگ و اصلی آدرس یکسانی دارند.',
'succrmphish' => 'کلون فیشینگ با موفقیت حذف شد !',
'noaction' => 'اقدامی انجام نشده است!',
'wrongpass' => 'رمز اشتباه !',
'testtitle' => 'آزمون-انلاین',
'testdesc' => 'در اینجا میتوانید انلاین یا افلاین بودن آدرس پیازی را آزمایش کنید.',
'testonline' => 'بله، سرویس انلاین است!',
'testoffline' => 'خیر، سرویس افلاین است.',
'testphishing' => 'هشدار، این یک کلون فیشینگ شناخته شده است. ساید اصلی در اینجاست %s.',
'unknown' => 'ناشناخته',
'language' => 'زبان',
'format' => 'فرمت',
'hidelocked' => 'پنهان کردن قفل',
'pendingapproval' => 'در انتضار تایید',
'rejected' => 'رد شد',
'reject' => 'رد کردن',
'approve' => 'تایید',
'succreject' => 'آدرس پیازی با موفقیت رد شد',
'succapprove' => 'آدرس پیازی با موفقیت تایید شد',
'switchviewmode' => 'نغییر حالت مشاهده',
'statusok' => 'وضعیت: خوب',
];

View File

@ -1,94 +0,0 @@
<?php
/*
* Onion Link List - Japanese translation
*
* Copyright (C) 2017 Anonymous <meow@meow.meow>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
$T=[
'all' => '全て',
'lastadded' => '最近の追加',
'offline' => '1週間以上オフライン',
'removed' => '削除済',
'phishingclones'=> '詐欺サイト(クローン)',
'title' => 'Onionリンクの一覧',
'error' => 'エラー',
'nodb' => 'データベースの接続がありません!',
'addonion' => 'Onion アドレス',
'adddesc' => '詳細',
'category' => 'カテゴリ',
'search' => '検索',
'searchterm' => '検索キーワード',
'specialcat' => '特別な分類',
'categories' => 'カテゴリ',
'pages' => 'ページ',
'invalonion' => 'Onionアドレスが不正です。',
'valid' => '正しいアドレスはこんな感じのはず:',
'succadd' => 'Onionアドレスを追加しました。',
'faillocked' => 'ごめん、このOnionアドレスはロックされていて編集できない。',
'succupddesc' => '説明の更新に成功しました。',
'succupdcat' => 'カテゴリの変更に成功しました。',
'alreadyknown' => 'ありがとう、でも、このアドレスはもう知ってるんだ。',
'searchresult' => '検索キーワード "%1$s" - %2$d 件見つかりました:',
'link' => 'Onion リンク',
'description' => '説明',
'lasttested' => '接続試験日',
'lastup' => '最後に見た日',
'timeadded' => '追加された日',
'actions' => '操作',
'edit' => '編集',
'test' => 'テスト',
'never' => 'なし',
'cloneof' => 'クローン元(オリジナル)',
'admintitle' => '管理者の操作画面',
'password' => 'パスワード',
'login' => 'ログイン',
'bitcoins' => 'ビットコイン',
'remove' => '削除',
'readd' => '再追加',
'lock' => '施錠',
'unlock' => '解錠',
'promote' => '宣伝',
'unpromote' => '宣伝解除',
'phishing' => '詐欺サイト',
'unphishing' => '詐欺サイトではない',
'update' => '更新',
'succremove' => 'Onionアドレスを削除しました。',
'succreadd' => 'Onionアドレスを再度追加しました。',
'succlock' => 'Onionアドレスをロックしました。',
'succunlock' => 'Onionアドレスのロックを解除しました。',
'succpromote' => 'Onionアドレスを次の日まで宣伝します %1$s!',
'succunpromote' => 'Onionアドレスの宣伝をやめました。',
'succaddphish' => '詐欺サイトを追加しました。',
'samephish' => '追加できませんでした。詐欺サイトとオリジナルのアドレスが同一です。',
'succrmphish' => '詐欺サイトを削除しました。',
'noaction' => '何も操作していません。',
'wrongpass' => 'パスワードが違います。',
'testtitle' => 'オンラインテスト',
'testdesc' => 'ここで、Onionアドレスが「オンライン」かどうかを試すことができます。',
'testonline' => '対象はオンラインです。',
'testoffline' => '対象はオフラインです!',
'testphishing' => '警告。これは知られた詐欺サイト(クローン)です。オリジナルは %s です。',
'unknown' => '不明',
'language' => '言語',
'format' => '形式',
'pdo_mysqlextrequired' => 'PHPのpdo_mysqlが必要です。先にインストールしてください。',
'pcreextrequired' => 'PHPのpcre拡張が必要です。先にインストールしてください。',
'jsonextrequired' => 'PHPのjson拡張が必要です。先にインストールしてください。',
'curlextrequired' => 'PHPのcurl拡張が必要です。先にインストールしてください。',
'dateextrequired' => 'PHPのdate拡張が必要です。先にインストールしてください。',
'succdbcreate' => 'データベースの作成に成功しました!',
'statusok' => '状態: 良好',
];

View File

@ -1,78 +0,0 @@
<?php
$T=[
'all' => 'Todos',
'lastadded' => 'Últimos adicionados',
'offline' => 'Offline > 1 semana',
'removed' => 'Removidos/Pornografia infantil',
'phishingclones'=> 'Clone com phishing',
'title' => 'Lista de links onion',
'error' => 'ERRO',
'nodb' => 'Sem conexão com a database!',
'addonion' => 'Endereço onion',
'adddesc' => 'Descrição',
'category' => 'Categoria',
'search' => 'Pesquisar',
'searchterm' => 'Termo de pesquisa',
'specialcat' => 'Categorias especiais',
'categories' => 'Categorias',
'pages' => 'Páginas',
'invalonion' => 'Endereço onion inválido!',
'valid' => 'Um endereço válido é parecido com este',
'succadd' => 'Endereço onion adicionado com sucesso!',
'faillocked' => 'Desculpe, a edição deste endereço onion foi bloqueada!',
'succupddesc' => 'Descrição atualizada com sucesso!',
'succupdcat' => 'Categoria atualizada com sucesso!',
'alreadyknown' => 'Obrigado, mas já conhecia este endereço!',
'searchresult' => 'Procurando por "%1$s", %2$d resultados encontrados:',
'link' => 'Onion link',
'description' => 'Descrição',
'lasttested' => 'Testado pela última vez',
'lastup' => 'Visto pela última vez',
'timeadded' => 'Adicionado em',
'actions' => 'Ações',
'edit' => 'Editar',
'test' => 'Testar',
'never' => 'Nunca',
'cloneof' => 'Clone de',
'admintitle' => 'Interface do administrador',
'password' => 'Senha',
'login' => 'Login',
'bitcoins' => 'Bitcoins',
'remove' => 'Remover',
'readd' => 'Re-adicionar',
'lock' => 'Bloquear',
'unlock' => 'Desbloquear',
'promote' => 'Promover',
'unpromote' => 'Despromover',
'phishing' => 'Phishing',
'unphishing' => 'Sem phishing',
'update' => 'Atualizar',
'succremove' => 'Endereço onion removido com sucesso!',
'succreadd' => 'Endereço onion adicionado com sucesso!',
'succlock' => 'Endereço onion bloqueado com sucesso!',
'succunlock' => 'Endereço onion desbloqueado com sucesso!',
'succpromote' => 'Successfully promoted onion address until %1$s!',
'succunpromote' => 'Endereço onion despromovido com sucesso!',
'succaddphish' => 'Clone com phishing adicionado com sucesso!',
'samephish' => 'Clone com phishing não adicionado! Phishing e original têm o mesmo endereço.',
'succrmphish' => 'Clone para phishing removido com sucesso!',
'noaction' => 'Nenhuma ação tomada!',
'wrongpass' => 'Senha errada!',
'testtitle' => 'Online-Teste',
'testdesc' => 'Aqui um endereço onion pode ser testado, para saber se está online ou não.',
'testonline' => 'Sim, o serviço está online!',
'testoffline' => 'Não, o serviço está offline!',
'testphishing' => 'Aviso, este é um clone para phishing conhecido. O site original está localizado em %s.',
'unknown' => 'Desconhecido',
'language' => 'Linguagem',
'format' => 'Formato',
'hidelocked' => 'Esconder bloqueado',
'pendingapproval' => 'Aprovação pendente',
'rejected' => 'Rejeitado',
'reject' => 'Rejeitar',
'approve' => 'Aprovar',
'succreject' => 'Endereço onion rejeitado com sucesso',
'succapprove' => 'Endereço onion aprovado com sucesso',
'switchviewmode' => 'Alternar modo de visualização',
'statusok' => 'Status: OK',
];

View File

@ -1,70 +0,0 @@
<?php
$T=[
'all' => 'Tümü',
'lastadded' => 'Son eklenen',
'offline' => 'Çevrimdışı > 1 hafta',
'removed' => 'Kaldırıldı/Çocuk pornografisi',
'phishingclones'=> 'Phishing Klonları',
'title' => 'Onion bağlantı listesi',
'error' => 'HATA',
'nodb' => 'Veritabanı bağlantısı yok!',
'addonion' => 'Onion-Adresi',
'adddesc' => 'Açıklama',
'category' => 'Kategori',
'search' => 'Ara',
'searchterm' => 'Arama terimi',
'specialcat' => 'Özel kategoriler',
'categories' => 'Kategoriler',
'pages' => 'Sayfalar',
'invalonion' => 'Geçersiz onion-Adresi!',
'valid' => 'Geçerli bir adres şöyle gözükür:',
'succadd' => 'Onion-Adresi başarıyla eklendi!',
'faillocked' => 'Üzgünüm, bu onion-Adresini düzenlemek kilitli!',
'succupddesc' => 'Açıklama başarılı bir şekilde güncellendi!',
'succupdcat' => 'Kategori başarılı bir şekilde güncellendi!',
'alreadyknown' => 'Teşekkürler, ama bu adresi zaten biliyorum!',
'searchresult' => '"%1$s" için aranıyor, %2$d sonuç bulundu:',
'link' => 'Onion bağlantısı',
'description' => 'Açıklama',
'lasttested' => 'Son denenme',
'lastup' => 'Son görülme',
'timeadded' => 'Şu tarihte eklendi',
'actions' => 'Eylemler',
'edit' => 'Düzenle',
'test' => 'Dene',
'never' => 'Asla',
'cloneof' => 'Klonu',
'admintitle' => 'Yönetici arayüzü',
'password' => 'Şifre',
'login' => 'Giriş',
'bitcoins' => 'Bitcoinler',
'remove' => 'Kaldır',
'readd' => 'Yeniden-ekle',
'lock' => 'Kilitle',
'unlock' => 'Kilidi aç',
'promote' => 'Destekle',
'unpromote' => 'Destekleme',
'phishing' => 'Phishing',
'unphishing' => 'Phishing değil',
'update' => 'Güncelle',
'succremove' => 'Onion-Adresi başarıyla kaldırıldı!',
'succreadd' => 'Onion-Adresi başarılı bir şekilde okundu!',
'succlock' => 'Onion-Adresi başarılı bir şekilde kilitlendi!',
'succunlock' => 'Onion-Adresi\'nin kilidi başarılı bir şekilde açıldı!',
'succpromote' => '%1$s tarihine kadar onion-Adresi başarılı bir şekilde desteklendi!',
'succunpromote' => 'Onion-Adresine destek başarılı bir şekilde bırakıldı!',
'succaddphish' => 'Phishing klonu eklendi!',
'samephish' => 'Phishing klonu eklenemedi! Phishing ve orijinal aynı adrese sahip.',
'succrmphish' => 'Phishing klonu başarılı bir şekilde kaldırıldı!',
'noaction' => 'İşlem yapılmadı!',
'wrongpass' => 'Yanlış şifre!',
'testtitle' => 'Çevrimiçi-Deneme',
'testdesc' => 'Burada çevrimiçi veya değil farketmeksizin bir Onion-Adresi denenebilir.',
'testonline' => 'Evet, bu servis çevrimiçi!',
'testoffline' => 'Hayır, bu servis çevrimdışı!',
'testphishing' => 'Uyarı, bu bilinen bir phishing klonu. Gerçek site %s adresinde bulunuyor.',
'unknown' => 'Bilinmiyor',
'language' => 'Dil',
'format' => 'Biçim',
'hidelocked' => 'Kilitlileri gizle',
];

View File

@ -1,45 +0,0 @@
<?php
$native = 'Deutsch'; // Native lanugae name
$english = 'German'; // English language name
$code = 'de'; // Language code
$I=[];
$T=[];
ob_start();
echo "<?php
/*
* Onion Link List - $english translation
*
* Copyright (C) 2016-2020 Daniel Winzen <daniel@danwin1210.me>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
//Native language name: $native
\$T=[
";
if(file_exists("lang_$code.php")){
include("lang_$code.php");
}
include('lang_en.php');
foreach($T as $id=>$value){
if(isset($I[$id])){
$I[$id]=$value;
}
}
foreach($I as $id=>$value){
echo "\t'$id' => '".str_replace("'", "\'", $value)."',\n";
}
echo "];\n";
$file=ob_get_clean();
file_put_contents("lang_$code.php", $file);

Binary file not shown.

View File

@ -0,0 +1,391 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-12-26 13:51+0100\n"
"PO-Revision-Date: 2022-12-26 13:53+0100\n"
"Last-Translator: \n"
"Language-Team: \n"
"Language: de_DE\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Poedit 3.1.1\n"
#: www/test.php:7 www/test.php:15
msgid "Online-Test"
msgstr "Online-Test"
#: www/test.php:17
msgid "Here an onion address can be tested, for whether it is online or not."
msgstr ""
"Hier kann getestet werden, ob eine Onion-Adresse online ist oder nicht."
#: www/test.php:20 www/admin.php:157
msgid "Onion link:"
msgstr "Onion Link:"
#: www/test.php:27 www/onions.php:379 www/onions.php:408
msgid "Test"
msgstr "Testen"
#: www/test.php:36 www/admin.php:12 www/sitemap.php:7 cron/update.php:7
#: cron/phishing_tests.php:8 helpers/tmp5.php:6 helpers/tmp6.php:6
#: helpers/fill_unknown_phishing.php:6 helpers/tmp3.php:6 helpers/tmp7.php:6
#: helpers/tmp4.php:6 helpers/tmp2.php:6 helpers/tmp.php:6 setup.php:48
#: setup.php:51
msgid "No database connection!"
msgstr "Keine Datenbankverbindung!"
#: www/test.php:39 www/onions.php:234 www/admin.php:48 www/admin.php:108
msgid "Invalid onion address!"
msgstr "Ungültige Onion-Adresse!"
#: www/test.php:54
#, php-format
msgid ""
"Warning, this is a known phishing clone. The original site is located at %s."
msgstr ""
"Warnung, diese Adresse ist ein bekannter Phishingklon. Die Original-Seite "
"ist hier: %s."
#: www/test.php:59
msgid "Warning: This is a known scam!"
msgstr "Warnung: Dies ist ein bekannter Betrug!"
#: www/test.php:64 www/test.php:99
msgid "Yes, the service is online!"
msgstr "Ja, der Dienst ist online!"
#: www/test.php:105
msgid "No, the service is offline!"
msgstr "Nein, der Dienst ist offline!"
#: www/onions.php:55
msgid "All legitimate"
msgstr "Alle legitimen"
#: www/onions.php:56 www/onions.php:90
msgid "Last added"
msgstr "Zuletzt hinzugefügt"
#: www/onions.php:57
msgid "Offline > 1 week"
msgstr "Offline > 1 Woche"
#: www/onions.php:119 www/onions.php:128
msgid "Onion link list"
msgstr "Onion Linkliste"
#: www/onions.php:130 www/onions.php:449 www/onions.php:466
msgid "Error: No database connection!"
msgstr "Fehler: Keine Datenbankverbindung!"
#: www/onions.php:137
msgid "Onion address:"
msgstr "Onion-Adresse:"
#: www/onions.php:142 www/admin.php:181
msgid "Description:"
msgstr "Beschreibung:"
#: www/onions.php:157 www/onions.php:177 www/admin.php:197
msgid "Category:"
msgstr "Kategorie:"
#: www/onions.php:167 www/admin.php:78 www/admin.php:218
msgid "Update"
msgstr "Aktualisieren"
#: www/onions.php:172
msgid "Search:"
msgstr "Suchen:"
#: www/onions.php:172
msgid "Search term"
msgstr "Suchwort"
#: www/onions.php:182 www/onions.php:490 www/onions.php:492
msgid "All"
msgstr "Alle"
#: www/onions.php:195
msgid "Hide locked"
msgstr "Gesperrte nicht anzeigen"
#: www/onions.php:196
msgid "Search"
msgstr "Suchen"
#: www/onions.php:198
msgid "Format:"
msgstr "Format:"
#: www/onions.php:201
msgid "Special categories:"
msgstr "Spezielle Kategorien:"
#: www/onions.php:212 www/onions.php:214
msgid "Phishing Clones"
msgstr "Phishingklone"
#: www/onions.php:216
msgid "Removed/Child porn"
msgstr "Entfernt/Kinderporno"
#: www/onions.php:218
msgid "Pending approval"
msgstr "Genehmigung ausstehend"
#: www/onions.php:219
msgid "Rejected"
msgstr "Abgelehnt"
#: www/onions.php:223
msgid "Categories:"
msgstr "Kategorien:"
#: www/onions.php:235
msgid "A valid address looks like this"
msgstr "Eine gültige Adresse sieht so aus"
#: www/onions.php:238 www/onions.php:251
msgid "Error: Wrong captcha"
msgstr "Fehler: Falsches Captcha"
#: www/onions.php:244
msgid "Error: Captcha expired"
msgstr "Fehler: Captcha abgelaufen"
#: www/onions.php:272 www/admin.php:94
msgid "Successfully added onion address!"
msgstr "Onion-Adresse erfolgreich hinzugefügt!"
#: www/onions.php:274
msgid "Sorry, editing this onion address has been locked!"
msgstr "Entschuldigung, das Bearbeiten dieser Onion-Adresse wurde gesperrt!"
#: www/onions.php:278 www/admin.php:98
msgid "Successfully updated description!"
msgstr "Beschreibung erfolgreich aktualisiert!"
#: www/onions.php:282 www/admin.php:102
msgid "Successfully updated category!"
msgstr "Kategorie erfolgreich aktualisiert!"
#: www/onions.php:284 www/admin.php:104
msgid "Thanks, but I already knew this address!"
msgstr "Danke, aber ich kannte diese Adresse bereits!"
#: www/onions.php:310
#, php-format
msgid "Searching for \"%1$s\", %2$d results found:"
msgstr "Suche nach \"%1$s\", %2$d Ergebnisse gefunden:"
#: www/onions.php:357 www/onions.php:422
msgid "Onion link"
msgstr "Onion-Adresse"
#: www/onions.php:357
msgid "Description"
msgstr "Beschreibung"
#: www/onions.php:357
msgid "Last tested"
msgstr "Zuletzt getestet"
#: www/onions.php:357 www/onions.php:422
msgid "Last seen"
msgstr "Zuletzt online"
#: www/onions.php:357
msgid "Added at"
msgstr "Hinzugefügt am"
#: www/onions.php:357
msgid "Actions"
msgstr "Aktionen"
#: www/onions.php:369 www/onions.php:374 www/onions.php:389 www/onions.php:394
#: www/onions.php:431
msgid "Never"
msgstr "Nie"
#: www/onions.php:406
msgid "Edit"
msgstr "Bearbeiten"
#: www/onions.php:422
msgid "Clone of"
msgstr "Klon von"
#: www/onions.php:438
msgid "Unknown"
msgstr "Unbekannt"
#: www/onions.php:488
msgid "Pages:"
msgstr "Seiten:"
#: www/admin.php:17 www/admin.php:24
msgid "Admin interface"
msgstr "Admin Schnittstelle"
#: www/admin.php:32
msgid "Password:"
msgstr "Passwort:"
#: www/admin.php:33
msgid "Login"
msgstr "Anmelden"
#: www/admin.php:36
msgid "Wrong Password!"
msgstr "Falsches Passwort!"
#: www/admin.php:52 www/admin.php:208
msgid "Remove"
msgstr "Entfernen"
#: www/admin.php:54
msgid "Successfully removed onion address!"
msgstr "Onion-Adresse erfolgreich entfernt!"
#: www/admin.php:55 www/admin.php:209
msgid "Lock"
msgstr "Sperren"
#: www/admin.php:57
msgid "Successfully locked onion address!"
msgstr "Onion-Adresse erfolgreich gesperrt!"
#: www/admin.php:58 www/admin.php:213
msgid "Re-add"
msgstr "Wieder hinzufügen"
#: www/admin.php:60
msgid "Successfully re-added onion address!"
msgstr "Onion-Adresse erfolgreich wieder hinzugefügt!"
#: www/admin.php:61 www/admin.php:214
msgid "Unlock"
msgstr "Entsperren"
#: www/admin.php:63
msgid "Successfully unlocked onion address!"
msgstr "Onion-Adresse erfolgreich entsperrt!"
#: www/admin.php:64 www/admin.php:210
msgid "Promote"
msgstr "Hervorheben"
#: www/admin.php:74
#, php-format
msgid "Successfully promoted onion address until %1$s!"
msgstr "Onion-Adresse erfolgreich hervorgehoben bis %1$s!"
#: www/admin.php:75 www/admin.php:215
msgid "Un-promote"
msgstr "Nicht mehr hervorheben"
#: www/admin.php:77
msgid "Successfully un-promoted onion address!"
msgstr "Onion-Adresse erfolgreich nicht mehr hervorgehoben!"
#: www/admin.php:106 www/admin.php:211
msgid "Phishing"
msgstr "Phishing"
#: www/admin.php:120
msgid "Successfully added Phishing clone!"
msgstr "Phishingklon erfolgreich hinzugefügt!"
#: www/admin.php:122
msgid "Not added Phishing clone! Phishing and original have the same address."
msgstr ""
"Phishingklon nicht hinzugefügt! Phishing und original haben die gleiche "
"Adresse."
#: www/admin.php:125 www/admin.php:216
msgid "No phishing"
msgstr "Kein Phishing"
#: www/admin.php:130
msgid "Successfully removed Phishing clone!"
msgstr "Phishingklon erfolgreich entfernt!"
#: www/admin.php:131 www/admin.php:220
msgid "Reject"
msgstr "Ablehnen"
#: www/admin.php:133
msgid "Successfully rejected onion address"
msgstr "Onion-Adresse erfolgreich abgelehnt"
#: www/admin.php:134 www/admin.php:221
msgid "Approve"
msgstr "Akzeptieren"
#: www/admin.php:136
msgid "Successfully approved onion address"
msgstr "Onion-Adresse erfolgreich genehmigt"
#: www/admin.php:138
msgid "No action taken!"
msgstr "Keine Aktion ausgeführt!"
#: www/admin.php:151
msgid "Switch view mode"
msgstr "Ansichtsmodus wechseln"
#: www/admin.php:171
msgid "Clone of:"
msgstr "Klon von:"
#: www/admin.php:176
msgid "Bitcoins:"
msgstr "Bitcoins:"
#: common_config.php:93
msgid "Language:"
msgstr "Sprache:"
#: setup.php:25
msgid "The pdo_mysql extension of PHP is required. Please install it first."
msgstr ""
"Die pdo_mysql Erweiterung von PHP wird benötigt. Bitte installieren Sie "
"diese zuerst."
#: setup.php:28
msgid "The pcre extension of PHP is required. Please install it first."
msgstr ""
"Die pcre Erweiterung von PHP wird benötigt. Bitte installieren Sie diese "
"zuerst."
#: setup.php:31
msgid "The json extension of PHP is required. Please install it first."
msgstr ""
"Die json Erweiterung von PHP wird benötigt. Bitte installieren Sie diese "
"zuerst."
#: setup.php:34
msgid "The curl extension of PHP is required. Please install it first."
msgstr ""
"Die curl Erweiterung von PHP wird benötigt. Bitte installieren Sie diese "
"zuerst."
#: setup.php:37
msgid "The date extension of PHP is required. Please install it first."
msgstr ""
"Die date Erweiterung von PHP wird benötigt. Bitte installieren Sie diese "
"zuerst."
#: setup.php:106
msgid "Status: OK"
msgstr "Status: OK"

Binary file not shown.

View File

@ -0,0 +1,375 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-12-26 13:53+0100\n"
"PO-Revision-Date: 2022-12-26 15:08+0100\n"
"Last-Translator: \n"
"Language-Team: \n"
"Language: fa_IR\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n==0 || n==1);\n"
"X-Generator: Poedit 3.1.1\n"
#: www/test.php:7 www/test.php:15
msgid "Online-Test"
msgstr "آزمون-انلاین"
#: www/test.php:17
msgid "Here an onion address can be tested, for whether it is online or not."
msgstr "در اینجا میتوانید انلاین یا افلاین بودن آدرس پیازی را آزمایش کنید."
#: www/test.php:20 www/admin.php:157
msgid "Onion link:"
msgstr "پیوند پیازی:"
#: www/test.php:27 www/onions.php:379 www/onions.php:408
msgid "Test"
msgstr "آزمون"
#: www/test.php:36 www/admin.php:12 www/sitemap.php:7 cron/update.php:7
#: cron/phishing_tests.php:8 helpers/tmp5.php:6 helpers/tmp6.php:6
#: helpers/fill_unknown_phishing.php:6 helpers/tmp3.php:6 helpers/tmp7.php:6
#: helpers/tmp4.php:6 helpers/tmp2.php:6 helpers/tmp.php:6 setup.php:48
#: setup.php:51
msgid "No database connection!"
msgstr "مشکل در اتصال به دیتابیس"
#: www/test.php:39 www/onions.php:234 www/admin.php:48 www/admin.php:108
msgid "Invalid onion address!"
msgstr "آدرس پیازی غیر مجاز!"
#: www/test.php:54
#, php-format
msgid "Warning, this is a known phishing clone. The original site is located at %s."
msgstr "هشدار، این یک کلون فیشینگ شناخته شده است. ساید اصلی در اینجاست %s."
#: www/test.php:59
msgid "Warning: This is a known scam!"
msgstr ""
#: www/test.php:64 www/test.php:99
msgid "Yes, the service is online!"
msgstr "بله، سرویس انلاین است!"
#: www/test.php:105
msgid "No, the service is offline!"
msgstr "خیر، سرویس افلاین است!"
#: www/onions.php:55
msgid "All legitimate"
msgstr ""
#: www/onions.php:56 www/onions.php:90
msgid "Last added"
msgstr "آخرین تغییرات"
#: www/onions.php:57
msgid "Offline > 1 week"
msgstr "غیر فعال > 1 هفته"
#: www/onions.php:119 www/onions.php:128
msgid "Onion link list"
msgstr "پیوندهای پیازی"
#: www/onions.php:130 www/onions.php:449 www/onions.php:466
msgid "Error: No database connection!"
msgstr "خطا: مشکل در اتصال به دیتابیس"
#: www/onions.php:137
msgid "Onion address:"
msgstr ""
#: www/onions.php:142 www/admin.php:181
msgid "Description:"
msgstr "توضیح:"
#: www/onions.php:157 www/onions.php:177 www/admin.php:197
msgid "Category:"
msgstr "دسته بندی:"
#: www/onions.php:167 www/admin.php:78 www/admin.php:218
msgid "Update"
msgstr "بروزرسانی"
#: www/onions.php:172
msgid "Search:"
msgstr "جستجو:"
#: www/onions.php:172
msgid "Search term"
msgstr "جستجوی اصطلاح"
#: www/onions.php:182 www/onions.php:490 www/onions.php:492
msgid "All"
msgstr "همه"
#: www/onions.php:195
msgid "Hide locked"
msgstr "پنهان کردن قفل"
#: www/onions.php:196
msgid "Search"
msgstr "جستجو"
#: www/onions.php:198
msgid "Format:"
msgstr "فرمت:"
#: www/onions.php:201
msgid "Special categories:"
msgstr "دسته بندی های خاص:"
#: www/onions.php:212 www/onions.php:214
msgid "Phishing Clones"
msgstr "کلاهبرداری فیشینگ"
#: www/onions.php:216
msgid "Removed/Child porn"
msgstr "حذف/ پورن کودکان"
#: www/onions.php:218
msgid "Pending approval"
msgstr "در انتضار تایید"
#: www/onions.php:219
msgid "Rejected"
msgstr "رد شد"
#: www/onions.php:223
msgid "Categories:"
msgstr "دسته بندی ها:"
#: www/onions.php:235
msgid "A valid address looks like this"
msgstr "آدرس معتبری به این شکل است"
#: www/onions.php:238 www/onions.php:251
msgid "Error: Wrong captcha"
msgstr ""
#: www/onions.php:244
msgid "Error: Captcha expired"
msgstr ""
#: www/onions.php:272 www/admin.php:94
msgid "Successfully added onion address!"
msgstr "آدرس پیازی با موفقیت اضافه شد!"
#: www/onions.php:274
msgid "Sorry, editing this onion address has been locked!"
msgstr "متاسفیم، این آدرس قفل شده است نمیتوانید ویرایش کنید!"
#: www/onions.php:278 www/admin.php:98
msgid "Successfully updated description!"
msgstr "توضیحات با موفقیت بروزرسانی شد !"
#: www/onions.php:282 www/admin.php:102
msgid "Successfully updated category!"
msgstr "دسته بندی به موفقیت بروزرسانی شد!"
#: www/onions.php:284 www/admin.php:104
msgid "Thanks, but I already knew this address!"
msgstr "با تشکر ، اما این آدرس موجود است !"
#: www/onions.php:310
#, php-format
msgid "Searching for \"%1$s\", %2$d results found:"
msgstr "جستجو برای \"%1$s\", %2$d نتیجه یافت شد:"
#: www/onions.php:357 www/onions.php:422
msgid "Onion link"
msgstr "پیوند پیازی"
#: www/onions.php:357
msgid "Description"
msgstr "توضیح"
#: www/onions.php:357
msgid "Last tested"
msgstr "آخرین آزمون"
#: www/onions.php:357 www/onions.php:422
msgid "Last seen"
msgstr "آخرین بازدید"
#: www/onions.php:357
msgid "Added at"
msgstr "اضافه شده در"
#: www/onions.php:357
msgid "Actions"
msgstr "اقدامات"
#: www/onions.php:369 www/onions.php:374 www/onions.php:389 www/onions.php:394
#: www/onions.php:431
msgid "Never"
msgstr "هرگز"
#: www/onions.php:406
msgid "Edit"
msgstr "ویرایش"
#: www/onions.php:422
msgid "Clone of"
msgstr "کلون از"
#: www/onions.php:438
msgid "Unknown"
msgstr "ناشناخته"
#: www/onions.php:488
msgid "Pages:"
msgstr "صفحه:"
#: www/admin.php:17 www/admin.php:24
msgid "Admin interface"
msgstr "رابط مدیریت"
#: www/admin.php:32
msgid "Password:"
msgstr "رمز عبور:"
#: www/admin.php:33
msgid "Login"
msgstr "ورود"
#: www/admin.php:36
msgid "Wrong Password!"
msgstr "رمز اشتباه !"
#: www/admin.php:52 www/admin.php:208
msgid "Remove"
msgstr "حذف"
#: www/admin.php:54
msgid "Successfully removed onion address!"
msgstr "آدرس پیازی با موفقیت حذف شد!"
#: www/admin.php:55 www/admin.php:209
msgid "Lock"
msgstr "قفل"
#: www/admin.php:57
msgid "Successfully locked onion address!"
msgstr "آدرس پیازی با موفقیت قفل شد !"
#: www/admin.php:58 www/admin.php:213
msgid "Re-add"
msgstr "دوباره-اضافه"
#: www/admin.php:60
msgid "Successfully re-added onion address!"
msgstr "آدرس پیازی با موفقیت دوباره اضافه شد !"
#: www/admin.php:61 www/admin.php:214
msgid "Unlock"
msgstr "قفل باز"
#: www/admin.php:63
msgid "Successfully unlocked onion address!"
msgstr "قفل آدرس پیازی با موفقیت باز شد !"
#: www/admin.php:64 www/admin.php:210
msgid "Promote"
msgstr "تبلیغ"
#: www/admin.php:74
#, php-format
msgid "Successfully promoted onion address until %1$s!"
msgstr "آدرس پیازی با موفقیت تبلیغ شد تا %1$s!"
#: www/admin.php:75 www/admin.php:215
msgid "Un-promote"
msgstr "لغو-تبلیغ"
#: www/admin.php:77
msgid "Successfully un-promoted onion address!"
msgstr "تبلیغ آدرس با موفقیت لغو شد!"
#: www/admin.php:106 www/admin.php:211
msgid "Phishing"
msgstr "فیشینگ"
#: www/admin.php:120
msgid "Successfully added Phishing clone!"
msgstr "کلون فیشینگ با موفقیت اضافه شد !"
#: www/admin.php:122
msgid "Not added Phishing clone! Phishing and original have the same address."
msgstr "کلون فیشینگ اضافه نشد! فیشینگ و اصلی آدرس یکسانی دارند."
#: www/admin.php:125 www/admin.php:216
msgid "No phishing"
msgstr "بدون فیشینگ"
#: www/admin.php:130
msgid "Successfully removed Phishing clone!"
msgstr "کلون فیشینگ با موفقیت حذف شد !"
#: www/admin.php:131 www/admin.php:220
msgid "Reject"
msgstr "رد کردن"
#: www/admin.php:133
msgid "Successfully rejected onion address"
msgstr "آدرس پیازی با موفقیت رد شد"
#: www/admin.php:134 www/admin.php:221
msgid "Approve"
msgstr "تایید"
#: www/admin.php:136
msgid "Successfully approved onion address"
msgstr "آدرس پیازی با موفقیت تایید شد"
#: www/admin.php:138
msgid "No action taken!"
msgstr "اقدامی انجام نشده است!"
#: www/admin.php:151
msgid "Switch view mode"
msgstr "نغییر حالت مشاهده"
#: www/admin.php:171
msgid "Clone of:"
msgstr "کلون از:"
#: www/admin.php:176
msgid "Bitcoins:"
msgstr "بیت کوین:"
#: common_config.php:93
msgid "Language:"
msgstr "زبان:"
#: setup.php:25
msgid "The pdo_mysql extension of PHP is required. Please install it first."
msgstr ""
#: setup.php:28
msgid "The pcre extension of PHP is required. Please install it first."
msgstr ""
#: setup.php:31
msgid "The json extension of PHP is required. Please install it first."
msgstr ""
#: setup.php:34
msgid "The curl extension of PHP is required. Please install it first."
msgstr ""
#: setup.php:37
msgid "The date extension of PHP is required. Please install it first."
msgstr ""
#: setup.php:106
msgid "Status: OK"
msgstr "وضعیت: خوب"

Binary file not shown.

View File

@ -0,0 +1,375 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-12-26 13:53+0100\n"
"PO-Revision-Date: 2022-12-26 14:53+0100\n"
"Last-Translator: \n"
"Language-Team: \n"
"Language: ja_JP\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Poedit 3.1.1\n"
#: www/test.php:7 www/test.php:15
msgid "Online-Test"
msgstr "オンラインテスト"
#: www/test.php:17
msgid "Here an onion address can be tested, for whether it is online or not."
msgstr "ここで、Onionアドレスが「オンライン」かどうかを試すことができます。"
#: www/test.php:20 www/admin.php:157
msgid "Onion link:"
msgstr "Onion リンク:"
#: www/test.php:27 www/onions.php:379 www/onions.php:408
msgid "Test"
msgstr "テスト"
#: www/test.php:36 www/admin.php:12 www/sitemap.php:7 cron/update.php:7
#: cron/phishing_tests.php:8 helpers/tmp5.php:6 helpers/tmp6.php:6
#: helpers/fill_unknown_phishing.php:6 helpers/tmp3.php:6 helpers/tmp7.php:6
#: helpers/tmp4.php:6 helpers/tmp2.php:6 helpers/tmp.php:6 setup.php:48
#: setup.php:51
msgid "No database connection!"
msgstr "データベースの接続がありません!"
#: www/test.php:39 www/onions.php:234 www/admin.php:48 www/admin.php:108
msgid "Invalid onion address!"
msgstr "Onionアドレスが不正です"
#: www/test.php:54
#, php-format
msgid "Warning, this is a known phishing clone. The original site is located at %s."
msgstr "警告。これは知られた詐欺サイト(クローン)です。オリジナルは %s です。"
#: www/test.php:59
msgid "Warning: This is a known scam!"
msgstr ""
#: www/test.php:64 www/test.php:99
msgid "Yes, the service is online!"
msgstr "対象はオンラインです!"
#: www/test.php:105
msgid "No, the service is offline!"
msgstr "対象はオフラインです!"
#: www/onions.php:55
msgid "All legitimate"
msgstr ""
#: www/onions.php:56 www/onions.php:90
msgid "Last added"
msgstr "最近の追加"
#: www/onions.php:57
msgid "Offline > 1 week"
msgstr "1週間以上オフライン"
#: www/onions.php:119 www/onions.php:128
msgid "Onion link list"
msgstr "Onionリンクの一覧"
#: www/onions.php:130 www/onions.php:449 www/onions.php:466
msgid "Error: No database connection!"
msgstr "エラー:データベースの接続がありません!"
#: www/onions.php:137
msgid "Onion address:"
msgstr "Onion アドレス:"
#: www/onions.php:142 www/admin.php:181
msgid "Description:"
msgstr "詳細:"
#: www/onions.php:157 www/onions.php:177 www/admin.php:197
msgid "Category:"
msgstr "カテゴリ:"
#: www/onions.php:167 www/admin.php:78 www/admin.php:218
msgid "Update"
msgstr "更新"
#: www/onions.php:172
msgid "Search:"
msgstr "検索:"
#: www/onions.php:172
msgid "Search term"
msgstr "検索キーワード"
#: www/onions.php:182 www/onions.php:490 www/onions.php:492
msgid "All"
msgstr "全て"
#: www/onions.php:195
msgid "Hide locked"
msgstr ""
#: www/onions.php:196
msgid "Search"
msgstr "検索"
#: www/onions.php:198
msgid "Format:"
msgstr "形式:"
#: www/onions.php:201
msgid "Special categories:"
msgstr "特別な分類:"
#: www/onions.php:212 www/onions.php:214
msgid "Phishing Clones"
msgstr "詐欺サイト(クローン)"
#: www/onions.php:216
msgid "Removed/Child porn"
msgstr "削除済"
#: www/onions.php:218
msgid "Pending approval"
msgstr ""
#: www/onions.php:219
msgid "Rejected"
msgstr ""
#: www/onions.php:223
msgid "Categories:"
msgstr "カテゴリ:"
#: www/onions.php:235
msgid "A valid address looks like this"
msgstr "正しいアドレスはこんな感じのはず:"
#: www/onions.php:238 www/onions.php:251
msgid "Error: Wrong captcha"
msgstr ""
#: www/onions.php:244
msgid "Error: Captcha expired"
msgstr ""
#: www/onions.php:272 www/admin.php:94
msgid "Successfully added onion address!"
msgstr "Onionアドレスを追加しました"
#: www/onions.php:274
msgid "Sorry, editing this onion address has been locked!"
msgstr "ごめん、このOnionアドレスはロックされていて編集できない"
#: www/onions.php:278 www/admin.php:98
msgid "Successfully updated description!"
msgstr "説明の更新に成功しました!"
#: www/onions.php:282 www/admin.php:102
msgid "Successfully updated category!"
msgstr "カテゴリの変更に成功しました!"
#: www/onions.php:284 www/admin.php:104
msgid "Thanks, but I already knew this address!"
msgstr "ありがとう、でも、このアドレスはもう知ってるんだ!"
#: www/onions.php:310
#, php-format
msgid "Searching for \"%1$s\", %2$d results found:"
msgstr "検索キーワード \"%1$s\" - %2$d 件見つかりました:"
#: www/onions.php:357 www/onions.php:422
msgid "Onion link"
msgstr "Onion リンク"
#: www/onions.php:357
msgid "Description"
msgstr "説明"
#: www/onions.php:357
msgid "Last tested"
msgstr "接続試験日"
#: www/onions.php:357 www/onions.php:422
msgid "Last seen"
msgstr "最後に見た日"
#: www/onions.php:357
msgid "Added at"
msgstr "追加された日"
#: www/onions.php:357
msgid "Actions"
msgstr "操作"
#: www/onions.php:369 www/onions.php:374 www/onions.php:389 www/onions.php:394
#: www/onions.php:431
msgid "Never"
msgstr "なし"
#: www/onions.php:406
msgid "Edit"
msgstr "編集"
#: www/onions.php:422
msgid "Clone of"
msgstr "クローン元(オリジナル)"
#: www/onions.php:438
msgid "Unknown"
msgstr "不明"
#: www/onions.php:488
msgid "Pages:"
msgstr "ページ:"
#: www/admin.php:17 www/admin.php:24
msgid "Admin interface"
msgstr "管理者の操作画面"
#: www/admin.php:32
msgid "Password:"
msgstr "パスワード:"
#: www/admin.php:33
msgid "Login"
msgstr "ログイン"
#: www/admin.php:36
msgid "Wrong Password!"
msgstr "パスワードが違います!"
#: www/admin.php:52 www/admin.php:208
msgid "Remove"
msgstr ""
#: www/admin.php:54
msgid "Successfully removed onion address!"
msgstr "Onionアドレスを削除しました"
#: www/admin.php:55 www/admin.php:209
msgid "Lock"
msgstr "施錠"
#: www/admin.php:57
msgid "Successfully locked onion address!"
msgstr "Onionアドレスをロックしました"
#: www/admin.php:58 www/admin.php:213
msgid "Re-add"
msgstr "再追加"
#: www/admin.php:60
msgid "Successfully re-added onion address!"
msgstr "Onionアドレスを再度追加しました"
#: www/admin.php:61 www/admin.php:214
msgid "Unlock"
msgstr "解錠"
#: www/admin.php:63
msgid "Successfully unlocked onion address!"
msgstr "Onionアドレスのロックを解除しました"
#: www/admin.php:64 www/admin.php:210
msgid "Promote"
msgstr "宣伝"
#: www/admin.php:74
#, php-format
msgid "Successfully promoted onion address until %1$s!"
msgstr "Onionアドレスを次の日まで宣伝します %1$s!"
#: www/admin.php:75 www/admin.php:215
msgid "Un-promote"
msgstr "宣伝解除"
#: www/admin.php:77
msgid "Successfully un-promoted onion address!"
msgstr "Onionアドレスの宣伝をやめました"
#: www/admin.php:106 www/admin.php:211
msgid "Phishing"
msgstr "詐欺サイト"
#: www/admin.php:120
msgid "Successfully added Phishing clone!"
msgstr "詐欺サイトを追加しました!"
#: www/admin.php:122
msgid "Not added Phishing clone! Phishing and original have the same address."
msgstr "追加できませんでした。詐欺サイトとオリジナルのアドレスが同一です。"
#: www/admin.php:125 www/admin.php:216
msgid "No phishing"
msgstr "詐欺サイトではない"
#: www/admin.php:130
msgid "Successfully removed Phishing clone!"
msgstr "詐欺サイトを削除しました!"
#: www/admin.php:131 www/admin.php:220
msgid "Reject"
msgstr ""
#: www/admin.php:133
msgid "Successfully rejected onion address"
msgstr ""
#: www/admin.php:134 www/admin.php:221
msgid "Approve"
msgstr ""
#: www/admin.php:136
msgid "Successfully approved onion address"
msgstr ""
#: www/admin.php:138
msgid "No action taken!"
msgstr "何も操作していません!"
#: www/admin.php:151
msgid "Switch view mode"
msgstr ""
#: www/admin.php:171
msgid "Clone of:"
msgstr "クローン元(オリジナル):"
#: www/admin.php:176
msgid "Bitcoins:"
msgstr "ビットコイン:"
#: common_config.php:93
msgid "Language:"
msgstr "言語:"
#: setup.php:25
msgid "The pdo_mysql extension of PHP is required. Please install it first."
msgstr "PHPのpdo_mysql拡張が必要です。先にインストールしてください。"
#: setup.php:28
msgid "The pcre extension of PHP is required. Please install it first."
msgstr "PHPのpcre拡張が必要です。先にインストールしてください。"
#: setup.php:31
msgid "The json extension of PHP is required. Please install it first."
msgstr "PHPのjson拡張が必要です。先にインストールしてください。"
#: setup.php:34
msgid "The curl extension of PHP is required. Please install it first."
msgstr "PHPのcurl拡張が必要です。先にインストールしてください。"
#: setup.php:37
msgid "The date extension of PHP is required. Please install it first."
msgstr "PHPのdate拡張が必要です。先にインストールしてください。"
#: setup.php:106
msgid "Status: OK"
msgstr "状態: 良好"

375
locale/onion-link-list.pot Normal file
View File

@ -0,0 +1,375 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-12-26 15:11+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"
#: www/test.php:7 www/test.php:15
msgid "Online-Test"
msgstr ""
#: www/test.php:17
msgid "Here an onion address can be tested, for whether it is online or not."
msgstr ""
#: www/test.php:20 www/admin.php:157
msgid "Onion link:"
msgstr ""
#: www/test.php:27 www/onions.php:379 www/onions.php:408
msgid "Test"
msgstr ""
#: www/test.php:36 www/admin.php:12 www/sitemap.php:7 cron/update.php:7
#: cron/phishing_tests.php:8 helpers/tmp5.php:6 helpers/tmp6.php:6
#: helpers/fill_unknown_phishing.php:6 helpers/tmp3.php:6 helpers/tmp7.php:6
#: helpers/tmp4.php:6 helpers/tmp2.php:6 helpers/tmp.php:6 setup.php:48
#: setup.php:51
msgid "No database connection!"
msgstr ""
#: www/test.php:39 www/onions.php:234 www/admin.php:48 www/admin.php:108
msgid "Invalid onion address!"
msgstr ""
#: www/test.php:54
#, php-format
msgid ""
"Warning, this is a known phishing clone. The original site is located at %s."
msgstr ""
#: www/test.php:59
msgid "Warning: This is a known scam!"
msgstr ""
#: www/test.php:64 www/test.php:99
msgid "Yes, the service is online!"
msgstr ""
#: www/test.php:105
msgid "No, the service is offline!"
msgstr ""
#: www/onions.php:55
msgid "All legitimate"
msgstr ""
#: www/onions.php:56 www/onions.php:90
msgid "Last added"
msgstr ""
#: www/onions.php:57
msgid "Offline > 1 week"
msgstr ""
#: www/onions.php:119 www/onions.php:128
msgid "Onion link list"
msgstr ""
#: www/onions.php:130 www/onions.php:449 www/onions.php:466
msgid "Error: No database connection!"
msgstr ""
#: www/onions.php:137
msgid "Onion address:"
msgstr ""
#: www/onions.php:142 www/admin.php:181
msgid "Description:"
msgstr ""
#: www/onions.php:157 www/onions.php:177 www/admin.php:197
msgid "Category:"
msgstr ""
#: www/onions.php:167 www/admin.php:78 www/admin.php:218
msgid "Update"
msgstr ""
#: www/onions.php:172
msgid "Search:"
msgstr ""
#: www/onions.php:172
msgid "Search term"
msgstr ""
#: www/onions.php:182 www/onions.php:490 www/onions.php:492
msgid "All"
msgstr ""
#: www/onions.php:195
msgid "Hide locked"
msgstr ""
#: www/onions.php:196
msgid "Search"
msgstr ""
#: www/onions.php:198
msgid "Format:"
msgstr ""
#: www/onions.php:201
msgid "Special categories:"
msgstr ""
#: www/onions.php:212 www/onions.php:214
msgid "Phishing Clones"
msgstr ""
#: www/onions.php:216
msgid "Removed/Child porn"
msgstr ""
#: www/onions.php:218
msgid "Pending approval"
msgstr ""
#: www/onions.php:219
msgid "Rejected"
msgstr ""
#: www/onions.php:223
msgid "Categories:"
msgstr ""
#: www/onions.php:235
msgid "A valid address looks like this"
msgstr ""
#: www/onions.php:238 www/onions.php:251
msgid "Error: Wrong captcha"
msgstr ""
#: www/onions.php:244
msgid "Error: Captcha expired"
msgstr ""
#: www/onions.php:272 www/admin.php:94
msgid "Successfully added onion address!"
msgstr ""
#: www/onions.php:274
msgid "Sorry, editing this onion address has been locked!"
msgstr ""
#: www/onions.php:278 www/admin.php:98
msgid "Successfully updated description!"
msgstr ""
#: www/onions.php:282 www/admin.php:102
msgid "Successfully updated category!"
msgstr ""
#: www/onions.php:284 www/admin.php:104
msgid "Thanks, but I already knew this address!"
msgstr ""
#: www/onions.php:310
#, php-format
msgid "Searching for \"%1$s\", %2$d results found:"
msgstr ""
#: www/onions.php:357 www/onions.php:422
msgid "Onion link"
msgstr ""
#: www/onions.php:357
msgid "Description"
msgstr ""
#: www/onions.php:357
msgid "Last tested"
msgstr ""
#: www/onions.php:357 www/onions.php:422
msgid "Last seen"
msgstr ""
#: www/onions.php:357
msgid "Added at"
msgstr ""
#: www/onions.php:357
msgid "Actions"
msgstr ""
#: www/onions.php:369 www/onions.php:374 www/onions.php:389 www/onions.php:394
#: www/onions.php:431
msgid "Never"
msgstr ""
#: www/onions.php:406
msgid "Edit"
msgstr ""
#: www/onions.php:422
msgid "Clone of"
msgstr ""
#: www/onions.php:438
msgid "Unknown"
msgstr ""
#: www/onions.php:488
msgid "Pages:"
msgstr ""
#: www/admin.php:17 www/admin.php:24
msgid "Admin interface"
msgstr ""
#: www/admin.php:32
msgid "Password:"
msgstr ""
#: www/admin.php:33
msgid "Login"
msgstr ""
#: www/admin.php:36
msgid "Wrong Password!"
msgstr ""
#: www/admin.php:52 www/admin.php:208
msgid "Remove"
msgstr ""
#: www/admin.php:54
msgid "Successfully removed onion address!"
msgstr ""
#: www/admin.php:55 www/admin.php:209
msgid "Lock"
msgstr ""
#: www/admin.php:57
msgid "Successfully locked onion address!"
msgstr ""
#: www/admin.php:58 www/admin.php:213
msgid "Re-add"
msgstr ""
#: www/admin.php:60
msgid "Successfully re-added onion address!"
msgstr ""
#: www/admin.php:61 www/admin.php:214
msgid "Unlock"
msgstr ""
#: www/admin.php:63
msgid "Successfully unlocked onion address!"
msgstr ""
#: www/admin.php:64 www/admin.php:210
msgid "Promote"
msgstr ""
#: www/admin.php:74
#, php-format
msgid "Successfully promoted onion address until %1$s!"
msgstr ""
#: www/admin.php:75 www/admin.php:215
msgid "Un-promote"
msgstr ""
#: www/admin.php:77
msgid "Successfully un-promoted onion address!"
msgstr ""
#: www/admin.php:106 www/admin.php:211
msgid "Phishing"
msgstr ""
#: www/admin.php:120
msgid "Successfully added Phishing clone!"
msgstr ""
#: www/admin.php:122
msgid "Not added Phishing clone! Phishing and original have the same address."
msgstr ""
#: www/admin.php:125 www/admin.php:216
msgid "No phishing"
msgstr ""
#: www/admin.php:130
msgid "Successfully removed Phishing clone!"
msgstr ""
#: www/admin.php:131 www/admin.php:220
msgid "Reject"
msgstr ""
#: www/admin.php:133
msgid "Successfully rejected onion address"
msgstr ""
#: www/admin.php:134 www/admin.php:221
msgid "Approve"
msgstr ""
#: www/admin.php:136
msgid "Successfully approved onion address"
msgstr ""
#: www/admin.php:138
msgid "No action taken!"
msgstr ""
#: www/admin.php:151
msgid "Switch view mode"
msgstr ""
#: www/admin.php:171
msgid "Clone of:"
msgstr ""
#: www/admin.php:176
msgid "Bitcoins:"
msgstr ""
#: common_config.php:93
msgid "Language:"
msgstr ""
#: setup.php:25
msgid "The pdo_mysql extension of PHP is required. Please install it first."
msgstr ""
#: setup.php:28
msgid "The pcre extension of PHP is required. Please install it first."
msgstr ""
#: setup.php:31
msgid "The json extension of PHP is required. Please install it first."
msgstr ""
#: setup.php:34
msgid "The curl extension of PHP is required. Please install it first."
msgstr ""
#: setup.php:37
msgid "The date extension of PHP is required. Please install it first."
msgstr ""
#: setup.php:106
msgid "Status: OK"
msgstr ""

Binary file not shown.

View File

@ -0,0 +1,375 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-12-26 13:53+0100\n"
"PO-Revision-Date: 2022-12-26 14:14+0100\n"
"Last-Translator: \n"
"Language-Team: \n"
"Language: pt_PT\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Poedit 3.1.1\n"
#: www/test.php:7 www/test.php:15
msgid "Online-Test"
msgstr "Online-Teste"
#: www/test.php:17
msgid "Here an onion address can be tested, for whether it is online or not."
msgstr "Aqui um endereço onion pode ser testado, para saber se está online ou não."
#: www/test.php:20 www/admin.php:157
msgid "Onion link:"
msgstr ""
#: www/test.php:27 www/onions.php:379 www/onions.php:408
msgid "Test"
msgstr "Testar"
#: www/test.php:36 www/admin.php:12 www/sitemap.php:7 cron/update.php:7
#: cron/phishing_tests.php:8 helpers/tmp5.php:6 helpers/tmp6.php:6
#: helpers/fill_unknown_phishing.php:6 helpers/tmp3.php:6 helpers/tmp7.php:6
#: helpers/tmp4.php:6 helpers/tmp2.php:6 helpers/tmp.php:6 setup.php:48
#: setup.php:51
msgid "No database connection!"
msgstr "Sem conexão com a database!"
#: www/test.php:39 www/onions.php:234 www/admin.php:48 www/admin.php:108
msgid "Invalid onion address!"
msgstr "Endereço onion inválido!"
#: www/test.php:54
#, php-format
msgid "Warning, this is a known phishing clone. The original site is located at %s."
msgstr "Aviso, este é um clone para phishing conhecido. O site original está localizado em %s."
#: www/test.php:59
msgid "Warning: This is a known scam!"
msgstr ""
#: www/test.php:64 www/test.php:99
msgid "Yes, the service is online!"
msgstr "Sim, o serviço está online!"
#: www/test.php:105
msgid "No, the service is offline!"
msgstr "Não, o serviço está offline!"
#: www/onions.php:55
msgid "All legitimate"
msgstr ""
#: www/onions.php:56 www/onions.php:90
msgid "Last added"
msgstr "Últimos adicionados"
#: www/onions.php:57
msgid "Offline > 1 week"
msgstr "Offline > 1 semana"
#: www/onions.php:119 www/onions.php:128
msgid "Onion link list"
msgstr "Lista de links onion"
#: www/onions.php:130 www/onions.php:449 www/onions.php:466
msgid "Error: No database connection!"
msgstr "Erro: Sem conexão com a database!"
#: www/onions.php:137
msgid "Onion address:"
msgstr "Endereço onion:"
#: www/onions.php:142 www/admin.php:181
msgid "Description:"
msgstr "Descrição:"
#: www/onions.php:157 www/onions.php:177 www/admin.php:197
msgid "Category:"
msgstr "Categoria:"
#: www/onions.php:167 www/admin.php:78 www/admin.php:218
msgid "Update"
msgstr "Atualizar"
#: www/onions.php:172
msgid "Search:"
msgstr "Pesquisar:"
#: www/onions.php:172
msgid "Search term"
msgstr "Termo de pesquisa"
#: www/onions.php:182 www/onions.php:490 www/onions.php:492
msgid "All"
msgstr "Todos"
#: www/onions.php:195
msgid "Hide locked"
msgstr "Esconder bloqueado"
#: www/onions.php:196
msgid "Search"
msgstr "Pesquisar"
#: www/onions.php:198
msgid "Format:"
msgstr "Formato:"
#: www/onions.php:201
msgid "Special categories:"
msgstr "Categorias especiais:"
#: www/onions.php:212 www/onions.php:214
msgid "Phishing Clones"
msgstr "Clone com phishing"
#: www/onions.php:216
msgid "Removed/Child porn"
msgstr "Removidos/Pornografia infantil"
#: www/onions.php:218
msgid "Pending approval"
msgstr "Aprovação pendente"
#: www/onions.php:219
msgid "Rejected"
msgstr ""
#: www/onions.php:223
msgid "Categories:"
msgstr "Categorias:"
#: www/onions.php:235
msgid "A valid address looks like this"
msgstr "Um endereço válido é parecido com este"
#: www/onions.php:238 www/onions.php:251
msgid "Error: Wrong captcha"
msgstr ""
#: www/onions.php:244
msgid "Error: Captcha expired"
msgstr ""
#: www/onions.php:272 www/admin.php:94
msgid "Successfully added onion address!"
msgstr "Endereço onion adicionado com sucesso!"
#: www/onions.php:274
msgid "Sorry, editing this onion address has been locked!"
msgstr "Desculpe, a edição deste endereço onion foi bloqueada!"
#: www/onions.php:278 www/admin.php:98
msgid "Successfully updated description!"
msgstr "Descrição atualizada com sucesso!"
#: www/onions.php:282 www/admin.php:102
msgid "Successfully updated category!"
msgstr "Categoria atualizada com sucesso!"
#: www/onions.php:284 www/admin.php:104
msgid "Thanks, but I already knew this address!"
msgstr "Obrigado, mas já conhecia este endereço!"
#: www/onions.php:310
#, php-format
msgid "Searching for \"%1$s\", %2$d results found:"
msgstr "Procurando por \"%1$s\", %2$d resultados encontrados:"
#: www/onions.php:357 www/onions.php:422
msgid "Onion link"
msgstr "Onion link"
#: www/onions.php:357
msgid "Description"
msgstr "Descrição"
#: www/onions.php:357
msgid "Last tested"
msgstr "Testado pela última vez"
#: www/onions.php:357 www/onions.php:422
msgid "Last seen"
msgstr "Visto pela última vez"
#: www/onions.php:357
msgid "Added at"
msgstr "Adicionado em"
#: www/onions.php:357
msgid "Actions"
msgstr "Ações"
#: www/onions.php:369 www/onions.php:374 www/onions.php:389 www/onions.php:394
#: www/onions.php:431
msgid "Never"
msgstr "Nunca"
#: www/onions.php:406
msgid "Edit"
msgstr "Editar"
#: www/onions.php:422
msgid "Clone of"
msgstr "Clone de"
#: www/onions.php:438
msgid "Unknown"
msgstr "Desconhecido"
#: www/onions.php:488
msgid "Pages:"
msgstr "Páginas:"
#: www/admin.php:17 www/admin.php:24
msgid "Admin interface"
msgstr "Interface do administrador"
#: www/admin.php:32
msgid "Password:"
msgstr "Senha:"
#: www/admin.php:33
msgid "Login"
msgstr "Login"
#: www/admin.php:36
msgid "Wrong Password!"
msgstr "Senha errada!"
#: www/admin.php:52 www/admin.php:208
msgid "Remove"
msgstr "Remover"
#: www/admin.php:54
msgid "Successfully removed onion address!"
msgstr "Endereço onion removido com sucesso!"
#: www/admin.php:55 www/admin.php:209
msgid "Lock"
msgstr "Bloquear"
#: www/admin.php:57
msgid "Successfully locked onion address!"
msgstr "Endereço onion bloqueado com sucesso!"
#: www/admin.php:58 www/admin.php:213
msgid "Re-add"
msgstr "Re-adicionar"
#: www/admin.php:60
msgid "Successfully re-added onion address!"
msgstr "Endereço onion adicionado com sucesso!"
#: www/admin.php:61 www/admin.php:214
msgid "Unlock"
msgstr "Desbloquear"
#: www/admin.php:63
msgid "Successfully unlocked onion address!"
msgstr "Endereço onion desbloqueado com sucesso!"
#: www/admin.php:64 www/admin.php:210
msgid "Promote"
msgstr "Promover"
#: www/admin.php:74
#, php-format
msgid "Successfully promoted onion address until %1$s!"
msgstr ""
#: www/admin.php:75 www/admin.php:215
msgid "Un-promote"
msgstr "Despromover"
#: www/admin.php:77
msgid "Successfully un-promoted onion address!"
msgstr "Endereço onion despromovido com sucesso!"
#: www/admin.php:106 www/admin.php:211
msgid "Phishing"
msgstr "Phishing"
#: www/admin.php:120
msgid "Successfully added Phishing clone!"
msgstr "Clone com phishing adicionado com sucesso!"
#: www/admin.php:122
msgid "Not added Phishing clone! Phishing and original have the same address."
msgstr "Clone com phishing não adicionado! Phishing e original têm o mesmo endereço."
#: www/admin.php:125 www/admin.php:216
msgid "No phishing"
msgstr "Sem phishing"
#: www/admin.php:130
msgid "Successfully removed Phishing clone!"
msgstr "Clone para phishing removido com sucesso!"
#: www/admin.php:131 www/admin.php:220
msgid "Reject"
msgstr "Rejeitar"
#: www/admin.php:133
msgid "Successfully rejected onion address"
msgstr "Endereço onion rejeitado com sucesso"
#: www/admin.php:134 www/admin.php:221
msgid "Approve"
msgstr "Aprovar"
#: www/admin.php:136
msgid "Successfully approved onion address"
msgstr "Endereço onion aprovado com sucesso"
#: www/admin.php:138
msgid "No action taken!"
msgstr "Nenhuma ação tomada!"
#: www/admin.php:151
msgid "Switch view mode"
msgstr "Alternar modo de visualização"
#: www/admin.php:171
msgid "Clone of:"
msgstr "Clone de:"
#: www/admin.php:176
msgid "Bitcoins:"
msgstr "Bitcoins:"
#: common_config.php:93
msgid "Language:"
msgstr "Linguagem:"
#: setup.php:25
msgid "The pdo_mysql extension of PHP is required. Please install it first."
msgstr ""
#: setup.php:28
msgid "The pcre extension of PHP is required. Please install it first."
msgstr ""
#: setup.php:31
msgid "The json extension of PHP is required. Please install it first."
msgstr ""
#: setup.php:34
msgid "The curl extension of PHP is required. Please install it first."
msgstr ""
#: setup.php:37
msgid "The date extension of PHP is required. Please install it first."
msgstr ""
#: setup.php:106
msgid "Status: OK"
msgstr ""

Binary file not shown.

View File

@ -0,0 +1,375 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-12-26 13:53+0100\n"
"PO-Revision-Date: 2022-12-26 14:30+0100\n"
"Last-Translator: \n"
"Language-Team: \n"
"Language: tr_TR\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Poedit 3.1.1\n"
#: www/test.php:7 www/test.php:15
msgid "Online-Test"
msgstr "Çevrimiçi-Deneme"
#: www/test.php:17
msgid "Here an onion address can be tested, for whether it is online or not."
msgstr "Burada çevrimiçi veya değil farketmeksizin bir Onion-Adresi denenebilir."
#: www/test.php:20 www/admin.php:157
msgid "Onion link:"
msgstr ""
#: www/test.php:27 www/onions.php:379 www/onions.php:408
msgid "Test"
msgstr "Dene"
#: www/test.php:36 www/admin.php:12 www/sitemap.php:7 cron/update.php:7
#: cron/phishing_tests.php:8 helpers/tmp5.php:6 helpers/tmp6.php:6
#: helpers/fill_unknown_phishing.php:6 helpers/tmp3.php:6 helpers/tmp7.php:6
#: helpers/tmp4.php:6 helpers/tmp2.php:6 helpers/tmp.php:6 setup.php:48
#: setup.php:51
msgid "No database connection!"
msgstr "Veritabanı bağlantısı yok!"
#: www/test.php:39 www/onions.php:234 www/admin.php:48 www/admin.php:108
msgid "Invalid onion address!"
msgstr "Geçersiz onion-Adresi!"
#: www/test.php:54
#, php-format
msgid "Warning, this is a known phishing clone. The original site is located at %s."
msgstr "Uyarı, bu bilinen bir phishing klonu. Gerçek site %s adresinde bulunuyor."
#: www/test.php:59
msgid "Warning: This is a known scam!"
msgstr ""
#: www/test.php:64 www/test.php:99
msgid "Yes, the service is online!"
msgstr "Evet, bu servis çevrimiçi!"
#: www/test.php:105
msgid "No, the service is offline!"
msgstr "Hayır, bu servis çevrimdışı!"
#: www/onions.php:55
msgid "All legitimate"
msgstr ""
#: www/onions.php:56 www/onions.php:90
msgid "Last added"
msgstr "Son eklenen"
#: www/onions.php:57
msgid "Offline > 1 week"
msgstr "Çevrimdışı > 1 hafta"
#: www/onions.php:119 www/onions.php:128
msgid "Onion link list"
msgstr "Onion bağlantı listesi"
#: www/onions.php:130 www/onions.php:449 www/onions.php:466
msgid "Error: No database connection!"
msgstr "Hata: Veritabanı bağlantısı yok!"
#: www/onions.php:137
msgid "Onion address:"
msgstr "Onion-Adresi:"
#: www/onions.php:142 www/admin.php:181
msgid "Description:"
msgstr "Açıklama:"
#: www/onions.php:157 www/onions.php:177 www/admin.php:197
msgid "Category:"
msgstr "Kategori:"
#: www/onions.php:167 www/admin.php:78 www/admin.php:218
msgid "Update"
msgstr "Güncelle"
#: www/onions.php:172
msgid "Search:"
msgstr "Ara:"
#: www/onions.php:172
msgid "Search term"
msgstr "Arama terimi"
#: www/onions.php:182 www/onions.php:490 www/onions.php:492
msgid "All"
msgstr "Tümü"
#: www/onions.php:195
msgid "Hide locked"
msgstr "Kilitlileri gizle"
#: www/onions.php:196
msgid "Search"
msgstr "Ara"
#: www/onions.php:198
msgid "Format:"
msgstr "Biçim:"
#: www/onions.php:201
msgid "Special categories:"
msgstr "Özel kategoriler:"
#: www/onions.php:212 www/onions.php:214
msgid "Phishing Clones"
msgstr "Phishing Klonları"
#: www/onions.php:216
msgid "Removed/Child porn"
msgstr "Kaldırıldı/Çocuk pornografisi"
#: www/onions.php:218
msgid "Pending approval"
msgstr ""
#: www/onions.php:219
msgid "Rejected"
msgstr ""
#: www/onions.php:223
msgid "Categories:"
msgstr "Kategoriler:"
#: www/onions.php:235
msgid "A valid address looks like this"
msgstr "Geçerli bir adres şöyle gözükür:"
#: www/onions.php:238 www/onions.php:251
msgid "Error: Wrong captcha"
msgstr ""
#: www/onions.php:244
msgid "Error: Captcha expired"
msgstr ""
#: www/onions.php:272 www/admin.php:94
msgid "Successfully added onion address!"
msgstr "Onion-Adresi başarıyla eklendi!"
#: www/onions.php:274
msgid "Sorry, editing this onion address has been locked!"
msgstr "Üzgünüm, bu onion-Adresini düzenlemek kilitli!"
#: www/onions.php:278 www/admin.php:98
msgid "Successfully updated description!"
msgstr "Açıklama başarılı bir şekilde güncellendi!"
#: www/onions.php:282 www/admin.php:102
msgid "Successfully updated category!"
msgstr "Kategori başarılı bir şekilde güncellendi!"
#: www/onions.php:284 www/admin.php:104
msgid "Thanks, but I already knew this address!"
msgstr "Teşekkürler, ama bu adresi zaten biliyorum!"
#: www/onions.php:310
#, php-format
msgid "Searching for \"%1$s\", %2$d results found:"
msgstr "\"%1$s\" için aranıyor, %2$d sonuç bulundu:"
#: www/onions.php:357 www/onions.php:422
msgid "Onion link"
msgstr "Onion bağlantısı"
#: www/onions.php:357
msgid "Description"
msgstr "Açıklama"
#: www/onions.php:357
msgid "Last tested"
msgstr "Son denenme"
#: www/onions.php:357 www/onions.php:422
msgid "Last seen"
msgstr "Son görülme"
#: www/onions.php:357
msgid "Added at"
msgstr "Şu tarihte eklendi"
#: www/onions.php:357
msgid "Actions"
msgstr "Eylemler"
#: www/onions.php:369 www/onions.php:374 www/onions.php:389 www/onions.php:394
#: www/onions.php:431
msgid "Never"
msgstr "Asla"
#: www/onions.php:406
msgid "Edit"
msgstr "Düzenle"
#: www/onions.php:422
msgid "Clone of"
msgstr "Klonu"
#: www/onions.php:438
msgid "Unknown"
msgstr "Bilinmiyor"
#: www/onions.php:488
msgid "Pages:"
msgstr "Sayfalar:"
#: www/admin.php:17 www/admin.php:24
msgid "Admin interface"
msgstr "Yönetici arayüzü"
#: www/admin.php:32
msgid "Password:"
msgstr "Şifre:"
#: www/admin.php:33
msgid "Login"
msgstr "Giriş"
#: www/admin.php:36
msgid "Wrong Password!"
msgstr "Yanlış şifre!"
#: www/admin.php:52 www/admin.php:208
msgid "Remove"
msgstr "Kaldır"
#: www/admin.php:54
msgid "Successfully removed onion address!"
msgstr "Onion-Adresi başarıyla kaldırıldı!"
#: www/admin.php:55 www/admin.php:209
msgid "Lock"
msgstr "Kilitle"
#: www/admin.php:57
msgid "Successfully locked onion address!"
msgstr "Onion-Adresi başarılı bir şekilde kilitlendi!"
#: www/admin.php:58 www/admin.php:213
msgid "Re-add"
msgstr "Yeniden-ekle"
#: www/admin.php:60
msgid "Successfully re-added onion address!"
msgstr "Onion-Adresi başarılı bir şekilde okundu!"
#: www/admin.php:61 www/admin.php:214
msgid "Unlock"
msgstr "Kilidi aç"
#: www/admin.php:63
msgid "Successfully unlocked onion address!"
msgstr "Onion-Adresi'nin kilidi başarılı bir şekilde açıldı!"
#: www/admin.php:64 www/admin.php:210
msgid "Promote"
msgstr "Destekle"
#: www/admin.php:74
#, php-format
msgid "Successfully promoted onion address until %1$s!"
msgstr "%1$s tarihine kadar onion-Adresi başarılı bir şekilde desteklendi!"
#: www/admin.php:75 www/admin.php:215
msgid "Un-promote"
msgstr "Destekleme"
#: www/admin.php:77
msgid "Successfully un-promoted onion address!"
msgstr "Onion-Adresine destek başarılı bir şekilde bırakıldı!"
#: www/admin.php:106 www/admin.php:211
msgid "Phishing"
msgstr "Phishing"
#: www/admin.php:120
msgid "Successfully added Phishing clone!"
msgstr "Phishing klonu eklendi!"
#: www/admin.php:122
msgid "Not added Phishing clone! Phishing and original have the same address."
msgstr "Phishing klonu eklenemedi! Phishing ve orijinal aynı adrese sahip."
#: www/admin.php:125 www/admin.php:216
msgid "No phishing"
msgstr "Phishing değil"
#: www/admin.php:130
msgid "Successfully removed Phishing clone!"
msgstr "Phishing klonu başarılı bir şekilde kaldırıldı!"
#: www/admin.php:131 www/admin.php:220
msgid "Reject"
msgstr ""
#: www/admin.php:133
msgid "Successfully rejected onion address"
msgstr ""
#: www/admin.php:134 www/admin.php:221
msgid "Approve"
msgstr ""
#: www/admin.php:136
msgid "Successfully approved onion address"
msgstr ""
#: www/admin.php:138
msgid "No action taken!"
msgstr "İşlem yapılmadı!"
#: www/admin.php:151
msgid "Switch view mode"
msgstr ""
#: www/admin.php:171
msgid "Clone of:"
msgstr "Klonu:"
#: www/admin.php:176
msgid "Bitcoins:"
msgstr "Bitcoinler:"
#: common_config.php:93
msgid "Language:"
msgstr "Dil:"
#: setup.php:25
msgid "The pdo_mysql extension of PHP is required. Please install it first."
msgstr ""
#: setup.php:28
msgid "The pcre extension of PHP is required. Please install it first."
msgstr ""
#: setup.php:31
msgid "The json extension of PHP is required. Please install it first."
msgstr ""
#: setup.php:34
msgid "The curl extension of PHP is required. Please install it first."
msgstr ""
#: setup.php:37
msgid "The date extension of PHP is required. Please install it first."
msgstr ""
#: setup.php:106
msgid "Status: OK"
msgstr ""

View File

@ -2,7 +2,7 @@
/*
* Onion Link List - Setup
*
* Copyright (C) 2016-2020 Daniel Winzen <daniel@danwin1210.me>
* Copyright (C) 2016-2020 Daniel Winzen <daniel@danwin1210.de>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@ -17,21 +17,24 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
if(!extension_loaded('gettext')){
die('The gettext extension of PHP is required. Please install it first.');
}
require_once(__DIR__.'/common_config.php');
if(!extension_loaded('pdo_mysql')){
die($I['pdo_mysqlextrequired']);
die(_('The pdo_mysql extension of PHP is required. Please install it first.'));
}
if(!extension_loaded('pcre')){
die($I['pcreextrequired']);
die(_('The pcre extension of PHP is required. Please install it first.'));
}
if(!extension_loaded('json')){
die($I['jsonextrequired']);
die(_('The json extension of PHP is required. Please install it first.'));
}
if(!extension_loaded('curl')){
die($I['curlextrequired']);
die(_('The curl extension of PHP is required. Please install it first.'));
}
if(!extension_loaded('date')){
die($I['dateextrequired']);
die(_('The date extension of PHP is required. Please install it first.'));
}
try{
$db=new PDO('mysql:host=' . DBHOST . ';dbname=' . DBNAME . ';charset=utf8mb4', DBUSER, DBPASS, [PDO::ATTR_ERRMODE=>PDO::ERRMODE_WARNING, PDO::ATTR_PERSISTENT=>PERSISTENT]);
@ -42,10 +45,10 @@ try{
if(false!==$db->exec('CREATE DATABASE ' . DBNAME)){
$db=new PDO('mysql:host=' . DBHOST . ';dbname=' . DBNAME . ';charset=utf8mb4', DBUSER, DBPASS, [PDO::ATTR_ERRMODE=>PDO::ERRMODE_WARNING, PDO::ATTR_PERSISTENT=>PERSISTENT]);
}else{
die($I['nodb']);
die(_('No database connection!'));
}
}catch(PDOException $e){
die($I['nodb']);
die(_('No database connection!'));
}
}
if(!@$db->query('SELECT * FROM ' . PREFIX . 'settings LIMIT 1;')){
@ -100,4 +103,4 @@ if(!@$db->query('SELECT * FROM ' . PREFIX . 'settings LIMIT 1;')){
$stmt=$db->prepare('UPDATE ' . PREFIX . "settings SET value=? WHERE setting='version';");
$stmt->execute([DBVERSION]);
}
echo "$I[statusok]\n";
echo _('Status: OK').PHP_EOL;

3
update-translation.sh Executable file
View File

@ -0,0 +1,3 @@
#!/bin/bash
xgettext -o locale/onion-link-list.pot `find . -iname '*.php'`
for translation in `find locale -iname '*.po'`; do msgmerge -U "$translation" locale/onion-link-list.pot; msgfmt -o ${translation:0:-2}mo "$translation"; done

View File

@ -1,5 +1,6 @@
<?php
require_once(__DIR__.'/../common_config.php');
global $language, $dir;
$style = '.row{display:flex;flex-wrap:wrap}.headerrow{font-weight:bold}.col{display:flex;flex:1;padding:3px 3px;flex-direction:column}.button_table{max-width:500px}';
$style .= '.list{padding:0;}.list li{display:inline-block;padding:0.35em}#maintable .col{min-width:5em}#maintable .col:first-child{max-width:5em}';
$style .= '.red{color:red}.green{color:green}.software-link{text-align:center;font-size:small}#maintable,#maintable .col{border: 1px solid black}';
@ -8,19 +9,19 @@ try{
$db=new PDO('mysql:host=' . DBHOST . ';dbname=' . DBNAME . ';charset=utf8mb4', DBUSER, DBPASS, [PDO::ATTR_ERRMODE=>PDO::ERRMODE_WARNING, PDO::ATTR_PERSISTENT=>PERSISTENT]);
}catch(PDOException $e){
http_response_code(500);
die($I['nodb']);
die(_('No database connection!'));
}
asort($categories);
?>
<!DOCTYPE html><html lang="<?php echo $language; ?>"><head>
<title><?php echo $I['admintitle']; ?></title>
<!DOCTYPE html><html lang="<?php echo $language; ?>" dir="<?php echo $dir; ?>"><head>
<title><?php echo _('Admin interface'); ?></title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name=viewport content="width=device-width, initial-scale=1">
<meta name="robots" content="noindex">
<link rel="canonical" href="<?php echo CANONICAL_URL . $_SERVER['SCRIPT_NAME']; ?>">
<style type="text/css"><?php echo $style; ?></style>
<style><?php echo $style; ?></style>
</head><body><main>
<h1><?php echo $I['admintitle']; ?></h1>
<h1><?php echo _('Admin interface'); ?></h1>
<?php
print_langs();
@ -28,11 +29,11 @@ print_langs();
if(!isset($_POST['pass']) || $_POST['pass']!==ADMINPASS){
echo "<form action=\"$_SERVER[SCRIPT_NAME]\" method=\"POST\">";
echo "<input type=\"hidden\" name=\"lang\" value=\"$language\">";
echo "<p><label>$I[password]: <input type=\"password\" name=\"pass\" size=\"30\" required autocomplete=\"current-password\"></label></p>";
echo "<input type=\"submit\" name=\"action\" value=\"$I[login]\">";
echo "<p><label>"._('Password:')." <input type=\"password\" name=\"pass\" size=\"30\" required autocomplete=\"current-password\"></label></p>";
echo "<input type=\"submit\" name=\"action\" value=\""._('Login')."\">";
echo '</form>';
if(isset($_POST['pass'])){
echo "<p class=\"red\" role=\"alert\">$I[wrongpass]</p>";
echo "<p class=\"red\" role=\"alert\">"._('Wrong Password!')."</p>";
}
}else{
$msg = '';
@ -44,23 +45,23 @@ if(!isset($_POST['pass']) || $_POST['pass']!==ADMINPASS){
$addrs = is_array($_POST['addr']) ? $_POST['addr'] : [$_POST['addr']];
foreach ($addrs as $addr_single) {
if ( ! preg_match( '~(^(https?://)?([a-z2-7]{55}d)(\.onion(/.*)?)?$)~i', trim( $addr_single ), $addr ) ) {
$msg .= "<p class=\"red\" role=\"alert\">$I[invalonion]</p>";
$msg .= "<p class=\"red\" role=\"alert\">"._('Invalid onion address!')."</p>";
} else {
$addr = strtolower( $addr[ 3 ] );
$md5 = md5( $addr, true );
if ( $_POST[ 'action' ] === $I[ 'remove' ] ) { //remove address from public display
if ( $_POST[ 'action' ] === _('Remove') ) { //remove address from public display
$db->prepare( 'UPDATE ' . PREFIX . "onions SET address='', locked=1, approved=-1, timechanged=? WHERE md5sum=?;" )->execute( [ time(), $md5 ] );
$msg .= "<p class=\"green\" role=\"alert\">$I[succremove]</p>";
} elseif ( $_POST[ 'action' ] === $I[ 'lock' ] ) { //lock editing
$msg .= "<p class=\"green\" role=\"alert\">"._('Successfully removed onion address!')."</p>";
} elseif ( $_POST[ 'action' ] === _('Lock') ) { //lock editing
$db->prepare( 'UPDATE ' . PREFIX . 'onions SET locked=1, approved=1, timechanged=? WHERE md5sum=?;' )->execute( [ time(), $md5 ] );
$msg .= "<p class=\"green\"> role=\"alert\"$I[succlock]</p>";
} elseif ( $_POST[ 'action' ] === $I[ 'readd' ] ) { //add onion back, if previously removed
$msg .= "<p class=\"green\"> role=\"alert\">"._('Successfully locked onion address!')."</p>";
} elseif ( $_POST[ 'action' ] === _('Re-add') ) { //add onion back, if previously removed
$db->prepare( 'UPDATE ' . PREFIX . 'onions SET address=?, locked=1, approved=1, timechanged=? WHERE md5sum=?;' )->execute( [ $addr, time(), $md5 ] );
$msg .= "<p class=\"green\" role=\"alert\">$I[succreadd]</p>";
} elseif ( $_POST[ 'action' ] === $I[ 'unlock' ] ) { //unlock editing
$msg .= "<p class=\"green\" role=\"alert\">"._('Successfully re-added onion address!')."</p>";
} elseif ( $_POST[ 'action' ] === _('Unlock') ) { //unlock editing
$db->prepare( 'UPDATE ' . PREFIX . 'onions SET locked=0, approved=1, timechanged=? WHERE md5sum=?;' )->execute( [ time(), $md5 ] );
$msg .= "<p class=\"green\" role=\"alert\">$I[succunlock]</p>";
} elseif ( $_POST[ 'action' ] === $I[ 'promote' ] ) { //promote link for payed time
$msg .= "<p class=\"green\" role=\"alert\">"._('Successfully unlocked onion address!')."</p>";
} elseif ( $_POST[ 'action' ] === _('Promote') ) { //promote link for paid time
$stmt = $db->prepare( 'SELECT special FROM ' . PREFIX . 'onions WHERE md5sum=?;' );
$stmt->execute( [ $md5 ] );
$specialtime = $stmt->fetch( PDO::FETCH_NUM );
@ -70,11 +71,11 @@ if(!isset($_POST['pass']) || $_POST['pass']!==ADMINPASS){
$time = $specialtime[ 0 ] + ( ( $_POST[ 'btc' ] / PROMOTEPRICE ) * PROMOTETIME );
}
$db->prepare( 'UPDATE ' . PREFIX . 'onions SET special=?, locked=1, approved=1, timechanged=? WHERE md5sum=?;' )->execute( [ $time, time(), $md5 ] );
$msg .= sprintf( "<p class=\"green\" role=\"alert\">$I[succpromote]</p>", date( 'Y-m-d H:i', $time ) );
} elseif ( $_POST[ 'action' ] === $I[ 'unpromote' ] ) { //remove promoted status
$msg .= "<p class=\"green\" role=\"alert\">".sprintf(_('Successfully promoted onion address until %1$s!'), date( 'Y-m-d H:i', $time ))."</p>";
} elseif ( $_POST[ 'action' ] === _('Un-promote') ) { //remove promoted status
$db->prepare( 'UPDATE ' . PREFIX . 'onions SET special=0, timechanged=? WHERE md5sum=?;' )->execute( [ time(), $md5 ] );
$msg .= "<p class=\"green\" role=\"alert\">$I[succunpromote]</p>";
} elseif ( $_POST[ 'action' ] === $I[ 'update' ] ) { //update description
$msg .= "<p class=\"green\" role=\"alert\">"._('Successfully un-promoted onion address!')."</p>";
} elseif ( $_POST[ 'action' ] === _('Update') ) { //update description
$stmt = $db->prepare( 'SELECT * FROM ' . PREFIX . 'onions WHERE md5sum=?;' );
$stmt->execute( [ $md5 ] );
if ( $category === count( $categories ) ) {
@ -90,21 +91,21 @@ if(!isset($_POST['pass']) || $_POST['pass']!==ADMINPASS){
if ( ! $stmt->fetch( PDO::FETCH_ASSOC ) ) { //not yet there, add it
$stmt = $db->prepare( 'INSERT INTO ' . PREFIX . 'onions (address, description, md5sum, category, timeadded, locked, approved, timechanged) VALUES (?, ?, ?, ?, ?, 1, 1, ?);' );
$stmt->execute( [ $addr, $desc, $md5, $category, time(), time() ] );
$msg .= "<p class=\"green\" role=\"alert\">$I[succadd]</p>";
$msg .= "<p class=\"green\" role=\"alert\">"._('Successfully added onion address!')."</p>";
} elseif ( $desc != '' ) { //update description+category
$stmt = $db->prepare( 'UPDATE ' . PREFIX . 'onions SET description=?, category=?, locked=1, approved=1, timechanged=? WHERE md5sum=?;' );
$stmt->execute( [ $desc, $category, time(), $md5 ] );
$msg .= "<p class=\"green\" role=\"alert\">$I[succupddesc]</p>";
$msg .= "<p class=\"green\" role=\"alert\">"._('Successfully updated description!')."</p>";
} elseif ( $category != 0 ) { //only update category
$stmt = $db->prepare( 'UPDATE ' . PREFIX . 'onions SET category=?, locked=1, approved=1, timechanged=? WHERE md5sum=?;' );
$stmt->execute( [ $category, time(), $md5 ] );
$msg .= "<p class=\"green\" role=\"alert\">$I[succupdcat]!</p>";
$msg .= "<p class=\"green\" role=\"alert\">"._('Successfully updated category!')."</p>";
} else { //no description or category change and already known
$msg .= "<p class=\"green\" role=\"alert\">$I[alreadyknown]</p>";
$msg .= "<p class=\"green\" role=\"alert\">"._('Thanks, but I already knew this address!')."</p>";
}
} elseif ( $_POST[ 'action' ] === $I[ 'phishing' ] ) {//mark as phishing clone
} elseif ( $_POST[ 'action' ] === _('Phishing') ) {//mark as phishing clone
if ( $_POST[ 'original' ] !== '' && ! preg_match( '~(^(https?://)?([a-z2-7]{55}d)(\.onion(/.*)?)?$)~i', $_POST[ 'original' ], $orig ) ) {
$msg .= "<p class=\"red\" role=\"alert\">$I[invalonion]</p>";
$msg .= "<p class=\"red\" role=\"alert\">"._('Invalid onion address!')."</p>";
} else {
if ( isset( $orig[ 3 ] ) ) {
$orig = strtolower( $orig[ 3 ] );
@ -116,30 +117,30 @@ if(!isset($_POST['pass']) || $_POST['pass']!==ADMINPASS){
$stmt->execute( [ $addr, $orig ] );
$stmt = $db->prepare( 'UPDATE ' . PREFIX . 'onions SET locked=1, approved=1, timechanged=? WHERE address=?;' );
$stmt->execute( [ time(), $addr ] );
$msg .= "<p class=\"green\" role=\"alert\">$I[succaddphish]</p>";
$msg .= "<p class=\"green\" role=\"alert\">"._('Successfully added Phishing clone!')."</p>";
} else {
$msg .= "<p class=\"red\" role=\"alert\">$I[samephish]</p>";
$msg .= "<p class=\"red\" role=\"alert\">"._('Not added Phishing clone! Phishing and original have the same address.')."</p>";
}
}
} elseif ( $_POST[ 'action' ] === $I[ 'unphishing' ] ) { //remove phishing clone status
} elseif ( $_POST[ 'action' ] === _('No phishing') ) { //remove phishing clone status
$stmt = $db->prepare( 'DELETE FROM ' . PREFIX . 'phishing WHERE onion_id=(SELECT id FROM ' . PREFIX . 'onions WHERE address=?);' );
$stmt->execute( [ $addr ] );
$stmt = $db->prepare( 'UPDATE ' . PREFIX . 'onions SET locked=1, approved=1, timechanged=? WHERE address=?;' );
$stmt->execute( [ time(), $addr ] );
$msg .= "<p class=\"green\" role=\"alert\">$I[succrmphish]</p>";
} elseif ( $_POST[ 'action' ] === $I[ 'reject' ] ) { //lock editing
$msg .= "<p class=\"green\" role=\"alert\">"._('Successfully removed Phishing clone!')."</p>";
} elseif ( $_POST[ 'action' ] === _('Reject') ) { //lock editing
$db->prepare( 'UPDATE ' . PREFIX . 'onions SET approved=-1, timechanged=? WHERE md5sum=?;' )->execute( [ time(), $md5 ] );
$msg .= "<p class=\"green\" role=\"alert\">$I[succreject]</p>";
} elseif ( $_POST[ 'action' ] === $I[ 'approve' ] ) { //lock editing
$msg .= "<p class=\"green\" role=\"alert\">"._('Successfully rejected onion address')."</p>";
} elseif ( $_POST[ 'action' ] === _('Approve') ) { //lock editing
$db->prepare( 'UPDATE ' . PREFIX . 'onions SET approved=1, timechanged=? WHERE md5sum=?;' )->execute( [ time(), $md5 ] );
$msg .= "<p class=\"green\" role=\"alert\">$I[succapprove]</p>";
$msg .= "<p class=\"green\" role=\"alert\">"._('Successfully approved onion address')."</p>";
} else { //no specific button was pressed
$msg .= "<p class=\"red\" role=\"alert\">$I[noaction]</p>";
$msg .= "<p class=\"red\" role=\"alert\">"._('No action taken!')."</p>";
}
}
}
}
$view_mode = isset($_POST['view_mode']) ? $_POST['view_mode'] : 'single';
$view_mode = $_POST[ 'view_mode' ] ?? 'single';
if(isset($_POST['switch_view_mode'])){
$view_mode = $view_mode === 'single' ? 'multi' : 'single';
}
@ -147,13 +148,13 @@ if(!isset($_POST['pass']) || $_POST['pass']!==ADMINPASS){
echo "<input type=\"hidden\" name=\"lang\" value=\"$language\">";
echo "<input type=\"hidden\" name=\"pass\" value=\"$_POST[pass]\">";
echo "<input type=\"hidden\" name=\"view_mode\" value=\"$view_mode\">";
echo "<br><input type=\"submit\" name=\"switch_view_mode\" value=\"$I[switchviewmode]\"></form>";
echo "<br><input type=\"submit\" name=\"switch_view_mode\" value=\""._('Switch view mode')."\"></form>";
echo "<form action=\"$_SERVER[SCRIPT_NAME]\" method=\"POST\">";
echo "<input type=\"hidden\" name=\"lang\" value=\"$language\">";
echo "<input type=\"hidden\" name=\"pass\" value=\"$_POST[pass]\">";
echo "<input type=\"hidden\" name=\"view_mode\" value=\"$view_mode\">";
if($view_mode === 'single') {
echo "<p><label>$I[link]: <input name=\"addr\" size=\"30\" value=\"";
echo "<p><label>"._('Onion link:')." <input name=\"addr\" size=\"30\" value=\"";
if ( isset( $_REQUEST[ 'addr' ] ) ) {
echo htmlspecialchars( $_REQUEST[ 'addr' ] );
}
@ -167,17 +168,17 @@ if(!isset($_POST['pass']) || $_POST['pass']!==ADMINPASS){
}
echo '</div>';
}
echo "<p><label>$I[cloneof]: <input type=\"text\" name=\"original\" size=\"30\"";
echo "<p><label>"._('Clone of:')." <input type=\"text\" name=\"original\" size=\"30\"";
if(isset($_REQUEST['original'])){
echo ' value="'.htmlspecialchars($_REQUEST['original']).'"';
}
echo '></label></p>';
echo "<p><label>$I[bitcoins]: <input type=\"text\" name=\"btc\" size=\"30\"";
echo "<p><label>"._('Bitcoins:')." <input type=\"text\" name=\"btc\" size=\"30\"";
if(isset($_REQUEST['btc'])){
echo ' value="'.htmlspecialchars($_REQUEST['btc']).'"';
}
echo '></label></p>';
echo "<p><label for=\"desc\">$I[adddesc]:</label> <br><textarea id=\"desc\" name=\"desc\" rows=\"2\" cols=\"30\">";
echo "<p><label for=\"desc\">"._('Description:')."</label> <br><textarea id=\"desc\" name=\"desc\" rows=\"2\" cols=\"30\">";
if(!empty($_REQUEST['desc'])){
echo htmlspecialchars(trim($_REQUEST['desc']));
}elseif(isset($_REQUEST['addr']) && is_string($_REQUEST['addr'])){
@ -193,7 +194,7 @@ if(!isset($_POST['pass']) || $_POST['pass']!==ADMINPASS){
}
}
echo '</textarea></p>';
echo "<p><label>$I[category]: <select name=\"cat\">";
echo "<p><label>"._('Category:')." <select name=\"cat\">";
foreach($categories as $cat=>$name){
echo "<option value=\"$cat\"";
if($category==$cat || ($cat===0 && $category>=count($categories))){
@ -204,20 +205,20 @@ if(!isset($_POST['pass']) || $_POST['pass']!==ADMINPASS){
echo '</select></label></p>';
echo '<input type="submit" name="action" value="None" hidden>';
echo '<div class="table button_table"><div class="row">';
echo "<div class=\"col\"><input type=\"submit\" name=\"action\" value=\"$I[remove]\"></div>";
echo "<div class=\"col\"><input type=\"submit\" name=\"action\" value=\"$I[lock]\"></div>";
echo "<div class=\"col\"><input type=\"submit\" name=\"action\" value=\"$I[promote]\"></div>";
echo "<div class=\"col\"><input type=\"submit\" name=\"action\" value=\"$I[phishing]\"></div>";
echo "<div class=\"col\"><input type=\"submit\" name=\"action\" value=\""._('Remove')."\"></div>";
echo "<div class=\"col\"><input type=\"submit\" name=\"action\" value=\""._('Lock')."\"></div>";
echo "<div class=\"col\"><input type=\"submit\" name=\"action\" value=\""._('Promote')."\"></div>";
echo "<div class=\"col\"><input type=\"submit\" name=\"action\" value=\""._('Phishing')."\"></div>";
echo '</div><div class="row">';
echo "<div class=\"col\"><input type=\"submit\" name=\"action\" value=\"$I[readd]\"></div>";
echo "<div class=\"col\"><input type=\"submit\" name=\"action\" value=\"$I[unlock]\"></div>";
echo "<div class=\"col\"><input type=\"submit\" name=\"action\" value=\"$I[unpromote]\"></div>";
echo "<div class=\"col\"><input type=\"submit\" name=\"action\" value=\"$I[unphishing]\"></div>";
echo "<div class=\"col\"><input type=\"submit\" name=\"action\" value=\""._('Re-add')."\"></div>";
echo "<div class=\"col\"><input type=\"submit\" name=\"action\" value=\""._('Unlock')."\"></div>";
echo "<div class=\"col\"><input type=\"submit\" name=\"action\" value=\""._('Un-promote')."\"></div>";
echo "<div class=\"col\"><input type=\"submit\" name=\"action\" value=\""._('No phishing')."\"></div>";
echo '</div><div class="row">';
echo "<div class=\"col\"><input type=\"submit\" name=\"action\" value=\"$I[update]\"></div>";
echo "<div class=\"col\"><input type=\"submit\" name=\"action\" value=\""._('Update')."\"></div>";
if(REQUIRE_APPROVAL) {
echo "<div class=\"col\"><input type=\"submit\" name=\"action\" value=\"$I[reject]\"></div class=\"col\">";
echo "<div class=\"col\"><input type=\"submit\" name=\"action\" value=\"$I[approve]\"></div class=\"col\">";
echo "<div class=\"col\"><input type=\"submit\" name=\"action\" value=\""._('Reject')."\"></div class=\"col\">";
echo "<div class=\"col\"><input type=\"submit\" name=\"action\" value=\""._('Approve')."\"></div class=\"col\">";
}
echo '</div></div>';
echo '</form><br>';

View File

@ -2,7 +2,7 @@
/*
* Onion Link List - Main listing script
*
* Copyright (C) 2016-2020 Daniel Winzen <daniel@danwin1210.me>
* Copyright (C) 2016-2020 Daniel Winzen <daniel@danwin1210.de>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@ -39,8 +39,9 @@ if(!isset($_REQUEST['format'])){
send_html();
}
function send_html(){
global $I, $categories, $db, $language;
function send_html(): void
{
global $categories, $db, $language, $dir;
$numrows = 0;
$style = '.row{display:flex;flex-wrap:wrap}.headerrow{font-weight:bold}.col{display:flex;flex:1;padding:3px 3px;flex-direction:column}';
$style .= '.red{color:red}.green{color:green}.up .col:nth-child(0n+3),.up .col:nth-child(0n+4){background-color:#aaff88}.down .col:nth-child(0n+3),.down .col:nth-child(0n+4){background-color:#ff4444}';
@ -51,9 +52,9 @@ function send_html(){
asort($categories);
//sql for special categories
$special=[
$I['all_legitimate']=>"address!='' AND category!=15 AND id NOT IN (SELECT onion_id FROM " . PREFIX . 'phishing) AND timediff<604800',
$I['lastadded']=>"address!='' AND id NOT IN (SELECT onion_id FROM " . PREFIX . 'phishing)',
$I['offline']=>"address!='' AND id NOT IN (SELECT onion_id FROM " . PREFIX . 'phishing) AND timediff>604800'
_('All legitimate')=>"address!='' AND category!=15 AND id NOT IN (SELECT onion_id FROM " . PREFIX . 'phishing) AND timediff<604800',
_('Last added')=>"address!='' AND id NOT IN (SELECT onion_id FROM " . PREFIX . 'phishing)',
_('Offline > 1 week')=>"address!='' AND id NOT IN (SELECT onion_id FROM " . PREFIX . 'phishing) AND timediff>604800'
];
$canonical_query = [];
if(isset($_REQUEST['cat'])) {
@ -62,9 +63,6 @@ function send_html(){
if(isset($_REQUEST['pg'])) {
$canonical_query['pg'] = $_REQUEST['pg'];
}
if(!empty($_REQUEST['lang'])) {
$canonical_query['lang'] = $_REQUEST['lang'];
}
if(!isset($_REQUEST['pg'])){
$_REQUEST['pg']=1;
}else{
@ -89,7 +87,7 @@ function send_html(){
$cat=count($categories);
if($db instanceof PDO) {
foreach ( $special as $name => $query ) {
if ( $name === $I[ 'lastadded' ] ) {
if ( $name === _('Last added') ) {
$category_count[ $cat ] = PER_PAGE;
} else {
$category_count[ $cat ] = $db->query( 'SELECT COUNT(*) FROM ' . PREFIX . "onions WHERE $admin_approval $query;" )->fetch( PDO::FETCH_NUM )[ 0 ];
@ -117,31 +115,31 @@ function send_html(){
http_response_code( 404 );
}
}
echo '<!DOCTYPE html><html lang="'.$language.'"><head>';
echo "<title>$I[title]</title>";
echo '<!DOCTYPE html><html lang="'.$language.'" dir="'.$dir.'"><head>';
echo "<title>"._('Onion link list')."</title>";
echo '<meta http-equiv="Content-Type" content="text/html; charset=utf-8">';
echo '<meta name="author" content="Daniel Winzen">';
echo '<meta name="viewport" content="width=device-width, initial-scale=1">';
echo '<meta name="description" content="Huge link list of Tor hidden service onions. All the darknet links you need in one place.">';
echo '<link rel="canonical" href="' . CANONICAL_URL . $_SERVER['SCRIPT_NAME'] . (empty($canonical_query) ? '' : '?' . http_build_query($canonical_query)) . '">';
echo '<style type="text/css">'.$style.'</style>';
echo '<style>'.$style.'</style>';
echo '<base target="_blank">';
echo '</head><body><main>';
echo "<h1>$I[title]</h1>";
echo "<h1>"._('Onion link list')."</h1>";
if(!isset($db)){
send_error("<b>$I[error]:</b> $I[nodb]");
send_error(_('Error: No database connection!'));
}
echo '<p>I\'m not responsible for any content of websites linked here. 99% of darkweb sites selling anything are scams. Be careful and use your brain. Every week I get 2-5 E-Mails from people that were desperate to make money and fell for scammers, don\'t be one of them!</p>';
//update onions description form
echo "<div class=\"table\" id=\"edit-search\"><div class=\"row\"><div class=\"col\"><form action=\"$_SERVER[SCRIPT_NAME]\" target=\"_self\" method=\"POST\">";
echo "<input type=\"hidden\" name=\"pg\" value=\"$_REQUEST[newpg]\">";
echo "<input type=\"hidden\" name=\"lang\" value=\"$language\">";
echo "<p><label>$I[addonion]: <br><input name=\"addr\" size=\"30\" placeholder=\"http://$_SERVER[HTTP_HOST]\" value=\"";
echo "<p><label>"._('Onion address:')." <br><input name=\"addr\" size=\"30\" placeholder=\"http://$_SERVER[HTTP_HOST]\" value=\"";
if(isset($_REQUEST['addr'])){
echo htmlspecialchars($_REQUEST['addr']);
}
echo '" required></label></p>';
echo "<p><label>$I[adddesc]: <br><textarea name=\"desc\" rows=\"2\" cols=\"30\">";
echo "<p><label>"._('Description:')." <br><textarea name=\"desc\" rows=\"2\" cols=\"30\">";
if(!empty($_REQUEST['desc'])){//use posted description
echo htmlspecialchars(trim($_REQUEST['desc']));
}elseif(!empty($_REQUEST['addr'])){//fetch description from database
@ -156,7 +154,7 @@ function send_html(){
}
}
echo '</textarea></label></p>';
echo "<p><label>$I[category]: <select name=\"cat\">";
echo "<p><label>"._('Category:')." <select name=\"cat\">";
foreach($categories as $cat=>$name){
echo "<option value=\"$cat\"";
if($category==$cat || ($cat===0 && $category>=count($categories))){
@ -166,22 +164,22 @@ function send_html(){
}
echo '</select></label></p>';
send_captcha();
echo "<input type=\"submit\" name=\"action\" value=\"$I[update]\"></form></div>";
echo "<input type=\"submit\" name=\"action\" value=\""._('Update')."\"></form></div>";
//search from
echo "<div class=\"col\"><form action=\"$_SERVER[SCRIPT_NAME]\" target=\"_self\" method=\"post\">";
echo "<input type=\"hidden\" name=\"pg\" value=\"$_REQUEST[newpg]\">";
echo "<input type=\"hidden\" name=\"lang\" value=\"$language\">";
echo "<p><label>$I[search]: <br><input name=\"q\" size=\"30\" placeholder=\"$I[searchterm]\" value=\"";
echo "<p><label>"._('Search:')." <br><input name=\"q\" size=\"30\" placeholder=\""._('Search term')."\" value=\"";
if(isset($_REQUEST['q'])){
echo trim(str_replace(['http://', 'https://', '.onion', '/'], '', htmlspecialchars($_REQUEST['q'])));
}
echo '"></label></p>';
echo "<p><label>$I[category]: <select name=\"cat\">";
echo "<p><label>"._('Category:')." <select name=\"cat\">";
echo '<option value="'.count($categories).'"';
if($category>=count($categories)){
echo ' selected';
}
echo ">$I[all]</option>";
echo ">"._('All')."</option>";
foreach($categories as $cat=>$name){
echo "<option value=\"$cat\"";
if($category==$cat){
@ -194,13 +192,13 @@ function send_html(){
if(isset($_REQUEST['hidelocked'])){
echo ' checked';
}
echo ">$I[hidelocked]</label></p>";
echo "<input type=\"submit\" name=\"action\" value=\"$I[search]\"></form></div>";
echo ">"._('Hide locked')."</label></p>";
echo "<input type=\"submit\" name=\"action\" value=\""._('Search')."\"></form></div>";
echo '</div></div>';
echo "<ul class=\"list\"><li>$I[format]:</li><li><a href=\"?format=text\" target=\"_self\">Text</a></li><li><a href=\"?format=json\" target=\"_self\">JSON</a></li></ul>";
echo "<ul class=\"list\"><li>"._('Format:')."</li><li><a href=\"?format=text\" target=\"_self\">Text</a></li><li><a href=\"?format=json\" target=\"_self\">JSON</a></li></ul>";
print_langs();
//List special categories
echo "<ul class=\"list\"><li>$I[specialcat]:</li>";
echo "<ul class=\"list\"><li>"._('Special categories:')."</li>";
$cat=count($categories);
foreach($special as $name=>$query){
if($category==$cat){
@ -211,18 +209,18 @@ function send_html(){
++$cat;
}
if($category==$cat){
echo " <li class=\"active\"><a href=\"?cat=$cat&amp;lang=$language\" target=\"_self\">$I[phishingclones] ($category_count[$cat])</a></li>";
echo " <li class=\"active\"><a href=\"?cat=$cat&amp;lang=$language\" target=\"_self\">"._('Phishing Clones')." ($category_count[$cat])</a></li>";
}else{
echo " <li><a href=\"?cat=$cat&amp;lang=$language\" target=\"_self\">$I[phishingclones] ($category_count[$cat])</a></li>";
echo " <li><a href=\"?cat=$cat&amp;lang=$language\" target=\"_self\">"._('Phishing Clones')." ($category_count[$cat])</a></li>";
}
echo " <li>$I[removed] ($category_count[removed])</li>";
echo " <li>"._('Removed/Child porn')." ($category_count[removed])</li>";
if(REQUIRE_APPROVAL) {
echo " <li>$I[pendingapproval] ($category_count[pending])</li>";
echo " <li>$I[rejected] ($category_count[rejected])</li>";
echo " <li>"._('Pending approval')." ($category_count[pending])</li>";
echo " <li>"._('Rejected')." ($category_count[rejected])</li>";
}
echo '</ul>';
//List normal categories
echo "<ul class=\"list\"><li>$I[categories]:</li>";
echo "<ul class=\"list\"><li>"._('Categories:')."</li>";
foreach($categories as $cat=>$name){
if($category==$cat){
echo " <li class=\"active\"><a href=\"?cat=$cat&amp;pg=$_REQUEST[newpg]&amp;lang=$language\" target=\"_self\">$name ($category_count[$cat])</a></li>";
@ -233,24 +231,24 @@ function send_html(){
echo '</ul>';
if($_SERVER['REQUEST_METHOD']==='POST' && !empty($_REQUEST['addr'])){
if(!preg_match('~(^(https?://)?([a-z0-9]*\.)?([a-z2-7]{55}d)(\.onion(/.*)?)?$)~i', trim($_REQUEST['addr']), $addr)){
echo "<p class=\"red\" role=\"alert\">$I[invalonion]</p>";
echo "<p>$I[valid]: http://tt3j2x4k5ycaa5zt.onion</p>";
echo "<p class=\"red\" role=\"alert\">"._('Invalid onion address!')."</p>";
echo "<p>"._('A valid address looks like this')." http://tt3j2x4k5ycaa5zt.onion</p>";
}else{
if(!isset($_REQUEST['challenge'])){
send_error('Error: Wrong Captcha');
send_error(_('Error: Wrong captcha'));
}
$stmt=$db->prepare('SELECT code FROM ' . PREFIX . 'captcha WHERE id=?;');
$stmt->execute([$_REQUEST['challenge']]);
$stmt->bindColumn(1, $code);
if(!$stmt->fetch(PDO::FETCH_BOUND)){
send_error('Error: Captcha expired');
send_error(_('Error: Captcha expired'));
}
$time=time();
$stmt=$db->prepare('DELETE FROM ' . PREFIX . 'captcha WHERE id=? OR time<?;');
$stmt->execute([$_REQUEST['challenge'], $time-3600]);
if($_REQUEST['captcha']!==$code){
if(strrev($_REQUEST['captcha'])!==$code){
send_error('Error: Wrong captcha');
send_error(_('Error: Wrong captcha'));
}
}
$addr=strtolower($addr[4]);
@ -271,19 +269,19 @@ function send_html(){
if(!$stmt->fetch(PDO::FETCH_BOUND)){//new link, add to database
$stmt=$db->prepare('INSERT INTO ' . PREFIX . 'onions (address, description, md5sum, category, timeadded, timechanged) VALUES (?, ?, ?, ?, ?, ?);');
$stmt->execute([$addr, $desc, $md5, $category, time(), time()]);
echo "<p class=\"green\" role=\"alert\">$I[succadd]</p>";
echo "<p class=\"green\" role=\"alert\">"._('Successfully added onion address!')."</p>";
}elseif($locked==1){//locked, not editable
echo "<p class=\"red\" role=\"alert\">$I[faillocked]</p>";
echo "<p class=\"red\" role=\"alert\">"._('Sorry, editing this onion address has been locked!')."</p>";
}elseif($desc!==''){//update description
$stmt=$db->prepare('UPDATE ' . PREFIX . 'onions SET description=?, category=?, timechanged=? WHERE md5sum=?;');
$stmt->execute([$desc, $category, time(), $md5]);
echo "<p class=\"green\" role=\"alert\">$I[succupddesc]</p>";
echo "<p class=\"green\" role=\"alert\">"._('Successfully updated description!')."</p>";
}elseif($category!=0){//update category only
$stmt=$db->prepare('UPDATE ' . PREFIX . 'onions SET category=?, timechanged=? WHERE md5sum=?;');
$stmt->execute([$category, time(), $md5]);
echo "<p class=\"green\" role=\"alert\">$I[succupdcat]</p>";
echo "<p class=\"green\" role=\"alert\">"._('Successfully updated category!')."</p>";
}else{//nothing changed and already known
echo "<p class=\"green\" role=\"alert\">$I[alreadyknown]</p>";
echo "<p class=\"green\" role=\"alert\">"._('Thanks, but I already knew this address!')."</p>";
}
}
}
@ -309,7 +307,7 @@ function send_html(){
$stmt->execute([$category, $query, $query]);
}
$table=get_table($stmt, $numrows);
printf("<p><b>$I[searchresult]</b></p>", trim(str_replace(['http://', 'https://', '.onion', '/'], '', htmlspecialchars($_REQUEST['q']))), $numrows);
printf("<p><b>"._('Searching for "%1$s", %2$d results found:')."</b></p>", trim(str_replace(['http://', 'https://', '.onion', '/'], '', htmlspecialchars($_REQUEST['q']))), $numrows);
echo $table;
}elseif($category>=count($categories)+count($special)){//show phishing clones
print_phishing_table();
@ -349,14 +347,14 @@ function send_html(){
}
function get_table(PDOStatement $stmt, int &$numrows = 0, bool $promoted = false) : string {
global $I, $db, $language;
global $db, $language;
$time=time();
$admin_approval = '';
if(REQUIRE_APPROVAL){
$admin_approval = PREFIX . 'onions.approved = 1 AND';
}
ob_start();
echo "<div class=\"table\" id=\"maintable\"><div class=\"row headerrow\"><div class=\"col\">$I[link]</div><div class=\"col\">$I[description]</div><div class=\"col\">$I[lasttested]</div><div class=\"col\">$I[lastup]</div><div class=\"col\">$I[timeadded]</div><div class=\"col\">$I[actions]</div></div>";
echo "<div class=\"table\" id=\"maintable\"><div class=\"row headerrow\"><div class=\"col\">"._('Onion link')."</div><div class=\"col\">"._('Description')."</div><div class=\"col\">"._('Last tested')."</div><div class=\"col\">"._('Last seen')."</div><div class=\"col\">"._('Added at')."</div><div class=\"col\">"._('Actions')."</div></div>";
if($promoted){//print promoted links at the top
$time=time();
$promo=$db->prepare('SELECT address, lasttest, lastup, timeadded, description, locked, special FROM ' . PREFIX . "onions WHERE $admin_approval special>? AND address!='' AND id NOT IN (SELECT onion_id FROM " . PREFIX . 'phishing) AND timediff<604800 ORDER BY address;');
@ -368,17 +366,17 @@ function get_table(PDOStatement $stmt, int &$numrows = 0, bool $promoted = false
$class='down';
}
if($link['lastup']==0){
$lastup=$I['never'];
$lastup=_('Never');
}else{
$lastup=date('Y-m-d H:i:s', $link['lastup']);
}
if($link['lasttest']==0){
$lasttest=$I['never'];
$lasttest=_('Never');
}else{
$lasttest=date('Y-m-d H:i:s', $link['lasttest']);
}
$timeadded=date('Y-m-d H:i:s', $link['timeadded']);
echo "<div class=\"$class row promo\"><div class=\"col\"><a href=\"http://$link[address].onion\" rel=\"noopener\">$link[address].onion</a></div><div class=\"col\">$link[description]</div><div class=\"col\">$lasttest</div><div class=\"col\">$lastup</div><div class=\"col\">$timeadded</div><div class=\"col\"><form method=\"post\" action=\"test.php\"><input name=\"addr\" value=\"$link[address]\" type=\"hidden\"><input name=\"lang\" value=\"$language\" type=\"hidden\"><input value=\"$I[test]\" type=\"submit\"></form></div></div>";
echo "<div class=\"$class row promo\"><div class=\"col\"><a href=\"http://$link[address].onion\" rel=\"noopener\">$link[address].onion</a></div><div class=\"col\">$link[description]</div><div class=\"col\">$lasttest</div><div class=\"col\">$lastup</div><div class=\"col\">$timeadded</div><div class=\"col\"><form method=\"post\" action=\"test.php\"><input name=\"addr\" value=\"$link[address]\" type=\"hidden\"><input name=\"lang\" value=\"$language\" type=\"hidden\"><input value=\""._('Test')."\" type=\"submit\"></form></div></div>";
}
}
while($link=$stmt->fetch(PDO::FETCH_ASSOC)){
@ -388,12 +386,12 @@ function get_table(PDOStatement $stmt, int &$numrows = 0, bool $promoted = false
$class='down';
}
if($link['lastup']==0){
$lastup=$I['never'];
$lastup=_('Never');
}else{
$lastup=date('Y-m-d H:i:s', $link['lastup']);
}
if($link['lasttest']==0){
$lasttest=$I['never'];
$lasttest=_('Never');
$class='';
}else{
$lasttest=date('Y-m-d H:i:s', $link['lasttest']);
@ -405,22 +403,23 @@ function get_table(PDOStatement $stmt, int &$numrows = 0, bool $promoted = false
if($link['locked']==1){
$edit='-';
}else{
$edit="<form><input name=\"addr\" value=\"$link[address]\" type=\"hidden\"><input type=\"hidden\" name=\"pg\" value=\"$_REQUEST[newpg]\"><input type=\"hidden\" name=\"lang\" value=\"$language\"><input value=\"$I[edit]\" type=\"submit\"></form>";
$edit="<form><input name=\"addr\" value=\"$link[address]\" type=\"hidden\"><input type=\"hidden\" name=\"pg\" value=\"$_REQUEST[newpg]\"><input type=\"hidden\" name=\"lang\" value=\"$language\"><input value=\""._('Edit')."\" type=\"submit\"></form>";
}
echo "<div class=\"row $class\"><div class=\"col\"><a href=\"http://$link[address].onion\" rel=\"noopener\">$link[address].onion</a></div><div class=\"col\">$link[description]</div><div class=\"col\">$lasttest</div><div class=\"col\">$lastup</div><div class=\"col\">$timeadded</div><div class=\"col\">$edit <form method=\"post\" action=\"test.php\"><input name=\"addr\" value=\"$link[address]\" type=\"hidden\"><input type=\"hidden\" name=\"lang\" value=\"$language\"><input value=\"$I[test]\" type=\"submit\"></form></div></div>";
echo "<div class=\"row $class\"><div class=\"col\"><a href=\"http://$link[address].onion\" rel=\"noopener\">$link[address].onion</a></div><div class=\"col\">$link[description]</div><div class=\"col\">$lasttest</div><div class=\"col\">$lastup</div><div class=\"col\">$timeadded</div><div class=\"col\">$edit <form method=\"post\" action=\"test.php\"><input name=\"addr\" value=\"$link[address]\" type=\"hidden\"><input type=\"hidden\" name=\"lang\" value=\"$language\"><input value=\""._('Test')."\" type=\"submit\"></form></div></div>";
++$numrows;
}
echo '</div>';
return ob_get_clean();
}
function print_phishing_table(){
global $I, $db;
function print_phishing_table(): void
{
global $db;
$admin_approval = '';
if(REQUIRE_APPROVAL){
$admin_approval = 'approved = 1 AND';
}
echo "<div class=\"table\" id=\"maintable\"><div class=\"row headerrow\"><div class=\"col\">$I[link]</div><div class=\"col\">$I[cloneof]</div><div class=\"col\">$I[lastup]</div></div>";
echo "<div class=\"table\" id=\"maintable\"><div class=\"row headerrow\"><div class=\"col\">"._('Onion link')."</div><div class=\"col\">"._('Clone of')."</div><div class=\"col\">"._('Last seen')."</div></div>";
$stmt=$db->query('SELECT address, original, lasttest, lastup FROM ' . PREFIX . 'onions, ' . PREFIX . 'phishing WHERE ' . "$admin_approval " . PREFIX . "onions.id=onion_id AND address!='' AND timediff<604800 ORDER BY address;");
while($link=$stmt->fetch(PDO::FETCH_ASSOC)){
if($link['lastup']===$link['lasttest']){
@ -429,24 +428,25 @@ function print_phishing_table(){
$class='down';
}
if($link['lastup']==0){
$lastup=$I['never'];
$lastup=_('Never');
}else{
$lastup=date('Y-m-d H:i:s', $link['lastup']);
}
if($link['original']!==''){
$orig="<a href=\"http://$link[original].onion\" rel=\"noopener\">$link[original].onion</a>";
}else{
$orig=$I['unknown'];
$orig=_('Unknown');
}
echo "<div class=\"row $class\"><div class=\"col\">$link[address].onion</div><div class=\"col\">$orig</div><div class=\"col\">$lastup</div></div>";
}
echo '</div>';
}
function send_text(){
global $I, $db;
function send_text(): void
{
global $db;
if(!isset($db)){
die("$I[error]: $I[nodb]");
die(_('Error: No database connection!'));
}
header('Content-Type: text/plain; charset=UTF-8');
$admin_approval = '';
@ -459,10 +459,11 @@ function send_text(){
}
}
function send_json(){
global $I, $db, $categories;
function send_json(): void
{
global $db, $categories;
if(!isset($db)){
die("$I[error]: $I[nodb]");
die(_('Error: No database connection!'));
}
header('Content-Type: application/json;');
$admin_approval = '';
@ -482,13 +483,13 @@ function send_json(){
}
function get_pagination(int $category, int $pages) : string {
global $I, $language;
global $language;
ob_start();
echo "<ul class=\"list pagination\"><li>$I[pages]:</li>";
echo "<ul class=\"list pagination\"><li>"._('Pages:')."</li>";
if($_REQUEST['pg']==0){
echo " <li class=\"active\"><a href=\"?cat=$category&amp;pg=0&amp;lang=$language\" target=\"_self\">$I[all]</a></li>";
echo " <li class=\"active\"><a href=\"?cat=$category&amp;pg=0&amp;lang=$language\" target=\"_self\">"._('All')."</a></li>";
}else{
echo " <li><a href=\"?cat=$category&amp;pg=0&amp;lang=$language\" target=\"_self\">$I[all]</a></li>";
echo " <li><a href=\"?cat=$category&amp;pg=0&amp;lang=$language\" target=\"_self\">"._('All')."</a></li>";
}
for($i=1; $i<=$pages; ++$i){
if($_REQUEST['pg']==$i){
@ -501,7 +502,8 @@ function get_pagination(int $category, int $pages) : string {
return ob_get_clean();
}
function send_captcha(){
function send_captcha(): void
{
global $db;
$difficulty=1;
if($difficulty===0 || !extension_loaded('gd')){
@ -548,6 +550,7 @@ function send_captcha(){
echo "<input type=\"hidden\" name=\"challenge\" value=\"$randid\"><input type=\"text\" name=\"captcha\" size=\"15\" autocomplete=\"off\"></label></p>";
}
function send_error(string $msg){
function send_error(string $msg): void
{
die("<p class=\"red\" role=\"alert\">$msg</p></main></body></html>");
}

View File

@ -4,7 +4,7 @@ try{
$db=new PDO('mysql:host=' . DBHOST . ';dbname=' . DBNAME . ';charset=utf8mb4', DBUSER, DBPASS, [PDO::ATTR_ERRMODE=>PDO::ERRMODE_WARNING, PDO::ATTR_PERSISTENT=>PERSISTENT]);
}catch(PDOException $e){
http_response_code(500);
die($I['nodb']);
die(_('No database connection!'));
}
$links = [];
$links []= ['loc' => CANONICAL_URL . '/test.php', 'changefreq' => 'weekly', 'priority' => '0.8'];
@ -15,7 +15,7 @@ $admin_approval = '';
if(REQUIRE_APPROVAL){
$admin_approval = PREFIX . 'onions.approved = 1 AND';
}
foreach ($L as $lang_code => $lang){
foreach (LANGUAGES as $lang_code => $data){
$links []= ['loc' => CANONICAL_URL . "/test.php?lang=$lang_code", 'changefreq' => 'weekly', 'priority' => '0.4'];
$links []= ['loc' => CANONICAL_URL . "/onions.php?lang=$lang_code", 'changefreq' => 'daily', 'priority' => '0.5'];
$stmt=$db->prepare('SELECT COUNT(*) FROM ' . PREFIX . "onions WHERE $admin_approval category=? AND address!='' AND id NOT IN (SELECT onion_id FROM " . PREFIX . 'phishing) AND timediff<604800;');
@ -32,12 +32,12 @@ foreach ($L as $lang_code => $lang){
}
}
$special=[
$I['all']=>"address!='' AND category!=15 AND id NOT IN (SELECT onion_id FROM " . PREFIX . 'phishing) AND timediff<604800',
$I['lastadded']=>"address!='' AND id NOT IN (SELECT onion_id FROM " . PREFIX . 'phishing)',
$I['offline']=>"address!='' AND id NOT IN (SELECT onion_id FROM " . PREFIX . 'phishing) AND timediff>604800'
'all'=>"address!='' AND category!=15 AND id NOT IN (SELECT onion_id FROM " . PREFIX . 'phishing) AND timediff<604800',
'lastadded'=>"address!='' AND id NOT IN (SELECT onion_id FROM " . PREFIX . 'phishing)',
'offline'=>"address!='' AND id NOT IN (SELECT onion_id FROM " . PREFIX . 'phishing) AND timediff>604800'
];
$cat=count($categories);
foreach($special as $name=>$query){
foreach($special as $query){
$links []= ['loc' => CANONICAL_URL . "/onions.php?cat=$cat&lang=$lang_code", 'changefreq' => 'daily', 'priority' => '0.3'];
if($cat===count($categories)+1){
$num[0]=PER_PAGE;

View File

@ -1,33 +1,30 @@
<?php
require_once(__DIR__.'/../common_config.php');
global $language, $dir;
$style = '.red{color:red}.green{color:green}.software-link{text-align:center;font-size:small}.list{padding:0;}.list li{display:inline-block;padding:0.35em}';
send_headers([$style]);
$canonical_query = [];
if(!empty($_REQUEST['lang'])) {
$canonical_query['lang'] = $_REQUEST['lang'];
}
echo '<!DOCTYPE html><html lang="'.$language.'"><head>';
echo "<title>$I[testtitle]</title>";
echo '<!DOCTYPE html><html lang="'.$language.'" dir="'.$dir.'"><head>';
echo "<title>"._('Online-Test')."</title>";
echo '<meta http-equiv="Content-Type" content="text/html; charset=utf-8">';
echo '<meta name="author" content="Daniel Winzen">';
echo '<meta name="viewport" content="width=device-width, initial-scale=1">';
echo '<meta name="description" content="Test whether a Tor hidden service onion is online or offline">';
echo '<link rel="canonical" href="' . CANONICAL_URL . $_SERVER['SCRIPT_NAME'] . (empty($canonical_query) ? '' : '?' . http_build_query($canonical_query)) . '">';
echo '<style type="text/css">'.$style.'</style>';
echo '<link rel="canonical" href="' . CANONICAL_URL . $_SERVER['SCRIPT_NAME'] . '">';
echo '<style>'.$style.'</style>';
echo '</head><body><main>';
echo "<h1>$I[testtitle]</h1>";
echo "<h1>"._('Online-Test')."</h1>";
print_langs();
echo "<p>$I[testdesc]</p>";
echo "<p>"._('Here an onion address can be tested, for whether it is online or not.')."</p>";
echo "<form action=\"$_SERVER[SCRIPT_NAME]\" method=\"POST\">";
echo "<input type=\"hidden\" name=\"lang\" value=\"$language\">";
echo "<p><label for=\"addr\">$I[link]:</label><br><input id=\"addr\" name=\"addr\" size=\"30\" value=\"";
echo "<p><label for=\"addr\">"._('Onion link:')."</label><br><input id=\"addr\" name=\"addr\" size=\"30\" value=\"";
if(isset($_REQUEST['addr'])){
echo htmlspecialchars($_REQUEST['addr']);
}else{
echo "http://$_SERVER[HTTP_HOST]";
}
echo '" required></p>';
echo "<input type=\"submit\" name=\"action\" value=\"$I[test]\"></form><br>";
echo "<input type=\"submit\" name=\"action\" value=\""._('Test')."\"></form><br>";
if(!empty($_REQUEST['addr'])){
if(ob_get_level()>0){
ob_end_flush();
@ -36,15 +33,15 @@ if(!empty($_REQUEST['addr'])){
$db=new PDO('mysql:host=' . DBHOST . ';dbname=' . DBNAME . ';charset=utf8mb4', DBUSER, DBPASS, [PDO::ATTR_ERRMODE=>PDO::ERRMODE_WARNING, PDO::ATTR_PERSISTENT=>PERSISTENT]);
}catch(PDOException $e){
http_response_code(500);
die($I['nodb']);
die(_('No database connection!'));
}
if(!preg_match('~(^(https?://)?([a-z0-9]*\.)?([a-z2-7]{55}d)(\.onion(/.*)?)?$)~i', trim($_REQUEST['addr']), $addr)){
echo "<p class=\"red\" role=\"alert\">$I[invalonion]</p>";
echo "<p class=\"red\" role=\"alert\">"._('Invalid onion address!')."</p>";
}else{
$ch=curl_init();
set_curl_options($ch);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 15);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 60);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_URL, "http://$addr[4].onion/");
curl_setopt($ch, CURLOPT_HTTPHEADER, ["Host: $addr[4].onion", 'User-Agent: Mozilla/5.0 (Windows NT 10.0; rv:68.0) Gecko/20100101 Firefox/68.0', 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 'Accept-Language: en-US,en;q=0.5', 'Accept-Encoding: gzip, deflate', 'Connection: keep-alive', 'Upgrade-Insecure-Requests: 1']);
@ -54,17 +51,17 @@ if(!empty($_REQUEST['addr'])){
$phishing=$db->prepare('SELECT original FROM ' . PREFIX . 'phishing, ' . PREFIX . 'onions WHERE address=? AND onion_id=' . PREFIX . 'onions.id;');
$phishing->execute([$addr]);
if($orig=$phishing->fetch(PDO::FETCH_NUM)){
printf("<p class=\"red\" role=\"alert\">$I[testphishing]</p>", "<a href=\"http://$orig[0].onion\">$orig[0].onion</a>");
printf("<p class=\"red\" role=\"alert\">"._('Warning, this is a known phishing clone. The original site is located at %s.')."</p>", "<a href=\"http://$orig[0].onion\">$orig[0].onion</a>");
}
$scam=$db->prepare('SELECT null FROM ' . PREFIX . 'onions WHERE md5sum=? AND category=15 AND locked=1;');
$scam->execute([$md5]);
if($scam->fetch(PDO::FETCH_NUM)){
echo "<p class=\"red\" role=\"alert\">Warning: This is a known scam!</p>";
echo "<p class=\"red\" role=\"alert\">"._('Warning: This is a known scam!')."</p>";
}
$stmt=$db->prepare('SELECT null FROM ' . PREFIX . 'onions WHERE md5sum=? AND timediff=0 AND lasttest>?;');
$stmt->execute([$md5, time()-60]);
if($stmt->fetch(PDO::FETCH_NUM)){
echo "<p class=\"green\" role=\"alert\">$I[testonline]</p>";
echo "<p class=\"green\" role=\"alert\">"._('Yes, the service is online!')."</p>";
}elseif(($content=curl_exec($ch))!==false){
$header_size = curl_getinfo($ch, CURLINFO_HEADER_SIZE);
$header = substr($content, 0, $header_size);
@ -99,13 +96,13 @@ if(!empty($_REQUEST['addr'])){
}
blacklist_scams($addr, $content);
}
echo "<p class=\"green\" role=\"alert\">$I[testonline]</p>";
echo "<p class=\"green\" role=\"alert\">"._('Yes, the service is online!')."</p>";
}else{
if(isset($db)){
$time=time();
$db->prepare('UPDATE ' . PREFIX . 'onions SET lasttest=?, timediff=lasttest-lastup WHERE md5sum=? AND lasttest<?;')->execute([$time, $md5, $time]);
}
echo "<p class=\"red\" role=\"alert\">$I[testoffline]</p>";
echo "<p class=\"red\" role=\"alert\">"._('No, the service is offline!')."</p>";
}
curl_close($ch);
}