mirror of
https://github.com/kiddin9/openwrt-packages.git
synced 2025-01-07 08:16:41 +08:00
🛸 Sync 2024-09-23 01:07:16
This commit is contained in:
parent
564e9a82ce
commit
d0ac147855
@ -7,7 +7,7 @@ include $(TOPDIR)/rules.mk
|
||||
PKG_MAINTAINER:=Thaolga <https://github.com/Thaolga/luci-app-nekoclash>
|
||||
PKG_NAME:=luci-app-nekoclash
|
||||
PKG_VERSION:=1.3.5
|
||||
PKG_RELEASE:=43
|
||||
PKG_RELEASE:=44
|
||||
|
||||
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)
|
||||
|
||||
|
@ -8,12 +8,20 @@ $allowed_files = [
|
||||
];
|
||||
|
||||
$file = $_GET['file'] ?? '';
|
||||
$max_lines = 100;
|
||||
|
||||
if (array_key_exists($file, $allowed_files)) {
|
||||
$file_path = $allowed_files[$file];
|
||||
|
||||
|
||||
if (file_exists($file_path)) {
|
||||
echo htmlspecialchars(file_get_contents($file_path));
|
||||
$lines = file($file_path, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
|
||||
|
||||
if (count($lines) > $max_lines) {
|
||||
$lines = array_slice($lines, -$max_lines);
|
||||
file_put_contents($file_path, implode(PHP_EOL, $lines));
|
||||
}
|
||||
|
||||
echo htmlspecialchars(implode(PHP_EOL, $lines));
|
||||
} else {
|
||||
http_response_code(404);
|
||||
echo "File not found.";
|
||||
@ -22,4 +30,4 @@ if (array_key_exists($file, $allowed_files)) {
|
||||
http_response_code(403);
|
||||
echo "Forbidden.";
|
||||
}
|
||||
?>
|
||||
?>
|
||||
|
@ -326,8 +326,12 @@ $configDir = '/etc/neko/config';
|
||||
$start_script_template = <<<EOF
|
||||
#!/bin/bash
|
||||
|
||||
exec >> $logFile 2>&1
|
||||
exec 2>> $singBoxLogFile
|
||||
|
||||
if command -v fw4 > /dev/null; then
|
||||
echo "Detected fw4, configuring nftables rules..."
|
||||
echo "FW4 Detected."
|
||||
echo "Starting nftables."
|
||||
|
||||
echo '#!/usr/sbin/nft -f
|
||||
|
||||
@ -394,7 +398,8 @@ table inet singbox {
|
||||
nft -f /etc/nftables.conf
|
||||
|
||||
elif command -v fw3 > /dev/null; then
|
||||
echo "Detected fw3, configuring iptables rules..."
|
||||
echo "FW3 Detected."
|
||||
echo "Starting iptables."
|
||||
|
||||
iptables -t mangle -F
|
||||
iptables -t mangle -X
|
||||
@ -434,7 +439,8 @@ else
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "启动sing-box,使用配置文件:%s"
|
||||
echo "Configs : %s"
|
||||
exec >> $singBoxLogFile 2>&1
|
||||
/usr/bin/sing-box run -c %s
|
||||
EOF;
|
||||
|
||||
@ -595,8 +601,10 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') {
|
||||
exec("/etc/neko/core/start.sh > $singBoxLogFile 2>&1 &", $output, $returnVar);
|
||||
$version = getSingboxVersion();
|
||||
$pid = getSingboxPID();
|
||||
$currentTimestamp = date('H:i:s');
|
||||
$logMessage = $returnVar === 0
|
||||
? "Sing-box has been started, version: $version" : "Failed to start Sing-box";
|
||||
? "Sing-box started\n[$currentTimestamp] Core Detected : $version"
|
||||
: "Failed to start Sing-box\n[$currentTimestamp]";
|
||||
logToFile($logFile, $logMessage);
|
||||
$singbox_status = $returnVar === 0 ? 1 : 0;
|
||||
} elseif ($_POST['singbox'] === 'disable') {
|
||||
@ -770,23 +778,6 @@ $singboxStartLogContent = readLogFile($singboxStartLogFile);
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class="container container-bg border border-3 rounded-4 col-12 mb-4">
|
||||
<h2 class="text-center p-2" style="margin-top: -15px; margin-bottom: 5px;">语音播报系统</h2>
|
||||
<table class="table table-borderless mb-2" style="margin-bottom: 5px;">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>
|
||||
<div class="row mb-2" style="margin-bottom: 5px;">
|
||||
<div class="col">
|
||||
<input type="text" id="city-input" class="form-control" placeholder="如 Beijing" style="padding: 5px;">
|
||||
</div>
|
||||
<div class="col-auto">
|
||||
<button onclick="saveCity()" class="btn btn-success" style="padding: 5px 10px;">保存城市</button
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh">
|
||||
<head>
|
||||
@ -978,15 +969,13 @@ $singboxStartLogContent = readLogFile($singboxStartLogFile);
|
||||
fetchLogs();
|
||||
setInterval(fetchLogs, 5000);
|
||||
</script>
|
||||
|
||||
<div class="container container-bg border border-3 rounded-4 col-12 mb-4 d-flex justify-content-center" style="height: 60px;">
|
||||
<div class="nav-buttons d-flex justify-content-center align-items-center" style="height: 100%;">
|
||||
<a href="/nekoclash/mon.php" class="config-menu-button d-flex justify-content-center align-items-center" style="height: 40px; line-height: 40px; margin-top: -28px;" onclick="speakAndNavigate('打开Mihomo 管理面板', '/nekoclash/mon.php'); return false;">
|
||||
打开Mihomo 管理面板
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<a href="/nekoclash/mon.php" class="config-menu-button d-flex justify-content-center align-items-center"
|
||||
style="height: 40px; width: 40px; line-height: 40px; border-radius: 50%; background-color: transparent; border: 5px solid; color: white; position: absolute; top: 20px; left: 20px; text-align: center; text-decoration: none; transition: opacity 0.3s; animation: borderAnimation 3s linear infinite;"
|
||||
onclick="speakAndNavigate('打开Mihomo 管理面板', '/nekoclash/mon.php'); return false;"
|
||||
onmouseover="this.style.opacity='0.8';" onmouseout="this.style.opacity='1';">
|
||||
<i class="fas fa-cog"></i>
|
||||
</a>
|
||||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0-beta3/css/all.min.css">
|
||||
<script>
|
||||
function speakAndNavigate(message, url) {
|
||||
speakMessage(message);
|
||||
|
@ -2,6 +2,7 @@
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0-beta3/css/all.min.css">
|
||||
<style>
|
||||
html, body {
|
||||
margin: 0;
|
||||
@ -174,10 +175,38 @@
|
||||
padding: 0;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.config-menu-button {
|
||||
height: 40px;
|
||||
width: 40px;
|
||||
border-radius: 50%;
|
||||
background-color: transparent;
|
||||
border: 5px solid;
|
||||
color: white;
|
||||
position: absolute;
|
||||
right: 20px;
|
||||
text-align: center;
|
||||
text-decoration: none;
|
||||
transition: opacity 0.3s;
|
||||
animation: borderAnimation 3s linear infinite;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
top: 20px;
|
||||
}
|
||||
|
||||
.button-top-60 {
|
||||
top: 60px;
|
||||
|
||||
}
|
||||
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<nav>
|
||||
<a href="/nekoclash" class="config-menu-button button-top-60">
|
||||
<i class="fas fa-home"></i>
|
||||
</a>
|
||||
<ul>
|
||||
<li><a href="?page=upload" class="<?= (!isset($_GET['page']) || $_GET['page'] == 'upload') ? 'active' : '' ?>">Mihomo</a></li>
|
||||
<li><a href="?page=upload_sb" class="<?= (isset($_GET['page']) && $_GET['page'] == 'upload_sb') ? 'active' : '' ?>">Sing-box</a></li>
|
||||
|
89
luci-app-nekoclash/htdocs/nekoclash/puernya.php
Normal file
89
luci-app-nekoclash/htdocs/nekoclash/puernya.php
Normal file
@ -0,0 +1,89 @@
|
||||
<?php
|
||||
|
||||
ini_set('memory_limit', '128M');
|
||||
|
||||
function logMessage($message) {
|
||||
$logFile = '/var/log/sing-box_update.log';
|
||||
$timestamp = date('Y-m-d H:i:s');
|
||||
file_put_contents($logFile, "[$timestamp] $message\n", FILE_APPEND);
|
||||
}
|
||||
|
||||
function writeVersionToFile($version) {
|
||||
$versionFile = '/etc/neko/core/version.txt';
|
||||
file_put_contents($versionFile, $version);
|
||||
}
|
||||
|
||||
$repo_owner = "Thaolga";
|
||||
$repo_name = "luci-app-nekoclash";
|
||||
$api_url = "https://api.github.com/repos/$repo_owner/$repo_name/releases/latest";
|
||||
|
||||
$curl_command = "curl -s -H 'User-Agent: PHP' --connect-timeout 10 " . escapeshellarg($api_url);
|
||||
$response = shell_exec($curl_command);
|
||||
|
||||
if ($response === false || empty($response)) {
|
||||
logMessage("GitHub API 请求失败,可能是网络问题或 GitHub API 限制。");
|
||||
die("GitHub API 请求失败。请检查网络连接或稍后重试。");
|
||||
}
|
||||
|
||||
$data = json_decode($response, true);
|
||||
|
||||
if (json_last_error() !== JSON_ERROR_NONE) {
|
||||
logMessage("解析 GitHub API 响应时出错: " . json_last_error_msg());
|
||||
die("解析 GitHub API 响应时出错: " . json_last_error_msg());
|
||||
}
|
||||
|
||||
$latest_version = $data['tag_name'] ?? '';
|
||||
$current_version = '';
|
||||
$install_path = '/usr/bin/sing-box';
|
||||
$temp_file = '/tmp/sing-box.tar.gz';
|
||||
$temp_dir = '/tmp/singbox_temp';
|
||||
|
||||
if (file_exists($install_path)) {
|
||||
$current_version = trim(shell_exec("{$install_path} --version"));
|
||||
}
|
||||
|
||||
$current_arch = trim(shell_exec("uname -m"));
|
||||
$download_url = '';
|
||||
|
||||
switch ($current_arch) {
|
||||
case 'aarch64':
|
||||
$download_url = "https://github.com/Thaolga/luci-app-nekoclash/releases/download/sing-box/sing-box-puernya-linux-armv8.tar.gz";
|
||||
break;
|
||||
case 'x86_64':
|
||||
$download_url = "https://github.com/Thaolga/luci-app-nekoclash/releases/download/sing-box/sing-box-puernya-linux-amd64.tar.gz";
|
||||
break;
|
||||
default:
|
||||
die("未找到适合架构的下载链接: $current_arch");
|
||||
}
|
||||
|
||||
if (trim($current_version) === trim($latest_version)) {
|
||||
die("当前版本已是最新版本。");
|
||||
}
|
||||
|
||||
exec("wget -O '$temp_file' '$download_url'", $output, $return_var);
|
||||
if ($return_var !== 0) {
|
||||
die("下载失败!");
|
||||
}
|
||||
|
||||
if (!is_dir($temp_dir)) {
|
||||
mkdir($temp_dir, 0755, true);
|
||||
}
|
||||
|
||||
exec("tar -xzf '$temp_file' -C '$temp_dir'", $output, $return_var);
|
||||
if ($return_var !== 0) {
|
||||
die("解压失败!");
|
||||
}
|
||||
|
||||
$extracted_file = glob("$temp_dir/CrashCore")[0] ?? '';
|
||||
if ($extracted_file && file_exists($extracted_file)) {
|
||||
exec("cp -f '$extracted_file' '$install_path'");
|
||||
exec("chmod 0755 '$install_path'");
|
||||
writeVersionToFile($latest_version);
|
||||
echo "更新完成!当前版本: $latest_version";
|
||||
} else {
|
||||
die("解压后的文件 'CrashCore' 不存在。");
|
||||
}
|
||||
|
||||
unlink($temp_file);
|
||||
exec("rm -r '$temp_dir'");
|
||||
?>
|
@ -1,7 +1,7 @@
|
||||
<?php
|
||||
|
||||
include './cfg.php';
|
||||
|
||||
include './video.php';
|
||||
|
||||
$themeDir = "$neko_www/assets/theme";
|
||||
$tmpPath = "$neko_www/lib/selected_config.txt";
|
||||
@ -58,49 +58,6 @@ $singBoxVersion = getSingboxVersion();
|
||||
<script type="text/javascript" src="./assets/js/neko.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>双击显示图标</title>
|
||||
<style>
|
||||
.container-sm {
|
||||
margin: 20px auto;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="container-sm text-center col-8">
|
||||
<img src="./assets/img/neko.png" class="img-fluid mb-5" style="display: none;">
|
||||
</div>
|
||||
|
||||
<script>
|
||||
function toggleImage() {
|
||||
var img = document.querySelector('.container-sm img');
|
||||
var btn = document.getElementById('showHideButton');
|
||||
if (img.style.display === 'none') {
|
||||
img.style.display = 'block';
|
||||
btn.innerText = '隐藏图标';
|
||||
} else {
|
||||
img.style.display = 'none';
|
||||
btn.innerText = '显示图标';
|
||||
}
|
||||
}
|
||||
|
||||
function hideIcon() {
|
||||
var img = document.querySelector('.container-sm img');
|
||||
var btn = document.getElementById('showHideButton');
|
||||
if (img.style.display === 'block') {
|
||||
img.style.display = 'none';
|
||||
btn.innerText = '显示图标';
|
||||
}
|
||||
}
|
||||
|
||||
document.body.ondblclick = function() {
|
||||
toggleImage();
|
||||
};
|
||||
</script>
|
||||
|
||||
<div class="container-sm container-bg text-center callout border border-3 rounded-4 col-11">
|
||||
<div class="row">
|
||||
<a href="./" class="col btn btn-lg">首页</a>
|
||||
@ -129,7 +86,6 @@ $singBoxVersion = getSingboxVersion();
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<h2 class="text-center p-2 mb-3">软体资讯</h2>
|
||||
<table class="table table-borderless mb-3">
|
||||
<tbody>
|
||||
@ -168,6 +124,7 @@ $singBoxVersion = getSingboxVersion();
|
||||
</div>
|
||||
<div class="text-center mt-2">
|
||||
<button class="btn btn-pink" id="updateSingboxButton">更新 Singbox 内核</button>
|
||||
<button class="btn btn-info" id="updatePuernyaButton">切换 Puernya 内核</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@ -242,7 +199,7 @@ $singBoxVersion = getSingboxVersion();
|
||||
background-color: #90EE90;
|
||||
}
|
||||
|
||||
#updateNekoButton:hover {
|
||||
#updatePuernyaButton:hover {
|
||||
background-color: #87CEFA;
|
||||
}
|
||||
</style>
|
||||
@ -286,6 +243,26 @@ $singBoxVersion = getSingboxVersion();
|
||||
xhr.send();
|
||||
});
|
||||
|
||||
document.getElementById('updatePuernyaButton').addEventListener('click', function() {
|
||||
const xhr = new XMLHttpRequest();
|
||||
xhr.open('POST', 'puernya.php', true);
|
||||
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
|
||||
|
||||
document.getElementById('logOutput').innerHTML = '开始下载核心更新...';
|
||||
|
||||
xhr.onload = function() {
|
||||
if (xhr.status === 200) {
|
||||
document.getElementById('logOutput').innerHTML += '\n核心更新完成!';
|
||||
document.getElementById('logOutput').innerHTML += '\n' + xhr.responseText;
|
||||
} else {
|
||||
document.getElementById('logOutput').innerHTML += '\n发生错误:' + xhr.statusText;
|
||||
}
|
||||
};
|
||||
|
||||
xhr.send();
|
||||
});
|
||||
|
||||
|
||||
document.getElementById('updateCoreButton').addEventListener('click', function() {
|
||||
const xhr = new XMLHttpRequest();
|
||||
xhr.open('POST', 'core.php', true);
|
||||
@ -305,6 +282,24 @@ $singBoxVersion = getSingboxVersion();
|
||||
xhr.send();
|
||||
});
|
||||
</script>
|
||||
<div class="feature-box text-center">
|
||||
<h2>语音播报系统</h2>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>
|
||||
<div class="row mb-2" style="margin-bottom: 5px;">
|
||||
<div class="col">
|
||||
<input type="text" id="city-input" class="form-control" placeholder="如 Beijing" style="padding: 5px;">
|
||||
</div>
|
||||
<div class="col-auto">
|
||||
<button onclick="saveCity()" class="btn btn-success" style="padding: 5px 10px;">保存城市</button
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh">
|
||||
<head>
|
||||
|
@ -176,7 +176,7 @@ function formatSize($size) {
|
||||
<?php
|
||||
$subscriptionPath = '/etc/neko/proxy_provider/';
|
||||
$subscriptionFile = $subscriptionPath . 'subscriptions.json';
|
||||
$clashFile = $subscriptionPath . 'clash_config.yaml';
|
||||
$clashFile = $subscriptionPath . 'subscription_6.yaml';
|
||||
|
||||
$message = "";
|
||||
$decodedContent = "";
|
||||
|
@ -169,7 +169,6 @@ return view.extend({
|
||||
|
||||
o = s.taboption('advance',form.Value, 'advertiseRoutes', _('Expose Subnets'), _('Expose physical network routes into Tailscale, e.g. <code>10.0.0.0/24</code>.'));
|
||||
o.default = '';
|
||||
o.depends('acceptRoutes', '1');
|
||||
o.rmempty = true;
|
||||
|
||||
o = s.taboption('advance',form.Flag, 's2s', _('Site To Site'), _('Use site-to-site layer 3 networking to connect subnets on the Tailscale network.'));
|
||||
|
@ -13,11 +13,11 @@ msgstr ""
|
||||
msgid "Accept subnet routes that other nodes advertise."
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:176
|
||||
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:175
|
||||
msgid "Access Control"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:186
|
||||
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:185
|
||||
msgid "Additional Flags"
|
||||
msgstr ""
|
||||
|
||||
@ -29,7 +29,7 @@ msgstr ""
|
||||
msgid "Are you sure you want to logout and unbind the current device?"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:196
|
||||
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:195
|
||||
msgid "Auth Key"
|
||||
msgstr ""
|
||||
|
||||
@ -37,7 +37,7 @@ msgstr ""
|
||||
msgid "Auto Mesh"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:186
|
||||
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:185
|
||||
msgid "Available flags"
|
||||
msgstr ""
|
||||
|
||||
@ -50,7 +50,7 @@ msgstr ""
|
||||
msgid "Collecting data ..."
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:189
|
||||
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:188
|
||||
msgid "Custom Server Settings"
|
||||
msgstr ""
|
||||
|
||||
@ -74,7 +74,7 @@ msgstr ""
|
||||
msgid "Expose physical network routes into Tailscale, e.g. <code>10.0.0.0/24</code>."
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:184
|
||||
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:183
|
||||
msgid "Extra Settings"
|
||||
msgstr ""
|
||||
|
||||
@ -106,7 +106,7 @@ msgstr ""
|
||||
msgid "Interface Name"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:179
|
||||
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:178
|
||||
msgid "LAN access Tailscale"
|
||||
msgstr ""
|
||||
|
||||
@ -114,7 +114,7 @@ msgstr ""
|
||||
msgid "Leave blank to use the device's hostname."
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:186
|
||||
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:185
|
||||
msgid "List of extra flags. Format: --flags=value, e.g. <code>--exit-node=10.0.0.1</code>. <br> %s for enabling settings upon the initiation of Tailscale."
|
||||
msgstr ""
|
||||
|
||||
@ -175,7 +175,7 @@ msgstr ""
|
||||
msgid "RUNNING"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:192
|
||||
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:191
|
||||
msgid "Server Address"
|
||||
msgstr ""
|
||||
|
||||
@ -203,11 +203,11 @@ msgstr ""
|
||||
msgid "Tailscale"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:177
|
||||
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:176
|
||||
msgid "Tailscale access LAN"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:178
|
||||
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:177
|
||||
msgid "Tailscale access WAN"
|
||||
msgstr ""
|
||||
|
||||
@ -240,15 +240,15 @@ msgstr ""
|
||||
msgid "Unable to get interface info: %s."
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:190
|
||||
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:189
|
||||
msgid "Use %s to deploy a private server."
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:171
|
||||
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:170
|
||||
msgid "Use site-to-site layer 3 networking to connect subnets on the Tailscale network."
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:180
|
||||
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:179
|
||||
msgid "WAN access Tailscale"
|
||||
msgstr ""
|
||||
|
||||
|
@ -19,11 +19,11 @@ msgstr "使用 Tailscale 管理控制台的 DNS 配置。"
|
||||
msgid "Accept subnet routes that other nodes advertise."
|
||||
msgstr "接受其他节点广播的子网路由。"
|
||||
|
||||
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:176
|
||||
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:175
|
||||
msgid "Access Control"
|
||||
msgstr "访问控制"
|
||||
|
||||
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:186
|
||||
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:185
|
||||
msgid "Additional Flags"
|
||||
msgstr "参数列表"
|
||||
|
||||
@ -35,7 +35,7 @@ msgstr "高级选项"
|
||||
msgid "Are you sure you want to logout and unbind the current device?"
|
||||
msgstr "是否注销当前登录并且解绑当前设备?"
|
||||
|
||||
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:196
|
||||
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:195
|
||||
msgid "Auth Key"
|
||||
msgstr "认证密钥"
|
||||
|
||||
@ -43,7 +43,7 @@ msgstr "认证密钥"
|
||||
msgid "Auto Mesh"
|
||||
msgstr "自动组网"
|
||||
|
||||
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:186
|
||||
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:185
|
||||
msgid "Available flags"
|
||||
msgstr "可用参数"
|
||||
|
||||
@ -56,7 +56,7 @@ msgstr "基础选项"
|
||||
msgid "Collecting data ..."
|
||||
msgstr "正在收集数据..."
|
||||
|
||||
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:189
|
||||
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:188
|
||||
msgid "Custom Server Settings"
|
||||
msgstr "自定义服务器"
|
||||
|
||||
@ -80,7 +80,7 @@ msgstr "公开网段"
|
||||
msgid "Expose physical network routes into Tailscale, e.g. <code>10.0.0.0/24</code>."
|
||||
msgstr "广播子网路由至 Tailscale,例如:<code>10.0.0.0/24</code>。"
|
||||
|
||||
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:184
|
||||
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:183
|
||||
msgid "Extra Settings"
|
||||
msgstr "附加选项"
|
||||
|
||||
@ -112,7 +112,7 @@ msgstr "接口信息"
|
||||
msgid "Interface Name"
|
||||
msgstr "接口名称"
|
||||
|
||||
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:179
|
||||
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:178
|
||||
msgid "LAN access Tailscale"
|
||||
msgstr "本地局域网访问虚拟局域网"
|
||||
|
||||
@ -120,7 +120,7 @@ msgstr "本地局域网访问虚拟局域网"
|
||||
msgid "Leave blank to use the device's hostname."
|
||||
msgstr "留空以使用设备的主机名。"
|
||||
|
||||
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:186
|
||||
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:185
|
||||
msgid "List of extra flags. Format: --flags=value, e.g. <code>--exit-node=10.0.0.1</code>. <br> %s for enabling settings upon the initiation of Tailscale."
|
||||
msgstr "额外参数的列表。格式:--flags=value,例如 <code>--exit-node=10.0.0.1</code>。<br> 在 Tailscale 启动时的%s。"
|
||||
|
||||
@ -181,7 +181,7 @@ msgstr "端口"
|
||||
msgid "RUNNING"
|
||||
msgstr "运行中"
|
||||
|
||||
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:192
|
||||
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:191
|
||||
msgid "Server Address"
|
||||
msgstr "服务器地址"
|
||||
|
||||
@ -209,11 +209,11 @@ msgstr "运行日志"
|
||||
msgid "Tailscale"
|
||||
msgstr "Tailscale"
|
||||
|
||||
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:177
|
||||
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:176
|
||||
msgid "Tailscale access LAN"
|
||||
msgstr "虚拟局域网访问本地局域网"
|
||||
|
||||
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:178
|
||||
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:177
|
||||
msgid "Tailscale access WAN"
|
||||
msgstr "虚拟局域网访问本地广域网"
|
||||
|
||||
@ -246,15 +246,15 @@ msgstr "无法获取接口 %s 的信息:%s。"
|
||||
msgid "Unable to get interface info: %s."
|
||||
msgstr "无法获取接口信息:%s。"
|
||||
|
||||
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:190
|
||||
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:189
|
||||
msgid "Use %s to deploy a private server."
|
||||
msgstr "使用 %s 部署私有服务器"
|
||||
|
||||
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:171
|
||||
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:170
|
||||
msgid "Use site-to-site layer 3 networking to connect subnets on the Tailscale network."
|
||||
msgstr "使用站点到站点的三层网络连接 Tailscale 中的子网。"
|
||||
|
||||
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:180
|
||||
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:179
|
||||
msgid "WAN access Tailscale"
|
||||
msgstr "本地广域网访问虚拟局域网"
|
||||
|
||||
|
@ -19,11 +19,11 @@ msgstr "使用 Tailscale 管理控制台的 DNS 設定。"
|
||||
msgid "Accept subnet routes that other nodes advertise."
|
||||
msgstr "接受其他節點廣播的子網路由。"
|
||||
|
||||
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:176
|
||||
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:175
|
||||
msgid "Access Control"
|
||||
msgstr "訪問控制"
|
||||
|
||||
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:186
|
||||
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:185
|
||||
msgid "Additional Flags"
|
||||
msgstr "參數列表"
|
||||
|
||||
@ -35,7 +35,7 @@ msgstr "高級選項"
|
||||
msgid "Are you sure you want to logout and unbind the current device?"
|
||||
msgstr "是否註銷當前登錄並且解綁當前設備?"
|
||||
|
||||
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:196
|
||||
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:195
|
||||
msgid "Auth Key"
|
||||
msgstr "認證密鑰"
|
||||
|
||||
@ -43,7 +43,7 @@ msgstr "認證密鑰"
|
||||
msgid "Auto Mesh"
|
||||
msgstr "自動組網"
|
||||
|
||||
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:186
|
||||
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:185
|
||||
msgid "Available flags"
|
||||
msgstr "可用參數"
|
||||
|
||||
@ -56,7 +56,7 @@ msgstr "基礎選項"
|
||||
msgid "Collecting data ..."
|
||||
msgstr "正在收集數據..."
|
||||
|
||||
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:189
|
||||
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:188
|
||||
msgid "Custom Server Settings"
|
||||
msgstr "自定義伺服器"
|
||||
|
||||
@ -80,7 +80,7 @@ msgstr "公開網段"
|
||||
msgid "Expose physical network routes into Tailscale, e.g. <code>10.0.0.0/24</code>."
|
||||
msgstr "廣播子網路由至 Tailscale,例如:<code>10.0.0.0/24</code>。"
|
||||
|
||||
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:184
|
||||
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:183
|
||||
msgid "Extra Settings"
|
||||
msgstr "附加選項"
|
||||
|
||||
@ -112,7 +112,7 @@ msgstr "接口信息"
|
||||
msgid "Interface Name"
|
||||
msgstr "接口名稱"
|
||||
|
||||
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:179
|
||||
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:178
|
||||
msgid "LAN access Tailscale"
|
||||
msgstr "本地局域網訪問虛擬局域網"
|
||||
|
||||
@ -120,7 +120,7 @@ msgstr "本地局域網訪問虛擬局域網"
|
||||
msgid "Leave blank to use the device's hostname."
|
||||
msgstr "留空以使用設備的主機名。"
|
||||
|
||||
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:186
|
||||
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:185
|
||||
msgid "List of extra flags. Format: --flags=value, e.g. <code>--exit-node=10.0.0.1</code>. <br> %s for enabling settings upon the initiation of Tailscale."
|
||||
msgstr "額外參數的列表。格式:--flags=value,例如 <code>--exit-node=10.0.0.1</code>。<br> 在 Tailscale 啟動時的%s。"
|
||||
|
||||
@ -181,7 +181,7 @@ msgstr "端口"
|
||||
msgid "RUNNING"
|
||||
msgstr "運行中"
|
||||
|
||||
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:192
|
||||
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:191
|
||||
msgid "Server Address"
|
||||
msgstr "伺服器地址"
|
||||
|
||||
@ -209,11 +209,11 @@ msgstr "運行日誌"
|
||||
msgid "Tailscale"
|
||||
msgstr "Tailscale"
|
||||
|
||||
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:177
|
||||
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:176
|
||||
msgid "Tailscale access LAN"
|
||||
msgstr "虛擬局域網訪問本地局域網"
|
||||
|
||||
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:178
|
||||
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:177
|
||||
msgid "Tailscale access WAN"
|
||||
msgstr "虛擬局域網訪問本地廣域網"
|
||||
|
||||
@ -246,15 +246,15 @@ msgstr "無法獲取接口 %s 的信息:%s。"
|
||||
msgid "Unable to get interface info: %s."
|
||||
msgstr "無法獲取接口信息:%s。"
|
||||
|
||||
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:190
|
||||
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:189
|
||||
msgid "Use %s to deploy a private server."
|
||||
msgstr "使用 %s 部署私有伺服器"
|
||||
|
||||
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:171
|
||||
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:170
|
||||
msgid "Use site-to-site layer 3 networking to connect subnets on the Tailscale network."
|
||||
msgstr "使用站點到站點的三層網路連線 Tailscale 中的子網。"
|
||||
|
||||
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:180
|
||||
#: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:179
|
||||
msgid "WAN access Tailscale"
|
||||
msgstr "本地廣域網訪問虛擬局域網"
|
||||
|
||||
|
@ -6,8 +6,8 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=shadowsocks-rust
|
||||
PKG_VERSION:=1.20.4
|
||||
PKG_RELEASE:=76
|
||||
PKG_VERSION:=1.21.0
|
||||
PKG_RELEASE:=77
|
||||
|
||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
|
||||
PKG_SOURCE_URL:=https://codeload.github.com/shadowsocks/shadowsocks-rust/tar.gz/v$(PKG_VERSION)?
|
||||
|
Loading…
Reference in New Issue
Block a user