new feature: extra flags
1. you can integrate additional flags within the Extra Settings. 2. refactor UI 3. bump version to v1.1.0.
This commit is contained in:
		
							
								
								
									
										2
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								Makefile
									
									
									
									
									
								
							| @@ -8,7 +8,7 @@ LUCI_TITLE:=LuCI for Tailscale | |||||||
| LUCI_DEPENDS:=+tailscale +jsonfilter +ucode | LUCI_DEPENDS:=+tailscale +jsonfilter +ucode | ||||||
| LUCI_PKGARCH:=all | LUCI_PKGARCH:=all | ||||||
|  |  | ||||||
| PKG_VERSION:=1.0.7 | PKG_VERSION:=1.1.0 | ||||||
|  |  | ||||||
| include $(TOPDIR)/feeds/luci/luci.mk | include $(TOPDIR)/feeds/luci/luci.mk | ||||||
|  |  | ||||||
|   | |||||||
| @@ -23,20 +23,22 @@ return view.extend({ | |||||||
| 							'daemon.err': { status: 'StdErr', startIndex: 9 }, | 							'daemon.err': { status: 'StdErr', startIndex: 9 }, | ||||||
| 							'daemon.notice': { status: 'Info', startIndex: 10 } | 							'daemon.notice': { status: 'Info', startIndex: 10 } | ||||||
| 						}; | 						}; | ||||||
| 						self.logs = res.stdout.split('\n').map(function(log) { | 						if (res.stdout) { | ||||||
| 							var logParts = log.split(' ').filter(Boolean); | 							self.logs = res.stdout.split('\n').map(function(log) { | ||||||
| 							if (logParts.length >= 6) { | 								var logParts = log.split(' ').filter(Boolean); | ||||||
| 								var formattedTime = logParts[1] + ' ' + logParts[2] + ' - ' + logParts[3]; | 								if (logParts.length >= 6) { | ||||||
| 								var status = logParts[5]; | 									var formattedTime = logParts[1] + ' ' + logParts[2] + ' - ' + logParts[3]; | ||||||
| 								var mapping = statusMappings[status] || { status: status, startIndex: 9 }; | 									var status = logParts[5]; | ||||||
| 								status = mapping.status; | 									var mapping = statusMappings[status] || { status: status, startIndex: 9 }; | ||||||
| 								var startIndex = mapping.startIndex; | 									status = mapping.status; | ||||||
| 								var message = logParts.slice(startIndex).join(' '); | 									var startIndex = mapping.startIndex; | ||||||
| 								return formattedTime + ' [ ' + status + ' ] - ' + message; | 									var message = logParts.slice(startIndex).join(' '); | ||||||
| 							} else { | 									return formattedTime + ' [ ' + status + ' ] - ' + message; | ||||||
| 								return ''; | 								} else { | ||||||
| 							} | 									return ''; | ||||||
| 						}).filter(Boolean); | 								} | ||||||
|  | 							}).filter(Boolean); | ||||||
|  | 						} | ||||||
| 						self.updateLogView(); | 						self.updateLogView(); | ||||||
| 					} else { | 					} else { | ||||||
| 						throw new Error(res.stdout + ' ' + res.stderr); | 						throw new Error(res.stdout + ' ' + res.stderr); | ||||||
| @@ -48,7 +50,7 @@ return view.extend({ | |||||||
| 	updateLogView: function() { | 	updateLogView: function() { | ||||||
| 		var view = document.getElementById('syslog'); | 		var view = document.getElementById('syslog'); | ||||||
| 		var logs = this.logs; | 		var logs = this.logs; | ||||||
| 		if (logs.length === 0) { | 		if (logs.length <= 100) { | ||||||
| 			view.textContent = _('No logs available'); | 			view.textContent = _('No logs available'); | ||||||
| 			return; | 			return; | ||||||
| 		} | 		} | ||||||
|   | |||||||
| @@ -110,79 +110,81 @@ return view.extend({ | |||||||
| 		} | 		} | ||||||
|  |  | ||||||
| 		s = m.section(form.NamedSection, 'settings', 'config'); | 		s = m.section(form.NamedSection, 'settings', 'config'); | ||||||
| 		s.title = _('Basic Settings'); | 		s.tab('basic',_('Basic Settings')); | ||||||
|  |  | ||||||
| 		o = s.option(form.Flag, 'enabled', _('Enable')); | 		o = s.taboption('basic',form.Flag, 'enabled', _('Enable')); | ||||||
| 		o.default = o.disabled; | 		o.default = o.disabled; | ||||||
| 		o.rmempty = false; | 		o.rmempty = false; | ||||||
|  |  | ||||||
| 		o = s.option(form.DummyValue, 'login_status', _('Login Status')); | 		o = s.taboption('basic',form.DummyValue, 'login_status', _('Login Status')); | ||||||
| 		o.depends('enabled', '1'); | 		o.depends('enabled', '1'); | ||||||
| 		o.renderWidget = function(section_id, option_id) { | 		o.renderWidget = function(section_id, option_id) { | ||||||
| 			return E('div', { 'id': 'login_status_div' }, _('Collecting data ...')); | 			return E('div', { 'id': 'login_status_div' }, _('Collecting data ...')); | ||||||
| 		}; | 		}; | ||||||
|  |  | ||||||
| 		o = s.option(form.Value, 'port', _('Port'), _('Set the Tailscale port number.')); | 		o = s.taboption('basic',form.Value, 'port', _('Port'), _('Set the Tailscale port number.')); | ||||||
| 		o.datatype = 'port'; | 		o.datatype = 'port'; | ||||||
| 		o.default = '41641'; | 		o.default = '41641'; | ||||||
| 		o.rmempty = false; | 		o.rmempty = false; | ||||||
|  |  | ||||||
| 		o = s.option(form.Value, 'config_path', _('Workdir'), _('The working directory contains config files, audit logs, and runtime info.')); | 		o = s.taboption('basic',form.Value, 'config_path', _('Workdir'), _('The working directory contains config files, audit logs, and runtime info.')); | ||||||
| 		o.default = '/etc/tailscale'; | 		o.default = '/etc/tailscale'; | ||||||
| 		o.rmempty = false; | 		o.rmempty = false; | ||||||
|  |  | ||||||
| 		o = s.option(form.ListValue, 'fw_mode', _('Firewall Mode')); | 		o = s.taboption('basic',form.ListValue, 'fw_mode', _('Firewall Mode')); | ||||||
| 		o.value('nftables', 'nftables'); | 		o.value('nftables', 'nftables'); | ||||||
| 		o.value('iptables', 'iptables'); | 		o.value('iptables', 'iptables'); | ||||||
| 		o.default = 'nftables'; | 		o.default = 'nftables'; | ||||||
| 		o.rmempty = false; | 		o.rmempty = false; | ||||||
|  |  | ||||||
| 		o = s.option(form.Flag, 'log_stdout', _('Output Log'), _('Logging program activities.')); | 		o = s.taboption('basic',form.Flag, 'log_stdout', _('StdOut Log'), _('Logging program activities.')); | ||||||
| 		o.default = o.enabled; | 		o.default = o.enabled; | ||||||
| 		o.rmempty = false; | 		o.rmempty = false; | ||||||
|  |  | ||||||
| 		o = s.option(form.Flag, 'log_stderr', _('Error Log'), _('Logging program errors and exceptions.')); | 		o = s.taboption('basic',form.Flag, 'log_stderr', _('StdErr Log'), _('Logging program errors and exceptions.')); | ||||||
| 		o.default = o.enabled; | 		o.default = o.enabled; | ||||||
| 		o.rmempty = false; | 		o.rmempty = false; | ||||||
|  |  | ||||||
| 		s = m.section(form.NamedSection, 'settings', 'config'); | 		s.tab('advance',_('Advanced Settings')); | ||||||
| 		s.title = _('Advanced Settings'); |  | ||||||
|  |  | ||||||
| 		o = s.option(form.Flag, 'acceptRoutes', _('Auto Mesh'), _('Accept subnet routes that other nodes advertise.')); | 		o = s.taboption('advance',form.Flag, 'acceptRoutes', _('Auto Mesh'), _('Accept subnet routes that other nodes advertise.')); | ||||||
| 		o.default = o.disabled; | 		o.default = o.disabled; | ||||||
| 		o.rmempty = false; | 		o.rmempty = false; | ||||||
|  |  | ||||||
| 		o = s.option(form.Value, 'hostname', _('Device Name'), _("Leave blank to use the device's hostname.")); | 		o = s.taboption('advance',form.Value, 'hostname', _('Device Name'), _("Leave blank to use the device's hostname.")); | ||||||
| 		o.default = ''; | 		o.default = ''; | ||||||
| 		o.rmempty = true; | 		o.rmempty = true; | ||||||
|  |  | ||||||
| 		o = s.option(form.Flag, 'acceptDNS', _('Accept DNS'), _('Accept DNS configuration from the Tailscale admin console.')); | 		o = s.taboption('advance',form.Flag, 'acceptDNS', _('Accept DNS'), _('Accept DNS configuration from the Tailscale admin console.')); | ||||||
| 		o.default = o.enabled; | 		o.default = o.enabled; | ||||||
| 		o.rmempty = false; | 		o.rmempty = false; | ||||||
|  |  | ||||||
| 		o = s.option(form.Flag, 'advertiseExitNode', _('Exit Node'), _('Offer to be an exit node for outbound internet traffic from the Tailscale network.')); | 		o = s.taboption('advance',form.Flag, 'advertiseExitNode', _('Exit Node'), _('Offer to be an exit node for outbound internet traffic from the Tailscale network.')); | ||||||
| 		o.default = o.disabled; | 		o.default = o.disabled; | ||||||
| 		o.rmempty = false; | 		o.rmempty = false; | ||||||
|  |  | ||||||
| 		o = s.option(form.Flag, 's2s', _('Site To Site'), _('Use site-to-site layer 3 networking to connect two subnets on your Tailscale network with each other.')); | 		o = s.taboption('advance',form.Value, 'advertiseRoutes', _('Expose Subnets'), _('Expose physical network routes into Tailscale, e.g. <code>10.0.0.0/24</code>.')); | ||||||
| 		o.default = o.disabled; |  | ||||||
| 		o.depends('acceptRoutes', '1'); |  | ||||||
| 		o.rmempty = false; |  | ||||||
|  |  | ||||||
| 		o = s.option(form.Value, 'advertiseRoutes', _('Expose Subnets'), _('Expose physical network routes onto Tailscale. e.g. 10.0.0.0/24')); |  | ||||||
| 		o.default = ''; | 		o.default = ''; | ||||||
| 		o.depends('acceptRoutes', '1'); | 		o.depends('acceptRoutes', '1'); | ||||||
| 		o.rmempty = true; | 		o.rmempty = true; | ||||||
|  |  | ||||||
| 		o = s.option(form.MultiValue, 'access', _('Access Control')); | 		o = s.taboption('advance',form.Flag, 's2s', _('Site To Site'), _('Use site-to-site layer 3 networking to connect subnets on the Tailscale network.')); | ||||||
|  | 		o.default = o.disabled; | ||||||
|  | 		o.depends('acceptRoutes', '1'); | ||||||
|  | 		o.rmempty = false; | ||||||
|  |  | ||||||
|  | 		o = s.taboption('advance',form.MultiValue, 'access', _('Access Control')); | ||||||
| 		o.value('tsfwlan', _('Tailscale access LAN')); | 		o.value('tsfwlan', _('Tailscale access LAN')); | ||||||
| 		o.value('tsfwwan', _('Tailscale access WAN')); | 		o.value('tsfwwan', _('Tailscale access WAN')); | ||||||
| 		o.value('lanfwts', _('LAN access Tailscale')); | 		o.value('lanfwts', _('LAN access Tailscale')); | ||||||
| 		o.value('wanfwts', _('WAN access Tailscale')); | 		o.value('wanfwts', _('WAN access Tailscale')); | ||||||
| 		o.default = "tsfwlan tsfwwan lanfwts"; | 		o.default = "tsfwlan tsfwwan lanfwts"; | ||||||
| 		o.depends('acceptRoutes', '1'); |  | ||||||
| 		o.rmempty = false; | 		o.rmempty = false; | ||||||
|  |  | ||||||
|  | 		s.tab('extra',_('Extra Settings')); | ||||||
|  |  | ||||||
|  | 		o = s.taboption('extra', form.DynamicList, 'flags', _('Additional Flags'), String.format(_('List of extra flags. Format: --flags=value, e.g. <code>--exit-node=10.0.0.1</code>. <br> %s for enabling settings upon the initiation of Tailscale.'), '<a href="https://tailscale.com/kb/1080/cli#up" target="_blank">' + _('Available flags') + '</a>')); | ||||||
|  |  | ||||||
| 		s = m.section(form.NamedSection, 'settings', 'config'); | 		s = m.section(form.NamedSection, 'settings', 'config'); | ||||||
| 		s.title = _('Custom Server Settings'); | 		s.title = _('Custom Server Settings'); | ||||||
| 		s.description = String.format(_('Use %s to deploy a private server.'), '<a href="https://github.com/juanfont/headscale" target="_blank">headscale</a>'); | 		s.description = String.format(_('Use %s to deploy a private server.'), '<a href="https://github.com/juanfont/headscale" target="_blank">headscale</a>'); | ||||||
|   | |||||||
| @@ -1,23 +1,27 @@ | |||||||
| msgid "" | msgid "" | ||||||
| msgstr "Content-Type: text/plain; charset=UTF-8" | msgstr "Content-Type: text/plain; charset=UTF-8" | ||||||
|  |  | ||||||
| #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:159 | #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:158 | ||||||
| msgid "Accept DNS" | msgid "Accept DNS" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:159 | #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:158 | ||||||
| msgid "Accept DNS configuration from the Tailscale admin console." | msgid "Accept DNS configuration from the Tailscale admin console." | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:151 | #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:150 | ||||||
| msgid "Accept subnet routes that other nodes advertise." | msgid "Accept subnet routes that other nodes advertise." | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:177 | #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:176 | ||||||
| msgid "Access Control" | msgid "Access Control" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:149 | #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:186 | ||||||
|  | msgid "Additional Flags" | ||||||
|  | msgstr "" | ||||||
|  |  | ||||||
|  | #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:148 | ||||||
| msgid "Advanced Settings" | msgid "Advanced Settings" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| @@ -25,14 +29,18 @@ msgstr "" | |||||||
| msgid "Are you sure you want to logout and unbind the current device?" | msgid "Are you sure you want to logout and unbind the current device?" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:194 | #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:196 | ||||||
| msgid "Auth Key" | msgid "Auth Key" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:151 | #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:150 | ||||||
| msgid "Auto Mesh" | msgid "Auto Mesh" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
|  | #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:186 | ||||||
|  | msgid "Available flags" | ||||||
|  | msgstr "" | ||||||
|  |  | ||||||
| #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:113 | #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:113 | ||||||
| msgid "Basic Settings" | msgid "Basic Settings" | ||||||
| msgstr "" | msgstr "" | ||||||
| @@ -42,11 +50,11 @@ msgstr "" | |||||||
| msgid "Collecting data ..." | msgid "Collecting data ..." | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:187 | #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:189 | ||||||
| msgid "Custom Server Settings" | msgid "Custom Server Settings" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:155 | #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:154 | ||||||
| msgid "Device Name" | msgid "Device Name" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| @@ -54,20 +62,20 @@ msgstr "" | |||||||
| msgid "Enable" | msgid "Enable" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:144 | #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:162 | ||||||
| msgid "Error Log" |  | ||||||
| msgstr "" |  | ||||||
|  |  | ||||||
| #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:163 |  | ||||||
| msgid "Exit Node" | msgid "Exit Node" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:172 | #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:166 | ||||||
| msgid "Expose Subnets" | msgid "Expose Subnets" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:172 | #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:166 | ||||||
| msgid "Expose physical network routes onto Tailscale. e.g. 10.0.0.0/24" | msgid "Expose physical network routes into Tailscale, e.g. <code>10.0.0.0/24</code>." | ||||||
|  | msgstr "" | ||||||
|  |  | ||||||
|  | #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:184 | ||||||
|  | msgid "Extra Settings" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:134 | #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:134 | ||||||
| @@ -98,14 +106,18 @@ msgstr "" | |||||||
| msgid "Interface Name" | msgid "Interface Name" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:180 | #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:179 | ||||||
| msgid "LAN access Tailscale" | msgid "LAN access Tailscale" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:155 | #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:154 | ||||||
| msgid "Leave blank to use the device's hostname." | msgid "Leave blank to use the device's hostname." | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
|  | #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:186 | ||||||
|  | msgid "List of extra flags. Format: --flags=value, e.g. <code>--exit-node=10.0.0.1</code>. <br> %s for enabling settings upon the initiation of Tailscale." | ||||||
|  | msgstr "" | ||||||
|  |  | ||||||
| #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:140 | #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:140 | ||||||
| msgid "Logging program activities." | msgid "Logging program activities." | ||||||
| msgstr "" | msgstr "" | ||||||
| @@ -151,14 +163,10 @@ msgstr "" | |||||||
| msgid "No logs available" | msgid "No logs available" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:163 | #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:162 | ||||||
| msgid "Offer to be an exit node for outbound internet traffic from the Tailscale network." | msgid "Offer to be an exit node for outbound internet traffic from the Tailscale network." | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:140 |  | ||||||
| msgid "Output Log" |  | ||||||
| msgstr "" |  | ||||||
|  |  | ||||||
| #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:125 | #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:125 | ||||||
| msgid "Port" | msgid "Port" | ||||||
| msgstr "" | msgstr "" | ||||||
| @@ -167,7 +175,7 @@ msgstr "" | |||||||
| msgid "RUNNING" | msgid "RUNNING" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:190 | #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:192 | ||||||
| msgid "Server Address" | msgid "Server Address" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| @@ -175,10 +183,18 @@ msgstr "" | |||||||
| msgid "Set the Tailscale port number." | msgid "Set the Tailscale port number." | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:167 | #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:171 | ||||||
| msgid "Site To Site" | msgid "Site To Site" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
|  | #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:144 | ||||||
|  | msgid "StdErr Log" | ||||||
|  | msgstr "" | ||||||
|  |  | ||||||
|  | #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:140 | ||||||
|  | msgid "StdOut Log" | ||||||
|  | msgstr "" | ||||||
|  |  | ||||||
| #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/interface.js:72 | #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/interface.js:72 | ||||||
| #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:51 | #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:51 | ||||||
| #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:53 | #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:53 | ||||||
| @@ -187,11 +203,11 @@ msgstr "" | |||||||
| msgid "Tailscale" | msgid "Tailscale" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:178 | #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:177 | ||||||
| msgid "Tailscale access LAN" | msgid "Tailscale access LAN" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:179 | #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:178 | ||||||
| msgid "Tailscale access WAN" | msgid "Tailscale access WAN" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| @@ -224,15 +240,15 @@ msgstr "" | |||||||
| msgid "Unable to get interface info: %s." | msgid "Unable to get interface info: %s." | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:188 | #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:190 | ||||||
| msgid "Use %s to deploy a private server." | msgid "Use %s to deploy a private server." | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:167 | #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:171 | ||||||
| msgid "Use site-to-site layer 3 networking to connect two subnets on your Tailscale network with each other." | msgid "Use site-to-site layer 3 networking to connect subnets on the Tailscale network." | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
| #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:181 | #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:180 | ||||||
| msgid "WAN access Tailscale" | msgid "WAN access Tailscale" | ||||||
| msgstr "" | msgstr "" | ||||||
|  |  | ||||||
|   | |||||||
| @@ -7,52 +7,60 @@ msgstr "" | |||||||
| "MIME-Version: 1.0\n" | "MIME-Version: 1.0\n" | ||||||
| "Content-Transfer-Encoding: 8bit\n" | "Content-Transfer-Encoding: 8bit\n" | ||||||
|  |  | ||||||
| #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:159 | #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:158 | ||||||
| msgid "Accept DNS" | msgid "Accept DNS" | ||||||
| msgstr "允许DNS" | msgstr "允许DNS" | ||||||
|  |  | ||||||
| #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:159 | #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:158 | ||||||
| msgid "Accept DNS configuration from the Tailscale admin console." | msgid "Accept DNS configuration from the Tailscale admin console." | ||||||
| msgstr "使用 Tailscale 管理控制台的 DNS 配置。" | msgstr "使用 Tailscale 管理控制台的 DNS 配置。" | ||||||
|  |  | ||||||
| #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:151 | #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:150 | ||||||
| msgid "Accept subnet routes that other nodes advertise." | msgid "Accept subnet routes that other nodes advertise." | ||||||
| msgstr "接受其他节点广播的子网路由。" | msgstr "接受其他节点广播的子网路由。" | ||||||
|  |  | ||||||
| #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:177 | #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:176 | ||||||
| msgid "Access Control" | msgid "Access Control" | ||||||
| msgstr "访问控制" | msgstr "访问控制" | ||||||
|  |  | ||||||
| #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:149 | #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:186 | ||||||
|  | msgid "Additional Flags" | ||||||
|  | msgstr "参数列表" | ||||||
|  |  | ||||||
|  | #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:148 | ||||||
| msgid "Advanced Settings" | msgid "Advanced Settings" | ||||||
| msgstr "高级设置" | msgstr "高级选项" | ||||||
|  |  | ||||||
| #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:99 | #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:99 | ||||||
| msgid "Are you sure you want to logout and unbind the current device?" | msgid "Are you sure you want to logout and unbind the current device?" | ||||||
| msgstr "是否注销当前登录并且解绑当前设备?" | msgstr "是否注销当前登录并且解绑当前设备?" | ||||||
|  |  | ||||||
| #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:194 | #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:196 | ||||||
| msgid "Auth Key" | msgid "Auth Key" | ||||||
| msgstr "认证密钥" | msgstr "认证密钥" | ||||||
|  |  | ||||||
| #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:151 | #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:150 | ||||||
| msgid "Auto Mesh" | msgid "Auto Mesh" | ||||||
| msgstr "自动组网" | msgstr "自动组网" | ||||||
|  |  | ||||||
|  | #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:186 | ||||||
|  | msgid "Available flags" | ||||||
|  | msgstr "可用参数" | ||||||
|  |  | ||||||
| #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:113 | #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:113 | ||||||
| msgid "Basic Settings" | msgid "Basic Settings" | ||||||
| msgstr "基础设置" | msgstr "基础选项" | ||||||
|  |  | ||||||
| #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:108 | #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:108 | ||||||
| #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:122 | #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:122 | ||||||
| msgid "Collecting data ..." | msgid "Collecting data ..." | ||||||
| msgstr "正在收集数据..." | msgstr "正在收集数据..." | ||||||
|  |  | ||||||
| #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:187 | #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:189 | ||||||
| msgid "Custom Server Settings" | msgid "Custom Server Settings" | ||||||
| msgstr "自定义服务器" | msgstr "自定义服务器" | ||||||
|  |  | ||||||
| #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:155 | #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:154 | ||||||
| msgid "Device Name" | msgid "Device Name" | ||||||
| msgstr "设备名称" | msgstr "设备名称" | ||||||
|  |  | ||||||
| @@ -60,21 +68,21 @@ msgstr "设备名称" | |||||||
| msgid "Enable" | msgid "Enable" | ||||||
| msgstr "启用" | msgstr "启用" | ||||||
|  |  | ||||||
| #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:144 | #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:162 | ||||||
| msgid "Error Log" |  | ||||||
| msgstr "错误日志" |  | ||||||
|  |  | ||||||
| #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:163 |  | ||||||
| msgid "Exit Node" | msgid "Exit Node" | ||||||
| msgstr "出口节点" | msgstr "出口节点" | ||||||
|  |  | ||||||
| #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:172 | #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:166 | ||||||
| msgid "Expose Subnets" | msgid "Expose Subnets" | ||||||
| msgstr "公开网段" | msgstr "公开网段" | ||||||
|  |  | ||||||
| #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:172 | #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:166 | ||||||
| msgid "Expose physical network routes onto Tailscale. e.g. 10.0.0.0/24" | msgid "Expose physical network routes into Tailscale, e.g. <code>10.0.0.0/24</code>." | ||||||
| msgstr "广播子网路由至 Tailscale。例如:10.0.0.0/24" | msgstr "广播子网路由至 Tailscale,例如:<code>10.0.0.0/24</code>。" | ||||||
|  |  | ||||||
|  | #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:184 | ||||||
|  | msgid "Extra Settings" | ||||||
|  | msgstr "附加选项" | ||||||
|  |  | ||||||
| #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:134 | #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:134 | ||||||
| msgid "Firewall Mode" | msgid "Firewall Mode" | ||||||
| @@ -104,21 +112,25 @@ msgstr "接口信息" | |||||||
| msgid "Interface Name" | msgid "Interface Name" | ||||||
| msgstr "接口名称" | msgstr "接口名称" | ||||||
|  |  | ||||||
| #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:180 | #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:179 | ||||||
| msgid "LAN access Tailscale" | msgid "LAN access Tailscale" | ||||||
| msgstr "本地局域网访问虚拟局域网" | msgstr "本地局域网访问虚拟局域网" | ||||||
|  |  | ||||||
| #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:155 | #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:154 | ||||||
| msgid "Leave blank to use the device's hostname." | msgid "Leave blank to use the device's hostname." | ||||||
| msgstr "留空以使用设备的主机名。" | msgstr "留空以使用设备的主机名。" | ||||||
|  |  | ||||||
|  | #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:186 | ||||||
|  | msgid "List of extra flags. Format: --flags=value, e.g. <code>--exit-node=10.0.0.1</code>. <br> %s for enabling settings upon the initiation of Tailscale." | ||||||
|  | msgstr "额外参数的列表。格式:--flags=value,例如 <code>--exit-node=10.0.0.1</code>。<br> 在 Tailscale 启动时的 %s 。" | ||||||
|  |  | ||||||
| #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:140 | #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:140 | ||||||
| msgid "Logging program activities." | msgid "Logging program activities." | ||||||
| msgstr "记录程序运行信息。" | msgstr "记录程序运行信息。" | ||||||
|  |  | ||||||
| #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:144 | #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:144 | ||||||
| msgid "Logging program errors and exceptions." | msgid "Logging program errors and exceptions." | ||||||
| msgstr "记录程序错误和异常信息。" | msgstr "记录程序错误和警告信息。" | ||||||
|  |  | ||||||
| #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:119 | #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:119 | ||||||
| msgid "Login Status" | msgid "Login Status" | ||||||
| @@ -157,14 +169,10 @@ msgstr "无在线接口。" | |||||||
| msgid "No logs available" | msgid "No logs available" | ||||||
| msgstr "日志不存在" | msgstr "日志不存在" | ||||||
|  |  | ||||||
| #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:163 | #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:162 | ||||||
| msgid "Offer to be an exit node for outbound internet traffic from the Tailscale network." | msgid "Offer to be an exit node for outbound internet traffic from the Tailscale network." | ||||||
| msgstr "作为 Tailscale 广域网出口节点。" | msgstr "作为 Tailscale 广域网出口节点。" | ||||||
|  |  | ||||||
| #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:140 |  | ||||||
| msgid "Output Log" |  | ||||||
| msgstr "运行日志" |  | ||||||
|  |  | ||||||
| #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:125 | #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:125 | ||||||
| msgid "Port" | msgid "Port" | ||||||
| msgstr "端口" | msgstr "端口" | ||||||
| @@ -173,7 +181,7 @@ msgstr "端口" | |||||||
| msgid "RUNNING" | msgid "RUNNING" | ||||||
| msgstr "运行中" | msgstr "运行中" | ||||||
|  |  | ||||||
| #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:190 | #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:192 | ||||||
| msgid "Server Address" | msgid "Server Address" | ||||||
| msgstr "服务器地址" | msgstr "服务器地址" | ||||||
|  |  | ||||||
| @@ -181,10 +189,18 @@ msgstr "服务器地址" | |||||||
| msgid "Set the Tailscale port number." | msgid "Set the Tailscale port number." | ||||||
| msgstr "设置 Tailscale 端口号。" | msgstr "设置 Tailscale 端口号。" | ||||||
|  |  | ||||||
| #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:167 | #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:171 | ||||||
| msgid "Site To Site" | msgid "Site To Site" | ||||||
| msgstr "子网互通" | msgstr "子网互通" | ||||||
|  |  | ||||||
|  | #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:144 | ||||||
|  | msgid "StdErr Log" | ||||||
|  | msgstr "错误日志" | ||||||
|  |  | ||||||
|  | #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:140 | ||||||
|  | msgid "StdOut Log" | ||||||
|  | msgstr "运行日志" | ||||||
|  |  | ||||||
| #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/interface.js:72 | #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/interface.js:72 | ||||||
| #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:51 | #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:51 | ||||||
| #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:53 | #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:53 | ||||||
| @@ -193,11 +209,11 @@ msgstr "子网互通" | |||||||
| msgid "Tailscale" | msgid "Tailscale" | ||||||
| msgstr "Tailscale" | msgstr "Tailscale" | ||||||
|  |  | ||||||
| #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:178 | #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:177 | ||||||
| msgid "Tailscale access LAN" | msgid "Tailscale access LAN" | ||||||
| msgstr "虚拟局域网访问本地局域网" | msgstr "虚拟局域网访问本地局域网" | ||||||
|  |  | ||||||
| #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:179 | #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:178 | ||||||
| msgid "Tailscale access WAN" | msgid "Tailscale access WAN" | ||||||
| msgstr "虚拟局域网访问本地广域网" | msgstr "虚拟局域网访问本地广域网" | ||||||
|  |  | ||||||
| @@ -230,15 +246,15 @@ msgstr "无法获取接口 %s 的信息:%s。" | |||||||
| msgid "Unable to get interface info: %s." | msgid "Unable to get interface info: %s." | ||||||
| msgstr "无法获取接口信息:%s。" | msgstr "无法获取接口信息:%s。" | ||||||
|  |  | ||||||
| #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:188 | #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:190 | ||||||
| msgid "Use %s to deploy a private server." | msgid "Use %s to deploy a private server." | ||||||
| msgstr "使用 %s 部署私有服务器" | msgstr "使用 %s 部署私有服务器" | ||||||
|  |  | ||||||
| #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:167 | #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:171 | ||||||
| msgid "Use site-to-site layer 3 networking to connect two subnets on your Tailscale network with each other." | msgid "Use site-to-site layer 3 networking to connect subnets on the Tailscale network." | ||||||
| msgstr "使用站点到站点的三层网络连接 Tailscale 中的两个子网。" | msgstr "使用站点到站点的三层网络连接 Tailscale 中的子网。" | ||||||
|  |  | ||||||
| #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:181 | #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:180 | ||||||
| msgid "WAN access Tailscale" | msgid "WAN access Tailscale" | ||||||
| msgstr "本地广域网访问虚拟局域网" | msgstr "本地广域网访问虚拟局域网" | ||||||
|  |  | ||||||
|   | |||||||
| @@ -7,52 +7,60 @@ msgstr "" | |||||||
| "MIME-Version: 1.0\n" | "MIME-Version: 1.0\n" | ||||||
| "Content-Transfer-Encoding: 8bit\n" | "Content-Transfer-Encoding: 8bit\n" | ||||||
|  |  | ||||||
| #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:159 | #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:158 | ||||||
| msgid "Accept DNS" | msgid "Accept DNS" | ||||||
| msgstr "允許DNS" | msgstr "允許DNS" | ||||||
|  |  | ||||||
| #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:159 | #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:158 | ||||||
| msgid "Accept DNS configuration from the Tailscale admin console." | msgid "Accept DNS configuration from the Tailscale admin console." | ||||||
| msgstr "使用 Tailscale 管理控制台的DNS配置。" | msgstr "使用 Tailscale 管理控制台的 DNS 設定。" | ||||||
|  |  | ||||||
| #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:151 | #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:150 | ||||||
| msgid "Accept subnet routes that other nodes advertise." | msgid "Accept subnet routes that other nodes advertise." | ||||||
| msgstr "接受其他節點廣播的子網路由。" | msgstr "接受其他節點廣播的子網路由。" | ||||||
|  |  | ||||||
| #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:177 | #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:176 | ||||||
| msgid "Access Control" | msgid "Access Control" | ||||||
| msgstr "訪問控制" | msgstr "訪問控制" | ||||||
|  |  | ||||||
| #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:149 | #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:186 | ||||||
|  | msgid "Additional Flags" | ||||||
|  | msgstr "參數列表" | ||||||
|  |  | ||||||
|  | #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:148 | ||||||
| msgid "Advanced Settings" | msgid "Advanced Settings" | ||||||
| msgstr "高級設置" | msgstr "高級選項" | ||||||
|  |  | ||||||
| #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:99 | #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:99 | ||||||
| msgid "Are you sure you want to logout and unbind the current device?" | msgid "Are you sure you want to logout and unbind the current device?" | ||||||
| msgstr "是否註銷當前登錄並且解綁當前設備?" | msgstr "是否註銷當前登錄並且解綁當前設備?" | ||||||
|  |  | ||||||
| #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:194 | #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:196 | ||||||
| msgid "Auth Key" | msgid "Auth Key" | ||||||
| msgstr "認證密鑰" | msgstr "認證密鑰" | ||||||
|  |  | ||||||
| #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:151 | #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:150 | ||||||
| msgid "Auto Mesh" | msgid "Auto Mesh" | ||||||
| msgstr "自動組網" | msgstr "自動組網" | ||||||
|  |  | ||||||
|  | #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:186 | ||||||
|  | msgid "Available flags" | ||||||
|  | msgstr "可用參數" | ||||||
|  |  | ||||||
| #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:113 | #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:113 | ||||||
| msgid "Basic Settings" | msgid "Basic Settings" | ||||||
| msgstr "基礎設置" | msgstr "基礎選項" | ||||||
|  |  | ||||||
| #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:108 | #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:108 | ||||||
| #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:122 | #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:122 | ||||||
| msgid "Collecting data ..." | msgid "Collecting data ..." | ||||||
| msgstr "正在收集數據..." | msgstr "正在收集數據..." | ||||||
|  |  | ||||||
| #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:187 | #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:189 | ||||||
| msgid "Custom Server Settings" | msgid "Custom Server Settings" | ||||||
| msgstr "自定義服務器" | msgstr "自定義伺服器" | ||||||
|  |  | ||||||
| #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:155 | #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:154 | ||||||
| msgid "Device Name" | msgid "Device Name" | ||||||
| msgstr "設備名稱" | msgstr "設備名稱" | ||||||
|  |  | ||||||
| @@ -60,21 +68,21 @@ msgstr "設備名稱" | |||||||
| msgid "Enable" | msgid "Enable" | ||||||
| msgstr "啟用" | msgstr "啟用" | ||||||
|  |  | ||||||
| #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:144 | #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:162 | ||||||
| msgid "Error Log" |  | ||||||
| msgstr "錯誤日誌" |  | ||||||
|  |  | ||||||
| #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:163 |  | ||||||
| msgid "Exit Node" | msgid "Exit Node" | ||||||
| msgstr "出口節點" | msgstr "出口節點" | ||||||
|  |  | ||||||
| #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:172 | #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:166 | ||||||
| msgid "Expose Subnets" | msgid "Expose Subnets" | ||||||
| msgstr "公開網段" | msgstr "公開網段" | ||||||
|  |  | ||||||
| #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:172 | #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:166 | ||||||
| msgid "Expose physical network routes onto Tailscale. e.g. 10.0.0.0/24" | msgid "Expose physical network routes into Tailscale, e.g. <code>10.0.0.0/24</code>." | ||||||
| msgstr "廣播子網路由至 Tailscale。例如:10.0.0.0/24" | msgstr "廣播子網路由至 Tailscale,例如:<code>10.0.0.0/24</code>。" | ||||||
|  |  | ||||||
|  | #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:184 | ||||||
|  | msgid "Extra Settings" | ||||||
|  | msgstr "附加選項" | ||||||
|  |  | ||||||
| #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:134 | #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:134 | ||||||
| msgid "Firewall Mode" | msgid "Firewall Mode" | ||||||
| @@ -104,21 +112,25 @@ msgstr "接口信息" | |||||||
| msgid "Interface Name" | msgid "Interface Name" | ||||||
| msgstr "接口名稱" | msgstr "接口名稱" | ||||||
|  |  | ||||||
| #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:180 | #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:179 | ||||||
| msgid "LAN access Tailscale" | msgid "LAN access Tailscale" | ||||||
| msgstr "本地局域網訪問虛擬局域網" | msgstr "本地局域網訪問虛擬局域網" | ||||||
|  |  | ||||||
| #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:155 | #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:154 | ||||||
| msgid "Leave blank to use the device's hostname." | msgid "Leave blank to use the device's hostname." | ||||||
| msgstr "留空以使用設備的主機名。" | msgstr "留空以使用設備的主機名。" | ||||||
|  |  | ||||||
|  | #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:186 | ||||||
|  | msgid "List of extra flags. Format: --flags=value, e.g. <code>--exit-node=10.0.0.1</code>. <br> %s for enabling settings upon the initiation of Tailscale." | ||||||
|  | msgstr "額外參數的列表。格式:--flags=value,例如 <code>--exit-node=10.0.0.1</code>。<br> 在 Tailscale 啟動時的 %s 。" | ||||||
|  |  | ||||||
| #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:140 | #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:140 | ||||||
| msgid "Logging program activities." | msgid "Logging program activities." | ||||||
| msgstr "記錄程序運行信息。" | msgstr "記錄程式運行信息。" | ||||||
|  |  | ||||||
| #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:144 | #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:144 | ||||||
| msgid "Logging program errors and exceptions." | msgid "Logging program errors and exceptions." | ||||||
| msgstr "記錄程序錯誤和異常信息。" | msgstr "記錄程式錯誤和警告信息。" | ||||||
|  |  | ||||||
| #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:119 | #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:119 | ||||||
| msgid "Login Status" | msgid "Login Status" | ||||||
| @@ -157,14 +169,10 @@ msgstr "無在線接口。" | |||||||
| msgid "No logs available" | msgid "No logs available" | ||||||
| msgstr "日誌不存在" | msgstr "日誌不存在" | ||||||
|  |  | ||||||
| #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:163 | #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:162 | ||||||
| msgid "Offer to be an exit node for outbound internet traffic from the Tailscale network." | msgid "Offer to be an exit node for outbound internet traffic from the Tailscale network." | ||||||
| msgstr "作為 Tailscale 廣域網出口節點。" | msgstr "作為 Tailscale 廣域網出口節點。" | ||||||
|  |  | ||||||
| #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:140 |  | ||||||
| msgid "Output Log" |  | ||||||
| msgstr "運行日誌" |  | ||||||
|  |  | ||||||
| #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:125 | #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:125 | ||||||
| msgid "Port" | msgid "Port" | ||||||
| msgstr "端口" | msgstr "端口" | ||||||
| @@ -173,17 +181,25 @@ msgstr "端口" | |||||||
| msgid "RUNNING" | msgid "RUNNING" | ||||||
| msgstr "運行中" | msgstr "運行中" | ||||||
|  |  | ||||||
| #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:190 | #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:192 | ||||||
| msgid "Server Address" | msgid "Server Address" | ||||||
| msgstr "服務器地址" | msgstr "伺服器地址" | ||||||
|  |  | ||||||
| #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:125 | #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:125 | ||||||
| msgid "Set the Tailscale port number." | msgid "Set the Tailscale port number." | ||||||
| msgstr "設置 Tailscale 端口號。" | msgstr "設置 Tailscale 端口號。" | ||||||
|  |  | ||||||
| #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:167 | #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:171 | ||||||
| msgid "Site To Site" | msgid "Site To Site" | ||||||
| msgstr "子網互聯" | msgstr "子網互通" | ||||||
|  |  | ||||||
|  | #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:144 | ||||||
|  | msgid "StdErr Log" | ||||||
|  | msgstr "錯誤日誌" | ||||||
|  |  | ||||||
|  | #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:140 | ||||||
|  | msgid "StdOut Log" | ||||||
|  | msgstr "運行日誌" | ||||||
|  |  | ||||||
| #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/interface.js:72 | #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/interface.js:72 | ||||||
| #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:51 | #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:51 | ||||||
| @@ -193,18 +209,18 @@ msgstr "子網互聯" | |||||||
| msgid "Tailscale" | msgid "Tailscale" | ||||||
| msgstr "Tailscale" | msgstr "Tailscale" | ||||||
|  |  | ||||||
| #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:178 | #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:177 | ||||||
| msgid "Tailscale access LAN" | msgid "Tailscale access LAN" | ||||||
| msgstr "虛擬局域網訪問本地局域網" | msgstr "虛擬局域網訪問本地局域網" | ||||||
|  |  | ||||||
| #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:179 | #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:178 | ||||||
| msgid "Tailscale access WAN" | msgid "Tailscale access WAN" | ||||||
| msgstr "虛擬局域網訪問本地廣域網" | msgstr "虛擬局域網訪問本地廣域網" | ||||||
|  |  | ||||||
| #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/interface.js:73 | #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/interface.js:73 | ||||||
| #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:85 | #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:85 | ||||||
| msgid "Tailscale is a cross-platform and easy to use virtual LAN." | msgid "Tailscale is a cross-platform and easy to use virtual LAN." | ||||||
| msgstr "Tailscale 是一個跨平臺且易於使用的虛擬局域網 VPN。" | msgstr "Tailscale 是一個跨平台且易於使用的虛擬局域網 VPN。" | ||||||
|  |  | ||||||
| #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:130 | #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:130 | ||||||
| msgid "The working directory contains config files, audit logs, and runtime info." | msgid "The working directory contains config files, audit logs, and runtime info." | ||||||
| @@ -230,15 +246,15 @@ msgstr "無法獲取接口 %s 的信息:%s。" | |||||||
| msgid "Unable to get interface info: %s." | msgid "Unable to get interface info: %s." | ||||||
| msgstr "無法獲取接口信息:%s。" | msgstr "無法獲取接口信息:%s。" | ||||||
|  |  | ||||||
| #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:188 | #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:190 | ||||||
| msgid "Use %s to deploy a private server." | msgid "Use %s to deploy a private server." | ||||||
| msgstr "使用 %s 部署私有服務器" | msgstr "使用 %s 部署私有伺服器" | ||||||
|  |  | ||||||
| #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:167 | #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:171 | ||||||
| msgid "Use site-to-site layer 3 networking to connect two subnets on your Tailscale network with each other." | msgid "Use site-to-site layer 3 networking to connect subnets on the Tailscale network." | ||||||
| msgstr "使用站點到站點的三層網路連線 Tailscale 中的兩個子網。" | msgstr "使用站點到站點的三層網路連線 Tailscale 中的子網。" | ||||||
|  |  | ||||||
| #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:181 | #: luci-app-tailscale/htdocs/luci-static/resources/view/tailscale/setting.js:180 | ||||||
| msgid "WAN access Tailscale" | msgid "WAN access Tailscale" | ||||||
| msgstr "本地廣域網訪問虛擬局域網" | msgstr "本地廣域網訪問虛擬局域網" | ||||||
|  |  | ||||||
|   | |||||||
| @@ -20,7 +20,7 @@ section_enabled() { | |||||||
|  |  | ||||||
| custom_instance() { | custom_instance() { | ||||||
| 	local cfg="$1" | 	local cfg="$1" | ||||||
| 	local acceptRoutes hostname acceptDNS advertiseExitNode s2s advertiseRoutes loginServer authkey std_out std_err | 	local acceptRoutes hostname acceptDNS advertiseExitNode advertiseRoutes s2s flags loginServer authkey std_out std_err | ||||||
| 	local ARGS=" up --reset" | 	local ARGS=" up --reset" | ||||||
|  |  | ||||||
| 	if ! section_enabled "$cfg"; then | 	if ! section_enabled "$cfg"; then | ||||||
| @@ -32,8 +32,9 @@ custom_instance() { | |||||||
| 	config_get hostname $cfg 'hostname' | 	config_get hostname $cfg 'hostname' | ||||||
| 	config_get_bool acceptDNS $cfg 'acceptDNS' | 	config_get_bool acceptDNS $cfg 'acceptDNS' | ||||||
| 	config_get_bool advertiseExitNode $cfg 'advertiseExitNode' | 	config_get_bool advertiseExitNode $cfg 'advertiseExitNode' | ||||||
| 	config_get_bool s2s $cfg 's2s' |  | ||||||
| 	config_get advertiseRoutes $cfg 'advertiseRoutes' | 	config_get advertiseRoutes $cfg 'advertiseRoutes' | ||||||
|  | 	config_get_bool s2s $cfg 's2s' | ||||||
|  | 	config_get flags $cfg 'flags' | ||||||
| 	config_get loginServer $cfg 'loginServer' | 	config_get loginServer $cfg 'loginServer' | ||||||
| 	config_get authkey $cfg 'authkey' | 	config_get authkey $cfg 'authkey' | ||||||
| 	config_get_bool std_out $cfg 'log_stdout' | 	config_get_bool std_out $cfg 'log_stdout' | ||||||
| @@ -43,8 +44,9 @@ custom_instance() { | |||||||
| 	[ -n "$hostname" ] && ARGS="$ARGS --hostname=$hostname" | 	[ -n "$hostname" ] && ARGS="$ARGS --hostname=$hostname" | ||||||
| 	[ "$acceptDNS" = "0" ] && ARGS="$ARGS --accept-dns=false" | 	[ "$acceptDNS" = "0" ] && ARGS="$ARGS --accept-dns=false" | ||||||
| 	[ "$advertiseExitNode" = "1" ] && ARGS="$ARGS --advertise-exit-node" | 	[ "$advertiseExitNode" = "1" ] && ARGS="$ARGS --advertise-exit-node" | ||||||
| 	[ "$s2s" = "1" ] && ARGS="$ARGS --snat-subnet-routes=false --stateful-filtering=false" |  | ||||||
| 	[ -n "$advertiseRoutes" ] && ARGS="$ARGS --advertise-routes=$advertiseRoutes" | 	[ -n "$advertiseRoutes" ] && ARGS="$ARGS --advertise-routes=$advertiseRoutes" | ||||||
|  | 	[ "$s2s" = "1" ] && ARGS="$ARGS --snat-subnet-routes=false --stateful-filtering=false" | ||||||
|  | 	[ -n "$flags" ] && ARGS="$ARGS $flags" | ||||||
| 	[ -n "$loginServer" ] && ARGS="$ARGS --login-server=$loginServer" | 	[ -n "$loginServer" ] && ARGS="$ARGS --login-server=$loginServer" | ||||||
| 	[ -n "$authkey" ] && ARGS="$ARGS --authkey=$authkey" | 	[ -n "$authkey" ] && ARGS="$ARGS --authkey=$authkey" | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 asvow
					asvow