mirror of
https://github.com/kiddin9/op-packages.git
synced 2026-10-26 21:12:51 +08:00
🤞 Sync 2026-06-25 00:16:31
This commit is contained in:
1 parent
251e9e9dd1
commit
bbcd3f17c5
14 files changed
+502
-273
No files matched your search
@@ -6,7 +6,7 @@ include $(TOPDIR)/rules.mk
|
|||||||
|
|
||||||
PKG_NAME:=luci-app-daede
|
PKG_NAME:=luci-app-daede
|
||||||
PKG_VERSION:=1.14.7
|
PKG_VERSION:=1.14.7
|
||||||
PKG_RELEASE:=22
|
PKG_RELEASE:=23
|
||||||
PKG_MAINTAINER:=kenzok8
|
PKG_MAINTAINER:=kenzok8
|
||||||
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)
|
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)
|
||||||
|
|
||||||
|
|||||||
@@ -452,7 +452,13 @@ return view.extend({
|
|||||||
uci.set('daede', 'config', 'geo_auto_freq', freqSel.value);
|
uci.set('daede', 'config', 'geo_auto_freq', freqSel.value);
|
||||||
const orig = saveBtn.textContent;
|
const orig = saveBtn.textContent;
|
||||||
saveBtn.disabled = true; saveBtn.textContent = '...';
|
saveBtn.disabled = true; saveBtn.textContent = '...';
|
||||||
uci.save().then(function() { return uci.apply(); }).then(function() {
|
uci.save().then(function() {
|
||||||
|
return uci.changes();
|
||||||
|
}).then(function(changes) {
|
||||||
|
// apply only when changed; empty changeset fails apply (#16)
|
||||||
|
if (changes && Object.keys(changes).length)
|
||||||
|
return uci.apply();
|
||||||
|
}).then(function() {
|
||||||
return fs.exec('/usr/share/luci-app-daede/geo-cron.sh', [autoCb.checked ? 'enable' : 'disable']);
|
return fs.exec('/usr/share/luci-app-daede/geo-cron.sh', [autoCb.checked ? 'enable' : 'disable']);
|
||||||
}).then(function() {
|
}).then(function() {
|
||||||
logPane.textContent = _('Geo data source saved.');
|
logPane.textContent = _('Geo data source saved.');
|
||||||
|
|||||||
@@ -10,8 +10,8 @@ LUCI_TITLE:=Simple OTA Update for OpenWrt
|
|||||||
#LUCI_DEPENDS:= +luci-app-firewall
|
#LUCI_DEPENDS:= +luci-app-firewall
|
||||||
|
|
||||||
PKG_LICENSE:=Apache-2.0
|
PKG_LICENSE:=Apache-2.0
|
||||||
PKG_VERSION:=0.0.2
|
PKG_VERSION:=0.0.3
|
||||||
PKG_RELEASE:=2
|
PKG_RELEASE:=3
|
||||||
|
|
||||||
include $(TOPDIR)/feeds/luci/luci.mk
|
include $(TOPDIR)/feeds/luci/luci.mk
|
||||||
|
|
||||||
|
|||||||
@@ -9,32 +9,48 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
return view.extend({
|
return view.extend({
|
||||||
load: function() {
|
// Format raw firmware filename → "OpenWrt 24.10.7 202606-rev01"
|
||||||
return Promise.resolve();
|
fmtVer: function(raw) {
|
||||||
|
if (!raw) return '';
|
||||||
|
// From openwrt-24.10.7-4g-lte-202606-rev01
|
||||||
|
var m = raw.match(/^openwrt-([\d.]+)-.*-(\d{6}-rev\d+)$/);
|
||||||
|
if (m) return 'OpenWrt ' + m[1] + ' ' + m[2];
|
||||||
|
return raw;
|
||||||
},
|
},
|
||||||
|
|
||||||
checkInitialState: function() {
|
load: function() {
|
||||||
|
return fs.read('/usr/lib/os-release')
|
||||||
|
.then(function(content) {
|
||||||
|
// OPENWRT_RELEASE="OpenWrt 24.10.7~4g-lte-202606-rev01"
|
||||||
|
var m = (content || '').match(/OPENWRT_RELEASE="(OpenWrt\s+[\d.]+)~.*-(\d{6}-rev\d+)"/);
|
||||||
|
if (m) return m[1].trim() + ' ' + m[2].trim();
|
||||||
|
return '';
|
||||||
|
})
|
||||||
|
.catch(function() { return ''; });
|
||||||
|
},
|
||||||
|
|
||||||
|
checkInitialState: function(currentVer) {
|
||||||
var self = this;
|
var self = this;
|
||||||
this.verifyCheckResult().then(function(success) {
|
// Show current version immediately from fw_rev
|
||||||
|
self.updateVersionBlock(currentVer, '—', false);
|
||||||
|
|
||||||
|
// Restore available version if previous check result still on disk
|
||||||
|
self.verifyCheckResult(currentVer).then(function(success) {
|
||||||
if (success) {
|
if (success) {
|
||||||
self.checkButton.disabled = true;
|
|
||||||
self.showUpdateAvailable();
|
|
||||||
self.upgradeButton.disabled = false;
|
self.upgradeButton.disabled = false;
|
||||||
}
|
}
|
||||||
}).catch(function() {});
|
}).catch(function() {});
|
||||||
},
|
},
|
||||||
|
|
||||||
showUpdateAvailable: function() {
|
updateVersionBlock: function(current, upgrade, hasUpdate) {
|
||||||
var self = this;
|
this.verCurrentVal.textContent = current || '—';
|
||||||
self.statusDiv.innerHTML = '';
|
this.verAvailVal.textContent = upgrade || '—';
|
||||||
self.statusDiv.appendChild(E('div', { 'class': 'alert-message success' }, [
|
|
||||||
E('h3', {}, _('Update Available')),
|
// Changelog link visible only when update is available
|
||||||
E('button', {
|
this.verChangelogLink.style.display = hasUpdate ? '' : 'none';
|
||||||
'class': 'btn cbi-button cbi-button-neutral',
|
|
||||||
'style': 'margin-top: 6px;',
|
// Colour: important (green) = update found, warning (yellow) = no update / unknown
|
||||||
'click': function() { self.showChangelog(); }
|
this.versionBlock.className = 'alert-message ' + (hasUpdate ? 'success' : 'warning');
|
||||||
}, _('Show Changelog'))
|
|
||||||
]));
|
|
||||||
},
|
},
|
||||||
|
|
||||||
showChangelog: function() {
|
showChangelog: function() {
|
||||||
@@ -52,7 +68,7 @@ return view.extend({
|
|||||||
]);
|
]);
|
||||||
},
|
},
|
||||||
|
|
||||||
render: function() {
|
render: function(data) {
|
||||||
var self = this;
|
var self = this;
|
||||||
|
|
||||||
this.checkButton = E('button', {
|
this.checkButton = E('button', {
|
||||||
@@ -66,7 +82,29 @@ return view.extend({
|
|||||||
'click': ui.createHandlerFn(this, 'handleUpgrade')
|
'click': ui.createHandlerFn(this, 'handleUpgrade')
|
||||||
}, _('Upgrade'));
|
}, _('Upgrade'));
|
||||||
|
|
||||||
this.statusDiv = E('div', { 'class': 'cbi-section' });
|
// Version info rows — always visible, updated after check
|
||||||
|
this.verCurrentVal = E('span', {}, '—');
|
||||||
|
this.verAvailVal = E('span', {}, '—');
|
||||||
|
this.verChangelogLink = E('button', {
|
||||||
|
'class': 'btn cbi-button cbi-button-neutral',
|
||||||
|
'style': 'display: none; margin-left: 10px;',
|
||||||
|
'click': function() { self.showChangelog(); }
|
||||||
|
}, _('Show Changelog'));
|
||||||
|
|
||||||
|
this.versionBlock = E('div', { 'class': 'alert-message', 'style': 'margin-top: 1.5em;' }, [
|
||||||
|
E('table', { 'style': 'border: none; background: none;' }, [
|
||||||
|
E('tr', {}, [
|
||||||
|
E('td', { 'style': 'padding: 2px 10px 2px 0; font-weight: bold; white-space: nowrap;' },
|
||||||
|
_('Current version:')),
|
||||||
|
E('td', {}, this.verCurrentVal)
|
||||||
|
]),
|
||||||
|
E('tr', {}, [
|
||||||
|
E('td', { 'style': 'padding: 2px 10px 2px 0; font-weight: bold; white-space: nowrap;' },
|
||||||
|
_('Available version:')),
|
||||||
|
E('td', {}, [ this.verAvailVal, this.verChangelogLink ])
|
||||||
|
])
|
||||||
|
])
|
||||||
|
]);
|
||||||
|
|
||||||
var container = E('div', { 'class': 'cbi-map' }, [
|
var container = E('div', { 'class': 'cbi-map' }, [
|
||||||
E('h2', {}, _('OTA System Update')),
|
E('h2', {}, _('OTA System Update')),
|
||||||
@@ -75,10 +113,10 @@ return view.extend({
|
|||||||
' ',
|
' ',
|
||||||
this.upgradeButton
|
this.upgradeButton
|
||||||
]),
|
]),
|
||||||
this.statusDiv
|
this.versionBlock
|
||||||
]);
|
]);
|
||||||
|
|
||||||
this.checkInitialState();
|
this.checkInitialState(data);
|
||||||
|
|
||||||
return container;
|
return container;
|
||||||
},
|
},
|
||||||
@@ -87,33 +125,23 @@ return view.extend({
|
|||||||
var self = this;
|
var self = this;
|
||||||
|
|
||||||
this.checkButton.disabled = true;
|
this.checkButton.disabled = true;
|
||||||
this.statusDiv.innerHTML = '';
|
this.upgradeButton.disabled = true;
|
||||||
this.statusDiv.appendChild(E('div', { 'class': 'spinner' }, _('Checking for updates...')));
|
|
||||||
|
|
||||||
return fs.exec('/usr/share/ota.sh', ['check'])
|
return fs.exec('/usr/share/ota.sh', ['check'])
|
||||||
.then(function() {
|
.then(function() {
|
||||||
return self.verifyCheckResult();
|
return self.verifyCheckResult(self.verCurrentVal.textContent);
|
||||||
})
|
})
|
||||||
.then(function(success) {
|
.then(function(success) {
|
||||||
if (success) {
|
self.upgradeButton.disabled = !success;
|
||||||
self.upgradeButton.disabled = false;
|
|
||||||
self.showUpdateAvailable();
|
|
||||||
} else {
|
|
||||||
self.statusDiv.innerHTML = '';
|
|
||||||
self.statusDiv.appendChild(E('div', { 'class': 'alert-message warning' },
|
|
||||||
_('No updates available or check failed')));
|
|
||||||
}
|
|
||||||
self.checkButton.disabled = false;
|
self.checkButton.disabled = false;
|
||||||
})
|
})
|
||||||
.catch(function(err) {
|
.catch(function(err) {
|
||||||
self.statusDiv.innerHTML = '';
|
self.updateVersionBlock('', _('Check failed: ') + (err.message || err), false);
|
||||||
self.statusDiv.appendChild(E('div', { 'class': 'alert-message error' },
|
|
||||||
_('Check failed: ') + (err.message || err)));
|
|
||||||
self.checkButton.disabled = false;
|
self.checkButton.disabled = false;
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
verifyCheckResult: function() {
|
verifyCheckResult: function(currentVer) {
|
||||||
var self = this;
|
var self = this;
|
||||||
|
|
||||||
return Promise.all([
|
return Promise.all([
|
||||||
@@ -124,11 +152,33 @@ return view.extend({
|
|||||||
self.changelog = content;
|
self.changelog = content;
|
||||||
return content && content.length > 0;
|
return content && content.length > 0;
|
||||||
})
|
})
|
||||||
.catch(function() { return false; })
|
.catch(function() { return false; }),
|
||||||
|
fs.read('/tmp/ota_version')
|
||||||
|
.then(function(content) { return content || ''; })
|
||||||
|
.catch(function() { return ''; })
|
||||||
]).then(function(results) {
|
]).then(function(results) {
|
||||||
return results[0] !== null &&
|
var hasProfiles = results[0] !== null;
|
||||||
results[1] !== null &&
|
var hasLock = results[1] !== null;
|
||||||
results[2] === true;
|
var hasChangelog = results[2];
|
||||||
|
var verContent = results[3];
|
||||||
|
|
||||||
|
// both current= and upgrade= are full firmware names written by ota.sh
|
||||||
|
var current = '', upgrade = '';
|
||||||
|
verContent.split('\n').forEach(function(line) {
|
||||||
|
var m;
|
||||||
|
if ((m = line.match(/^current=(.+)/))) current = self.fmtVer(m[1].trim());
|
||||||
|
if ((m = line.match(/^upgrade=(.+)/))) upgrade = self.fmtVer(m[1].trim());
|
||||||
|
});
|
||||||
|
// fallback: if ota_version missing, use value from load() (already formatted)
|
||||||
|
if (!current) current = currentVer || '';
|
||||||
|
|
||||||
|
if (hasProfiles && hasLock && hasChangelog) {
|
||||||
|
self.updateVersionBlock(current, upgrade, true);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
self.updateVersionBlock(current, _('No updates available'), false);
|
||||||
|
return false;
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -142,53 +192,46 @@ return view.extend({
|
|||||||
this.upgradeButton.disabled = true;
|
this.upgradeButton.disabled = true;
|
||||||
this.checkButton.disabled = true;
|
this.checkButton.disabled = true;
|
||||||
|
|
||||||
// Remove stale progress file before starting
|
|
||||||
fs.remove('/tmp/ota_progress').catch(function() {});
|
|
||||||
|
|
||||||
self.openUpgradeModal();
|
self.openUpgradeModal();
|
||||||
|
|
||||||
return fs.exec('/usr/share/ota.sh', ['upgrade'])
|
// ota-launch.sh starts ota.sh in background and exits immediately
|
||||||
|
return fs.exec('/usr/share/ota-launch.sh', [])
|
||||||
.then(function() {
|
.then(function() {
|
||||||
self.stopProgressPolling();
|
// launcher exited — polling is running, wait for 'done' or 'error'
|
||||||
self.setModalProgress(100, _('Upgrade started. Device will reboot...'), 'done');
|
|
||||||
self.finalizeUpgradeModal(false);
|
|
||||||
})
|
})
|
||||||
.catch(function(err) {
|
.catch(function(err) {
|
||||||
var msg = err.message || err.toString();
|
var msg = err.message || err.toString();
|
||||||
self.stopProgressPolling();
|
// XHR timeout is expected — launcher or sysupgrade still running,
|
||||||
|
// polling continues and will finalize via 'flashing'/'error' state
|
||||||
// XHR timeout = sysupgrade already running, treat as success
|
if (msg.indexOf('timed out') !== -1 || msg.indexOf('XHR') !== -1) {
|
||||||
if (msg.indexOf('timed out') !== -1) {
|
return;
|
||||||
self.setModalProgress(100, _('Upgrade started. Device will reboot...'), 'done');
|
|
||||||
self.finalizeUpgradeModal(false);
|
|
||||||
} else {
|
|
||||||
self.setModalProgress(0, _('Error: ') + msg, 'error');
|
|
||||||
self.finalizeUpgradeModal(true);
|
|
||||||
}
|
}
|
||||||
|
// Genuine exec failure
|
||||||
|
self.stopProgressPolling();
|
||||||
|
self.setModalProgress(0, _('Launch failed: ') + msg, 'error');
|
||||||
|
self.finalizeUpgradeModal(true);
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
openUpgradeModal: function() {
|
openUpgradeModal: function() {
|
||||||
var self = this;
|
var self = this;
|
||||||
|
|
||||||
// Progress bar element
|
|
||||||
self.modalProgressInner = E('div', { 'style': 'width: 0%; transition: width 0.4s ease;' });
|
self.modalProgressInner = E('div', { 'style': 'width: 0%; transition: width 0.4s ease;' });
|
||||||
self.modalProgressBar = E('div', { 'class': 'cbi-progressbar', 'style': 'margin: 10px 0;' },
|
self.modalProgressBar = E('div', {
|
||||||
self.modalProgressInner);
|
'class': 'cbi-progressbar',
|
||||||
|
'style': 'margin: 10px 0;'
|
||||||
|
}, self.modalProgressInner);
|
||||||
|
|
||||||
// Status label
|
|
||||||
self.modalStatus = E('div', {
|
self.modalStatus = E('div', {
|
||||||
'style': 'font-size: 0.9em; color: #666; margin-bottom: 8px;'
|
'style': 'font-size: 0.9em; color: #666; margin-bottom: 8px;'
|
||||||
}, _('Starting upgrade...'));
|
}, _('Starting upgrade...'));
|
||||||
|
|
||||||
// Log area
|
|
||||||
self.modalLog = E('pre', {
|
self.modalLog = E('pre', {
|
||||||
'style': 'white-space: pre-wrap; max-height: 200px; overflow-y: auto; ' +
|
'style': 'white-space: pre-wrap; max-height: 200px; overflow-y: auto; ' +
|
||||||
'background: #f5f5f5; padding: 8px; border-radius: 3px; ' +
|
'background: #f5f5f5; padding: 8px; border-radius: 3px; ' +
|
||||||
'color: black; font-size: 0.85em; margin-top: 10px;'
|
'color: black; font-size: 0.85em; margin-top: 10px;'
|
||||||
}, '');
|
}, '');
|
||||||
|
|
||||||
// Close button (disabled until done)
|
|
||||||
self.modalCloseBtn = E('button', {
|
self.modalCloseBtn = E('button', {
|
||||||
'class': 'btn cbi-button',
|
'class': 'btn cbi-button',
|
||||||
'disabled': true,
|
'disabled': true,
|
||||||
@@ -209,7 +252,6 @@ return view.extend({
|
|||||||
])
|
])
|
||||||
]);
|
]);
|
||||||
|
|
||||||
// Start polling /tmp/ota_progress
|
|
||||||
self.startProgressPolling();
|
self.startProgressPolling();
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -227,7 +269,6 @@ return view.extend({
|
|||||||
|
|
||||||
if (line.indexOf('downloading') === 0) {
|
if (line.indexOf('downloading') === 0) {
|
||||||
var pct = parseInt(line.split(' ')[1], 10) || 0;
|
var pct = parseInt(line.split(' ')[1], 10) || 0;
|
||||||
// downloading maps to 0..70% of bar
|
|
||||||
var barPct = Math.round(pct * 0.70);
|
var barPct = Math.round(pct * 0.70);
|
||||||
self.setModalProgress(barPct,
|
self.setModalProgress(barPct,
|
||||||
_('Downloading firmware: ') + pct + '%', 'progress');
|
_('Downloading firmware: ') + pct + '%', 'progress');
|
||||||
@@ -242,18 +283,37 @@ return view.extend({
|
|||||||
self.appendModalLog(_('Testing firmware image...'));
|
self.appendModalLog(_('Testing firmware image...'));
|
||||||
|
|
||||||
} else if (line === 'flashing') {
|
} else if (line === 'flashing') {
|
||||||
|
self.stopProgressPolling();
|
||||||
self.setModalProgress(95, _('Flashing! DO NOT POWER OFF!'), 'progress');
|
self.setModalProgress(95, _('Flashing! DO NOT POWER OFF!'), 'progress');
|
||||||
self.appendModalLog(_('Flashing firmware...'));
|
self.appendModalLog(_('Flashing firmware...'));
|
||||||
|
// Simulate reboot wait with countdown
|
||||||
|
var countdown = 90;
|
||||||
|
self.setModalProgress(98, _('Device will be rebooted, please wait... ') + countdown + 's', 'progress');
|
||||||
|
var rebootTimer = setInterval(function() {
|
||||||
|
countdown--;
|
||||||
|
if (countdown <= 0) {
|
||||||
|
clearInterval(rebootTimer);
|
||||||
|
self.setModalProgress(100, _('Device will be rebooted, please wait... '), 'done');
|
||||||
|
self.finalizeUpgradeModal(false);
|
||||||
|
} else {
|
||||||
|
self.setModalProgress(98, _('Device will be rebooted, please wait... ') + countdown + 's', 'progress');
|
||||||
|
}
|
||||||
|
}, 1000);
|
||||||
|
|
||||||
|
} else if (line === 'done') {
|
||||||
|
self.stopProgressPolling();
|
||||||
|
self.setModalProgress(100, _('Upgrade started. Device will reboot...'), 'done');
|
||||||
|
self.appendModalLog(_('Done. Waiting for reboot...'));
|
||||||
|
self.finalizeUpgradeModal(false);
|
||||||
|
|
||||||
} else if (line.indexOf('error') === 0) {
|
} else if (line.indexOf('error') === 0) {
|
||||||
var reason = line.replace('error', '').trim();
|
var reason = line.replace('error', '').trim();
|
||||||
|
self.stopProgressPolling();
|
||||||
self.setModalProgress(0, _('Error: ') + reason, 'error');
|
self.setModalProgress(0, _('Error: ') + reason, 'error');
|
||||||
self.appendModalLog(_('FAILED: ') + reason);
|
self.appendModalLog(_('FAILED: ') + reason);
|
||||||
self.stopProgressPolling();
|
self.finalizeUpgradeModal(true);
|
||||||
}
|
}
|
||||||
}).catch(function() {
|
}).catch(function() {});
|
||||||
// file not yet created — ignore
|
|
||||||
});
|
|
||||||
}, 1500);
|
}, 1500);
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -269,7 +329,6 @@ return view.extend({
|
|||||||
var pct = Math.min(100, Math.max(0, percent));
|
var pct = Math.min(100, Math.max(0, percent));
|
||||||
this.modalProgressInner.style.width = pct + '%';
|
this.modalProgressInner.style.width = pct + '%';
|
||||||
this.modalStatus.textContent = text;
|
this.modalStatus.textContent = text;
|
||||||
|
|
||||||
if (state === 'error') {
|
if (state === 'error') {
|
||||||
this.modalStatus.style.color = '#c00';
|
this.modalStatus.style.color = '#c00';
|
||||||
} else if (state === 'done') {
|
} else if (state === 'done') {
|
||||||
@@ -282,7 +341,6 @@ return view.extend({
|
|||||||
appendModalLog: function(line) {
|
appendModalLog: function(line) {
|
||||||
if (!this.modalLog) return;
|
if (!this.modalLog) return;
|
||||||
this.modalLog.textContent += line + '\n';
|
this.modalLog.textContent += line + '\n';
|
||||||
// Auto-scroll to bottom
|
|
||||||
this.modalLog.scrollTop = this.modalLog.scrollHeight;
|
this.modalLog.scrollTop = this.modalLog.scrollHeight;
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -291,11 +349,9 @@ return view.extend({
|
|||||||
this.modalCloseBtn.disabled = false;
|
this.modalCloseBtn.disabled = false;
|
||||||
}
|
}
|
||||||
if (!isError) {
|
if (!isError) {
|
||||||
// For successful flash — don't re-enable buttons,
|
this.versionBlock.className = 'alert-message warning';
|
||||||
// device is about to reboot
|
this.verAvailVal.textContent = _('Upgrade started — device will reboot');
|
||||||
this.statusDiv.innerHTML = '';
|
this.verChangelogLink.style.display = 'none';
|
||||||
this.statusDiv.appendChild(E('div', { 'class': 'alert-message warning' },
|
|
||||||
_('Upgrade started! DO NOT POWER OFF THIS DEVICE! System will reboot after upgrade.')));
|
|
||||||
} else {
|
} else {
|
||||||
this.upgradeButton.disabled = false;
|
this.upgradeButton.disabled = false;
|
||||||
this.checkButton.disabled = false;
|
this.checkButton.disabled = false;
|
||||||
|
|||||||
+43
-18
@@ -3,35 +3,60 @@
|
|||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Last-Translator: Konstantine Shevlakov <shevlakov@132lan.ru>\n"
|
"Last-Translator: Konstantine Shevlakov <shevlakov@132lan.ru>\n"
|
||||||
|
|
||||||
msgid "OTA Update"
|
msgid "Changelog"
|
||||||
msgstr "Обновление OTA"
|
msgstr "Изменения"
|
||||||
|
|
||||||
msgid "Update Available"
|
|
||||||
msgstr "Доступно обновление"
|
|
||||||
|
|
||||||
msgid "OTA System Update"
|
|
||||||
msgstr "Обновление через OTA"
|
|
||||||
|
|
||||||
msgid "Check for Updates"
|
msgid "Check for Updates"
|
||||||
msgstr "Проверить"
|
msgstr "Проверить"
|
||||||
|
|
||||||
|
|
||||||
msgid "Upgrade"
|
msgid "Upgrade"
|
||||||
msgstr "Обновить"
|
msgstr "Обновить"
|
||||||
|
|
||||||
msgid "Checking for updates..."
|
msgid "Show Changelog"
|
||||||
msgstr "Проверка обновлений..."
|
msgstr "Посмотреть изменения"
|
||||||
|
|
||||||
msgid "No updates available or check failed"
|
msgid "Current version:"
|
||||||
msgstr "Нет доступных обновлений"
|
msgstr "Текущая версия:"
|
||||||
|
|
||||||
|
msgid "Available version:"
|
||||||
|
msgid "Доступно обновление:"
|
||||||
|
|
||||||
|
msgid "OTA System Update"
|
||||||
|
msgstr "Обновление через OTA"
|
||||||
|
|
||||||
|
msgid "OTA Update"
|
||||||
|
msgstr "Обновление OTA"
|
||||||
|
|
||||||
msgid "Check failed: "
|
msgid "Check failed: "
|
||||||
msgstr "Неудачно: "
|
msgstr "Неудачно: "
|
||||||
|
|
||||||
msgid "Download completed successfully! Start upgrade.<br />DO NOT POWER OFF THIS DEVICE!<br />System will be upgrade completed after reboot!"
|
msgid "No updates available"
|
||||||
msgstr "Загрузка обновления завершена. Запущен процесс обновления.<br />НЕ ВЫКЛЮЧАЙТЕ УСТРОЙСТВО!<br />Система будет обновлена после перезагрузки!"
|
msgstr "Нет доступных обновлений"
|
||||||
|
|
||||||
msgid "Upgrade failed: "
|
msgid "Downloading: "
|
||||||
msgstr "Обновление прервано: "
|
msgstr "Загружается: "
|
||||||
|
|
||||||
msgid "Download completed! Prepare upgrade..."
|
msgid "Verifying SHA256 checksum..."
|
||||||
msgstr "Загрузка выполнена. Подготовка..."
|
msgstr Проверка суммы SHA256..."
|
||||||
|
|
||||||
|
msgid "Verifying SHA256..."
|
||||||
|
msgstr "Проверка SHA256..."
|
||||||
|
|
||||||
|
msgid "Testing firmware image (sysupgrade -T)..."
|
||||||
|
msgstr "Проверка образа прошивки (sysupgrade -T)..."
|
||||||
|
|
||||||
|
msgid "Testing firmware image..."
|
||||||
|
msgstr "Проверка образа прошивки..."
|
||||||
|
|
||||||
|
msgid "Flashing! DO NOT POWER OFF!"
|
||||||
|
msgstr "Прошивка! НЕ ОТКЛЮЧАЙТЕ ПИТАНИЕ УСТРОЙСТВА!"
|
||||||
|
|
||||||
|
msgid "Flashing firmware..."
|
||||||
|
msgstr "Запись прошивки..."
|
||||||
|
|
||||||
|
msgid "Device will be rebooted, please wait... "
|
||||||
|
msgstr "Устройство будет перезагружено, ожидание..."
|
||||||
|
|
||||||
|
msgid "Upgrade started — device will reboot"
|
||||||
|
msgstr "Обновление, устройство будет перезагружено"
|
||||||
Executable
+8
@@ -0,0 +1,8 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
# OTA upgrade background launcher
|
||||||
|
# Called by LuCI to start upgrade asynchronously.
|
||||||
|
# Returns immediately so the RPC call completes and JS polling can work.
|
||||||
|
|
||||||
|
rm -f /tmp/ota_progress
|
||||||
|
setsid /usr/share/ota.sh upgrade > /tmp/ota_upgrade.log 2>&1 &
|
||||||
|
echo $! > /tmp/ota_upgrade.pid
|
||||||
@@ -34,6 +34,7 @@
|
|||||||
. /lib/functions.sh
|
. /lib/functions.sh
|
||||||
|
|
||||||
PROGRESS_FILE=/tmp/ota_progress
|
PROGRESS_FILE=/tmp/ota_progress
|
||||||
|
VERSION_FILE=/tmp/ota_version
|
||||||
|
|
||||||
set_progress() {
|
set_progress() {
|
||||||
echo "$1" > ${PROGRESS_FILE}
|
echo "$1" > ${PROGRESS_FILE}
|
||||||
@@ -142,32 +143,27 @@ for b in $BASE_BOARD; do
|
|||||||
echo "from $URL_BASE"
|
echo "from $URL_BASE"
|
||||||
set_progress "downloading 0"
|
set_progress "downloading 0"
|
||||||
|
|
||||||
# Start wget in background
|
# Download with uclient-fetch, parse % from stderr progress bar
|
||||||
wget ${URL_BASE}/targets/${DISTRIB_TARGET}/$FILE -O /tmp/firmware.bin 2>/dev/null &
|
uclient-fetch -O /tmp/firmware.bin ${URL_BASE}/targets/${DISTRIB_TARGET}/$FILE 2>&1 | while IFS= read -r line; do
|
||||||
WGET_PID=$!
|
pct=$(echo "$line" | grep -o '[0-9]*%' | tr -d '%' | tail -1)
|
||||||
|
[ -n "$pct" ] && set_progress "downloading $pct"
|
||||||
# Poll file size while wget runs
|
|
||||||
while kill -0 $WGET_PID 2>/dev/null; do
|
|
||||||
CURRENT=$(stat -c%s /tmp/firmware.bin 2>/dev/null || echo 0)
|
|
||||||
if [ -n "$FILESIZE" ] && [ "$FILESIZE" -gt 0 ]; then
|
|
||||||
PCT=$(( CURRENT * 100 / FILESIZE ))
|
|
||||||
[ $PCT -gt 99 ] && PCT=99
|
|
||||||
set_progress "downloading $PCT"
|
|
||||||
fi
|
|
||||||
sleep 1
|
|
||||||
done
|
done
|
||||||
|
# Bash, not ash
|
||||||
wait $WGET_PID
|
#DL_RC=${PIPESTATUS[0]:-$?}
|
||||||
DL_RC=$?
|
DL_RC=$?
|
||||||
|
# ash-safe fallback: check file exists and non-empty
|
||||||
|
[ -s /tmp/firmware.bin ] && DL_RC=0
|
||||||
|
|
||||||
|
sleep 2
|
||||||
case $DL_RC in
|
case $DL_RC in
|
||||||
0) echo "Download complete."
|
0) echo "Download complete."
|
||||||
set_progress "downloading 100" ;;
|
set_progress "downloading 100" ;;
|
||||||
*) echo "No updates for this board: $BOARD"
|
*) echo "Download failed for board: $BOARD"
|
||||||
set_progress "error download"
|
set_progress "error download"
|
||||||
remove_files && exit 0 ;;
|
remove_files && exit 1 ;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
|
sleep 2
|
||||||
set_progress "verifying"
|
set_progress "verifying"
|
||||||
SHA256_DL=$(sha256sum /tmp/firmware.bin | awk '{print $1}')
|
SHA256_DL=$(sha256sum /tmp/firmware.bin | awk '{print $1}')
|
||||||
echo -n "Check sha256 sum: "
|
echo -n "Check sha256 sum: "
|
||||||
@@ -176,25 +172,31 @@ for b in $BASE_BOARD; do
|
|||||||
echo "Update process start!"
|
echo "Update process start!"
|
||||||
echo "Device will be rebooted."
|
echo "Device will be rebooted."
|
||||||
echo "DO NOT TURN OFF DEVICE!"
|
echo "DO NOT TURN OFF DEVICE!"
|
||||||
|
sleep 2
|
||||||
set_progress "testing"
|
set_progress "testing"
|
||||||
sysupgrade -T /tmp/firmware.bin
|
sysupgrade -T /tmp/firmware.bin
|
||||||
case $? in
|
case $? in
|
||||||
0) echo "Flashing firmware"
|
0) echo "Flashing firmware" ;;
|
||||||
set_progress "flashing" ;;
|
|
||||||
*) echo "Failed! Abort update"
|
*) echo "Failed! Abort update"
|
||||||
set_progress "error verify"
|
set_progress "error verify"
|
||||||
remove_files && exit 0 ;;
|
remove_files && exit 1 ;;
|
||||||
esac
|
esac
|
||||||
|
sleep 2
|
||||||
|
set_progress "flashing"
|
||||||
rm -rf /tmp/update.lock /tmp/profiles.json /tmp/changelog.txt
|
rm -rf /tmp/update.lock /tmp/profiles.json /tmp/changelog.txt
|
||||||
sleep 25 && sysupgrade /tmp/firmware.bin &
|
# Exit cleanly before sysupgrade takes over
|
||||||
|
sleep 30 && sysupgrade /tmp/firmware.bin &
|
||||||
|
exit 0
|
||||||
else
|
else
|
||||||
echo "Failed! Abort update."
|
echo "Failed! Abort update."
|
||||||
set_progress "error sha256"
|
set_progress "error sha256"
|
||||||
remove_files && rm -rf /tmp/update.lock /tmp/profiles.json
|
remove_files && rm -rf /tmp/update.lock /tmp/profiles.json
|
||||||
|
exit 1
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
check)
|
check)
|
||||||
|
. /usr/lib/os-release
|
||||||
if [ $FW_REV_EXT -gt $FW_VER_LOCAL ]; then
|
if [ $FW_REV_EXT -gt $FW_VER_LOCAL ]; then
|
||||||
echo "New firmware upgrade release!"
|
echo "New firmware upgrade release!"
|
||||||
echo -e "*** $FILE ***\n"
|
echo -e "*** $FILE ***\n"
|
||||||
@@ -205,8 +207,16 @@ for b in $BASE_BOARD; do
|
|||||||
echo ""
|
echo ""
|
||||||
echo "Please run script again for download and install update!"
|
echo "Please run script again for download and install update!"
|
||||||
touch /tmp/update.lock
|
touch /tmp/update.lock
|
||||||
|
# Write version info for LuCI
|
||||||
|
# Extract prefix (everything before YYYYMM date) from remote filename
|
||||||
|
VER_PREFIX=$(echo $FILE | sed 's/-[0-9]\{6\}-rev[0-9]*-.*//')
|
||||||
|
VER_UPGRADE="${VER_PREFIX}-$(echo $FILE | sed 's/.*-\([0-9]\{6\}-rev[0-9]*\)-.*/\1/')"
|
||||||
|
VER_CURRENT="${VER_PREFIX}-${FW_REV}"
|
||||||
|
printf "current=%s\nupgrade=%s\n" "$VER_CURRENT" "$VER_UPGRADE" > ${VERSION_FILE}
|
||||||
else
|
else
|
||||||
echo "Update not found!"
|
echo "Update not found!"
|
||||||
|
# Write only current version using OPENWRT_RELEASE prefix + local FW_REV
|
||||||
|
printf "current=%s\nupgrade=\n" "${OPENWRT_RELEASE%~*} $FW_REV" > ${VERSION_FILE}
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|||||||
@@ -4,14 +4,20 @@
|
|||||||
"read": {
|
"read": {
|
||||||
"file": {
|
"file": {
|
||||||
"/usr/share/ota.sh": ["exec"],
|
"/usr/share/ota.sh": ["exec"],
|
||||||
|
"/usr/share/ota-launch.sh": ["exec"],
|
||||||
|
"/usr/lib/os-release": ["read"],
|
||||||
|
"/rom/etc/uci-defaults/fw_rev": ["read"],
|
||||||
"/tmp/changelog.txt": ["read"],
|
"/tmp/changelog.txt": ["read"],
|
||||||
"/tmp/profiles.json": ["read"],
|
"/tmp/profiles.json": ["read"],
|
||||||
"/tmp/update.lock": ["read"]
|
"/tmp/update.lock": ["read"],
|
||||||
|
"/tmp/ota_version": ["read"],
|
||||||
|
"/tmp/ota_progress": ["read"]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"write": {
|
"write": {
|
||||||
"file": {
|
"file": {
|
||||||
"/usr/share/ota.sh": ["exec"]
|
"/usr/share/ota.sh": ["exec"],
|
||||||
|
"/usr/share/ota-launch.sh": ["exec"]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ LUCI_TITLE:=luci-app-ssr-plus
|
|||||||
LUCI_PKGARCH:=all
|
LUCI_PKGARCH:=all
|
||||||
PKG_NAME:=luci-app-ssr-plus
|
PKG_NAME:=luci-app-ssr-plus
|
||||||
PKG_VERSION:=195
|
PKG_VERSION:=195
|
||||||
PKG_RELEASE:=30
|
PKG_RELEASE:=31
|
||||||
|
|
||||||
PKG_CONFIG_DEPENDS:= \
|
PKG_CONFIG_DEPENDS:= \
|
||||||
CONFIG_PACKAGE_$(PKG_NAME)_Iptables_Transparent_Proxy \
|
CONFIG_PACKAGE_$(PKG_NAME)_Iptables_Transparent_Proxy \
|
||||||
|
|||||||
@@ -68,6 +68,26 @@ end
|
|||||||
|
|
||||||
table.sort(key_table)
|
table.sort(key_table)
|
||||||
|
|
||||||
|
-- 获取 Xray 版本号
|
||||||
|
if is_finded("xray") then
|
||||||
|
local version = luci.sys.exec("xray version 2>&1")
|
||||||
|
if version and version ~= "" then
|
||||||
|
xray_version = version:match("Xray%s+([%d%.]+)")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
-- 将 Xray 版本号转换为数字
|
||||||
|
if xray_version and xray_version ~= "" then
|
||||||
|
local major, minor, patch =
|
||||||
|
xray_version:match("(%d+)%.?(%d*)%.?(%d*)")
|
||||||
|
|
||||||
|
major = tonumber(major) or 0
|
||||||
|
minor = tonumber(minor) or 0
|
||||||
|
patch = tonumber(patch) or 0
|
||||||
|
|
||||||
|
xray_version_val = major * 10000 + minor * 100 + patch
|
||||||
|
end
|
||||||
|
|
||||||
m = Map("shadowsocksr")
|
m = Map("shadowsocksr")
|
||||||
-- [[ global ]]--
|
-- [[ global ]]--
|
||||||
s = m:section(TypedSection, "global", translate("Server failsafe auto swith and custom update settings"))
|
s = m:section(TypedSection, "global", translate("Server failsafe auto swith and custom update settings"))
|
||||||
@@ -237,15 +257,31 @@ if is_finded("xray") then
|
|||||||
o:value("1-5", "1-5")
|
o:value("1-5", "1-5")
|
||||||
o:depends("fragment", true)
|
o:depends("fragment", true)
|
||||||
|
|
||||||
o = s:option(Value, "fragment_length", translate("Fragment Length"), translate("Fragmented packet length (byte)"))
|
o = s:option(Value, "fragment_length", translate("Fragment Length"))
|
||||||
|
if xray_version_val <= 260601 then
|
||||||
o.datatype = "or(uinteger,portrange)"
|
o.datatype = "or(uinteger,portrange)"
|
||||||
|
end
|
||||||
o.default = "100-200"
|
o.default = "100-200"
|
||||||
o:depends("fragment", true)
|
o:depends("fragment", true)
|
||||||
|
o.description = translate(
|
||||||
|
"<ul>" ..
|
||||||
|
"<li>" .. translate("Fragmented packet length (byte)") .. "</li>" ..
|
||||||
|
"<li>" .. translate("Note: When version is higher than 26.6.1, input multiple fragment lengths saperate with ','.") .. "</li>" ..
|
||||||
|
"</ul>"
|
||||||
|
)
|
||||||
|
|
||||||
o = s:option(Value, "fragment_delay", translate("Fragment Delay"), translate("Fragmentation interval (ms)"))
|
o = s:option(Value, "fragment_delay", translate("Fragment Delay"))
|
||||||
|
if xray_version_val <= 260601 then
|
||||||
o.datatype = "or(uinteger,portrange)"
|
o.datatype = "or(uinteger,portrange)"
|
||||||
|
end
|
||||||
o.default = "10-20"
|
o.default = "10-20"
|
||||||
o:depends("fragment", true)
|
o:depends("fragment", true)
|
||||||
|
o.description = translate(
|
||||||
|
"<ul>" ..
|
||||||
|
"<li>" .. translate("Fragmentation interval (ms)") .. "</li>" ..
|
||||||
|
"<li>" .. translate("Note: When version is higher than 26.6.1, input multiple fragment intervals saperate with ','.") .. "</li>" ..
|
||||||
|
"</ul>"
|
||||||
|
)
|
||||||
|
|
||||||
o = s:option(Value, "fragment_maxSplit", translate("Max Split"), translate("Limit the maximum number of splits."))
|
o = s:option(Value, "fragment_maxSplit", translate("Max Split"), translate("Limit the maximum number of splits."))
|
||||||
o.datatype = "or(uinteger,portrange)"
|
o.datatype = "or(uinteger,portrange)"
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
msgid ""
|
msgid ""
|
||||||
msgstr "Content-Type: text/plain; charset=UTF-8"
|
msgstr "Content-Type: text/plain; charset=UTF-8"
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:231
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:251
|
||||||
msgid ""
|
msgid ""
|
||||||
"\"1-3\" is for segmentation at TCP layer, applying to the beginning 1 to 3 "
|
"\"1-3\" is for segmentation at TCP layer, applying to the beginning 1 to 3 "
|
||||||
"data writes by the client. \"tlshello\" is for TLS client hello packet "
|
"data writes by the client. \"tlshello\" is for TLS client hello packet "
|
||||||
@@ -64,7 +64,7 @@ msgstr ""
|
|||||||
msgid "8 Threads"
|
msgid "8 Threads"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:260
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:296
|
||||||
msgid "<font style='color:red'>"
|
msgid "<font style='color:red'>"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -80,6 +80,8 @@ msgid ""
|
|||||||
"etc.</h3>"
|
"etc.</h3>"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:267
|
||||||
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:280
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1267
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1267
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1588
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1588
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1601
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1601
|
||||||
@@ -206,7 +208,7 @@ msgstr ""
|
|||||||
msgid "Anti-pollution DNS Server"
|
msgid "Anti-pollution DNS Server"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:128
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:148
|
||||||
msgid "Apple Domains DNS"
|
msgid "Apple Domains DNS"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -214,11 +216,11 @@ msgstr ""
|
|||||||
msgid "Apple Domains Data"
|
msgid "Apple Domains Data"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:123
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:143
|
||||||
msgid "Apple Domains Update url"
|
msgid "Apple Domains Update url"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:119
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:139
|
||||||
msgid "Apple domains optimization"
|
msgid "Apple domains optimization"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -366,7 +368,7 @@ msgstr ""
|
|||||||
msgid "Check Server Port"
|
msgid "Check Server Port"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:94
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:114
|
||||||
msgid "Check Try Count"
|
msgid "Check Try Count"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -381,7 +383,7 @@ msgid ""
|
|||||||
"release page."
|
"release page."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:89
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:109
|
||||||
msgid "Check timout(second)"
|
msgid "Check timout(second)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -403,15 +405,15 @@ msgstr ""
|
|||||||
msgid "ChinaDNS-NG query protocol"
|
msgid "ChinaDNS-NG query protocol"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:113
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:133
|
||||||
msgid "Chnroute Update url"
|
msgid "Chnroute Update url"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:114
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:134
|
||||||
msgid "Clang.CN"
|
msgid "Clang.CN"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:115
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:135
|
||||||
msgid "Clang.CN.CIDR"
|
msgid "Clang.CN.CIDR"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -454,7 +456,7 @@ msgstr ""
|
|||||||
msgid "Clear logs"
|
msgid "Clear logs"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:264
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:300
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1097
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1097
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1452
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1452
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1479
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1479
|
||||||
@@ -663,7 +665,7 @@ msgstr ""
|
|||||||
msgid "Default"
|
msgid "Default"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:101
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:121
|
||||||
msgid "Default Node Local Port"
|
msgid "Default Node Local Port"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -704,7 +706,7 @@ msgid ""
|
|||||||
"entries before the original Clash rules."
|
"entries before the original Clash rules."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:302
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:338
|
||||||
msgid "Delay (ms)"
|
msgid "Delay (ms)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -766,7 +768,7 @@ msgstr ""
|
|||||||
msgid "DoT upstream (Need use wolfssl version)"
|
msgid "DoT upstream (Need use wolfssl version)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:289
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:325
|
||||||
msgid "Domain Strategy"
|
msgid "Domain Strategy"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -816,9 +818,9 @@ msgstr ""
|
|||||||
msgid "Edit ShadowSocksR Server"
|
msgid "Edit ShadowSocksR Server"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:157
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:177
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:198
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:218
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:278
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:314
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/server-config.lua:54
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/server-config.lua:54
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/server.lua:101
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/server.lua:101
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:581
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:581
|
||||||
@@ -835,7 +837,7 @@ msgstr ""
|
|||||||
msgid "Enable Authentication"
|
msgid "Enable Authentication"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:80
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:100
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1739
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1739
|
||||||
msgid "Enable Auto Switch"
|
msgid "Enable Auto Switch"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -890,7 +892,7 @@ msgstr ""
|
|||||||
msgid "Enable V3 protocol."
|
msgid "Enable V3 protocol."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:134
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:154
|
||||||
msgid "Enable adblock"
|
msgid "Enable adblock"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -906,7 +908,7 @@ msgstr ""
|
|||||||
msgid "Enabled Kernel virtual NIC TUN(optional)"
|
msgid "Enabled Kernel virtual NIC TUN(optional)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:181
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:201
|
||||||
msgid "Enabled Mixed"
|
msgid "Enabled Mixed"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -1048,13 +1050,13 @@ msgstr ""
|
|||||||
msgid "Flow"
|
msgid "Flow"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:119
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:139
|
||||||
msgid ""
|
msgid ""
|
||||||
"For Apple domains equipped with Chinese mainland CDN, always responsive to "
|
"For Apple domains equipped with Chinese mainland CDN, always responsive to "
|
||||||
"Chinese CDN IP addresses"
|
"Chinese CDN IP addresses"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:262
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:298
|
||||||
msgid "For specific usage, see:"
|
msgid "For specific usage, see:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -1064,27 +1066,27 @@ msgid ""
|
|||||||
"(,)."
|
"(,)."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:228
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:248
|
||||||
msgid "Fragment"
|
msgid "Fragment"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:245
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:273
|
||||||
msgid "Fragment Delay"
|
msgid "Fragment Delay"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:240
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:260
|
||||||
msgid "Fragment Length"
|
msgid "Fragment Length"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:231
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:251
|
||||||
msgid "Fragment Packets"
|
msgid "Fragment Packets"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:245
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:281
|
||||||
msgid "Fragmentation interval (ms)"
|
msgid "Fragmentation interval (ms)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:240
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:268
|
||||||
msgid "Fragmented packet length (byte)"
|
msgid "Fragmented packet length (byte)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -1134,7 +1136,7 @@ msgstr ""
|
|||||||
msgid "Global Client"
|
msgid "Global Client"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:194
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:214
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/status.lua:213
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/status.lua:213
|
||||||
msgid "Global HTTP/HTTPS Proxy Server"
|
msgid "Global HTTP/HTTPS Proxy Server"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -1143,7 +1145,7 @@ msgstr ""
|
|||||||
msgid "Global Mode"
|
msgid "Global Mode"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:152
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:172
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/status.lua:204
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/status.lua:204
|
||||||
msgid "Global SOCKS5 Proxy Server"
|
msgid "Global SOCKS5 Proxy Server"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -1195,7 +1197,7 @@ msgstr ""
|
|||||||
msgid "HTTP"
|
msgid "HTTP"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:202
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:222
|
||||||
msgid "HTTP Auth Mode"
|
msgid "HTTP Auth Mode"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -1204,7 +1206,7 @@ msgstr ""
|
|||||||
msgid "HTTP Host"
|
msgid "HTTP Host"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:212
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:232
|
||||||
msgid "HTTP Password"
|
msgid "HTTP Password"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -1213,11 +1215,11 @@ msgstr ""
|
|||||||
msgid "HTTP Path"
|
msgid "HTTP Path"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:208
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:228
|
||||||
msgid "HTTP User"
|
msgid "HTTP User"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:202
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:222
|
||||||
msgid "HTTP proxy auth method, default:none."
|
msgid "HTTP proxy auth method, default:none."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -1280,7 +1282,7 @@ msgstr ""
|
|||||||
msgid "IP Stack Preference"
|
msgid "IP Stack Preference"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:128
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:148
|
||||||
msgid "If empty, Not change Apple domains parsing DNS (Default is empty)"
|
msgid "If empty, Not change Apple domains parsing DNS (Default is empty)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -1479,7 +1481,7 @@ msgstr ""
|
|||||||
msgid "Level 3 Public DNS-3 (4.2.2.3-4)"
|
msgid "Level 3 Public DNS-3 (4.2.2.3-4)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:250
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:286
|
||||||
msgid "Limit the maximum number of splits."
|
msgid "Limit the maximum number of splits."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -1498,8 +1500,8 @@ msgstr ""
|
|||||||
msgid "Loading..."
|
msgid "Loading..."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:187
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:207
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:217
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:237
|
||||||
msgid "Local Port"
|
msgid "Local Port"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -1519,11 +1521,11 @@ msgstr ""
|
|||||||
msgid "Loop Mode"
|
msgid "Loop Mode"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:109
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:129
|
||||||
msgid "Loukky/gfwlist-by-loukky"
|
msgid "Loukky/gfwlist-by-loukky"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:108
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:128
|
||||||
msgid "Loyalsoldier/v2ray-rules-dat"
|
msgid "Loyalsoldier/v2ray-rules-dat"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -1558,7 +1560,7 @@ msgstr ""
|
|||||||
msgid "Max Early Data"
|
msgid "Max Early Data"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:250
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:286
|
||||||
msgid "Max Split"
|
msgid "Max Split"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -1611,7 +1613,7 @@ msgstr ""
|
|||||||
msgid "Missing xz support"
|
msgid "Missing xz support"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:181
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:201
|
||||||
msgid "Mixed as an alias of socks, default:Enabled."
|
msgid "Mixed as an alias of socks, default:Enabled."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -1644,7 +1646,7 @@ msgstr ""
|
|||||||
msgid "Mux"
|
msgid "Mux"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:138
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:158
|
||||||
msgid "NEO DEV HOST"
|
msgid "NEO DEV HOST"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -1730,7 +1732,7 @@ msgid ""
|
|||||||
"the table."
|
"the table."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:255
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:291
|
||||||
msgid "Noise"
|
msgid "Noise"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -1768,6 +1770,18 @@ msgid ""
|
|||||||
"compatibility issues."
|
"compatibility issues."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:282
|
||||||
|
msgid ""
|
||||||
|
"Note: When version is higher than 26.6.1, input multiple fragment intervals "
|
||||||
|
"saperate with ','."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:269
|
||||||
|
msgid ""
|
||||||
|
"Note: When version is higher than 26.6.1, input multiple fragment lengths "
|
||||||
|
"saperate with ','."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1644
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1644
|
||||||
msgid "Number of early established connections to reduce latency."
|
msgid "Number of early established connections to reduce latency."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -1804,19 +1818,19 @@ msgstr ""
|
|||||||
msgid "Only Common Ports"
|
msgid "Only Common Ports"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:208
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:228
|
||||||
msgid "Only when HTTP Auth Mode is password valid, Mandatory."
|
msgid "Only when HTTP Auth Mode is password valid, Mandatory."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:212
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:232
|
||||||
msgid "Only when HTTP Auth Mode is password valid, Not mandatory."
|
msgid "Only when HTTP Auth Mode is password valid, Not mandatory."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:170
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:190
|
||||||
msgid "Only when Socks5 Auth Mode is password valid, Mandatory."
|
msgid "Only when Socks5 Auth Mode is password valid, Mandatory."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:175
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:195
|
||||||
msgid "Only when Socks5 Auth Mode is password valid, Not mandatory."
|
msgid "Only when Socks5 Auth Mode is password valid, Not mandatory."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -1838,11 +1852,11 @@ msgstr ""
|
|||||||
msgid "Package Name"
|
msgid "Package Name"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:261
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:297
|
||||||
msgid "Packet or Rand length as a string, e.g., 10-20."
|
msgid "Packet or Rand length as a string, e.g., 10-20."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:298
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:334
|
||||||
msgid "Packet | Rand Length"
|
msgid "Packet | Rand Length"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -2129,7 +2143,7 @@ msgstr ""
|
|||||||
msgid "Reset saved Mihomo proxy-group selections and restore YAML defaults?"
|
msgid "Reset saved Mihomo proxy-group selections and restore YAML defaults?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:144
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:164
|
||||||
msgid "Reset to defaults"
|
msgid "Reset to defaults"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -2258,7 +2272,7 @@ msgstr ""
|
|||||||
msgid "Server Type"
|
msgid "Server Type"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:73
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:93
|
||||||
msgid "Server failsafe auto swith and custom update settings"
|
msgid "Server failsafe auto swith and custom update settings"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -2368,7 +2382,7 @@ msgstr ""
|
|||||||
msgid "Socks Version"
|
msgid "Socks Version"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:163
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:183
|
||||||
msgid "Socks protocol auth methods, default:noauth."
|
msgid "Socks protocol auth methods, default:noauth."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -2377,15 +2391,15 @@ msgstr ""
|
|||||||
msgid "Socks5"
|
msgid "Socks5"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:163
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:183
|
||||||
msgid "Socks5 Auth Mode"
|
msgid "Socks5 Auth Mode"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:175
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:195
|
||||||
msgid "Socks5 Password"
|
msgid "Socks5 Password"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:170
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:190
|
||||||
msgid "Socks5 User"
|
msgid "Socks5 User"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -2466,7 +2480,7 @@ msgstr ""
|
|||||||
msgid "Successfully retrieved certificate name:"
|
msgid "Successfully retrieved certificate name:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:142
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:162
|
||||||
msgid "Support AdGuardHome and DNSMASQ format list"
|
msgid "Support AdGuardHome and DNSMASQ format list"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -2480,7 +2494,7 @@ msgid ""
|
|||||||
"a maximum length of 3 bytes."
|
"a maximum length of 3 bytes."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:84
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:104
|
||||||
msgid "Switch check cycly(second)"
|
msgid "Switch check cycly(second)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -2509,7 +2523,7 @@ msgstr ""
|
|||||||
msgid "TCP Fast Open"
|
msgid "TCP Fast Open"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:228
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:248
|
||||||
msgid ""
|
msgid ""
|
||||||
"TCP fragments, which can deceive the censorship system in some cases, such "
|
"TCP fragments, which can deceive the censorship system in some cases, such "
|
||||||
"as bypassing SNI blacklists."
|
"as bypassing SNI blacklists."
|
||||||
@@ -2644,7 +2658,7 @@ msgstr ""
|
|||||||
msgid "Timeout for establishing a connection to server(second)"
|
msgid "Timeout for establishing a connection to server(second)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:260
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:296
|
||||||
msgid "To send noise packets, select \"Noise\" in Xray Settings."
|
msgid "To send noise packets, select \"Noise\" in Xray Settings."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -2675,7 +2689,7 @@ msgstr ""
|
|||||||
msgid "Try Count"
|
msgid "Try Count"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:282
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:318
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:695
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:695
|
||||||
msgid "Type"
|
msgid "Type"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -2684,7 +2698,7 @@ msgstr ""
|
|||||||
msgid "UDP"
|
msgid "UDP"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:255
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:291
|
||||||
msgid ""
|
msgid ""
|
||||||
"UDP noise, Under some circumstances it can bypass some UDP based protocol "
|
"UDP noise, Under some circumstances it can bypass some UDP based protocol "
|
||||||
"restrictions."
|
"restrictions."
|
||||||
@@ -3009,11 +3023,11 @@ msgstr ""
|
|||||||
msgid "Xray"
|
msgid "Xray"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:225
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:245
|
||||||
msgid "Xray Fragment Settings"
|
msgid "Xray Fragment Settings"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:258
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:294
|
||||||
msgid "Xray Noise Packets"
|
msgid "Xray Noise Packets"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -3032,7 +3046,7 @@ msgstr ""
|
|||||||
msgid "YAML Reloaded!"
|
msgid "YAML Reloaded!"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:137
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:157
|
||||||
msgid "adblock_url"
|
msgid "adblock_url"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -3060,7 +3074,7 @@ msgstr ""
|
|||||||
msgid "android"
|
msgid "android"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:139
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:159
|
||||||
msgid "anti-AD"
|
msgid "anti-AD"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -3068,7 +3082,7 @@ msgstr ""
|
|||||||
msgid "chacha20-poly1305"
|
msgid "chacha20-poly1305"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:116
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:136
|
||||||
msgid "china-operator-ip"
|
msgid "china-operator-ip"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -3114,7 +3128,7 @@ msgstr ""
|
|||||||
msgid "edge"
|
msgid "edge"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:124
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:144
|
||||||
msgid "felixonmars/dnsmasq-china-list"
|
msgid "felixonmars/dnsmasq-china-list"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -3135,11 +3149,11 @@ msgstr ""
|
|||||||
msgid "gRPC Service Name"
|
msgid "gRPC Service Name"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:106
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:126
|
||||||
msgid "gfwlist Update url"
|
msgid "gfwlist Update url"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:110
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:130
|
||||||
msgid "gfwlist/gfwlist"
|
msgid "gfwlist/gfwlist"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -3235,7 +3249,7 @@ msgstr ""
|
|||||||
msgid "spiderX"
|
msgid "spiderX"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:107
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:127
|
||||||
msgid "v2fly/domain-list-community"
|
msgid "v2fly/domain-list-community"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
msgid ""
|
msgid ""
|
||||||
msgstr "Content-Type: text/plain; charset=UTF-8\n"
|
msgstr "Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:231
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:251
|
||||||
msgid ""
|
msgid ""
|
||||||
"\"1-3\" is for segmentation at TCP layer, applying to the beginning 1 to 3 "
|
"\"1-3\" is for segmentation at TCP layer, applying to the beginning 1 to 3 "
|
||||||
"data writes by the client. \"tlshello\" is for TLS client hello packet "
|
"data writes by the client. \"tlshello\" is for TLS client hello packet "
|
||||||
@@ -66,7 +66,7 @@ msgstr ""
|
|||||||
msgid "8 Threads"
|
msgid "8 Threads"
|
||||||
msgstr "8 线程"
|
msgstr "8 线程"
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:260
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:296
|
||||||
msgid "<font style='color:red'>"
|
msgid "<font style='color:red'>"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -84,6 +84,8 @@ msgstr ""
|
|||||||
"<h3>支持 SS/SSR/V2RAY/XRAY/TROJAN/TUIC/HYSTERIA2/NAIVEPROXY/SOCKS5/CLASH 等协"
|
"<h3>支持 SS/SSR/V2RAY/XRAY/TROJAN/TUIC/HYSTERIA2/NAIVEPROXY/SOCKS5/CLASH 等协"
|
||||||
"议。</h3>"
|
"议。</h3>"
|
||||||
|
|
||||||
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:267
|
||||||
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:280
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1267
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1267
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1588
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1588
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1601
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1601
|
||||||
@@ -210,7 +212,7 @@ msgstr "JSON 格式的 FinalMaskObject,用来实现分享。"
|
|||||||
msgid "Anti-pollution DNS Server"
|
msgid "Anti-pollution DNS Server"
|
||||||
msgstr "访问国外域名 DNS 服务器"
|
msgstr "访问国外域名 DNS 服务器"
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:128
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:148
|
||||||
msgid "Apple Domains DNS"
|
msgid "Apple Domains DNS"
|
||||||
msgstr "Apple 域名 DNS"
|
msgstr "Apple 域名 DNS"
|
||||||
|
|
||||||
@@ -218,11 +220,11 @@ msgstr "Apple 域名 DNS"
|
|||||||
msgid "Apple Domains Data"
|
msgid "Apple Domains Data"
|
||||||
msgstr "【Apple 域名】数据库"
|
msgstr "【Apple 域名】数据库"
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:123
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:143
|
||||||
msgid "Apple Domains Update url"
|
msgid "Apple Domains Update url"
|
||||||
msgstr "Apple 域名更新 URL"
|
msgstr "Apple 域名更新 URL"
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:119
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:139
|
||||||
msgid "Apple domains optimization"
|
msgid "Apple domains optimization"
|
||||||
msgstr "Apple 域名解析优化"
|
msgstr "Apple 域名解析优化"
|
||||||
|
|
||||||
@@ -370,7 +372,7 @@ msgstr "检查服务器"
|
|||||||
msgid "Check Server Port"
|
msgid "Check Server Port"
|
||||||
msgstr "【服务器端口】检查"
|
msgstr "【服务器端口】检查"
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:94
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:114
|
||||||
msgid "Check Try Count"
|
msgid "Check Try Count"
|
||||||
msgstr "切换检查重试次数"
|
msgstr "切换检查重试次数"
|
||||||
|
|
||||||
@@ -385,7 +387,7 @@ msgid ""
|
|||||||
"release page."
|
"release page."
|
||||||
msgstr "检测已安装组件版本,并从上游发布页在线升级。"
|
msgstr "检测已安装组件版本,并从上游发布页在线升级。"
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:89
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:109
|
||||||
msgid "Check timout(second)"
|
msgid "Check timout(second)"
|
||||||
msgstr "切换检查超时时间(秒)"
|
msgstr "切换检查超时时间(秒)"
|
||||||
|
|
||||||
@@ -407,15 +409,15 @@ msgstr "【中国大陆 IP 段】数据库"
|
|||||||
msgid "ChinaDNS-NG query protocol"
|
msgid "ChinaDNS-NG query protocol"
|
||||||
msgstr "ChinaDNS-NG 查询协议"
|
msgstr "ChinaDNS-NG 查询协议"
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:113
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:133
|
||||||
msgid "Chnroute Update url"
|
msgid "Chnroute Update url"
|
||||||
msgstr "中国大陆 IP 段更新 URL"
|
msgstr "中国大陆 IP 段更新 URL"
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:114
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:134
|
||||||
msgid "Clang.CN"
|
msgid "Clang.CN"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:115
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:135
|
||||||
msgid "Clang.CN.CIDR"
|
msgid "Clang.CN.CIDR"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -458,7 +460,7 @@ msgstr "清空所有自定义客户端代理规则,并恢复为空白状态吗
|
|||||||
msgid "Clear logs"
|
msgid "Clear logs"
|
||||||
msgstr "清空日志"
|
msgstr "清空日志"
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:264
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:300
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1097
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1097
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1452
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1452
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1479
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1479
|
||||||
@@ -668,7 +670,7 @@ msgstr "解密"
|
|||||||
msgid "Default"
|
msgid "Default"
|
||||||
msgstr "默认"
|
msgstr "默认"
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:101
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:121
|
||||||
msgid "Default Node Local Port"
|
msgid "Default Node Local Port"
|
||||||
msgstr "节点默认本地端口"
|
msgstr "节点默认本地端口"
|
||||||
|
|
||||||
@@ -713,7 +715,7 @@ msgstr ""
|
|||||||
"为每个客户端指定 Mihomo 代理目标。规则会以 SRC-IP-CIDR 形式注入到原始 Clash "
|
"为每个客户端指定 Mihomo 代理目标。规则会以 SRC-IP-CIDR 形式注入到原始 Clash "
|
||||||
"规则之前。"
|
"规则之前。"
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:302
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:338
|
||||||
msgid "Delay (ms)"
|
msgid "Delay (ms)"
|
||||||
msgstr "延迟(ms)"
|
msgstr "延迟(ms)"
|
||||||
|
|
||||||
@@ -775,7 +777,7 @@ msgstr "是否要恢复客户端默认配置?"
|
|||||||
msgid "DoT upstream (Need use wolfssl version)"
|
msgid "DoT upstream (Need use wolfssl version)"
|
||||||
msgstr "DoT 上游(需使用 wolfssl 版本)"
|
msgstr "DoT 上游(需使用 wolfssl 版本)"
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:289
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:325
|
||||||
msgid "Domain Strategy"
|
msgid "Domain Strategy"
|
||||||
msgstr "域名解析策略"
|
msgstr "域名解析策略"
|
||||||
|
|
||||||
@@ -825,9 +827,9 @@ msgstr "编辑"
|
|||||||
msgid "Edit ShadowSocksR Server"
|
msgid "Edit ShadowSocksR Server"
|
||||||
msgstr "编辑服务器配置"
|
msgstr "编辑服务器配置"
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:157
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:177
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:198
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:218
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:278
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:314
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/server-config.lua:54
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/server-config.lua:54
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/server.lua:101
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/server.lua:101
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:581
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:581
|
||||||
@@ -844,7 +846,7 @@ msgstr "客户端启用 0-RTT QUIC 连接握手"
|
|||||||
msgid "Enable Authentication"
|
msgid "Enable Authentication"
|
||||||
msgstr "启用用户名/密码认证"
|
msgstr "启用用户名/密码认证"
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:80
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:100
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1739
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1739
|
||||||
msgid "Enable Auto Switch"
|
msgid "Enable Auto Switch"
|
||||||
msgstr "启用自动切换"
|
msgstr "启用自动切换"
|
||||||
@@ -899,7 +901,7 @@ msgstr "开启 V2 协议。"
|
|||||||
msgid "Enable V3 protocol."
|
msgid "Enable V3 protocol."
|
||||||
msgstr "开启 V3 协议。"
|
msgstr "开启 V3 协议。"
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:134
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:154
|
||||||
msgid "Enable adblock"
|
msgid "Enable adblock"
|
||||||
msgstr "启用广告屏蔽"
|
msgstr "启用广告屏蔽"
|
||||||
|
|
||||||
@@ -915,7 +917,7 @@ msgstr "启用此选项配置 XHTTP 附加项(JSON 格式)。"
|
|||||||
msgid "Enabled Kernel virtual NIC TUN(optional)"
|
msgid "Enabled Kernel virtual NIC TUN(optional)"
|
||||||
msgstr "启用内核的虚拟网卡 TUN(可选)"
|
msgstr "启用内核的虚拟网卡 TUN(可选)"
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:181
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:201
|
||||||
msgid "Enabled Mixed"
|
msgid "Enabled Mixed"
|
||||||
msgstr "启用 Mixed"
|
msgstr "启用 Mixed"
|
||||||
|
|
||||||
@@ -1057,13 +1059,13 @@ msgstr "指纹伪造"
|
|||||||
msgid "Flow"
|
msgid "Flow"
|
||||||
msgstr "流控(Flow)"
|
msgstr "流控(Flow)"
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:119
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:139
|
||||||
msgid ""
|
msgid ""
|
||||||
"For Apple domains equipped with Chinese mainland CDN, always responsive to "
|
"For Apple domains equipped with Chinese mainland CDN, always responsive to "
|
||||||
"Chinese CDN IP addresses"
|
"Chinese CDN IP addresses"
|
||||||
msgstr "配备中国大陆 CDN 的 Apple 域名,始终应答中国大陆 CDN 地址"
|
msgstr "配备中国大陆 CDN 的 Apple 域名,始终应答中国大陆 CDN 地址"
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:262
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:298
|
||||||
msgid "For specific usage, see:"
|
msgid "For specific usage, see:"
|
||||||
msgstr "具体使用方法,具体请参见:"
|
msgstr "具体使用方法,具体请参见:"
|
||||||
|
|
||||||
@@ -1073,27 +1075,27 @@ msgid ""
|
|||||||
"(,)."
|
"(,)."
|
||||||
msgstr "格式为:10000:20000 或 10000-20000 多组时用逗号(,)隔开。"
|
msgstr "格式为:10000:20000 或 10000-20000 多组时用逗号(,)隔开。"
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:228
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:248
|
||||||
msgid "Fragment"
|
msgid "Fragment"
|
||||||
msgstr "分片"
|
msgstr "分片"
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:245
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:273
|
||||||
msgid "Fragment Delay"
|
msgid "Fragment Delay"
|
||||||
msgstr "分片延迟"
|
msgstr "分片延迟"
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:240
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:260
|
||||||
msgid "Fragment Length"
|
msgid "Fragment Length"
|
||||||
msgstr "分片包长"
|
msgstr "分片包长"
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:231
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:251
|
||||||
msgid "Fragment Packets"
|
msgid "Fragment Packets"
|
||||||
msgstr "分片方式"
|
msgstr "分片方式"
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:245
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:281
|
||||||
msgid "Fragmentation interval (ms)"
|
msgid "Fragmentation interval (ms)"
|
||||||
msgstr "分片间隔(ms)"
|
msgstr "分片间隔(ms)"
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:240
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:268
|
||||||
msgid "Fragmented packet length (byte)"
|
msgid "Fragmented packet length (byte)"
|
||||||
msgstr "分片包长 (byte)"
|
msgstr "分片包长 (byte)"
|
||||||
|
|
||||||
@@ -1143,7 +1145,7 @@ msgstr "GitHub 直连"
|
|||||||
msgid "Global Client"
|
msgid "Global Client"
|
||||||
msgstr "TCP 透明代理"
|
msgstr "TCP 透明代理"
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:194
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:214
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/status.lua:213
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/status.lua:213
|
||||||
msgid "Global HTTP/HTTPS Proxy Server"
|
msgid "Global HTTP/HTTPS Proxy Server"
|
||||||
msgstr "HTTP/HTTPS 代理服务端(全局)"
|
msgstr "HTTP/HTTPS 代理服务端(全局)"
|
||||||
@@ -1152,7 +1154,7 @@ msgstr "HTTP/HTTPS 代理服务端(全局)"
|
|||||||
msgid "Global Mode"
|
msgid "Global Mode"
|
||||||
msgstr "全局模式"
|
msgstr "全局模式"
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:152
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:172
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/status.lua:204
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/status.lua:204
|
||||||
msgid "Global SOCKS5 Proxy Server"
|
msgid "Global SOCKS5 Proxy Server"
|
||||||
msgstr "SOCKS5 代理服务端(全局)"
|
msgstr "SOCKS5 代理服务端(全局)"
|
||||||
@@ -1204,7 +1206,7 @@ msgstr "H2/gRPC 健康检查"
|
|||||||
msgid "HTTP"
|
msgid "HTTP"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:202
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:222
|
||||||
msgid "HTTP Auth Mode"
|
msgid "HTTP Auth Mode"
|
||||||
msgstr "HTTP 认证模式"
|
msgstr "HTTP 认证模式"
|
||||||
|
|
||||||
@@ -1213,7 +1215,7 @@ msgstr "HTTP 认证模式"
|
|||||||
msgid "HTTP Host"
|
msgid "HTTP Host"
|
||||||
msgstr "HTTP 主机名"
|
msgstr "HTTP 主机名"
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:212
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:232
|
||||||
msgid "HTTP Password"
|
msgid "HTTP Password"
|
||||||
msgstr "HTTP 密码"
|
msgstr "HTTP 密码"
|
||||||
|
|
||||||
@@ -1222,11 +1224,11 @@ msgstr "HTTP 密码"
|
|||||||
msgid "HTTP Path"
|
msgid "HTTP Path"
|
||||||
msgstr "HTTP 路径"
|
msgstr "HTTP 路径"
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:208
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:228
|
||||||
msgid "HTTP User"
|
msgid "HTTP User"
|
||||||
msgstr "HTTP 用户名"
|
msgstr "HTTP 用户名"
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:202
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:222
|
||||||
msgid "HTTP proxy auth method, default:none."
|
msgid "HTTP proxy auth method, default:none."
|
||||||
msgstr "HTTP 代理认证方式,默认:none。"
|
msgstr "HTTP 代理认证方式,默认:none。"
|
||||||
|
|
||||||
@@ -1289,7 +1291,7 @@ msgstr "绕过中国大陆 IP 模式"
|
|||||||
msgid "IP Stack Preference"
|
msgid "IP Stack Preference"
|
||||||
msgstr "IP 栈优先级"
|
msgstr "IP 栈优先级"
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:128
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:148
|
||||||
msgid "If empty, Not change Apple domains parsing DNS (Default is empty)"
|
msgid "If empty, Not change Apple domains parsing DNS (Default is empty)"
|
||||||
msgstr "如果为空,则不更改 Apple 域名解析 DNS(默认为空)"
|
msgstr "如果为空,则不更改 Apple 域名解析 DNS(默认为空)"
|
||||||
|
|
||||||
@@ -1489,7 +1491,7 @@ msgstr ""
|
|||||||
msgid "Level 3 Public DNS-3 (4.2.2.3-4)"
|
msgid "Level 3 Public DNS-3 (4.2.2.3-4)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:250
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:286
|
||||||
msgid "Limit the maximum number of splits."
|
msgid "Limit the maximum number of splits."
|
||||||
msgstr "限制分片的最大数量。"
|
msgstr "限制分片的最大数量。"
|
||||||
|
|
||||||
@@ -1508,8 +1510,8 @@ msgstr "仅监听指定的接口,未指定则监听全部。"
|
|||||||
msgid "Loading..."
|
msgid "Loading..."
|
||||||
msgstr "加载中..."
|
msgstr "加载中..."
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:187
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:207
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:217
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:237
|
||||||
msgid "Local Port"
|
msgid "Local Port"
|
||||||
msgstr "本地端口"
|
msgstr "本地端口"
|
||||||
|
|
||||||
@@ -1529,11 +1531,11 @@ msgstr "日志"
|
|||||||
msgid "Loop Mode"
|
msgid "Loop Mode"
|
||||||
msgstr "循环模式"
|
msgstr "循环模式"
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:109
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:129
|
||||||
msgid "Loukky/gfwlist-by-loukky"
|
msgid "Loukky/gfwlist-by-loukky"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:108
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:128
|
||||||
msgid "Loyalsoldier/v2ray-rules-dat"
|
msgid "Loyalsoldier/v2ray-rules-dat"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -1570,7 +1572,7 @@ msgstr "未找到匹配的发布资产"
|
|||||||
msgid "Max Early Data"
|
msgid "Max Early Data"
|
||||||
msgstr "最大前置数据"
|
msgstr "最大前置数据"
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:250
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:286
|
||||||
msgid "Max Split"
|
msgid "Max Split"
|
||||||
msgstr "最大分片数"
|
msgstr "最大分片数"
|
||||||
|
|
||||||
@@ -1625,7 +1627,7 @@ msgstr "缺少 unzip 支持"
|
|||||||
msgid "Missing xz support"
|
msgid "Missing xz support"
|
||||||
msgstr "缺少 xz 支持"
|
msgstr "缺少 xz 支持"
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:181
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:201
|
||||||
msgid "Mixed as an alias of socks, default:Enabled."
|
msgid "Mixed as an alias of socks, default:Enabled."
|
||||||
msgstr "Mixed 作为 SOCKS 的别名,默认:启用。"
|
msgstr "Mixed 作为 SOCKS 的别名,默认:启用。"
|
||||||
|
|
||||||
@@ -1658,7 +1660,7 @@ msgstr "必须是 JSON 文本内容!"
|
|||||||
msgid "Mux"
|
msgid "Mux"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:138
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:158
|
||||||
msgid "NEO DEV HOST"
|
msgid "NEO DEV HOST"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -1745,7 +1747,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"节点顺序可用鼠标拖拉后立即生效,服务器节点自动切换顺序和表中节点顺序一致。"
|
"节点顺序可用鼠标拖拉后立即生效,服务器节点自动切换顺序和表中节点顺序一致。"
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:255
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:291
|
||||||
msgid "Noise"
|
msgid "Noise"
|
||||||
msgstr "噪声"
|
msgstr "噪声"
|
||||||
|
|
||||||
@@ -1783,6 +1785,18 @@ msgid ""
|
|||||||
"compatibility issues."
|
"compatibility issues."
|
||||||
msgstr "注意:不同版本间的配置恢复可能会导致兼容性问题。"
|
msgstr "注意:不同版本间的配置恢复可能会导致兼容性问题。"
|
||||||
|
|
||||||
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:282
|
||||||
|
msgid ""
|
||||||
|
"Note: When version is higher than 26.6.1, input multiple fragment intervals "
|
||||||
|
"saperate with ','."
|
||||||
|
msgstr "注意:当版本高于 26.6.1 时,可以输入多个分片间隔,并用英文 ',' 分隔。"
|
||||||
|
|
||||||
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:269
|
||||||
|
msgid ""
|
||||||
|
"Note: When version is higher than 26.6.1, input multiple fragment lengths "
|
||||||
|
"saperate with ','."
|
||||||
|
msgstr "注意:当版本高于 26.6.1 时,可以输入多个分片长度,并用英文 ',' 分隔。"
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1644
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1644
|
||||||
msgid "Number of early established connections to reduce latency."
|
msgid "Number of early established connections to reduce latency."
|
||||||
msgstr "预连接的数量,用于降低延迟。"
|
msgstr "预连接的数量,用于降低延迟。"
|
||||||
@@ -1819,19 +1833,19 @@ msgstr "设置后,仅在服务器证书链指纹匹配时连接。"
|
|||||||
msgid "Only Common Ports"
|
msgid "Only Common Ports"
|
||||||
msgstr "仅常用端口(不走 P2P 流量到代理)"
|
msgstr "仅常用端口(不走 P2P 流量到代理)"
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:208
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:228
|
||||||
msgid "Only when HTTP Auth Mode is password valid, Mandatory."
|
msgid "Only when HTTP Auth Mode is password valid, Mandatory."
|
||||||
msgstr "仅当 HTTP 认证模式为 password 时有效,必填。"
|
msgstr "仅当 HTTP 认证模式为 password 时有效,必填。"
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:212
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:232
|
||||||
msgid "Only when HTTP Auth Mode is password valid, Not mandatory."
|
msgid "Only when HTTP Auth Mode is password valid, Not mandatory."
|
||||||
msgstr "仅当 HTTP 认证模式为 password 时有效,非必填。"
|
msgstr "仅当 HTTP 认证模式为 password 时有效,非必填。"
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:170
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:190
|
||||||
msgid "Only when Socks5 Auth Mode is password valid, Mandatory."
|
msgid "Only when Socks5 Auth Mode is password valid, Mandatory."
|
||||||
msgstr "仅当 Socks5 认证方式为 Password 时有效,必填。"
|
msgstr "仅当 Socks5 认证方式为 Password 时有效,必填。"
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:175
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:195
|
||||||
msgid "Only when Socks5 Auth Mode is password valid, Not mandatory."
|
msgid "Only when Socks5 Auth Mode is password valid, Not mandatory."
|
||||||
msgstr "仅当 Socks5 认证方式为 Password 时有效,非必填。"
|
msgstr "仅当 Socks5 认证方式为 Password 时有效,非必填。"
|
||||||
|
|
||||||
@@ -1853,11 +1867,11 @@ msgstr ""
|
|||||||
msgid "Package Name"
|
msgid "Package Name"
|
||||||
msgstr "组件包名称"
|
msgstr "组件包名称"
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:261
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:297
|
||||||
msgid "Packet or Rand length as a string, e.g., 10-20."
|
msgid "Packet or Rand length as a string, e.g., 10-20."
|
||||||
msgstr "数据包或 Rand 长度以字符串形式输入,例如:10-20。"
|
msgstr "数据包或 Rand 长度以字符串形式输入,例如:10-20。"
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:298
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:334
|
||||||
msgid "Packet | Rand Length"
|
msgid "Packet | Rand Length"
|
||||||
msgstr "数据包 | Rand 长度"
|
msgstr "数据包 | Rand 长度"
|
||||||
|
|
||||||
@@ -2144,7 +2158,7 @@ msgstr "重置完成"
|
|||||||
msgid "Reset saved Mihomo proxy-group selections and restore YAML defaults?"
|
msgid "Reset saved Mihomo proxy-group selections and restore YAML defaults?"
|
||||||
msgstr "要清空已保存的 Mihomo 分组选择,并恢复为 YAML 默认值吗?"
|
msgstr "要清空已保存的 Mihomo 分组选择,并恢复为 YAML 默认值吗?"
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:144
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:164
|
||||||
msgid "Reset to defaults"
|
msgid "Reset to defaults"
|
||||||
msgstr "恢复出厂设置"
|
msgstr "恢复出厂设置"
|
||||||
|
|
||||||
@@ -2274,7 +2288,7 @@ msgstr "服务端配置"
|
|||||||
msgid "Server Type"
|
msgid "Server Type"
|
||||||
msgstr "服务端类型"
|
msgstr "服务端类型"
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:73
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:93
|
||||||
msgid "Server failsafe auto swith and custom update settings"
|
msgid "Server failsafe auto swith and custom update settings"
|
||||||
msgstr "服务器节点故障自动切换/广告屏蔽/中国大陆 IP 段数据库更新设置"
|
msgstr "服务器节点故障自动切换/广告屏蔽/中国大陆 IP 段数据库更新设置"
|
||||||
|
|
||||||
@@ -2384,7 +2398,7 @@ msgstr ""
|
|||||||
msgid "Socks Version"
|
msgid "Socks Version"
|
||||||
msgstr "Socks 版本"
|
msgstr "Socks 版本"
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:163
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:183
|
||||||
msgid "Socks protocol auth methods, default:noauth."
|
msgid "Socks protocol auth methods, default:noauth."
|
||||||
msgstr "Socks 协议的认证方式,默认值:noauth。"
|
msgstr "Socks 协议的认证方式,默认值:noauth。"
|
||||||
|
|
||||||
@@ -2393,15 +2407,15 @@ msgstr "Socks 协议的认证方式,默认值:noauth。"
|
|||||||
msgid "Socks5"
|
msgid "Socks5"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:163
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:183
|
||||||
msgid "Socks5 Auth Mode"
|
msgid "Socks5 Auth Mode"
|
||||||
msgstr "Socks5 认证方式"
|
msgstr "Socks5 认证方式"
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:175
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:195
|
||||||
msgid "Socks5 Password"
|
msgid "Socks5 Password"
|
||||||
msgstr "Socks5 密码"
|
msgstr "Socks5 密码"
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:170
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:190
|
||||||
msgid "Socks5 User"
|
msgid "Socks5 User"
|
||||||
msgstr "Socks5 用户名"
|
msgstr "Socks5 用户名"
|
||||||
|
|
||||||
@@ -2482,7 +2496,7 @@ msgstr "已成功获取证书指纹:"
|
|||||||
msgid "Successfully retrieved certificate name:"
|
msgid "Successfully retrieved certificate name:"
|
||||||
msgstr "已成功获取证书名称:"
|
msgstr "已成功获取证书名称:"
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:142
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:162
|
||||||
msgid "Support AdGuardHome and DNSMASQ format list"
|
msgid "Support AdGuardHome and DNSMASQ format list"
|
||||||
msgstr "同时支持 AdGuard Home 和 DNSMASQ 格式的过滤列表"
|
msgstr "同时支持 AdGuard Home 和 DNSMASQ 格式的过滤列表"
|
||||||
|
|
||||||
@@ -2498,7 +2512,7 @@ msgstr ""
|
|||||||
"支持以“,”分隔的十进制数字,或者经过 Base64 编码的字符串,其最大长度为 3 个字"
|
"支持以“,”分隔的十进制数字,或者经过 Base64 编码的字符串,其最大长度为 3 个字"
|
||||||
"节。"
|
"节。"
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:84
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:104
|
||||||
msgid "Switch check cycly(second)"
|
msgid "Switch check cycly(second)"
|
||||||
msgstr "自动切换检查周期(秒)"
|
msgstr "自动切换检查周期(秒)"
|
||||||
|
|
||||||
@@ -2527,7 +2541,7 @@ msgstr "TCP 伪装类型"
|
|||||||
msgid "TCP Fast Open"
|
msgid "TCP Fast Open"
|
||||||
msgstr "TCP 快速打开"
|
msgstr "TCP 快速打开"
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:228
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:248
|
||||||
msgid ""
|
msgid ""
|
||||||
"TCP fragments, which can deceive the censorship system in some cases, such "
|
"TCP fragments, which can deceive the censorship system in some cases, such "
|
||||||
"as bypassing SNI blacklists."
|
"as bypassing SNI blacklists."
|
||||||
@@ -2670,7 +2684,7 @@ msgstr "超时"
|
|||||||
msgid "Timeout for establishing a connection to server(second)"
|
msgid "Timeout for establishing a connection to server(second)"
|
||||||
msgstr "连接超时时间(单位:秒)"
|
msgstr "连接超时时间(单位:秒)"
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:260
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:296
|
||||||
msgid "To send noise packets, select \"Noise\" in Xray Settings."
|
msgid "To send noise packets, select \"Noise\" in Xray Settings."
|
||||||
msgstr "在 Xray 设置中勾选 “噪声” 以发送噪声包。"
|
msgstr "在 Xray 设置中勾选 “噪声” 以发送噪声包。"
|
||||||
|
|
||||||
@@ -2701,7 +2715,7 @@ msgstr "Trojan 密码"
|
|||||||
msgid "Try Count"
|
msgid "Try Count"
|
||||||
msgstr "重试次数"
|
msgstr "重试次数"
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:282
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:318
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:695
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:695
|
||||||
msgid "Type"
|
msgid "Type"
|
||||||
msgstr "类型"
|
msgstr "类型"
|
||||||
@@ -2710,7 +2724,7 @@ msgstr "类型"
|
|||||||
msgid "UDP"
|
msgid "UDP"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:255
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:291
|
||||||
msgid ""
|
msgid ""
|
||||||
"UDP noise, Under some circumstances it can bypass some UDP based protocol "
|
"UDP noise, Under some circumstances it can bypass some UDP based protocol "
|
||||||
"restrictions."
|
"restrictions."
|
||||||
@@ -3037,11 +3051,11 @@ msgstr ""
|
|||||||
msgid "Xray"
|
msgid "Xray"
|
||||||
msgstr "Xray"
|
msgstr "Xray"
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:225
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:245
|
||||||
msgid "Xray Fragment Settings"
|
msgid "Xray Fragment Settings"
|
||||||
msgstr "Xray 分片设置"
|
msgstr "Xray 分片设置"
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:258
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:294
|
||||||
msgid "Xray Noise Packets"
|
msgid "Xray Noise Packets"
|
||||||
msgstr "Xray 噪声数据包"
|
msgstr "Xray 噪声数据包"
|
||||||
|
|
||||||
@@ -3060,7 +3074,7 @@ msgstr "YAML 重载失败!"
|
|||||||
msgid "YAML Reloaded!"
|
msgid "YAML Reloaded!"
|
||||||
msgstr "YAML 已重载!"
|
msgstr "YAML 已重载!"
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:137
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:157
|
||||||
msgid "adblock_url"
|
msgid "adblock_url"
|
||||||
msgstr "广告屏蔽更新 URL"
|
msgstr "广告屏蔽更新 URL"
|
||||||
|
|
||||||
@@ -3088,7 +3102,7 @@ msgstr "allowedIPs(可选)"
|
|||||||
msgid "android"
|
msgid "android"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:139
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:159
|
||||||
msgid "anti-AD"
|
msgid "anti-AD"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -3096,7 +3110,7 @@ msgstr ""
|
|||||||
msgid "chacha20-poly1305"
|
msgid "chacha20-poly1305"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:116
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:136
|
||||||
msgid "china-operator-ip"
|
msgid "china-operator-ip"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -3142,7 +3156,7 @@ msgstr "例如:/etc/ssl/private.key"
|
|||||||
msgid "edge"
|
msgid "edge"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:124
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:144
|
||||||
msgid "felixonmars/dnsmasq-china-list"
|
msgid "felixonmars/dnsmasq-china-list"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -3163,11 +3177,11 @@ msgstr "gRPC 模式"
|
|||||||
msgid "gRPC Service Name"
|
msgid "gRPC Service Name"
|
||||||
msgstr "gRPC 服务名称"
|
msgstr "gRPC 服务名称"
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:106
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:126
|
||||||
msgid "gfwlist Update url"
|
msgid "gfwlist Update url"
|
||||||
msgstr "GFW 列表更新 URL"
|
msgstr "GFW 列表更新 URL"
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:110
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:130
|
||||||
msgid "gfwlist/gfwlist"
|
msgid "gfwlist/gfwlist"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -3264,7 +3278,7 @@ msgstr ""
|
|||||||
msgid "spiderX"
|
msgid "spiderX"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:107
|
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:127
|
||||||
msgid "v2fly/domain-list-community"
|
msgid "v2fly/domain-list-community"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|||||||
@@ -59,10 +59,14 @@ local function parse_realm_uri(uri)
|
|||||||
local scheme, token, server_url, realm_id, query = trim(uri):match("^(realm%+http|realm)://([^@]+)@([^/]+)/([^?]*)%??(.*)$")
|
local scheme, token, server_url, realm_id, query = trim(uri):match("^(realm%+http|realm)://([^@]+)@([^/]+)/([^?]*)%??(.*)$")
|
||||||
if not scheme or not token or not server_url or not realm_id then return nil end
|
if not scheme or not token or not server_url or not realm_id then return nil end
|
||||||
realm_id = realm_id:gsub("/+$", "")
|
realm_id = realm_id:gsub("/+$", "")
|
||||||
|
local address, port = server_url:match("^%[?([^%]]+)%]?:?(%d*)$")
|
||||||
|
port = tonumber(port) or (scheme == "realm+http" and 80 or 443)
|
||||||
local realm = {
|
local realm = {
|
||||||
scheme = scheme,
|
scheme = scheme,
|
||||||
token = token,
|
token = token,
|
||||||
server_url = server_url,
|
server_url = server_url,
|
||||||
|
address = address,
|
||||||
|
port = port,
|
||||||
realm_id = realm_id
|
realm_id = realm_id
|
||||||
}
|
}
|
||||||
-- 解析 query 中的 stun=
|
-- 解析 query 中的 stun=
|
||||||
@@ -292,6 +296,15 @@ function xray_hysteria2()
|
|||||||
address = server.server,
|
address = server.server,
|
||||||
port = tonumber(server.server_port)
|
port = tonumber(server.server_port)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
-- Realm 支持:使用 Realm 服务器地址覆盖默认地址
|
||||||
|
if server.v2ray_protocol == "hysteria2" and server.hysteria2_realms then
|
||||||
|
local realm = parse_realm_uri(server.hysteria2_realm_url)
|
||||||
|
if realm then
|
||||||
|
outbound_settings.address = realm.address
|
||||||
|
outbound_settings.port = realm.port
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
local outbound = {}
|
local outbound = {}
|
||||||
function outbound:new(o)
|
function outbound:new(o)
|
||||||
@@ -700,15 +713,56 @@ Xray.outbounds = {
|
|||||||
local n_maxsplit = xray_fragment.fragment_maxSplit
|
local n_maxsplit = xray_fragment.fragment_maxSplit
|
||||||
--local domainstr = xray_noise.domainStrategy
|
--local domainstr = xray_noise.domainStrategy
|
||||||
finalmask.tcp = finalmask.tcp or {}
|
finalmask.tcp = finalmask.tcp or {}
|
||||||
finalmask.tcp[#finalmask.tcp + 1] = {
|
|
||||||
type = "fragment",
|
-- 辅助函数:将逗号分隔的字符串拆分为数组
|
||||||
settings = {
|
local function split_to_array(str)
|
||||||
--domainStrategy = (xray_fragment.noise == "1" and xray_noise.enabled == "1") and domainstr or nil,
|
if not str or str == "" then return nil end
|
||||||
|
local result = {}
|
||||||
|
for value in string.gmatch(str, "[^,]+") do
|
||||||
|
value = value:gsub("^%s*(.-)%s*$", "%1") -- 去除首尾空格
|
||||||
|
if value ~= "" then
|
||||||
|
table.insert(result, value)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return #result > 0 and result or nil
|
||||||
|
end
|
||||||
|
|
||||||
|
-- 构建 fragment settings
|
||||||
|
local fragment_settings = {
|
||||||
packets = (n_packets and n_packets ~= "") and n_packets or nil,
|
packets = (n_packets and n_packets ~= "") and n_packets or nil,
|
||||||
length = (n_length and n_length ~= "") and n_length or nil,
|
|
||||||
delay = (type(n_delay) == "string" and string.find(n_delay, "-")) and n_delay or (n_delay and tonumber(n_delay)),
|
|
||||||
maxSplit = (n_maxsplit and n_maxsplit ~= "") and n_maxsplit or nil
|
maxSplit = (n_maxsplit and n_maxsplit ~= "") and n_maxsplit or nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
-- 根据 Xray 版本决定使用旧格式还是新格式
|
||||||
|
if xray_version_val <= 260601 then
|
||||||
|
-- 旧版本:使用 length 和 delay(单个值)
|
||||||
|
if n_length and n_length ~= "" then
|
||||||
|
fragment_settings.length = n_length
|
||||||
|
end
|
||||||
|
if n_delay and n_delay ~= "" then
|
||||||
|
if type(n_delay) == "string" and n_delay:find("-", 1, true) then
|
||||||
|
fragment_settings.delay = n_delay
|
||||||
|
else
|
||||||
|
fragment_settings.delay = tonumber(n_delay)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
else
|
||||||
|
-- 新版本:使用 lengths 和 delays(数组)
|
||||||
|
-- 拆分逗号分隔的字符串
|
||||||
|
local lengths_array = split_to_array(n_length)
|
||||||
|
if lengths_array then
|
||||||
|
fragment_settings.lengths = lengths_array
|
||||||
|
end
|
||||||
|
|
||||||
|
local delays_array = split_to_array(n_delay)
|
||||||
|
if delays_array then
|
||||||
|
fragment_settings.delays = delays_array
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
finalmask.tcp[#finalmask.tcp + 1] = {
|
||||||
|
type = "fragment",
|
||||||
|
settings = fragment_settings
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
if xray_fragment.noise == "1" and (TP == "kcp" or (TP == "xhttp" and (server.tls_alpn == "h3" or server.tls_alpn == "h3,h2"))) then
|
if xray_fragment.noise == "1" and (TP == "kcp" or (TP == "xhttp" and (server.tls_alpn == "h3" or server.tls_alpn == "h3,h2"))) then
|
||||||
|
|||||||
+2
-2
@@ -10,12 +10,12 @@ include $(INCLUDE_DIR)/kernel.mk
|
|||||||
|
|
||||||
PKG_NAME:=natflow
|
PKG_NAME:=natflow
|
||||||
PKG_VERSION:=20260531
|
PKG_VERSION:=20260531
|
||||||
PKG_RELEASE:=19
|
PKG_RELEASE:=20
|
||||||
|
|
||||||
PKG_SOURCE:=$(PKG_VERSION).tar.xz
|
PKG_SOURCE:=$(PKG_VERSION).tar.xz
|
||||||
PKG_SOURCE_URL:=https://github.com/ptpt52/natflow.git
|
PKG_SOURCE_URL:=https://github.com/ptpt52/natflow.git
|
||||||
PKG_SOURCE_PROTO:=git
|
PKG_SOURCE_PROTO:=git
|
||||||
PKG_SOURCE_VERSION:=d048ff525d0ab9780a2af16a56a1359b7b14beb4
|
PKG_SOURCE_VERSION:=c1f7aae14a67a8a2f8edd9641c69ccf77654c42a
|
||||||
PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
|
PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
|
||||||
PKG_MAINTAINER:=Chen Minqiang <ptpt52@gmail.com>
|
PKG_MAINTAINER:=Chen Minqiang <ptpt52@gmail.com>
|
||||||
PKG_LICENSE:=GPL-2.0
|
PKG_LICENSE:=GPL-2.0
|
||||||
|
|||||||
Reference in new issue
Block a user