🌴 Sync 2026-03-05 23:51:42

This commit is contained in:
github-actions[bot] committed 2026-03-05 23:51:42 +08:00
1 parent 97c049ed0a
commit 0acff03804
14253 files changed
+3893239

No files matched your search

+14
View File
@@ -0,0 +1,14 @@
# SPDX-License-Identifier: GPL-3.0-only
#
# Copyright (C) 2022 ImmortalWrt.org
include $(TOPDIR)/rules.mk
LUCI_TITLE:=LuCI for Zerotier
LUCI_DEPENDS:=+zerotier
include $(TOPDIR)/feeds/luci/luci.mk
# call BuildPackage - OpenWrt buildroot signature
@@ -0,0 +1,157 @@
/* SPDX-License-Identifier: GPL-3.0-only
*
* Copyright (C) 2022 ImmortalWrt.org
*/
'use strict';
'require form';
'require poll';
'require rpc';
'require uci';
'require view';
'require tools.widgets as widgets';
const callServiceList = rpc.declare({
object: 'service',
method: 'list',
params: ['name'],
expect: { '': {} }
});
function getServiceStatus() {
return L.resolveDefault(callServiceList('zerotier'), {}).then(function(res) {
let isRunning = false;
try {
isRunning = res['zerotier']['instances']['instance1']['running'];
} catch (e) { }
return isRunning;
});
}
function renderStatus(isRunning) {
let spanTemp = '<em><span style="color:%s"><strong>%s %s</strong></span></em>';
let renderHTML;
if (isRunning)
renderHTML = String.format(spanTemp, 'green', _('ZeroTier'), _('RUNNING'));
else
renderHTML = String.format(spanTemp, 'red', _('ZeroTier'), _('NOT RUNNING'));
return renderHTML;
}
return view.extend({
render: function() {
let m, s, o;
m = new form.Map('zerotier', _('ZeroTier'),
_('ZeroTier is an open source, cross-platform and easy to use virtual LAN.'));
s = m.section(form.TypedSection);
s.anonymous = true;
s.render = function() {
poll.add(function() {
return L.resolveDefault(getServiceStatus()).then(function(res) {
let view = document.getElementById('service_status');
view.innerHTML = renderStatus(res);
});
});
return E('div', { class: 'cbi-section', id: 'status_bar' }, [
E('p', { id: 'service_status' }, _('Collecting data…'))
]);
}
s = m.section(form.NamedSection, 'global', 'zerotier', _('Global configuration'));
o = s.option(form.Flag, 'enabled', _('Enable'));
o = s.option(form.Value, 'port', _('Listen port'));
o.datatype = 'port';
o = s.option(form.Value, 'secret', _('Client secret'));
o.password = true;
o = s.option(form.Value, 'local_conf_path', _('Local config path'),
_('Path of the optional file local.conf (see <a target="_blank" href="%s">documentation</a>).').format(
'https://docs.zerotier.com/config/#local-configuration-options'));
o.value('/etc/zerotier.conf');
o = s.option(form.Value, 'config_path', _('Config path'),
_('Persistent configuration directory (to keep other configurations such as controller or moons, etc.).'));
o.value('/etc/zerotier');
o = s.option(form.Flag, 'copy_config_path', _('Copy config path'),
_('Copy the contents of the persistent configuration directory to memory instead of linking it, this avoids writing to flash.'));
o.depends({'config_path': '', '!reverse': true});
o = s.option(form.Flag, 'fw_allow_input', _('Allow input traffic'),
_('Allow input traffic to the ZeroTier daemon.'));
o = s.option(form.Button, '_panel', _('ZeroTier Central'),
_('Create or manage your ZeroTier network, and auth clients who could access.'));
o.inputtitle = _('Open website');
o.inputstyle = 'apply';
o.onclick = function() {
window.open("https://my.zerotier.com/network", '_blank');
}
s = m.section(form.GridSection, 'network', _('Network configuration'));
s.addremove = true;
s.rowcolors = true;
s.sortable = true;
s.nodescriptions = true;
o = s.option(form.Flag, 'enabled', _('Enable'));
o.default = o.enabled;
o.editable = true;
o = s.option(form.Value, 'id', _('Network ID'));
o.rmempty = false;
o.width = '20%';
o = s.option(form.Flag, 'allow_managed', _('Allow managed IP/route'),
_('Allow ZeroTier to set IP addresses and routes (local/private ranges only).'));
o.default = o.enabled;
o.editable = true;
o = s.option(form.Flag, 'allow_global', _('Allow global IP/route'),
_('Allow ZeroTier to set global/public/not-private range IPs and routes.'));
o.editable = true;
o = s.option(form.Flag, 'allow_default', _('Allow default route'),
_('Allow ZeroTier to set the default route on the system.'));
o.editable = true;
o = s.option(form.Flag, 'allow_dns', _('Allow DNS'),
_('Allow ZeroTier to set DNS servers.'));
o.editable = true;
o = s.option(form.Flag, 'fw_allow_input', _('Allow input'),
_('Allow input traffic from the ZeroTier network.'));
o.editable = true;
o = s.option(form.Flag, 'fw_allow_forward', _('Allow forward'),
_('Allow forward traffic from/to the ZeroTier network.'));
o.editable = true;
o = s.option(widgets.DeviceSelect, 'fw_forward_ifaces', _('Forward interfaces'),
_('Leave empty for all.'));
o.multiple = true;
o.noaliases = true;
o.depends('fw_allow_forward', '1');
o.modalonly = true;
o = s.option(form.Flag, 'fw_allow_masq', _('Masquerading'),
_('Enable network address and port translation (NAT) for outbound traffic for this network.'));
o.editable = true;
o = s.option(widgets.DeviceSelect, 'fw_masq_ifaces', _('Masquerade interfaces'),
_('Leave empty for all.'));
o.multiple = true;
o.noaliases = true;
o.depends('fw_allow_masq', '1');
o.modalonly = true;
return m.render();
}
});
@@ -0,0 +1,119 @@
/* SPDX-License-Identifier: GPL-3.0-only
*
* Copyright (C) 2022 ImmortalWrt.org
*/
'use strict';
'require fs';
'require ui';
'require view';
return view.extend({
load: function() {
return fs.exec('/sbin/ifconfig').then(function(res) {
if (res.code !== 0 || !res.stdout || res.stdout.trim() === '') {
ui.addNotification(null, E('p', {}, _('Unable to get interface info: %s.').format(res.message)));
return '';
}
var interfaces = res.stdout.match(/zt[a-z0-9]+/g);
if (!interfaces || interfaces.length === 0)
return 'No interface online.';
var promises = interfaces.map(function(name) {
return fs.exec('/sbin/ifconfig', [name]);
});
return Promise.all(promises).then(function(results) {
var data = results.map(function(res, index) {
if (res.code !== 0 || !res.stdout || res.stdout.trim() === '') {
ui.addNotification(null, E('p', {}, _('Unable to get interface %s info: %s.').format(interfaces[index], res.message)));
return null;
}
return {
name: interfaces[index],
stdout: res.stdout.trim()
};
}).filter(Boolean);
return data.map(function(info) {
var lines = info.stdout.split('\n');
var parsedInfo = {
name: info.name
};
lines.forEach(function(line) {
if (line.includes('HWaddr')) {
parsedInfo.mac = line.split('HWaddr')[1].trim().split(' ')[0];
} else if (line.includes('inet addr:')) {
parsedInfo.ipv4 = line.split('inet addr:')[1].trim().split(' ')[0];
} else if (line.includes('inet6 addr:')) {
parsedInfo.ipv6 = line.split('inet6 addr:')[1].trim().split('/')[0];
} else if (line.includes('MTU:')) {
parsedInfo.mtu = line.split('MTU:')[1].trim().split(' ')[0];
} else if (line.includes('RX bytes:')) {
var rxMatch = line.match(/RX bytes:\d+ \(([\d.]+\s*[a-zA-Z]+)\)/);
if (rxMatch && rxMatch[1]) {
parsedInfo.rxBytes = rxMatch[1];
}
var txMatch = line.match(/TX bytes:\d+ \(([\d.]+\s*[a-zA-Z]+)\)/);
if (txMatch && txMatch[1]) {
parsedInfo.txBytes = txMatch[1];
}
}
});
return parsedInfo;
});
});
});
},
render: function(data) {
var title = E('h2', {class: 'content'}, _('ZeroTier'));
var desc = E('div', {class: 'cbi-map-descr'}, _('ZeroTier is an open source, cross-platform and easy to use virtual LAN.'));
if (!Array.isArray(data)) {
return E('div', {}, [title, desc, E('div', {}, _('No interface online.'))]);
}
var rows = data.flatMap(function(interfaceData) {
return [
E('th', {class: 'th', colspan: '2'}, _('Network Interface Information')),
E('tr', {class: 'tr'}, [
E('td', {class: 'td left', width: '25%'}, _('Interface Name')),
E('td', {class: 'td left', width: '25%'}, interfaceData.name)
]),
E('tr', {class: 'tr'}, [
E('td', {class: 'td left', width: '25%'}, _('MAC Address')),
E('td', {class: 'td left', width: '25%'}, interfaceData.mac)
]),
E('tr', {class: 'tr'}, [
E('td', {class: 'td left', width: '25%'}, _('IPv4 Address')),
E('td', {class: 'td left', width: '25%'}, interfaceData.ipv4)
]),
E('tr', {class: 'tr'}, [
E('td', {class: 'td left', width: '25%'}, _('IPv6 Address')),
E('td', {class: 'td left', width: '25%'}, interfaceData.ipv6)
]),
E('tr', {class: 'tr'}, [
E('td', {class: 'td left', width: '25%'}, _('MTU')),
E('td', {class: 'td left', width: '25%'}, interfaceData.mtu)
]),
E('tr', {class: 'tr'}, [
E('td', {class: 'td left', width: '25%'}, _('Total Download')),
E('td', {class: 'td left', width: '25%'}, interfaceData.rxBytes)
]),
E('tr', {class: 'tr'}, [
E('td', {class: 'td left', width: '25%'}, _('Total Upload')),
E('td', {class: 'td left', width: '25%'}, interfaceData.txBytes)
])
];
});
return E('div', {}, [title, desc, E('table', { 'class': 'table' }, rows)]);
},
handleSaveApply: null,
handleSave: null,
handleReset: null
});
+231
View File
@@ -0,0 +1,231 @@
msgid ""
msgstr "Content-Type: text/plain; charset=UTF-8"
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/config.js:125
msgid "Allow DNS"
msgstr ""
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/config.js:126
msgid "Allow ZeroTier to set DNS servers."
msgstr ""
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/config.js:113
msgid ""
"Allow ZeroTier to set IP addresses and routes (local/private ranges only)."
msgstr ""
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/config.js:118
msgid "Allow ZeroTier to set global/public/not-private range IPs and routes."
msgstr ""
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/config.js:122
msgid "Allow ZeroTier to set the default route on the system."
msgstr ""
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/config.js:121
msgid "Allow default route"
msgstr ""
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/config.js:133
msgid "Allow forward"
msgstr ""
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/config.js:134
msgid "Allow forward traffic from/to the ZeroTier network."
msgstr ""
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/config.js:117
msgid "Allow global IP/route"
msgstr ""
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/config.js:129
msgid "Allow input"
msgstr ""
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/config.js:87
msgid "Allow input traffic"
msgstr ""
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/config.js:130
msgid "Allow input traffic from the ZeroTier network."
msgstr ""
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/config.js:88
msgid "Allow input traffic to the ZeroTier daemon."
msgstr ""
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/config.js:112
msgid "Allow managed IP/route"
msgstr ""
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/config.js:71
msgid "Client secret"
msgstr ""
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/config.js:60
msgid "Collecting data…"
msgstr ""
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/config.js:79
msgid "Config path"
msgstr ""
#: applications/luci-app-zerotier/root/usr/share/luci/menu.d/luci-app-zerotier.json:14
msgid "Configuration"
msgstr ""
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/config.js:83
msgid "Copy config path"
msgstr ""
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/config.js:84
msgid ""
"Copy the contents of the persistent configuration directory to memory "
"instead of linking it, this avoids writing to flash."
msgstr ""
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/config.js:91
msgid ""
"Create or manage your ZeroTier network, and auth clients who could access."
msgstr ""
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/config.js:66
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/config.js:104
msgid "Enable"
msgstr ""
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/config.js:145
msgid ""
"Enable network address and port translation (NAT) for outbound traffic for "
"this network."
msgstr ""
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/config.js:137
msgid "Forward interfaces"
msgstr ""
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/config.js:64
msgid "Global configuration"
msgstr ""
#: applications/luci-app-zerotier/root/usr/share/rpcd/acl.d/luci-app-zerotier.json:3
msgid "Grant access to ZeroTier configuration"
msgstr ""
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/interface.js:91
msgid "IPv4 Address"
msgstr ""
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/interface.js:95
msgid "IPv6 Address"
msgstr ""
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/interface.js:83
msgid "Interface Name"
msgstr ""
#: applications/luci-app-zerotier/root/usr/share/luci/menu.d/luci-app-zerotier.json:22
msgid "Interface info"
msgstr ""
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/config.js:138
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/config.js:149
msgid "Leave empty for all."
msgstr ""
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/config.js:68
msgid "Listen port"
msgstr ""
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/config.js:74
msgid "Local config path"
msgstr ""
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/interface.js:87
msgid "MAC Address"
msgstr ""
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/interface.js:99
msgid "MTU"
msgstr ""
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/config.js:148
msgid "Masquerade interfaces"
msgstr ""
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/config.js:144
msgid "Masquerading"
msgstr ""
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/config.js:37
msgid "NOT RUNNING"
msgstr ""
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/config.js:108
msgid "Network ID"
msgstr ""
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/interface.js:81
msgid "Network Interface Information"
msgstr ""
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/config.js:98
msgid "Network configuration"
msgstr ""
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/interface.js:77
msgid "No interface online."
msgstr ""
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/config.js:92
msgid "Open website"
msgstr ""
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/config.js:75
msgid ""
"Path of the optional file local.conf (see <a target=\"_blank\" "
"href=\"%s\">documentation</a>)."
msgstr ""
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/config.js:80
msgid ""
"Persistent configuration directory (to keep other configurations such as "
"controller or moons, etc.)."
msgstr ""
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/config.js:35
msgid "RUNNING"
msgstr ""
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/interface.js:103
msgid "Total Download"
msgstr ""
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/interface.js:107
msgid "Total Upload"
msgstr ""
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/interface.js:30
msgid "Unable to get interface %s info: %s."
msgstr ""
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/interface.js:15
msgid "Unable to get interface info: %s."
msgstr ""
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/config.js:35
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/config.js:37
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/config.js:46
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/interface.js:73
#: applications/luci-app-zerotier/root/usr/share/luci/menu.d/luci-app-zerotier.json:3
msgid "ZeroTier"
msgstr ""
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/config.js:90
msgid "ZeroTier Central"
msgstr ""
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/config.js:47
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/interface.js:74
msgid "ZeroTier is an open source, cross-platform and easy to use virtual LAN."
msgstr ""
+1
View File
@@ -0,0 +1 @@
zh_Hans
+239
View File
@@ -0,0 +1,239 @@
msgid ""
msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Last-Translator: Automatically generated\n"
"Language-Team: none\n"
"Language: zh_Hans\n"
"MIME-Version: 1.0\n"
"Content-Transfer-Encoding: 8bit\n"
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/config.js:125
msgid "Allow DNS"
msgstr "允许 DNS"
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/config.js:126
msgid "Allow ZeroTier to set DNS servers."
msgstr "允许 ZeroTier 设置 DNS 服务器。"
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/config.js:113
msgid ""
"Allow ZeroTier to set IP addresses and routes (local/private ranges only)."
msgstr "允许 ZeroTier 设置 IP 地址和路由(仅限本地/私有范围)。"
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/config.js:118
msgid "Allow ZeroTier to set global/public/not-private range IPs and routes."
msgstr "允许 ZeroTier 设置全局/公共/非私有范围的 IP 和路由。"
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/config.js:122
msgid "Allow ZeroTier to set the default route on the system."
msgstr "允许 ZeroTier 设置系统的默认路由。"
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/config.js:121
msgid "Allow default route"
msgstr "允许默认路由"
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/config.js:133
msgid "Allow forward"
msgstr "允许转发"
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/config.js:134
msgid "Allow forward traffic from/to the ZeroTier network."
msgstr "允许来自/到 ZeroTier 网络的转发流量。"
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/config.js:117
msgid "Allow global IP/route"
msgstr "允许全局 IP/路由"
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/config.js:129
msgid "Allow input"
msgstr "允许入站"
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/config.js:87
msgid "Allow input traffic"
msgstr "允许入站流量"
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/config.js:130
msgid "Allow input traffic from the ZeroTier network."
msgstr "允许来自 ZeroTier 网络的入站流量。"
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/config.js:88
msgid "Allow input traffic to the ZeroTier daemon."
msgstr "允许外部流量进入 ZeroTier 守护进程。"
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/config.js:112
msgid "Allow managed IP/route"
msgstr "允许管理 IP/路由"
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/config.js:71
msgid "Client secret"
msgstr "客户端密钥"
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/config.js:60
msgid "Collecting data…"
msgstr "正在收集数据中…"
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/config.js:79
msgid "Config path"
msgstr "配置路径"
#: applications/luci-app-zerotier/root/usr/share/luci/menu.d/luci-app-zerotier.json:14
msgid "Configuration"
msgstr "配置"
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/config.js:83
msgid "Copy config path"
msgstr "复制配置目录"
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/config.js:84
msgid ""
"Copy the contents of the persistent configuration directory to memory "
"instead of linking it, this avoids writing to flash."
msgstr "复制持久配置目录的内容到内存中,而不是链接它,以避免写入闪存。"
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/config.js:91
msgid ""
"Create or manage your ZeroTier network, and auth clients who could access."
msgstr "创建或管理您的 ZeroTier 网络,并允许客户端接入。"
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/config.js:66
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/config.js:104
msgid "Enable"
msgstr "启用"
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/config.js:145
msgid ""
"Enable network address and port translation (NAT) for outbound traffic for "
"this network."
msgstr "为此网络的出站流量开启网络地址和端口转换(NAT 或 NAPT)。"
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/config.js:137
msgid "Forward interfaces"
msgstr "转发接口"
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/config.js:64
msgid "Global configuration"
msgstr "全局配置"
#: applications/luci-app-zerotier/root/usr/share/rpcd/acl.d/luci-app-zerotier.json:3
msgid "Grant access to ZeroTier configuration"
msgstr "授予访问 ZeroTier 配置的权限"
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/interface.js:91
msgid "IPv4 Address"
msgstr "IPv4 地址"
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/interface.js:95
msgid "IPv6 Address"
msgstr "IPv6 地址"
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/interface.js:83
msgid "Interface Name"
msgstr "接口名称"
#: applications/luci-app-zerotier/root/usr/share/luci/menu.d/luci-app-zerotier.json:22
msgid "Interface info"
msgstr "接口信息"
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/config.js:138
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/config.js:149
msgid "Leave empty for all."
msgstr "留空表示全部。"
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/config.js:68
msgid "Listen port"
msgstr "监听端口"
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/config.js:74
msgid "Local config path"
msgstr "本地配置路径"
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/interface.js:87
msgid "MAC Address"
msgstr "MAC 地址"
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/interface.js:99
msgid "MTU"
msgstr "MTU"
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/config.js:148
msgid "Masquerade interfaces"
msgstr "伪装接口"
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/config.js:144
msgid "Masquerading"
msgstr "IP 动态伪装"
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/config.js:37
msgid "NOT RUNNING"
msgstr "未运行"
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/config.js:108
msgid "Network ID"
msgstr "网络 ID"
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/interface.js:81
msgid "Network Interface Information"
msgstr "网络接口信息"
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/config.js:98
msgid "Network configuration"
msgstr "网络配置"
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/interface.js:77
msgid "No interface online."
msgstr "没有在线的接口。"
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/config.js:92
msgid "Open website"
msgstr "打开网站"
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/config.js:75
msgid ""
"Path of the optional file local.conf (see <a target=\"_blank\" "
"href=\"%s\">documentation</a>)."
msgstr ""
"可选配置文件 local.conf 的路径(请参阅 <a target=\"_blank\" href=\"%s\">文档"
"</a>)。"
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/config.js:80
msgid ""
"Persistent configuration directory (to keep other configurations such as "
"controller or moons, etc.)."
msgstr "持久配置目录(用于保留其他配置,例如 controller 或 moon 等)。"
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/config.js:35
msgid "RUNNING"
msgstr "运行中"
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/interface.js:103
msgid "Total Download"
msgstr "总下载"
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/interface.js:107
msgid "Total Upload"
msgstr "总上传"
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/interface.js:30
msgid "Unable to get interface %s info: %s."
msgstr "无法获取接口 %s 的信息:%s。"
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/interface.js:15
msgid "Unable to get interface info: %s."
msgstr "无法获取接口信息:%s。"
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/config.js:35
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/config.js:37
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/config.js:46
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/interface.js:73
#: applications/luci-app-zerotier/root/usr/share/luci/menu.d/luci-app-zerotier.json:3
msgid "ZeroTier"
msgstr "ZeroTier"
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/config.js:90
msgid "ZeroTier Central"
msgstr "ZeroTier 管理中心"
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/config.js:47
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/interface.js:74
msgid "ZeroTier is an open source, cross-platform and easy to use virtual LAN."
msgstr "ZeroTier 是一个开源、跨平台且易于使用的虚拟局域网 VPN。"
+241
View File
@@ -0,0 +1,241 @@
msgid ""
msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Last-Translator: Automatically generated\n"
"Language-Team: none\n"
"Language: zh_Hant\n"
"MIME-Version: 1.0\n"
"Content-Transfer-Encoding: 8bit\n"
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/config.js:125
msgid "Allow DNS"
msgstr "允許 DNS"
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/config.js:126
msgid "Allow ZeroTier to set DNS servers."
msgstr "允許 ZeroTier 設定 DNS 伺服器。"
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/config.js:113
msgid ""
"Allow ZeroTier to set IP addresses and routes (local/private ranges only)."
msgstr "允許 ZeroTier 設定 IP 位址和路由(僅限本地/私有範圍)。"
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/config.js:118
msgid "Allow ZeroTier to set global/public/not-private range IPs and routes."
msgstr "允許 ZeroTier 設定全域/公用/非私有範圍的 IP 位址和路由。"
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/config.js:122
msgid "Allow ZeroTier to set the default route on the system."
msgstr "允許 ZeroTier 在系統上設定預設路由。"
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/config.js:121
msgid "Allow default route"
msgstr "允許預設路由"
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/config.js:133
msgid "Allow forward"
msgstr "允許轉發"
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/config.js:134
msgid "Allow forward traffic from/to the ZeroTier network."
msgstr "允許從/到 ZeroTier 網路的轉發流量。"
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/config.js:117
msgid "Allow global IP/route"
msgstr "允許全域 IP/路由"
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/config.js:129
msgid "Allow input"
msgstr "允許傳入"
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/config.js:87
msgid "Allow input traffic"
msgstr "允許傳入流量"
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/config.js:130
msgid "Allow input traffic from the ZeroTier network."
msgstr "允許來自 ZeroTier 網路的傳入流量。"
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/config.js:88
msgid "Allow input traffic to the ZeroTier daemon."
msgstr "允許外部流量進入 ZeroTier 常駐程式。"
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/config.js:112
msgid "Allow managed IP/route"
msgstr "允許管理 IP/路由"
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/config.js:71
msgid "Client secret"
msgstr "客戶端金鑰"
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/config.js:60
msgid "Collecting data…"
msgstr "收集資料中…"
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/config.js:79
msgid "Config path"
msgstr "設定路徑"
#: applications/luci-app-zerotier/root/usr/share/luci/menu.d/luci-app-zerotier.json:14
msgid "Configuration"
msgstr "設定"
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/config.js:83
msgid "Copy config path"
msgstr "複製設定目錄"
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/config.js:84
msgid ""
"Copy the contents of the persistent configuration directory to memory "
"instead of linking it, this avoids writing to flash."
msgstr ""
"將持久性配置目錄的內容複製到記憶體中,而不是鏈接它,這樣可以避免寫入快閃記憶"
"體。"
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/config.js:91
msgid ""
"Create or manage your ZeroTier network, and auth clients who could access."
msgstr "新建或管理您的 ZeroTier 網路,並授權用戶端訪問。"
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/config.js:66
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/config.js:104
msgid "Enable"
msgstr "啟用"
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/config.js:145
msgid ""
"Enable network address and port translation (NAT) for outbound traffic for "
"this network."
msgstr "為此網路的傳出流量開啟網路位址和連接埠轉換(NAT4 或 NAPT4)。"
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/config.js:137
msgid "Forward interfaces"
msgstr "轉發介面"
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/config.js:64
msgid "Global configuration"
msgstr "全域設定"
#: applications/luci-app-zerotier/root/usr/share/rpcd/acl.d/luci-app-zerotier.json:3
msgid "Grant access to ZeroTier configuration"
msgstr "允許訪問 ZeroTier 的配置"
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/interface.js:91
msgid "IPv4 Address"
msgstr "IPv4 位址"
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/interface.js:95
msgid "IPv6 Address"
msgstr "IPv6 位址"
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/interface.js:83
msgid "Interface Name"
msgstr "介面名稱"
#: applications/luci-app-zerotier/root/usr/share/luci/menu.d/luci-app-zerotier.json:22
msgid "Interface info"
msgstr "介面資訊"
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/config.js:138
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/config.js:149
msgid "Leave empty for all."
msgstr "留空表示全部。"
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/config.js:68
msgid "Listen port"
msgstr "監聽連接埠"
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/config.js:74
msgid "Local config path"
msgstr "本地設定路徑"
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/interface.js:87
msgid "MAC Address"
msgstr "MAC 位址"
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/interface.js:99
msgid "MTU"
msgstr "MTU"
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/config.js:148
msgid "Masquerade interfaces"
msgstr "偽裝介面"
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/config.js:144
msgid "Masquerading"
msgstr "NAT"
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/config.js:37
msgid "NOT RUNNING"
msgstr "尚未執行"
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/config.js:108
msgid "Network ID"
msgstr "網路 ID"
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/interface.js:81
msgid "Network Interface Information"
msgstr "網路介面資訊"
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/config.js:98
msgid "Network configuration"
msgstr "網路設定"
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/interface.js:77
msgid "No interface online."
msgstr "沒有介面在線上。"
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/config.js:92
msgid "Open website"
msgstr "開啟網站"
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/config.js:75
msgid ""
"Path of the optional file local.conf (see <a target=\"_blank\" "
"href=\"%s\">documentation</a>)."
msgstr ""
"選用 local.conf 設定檔的路徑(請參見 <a target=\"_blank\" href=\"%s\">手冊</"
"a>)。"
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/config.js:80
msgid ""
"Persistent configuration directory (to keep other configurations such as "
"controller or moons, etc.)."
msgstr "持久化設定目錄(用於保留其他設定,例如 controller 或 moon 等)。"
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/config.js:35
msgid "RUNNING"
msgstr "正在執行"
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/interface.js:103
msgid "Total Download"
msgstr "總下載量"
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/interface.js:107
msgid "Total Upload"
msgstr "總上傳量"
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/interface.js:30
msgid "Unable to get interface %s info: %s."
msgstr "無法取得介面 %s 的資訊:%s"
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/interface.js:15
msgid "Unable to get interface info: %s."
msgstr "無法取得介面資訊:%s"
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/config.js:35
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/config.js:37
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/config.js:46
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/interface.js:73
#: applications/luci-app-zerotier/root/usr/share/luci/menu.d/luci-app-zerotier.json:3
msgid "ZeroTier"
msgstr "ZeroTier"
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/config.js:90
msgid "ZeroTier Central"
msgstr "ZeroTier 管理中心"
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/config.js:47
#: applications/luci-app-zerotier/htdocs/luci-static/resources/view/zerotier/interface.js:74
msgid "ZeroTier is an open source, cross-platform and easy to use virtual LAN."
msgstr "ZeroTier 是一個開源、跨平台且易於使用的虛擬區域網路 VPN。"
+12
View File
@@ -0,0 +1,12 @@
#!/bin/sh
uci -q batch <<-EOF >/dev/null
delete ucitrack.@zerotier[-1]
commit ucitrack
delete firewall.zerotier
commit firewall
EOF
rm -f /tmp/luci-indexcache
exit 0
@@ -0,0 +1,29 @@
{
"admin/vpn/zerotier": {
"title": "ZeroTier",
"order": 90,
"action": {
"type": "firstchild"
},
"depends": {
"acl": [ "luci-app-zerotier" ],
"uci": { "zerotier": true }
}
},
"admin/vpn/zerotier/config": {
"title": "Configuration",
"order": 10,
"action": {
"type": "view",
"path": "zerotier/config"
}
},
"admin/vpn/zerotier/interface": {
"title": "Interface info",
"order": 20,
"action": {
"type": "view",
"path": "zerotier/interface"
}
}
}
@@ -0,0 +1,17 @@
{
"luci-app-zerotier": {
"description": "Grant access to ZeroTier configuration",
"read": {
"file": {
"/sbin/ifconfig": [ "exec" ]
},
"ubus": {
"service": [ "list" ]
},
"uci": [ "zerotier" ]
},
"write": {
"uci": [ "zerotier" ]
}
}
}