diff --git a/luci-app-daede/Makefile b/luci-app-daede/Makefile index ba31bacea..9d9a700ec 100644 --- a/luci-app-daede/Makefile +++ b/luci-app-daede/Makefile @@ -6,7 +6,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=luci-app-daede PKG_VERSION:=1.12.0 -PKG_RELEASE:=6 +PKG_RELEASE:=7 PKG_MAINTAINER:=kenzok8 PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME) diff --git a/luci-app-daede/htdocs/luci-static/resources/view/daede/updates.js b/luci-app-daede/htdocs/luci-static/resources/view/daede/updates.js index fe4858b74..733384034 100644 --- a/luci-app-daede/htdocs/luci-static/resources/view/daede/updates.js +++ b/luci-app-daede/htdocs/luci-static/resources/view/daede/updates.js @@ -63,6 +63,29 @@ function fmtMtime(epoch) { return d.toISOString().slice(0, 10); } +// Compare two version strings like `sort -V`: split into numeric / non-numeric +// chunks and compare chunk by chunk (numeric chunks numerically). Returns +// <0 if a0 if a>b. Used so a stale third-party feed that +// happens to provide an OLDER build (e.g. compile-jell) is never offered as an +// "upgrade" over a newer locally installed package. +function cmpVer(a, b) { + const ax = String(a).match(/(\d+|\D+)/g) || []; + const bx = String(b).match(/(\d+|\D+)/g) || []; + const n = Math.max(ax.length, bx.length); + for (let i = 0; i < n; i++) { + const as = ax[i], bs = bx[i]; + if (as === undefined) return -1; + if (bs === undefined) return 1; + if (/^\d+$/.test(as) && /^\d+$/.test(bs)) { + const d = parseInt(as, 10) - parseInt(bs, 10); + if (d !== 0) return d < 0 ? -1 : 1; + } else if (as !== bs) { + return as < bs ? -1 : 1; + } + } + return 0; +} + function probeFile(path) { return L.resolveDefault(fs.stat(path), null).then(function(st) { return { exists: !!st, size: st ? st.size : 0, mtime: st ? st.mtime : 0 }; @@ -210,24 +233,27 @@ return view.extend({ ]).forEach(function(entry) { const btn = E('button', { 'class': 'dd-up-btn dd-up-btn-primary' }, _('Upgrade')); btn.addEventListener('click', function() { upgradePkg(entry.k, btn); }); - const sameVersion = entry.r.installed && entry.r.latest && entry.r.installed === entry.r.latest; - const updatable = entry.r.installed && entry.r.latest && entry.r.installed !== entry.r.latest; + // Only treat it as upgradable when the feed version is STRICTLY + // higher than what's installed. A lower/equal feed version (e.g. + // a stale compile-jell build) must never be offered as an upgrade. + const cmp = (entry.r.installed && entry.r.latest) + ? cmpVer(entry.r.latest, entry.r.installed) : null; + const updatable = cmp !== null && cmp > 0; let meta; if (!entry.r.installed) { meta = _('not installed via package manager'); btn.disabled = true; btn.textContent = _('Unavailable'); - } else if (sameVersion) { - meta = _('installed') + ': ' + entry.r.installed + ' · ' + _('up to date'); - btn.disabled = true; } else if (!entry.r.latest) { // latest unknown (registry unreachable) - nothing to upgrade to meta = _('installed') + ': ' + entry.r.installed + ' · ' + _('latest version unknown'); btn.disabled = true; } else if (updatable) { meta = _('installed') + ': ' + entry.r.installed + ' → ' + _('latest') + ': ' + entry.r.latest; - } else { - meta = _('installed') + ': ' + entry.r.installed + (entry.r.latest ? ' · ' + _('latest') + ': ' + entry.r.latest : ''); + } else { + // installed >= feed: already up to date (feed may even be older) + meta = _('installed') + ': ' + entry.r.installed + ' · ' + _('up to date'); + btn.disabled = true; } pkgBody.appendChild(mkRow( updatable ? '⚠' : (entry.r.installed ? '✓' : '✗'), diff --git a/luci-app-daede/root/usr/share/luci-app-daede/pkg-info.sh b/luci-app-daede/root/usr/share/luci-app-daede/pkg-info.sh index fc791d209..a096a74b9 100755 --- a/luci-app-daede/root/usr/share/luci-app-daede/pkg-info.sh +++ b/luci-app-daede/root/usr/share/luci-app-daede/pkg-info.sh @@ -23,7 +23,16 @@ if command -v apk >/dev/null 2>&1; then } ') fi - latest=$(apk search "^${PKG}\$" 2>/dev/null | sort -V | tail -1 | sed "s/^${PKG}-//") + # apk search treats ^ and $ as literal chars (not regex anchors), so the old + # `apk search "^pkg$"` matched nothing. Enumerate the exact-name package + # across all feeds via `apk list` and take the highest version. Restricting + # to "-" avoids sibling names like -geoip / luci-app-. + latest=$(apk list "$PKG" 2>/dev/null | awk -v p="$PKG" ' + $1 ~ "^" p "-[0-9]" { + v = $1; sub("^" p "-", "", v); + print v + } + ' | sort -V | tail -1) elif command -v opkg >/dev/null 2>&1; then installed=$(opkg status "$PKG" 2>/dev/null | awk -F': ' '$1=="Version"{print $2; exit}') latest=$(opkg info "$PKG" 2>/dev/null | awk -F': ' '$1=="Version"{print $2; exit}') diff --git a/luci-app-lite-watchdog/Makefile b/luci-app-lite-watchdog/Makefile index be65c5d49..a7f38cc29 100644 --- a/luci-app-lite-watchdog/Makefile +++ b/luci-app-lite-watchdog/Makefile @@ -1,5 +1,5 @@ # -# Copyright 2022-2024 Rafał Wabik - IceG - From eko.one.pl forum +# Copyright 2022-2026 Rafał Wabik - IceG - From eko.one.pl forum # # MIT License # @@ -8,15 +8,16 @@ include $(TOPDIR)/rules.mk PKG_NAME:=luci-app-lite-watchdog LUCI_TITLE:=LuCI JS Support for lite-watchdog the connection monitor -MAINTAINER:=Rafał Wabik <4Rafal@gmail.com> +PKG_MAINTAINER:=Rafał Wabik <4Rafal@gmail.com> LUCI_DESCRIPTION:=LuCI JS interface for the lite-watchdog scripts. LUCI_DEPENDS:=+sms-tool +kmod-usb-serial +kmod-usb-serial-option +comgt LUCI_PKGARCH:=all -PKG_VERSION:=1.0.15 -PKG_RELEASE:=1 +PKG_VERSION:=1.0.17 +PKG_RELEASE:=2 define Package/luci-app-lite-watchdog/conffiles /etc/modem/log.txt +/etc/lite_watchdog.user endef include $(TOPDIR)/feeds/luci/luci.mk diff --git a/luci-app-lite-watchdog/htdocs/luci-static/resources/view/modem/lwdconfig.js b/luci-app-lite-watchdog/htdocs/luci-static/resources/view/modem/lwdconfig.js index e05cdca55..742f9fb10 100644 --- a/luci-app-lite-watchdog/htdocs/luci-static/resources/view/modem/lwdconfig.js +++ b/luci-app-lite-watchdog/htdocs/luci-static/resources/view/modem/lwdconfig.js @@ -8,142 +8,141 @@ 'require tools.widgets as widgets' /* - Copyright 2022-2024 Rafał Wabik - IceG - From eko.one.pl forum + + Copyright 2022-2026 Rafał Wabik - IceG - From eko.one.pl forum MIT License + */ +function pop(a, message, severity) { + ui.addNotification(a, message, severity) +} + +function popTimeout(a, message, timeout, severity) { + ui.addTimeLimitedNotification(a, message, timeout, severity) +} + return view.extend({ usrScriptPath : '/etc/lite_watchdog.user', load: function() { - return fs.list('/dev').then(function(devs) { - return devs.filter(function(dev) { - return dev.name.match(/^ttyUSB/) || dev.name.match(/^cdc-wdm/) || dev.name.match(/^ttyACM/) || dev.name.match(/^mhi_/) || dev.name.match(/^wwan/); - }); + return Promise.all([ + L.resolveDefault(fs.list('/dev'), null), + L.resolveDefault(uci.load('watchdog')) + ]); + }, + +fileEditDialog: baseclass.extend({ + __init__: function(file, title, description, callback, fileExists = false) { + this.file = file; + this.title = title; + this.description = description; + this.callback = callback; + this.fileExists = fileExists; + }, + + load: function() { + return L.resolveDefault(fs.read(this.file), ''); + }, + + handleSave: function(ev) { + let textarea = document.getElementById('widget.modal_content'); + let value = textarea.value.trim().replace(/\r\n/g, '\n') + '\n'; + return fs.write(this.file, value).then(rc => { + textarea.value = value; + popTimeout(null, E('p', _('Contents have been saved.')), 5000, 'info'); + if (this.callback) { + return this.callback(rc); + } + }).catch(e => { + ui.addNotification(null, E('p', _('Unable to save the contents') + ': %s'.format(e.message))); + }).finally(() => { + ui.hideModal(); }); }, - - fileEditDialog: baseclass.extend({ - __init__: function(file, title, description, callback, fileExists=false) { - this.file = file; - this.title = title; - this.description = description; - this.callback = callback; - this.fileExists = fileExists; - }, - load: function() { - return L.resolveDefault(fs.read(this.file), ''); - }, - - render: function(content) { + error: function(e) { + if (!this.fileExists && e instanceof Error && e.name === 'NotFoundError') { + return this.render(); + } else { ui.showModal(this.title, [ - E('div', { 'class': 'cbi-section' }, [ - E('div', { 'class': 'cbi-section-descr' }, this.description), - E('div', { 'class': 'cbi-section' }, - E('p', {}, - E('textarea', { - 'id': 'widget.modal_content', - 'class': 'cbi-input-textarea', - 'style': 'width:100% !important', - 'rows': 10, - 'wrap': 'off', - 'spellcheck': 'false', - }, - content) - ) - ), - ]), + E('p', {}, _('Unable to read the contents') + ': %s'.format(e.message)), E('div', { 'class': 'right' }, [ E('button', { 'class': 'btn', 'click': ui.hideModal, - }, _('Dismiss')), - ' ', - E('button', { - 'id': 'btn_save', - 'class': 'btn cbi-button-positive important', - 'click': ui.createHandlerFn(this, this.handleSave), - }, _('Save')), - ]), - ]); - }, + }, _('Dismiss')) + ]) + ], 'cbi-modal'); + } + }, - handleSave: function(ev) { - let textarea = document.getElementById('widget.modal_content'); - let value = textarea.value.trim().replace(/\r\n/g, '\n') + '\n'; + show: function() { + ui.showModal(null, E('p', { 'class': 'spinning' }, _('Loading'))); + this.load().then(content => { + ui.hideModal(); + return this.render(content); + }).catch(e => { + ui.hideModal(); + return this.error(e); + }); + }, - return fs.write(this.file, value).then(rc => { - textarea.value = value; - ui.addNotification(null, E('p', _('Contents have been saved.')), - 'info'); - if(this.callback) { - return this.callback(rc); - }; - }).catch(e => { - ui.addNotification(null, E('p', _('Unable to save the contents') - + ': %s'.format(e.message))); - }).finally(() => { - ui.hideModal(); - }); - }, + render: function(content) { + ui.showModal(this.title, [ + E('p', this.description), + E('textarea', { + 'id': 'widget.modal_content', + 'class': 'cbi-input-textarea', + 'style': 'width:100% !important; height: 60vh; min-height: 500px;', + 'wrap': 'off', + 'spellcheck': 'false' + }, content.trim()), + E('div', { 'class': 'right' }, [ + E('button', { + 'class': 'btn cbi-button-remove', + 'click': () => { + document.getElementById('widget.modal_content').value = ''; + fs.write('/etc/lite_watchdog.user', '').then(() => { + }).catch(e => { + ui.addNotification(null, E('p', _('Unable to clear the file') + ': %s'.format(e.message)), 'error'); + }); + } + }, _('Clear')), + ' ', + E('button', { + 'id': 'btn_save', + 'class': 'btn cbi-button-positive important', + 'click': ui.createHandlerFn(this, this.handleSave) + }, _('Save')), + ' ', + E('button', { + 'class': 'btn', + 'click': ui.hideModal + }, _('Dismiss')) + ]) + ], 'cbi-modal'); + } +}), - error: function(e) { - if(!this.fileExists && e instanceof Error && e.name === 'NotFoundError') { - return this.render(); - } else { - ui.showModal(this.title, [ - E('div', { 'class': 'cbi-section' }, - E('p', {}, _('Unable to read the contents') - + ': %s'.format(e.message)) - ), - E('div', { 'class': 'right' }, - E('button', { - 'class': 'btn', - 'click': ui.hideModal, - }, _('Dismiss')) - ), - ]); - }; - }, + render: function(res) { - show: function() { - ui.showModal(null, - E('p', { 'class': 'spinning' }, _('Loading')) - ); - this.load().then(content => { - ui.hideModal(); - return this.render(content); - }).catch(e => { - ui.hideModal(); - return this.error(e); - }) - }, - }), - - render: function(devs) { - let usrScriptEditDialog = new this.fileEditDialog( this.usrScriptPath, _('User script'), _("User-defined commands."), ); - + + let sections = uci.sections('watchdog'); + let mainAction = sections[0].action; + let m, s, o; m = new form.Map('watchdog', _('Configuration lite-watchdog'), _('Configuration panel for lite-watchdog and gui application.')); s = m.section(form.TypedSection, 'watchdog', '', _('')); s.anonymous = true; -/* Old config - o = s.option(widgets.DeviceSelect, 'iface', _('Interface'), - _('Network interface for Internet access.') - ); - o.noaliases = false; - o.default = 'wan'; -*/ - o = s.option(widgets.NetworkSelect, 'iface', _('Interface'), _('Network interface for Internet access.') ); @@ -151,54 +150,338 @@ return view.extend({ o.nocreate = true; o.rmempty = false; o.default = 'wan'; - - o = s.option(form.Button, - '_usr_script_btn', _('Edit user script'), - _('Before executing the action, system calls a script in which user can place his own commands.') - ); - o.onclick = () => usrScriptEditDialog.show(); - o.inputtitle = _('Edit'); - o.inputstyle = 'edit btn'; - - o = s.option(form.Flag, 'modemrestart', _('Modem restart'), - _('Perform a modem restart before resuming the connection.') - ); - o.rmempty = false; - - o = s.option(form.Value, 'set_port', _('Port for communication with the modem'), - _("Select one of the available ttyUSBX ports.")); - devs.sort((a, b) => a.name > b.name); - devs.forEach(dev => o.value('/dev/' + dev.name)); - o.placeholder = _('Please select a port'); - o.rmempty = false; - o.depends("modemrestart", "1"); - - o = s.option(form.Value, 'restartcmd', _('Restart modem with AT command'), - _('AT command to restart the modem.') - ); - o.default = 'at+cfun=1,1'; - o.rmempty = false; - o.depends("modemrestart", "1"); o = s.option(form.Flag, 'ledstatus', _('LED settings'), _('The LED shows the internet connection status.') ); o.rmempty = false; - o = s.option(form.ListValue, 'led',_('LED Name'), - _("Select the status LED.")); - o.load = function(section_id) { + let led = s.option(form.ListValue, 'led', _('LED Name'), _("Select the status LED.")); + + led.load = function(section_id) { return L.resolveDefault(fs.list('/sys/class/leds'), []).then(L.bind(function(leds) { - if(leds.length > 0) { - leds.sort((a, b) => a.name > b.name); - leds.forEach(e => o.value(e.name)); + if (leds.length > 0) { + leds.sort((a, b) => a.name > b.name); + leds.forEach(e => this.value(e.name)); } return this.super('load', [section_id]); }, this)); }; - o.rmempty = false; - o.depends("ledstatus", "1"); + led.depends("ledstatus", "1"); - return m.render(); + s = m.section(form.TypedSection, 'watchdog', _('User Script Wizard'), _('Before executing the action, system calls a script in which user can place his own commands.')); + s.anonymous = true; + + s.tab('uscriptTab', _('Settings')); + + function handleID(ev, section_id, value) { + let fa = this.section.getUIElement(section_id, 'first_action'); + let ma = this.section.getUIElement(section_id, 'modem_action'); + let cmport = this.section.getUIElement(section_id, 'set_port'); + let rcmd = this.section.getUIElement(section_id, 'restartcmd'); + let rgpio = this.section.getUIElement(section_id, 'gpio'); + + let contentLines = []; + + if (mainAction === "wan") { + // restart interface + if (fa.getValue() === "mr") { + // modem restart + if (ma.getValue() === "sr") { + // soft restart + contentLines.push('#!/bin/sh'); + contentLines.push(''); + contentLines.push('#'); + contentLines.push('# (c) 2025-2026 Rafał Wabik - IceG - From eko.one.pl forum'); + contentLines.push('# Script generated by user'); + contentLines.push('#'); + contentLines.push('# ENV from main'); + contentLines.push('# ACTION=wan|reboot'); + contentLines.push('# PHASE=pre|post'); + contentLines.push('#'); + contentLines.push(''); + contentLines.push('safe_log() {'); + contentLines.push(' [ -n "$LOG_FILE" ] || return 0'); + contentLines.push(' date +"%A %d-%B %Y %T, USER-SCRIPT: $1" >> "$LOG_FILE"'); + contentLines.push('}'); + contentLines.push(''); + contentLines.push('reset_counters_and_stage() {'); + contentLines.push(' [ -n "$CNT_FILE" ] && : > "$CNT_FILE"'); + contentLines.push(' [ -n "$GCNT_FILE" ] && : > "$GCNT_FILE"'); + contentLines.push(' if [ -n "$INDEX_FILE" ]; then'); + contentLines.push(' echo 0 > "$INDEX_FILE"'); + contentLines.push(' fi'); + contentLines.push(' [ -n "$STAGE_FILE" ] && rm -f "$STAGE_FILE"'); + contentLines.push('}'); + contentLines.push(''); + contentLines.push('if [ "$PHASE" = "pre" ]; then'); + contentLines.push(''); + contentLines.push(' safe_log "Commands before main action"'); + contentLines.push(''); + contentLines.push(' # ---Space for user actions---'); + contentLines.push(''); + contentLines.push(' # ---Space for user actions---'); + contentLines.push(''); + contentLines.push('elif [ "$PHASE" = "post" ]; then'); + contentLines.push(''); + contentLines.push(' safe_log "Commands after main action"'); + contentLines.push(''); + contentLines.push(' /bin/date +"%A %d-%B %Y %T, Status: OFFLINE ➜ Action from script: Soft modem restart" >> "$LOG_FILE" && sleep 5'); + contentLines.push(' (/bin/sms_tool -d ' + cmport.getValue() + ' at "' + rcmd.getValue() + '") && sleep 30'); + contentLines.push(''); + contentLines.push(' reset_counters_and_stage'); + contentLines.push('fi'); + contentLines.push(''); + contentLines.push('exit 0'); + } else { + // hard restart + contentLines.push('#!/bin/sh'); + contentLines.push(''); + contentLines.push('#'); + contentLines.push('# (c) 2025-2026 Rafał Wabik - IceG - From eko.one.pl forum'); + contentLines.push('# Script generated by user'); + contentLines.push('#'); + contentLines.push('# ENV from main'); + contentLines.push('# ACTION=wan|reboot'); + contentLines.push('# PHASE=pre|post'); + contentLines.push('#'); + contentLines.push(''); + contentLines.push('safe_log() {'); + contentLines.push(' [ -n "$LOG_FILE" ] || return 0'); + contentLines.push(' date +"%A %d-%B %Y %T, USER-SCRIPT: $1" >> "$LOG_FILE"'); + contentLines.push('}'); + contentLines.push(''); + contentLines.push('reset_counters_and_stage() {'); + contentLines.push(' [ -n "$CNT_FILE" ] && : > "$CNT_FILE"'); + contentLines.push(' [ -n "$GCNT_FILE" ] && : > "$GCNT_FILE"'); + contentLines.push(' if [ -n "$INDEX_FILE" ]; then'); + contentLines.push(' echo 0 > "$INDEX_FILE"'); + contentLines.push(' fi'); + contentLines.push(' [ -n "$STAGE_FILE" ] && rm -f "$STAGE_FILE"'); + contentLines.push('}'); + contentLines.push(''); + contentLines.push('if [ "$PHASE" = "pre" ]; then'); + contentLines.push(''); + contentLines.push(' safe_log "Commands before main action"'); + contentLines.push(''); + contentLines.push(' # ---Space for user actions---'); + contentLines.push(''); + contentLines.push(' # ---Space for user actions---'); + contentLines.push(''); + contentLines.push('elif [ "$PHASE" = "post" ]; then'); + contentLines.push(''); + contentLines.push(' safe_log "Commands after main action"'); + contentLines.push(''); + contentLines.push(' /bin/date +"%A %d-%B %Y %T, Status: OFFLINE ➜ Action from script: Hard modem restart" >> "$LOG_FILE" && sleep 5'); + contentLines.push(' /bin/echo "0" > /sys/class/gpio/' + rgpio.getValue() + '/value'); + contentLines.push(' sleep 20'); + contentLines.push(' /bin/echo "1" > /sys/class/gpio/' + rgpio.getValue() + '/value'); + contentLines.push(''); + contentLines.push(' reset_counters_and_stage'); + contentLines.push('fi'); + contentLines.push(''); + contentLines.push('exit 0'); + } + } else { + // restart router + contentLines.push('#!/bin/sh'); + contentLines.push(''); + contentLines.push('#'); + contentLines.push('# (c) 2025-2026 Rafał Wabik - IceG - From eko.one.pl forum'); + contentLines.push('# Script generated by user'); + contentLines.push('#'); + contentLines.push('# ENV from main'); + contentLines.push('# ACTION=wan|reboot'); + contentLines.push('# PHASE=pre|post'); + contentLines.push('#'); + contentLines.push(''); + contentLines.push('safe_log() {'); + contentLines.push(' [ -n "$LOG_FILE" ] || return 0'); + contentLines.push(' date +"%A %d-%B %Y %T, USER-SCRIPT: $1" >> "$LOG_FILE"'); + contentLines.push('}'); + contentLines.push(''); + contentLines.push('reset_counters_and_stage() {'); + contentLines.push(' [ -n "$CNT_FILE" ] && : > "$CNT_FILE"'); + contentLines.push(' [ -n "$GCNT_FILE" ] && : > "$GCNT_FILE"'); + contentLines.push(' if [ -n "$INDEX_FILE" ]; then'); + contentLines.push(' echo 0 > "$INDEX_FILE"'); + contentLines.push(' fi'); + contentLines.push(' [ -n "$STAGE_FILE" ] && rm -f "$STAGE_FILE"'); + contentLines.push('}'); + contentLines.push(''); + contentLines.push('if [ "$PHASE" = "pre" ]; then'); + contentLines.push(''); + contentLines.push(' safe_log "Commands before main action"'); + contentLines.push(''); + contentLines.push(' # ---Space for user actions---'); + contentLines.push(''); + contentLines.push(' # ---Space for user actions---'); + contentLines.push(''); + contentLines.push('elif [ "$PHASE" = "post" ]; then'); + contentLines.push(''); + contentLines.push(' safe_log "Commands after main action"'); + contentLines.push(''); + contentLines.push(' reset_counters_and_stage'); + contentLines.push(''); + contentLines.push(' /bin/date +"%A %d-%B %Y %T, Status: OFFLINE ➜ Action from script: Reboot" >> "$LOG_FILE" && sleep 5'); + contentLines.push(' reboot'); + contentLines.push(''); + contentLines.push('fi'); + contentLines.push(''); + contentLines.push('exit 0'); + } + } else { + // restart + contentLines.push('#!/bin/sh'); + contentLines.push(''); + contentLines.push('#'); + contentLines.push('# (c) 2025-2026 Rafał Wabik - IceG - From eko.one.pl forum'); + contentLines.push('# Script generated by user'); + contentLines.push('#'); + contentLines.push('# ENV from main'); + contentLines.push('# ACTION=wan|reboot'); + contentLines.push('# PHASE=pre|post'); + contentLines.push('#'); + contentLines.push(''); + contentLines.push('safe_log() {'); + contentLines.push(' [ -n "$LOG_FILE" ] || return 0'); + contentLines.push(' date +"%A %d-%B %Y %T, USER-SCRIPT: $1" >> "$LOG_FILE"'); + contentLines.push('}'); + contentLines.push(''); + contentLines.push('reset_counters_and_stage() {'); + contentLines.push(' [ -n "$CNT_FILE" ] && : > "$CNT_FILE"'); + contentLines.push(' [ -n "$GCNT_FILE" ] && : > "$GCNT_FILE"'); + contentLines.push(' if [ -n "$INDEX_FILE" ]; then'); + contentLines.push(' echo 0 > "$INDEX_FILE"'); + contentLines.push(' fi'); + contentLines.push(' [ -n "$STAGE_FILE" ] && rm -f "$STAGE_FILE"'); + contentLines.push('}'); + contentLines.push(''); + contentLines.push('if [ "$PHASE" = "pre" ]; then'); + contentLines.push(''); + contentLines.push(' safe_log "Commands before main action"'); + contentLines.push(''); + contentLines.push(' # ---Space for user actions---'); + contentLines.push(''); + contentLines.push(' # ---Space for user actions---'); + contentLines.push(''); + contentLines.push(' reset_counters_and_stage'); + contentLines.push(''); + contentLines.push('fi'); + contentLines.push(''); + contentLines.push('exit 0'); + } + + let contentToSave = contentLines.join('\n') + '\n'; + + return fs.write('/etc/lite_watchdog.user', contentToSave).then(function(rc) { + popTimeout(null, E('p', _('Contents have been saved.')), 5000, 'info'); + }).catch(function(e) { + ui.addNotification(null, E('p', _('Unable to save contents: %s').format(e.message))); + }); + } + + o = s.taboption('uscriptTab', form.DummyValue, '_dummy'); + o.rawhtml = true; + o.default = '
' + + _('Hint: You do not need to save anything in the settings. Select the actions and click the Generate button.') + + '
'; + + if (mainAction === "wan") { + + o = s.taboption('uscriptTab', form.RichListValue, "first_action", _('Actions in script'), + _("The available options depend on the previously defined main action (interface or router restart).")); + o.value('nn', _("None")); + o.value('mr', _("modem restart"), _('Restart modem if restarting the interfaces did not restore internet access.')); + o.value('rr', _("reboot"), _('Router reboot if restarting the interfaces did not restore internet access.')); + o.optional = false; + + o = s.taboption('uscriptTab', form.RichListValue, "modem_action", _("Modem actions")); + o.value('sr', _("soft restart"), _('Restart modem using at commands')+' ('+_('effect depends on modem')+'). '+_('Some at commands can also restart the router.')); + o.value('hr', _("hard restart"), _('Restart modem via GPIO.')); + o.optional = false; + o.depends("first_action", "mr"); + + o = s.taboption('uscriptTab', form.Value, 'set_port', _('Port for communication with the modem'), + _("Select one of the available ttyUSBX ports.")); + res[0].sort((a, b) => a.name > b.name); + res[0].forEach(dev => { + if (dev.name.match(/^ttyUSB/) || dev.name.match(/^ttyACM/) || dev.name.match(/^mhi_/) || dev.name.match(/^wwan/)) { + o.value('/dev/' + dev.name); + } + }); + o.placeholder = _('Please select a port'); + o.rmempty = false; + o.depends("modem_action", "sr"); + + o = s.taboption('uscriptTab', form.Value, 'restartcmd', _('AT command'), + _('AT command to restart the modem.') + ); + o.default = 'at+cfun=1,1'; + o.rmempty = false; + o.depends("modem_action", "sr"); + + let gpio = s.taboption('uscriptTab', form.ListValue, 'gpio', _('Restart modem using GPIO'), _("Select the GPIO related to 4G/5G modem.")); + + gpio.load = function(section_id) { + return L.resolveDefault(fs.read('/sys/kernel/debug/gpio'), '').then(L.bind(function(output) { + if (output) { + output.split('\n').forEach(line => { + if (/4g|5g|lte|modem/i.test(line)) { + let cleanLine = line.replace(/\|/g, '').trim(); + let value = cleanLine.match(/\(\s*(.*?)\s*\)/)?.[1]; + + if (value) + gpio.value(value, cleanLine); + } + }); + } + return this.super('load', [section_id]); + }, this)); + }; + gpio.depends("modem_action", "hr"); + + o = s.taboption('uscriptTab', form.Button, '_Generate'); + o.title = _('Generate a script'); + o.inputtitle = _('Generate user script'); + o.inputstyle = 'cbi-button cbi-button-action important'; + o.description = _('Generate and save the prepared script.'); + o.onclick = function(ev) { + let section_id = this.section.cfgsections()[0]; + handleID.call(this, ev, section_id, null); + }; + o.depends("first_action", "mr"); + o.depends("first_action", "rr"); + + } else { + + o = s.taboption('uscriptTab', form.RichListValue, "first_action", _('Actions in script'), + _("The availability of actions depends on the selection of the main action (interface or router restart).")); + o.value('nn', _("None")); + o.value('ua', _("user code"), _('Add custom commands before restarting the device.')); + o.optional = false; + + o = s.taboption('uscriptTab', form.Button, '_Generate'); + o.title = _('Generate a script'); + o.inputtitle = _('Generate user script'); + o.inputstyle = 'cbi-button cbi-button-action important'; + o.description = _('Generate and save the prepared script.'); + o.onclick = function(ev) { + let section_id = this.section.cfgsections()[0]; + handleID.call(this, ev, section_id, null); + }; + o.depends("first_action", "ua"); + + } + + o = s.taboption('uscriptTab', form.Button, + '_usr_script_btn', _('Edit user script'), + _('User can add his script or generate a new one from the selection options.') + ); + o.onclick = () => usrScriptEditDialog.show(); + o.inputtitle = _('Edit'); + o.inputstyle = 'edit btn'; + + return m.render(); } }); diff --git a/luci-app-lite-watchdog/htdocs/luci-static/resources/view/modem/lwdlog.js b/luci-app-lite-watchdog/htdocs/luci-static/resources/view/modem/lwdlog.js index ac02634cd..283e0aab4 100644 --- a/luci-app-lite-watchdog/htdocs/luci-static/resources/view/modem/lwdlog.js +++ b/luci-app-lite-watchdog/htdocs/luci-static/resources/view/modem/lwdlog.js @@ -4,16 +4,16 @@ 'require ui'; 'require uci'; - /* - Copyright 2023-2024 Rafał Wabik - IceG - From eko.one.pl forum + + Copyright 2023-2026 Rafał Wabik - IceG - From eko.one.pl forum MIT License - + Tab is a modification of the package https://github.com/gSpotx2f/luci-app-syslog + */ - return L.view.extend({ tailDefault: 20, @@ -25,8 +25,15 @@ return L.view.extend({ logdata = logdata.replaceAll('OFFLINE', _('OFFLINE')); logdata = logdata.replaceAll('ONLINE', _('ONLINE')); logdata = logdata.replaceAll('Action', _('Action')); + logdata = logdata.replaceAll('Commands before main action', _('Commands before main action')); + logdata = logdata.replaceAll('Commands after main action', _('Commands after main action')); logdata = logdata.replaceAll('Restarting interface', _('Restarting interface')); logdata = logdata.replaceAll('At command was sent to modem', _('At command was sent to modem')); + logdata = logdata.replaceAll('from script:', _('from script:')); + logdata = logdata.replaceAll('USER-SCRIPT:', _('USER-SCRIPT:')); + logdata = logdata.replaceAll('Soft modem restart', _('Soft modem restart')); + logdata = logdata.replaceAll('Hard modem restart', _('Hard modem restart')); + logdata = logdata.replaceAll('Space for user actions', _('Space for user actions')); logdata = logdata.replaceAll('Reboot', _('Reboot')); logdata = logdata.replaceAll('January', _('January')); @@ -49,89 +56,89 @@ return L.view.extend({ logdata = logdata.replaceAll('Friday', _('Friday')); logdata = logdata.replaceAll('Saturday', _('Saturday')); logdata = logdata.replaceAll('Sunday', _('Sunday')); + + logdata = logdata.replaceAll('Watchdog initialized', _('Watchdog initialized')); + logdata = logdata.replaceAll('uptime', _('uptime')); + logdata = logdata.replaceAll('hosts', _('hosts')); /* Log file translation */ - return logdata.trim().split(/\n/).map(line => line.replace(/^<\d+>/, '')); + return logdata.trim().split(/\n/).map(function(line){ return line.replace(/^<\d+>/, ''); }); }, setLogTail: function(cArr) { let tailNumVal = document.getElementById('tailValue').value; - if(tailNumVal && tailNumVal > 0 && cArr) { - return cArr.slice(-tailNumVal); - }; + if (tailNumVal && tailNumVal > 0 && cArr) return cArr.slice(-tailNumVal); return cArr; }, setLogFilter: function(cArr) { - let fPattern = document.getElementById('logFilter').value; - - if(!fPattern) { - return cArr; - }; - let fArr = []; + let fPattern = document.getElementById('logFilter').value; + if (!fPattern) return cArr; try { - fArr = cArr.filter(s => new RegExp(fPattern, 'iu').test(s)); + const re = new RegExp(fPattern, 'iu'); + const fArr = cArr.filter(function(s){ return re.test(s); }); + return (fArr.length ? fArr : [ _('No matches...') ]); } catch(err) { - if(err.name === 'SyntaxError') { - ui.addNotification(null, - E('p', {}, _('Wrong regular expression') + ': ' + err.message)); + if (err.name === 'SyntaxError') { + ui.addNotification(null, E('p', {}, _('Wrong regular expression') + ': ' + err.message)); return cArr; - } else { - throw err; - }; - }; - if(fArr.length === 0) { - fArr.push(_('No matches...')); - }; - return fArr; + } + throw err; + } }, handleClear: function(ev) { - if (confirm(_('Clear connection monitor log?'))) - { - var ov = document.getElementById('syslog'); - ov.value = ''; - return fs.write('/etc/modem/log.txt', ''); - } + if (confirm(_('Clear connection monitor log?'))) { + var ov = document.getElementById('syslog'); if (ov) ov.value = ''; + var ln = document.getElementById('lineNumbers'); if (ln) ln.value = ''; + + fs.write('/etc/modem/log.txt', ''); + fs.write('/tmp/lite_watchdog_cnt', ''); + fs.write('/tmp/lite_watchdog_gcnt', ''); + fs.write('/tmp/lite_watchdog_index', '0'); + fs.remove('/tmp/lite_watchdog_stage'); + + return true; + } }, handleChangeDetail: function(ev) { var x = document.getElementById('log_detail').value; - - return uci.load('watchdog').then(function() { - uci.set('watchdog', '@watchdog[0]', 'log', x.toString()); - uci.save(); - uci.apply(); - }); - + return uci.load('watchdog').then(function() { + uci.set('watchdog', '@watchdog[0]', 'log', x.toString()); + uci.save(); uci.apply(); + }); }, handleDownload: function(ev) { return L.resolveDefault(fs.read_direct('/etc/modem/log.txt'), null).then(function (res) { - if (res) { - var link = E('a', { - 'download': 'log.txt', - 'href': URL.createObjectURL( - new Blob([ res ], { type: 'text/plain' })), - }); - link.click(); - URL.revokeObjectURL(link.href); - } - }).catch(() => { - ui.addNotification(null, E('p', {}, _('Download error') + ': ' + err.message)); + if (res) { + var link = E('a', { + 'download': 'log.txt', + 'href': URL.createObjectURL(new Blob([ res ], { type: 'text/plain' })), + }); + link.click(); + URL.revokeObjectURL(link.href); + } + }).catch(function(err){ + ui.addNotification(null, E('p', {}, _('Download error') + ': ' + err.message)); }); + }, + handleRestoreLOG: function(ev) { + return ui.uploadFile('/etc/modem/log.txt', ev.target) + .then(L.bind(function(btn, res) {}, this, ev.target)) + .catch(function(e) { ui.addNotification(null, E('p', e.message)) }) + .finally(L.bind(function(btn, input) {}, this, ev.target)); }, load: function() { - return fs.read_direct('/etc/modem/log.txt').catch(err => { + return fs.read_direct('/etc/modem/log.txt').catch(function(err){ ui.addNotification(null, E('p', {}, _('Unable to load log data:') + ' ' + err.message)); return ''; }); }, render: function(logdata) { - let navBtnsTop = '1px'; - /* Log file translation */ logdata = logdata.replaceAll('Failed', _('Failed')); logdata = logdata.replaceAll('out of', _('out of')); @@ -139,8 +146,15 @@ return L.view.extend({ logdata = logdata.replaceAll('OFFLINE', _('OFFLINE')); logdata = logdata.replaceAll('ONLINE', _('ONLINE')); logdata = logdata.replaceAll('Action', _('Action')); + logdata = logdata.replaceAll('Commands before main action', _('Commands before main action')); + logdata = logdata.replaceAll('Commands after main action', _('Commands after main action')); logdata = logdata.replaceAll('Restarting interface', _('Restarting interface')); logdata = logdata.replaceAll('At command was sent to modem', _('At command was sent to modem')); + logdata = logdata.replaceAll('from script:', _('from script:')); + logdata = logdata.replaceAll('USER-SCRIPT:', _('USER-SCRIPT:')); + logdata = logdata.replaceAll('Soft modem restart', _('Soft modem restart')); + logdata = logdata.replaceAll('Hard modem restart', _('Hard modem restart')); + logdata = logdata.replaceAll('Space for user actions', _('Space for user actions')); logdata = logdata.replaceAll('Reboot', _('Reboot')); logdata = logdata.replaceAll('January', _('January')); @@ -163,40 +177,121 @@ return L.view.extend({ logdata = logdata.replaceAll('Friday', _('Friday')); logdata = logdata.replaceAll('Saturday', _('Saturday')); logdata = logdata.replaceAll('Sunday', _('Sunday')); - /* Log file translation */ + logdata = logdata.replaceAll('Watchdog initialized', _('Watchdog initialized')); + logdata = logdata.replaceAll('uptime', _('uptime')); + logdata = logdata.replaceAll('hosts', _('hosts')); + /* Log file translation */ + let loglines = this.parseLogData(logdata); uci.load('watchdog').then(function() { - var logsettings = (uci.get('watchdog', '@watchdog[0]', 'log')); - + var logsettings = (uci.get('watchdog', '@watchdog[0]', 'log')); switch (logsettings) { - case 'all': - document.getElementById('log_detail').value = 'all'; - break; - case 'offline': - document.getElementById('log_detail').value = 'offline'; - break; - default: - } - + case 'all': document.getElementById('log_detail').value = 'all'; break; + case 'offline': document.getElementById('log_detail').value = 'offline'; break; + default: ; + } }); - let logTextarea = E('textarea', { + const fontSize = '11px'; + const lineH = '1.4em'; + const padTop = '6px', padBottom = '6px'; + const logHeight = '400px'; + + let lineNumbers = E('textarea', { + 'id': 'lineNumbers', + 'readonly': 'readonly', + 'class': 'cbi-input-textarea', + 'style': [ + 'resize:none', + 'height:' + logHeight,'max-height:800px','min-height:' + logHeight, + 'font-size:' + fontSize,'font-family:monospace', + 'text-align:right','color:#888','background:var(--border-color-soft)', + 'border:1px solid var(--border-color-medium)','border-right:0', + 'overflow:hidden', + 'padding:' + padTop + ' 6px ' + padBottom + ' 0', + 'line-height:' + lineH,'box-sizing:border-box', + 'min-width:6ch' + ].join(';'), + 'wrap': 'off','spellcheck': 'false', + }); + + let logTextWrapper = E('div', { + 'style': 'position:relative; flex:1 1 auto; min-width:0;' + }); + + let logTextarea = E('textarea', { 'id': 'syslog', 'class': 'cbi-input-textarea', - 'style': 'width: 100%; resize: vertical; height:400px; max-height:800px; min-height:400px; min-width:100%; padding: 0 0 0 45px; font-size:12px; font-family: monospace', + 'style': [ + 'display:block','width:100%','resize:vertical', + 'height:' + logHeight,'max-height:800px','min-height:' + logHeight, + 'padding:' + padTop + ' 36px ' + padBottom + ' 8px', + 'font-size:' + fontSize,'font-family:monospace','white-space:pre', + 'line-height:' + lineH,'box-sizing:border-box', + 'overflow:auto' + ].join(';'), 'readonly': 'readonly', 'wrap': 'off', 'rows': this.tailDefault, 'spellcheck': 'false', }, [ loglines.slice(-this.tailDefault).join('\n') ]); + let overlayNav = E('div', { + 'style': 'position:absolute; right:6px; top:6px; display:flex; gap:6px; z-index:2;' + }, [ + E('button', { + 'class': 'btn','title': _('Go to top'), + 'click': function(ev){ + logTextarea.scrollTop = 0; + ev.target.blur(); + }, + 'style': 'line-height:1; padding:6px 10px; font-size:16px;' + }, '\u25b2'), + E('button', { + 'class': 'btn','title': _('Go to bottom'), + 'click': function(ev){ + logTextarea.scrollTop = logTextarea.scrollHeight - logTextarea.clientHeight; + ev.target.blur(); + }, + 'style': 'line-height:1; padding:6px 10px; font-size:16px;' + }, '\u25bc'), + ]); + + logTextWrapper.appendChild(overlayNav); + logTextWrapper.appendChild(logTextarea); + + let logContainer = E('div', { + 'style': 'display:flex; flex-direction:row; gap:0;' + }, [ lineNumbers, logTextWrapper ]); + + const setLineNumberWidth = function(lines) { + const digits = String(Math.max(1, lines)).length; + const ch = Math.max(6, Math.min(10, digits + 2.5)); + lineNumbers.style.width = ch + 'ch'; + }; + + const updateLineNumbers = function(text) { + const lines = text.length ? text.split('\n').length : 1; + lineNumbers.value = Array.from({ length: lines }, function(_, i){ return i + 1; }).join('\n'); + + const rowsCount = (lines < this.tailDefault) ? this.tailDefault : lines; + lineNumbers.rows = rowsCount; + logTextarea.rows = rowsCount; + + setLineNumberWidth(lines); + + lineNumbers.style.height = logTextarea.offsetHeight + 'px'; + lineNumbers.scrollTop = logTextarea.scrollTop; + }.bind(this); + + updateLineNumbers(logTextarea.value); + lineNumbers.addEventListener('scroll', function(){ logTextarea.scrollTop = lineNumbers.scrollTop; }); + logTextarea.addEventListener('scroll', function(){ lineNumbers.scrollTop = logTextarea.scrollTop; }); + let tailValue = E('input', { - 'id': 'tailValue', - 'name': 'tailValue', - 'type': 'text', - 'form': 'logForm', + 'id': 'tailValue','name': 'tailValue','type': 'text','form': 'logForm', 'class': 'cbi-input-text', 'style': 'width:4em !important; min-width:4em !important; margin-bottom:0.3em !important', 'maxlength': 5, @@ -205,155 +300,97 @@ return L.view.extend({ ui.addValidator(tailValue, 'uinteger', true); let logFilter = E('input', { - 'id': 'logFilter', - 'name': 'logFilter', - 'type': 'text', - 'form': 'logForm', + 'id': 'logFilter','name': 'logFilter','type': 'text','form': 'logForm', 'class': 'cbi-input-text', 'style': 'min-width:16em !important; margin-right:1em !important; margin-bottom:0.3em !important', 'placeholder': _('Entries filter'), 'data-tooltip': _('Filter entries using regexp, press [Delete] to delete all text'), 'keydown': function(ev) { - if (ev.keyCode === 46) - { + if (ev.keyCode === 46) { var del = document.getElementById('logFilter'); - if (del) - var ov = document.getElementById('logFilter'); - ov.value = ''; - document.getElementById('logFilter').focus(); - } - }, + if (del) { var ov = document.getElementById('logFilter'); ov.value = ''; document.getElementById('logFilter').focus(); } + } + }, }); let logFormSubmitBtn = E('input', { - 'type': 'submit', - 'form': 'logForm', - 'class': 'cbi-button cbi-button-add', + 'type': 'submit','form': 'logForm','class': 'cbi-button cbi-button-add', 'style': 'margin-right:1em !important; margin-bottom:0.3em !important;', - 'value': _('Refresh'), - 'click': ev => ev.target.blur(), + 'value': _('Refresh'),'click': function(ev){ ev.target.blur(); }, }); return E([ E('h2', { 'id': 'logTitle', 'class': 'fade-in' }, _('Connection monitor activity log')), - E('div', { 'class': 'cbi-map-descr' }, _('Connection monitor activity log, which is a conversion of the monitor known from the easyconfig package. More information on the %seko.one.pl forum%s.').format('', '')), + E('div', { 'class': 'cbi-map-descr' }, _('Connection monitor activity log known from the easyconfig package. More information on the %seko.one.pl forum%s.').format('', '')), E('hr'), E('div', { 'class': 'cbi-section-descr fade-in' }), + E('div', { 'class': 'cbi-section fade-in' }, E('div', { 'class': 'cbi-section-node' }, E('div', { 'id': 'contentSyslog', 'class': 'cbi-value' }, [ - E('label', { - 'class': 'cbi-value-title', - 'for': 'tailValue', - 'style': 'margin-bottom:0.3em !important', - }, _('Show only the last entries')), + E('label', { 'class': 'cbi-value-title', 'for': 'tailValue', 'style': 'margin-bottom:0.3em !important' }, + _('Show only the last entries')), E('div', { 'class': 'cbi-value-field' }, [ tailValue, E('input', { - 'type': 'button', - 'form': 'logForm', - 'class': 'btn cbi-button', - 'value': 'x', - 'click': ev => { - tailValue.value = null; - logFormSubmitBtn.click(); - ev.target.blur(); - }, + 'type': 'button','form': 'logForm','class': 'btn cbi-button','value': 'x', + 'click': function(ev){ tailValue.value = null; logFormSubmitBtn.click(); ev.target.blur(); }, 'style': 'margin-right:1em !important; margin-bottom:0.3em !important; max-width:4em !important', }), E('form', { - 'id': 'logForm', - 'name': 'logForm', + 'id': 'logForm','name': 'logForm', 'style': 'display:inline-block; margin-bottom:0.3em !important', 'submit': ui.createHandlerFn(this, function(ev) { ev.preventDefault(); let formElems = Array.from(document.forms.logForm.elements); - formElems.forEach(e => e.disabled = true); - return this.load().then(logdata => { - let loglines = this.setLogFilter(this.setLogTail( - this.parseLogData(logdata))); - logTextarea.rows = (loglines.length < this.tailDefault) ? this.tailDefault : loglines.length; - logTextarea.value = loglines.join('\n'); - }).finally(() => { - formElems.forEach(e => e.disabled = false); + formElems.forEach(function(e){ e.disabled = true; }); + return this.load().then(function(logdata){ + let loglines = this.setLogFilter(this.setLogTail(this.parseLogData(logdata))); + const text = loglines.join('\n'); + logTextarea.value = text; + updateLineNumbers(text); + logTextarea.scrollTop = logTextarea.scrollHeight - logTextarea.clientHeight; + }.bind(this)).finally(function(){ + formElems.forEach(function(e){ e.disabled = false; }); }); }), }, E('span', {}, ' ')), ]), - ]) ) ), - E('div', { 'class': 'cbi-value' }, [ - E('label', { - 'class': 'cbi-value-title', - 'for' : 'logFilter', - }, _('Type of messages')), - E('div', { 'class': 'cbi-value-field' }, [ - E('select', { 'class': 'cbi-input-select', 'id': 'log_detail', 'change': ui.createHandlerFn(this, 'handleChangeDetail') }, [ - E('option', { 'value': 'all' }, _('All actions')), - E('option', { 'value': 'offline' }, _('Only connection problems')) - ]), - ]) - ]), + E('div', { 'class': 'cbi-value' }, [ + E('label', { 'class': 'cbi-value-title', 'for': 'log_detail' }, _('Type of messages')), + E('div', { 'class': 'cbi-value-field' }, [ + E('select', { 'class': 'cbi-input-select', 'id': 'log_detail', 'change': ui.createHandlerFn(this, 'handleChangeDetail') }, [ + E('option', { 'value': 'all' }, _('All actions')), + E('option', { 'value': 'offline' }, _('Only connection problems')) + ]), + ]) + ]), - E('div', { 'class': 'cbi-value' }, [ - E('label', { - 'class': 'cbi-value-title', - 'for' : 'logFilter', - }, _('Message filter')), - E('div', { 'class': 'cbi-value-field' }, logFilter), - ]), + E('div', { 'class': 'cbi-value' }, [ + E('label', { 'class': 'cbi-value-title', 'for': 'logFilter' }, _('Message filter')), + E('div', { 'class': 'cbi-value-field' }, logFilter), + ]), - E('div', { 'class': 'cbi-value' }, [ - E('label', { - 'class': 'cbi-value-title', - 'for' : 'logFormSubmitBtn', - }, _('Refresh log')), - E('div', { 'class': 'cbi-value-field' }, [ - logFormSubmitBtn, - ]) - ]), + E('div', { 'class': 'cbi-value' }, [ + E('label', { 'class': 'cbi-value-title', 'for': 'logFormSubmitBtn' }, _('Refresh log')), + E('div', { 'class': 'cbi-value-field' }, [ logFormSubmitBtn ]) + ]), E('div', { 'class': 'cbi-section fade-in' }, - E('div', { 'class': 'cbi-section-node' }, [ - E('div', { 'style': 'position:fixed' }, [ - E('button', { - 'class': 'btn', - 'style': 'position:relative; display:block; margin:0 !important; left:1px; top:' - + navBtnsTop, - 'click': ev => { - document.getElementById('logTitle').scrollIntoView(true); - ev.target.blur(); - }, - }, '\u25b2'), - E('button', { - 'class': 'btn', - 'style': 'position:relative; display:block; margin:0 !important; margin-top:1px !important; left:1px; top:' - + navBtnsTop, - 'click': ev => { - logTextarea.scrollIntoView(false); - ev.target.blur(); - }, - }, '\u25bc'), - ]), - logTextarea, - ]) + E('div', { 'class': 'cbi-section-node' }, [ logContainer ]) ), - E('div', { 'class': 'right' }, [ - E('button', { - 'class': 'cbi-button cbi-button-remove', - 'id': 'clear', - 'click': ui.createHandlerFn(this, 'handleClear') - }, [ _('Clear log') ]), - '\xa0\xa0\xa0', - E('button', { - 'class': 'cbi-button cbi-button-apply important', - 'id': 'download', - 'click': ui.createHandlerFn(this, 'handleDownload') - }, [ _('Download log') ]), - ]), + + E('div', { 'class': 'right' }, [ + E('button', { 'class': 'cbi-button cbi-button-remove', 'id': 'clear', 'click': ui.createHandlerFn(this, 'handleClear') }, [ _('Clear log') ]), + '\xa0\xa0\xa0', + E('button', { 'class': 'cbi-button cbi-button-action important', 'id': 'upload-log', 'click': ui.createHandlerFn(this, 'handleRestoreLOG') }, [ _('Upload log file') ]), + '\xa0\xa0\xa0', + E('button', { 'class': 'cbi-button cbi-button-apply important', 'id': 'download-log', 'click': ui.createHandlerFn(this, 'handleDownload') }, [ _('Download log') ]), + ]), ]); }, diff --git a/luci-app-lite-watchdog/htdocs/luci-static/resources/view/modem/watchdog.js b/luci-app-lite-watchdog/htdocs/luci-static/resources/view/modem/watchdog.js index a5cdeaea2..a99bcdf79 100644 --- a/luci-app-lite-watchdog/htdocs/luci-static/resources/view/modem/watchdog.js +++ b/luci-app-lite-watchdog/htdocs/luci-static/resources/view/modem/watchdog.js @@ -1,303 +1,305 @@ -'use strict'; -'require form'; -'require fs'; -'require view'; -'require ui'; -'require uci'; -'require poll'; -'require dom'; -'require tools.widgets as widgets'; - -/* - Copyright 2022-2024 Rafał Wabik - IceG - From eko.one.pl forum - - MIT License -*/ - -return view.extend({ - formdata: { watchdog: {} }, - - load: function() { - return L.resolveDefault(fs.exec_direct('/usr/bin/lite-watchdog-data.sh', [ 'json' ])); - uci.load('watchdog') - }, - - render: function(data) { - var m, s, o; - - if (data != null){ - try { - - var json = JSON.parse(data); - - if (!("error" in json)) { - - var testtime = json.testtime; - var min = json.min; - var avg = json.avg; - var max = json.max; - - if (min != '') { - if (!min.includes('ms')) { - min = min + " ms"; - } - if (!avg.includes('ms')) { - avg = avg + " ms"; - } - if (!max.includes('ms')) { - max = max + " ms"; - } - } - - var onoff = json.enable; - var dest = json.dest; - var delay = parseInt(json.delay)/60; - var period = json.period; - var count = json.count; - var action = json.action; - - pollData: poll.add(function() { - return L.resolveDefault(fs.exec_direct('/usr/bin/lite-watchdog-data.sh', [ 'json' ])) - .then(function(res) { - var json = JSON.parse(res); - - if ( json != null ) { - - var view = document.getElementById("testtime"); - var view2 = document.getElementById("min"); - var view3 = document.getElementById("avg"); - var view4 = document.getElementById("max"); - - var min = json.min.toString(); - - var ttime = json.testtime.toString(); - var countz = json.now_count.toString(); - if (countz != '-1') { - var renderHTML = ""; - renderHTML = ttime + ' (' + _('failed') + ' ' + countz + ' ' + _('out of') + ' ' + count + ')'; - view.innerHTML = ''; - view.innerHTML = renderHTML.trim(); - } - - if (min == '') { - view2.textContent = '-'; - view3.textContent = '-'; - view4.textContent = '-'; - } - else { - var ttime = json.testtime.toString(); - var countz = json.now_count.toString(); - var testz = json.now_count.toString(); - var renderHTML = ""; - renderHTML = ttime + ' (' + _('failed') + ' ' + countz + ' ' + _('out of') + ' ' + count + ')'; - view.innerHTML = ''; - view.innerHTML = renderHTML.trim(); - - var renderHTML2 = ""; - if (!min.includes('ms')) { - min = min + " ms"; - } - renderHTML2 = min; - view2.innerHTML = ''; - view2.innerHTML = renderHTML2.trim(); - - var renderHTML3 = ""; - var avg = json.avg.toString(); - if (!avg.includes('ms')) { - avg = avg + " ms"; - } - renderHTML3 = avg; - view3.innerHTML = ''; - view3.innerHTML = renderHTML3.trim(); - - var max = json.max.toString(); - var renderHTML4 = ""; - if (!max.includes('ms')) { - max = max + " ms"; - } - renderHTML4 = max; - view4.innerHTML = ''; - view4.innerHTML = renderHTML4.trim(); - - } - - } - }); - }); - } - } catch (err) { - console.log('Error: ', err.message); - } - } - - var info = _('Configuration of the connection monitor, which is a conversion of the monitor known from the easyconfig package. More information on the %seko.one.pl forum%s.').format('', ''); - - m = new form.JSONMap(this.formdata, _('Connection monitor settings'), info); - - s = m.section(form.TypedSection, 'watchdog', '', _('')); - s.anonymous = true; - - s.render = L.bind(function(view, section_id) { - return E('div', { 'class': 'cbi-section' }, [ - E('h3', _('Information')), - E('table', { 'class': 'table' }, [ - E('tr', { 'class': 'tr' }, [ - E('td', { 'class': 'td left', 'width': '33%' }, [ _('Last check')]), - E('td', { 'class': 'td left', 'id': 'testtime' }, [ testtime || '-' ]), - ]), - - E('tr', { 'class': 'tr' }, [ - E('td', { 'class': 'td left', 'width': '33%' }, [ _('minimum')]), - E('td', { 'class': 'td left', 'id': 'min' }, [ min || '-' ]), - ]), - - E('tr', { 'class': 'tr' }, [ - E('td', { 'class': 'td left', 'width': '33%' }, [ _('average')]), - E('td', { 'class': 'td left', 'id': 'avg' }, [ avg || '-' ]), - ]), - E('tr', { 'class': 'tr' }, [ - E('td', { 'class': 'td left', 'width': '33%' }, [ _('maximum')]), - E('td', { 'class': 'td left', 'id': 'max' }, [ max || '-' ]), - ]), - ]) - ]); - }, o, this); - - s = m.section(form.TypedSection, 'watchdog', _('')); - s.anonymous = true; - s.addremove = false; - - if(!("error" in json)) { - s.tab('basic', _('Basic settings')); - - o = s.taboption('basic', form.Flag, 'enabled', _('Enabled'), - _('Enable a connection monitor.') - ); - o.rmempty = false; - o.default = onoff; - - o = s.taboption('basic', form.Value, 'delay', _('System startup delay'), - _('[1 - 59] minute(s)') - ); - o.default = delay || "3"; - o.rmempty = false; - o.validate = function(section_id, value) { - - if (value.match(/^[0-9]+(?:\.[0-9]+)?$/) && +value >= 1 && +value < 60) - return true; - - return _('Expect a decimal value between one and fifty-nine'); - }; - o.datatype = 'range(1, 59)'; - - o = s.taboption('basic', form.Value, 'dest', _('Address or name'), - _('') - ); - o.default = dest || "google.com"; - o.rmempty = false; - - o = s.taboption('basic', form.Value, 'period', _('Verification period'), - _('[1 - 59] minute(s)') - ); - o.default = period || "1"; - o.rmempty = false; - o.validate = function(section_id, value) { - - if (value.match(/^[0-9]+(?:\.[0-9]+)?$/) && +value >= 1 && +value < 60) - return true; - - return _('Expect a decimal value between one and fifty-nine'); - }; - o.datatype = 'range(1, 59)'; - - o = s.taboption('basic', form.Value, 'period_count', _('Number of failed checks'), - _('[1 - 59]') - ); - o.default = count || "10"; - o.rmempty = false; - o.validate = function(section_id, value) { - - if (value.match(/^[0-9]+(?:\.[0-9]+)?$/) && +value >= 1 && +value < 60) - return true; - - return _('Expect a decimal value between one and fifty-nine'); - }; - o.datatype = 'range(1, 59)'; - - o = s.taboption('basic', form.ListValue, 'action', _('Action')); - o.value('wan', _('Connection restart')); - o.value('reboot', _('Reboot')); - o.default = action || "wan"; - - } - - return m.render(); - }, - - handleWATCHDOGSETup: function(ev) { - var map = document.querySelector('#maincontent .cbi-map'), - data = this.formdata; - - return dom.callClassMethod(map, 'save').then(function() { - var args = []; - args.push(data.watchdog.enabled); - var ax = args.toString(); - - if ( ax == "1" ) { - ui.addNotification(null, E('p', _('Changes have been saved. Connection Monitor has started.') ), 'info'); - } - else { - ui.addNotification(null, E('p', _('Changes have been saved. Connection Monitor is not running.') ), 'info'); - } - - var args2 = []; - args2.push(data.watchdog.delay); - var ax2 = parseInt(args2)*60; - - var args3 = []; - args3.push(data.watchdog.dest); - var ax3 = args3.toString(); - - var args4 = []; - args4.push(data.watchdog.period); - var ax4 = args4.toString(); - - var args5 = []; - args5.push(data.watchdog.period_count); - var ax5 = args5.toString(); - - var args6 = []; - args6.push(data.watchdog.action); - var ax6 = args6.toString(); - - return uci.load('watchdog').then(function() { - uci.set('watchdog', '@watchdog[0]', 'enabled', ax.toString()); - uci.set('watchdog', '@watchdog[0]', 'delay', ax2.toString()); - uci.set('watchdog', '@watchdog[0]', 'dest', ax3.toString()); - uci.set('watchdog', '@watchdog[0]', 'period', ax4.toString()); - uci.set('watchdog', '@watchdog[0]', 'period_count', ax5.toString()); - uci.set('watchdog', '@watchdog[0]', 'action', ax6.toString()); - uci.save(); - uci.apply(); - fs.exec_direct('/sbin/watchdog2cron.sh'); - - if ( ax == "1" ) { - fs.exec('sleep 2'); - fs.exec_direct('/sbin/refresh2cron.sh'); - } - - }); - }); - }, - - addFooter: function() { - return E('div', { 'class': 'cbi-page-actions' }, [ - E('button', { - 'class': 'cbi-button cbi-button-save', - 'click': L.ui.createHandlerFn(this, 'handleWATCHDOGSETup') - }, [ _('Save') ]) - ]); - } - -}); - +'use strict'; +'require form'; +'require fs'; +'require view'; +'require ui'; +'require uci'; +'require poll'; +'require dom'; +'require tools.widgets as widgets'; + +/* + Copyright 2022-2026 Rafał Wabik - IceG - From eko.one.pl forum + + MIT License +*/ + +function pop(a, message, severity) { + ui.addNotification(a, message, severity) +} + +function popTimeout(a, message, timeout, severity) { + ui.addTimeLimitedNotification(a, message, timeout, severity) +} + +function setSpinner(id) { + var el = document.getElementById(id); + if (!el) return; + el.innerHTML = ''; + el.appendChild(E('span', { 'class': 'spinning', 'style': 'font-size: inherit;' }, _('Loading...'))); +} + +function setText(id, value) { + var el = document.getElementById(id); + if (!el) return; + el.innerHTML = ''; + el.textContent = value || '-'; +} + +function setHTML(id, value) { + var el = document.getElementById(id); + if (!el) return; + el.innerHTML = ''; + el.innerHTML = (value || '-').trim(); +} + +return view.extend({ + formdata: { watchdog: {} }, + + load: function() { + return L.resolveDefault(fs.exec_direct('/usr/bin/lite-watchdog-data.sh', [ 'json' ])); + uci.load('watchdog') + }, + + render: function(data) { + var m, s, o; + + + var spinEl = E('span', { 'class': 'spinning', 'style': 'font-size: inherit;' }, _('Loading...')); + var testtime = spinEl; + var min = E('span', { 'class': 'spinning', 'style': 'font-size: inherit;' }, _('Loading...')); + var avg = E('span', { 'class': 'spinning', 'style': 'font-size: inherit;' }, _('Loading...')); + var max = E('span', { 'class': 'spinning', 'style': 'font-size: inherit;' }, _('Loading...')); + + var onoff = '1', dest = '', delay = 3, period = '1', count = 10, allcount = 10, action = 'wan'; + var json = null; + + if (data != null) { + try { + json = JSON.parse(data); + + if (!("error" in json)) { + testtime = json.testtime || '-'; + min = json.min || '--.---'; + avg = json.avg || '--.---'; + max = json.max || '--.---'; + + if (min !== '--.---' && !min.includes('ms')) min = min + ' ms'; + if (avg !== '--.---' && !avg.includes('ms')) avg = avg + ' ms'; + if (max !== '--.---' && !max.includes('ms')) max = max + ' ms'; + + onoff = json.enable; + dest = json.dest; + var countdest = dest.split(','); + delay = parseInt(json.delay) / 60; + period = json.period; + count = parseInt(json.count); + allcount = parseInt(json.count) * countdest.length; + action = json.action; + } + } catch (err) { + console.log('Error parsing initial data: ', err.message); + } + } + + poll.add(function() { + setSpinner('testtime'); + setSpinner('min'); + setSpinner('avg'); + setSpinner('max'); + + return L.resolveDefault(fs.exec_direct('/usr/bin/lite-watchdog-data.sh', [ 'json' ])) + .then(function(res) { + if (!res) { + setText('testtime', '-'); + setText('min', '-'); + setText('avg', '-'); + setText('max', '-'); + return; + } + + var pjson; + try { pjson = JSON.parse(res); } catch(e) { return; } + if (!pjson) return; + + var pmin = (pjson.min || '').toString(); + var pavg = (pjson.avg || '').toString(); + var pmax = (pjson.max || '').toString(); + var ttime = (pjson.testtime || '').toString(); + var countz = (pjson.now_count || '0').toString(); + + if (countz === '' || parseInt(countz) < 0) countz = '0'; + + if (pmin !== '' && !pmin.includes('ms')) pmin = pmin + ' ms'; + if (pavg !== '' && !pavg.includes('ms')) pavg = pavg + ' ms'; + if (pmax !== '' && !pmax.includes('ms')) pmax = pmax + ' ms'; + + if (ttime === '' || ttime === '-') { + var waitingHTML = ' ' + _('Waiting for ping command execution...'); + setHTML('testtime', waitingHTML); + } else { + var timeHTML = ttime + ' (' + _('failed') + ' ' + countz + ' ' + _('out of') + ' ' + count + ')'; + setHTML('testtime', timeHTML); + } + + if (pmin === '' || pmin === '--.--- ms') { + setText('min', '-'); + setText('avg', '-'); + setText('max', '-'); + } else { + setText('min', pmin); + setText('avg', pavg); + setText('max', pmax); + } + }); + }, 60); + + var info = _('Configuration of the connection monitor known from the easyconfig package. More information on the %seko.one.pl forum%s.').format('', ''); + + m = new form.JSONMap(this.formdata, _('Connection monitor settings'), info); + + s = m.section(form.TypedSection, 'watchdog', '', _('')); + s.anonymous = true; + + s.render = L.bind(function(view, section_id) { + return E('div', { 'class': 'cbi-section' }, [ + E('h3', _('Information')), + E('table', { 'class': 'table' }, [ + E('tr', { 'class': 'tr' }, [ + E('td', { 'class': 'td left', 'width': '33%' }, [ _('Last check') ]), + E('td', { 'class': 'td left', 'id': 'testtime' }, [ testtime ]), + ]), + E('tr', { 'class': 'tr' }, [ + E('td', { 'class': 'td left', 'width': '33%' }, [ _('minimum') ]), + E('td', { 'class': 'td left', 'id': 'min' }, [ min ]), + ]), + E('tr', { 'class': 'tr' }, [ + E('td', { 'class': 'td left', 'width': '33%' }, [ _('average') ]), + E('td', { 'class': 'td left', 'id': 'avg' }, [ avg ]), + ]), + E('tr', { 'class': 'tr' }, [ + E('td', { 'class': 'td left', 'width': '33%' }, [ _('maximum') ]), + E('td', { 'class': 'td left', 'id': 'max' }, [ max ]), + ]), + ]) + ]); + }, o, this); + + s = m.section(form.TypedSection, 'watchdog', _('')); + s.anonymous = true; + s.addremove = false; + + if (json && !("error" in json)) { + s.tab('basic', _('Basic settings')); + + o = s.taboption('basic', form.Flag, 'enabled', _('Enabled'), + _('Enable a connection monitor.') + ); + o.rmempty = false; + o.default = onoff; + + o = s.taboption('basic', form.Value, 'delay', _('System startup delay'), + _('[1 - 59] minute(s)') + ); + o.default = delay || "3"; + o.rmempty = false; + o.validate = function(section_id, value) { + if (value.match(/^[0-9]+(?:\.[0-9]+)?$/) && +value >= 1 && +value < 60) + return true; + return _('Expect a decimal value between one and fifty-nine'); + }; + o.datatype = 'range(1, 59)'; + + o = s.taboption('basic', form.DynamicList, 'dest', _('Address or name'), _('Set test address (only one recommended).')); + o.default = dest ? dest.split(',') : "google.com"; + o.rmempty = false; + o.datatype = 'host'; + o.max = 3; + + o.validate = function(section_id, value) { + if (Array.isArray(value) && value.length > 3) { + return _('You can add up to 2 destinations.'); + } + return true; + }; + + o = s.taboption('basic', form.Value, 'period', _('Verification period'), + _('[1 - 59] minute(s)') + ); + o.default = period || "1"; + o.rmempty = false; + o.validate = function(section_id, value) { + if (value.match(/^[0-9]+(?:\.[0-9]+)?$/) && +value >= 1 && +value < 60) + return true; + return _('Expect a decimal value between one and fifty-nine'); + }; + o.datatype = 'range(1, 59)'; + + o = s.taboption('basic', form.Value, 'period_count', _('Number of failed checks'), + _('[1 - 59]') + ); + o.default = count || "10"; + o.rmempty = false; + o.validate = function(section_id, value) { + if (value.match(/^[0-9]+(?:\.[0-9]+)?$/) && +value >= 1 && +value < 60) + return true; + return _('Expect a decimal value between one and fifty-nine'); + }; + o.datatype = 'range(1, 59)'; + + o = s.taboption('basic', form.ListValue, 'action', _('Action')); + o.value('wan', _('Connection restart')); + o.value('reboot', _('Reboot')); + o.default = action || "wan"; + } + + return m.render(); + }, + + handleWATCHDOGSETup: function(ev) { + var map = document.querySelector('#maincontent .cbi-map'), + data = this.formdata; + + return dom.callClassMethod(map, 'save').then(function() { + var ax = (data.watchdog.enabled || '').toString(); + var ax2 = parseInt(data.watchdog.delay || 0) * 60; + var ax3 = (data.watchdog.dest || '').toString(); + var ax4 = (data.watchdog.period || '').toString(); + var ax5 = (data.watchdog.period_count || '').toString(); + var ax6 = (data.watchdog.action || '').toString(); + + return uci.load('watchdog').then(function() { + uci.set('watchdog', '@watchdog[0]', 'enabled', ax); + uci.set('watchdog', '@watchdog[0]', 'delay', ax2.toString()); + uci.set('watchdog', '@watchdog[0]', 'dest', ax3); + uci.set('watchdog', '@watchdog[0]', 'period', ax4); + uci.set('watchdog', '@watchdog[0]', 'period_count', ax5); + uci.set('watchdog', '@watchdog[0]', 'action', ax6); + uci.save(); + uci.apply(); + + }).then(function() { + return L.resolveDefault(fs.read('/etc/crontabs/root'), ''); + }).then(function(crontab) { + var lines = (crontab || '').replace(/\r\n/g, '\n').split('\n'); + var filtered = lines.filter(function(l) { + return l.trim() !== '' && !l.includes('watchdog'); + }); + + if (ax === '1') { + filtered.push('*/' + ax4 + ' * * * * /usr/bin/lite_watchdog.sh ' + ax2 + ' 3 "' + ax3 + '" ' + ax5 + ' ' + ax6); + } + + return fs.write('/etc/crontabs/root', filtered.join('\n') + '\n'); + }).then(function() { + return fs.exec('/etc/init.d/cron', ['restart']); + }).then(function() { + if (ax === '1') { + popTimeout(null, E('p', _('Changes have been saved. Connection Monitor has started.')), 5000, 'info'); + } else { + popTimeout(null, E('p', _('Changes have been saved. Connection Monitor is not running.')), 5000, 'info'); + } + }); + }); + }, + + addFooter: function() { + return E('div', { 'class': 'cbi-page-actions' }, [ + E('button', { + 'class': 'cbi-button cbi-button-save', + 'click': L.ui.createHandlerFn(this, 'handleWATCHDOGSETup') + }, [ _('Save') ]) + ]); + } + +}); diff --git a/luci-app-lite-watchdog/po/cs/watchdog.po b/luci-app-lite-watchdog/po/cs/watchdog.po new file mode 100644 index 000000000..181218785 --- /dev/null +++ b/luci-app-lite-watchdog/po/cs/watchdog.po @@ -0,0 +1,400 @@ +msgid "" +msgstr "" +"Language-Team: Rafał Wabik (IceG)\n" +"Language: cs\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=((n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2);\n" + +msgid "Connection Monitor" +msgstr "Monitor připojení" + +msgid "Connection monitor settings" +msgstr "Nastavení monitoru připojení" + +msgid "Configuration lite-watchdog" +msgstr "Konfigurace lite-watchdog" + +msgid "Configuration panel for lite-watchdog and gui application." +msgstr "Panel nastavení pro aplikaci lite-watchdog a uživatelské rozhraní." + +msgid "Interface" +msgstr "Rozhraní" + +msgid "Network interface for Internet access." +msgstr "Síťové rozhraní pro přístup na Internet." + +msgid "Port for communication with the modem" +msgstr "Port pro komunikaci s modemem" + +msgid "Select one of the available ttyUSBX ports." +msgstr "Vyberte jeden z dostupných portů ttyUSBX." + +msgid "Please select a port" +msgstr "Vyberte port" + +msgid "Perform a modem restart before resuming the connection." +msgstr "Proveďte restartování modemu před obnovením připojení." + +msgid "Restart modem with AT command" +msgstr "Restartování modemu příkazem AT" + +msgid "AT command to restart the modem." +msgstr "Příkaz AT pro restartování modemu." + +msgid "AT command" +msgstr "Příkaz AT" + +msgid "total checks" +msgstr "celkem kontrol" + +msgid "Configuration of the connection monitor known from the easyconfig package. More information on the %seko.one.pl forum%s." +msgstr "Konfigurace monitoru připojení známého z balíčku easyconfig. Více informací na %sfóru eko.one.pl%s." + +msgid "eko.one.pl forum" +msgstr "fórum eko.one.pl" + +msgid "Enable a connection monitor." +msgstr "Povolte monitor připojení." + +msgid "System startup delay" +msgstr "Zpoždění při spuštění systému" + +msgid "[1 - 59] minute(s)" +msgstr "[1 - 59] minut(-y)" + +msgid "Expect a decimal value between one and fifty-nine" +msgstr "Očekávána je desítková hodnota mezi jednou a padesáti devíti" + +msgid "Address or name" +msgstr "Adresa nebo název" + +msgid "Verification period" +msgstr "Období ověření" + +msgid "Number of failed checks" +msgstr "Počet neúspěšných kontrol" + +msgid "Action" +msgstr "Akce" + +msgid "Connection restart" +msgstr "Restartování připojení k internetu" + +msgid "Modem restart" +msgstr "Restartování modemu" + +msgid "Reboot" +msgstr "Restartování zařízení" + +msgid "Changes have been saved. Connection Monitor has started." +msgstr "Změny byly uloženy. Monitor připojení byl spuštěn." + +msgid "Changes have been saved. Connection Monitor is not running." +msgstr "Změny byly uloženy. Monitor připojení není spuštěn." + +msgid "Last check" +msgstr "Poslední kontrola" + +msgid "minimum" +msgstr "minimum" + +msgid "average" +msgstr "průměr" + +msgid "maximum" +msgstr "maximum" + +msgid "Information" +msgstr "Informace" + +msgid "Basic settings" +msgstr "Základní nastavení" + +msgid "failed" +msgstr "neúspěšných" + +msgid "Failed" +msgstr "Neúspěšných" + +msgid "out of" +msgstr "z" + +msgid "Activity log" +msgstr "Protokol aktivit" + +msgid "Wrong regular expression" +msgstr "Nesprávný regulární výraz" + +msgid "No matches..." +msgstr "Žádné výsledky..." + +msgid "Clear connection monitor log?" +msgstr "Vymazat protokol monitoru připojení?" + +msgid "Download error" +msgstr "Chyba stahování" + +msgid "Unable to load log data:" +msgstr "Nelze načíst data protokolu:" + +msgid "Entries filter" +msgstr "Filtr položek" + +msgid "Filter entries using regexp, press [Delete] to delete all text" +msgstr "Filtrujte položky pomocí regulárního výrazu, stiskněte [Delete] pro smazání veškerého textu" + +msgid "Refresh" +msgstr "Obnovit" + +msgid "Connection monitor activity log" +msgstr "Protokol aktivit monitoru připojení" + +msgid "Connection monitor activity log known from the easyconfig package. More information on the %seko.one.pl forum%s." +msgstr "Protokol aktivit monitoru připojení známý z balíčku easyconfig. Více informací na %sfóru eko.one.pl%s." + +msgid "Show only the last entries" +msgstr "Zobrazit pouze poslední položky" + +msgid "Message filter" +msgstr "Filtr zpráv" + +msgid "Refresh log" +msgstr "Obnovit protokol" + +msgid "Clear log" +msgstr "Vymazat protokol" + +msgid "Download log" +msgstr "Stáhnout protokol" + +msgid "Upload log file" +msgstr "Nahrát soubor protokolu" + +msgid "Type of messages" +msgstr "Typ zpráv" + +msgid "All actions" +msgstr "Všechny akce" + +msgid "Only connection problems" +msgstr "Pouze problémy s připojením" + +msgid "LED settings" +msgstr "Nastavení LED" + +msgid "The LED shows the internet connection status." +msgstr "LED indikátor zobrazuje stav připojení na Internet." + +msgid "Select the status LED." +msgstr "Vyberte LED indikátor stavu." + +msgid "Edit user script" +msgstr "Upravit uživatelský skript" + +msgid "Before executing the action, system calls a script in which user can place his own commands." +msgstr "Před provedením akce systém zavolá skript, do kterého může uživatel umístit své vlastní příkazy." + +msgid "Edit user script" +msgstr "Upravit uživatelský skript" + +msgid "User script" +msgstr "Uživatelský skript" + +msgid "User-defined commands." +msgstr "Příkazy definované uživatelem." + +msgid "Contents have been saved" +msgstr "Obsah byl uložen" + +msgid "Unable to save the contents" +msgstr "Obsah nelze uložit" + +msgid "Unable to read the contents" +msgstr "Obsah nelze načíst" + +msgid "Status" +msgstr "Stav" + +msgid "ONLINE" +msgstr "ONLINE" + +msgid "OFFLINE" +msgstr "OFFLINE" + +msgid "Action" +msgstr "Akce" + +msgid "Restarting interface" +msgstr "Restartování připojení k internetu" + +msgid "Reboot" +msgstr "Restartování zařízení" + +msgid "At command was sent to modem" +msgstr "Příkaz AT byl poslán do modemu" + +msgid "January" +msgstr "Leden" + +msgid "February" +msgstr "Únor" + +msgid "March" +msgstr "Březen" + +msgid "April" +msgstr "Duben" + +msgid "May" +msgstr "Květen" + +msgid "June" +msgstr "Červen" + +msgid "July" +msgstr "Červenec" + +msgid "August" +msgstr "Srpen" + +msgid "September" +msgstr "Září" + +msgid "October" +msgstr "Říjen" + +msgid "November" +msgstr "Listopad" + +msgid "December" +msgstr "Prosinec" + +msgid "Monday" +msgstr "Pondělí" + +msgid "Tuesday" +msgstr "Úterý" + +msgid "Wednesday" +msgstr "Středa" + +msgid "Thursday" +msgstr "Čtvrtek" + +msgid "Friday" +msgstr "Pátek" + +msgid "Saturday" +msgstr "Sobota" + +msgid "Sunday" +msgstr "Neděle" + +msgid "User Script Wizard" +msgstr "Průvodce uživatelským skriptem" + +msgid "Hint: You do not need to save anything in the settings. Select the actions and click the Generate button." +msgstr "Tip: Nemusíte nic ukládat v nastavení. Vyberte akce a klikněte na tlačítko Generovat." + +msgid "modem restart" +msgstr "restartování modemu" + +msgid "reboot" +msgstr "restartování zařízení" + +msgid "Restart modem if restarting the interfaces did not restore internet access." +msgstr "Restartujte modem, pokud restartování rozhraní neobnovilo přístup na Internet." + +msgid "Router reboot if restarting the interfaces did not restore internet access." +msgstr "Pokud restartování rozhraní neobnovilo přístup na Internet, restartujte router." + +msgid "Actions in script" +msgstr "Akce ve skriptu" + +msgid "Modem actions" +msgstr "Akce s modemem" + +msgid "Restart modem using at commands" +msgstr "Restartujte modem pomocí příkazů AT." + +msgid "effect depends on modem" +msgstr "efekt závisí na modemu" + +msgid "Some at commands can also restart the router." +msgstr "Některé příkazy AT mohou také restartovat router." + +msgid "soft restart" +msgstr "měkký restart" + +msgid "hard restart" +msgstr "tvrdý restart" + +msgid "Restart modem via GPIO." +msgstr "Restartování modemu přes GPIO." + +msgid "Restart modem using GPIO" +msgstr "Restartujte modem pomocí GPIO" + +msgid "Select the GPIO related to 4G/5G modem." +msgstr "Vyberte GPIO související s modemem 4G/5G." + +msgid "Generate a script" +msgstr "Vygenerujte skript" + +msgid "Generate user script" +msgstr "Vygenerujte uživatelský skript" + +msgid "Generate and save the prepared script." +msgstr "Vygenerujte a uložte připravený skript." + +msgid "User can add his script or generate a new one from the selection options." +msgstr "Uživatel může přidat svůj skript nebo vygenerovat nový z možností výběru." + +msgid "Set test address (only one recommended)." +msgstr "Nastavte testovací adresu (doporučuje se pouze jedna)." + +msgid "The available options depend on the previously defined main action (interface or router restart)." +msgstr "Dostupné možnosti závisí na dříve definované hlavní akci (restart rozhraní nebo routeru)." + +msgid "user code" +msgstr "uživatelský kód" + +msgid "Add custom commands before restarting the device." +msgstr "Před restartováním zařízení přidejte vlastní příkazy." + +msgid "from script:" +msgstr "ze skriptu:" + +msgid "USER-SCRIPT:" +msgstr "Uživatelský skript:" + +msgid "Soft modem restart" +msgstr "Měkký restart modemu" + +msgid "Hard modem restart" +msgstr "Tvrdý restart modemu" + +msgid "Space for user actions" +msgstr "Prostor pro uživatelské akce" + +msgid "Commands before main action" +msgstr "Příkazy před hlavní akcí" + +msgid "Commands after main action" +msgstr "Příkazy po hlavní akci" + +msgid "Loading..." +msgstr "Načítání..." + +msgid "Waiting for ping command execution..." +msgstr "Čekání na provedení příkazu ping..." + +msgid "Watchdog initialized" +msgstr "Watchdog inicializován" + +msgid "uptime" +msgstr "doba provozu" + +msgid "hosts" +msgstr "hostitele" diff --git a/luci-app-lite-watchdog/po/da/watchdog.po b/luci-app-lite-watchdog/po/da/watchdog.po new file mode 100644 index 000000000..a16d526ec --- /dev/null +++ b/luci-app-lite-watchdog/po/da/watchdog.po @@ -0,0 +1,400 @@ +msgid "" +msgstr "" +"Language-Team: Rafał Wabik (IceG)\n" +"Language: da\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +msgid "Connection Monitor" +msgstr "Forbindelsesmonitor" + +msgid "Connection monitor settings" +msgstr "Forbindelsesoritorindstillinger" + +msgid "Configuration lite-watchdog" +msgstr "Konfiguration af lite-watchdog" + +msgid "Configuration panel for lite-watchdog and gui application." +msgstr "Konfigurationspanel til lite-watchdog og GUI-applikation." + +msgid "Interface" +msgstr "Grænseflade" + +msgid "Network interface for Internet access." +msgstr "Netværksgraenseflade til internetadgang." + +msgid "Port for communication with the modem" +msgstr "Port til kommunikation med modemet" + +msgid "Select one of the available ttyUSBX ports." +msgstr "Vælg en af de tilgængelige ttyUSBX-porte." + +msgid "Please select a port" +msgstr "Vælg venligst en port" + +msgid "Perform a modem restart before resuming the connection." +msgstr "Udfør en modemgenstart inden forbindelsen genoptages." + +msgid "Restart modem with AT command" +msgstr "Genstart modem med AT-kommando" + +msgid "AT command to restart the modem." +msgstr "AT-kommando til at genstarte modemet." + +msgid "AT command" +msgstr "AT-kommando" + +msgid "total checks" +msgstr "i alt kontroler" + +msgid "Configuration of the connection monitor known from the easyconfig package. More information on the %seko.one.pl forum%s." +msgstr "Konfiguration af forbindelsesmonitoren kendt fra easyconfig-pakken. Mere information på %seko.one.pl-forummet%s." + +msgid "eko.one.pl forum" +msgstr "eko.one.pl-forum" + +msgid "Enable a connection monitor." +msgstr "Aktivér en forbindelsesmonitor." + +msgid "System startup delay" +msgstr "Systemstartsforsinkelses" + +msgid "[1 - 59] minute(s)" +msgstr "[1 - 59] minut(ter)" + +msgid "Expect a decimal value between one and fifty-nine" +msgstr "Forvent en decimalværdi mellem en og nioghalvtreds" + +msgid "Address or name" +msgstr "Adresse eller navn" + +msgid "Verification period" +msgstr "Verifikationsperiode" + +msgid "Number of failed checks" +msgstr "Antal mislykkede kontroler" + +msgid "Action" +msgstr "Handling" + +msgid "Connection restart" +msgstr "Forbindelsesgenstart" + +msgid "Modem restart" +msgstr "Modemgenstart" + +msgid "Reboot" +msgstr "Genstart enhed" + +msgid "Changes have been saved. Connection Monitor has started." +msgstr "Ændringer er blevet gemt. Forbindelsesmonitor er startet." + +msgid "Changes have been saved. Connection Monitor is not running." +msgstr "Ændringer er blevet gemt. Forbindelsesmonitor kører ikke." + +msgid "Last check" +msgstr "Sidste kontrol" + +msgid "minimum" +msgstr "minimum" + +msgid "average" +msgstr "gennemsnit" + +msgid "maximum" +msgstr "maksimum" + +msgid "Information" +msgstr "Information" + +msgid "Basic settings" +msgstr "Grundlæggende indstillinger" + +msgid "failed" +msgstr "mislykkede" + +msgid "Failed" +msgstr "Mislykkede" + +msgid "out of" +msgstr "ud af" + +msgid "Activity log" +msgstr "Aktivitetslog" + +msgid "Wrong regular expression" +msgstr "Forkert regulært udtryk" + +msgid "No matches..." +msgstr "Ingen resultater..." + +msgid "Clear connection monitor log?" +msgstr "Ryd forbindelsesmonitorlog?" + +msgid "Download error" +msgstr "Downloadfejl" + +msgid "Unable to load log data:" +msgstr "Kan ikke indlæse logdata:" + +msgid "Entries filter" +msgstr "Poster filter" + +msgid "Filter entries using regexp, press [Delete] to delete all text" +msgstr "Filtrer poster ved hjælp af regexp, tryk [Delete] for at slette al tekst" + +msgid "Refresh" +msgstr "Opdater" + +msgid "Connection monitor activity log" +msgstr "Forbindelsesoritoraktivitetslog" + +msgid "Connection monitor activity log known from the easyconfig package. More information on the %seko.one.pl forum%s." +msgstr "Forbindelsesoritoraktivitetslog kendt fra easyconfig-pakken. Mere information på %seko.one.pl-forummet%s." + +msgid "Show only the last entries" +msgstr "Vis kun de seneste poster" + +msgid "Message filter" +msgstr "Beskedfilter" + +msgid "Refresh log" +msgstr "Opdater log" + +msgid "Clear log" +msgstr "Ryd log" + +msgid "Download log" +msgstr "Download log" + +msgid "Upload log file" +msgstr "Upload logfil" + +msgid "Type of messages" +msgstr "Type af beskeder" + +msgid "All actions" +msgstr "Alle handlinger" + +msgid "Only connection problems" +msgstr "Kun forbindelsesproblemer" + +msgid "LED settings" +msgstr "LED-indstillinger" + +msgid "The LED shows the internet connection status." +msgstr "LED'en viser status for internetforbindelsen." + +msgid "Select the status LED." +msgstr "Vælg status-LED'en." + +msgid "Edit user script" +msgstr "Rediger brugerskript" + +msgid "Before executing the action, system calls a script in which user can place his own commands." +msgstr "Før udførelse af handlingen kalder systemet et script, hvor brugeren kan placere sine egne kommandoer." + +msgid "Edit user script" +msgstr "Rediger brugerskript" + +msgid "User script" +msgstr "Brugerskript" + +msgid "User-defined commands." +msgstr "Brugerdefinerede kommandoer." + +msgid "Contents have been saved" +msgstr "Indhold er blevet gemt" + +msgid "Unable to save the contents" +msgstr "Kan ikke gemme indholdet" + +msgid "Unable to read the contents" +msgstr "Kan ikke læse indholdet" + +msgid "Status" +msgstr "Status" + +msgid "ONLINE" +msgstr "ONLINE" + +msgid "OFFLINE" +msgstr "OFFLINE" + +msgid "Action" +msgstr "Handling" + +msgid "Restarting interface" +msgstr "Genstart forbindelse til internettet" + +msgid "Reboot" +msgstr "Genstart enhed" + +msgid "At command was sent to modem" +msgstr "AT-kommando blev sendt til modem" + +msgid "January" +msgstr "Januar" + +msgid "February" +msgstr "Februar" + +msgid "March" +msgstr "Marts" + +msgid "April" +msgstr "April" + +msgid "May" +msgstr "Maj" + +msgid "June" +msgstr "Juni" + +msgid "July" +msgstr "Juli" + +msgid "August" +msgstr "August" + +msgid "September" +msgstr "September" + +msgid "October" +msgstr "Oktober" + +msgid "November" +msgstr "November" + +msgid "December" +msgstr "December" + +msgid "Monday" +msgstr "Mandag" + +msgid "Tuesday" +msgstr "Tirsdag" + +msgid "Wednesday" +msgstr "Onsdag" + +msgid "Thursday" +msgstr "Torsdag" + +msgid "Friday" +msgstr "Fredag" + +msgid "Saturday" +msgstr "Lørdag" + +msgid "Sunday" +msgstr "Søndag" + +msgid "User Script Wizard" +msgstr "Brugerskript-guide" + +msgid "Hint: You do not need to save anything in the settings. Select the actions and click the Generate button." +msgstr "Tip: Du behøver ikke at gemme noget i indstillingerne. Vælg handlingerne og klik på Generer-knappen." + +msgid "modem restart" +msgstr "modemgenstart" + +msgid "reboot" +msgstr "enhedsgenstart" + +msgid "Restart modem if restarting the interfaces did not restore internet access." +msgstr "Genstart modemet, hvis genstart af grænsefladerne ikke gendannede internetadgangen." + +msgid "Router reboot if restarting the interfaces did not restore internet access." +msgstr "Hvis genstart af grænsefladerne ikke gendannede internetadgangen, skal du genstarte routeren." + +msgid "Actions in script" +msgstr "Handlinger i script" + +msgid "Modem actions" +msgstr "Modemhandlinger" + +msgid "Restart modem using at commands" +msgstr "Genstart modem ved hjælp af AT-kommandoer." + +msgid "effect depends on modem" +msgstr "effekten afhænger af modemet" + +msgid "Some at commands can also restart the router." +msgstr "Nogle AT-kommandoer kan også genstarte routeren." + +msgid "soft restart" +msgstr "blød genstart" + +msgid "hard restart" +msgstr "hård genstart" + +msgid "Restart modem via GPIO." +msgstr "Genstart modem via GPIO." + +msgid "Restart modem using GPIO" +msgstr "Genstart modem ved hjælp af GPIO" + +msgid "Select the GPIO related to 4G/5G modem." +msgstr "Vælg GPIO'en relateret til 4G/5G-modem." + +msgid "Generate a script" +msgstr "Generer et script" + +msgid "Generate user script" +msgstr "Generer brugerskript" + +msgid "Generate and save the prepared script." +msgstr "Generer og gem det forberedte script." + +msgid "User can add his script or generate a new one from the selection options." +msgstr "Brugeren kan tilføje sit script eller generere et nyt fra valgmulighederne." + +msgid "Set test address (only one recommended)." +msgstr "Indstil testadresse (kun én anbefalet)." + +msgid "The available options depend on the previously defined main action (interface or router restart)." +msgstr "De tilgængelige muligheder afhænger af den tidligere definerede hovedhandling (grænseflade- eller routergenstart)." + +msgid "user code" +msgstr "brugerkode" + +msgid "Add custom commands before restarting the device." +msgstr "Tilføj brugerdefinerede kommandoer før enhedsgenstart." + +msgid "from script:" +msgstr "fra script:" + +msgid "USER-SCRIPT:" +msgstr "BRUGERSKRIPT:" + +msgid "Soft modem restart" +msgstr "Blød modemgenstart" + +msgid "Hard modem restart" +msgstr "Hård modemgenstart" + +msgid "Space for user actions" +msgstr "Plads til brugerhandlinger" + +msgid "Commands before main action" +msgstr "Kommandoer før hovedhandling" + +msgid "Commands after main action" +msgstr "Kommandoer efter hovedhandling" + +msgid "Loading..." +msgstr "Indlæser..." + +msgid "Waiting for ping command execution..." +msgstr "Venter på udførelse af ping-kommando..." + +msgid "Watchdog initialized" +msgstr "Watchdog initialiseret" + +msgid "uptime" +msgstr "opetid" + +msgid "hosts" +msgstr "værtsmaskiner" diff --git a/luci-app-lite-watchdog/po/de/watchdog.po b/luci-app-lite-watchdog/po/de/watchdog.po new file mode 100644 index 000000000..0fc0e5e18 --- /dev/null +++ b/luci-app-lite-watchdog/po/de/watchdog.po @@ -0,0 +1,400 @@ +msgid "" +msgstr "" +"Language-Team: Rafał Wabik (IceG)\n" +"Language: de\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +msgid "Connection Monitor" +msgstr "Verbindungsmonitor" + +msgid "Connection monitor settings" +msgstr "Verbindungsmonitor-Einstellungen" + +msgid "Configuration lite-watchdog" +msgstr "Konfiguration lite-watchdog" + +msgid "Configuration panel for lite-watchdog and gui application." +msgstr "Konfigurationspanel für lite-watchdog und GUI-Anwendung." + +msgid "Interface" +msgstr "Schnittstelle" + +msgid "Network interface for Internet access." +msgstr "Netzwerkschnittstelle für den Internetzugang." + +msgid "Port for communication with the modem" +msgstr "Port für die Kommunikation mit dem Modem" + +msgid "Select one of the available ttyUSBX ports." +msgstr "Wählen Sie einen der verfügbaren ttyUSBX-Ports." + +msgid "Please select a port" +msgstr "Bitte wählen Sie einen Port" + +msgid "Perform a modem restart before resuming the connection." +msgstr "Starten Sie das Modem neu, bevor die Verbindung wieder aufgenommen wird." + +msgid "Restart modem with AT command" +msgstr "Modem mit AT-Befehl neu starten" + +msgid "AT command to restart the modem." +msgstr "AT-Befehl zum Neustart des Modems." + +msgid "AT command" +msgstr "AT-Befehl" + +msgid "total checks" +msgstr "Prüfungen insgesamt" + +msgid "Configuration of the connection monitor known from the easyconfig package. More information on the %seko.one.pl forum%s." +msgstr "Konfiguration des Verbindungsmonitors aus dem easyconfig-Paket. Weitere Informationen im %sForum eko.one.pl%s." + +msgid "eko.one.pl forum" +msgstr "Forum eko.one.pl" + +msgid "Enable a connection monitor." +msgstr "Verbindungsmonitor aktivieren." + +msgid "System startup delay" +msgstr "Systemstartverzögerung" + +msgid "[1 - 59] minute(s)" +msgstr "[1 - 59] Minute(n)" + +msgid "Expect a decimal value between one and fifty-nine" +msgstr "Es wird ein Dezimalwert zwischen eins und neunundfünfzig erwartet" + +msgid "Address or name" +msgstr "Adresse oder Name" + +msgid "Verification period" +msgstr "Überprüfungszeitraum" + +msgid "Number of failed checks" +msgstr "Anzahl fehlgeschlagener Prüfungen" + +msgid "Action" +msgstr "Aktion" + +msgid "Connection restart" +msgstr "Verbindungsneustart" + +msgid "Modem restart" +msgstr "Modem-Neustart" + +msgid "Reboot" +msgstr "Neustart" + +msgid "Changes have been saved. Connection Monitor has started." +msgstr "Änderungen wurden gespeichert. Verbindungsmonitor wurde gestartet." + +msgid "Changes have been saved. Connection Monitor is not running." +msgstr "Änderungen wurden gespeichert. Verbindungsmonitor läuft nicht." + +msgid "Last check" +msgstr "Letzte Prüfung" + +msgid "minimum" +msgstr "Minimum" + +msgid "average" +msgstr "Durchschnitt" + +msgid "maximum" +msgstr "Maximum" + +msgid "Information" +msgstr "Informationen" + +msgid "Basic settings" +msgstr "Grundeinstellungen" + +msgid "failed" +msgstr "fehlgeschlagen" + +msgid "Failed" +msgstr "Fehlgeschlagen" + +msgid "out of" +msgstr "von" + +msgid "Activity log" +msgstr "Aktivitätsprotokoll" + +msgid "Wrong regular expression" +msgstr "Falscher regulärer Ausdruck" + +msgid "No matches..." +msgstr "Keine Treffer..." + +msgid "Clear connection monitor log?" +msgstr "Verbindungsmonitor-Protokoll löschen?" + +msgid "Download error" +msgstr "Downloadfehler" + +msgid "Unable to load log data:" +msgstr "Protokolldaten können nicht geladen werden:" + +msgid "Entries filter" +msgstr "Eintragsfilter" + +msgid "Filter entries using regexp, press [Delete] to delete all text" +msgstr "Einträge mit regulärem Ausdruck filtern, [Delete] drücken um Text zu löschen" + +msgid "Refresh" +msgstr "Aktualisieren" + +msgid "Connection monitor activity log" +msgstr "Aktivitätsprotokoll des Verbindungsmonitors" + +msgid "Connection monitor activity log known from the easyconfig package. More information on the %seko.one.pl forum%s." +msgstr "Aktivitätsprotokoll des Verbindungsmonitors aus dem easyconfig-Paket. Weitere Informationen im %sForum eko.one.pl%s." + +msgid "Show only the last entries" +msgstr "Nur die letzten Einträge anzeigen" + +msgid "Message filter" +msgstr "Nachrichtenfilter" + +msgid "Refresh log" +msgstr "Protokoll aktualisieren" + +msgid "Clear log" +msgstr "Protokoll löschen" + +msgid "Download log" +msgstr "Protokoll herunterladen" + +msgid "Upload log file" +msgstr "Protokolldatei hochladen" + +msgid "Type of messages" +msgstr "Nachrichtentyp" + +msgid "All actions" +msgstr "Alle Aktionen" + +msgid "Only connection problems" +msgstr "Nur Verbindungsprobleme" + +msgid "LED settings" +msgstr "LED-Einstellungen" + +msgid "The LED shows the internet connection status." +msgstr "Die LED zeigt den Internetverbindungsstatus an." + +msgid "Select the status LED." +msgstr "Status-LED auswählen." + +msgid "Edit user script" +msgstr "Benutzerskript bearbeiten" + +msgid "Before executing the action, system calls a script in which user can place his own commands." +msgstr "Vor der Ausführung der Aktion ruft das System ein Skript auf, in dem der Benutzer eigene Befehle platzieren kann." + +msgid "Edit user script" +msgstr "Benutzerskript bearbeiten" + +msgid "User script" +msgstr "Benutzerskript" + +msgid "User-defined commands." +msgstr "Benutzerdefinierte Befehle." + +msgid "Contents have been saved" +msgstr "Inhalt wurde gespeichert" + +msgid "Unable to save the contents" +msgstr "Inhalt kann nicht gespeichert werden" + +msgid "Unable to read the contents" +msgstr "Inhalt kann nicht gelesen werden" + +msgid "Status" +msgstr "Status" + +msgid "ONLINE" +msgstr "ONLINE" + +msgid "OFFLINE" +msgstr "OFFLINE" + +msgid "Action" +msgstr "Aktion" + +msgid "Restarting interface" +msgstr "Schnittstelle wird neu gestartet" + +msgid "Reboot" +msgstr "Neustart" + +msgid "At command was sent to modem" +msgstr "AT-Befehl wurde an das Modem gesendet" + +msgid "January" +msgstr "Januar" + +msgid "February" +msgstr "Februar" + +msgid "March" +msgstr "März" + +msgid "April" +msgstr "April" + +msgid "May" +msgstr "Mai" + +msgid "June" +msgstr "Juni" + +msgid "July" +msgstr "Juli" + +msgid "August" +msgstr "August" + +msgid "September" +msgstr "September" + +msgid "October" +msgstr "Oktober" + +msgid "November" +msgstr "November" + +msgid "December" +msgstr "Dezember" + +msgid "Monday" +msgstr "Montag" + +msgid "Tuesday" +msgstr "Dienstag" + +msgid "Wednesday" +msgstr "Mittwoch" + +msgid "Thursday" +msgstr "Donnerstag" + +msgid "Friday" +msgstr "Freitag" + +msgid "Saturday" +msgstr "Samstag" + +msgid "Sunday" +msgstr "Sonntag" + +msgid "User Script Wizard" +msgstr "Benutzerskript-Assistent" + +msgid "Hint: You do not need to save anything in the settings. Select the actions and click the Generate button." +msgstr "Hinweis: Sie müssen nichts in den Einstellungen speichern. Wählen Sie die Aktionen aus und klicken Sie auf die Schaltfläche Generieren." + +msgid "modem restart" +msgstr "Modem-Neustart" + +msgid "reboot" +msgstr "Neustart" + +msgid "Restart modem if restarting the interfaces did not restore internet access." +msgstr "Starten Sie das Modem neu, wenn der Neustart der Schnittstellen keinen Internetzugang wiederhergestellt hat." + +msgid "Router reboot if restarting the interfaces did not restore internet access." +msgstr "Router neu starten, wenn der Neustart der Schnittstellen keinen Internetzugang wiederhergestellt hat." + +msgid "Actions in script" +msgstr "Aktionen im Skript" + +msgid "Modem actions" +msgstr "Modemaktionen" + +msgid "Restart modem using at commands" +msgstr "Modem mit AT-Befehlen neu starten" + +msgid "effect depends on modem" +msgstr "Wirkung hängt vom Modem ab" + +msgid "Some at commands can also restart the router." +msgstr "Einige AT-Befehle können auch den Router neu starten." + +msgid "soft restart" +msgstr "Soft-Neustart" + +msgid "hard restart" +msgstr "Hard-Neustart" + +msgid "Restart modem via GPIO." +msgstr "Modem über GPIO neu starten." + +msgid "Restart modem using GPIO" +msgstr "Modem über GPIO neu starten" + +msgid "Select the GPIO related to 4G/5G modem." +msgstr "GPIO für das 4G/5G-Modem auswählen." + +msgid "Generate a script" +msgstr "Skript generieren" + +msgid "Generate user script" +msgstr "Benutzerskript generieren" + +msgid "Generate and save the prepared script." +msgstr "Vorbereitetes Skript generieren und speichern." + +msgid "User can add his script or generate a new one from the selection options." +msgstr "Der Benutzer kann sein Skript hinzufügen oder ein neues aus den Auswahloptionen generieren." + +msgid "Set test address (only one recommended)." +msgstr "Testadresse festlegen (nur eine empfohlen)." + +msgid "The available options depend on the previously defined main action (interface or router restart)." +msgstr "Die verfügbaren Optionen hängen von der zuvor definierten Hauptaktion (Schnittstellen- oder Router-Neustart) ab." + +msgid "user code" +msgstr "Benutzercode" + +msgid "Add custom commands before restarting the device." +msgstr "Benutzerdefinierte Befehle hinzufügen, bevor das Gerät neu gestartet wird." + +msgid "from script:" +msgstr "aus Skript:" + +msgid "USER-SCRIPT:" +msgstr "BENUTZERSKRIPT:" + +msgid "Soft modem restart" +msgstr "Soft-Modem-Neustart" + +msgid "Hard modem restart" +msgstr "Hard-Modem-Neustart" + +msgid "Space for user actions" +msgstr "Platz für Benutzeraktionen" + +msgid "Commands before main action" +msgstr "Befehle vor der Hauptaktion" + +msgid "Commands after main action" +msgstr "Befehle nach der Hauptaktion" + +msgid "Loading..." +msgstr "Wird geladen..." + +msgid "Waiting for ping command execution..." +msgstr "Warte auf Ausführung des Ping-Befehls..." + +msgid "Watchdog initialized" +msgstr "Watchdog initialisiert" + +msgid "uptime" +msgstr "Betriebszeit" + +msgid "hosts" +msgstr "Hosts" diff --git a/luci-app-lite-watchdog/po/es/watchdog.po b/luci-app-lite-watchdog/po/es/watchdog.po new file mode 100644 index 000000000..9918a6726 --- /dev/null +++ b/luci-app-lite-watchdog/po/es/watchdog.po @@ -0,0 +1,391 @@ +msgid "" +msgstr "" +"Language-Team: Rafał Wabik (IceG)\n" +"Language: es\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +msgid "Connection Monitor" +msgstr "Monitor de conexión" + +msgid "Connection monitor settings" +msgstr "Ajustes del monitor de conexión" + +msgid "Configuration lite-watchdog" +msgstr "Configuración de lite-watchdog" + +msgid "Configuration panel for lite-watchdog and gui application." +msgstr "Panel de configuración para lite-watchdog y la aplicación GUI." + +msgid "Interface" +msgstr "Interfaz" + +msgid "Network interface for Internet access." +msgstr "Interfaz de red para el acceso a Internet." + +msgid "Port for communication with the modem" +msgstr "Puerto para comunicación con el módem" + +msgid "Select one of the available ttyUSBX ports." +msgstr "Seleccione uno de los puertos ttyUSBX disponibles." + +msgid "Please select a port" +msgstr "Por favor, seleccione un puerto" + +msgid "Perform a modem restart before resuming the connection." +msgstr "Realizar un reinicio del módem antes de reanudar la conexión." + +msgid "Restart modem with AT command" +msgstr "Reiniciar módem con comando AT" + +msgid "AT command to restart the modem." +msgstr "Comando AT para reiniciar el módem." + +msgid "AT command" +msgstr "Comando AT" + +msgid "total checks" +msgstr "total de comprobaciones" + +msgid "Configuration of the connection monitor known from the easyconfig package. More information on the %seko.one.pl forum%s." +msgstr "Configuración del monitor de conexión conocido del paquete easyconfig. Más información en el %sforo eko.one.pl%s." + +msgid "eko.one.pl forum" +msgstr "foro eko.one.pl" + +msgid "Enable a connection monitor." +msgstr "Activar monitor de conexión." + +msgid "System startup delay" +msgstr "Retraso de inicio del sistema" + +msgid "[1 - 59] minute(s)" +msgstr "[1 - 59] minuto(s)" + +msgid "Expect a decimal value between one and fifty-nine" +msgstr "Se espera un valor decimal entre uno y cincuenta y nueve" + +msgid "Address or name" +msgstr "Dirección o nombre" + +msgid "Verification period" +msgstr "Periodo de verificación" + +msgid "Number of failed checks" +msgstr "Número de comprobaciones fallidas" + +msgid "Action" +msgstr "Acción" + +msgid "Connection restart" +msgstr "Reiniciar conexión" + +msgid "Modem restart" +msgstr "Reiniciar módem" + +msgid "Reboot" +msgstr "Reiniciar dispositivo" + +msgid "Changes have been saved. Connection Monitor has started." +msgstr "Los cambios han sido guardados. El Monitor de conexión se ha iniciado." + +msgid "Changes have been saved. Connection Monitor is not running." +msgstr "Los cambios han sido guardados. El Monitor de conexión no está en ejecución." + +msgid "Last check" +msgstr "Última comprobación" + +msgid "minimum" +msgstr "mínimo" + +msgid "average" +msgstr "promedio" + +msgid "maximum" +msgstr "máximo" + +msgid "Information" +msgstr "Información" + +msgid "Basic settings" +msgstr "Ajustes básicos" + +msgid "failed" +msgstr "fallido" + +msgid "Failed" +msgstr "Fallido" + +msgid "out of" +msgstr "de" + +msgid "Activity log" +msgstr "Registro de actividad" + +msgid "Wrong regular expression" +msgstr "Expresión regular incorrecta" + +msgid "No matches..." +msgstr "Sin coincidencias..." + +msgid "Clear connection monitor log?" +msgstr "¿Borrar el registro del monitor de conexión?" + +msgid "Download error" +msgstr "Error de descarga" + +msgid "Unable to load log data:" +msgstr "No se pudo cargar los datos del registro:" + +msgid "Entries filter" +msgstr "Filtro de entradas" + +msgid "Filter entries using regexp, press [Delete] to delete all text" +msgstr "Filtrar entradas usando regexp, presione [Suprimir] para borrar todo el texto" + +msgid "Refresh" +msgstr "Actualizar" + +msgid "Connection monitor activity log" +msgstr "Registro de actividad del monitor de conexión" + +msgid "Connection monitor activity log known from the easyconfig package. More information on the %seko.one.pl forum%s." +msgstr "Registro de actividad del monitor de conexión conocido del paquete easyconfig. Más información en el %sforo eko.one.pl%s." + +msgid "Show only the last entries" +msgstr "Mostrar solo las últimas entradas" + +msgid "Message filter" +msgstr "Filtro de mensajes" + +msgid "Refresh log" +msgstr "Actualizar registro" + +msgid "Clear log" +msgstr "Borrar registro" + +msgid "Download log" +msgstr "Descargar registro" + +msgid "Upload log file" +msgstr "Subir archivo de registro" + +msgid "Type of messages" +msgstr "Tipo de mensajes" + +msgid "All actions" +msgstr "Todas las acciones" + +msgid "Only connection problems" +msgstr "Solo problemas de conexión" + +msgid "LED settings" +msgstr "Ajustes de LED" + +msgid "The LED shows the internet connection status." +msgstr "El LED muestra el estado de la conexión a Internet." + +msgid "Select the status LED." +msgstr "Seleccione el LED de estado." + +msgid "Edit user script" +msgstr "Editar script de usuario" + +msgid "Before executing the action, system calls a script in which user can place his own commands." +msgstr "Antes de ejecutar la acción, el sistema llama a un script donde el usuario puede colocar sus propios comandos." + +msgid "User script" +msgstr "Script de usuario" + +msgid "User-defined commands." +msgstr "Comandos definidos por el usuario." + +msgid "Contents have been saved" +msgstr "El contenido ha sido guardado" + +msgid "Unable to save the contents" +msgstr "No se pudo guardar el contenido" + +msgid "Unable to read the contents" +msgstr "No se pudo leer el contenido" + +msgid "Status" +msgstr "Estado" + +msgid "ONLINE" +msgstr "EN LÍNEA" + +msgid "OFFLINE" +msgstr "DESCONECTADO" + +msgid "Restarting interface" +msgstr "Reiniciando interfaz" + +msgid "At command was sent to modem" +msgstr "Se envió el comando AT al módem" + +msgid "January" +msgstr "Enero" + +msgid "February" +msgstr "Febrero" + +msgid "March" +msgstr "Marzo" + +msgid "April" +msgstr "Abril" + +msgid "May" +msgstr "Mayo" + +msgid "June" +msgstr "Junio" + +msgid "July" +msgstr "Julio" + +msgid "August" +msgstr "Agosto" + +msgid "September" +msgstr "Septiembre" + +msgid "October" +msgstr "Octubre" + +msgid "November" +msgstr "Noviembre" + +msgid "December" +msgstr "Diciembre" + +msgid "Monday" +msgstr "Lunes" + +msgid "Tuesday" +msgstr "Martes" + +msgid "Wednesday" +msgstr "Miércoles" + +msgid "Thursday" +msgstr "Jueves" + +msgid "Friday" +msgstr "Viernes" + +msgid "Saturday" +msgstr "Sábado" + +msgid "Sunday" +msgstr "Domingo" + +msgid "User Script Wizard" +msgstr "Asistente de script de usuario" + +msgid "Hint: You do not need to save anything in the settings. Select the actions and click the Generate button." +msgstr "Sugerencia: No necesita guardar nada en los ajustes. Seleccione las acciones y haga clic en el botón Generar." + +msgid "modem restart" +msgstr "reinicio de módem" + +msgid "reboot" +msgstr "reinicio de dispositivo" + +msgid "Restart modem if restarting the interfaces did not restore internet access." +msgstr "Reiniciar el módem si el reinicio de las interfaces no restauró el acceso a Internet." + +msgid "Router reboot if restarting the interfaces did not restore internet access." +msgstr "Reiniciar el router si el reinicio de las interfaces no restauró el acceso a Internet." + +msgid "Actions in script" +msgstr "Acciones en el script" + +msgid "Modem actions" +msgstr "Acciones del módem" + +msgid "Restart modem using at commands" +msgstr "Reiniciar módem usando comandos AT" + +msgid "effect depends on modem" +msgstr "el efecto depende del módem" + +msgid "Some at commands can also restart the router." +msgstr "Algunos comandos AT también pueden reiniciar el router." + +msgid "soft restart" +msgstr "reinicio suave (soft)" + +msgid "hard restart" +msgstr "reinicio forzado (hard)" + +msgid "Restart modem via GPIO." +msgstr "Reiniciar módem mediante GPIO." + +msgid "Restart modem using GPIO" +msgstr "Reiniciar módem usando GPIO" + +msgid "Select the GPIO related to 4G/5G modem." +msgstr "Seleccione el GPIO relacionado con el módem 4G/5G." + +msgid "Generate a script" +msgstr "Generar un script" + +msgid "Generate user script" +msgstr "Generar script de usuario" + +msgid "Generate and save the prepared script." +msgstr "Generar y guardar el script preparado." + +msgid "User can add his script or generate a new one from the selection options." +msgstr "El usuario puede añadir su propio script o generar uno nuevo desde las opciones de selección." + +msgid "Set test address (only one recommended)." +msgstr "Establecer dirección de prueba (se recomienda solo una)." + +msgid "The available options depend on the previously defined main action (interface or router restart)." +msgstr "Las opciones disponibles dependen de la acción principal definida previamente (reinicio de interfaz o de router)." + +msgid "user code" +msgstr "código de usuario" + +msgid "Add custom commands before restarting the device." +msgstr "Añadir comandos personalizados antes de reiniciar el dispositivo." + +msgid "from script:" +msgstr "del script:" + +msgid "USER-SCRIPT:" +msgstr "SCRIPT-USUARIO:" + +msgid "Soft modem restart" +msgstr "Reinicio de módem suave" + +msgid "Hard modem restart" +msgstr "Reinicio de módem forzado" + +msgid "Space for user actions" +msgstr "Espacio para acciones del usuario" + +msgid "Commands before main action" +msgstr "Comandos antes de la acción principal" + +msgid "Commands after main action" +msgstr "Comandos después de la acción principal" + +msgid "Loading..." +msgstr "Cargando..." + +msgid "Waiting for ping command execution..." +msgstr "Esperando la ejecución del comando ping..." + +msgid "Watchdog initialized" +msgstr "Watchdog inicializado" + +msgid "uptime" +msgstr "tiempo de actividad" + +msgid "hosts" +msgstr "hosts" diff --git a/luci-app-lite-watchdog/po/fr/watchdog.po b/luci-app-lite-watchdog/po/fr/watchdog.po new file mode 100644 index 000000000..6864c7c40 --- /dev/null +++ b/luci-app-lite-watchdog/po/fr/watchdog.po @@ -0,0 +1,400 @@ +msgid "" +msgstr "" +"Language-Team: Rafał Wabik (IceG)\n" +"Language: fr\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" + +msgid "Connection Monitor" +msgstr "Moniteur de connexion" + +msgid "Connection monitor settings" +msgstr "Paramètres du moniteur de connexion" + +msgid "Configuration lite-watchdog" +msgstr "Configuration lite-watchdog" + +msgid "Configuration panel for lite-watchdog and gui application." +msgstr "Panneau de configuration pour l'application lite-watchdog et l'interface graphique." + +msgid "Interface" +msgstr "Interface" + +msgid "Network interface for Internet access." +msgstr "Interface réseau pour l'accès à Internet." + +msgid "Port for communication with the modem" +msgstr "Port de communication avec le modem" + +msgid "Select one of the available ttyUSBX ports." +msgstr "Sélectionnez l'un des ports ttyUSBX disponibles." + +msgid "Please select a port" +msgstr "Veuillez sélectionner un port" + +msgid "Perform a modem restart before resuming the connection." +msgstr "Effectuez un redémarrage du modem avant de reprendre la connexion." + +msgid "Restart modem with AT command" +msgstr "Redémarrer le modem avec la commande AT" + +msgid "AT command to restart the modem." +msgstr "Commande AT pour redémarrer le modem." + +msgid "AT command" +msgstr "Commande AT" + +msgid "total checks" +msgstr "vérifications totales" + +msgid "Configuration of the connection monitor known from the easyconfig package. More information on the %seko.one.pl forum%s." +msgstr "Configuration du moniteur de connexion du paquet easyconfig. Plus d'informations sur le %sforum eko.one.pl%s." + +msgid "eko.one.pl forum" +msgstr "forum eko.one.pl" + +msgid "Enable a connection monitor." +msgstr "Activer un moniteur de connexion." + +msgid "System startup delay" +msgstr "Délai de démarrage du système" + +msgid "[1 - 59] minute(s)" +msgstr "[1 - 59] minute(s)" + +msgid "Expect a decimal value between one and fifty-nine" +msgstr "Une valeur décimale entre un et cinquante-neuf est attendue" + +msgid "Address or name" +msgstr "Adresse ou nom" + +msgid "Verification period" +msgstr "Période de vérification" + +msgid "Number of failed checks" +msgstr "Nombre de vérifications échouées" + +msgid "Action" +msgstr "Action" + +msgid "Connection restart" +msgstr "Redémarrage de la connexion" + +msgid "Modem restart" +msgstr "Redémarrage du modem" + +msgid "Reboot" +msgstr "Redémarrage" + +msgid "Changes have been saved. Connection Monitor has started." +msgstr "Les modifications ont été enregistrées. Le moniteur de connexion a démarré." + +msgid "Changes have been saved. Connection Monitor is not running." +msgstr "Les modifications ont été enregistrées. Le moniteur de connexion ne fonctionne pas." + +msgid "Last check" +msgstr "Dernière vérification" + +msgid "minimum" +msgstr "minimum" + +msgid "average" +msgstr "moyenne" + +msgid "maximum" +msgstr "maximum" + +msgid "Information" +msgstr "Informations" + +msgid "Basic settings" +msgstr "Paramètres de base" + +msgid "failed" +msgstr "échoué" + +msgid "Failed" +msgstr "Échoué" + +msgid "out of" +msgstr "sur" + +msgid "Activity log" +msgstr "Journal d'activité" + +msgid "Wrong regular expression" +msgstr "Expression régulière incorrecte" + +msgid "No matches..." +msgstr "Aucun résultat..." + +msgid "Clear connection monitor log?" +msgstr "Effacer le journal du moniteur de connexion ?" + +msgid "Download error" +msgstr "Erreur de téléchargement" + +msgid "Unable to load log data:" +msgstr "Impossible de charger les données du journal :" + +msgid "Entries filter" +msgstr "Filtre des entrées" + +msgid "Filter entries using regexp, press [Delete] to delete all text" +msgstr "Filtrer les entrées avec une expression régulière, appuyer sur [Suppr] pour supprimer tout le texte" + +msgid "Refresh" +msgstr "Actualiser" + +msgid "Connection monitor activity log" +msgstr "Journal d'activité du moniteur de connexion" + +msgid "Connection monitor activity log known from the easyconfig package. More information on the %seko.one.pl forum%s." +msgstr "Journal d'activité du moniteur de connexion du paquet easyconfig. Plus d'informations sur le %sforum eko.one.pl%s." + +msgid "Show only the last entries" +msgstr "Afficher uniquement les dernières entrées" + +msgid "Message filter" +msgstr "Filtre de messages" + +msgid "Refresh log" +msgstr "Actualiser le journal" + +msgid "Clear log" +msgstr "Effacer le journal" + +msgid "Download log" +msgstr "Télécharger le journal" + +msgid "Upload log file" +msgstr "Téléverser le fichier journal" + +msgid "Type of messages" +msgstr "Type de messages" + +msgid "All actions" +msgstr "Toutes les actions" + +msgid "Only connection problems" +msgstr "Problèmes de connexion uniquement" + +msgid "LED settings" +msgstr "Paramètres LED" + +msgid "The LED shows the internet connection status." +msgstr "La LED indique l'état de la connexion Internet." + +msgid "Select the status LED." +msgstr "Sélectionner la LED de statut." + +msgid "Edit user script" +msgstr "Modifier le script utilisateur" + +msgid "Before executing the action, system calls a script in which user can place his own commands." +msgstr "Avant d'exécuter l'action, le système appelle un script dans lequel l'utilisateur peut placer ses propres commandes." + +msgid "Edit user script" +msgstr "Modifier le script utilisateur" + +msgid "User script" +msgstr "Script utilisateur" + +msgid "User-defined commands." +msgstr "Commandes définies par l'utilisateur." + +msgid "Contents have been saved" +msgstr "Le contenu a été enregistré" + +msgid "Unable to save the contents" +msgstr "Impossible d'enregistrer le contenu" + +msgid "Unable to read the contents" +msgstr "Impossible de lire le contenu" + +msgid "Status" +msgstr "Statut" + +msgid "ONLINE" +msgstr "EN LIGNE" + +msgid "OFFLINE" +msgstr "HORS LIGNE" + +msgid "Action" +msgstr "Action" + +msgid "Restarting interface" +msgstr "Redémarrage de l'interface" + +msgid "Reboot" +msgstr "Redémarrage" + +msgid "At command was sent to modem" +msgstr "La commande AT a été envoyée au modem" + +msgid "January" +msgstr "Janvier" + +msgid "February" +msgstr "Février" + +msgid "March" +msgstr "Mars" + +msgid "April" +msgstr "Avril" + +msgid "May" +msgstr "Mai" + +msgid "June" +msgstr "Juin" + +msgid "July" +msgstr "Juillet" + +msgid "August" +msgstr "Août" + +msgid "September" +msgstr "Septembre" + +msgid "October" +msgstr "Octobre" + +msgid "November" +msgstr "Novembre" + +msgid "December" +msgstr "Décembre" + +msgid "Monday" +msgstr "Lundi" + +msgid "Tuesday" +msgstr "Mardi" + +msgid "Wednesday" +msgstr "Mercredi" + +msgid "Thursday" +msgstr "Jeudi" + +msgid "Friday" +msgstr "Vendredi" + +msgid "Saturday" +msgstr "Samedi" + +msgid "Sunday" +msgstr "Dimanche" + +msgid "User Script Wizard" +msgstr "Assistant de script utilisateur" + +msgid "Hint: You do not need to save anything in the settings. Select the actions and click the Generate button." +msgstr "Conseil : Vous n'avez pas besoin de sauvegarder quoi que ce soit dans les paramètres. Sélectionnez les actions et cliquez sur le bouton Générer." + +msgid "modem restart" +msgstr "redémarrage du modem" + +msgid "reboot" +msgstr "redémarrage" + +msgid "Restart modem if restarting the interfaces did not restore internet access." +msgstr "Redémarrez le modem si le redémarrage des interfaces n'a pas rétabli l'accès à Internet." + +msgid "Router reboot if restarting the interfaces did not restore internet access." +msgstr "Redémarrage du routeur si le redémarrage des interfaces n'a pas rétabli l'accès à Internet." + +msgid "Actions in script" +msgstr "Actions dans le script" + +msgid "Modem actions" +msgstr "Actions du modem" + +msgid "Restart modem using at commands" +msgstr "Redémarrer le modem avec des commandes AT" + +msgid "effect depends on modem" +msgstr "l'effet dépend du modem" + +msgid "Some at commands can also restart the router." +msgstr "Certaines commandes AT peuvent également redémarrer le routeur." + +msgid "soft restart" +msgstr "redémarrage logiciel" + +msgid "hard restart" +msgstr "redémarrage matériel" + +msgid "Restart modem via GPIO." +msgstr "Redémarrer le modem via GPIO." + +msgid "Restart modem using GPIO" +msgstr "Redémarrer le modem via GPIO" + +msgid "Select the GPIO related to 4G/5G modem." +msgstr "Sélectionner le GPIO associé au modem 4G/5G." + +msgid "Generate a script" +msgstr "Générer un script" + +msgid "Generate user script" +msgstr "Générer un script utilisateur" + +msgid "Generate and save the prepared script." +msgstr "Générer et sauvegarder le script préparé." + +msgid "User can add his script or generate a new one from the selection options." +msgstr "L'utilisateur peut ajouter son script ou en générer un nouveau à partir des options de sélection." + +msgid "Set test address (only one recommended)." +msgstr "Définir l'adresse de test (une seule recommandée)." + +msgid "The available options depend on the previously defined main action (interface or router restart)." +msgstr "Les options disponibles dépendent de l'action principale définie précédemment (redémarrage de l'interface ou du routeur)." + +msgid "user code" +msgstr "code utilisateur" + +msgid "Add custom commands before restarting the device." +msgstr "Ajouter des commandes personnalisées avant de redémarrer l'appareil." + +msgid "from script:" +msgstr "depuis le script :" + +msgid "USER-SCRIPT:" +msgstr "SCRIPT-UTILISATEUR :" + +msgid "Soft modem restart" +msgstr "Redémarrage logiciel du modem" + +msgid "Hard modem restart" +msgstr "Redémarrage matériel du modem" + +msgid "Space for user actions" +msgstr "Espace pour les actions utilisateur" + +msgid "Commands before main action" +msgstr "Commandes avant l'action principale" + +msgid "Commands after main action" +msgstr "Commandes après l'action principale" + +msgid "Loading..." +msgstr "Chargement..." + +msgid "Waiting for ping command execution..." +msgstr "En attente de l'exécution de la commande ping..." + +msgid "Watchdog initialized" +msgstr "Watchdog initialisé" + +msgid "uptime" +msgstr "disponibilité" + +msgid "hosts" +msgstr "hôtes" diff --git a/luci-app-lite-watchdog/po/it/watchdog.po b/luci-app-lite-watchdog/po/it/watchdog.po new file mode 100644 index 000000000..4b3cbb6d2 --- /dev/null +++ b/luci-app-lite-watchdog/po/it/watchdog.po @@ -0,0 +1,401 @@ +msgid "" +msgstr "" +"Language-Team: Rafał Wabik (IceG)\n" +"Language: lt\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"(n%100<10 || n%100>=20) ? 1 : 2);\n" + +msgid "Connection Monitor" +msgstr "Monitor connessione" + +msgid "Connection monitor settings" +msgstr "Impostazioni monitor connessione" + +msgid "Configuration lite-watchdog" +msgstr "Configurazione lite-watchdog" + +msgid "Configuration panel for lite-watchdog and gui application." +msgstr "Pannello di configurazione per l'applicazione lite-watchdog e GUI." + +msgid "Interface" +msgstr "Interfaccia" + +msgid "Network interface for Internet access." +msgstr "Interfaccia di rete per l'accesso a Internet." + +msgid "Port for communication with the modem" +msgstr "Porta per la comunicazione con il modem" + +msgid "Select one of the available ttyUSBX ports." +msgstr "Selezionare una delle porte ttyUSBX disponibili." + +msgid "Please select a port" +msgstr "Selezionare una porta" + +msgid "Perform a modem restart before resuming the connection." +msgstr "Eseguire un riavvio del modem prima di riprendere la connessione." + +msgid "Restart modem with AT command" +msgstr "Riavvia il modem con il comando AT" + +msgid "AT command to restart the modem." +msgstr "Comando AT per riavviare il modem." + +msgid "AT command" +msgstr "Comando AT" + +msgid "total checks" +msgstr "verifiche totali" + +msgid "Configuration of the connection monitor known from the easyconfig package. More information on the %seko.one.pl forum%s." +msgstr "Configurazione del monitor di connessione del pacchetto easyconfig. Ulteriori informazioni nel %sforum eko.one.pl%s." + +msgid "eko.one.pl forum" +msgstr "forum eko.one.pl" + +msgid "Enable a connection monitor." +msgstr "Attiva un monitor di connessione." + +msgid "System startup delay" +msgstr "Ritardo di avvio del sistema" + +msgid "[1 - 59] minute(s)" +msgstr "[1 - 59] minuto/i" + +msgid "Expect a decimal value between one and fifty-nine" +msgstr "Si attende un valore decimale tra uno e cinquantanove" + +msgid "Address or name" +msgstr "Indirizzo o nome" + +msgid "Verification period" +msgstr "Periodo di verifica" + +msgid "Number of failed checks" +msgstr "Numero di verifiche fallite" + +msgid "Action" +msgstr "Azione" + +msgid "Connection restart" +msgstr "Riavvio connessione" + +msgid "Modem restart" +msgstr "Riavvio modem" + +msgid "Reboot" +msgstr "Riavvio" + +msgid "Changes have been saved. Connection Monitor has started." +msgstr "Le modifiche sono state salvate. Il monitor di connessione è stato avviato." + +msgid "Changes have been saved. Connection Monitor is not running." +msgstr "Le modifiche sono state salvate. Il monitor di connessione non è in esecuzione." + +msgid "Last check" +msgstr "Ultima verifica" + +msgid "minimum" +msgstr "minimo" + +msgid "average" +msgstr "media" + +msgid "maximum" +msgstr "massimo" + +msgid "Information" +msgstr "Informazioni" + +msgid "Basic settings" +msgstr "Impostazioni di base" + +msgid "failed" +msgstr "fallite" + +msgid "Failed" +msgstr "Fallite" + +msgid "out of" +msgstr "su" + +msgid "Activity log" +msgstr "Registro attività" + +msgid "Wrong regular expression" +msgstr "Espressione regolare errata" + +msgid "No matches..." +msgstr "Nessun risultato..." + +msgid "Clear connection monitor log?" +msgstr "Cancellare il registro del monitor di connessione?" + +msgid "Download error" +msgstr "Errore di download" + +msgid "Unable to load log data:" +msgstr "Impossibile caricare i dati del registro:" + +msgid "Entries filter" +msgstr "Filtro voci" + +msgid "Filter entries using regexp, press [Delete] to delete all text" +msgstr "Filtrare le voci con espressione regolare, premere [Canc] per eliminare tutto il testo" + +msgid "Refresh" +msgstr "Aggiorna" + +msgid "Connection monitor activity log" +msgstr "Registro attività monitor connessione" + +msgid "Connection monitor activity log known from the easyconfig package. More information on the %seko.one.pl forum%s." +msgstr "Registro attività del monitor di connessione del pacchetto easyconfig. Ulteriori informazioni nel %sforum eko.one.pl%s." + +msgid "Show only the last entries" +msgstr "Mostra solo le ultime voci" + +msgid "Message filter" +msgstr "Filtro messaggi" + +msgid "Refresh log" +msgstr "Aggiorna registro" + +msgid "Clear log" +msgstr "Cancella registro" + +msgid "Download log" +msgstr "Scarica registro" + +msgid "Upload log file" +msgstr "Carica file registro" + +msgid "Type of messages" +msgstr "Tipo di messaggi" + +msgid "All actions" +msgstr "Tutte le azioni" + +msgid "Only connection problems" +msgstr "Solo problemi di connessione" + +msgid "LED settings" +msgstr "Impostazioni LED" + +msgid "The LED shows the internet connection status." +msgstr "Il LED mostra lo stato della connessione Internet." + +msgid "Select the status LED." +msgstr "Selezionare il LED di stato." + +msgid "Edit user script" +msgstr "Modifica script utente" + +msgid "Before executing the action, system calls a script in which user can place his own commands." +msgstr "Prima di eseguire l'azione, il sistema chiama uno script in cui l'utente può inserire i propri comandi." + +msgid "Edit user script" +msgstr "Modifica script utente" + +msgid "User script" +msgstr "Script utente" + +msgid "User-defined commands." +msgstr "Comandi definiti dall'utente." + +msgid "Contents have been saved" +msgstr "Il contenuto è stato salvato" + +msgid "Unable to save the contents" +msgstr "Impossibile salvare il contenuto" + +msgid "Unable to read the contents" +msgstr "Impossibile leggere il contenuto" + +msgid "Status" +msgstr "Stato" + +msgid "ONLINE" +msgstr "ONLINE" + +msgid "OFFLINE" +msgstr "OFFLINE" + +msgid "Action" +msgstr "Azione" + +msgid "Restarting interface" +msgstr "Riavvio interfaccia" + +msgid "Reboot" +msgstr "Riavvio" + +msgid "At command was sent to modem" +msgstr "Il comando AT è stato inviato al modem" + +msgid "January" +msgstr "Gennaio" + +msgid "February" +msgstr "Febbraio" + +msgid "March" +msgstr "Marzo" + +msgid "April" +msgstr "Aprile" + +msgid "May" +msgstr "Maggio" + +msgid "June" +msgstr "Giugno" + +msgid "July" +msgstr "Luglio" + +msgid "August" +msgstr "Agosto" + +msgid "September" +msgstr "Settembre" + +msgid "October" +msgstr "Ottobre" + +msgid "November" +msgstr "Novembre" + +msgid "December" +msgstr "Dicembre" + +msgid "Monday" +msgstr "Lunedì" + +msgid "Tuesday" +msgstr "Martedì" + +msgid "Wednesday" +msgstr "Mercoledì" + +msgid "Thursday" +msgstr "Giovedì" + +msgid "Friday" +msgstr "Venerdì" + +msgid "Saturday" +msgstr "Sabato" + +msgid "Sunday" +msgstr "Domenica" + +msgid "User Script Wizard" +msgstr "Procedura guidata script utente" + +msgid "Hint: You do not need to save anything in the settings. Select the actions and click the Generate button." +msgstr "Suggerimento: Non è necessario salvare nulla nelle impostazioni. Selezionare le azioni e fare clic sul pulsante Genera." + +msgid "modem restart" +msgstr "riavvio modem" + +msgid "reboot" +msgstr "riavvio" + +msgid "Restart modem if restarting the interfaces did not restore internet access." +msgstr "Riavviare il modem se il riavvio delle interfacce non ha ripristinato l'accesso a Internet." + +msgid "Router reboot if restarting the interfaces did not restore internet access." +msgstr "Riavvio del router se il riavvio delle interfacce non ha ripristinato l'accesso a Internet." + +msgid "Actions in script" +msgstr "Azioni nello script" + +msgid "Modem actions" +msgstr "Azioni modem" + +msgid "Restart modem using at commands" +msgstr "Riavvia il modem con i comandi AT" + +msgid "effect depends on modem" +msgstr "l'effetto dipende dal modem" + +msgid "Some at commands can also restart the router." +msgstr "Alcuni comandi AT possono anche riavviare il router." + +msgid "soft restart" +msgstr "riavvio software" + +msgid "hard restart" +msgstr "riavvio hardware" + +msgid "Restart modem via GPIO." +msgstr "Riavvia il modem tramite GPIO." + +msgid "Restart modem using GPIO" +msgstr "Riavvia il modem tramite GPIO" + +msgid "Select the GPIO related to 4G/5G modem." +msgstr "Selezionare il GPIO relativo al modem 4G/5G." + +msgid "Generate a script" +msgstr "Genera uno script" + +msgid "Generate user script" +msgstr "Genera script utente" + +msgid "Generate and save the prepared script." +msgstr "Genera e salva lo script preparato." + +msgid "User can add his script or generate a new one from the selection options." +msgstr "L'utente può aggiungere il proprio script o generarne uno nuovo dalle opzioni di selezione." + +msgid "Set test address (only one recommended)." +msgstr "Impostare l'indirizzo di test (si consiglia solo uno)." + +msgid "The available options depend on the previously defined main action (interface or router restart)." +msgstr "Le opzioni disponibili dipendono dall'azione principale definita in precedenza (riavvio dell'interfaccia o del router)." + +msgid "user code" +msgstr "codice utente" + +msgid "Add custom commands before restarting the device." +msgstr "Aggiungere comandi personalizzati prima di riavviare il dispositivo." + +msgid "from script:" +msgstr "dallo script:" + +msgid "USER-SCRIPT:" +msgstr "SCRIPT-UTENTE:" + +msgid "Soft modem restart" +msgstr "Riavvio software del modem" + +msgid "Hard modem restart" +msgstr "Riavvio hardware del modem" + +msgid "Space for user actions" +msgstr "Spazio per le azioni utente" + +msgid "Commands before main action" +msgstr "Comandi prima dell'azione principale" + +msgid "Commands after main action" +msgstr "Comandi dopo l'azione principale" + +msgid "Loading..." +msgstr "Caricamento..." + +msgid "Waiting for ping command execution..." +msgstr "In attesa dell'esecuzione del comando ping..." + +msgid "Watchdog initialized" +msgstr "Watchdog inizializzato" + +msgid "uptime" +msgstr "disponibilità" + +msgid "hosts" +msgstr "host" diff --git a/luci-app-lite-watchdog/po/ja/watchdog.po b/luci-app-lite-watchdog/po/ja/watchdog.po new file mode 100644 index 000000000..d030479b6 --- /dev/null +++ b/luci-app-lite-watchdog/po/ja/watchdog.po @@ -0,0 +1,399 @@ +msgid "" +msgstr "" +"Language: ja\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Connection Monitor" +msgstr "接続モニター" + +msgid "Connection monitor settings" +msgstr "接続モニター設定" + +msgid "Configuration lite-watchdog" +msgstr "lite-watchdog設定" + +msgid "Configuration panel for lite-watchdog and gui application." +msgstr "lite-watchdogおよびGUIアプリケーションの設定パネル。" + +msgid "Interface" +msgstr "インターフェース" + +msgid "Network interface for Internet access." +msgstr "インターネットアクセス用ネットワークインターフェース。" + +msgid "Port for communication with the modem" +msgstr "モデムとの通信用ポート" + +msgid "Select one of the available ttyUSBX ports." +msgstr "利用可能なttyUSBXポートから1つを選択してください。" + +msgid "Please select a port" +msgstr "ポートを選択してください" + +msgid "Perform a modem restart before resuming the connection." +msgstr "接続を再開する前にモデムを再起動します。" + +msgid "Restart modem with AT command" +msgstr "ATコマンドでモデムを再起動" + +msgid "AT command to restart the modem." +msgstr "モデムを再起動するATコマンド。" + +msgid "AT command" +msgstr "ATコマンド" + +msgid "total checks" +msgstr "合計チェック数" + +msgid "Configuration of the connection monitor known from the easyconfig package. More information on the %seko.one.pl forum%s." +msgstr "easyconfigパッケージで知られている接続モニターの設定。詳しくは%seko.one.plフォーラム%sを参照。" + +msgid "eko.one.pl forum" +msgstr "eko.one.plフォーラム" + +msgid "Enable a connection monitor." +msgstr "接続モニターを有効にします。" + +msgid "System startup delay" +msgstr "システム起動遅延" + +msgid "[1 - 59] minute(s)" +msgstr "[1~59]分" + +msgid "Expect a decimal value between one and fifty-nine" +msgstr "1から59までの10進値を指定してください" + +msgid "Address or name" +msgstr "アドレスまたは名前" + +msgid "Verification period" +msgstr "検証期間" + +msgid "Number of failed checks" +msgstr "失敗したチェック数" + +msgid "Action" +msgstr "アクション" + +msgid "Connection restart" +msgstr "接続再起動" + +msgid "Modem restart" +msgstr "モデム再起動" + +msgid "Reboot" +msgstr "再起動" + +msgid "Changes have been saved. Connection Monitor has started." +msgstr "変更が保存されました。接続モニターが開始されました。" + +msgid "Changes have been saved. Connection Monitor is not running." +msgstr "変更が保存されました。接続モニターは実行されていません。" + +msgid "Last check" +msgstr "最後のチェック" + +msgid "minimum" +msgstr "最小" + +msgid "average" +msgstr "平均" + +msgid "maximum" +msgstr "最大" + +msgid "Information" +msgstr "情報" + +msgid "Basic settings" +msgstr "基本設定" + +msgid "failed" +msgstr "失敗" + +msgid "Failed" +msgstr "失敗" + +msgid "out of" +msgstr "~の中" + +msgid "Activity log" +msgstr "アクティビティログ" + +msgid "Wrong regular expression" +msgstr "正規表現が間違っています" + +msgid "No matches..." +msgstr "マッチしませんでした..." + +msgid "Clear connection monitor log?" +msgstr "接続モニターログをクリアしますか?" + +msgid "Download error" +msgstr "ダウンロードエラー" + +msgid "Unable to load log data:" +msgstr "ログデータを読み込めません:" + +msgid "Entries filter" +msgstr "エントリフィルター" + +msgid "Filter entries using regexp, press [Delete] to delete all text" +msgstr "正規表現を使用してエントリをフィルター処理し、[削除]を押して全テキストを削除" + +msgid "Refresh" +msgstr "更新" + +msgid "Connection monitor activity log" +msgstr "接続モニターアクティビティログ" + +msgid "Connection monitor activity log known from the easyconfig package. More information on the %seko.one.pl forum%s." +msgstr "easyconfigパッケージで知られている接続モニターアクティビティログ。詳しくは%seko.one.plフォーラム%sを参照。" + +msgid "Show only the last entries" +msgstr "最後のエントリのみ表示" + +msgid "Message filter" +msgstr "メッセージフィルター" + +msgid "Refresh log" +msgstr "ログを更新" + +msgid "Clear log" +msgstr "ログをクリア" + +msgid "Download log" +msgstr "ログをダウンロード" + +msgid "Upload log file" +msgstr "ログファイルをアップロード" + +msgid "Type of messages" +msgstr "メッセージの種類" + +msgid "All actions" +msgstr "すべてのアクション" + +msgid "Only connection problems" +msgstr "接続の問題のみ" + +msgid "LED settings" +msgstr "LED設定" + +msgid "The LED shows the internet connection status." +msgstr "LEDはインターネット接続ステータスを表示します。" + +msgid "Select the status LED." +msgstr "ステータスLEDを選択します。" + +msgid "Edit user script" +msgstr "ユーザースクリプトを編集" + +msgid "Before executing the action, system calls a script in which user can place his own commands." +msgstr "アクション実行前にシステムがスクリプトを呼び出し、ユーザーが独自のコマンドを配置できます。" + +msgid "Edit user script" +msgstr "ユーザースクリプトを編集" + +msgid "User script" +msgstr "ユーザースクリプト" + +msgid "User-defined commands." +msgstr "ユーザー定義コマンド。" + +msgid "Contents have been saved" +msgstr "コンテンツが保存されました" + +msgid "Unable to save the contents" +msgstr "コンテンツを保存できません" + +msgid "Unable to read the contents" +msgstr "コンテンツを読み込めません" + +msgid "Status" +msgstr "ステータス" + +msgid "ONLINE" +msgstr "オンライン" + +msgid "OFFLINE" +msgstr "オフライン" + +msgid "Action" +msgstr "アクション" + +msgid "Restarting interface" +msgstr "インターフェースを再起動中" + +msgid "Reboot" +msgstr "再起動" + +msgid "At command was sent to modem" +msgstr "ATコマンドがモデムに送信されました" + +msgid "January" +msgstr "1月" + +msgid "February" +msgstr "2月" + +msgid "March" +msgstr "3月" + +msgid "April" +msgstr "4月" + +msgid "May" +msgstr "5月" + +msgid "June" +msgstr "6月" + +msgid "July" +msgstr "7月" + +msgid "August" +msgstr "8月" + +msgid "September" +msgstr "9月" + +msgid "October" +msgstr "10月" + +msgid "November" +msgstr "11月" + +msgid "December" +msgstr "12月" + +msgid "Monday" +msgstr "月曜日" + +msgid "Tuesday" +msgstr "火曜日" + +msgid "Wednesday" +msgstr "水曜日" + +msgid "Thursday" +msgstr "木曜日" + +msgid "Friday" +msgstr "金曜日" + +msgid "Saturday" +msgstr "土曜日" + +msgid "Sunday" +msgstr "日曜日" + +msgid "User Script Wizard" +msgstr "ユーザースクリプトウィザード" + +msgid "Hint: You do not need to save anything in the settings. Select the actions and click the Generate button." +msgstr "ヒント:設定に何も保存する必要はありません。アクションを選択して[生成]ボタンをクリックします。" + +msgid "modem restart" +msgstr "モデム再起動" + +msgid "reboot" +msgstr "再起動" + +msgid "Restart modem if restarting the interfaces did not restore internet access." +msgstr "インターフェースの再起動がインターネットアクセスを復元しなかった場合、モデムを再起動します。" + +msgid "Router reboot if restarting the interfaces did not restore internet access." +msgstr "インターフェースの再起動がインターネットアクセスを復元しなかった場合、ルーターを再起動します。" + +msgid "Actions in script" +msgstr "スクリプト内のアクション" + +msgid "Modem actions" +msgstr "モデムアクション" + +msgid "Restart modem using at commands" +msgstr "ATコマンドを使用してモデムを再起動" + +msgid "effect depends on modem" +msgstr "効果はモデムに依存します" + +msgid "Some at commands can also restart the router." +msgstr "一部のATコマンドはルーターの再起動も可能です。" + +msgid "soft restart" +msgstr "ソフト再起動" + +msgid "hard restart" +msgstr "ハード再起動" + +msgid "Restart modem via GPIO." +msgstr "GPIOを介してモデムを再起動します。" + +msgid "Restart modem using GPIO" +msgstr "GPIOを使用してモデムを再起動" + +msgid "Select the GPIO related to 4G/5G modem." +msgstr "4G/5Gモデムに関連するGPIOを選択します。" + +msgid "Generate a script" +msgstr "スクリプトを生成" + +msgid "Generate user script" +msgstr "ユーザースクリプトを生成" + +msgid "Generate and save the prepared script." +msgstr "準備されたスクリプトを生成して保存します。" + +msgid "User can add his script or generate a new one from the selection options." +msgstr "ユーザーは独自のスクリプトを追加するか、選択オプションから新しいスクリプトを生成できます。" + +msgid "Set test address (only one recommended)." +msgstr "テストアドレスを設定(1つのみ推奨)。" + +msgid "The available options depend on the previously defined main action (interface or router restart)." +msgstr "利用可能なオプションは、以前に定義されたメインアクション(インターフェースまたはルーター再起動)に依存します。" + +msgid "user code" +msgstr "ユーザーコード" + +msgid "Add custom commands before restarting the device." +msgstr "デバイスを再起動する前にカスタムコマンドを追加します。" + +msgid "from script:" +msgstr "スクリプトから:" + +msgid "USER-SCRIPT:" +msgstr "ユーザースクリプト:" + +msgid "Soft modem restart" +msgstr "モデムソフト再起動" + +msgid "Hard modem restart" +msgstr "モデムハード再起動" + +msgid "Space for user actions" +msgstr "ユーザーアクションのスペース" + +msgid "Commands before main action" +msgstr "メインアクション前のコマンド" + +msgid "Commands after main action" +msgstr "メインアクション後のコマンド" + +msgid "Loading..." +msgstr "読み込み中..." + +msgid "Waiting for ping command execution..." +msgstr "pingコマンド実行を待機中..." + +msgid "Watchdog initialized" +msgstr "ウォッチドッグが初期化されました" + +msgid "uptime" +msgstr "アップタイム" + +msgid "hosts" +msgstr "ホスト" diff --git a/luci-app-lite-watchdog/po/ko/watchdog.po b/luci-app-lite-watchdog/po/ko/watchdog.po new file mode 100644 index 000000000..7bdeeb2f4 --- /dev/null +++ b/luci-app-lite-watchdog/po/ko/watchdog.po @@ -0,0 +1,399 @@ +msgid "" +msgstr "" +"Language: ko\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Connection Monitor" +msgstr "연결 모니터" + +msgid "Connection monitor settings" +msgstr "연결 모니터 설정" + +msgid "Configuration lite-watchdog" +msgstr "lite-watchdog 설정" + +msgid "Configuration panel for lite-watchdog and gui application." +msgstr "lite-watchdog 및 GUI 응용 프로그램의 설정 패널입니다." + +msgid "Interface" +msgstr "인터페이스" + +msgid "Network interface for Internet access." +msgstr "인터넷 접속용 네트워크 인터페이스." + +msgid "Port for communication with the modem" +msgstr "모뎀과의 통신용 포트" + +msgid "Select one of the available ttyUSBX ports." +msgstr "사용 가능한 ttyUSBX 포트 중 하나를 선택하세요." + +msgid "Please select a port" +msgstr "포트를 선택하세요" + +msgid "Perform a modem restart before resuming the connection." +msgstr "연결을 재개하기 전에 모뎀을 다시 시작합니다." + +msgid "Restart modem with AT command" +msgstr "AT 명령으로 모뎀 다시 시작" + +msgid "AT command to restart the modem." +msgstr "모뎀을 다시 시작하는 AT 명령입니다." + +msgid "AT command" +msgstr "AT 명령" + +msgid "total checks" +msgstr "총 검사" + +msgid "Configuration of the connection monitor known from the easyconfig package. More information on the %seko.one.pl forum%s." +msgstr "easyconfig 패키지에서 알려진 연결 모니터 구성입니다. %seko.one.pl 포럼%s에서 자세한 정보를 확인하세요." + +msgid "eko.one.pl forum" +msgstr "eko.one.pl 포럼" + +msgid "Enable a connection monitor." +msgstr "연결 모니터를 활성화합니다." + +msgid "System startup delay" +msgstr "시스템 시작 지연" + +msgid "[1 - 59] minute(s)" +msgstr "[1~59]분" + +msgid "Expect a decimal value between one and fifty-nine" +msgstr "1에서 59 사이의 10진수 값을 입력하세요" + +msgid "Address or name" +msgstr "주소 또는 이름" + +msgid "Verification period" +msgstr "검증 기간" + +msgid "Number of failed checks" +msgstr "실패한 검사 수" + +msgid "Action" +msgstr "작업" + +msgid "Connection restart" +msgstr "연결 재시작" + +msgid "Modem restart" +msgstr "모뎀 재시작" + +msgid "Reboot" +msgstr "다시 시작" + +msgid "Changes have been saved. Connection Monitor has started." +msgstr "변경 사항이 저장되었습니다. 연결 모니터가 시작되었습니다." + +msgid "Changes have been saved. Connection Monitor is not running." +msgstr "변경 사항이 저장되었습니다. 연결 모니터가 실행되지 않습니다." + +msgid "Last check" +msgstr "마지막 검사" + +msgid "minimum" +msgstr "최소" + +msgid "average" +msgstr "평균" + +msgid "maximum" +msgstr "최대" + +msgid "Information" +msgstr "정보" + +msgid "Basic settings" +msgstr "기본 설정" + +msgid "failed" +msgstr "실패" + +msgid "Failed" +msgstr "실패" + +msgid "out of" +msgstr "~의" + +msgid "Activity log" +msgstr "활동 로그" + +msgid "Wrong regular expression" +msgstr "정규식이 잘못되었습니다" + +msgid "No matches..." +msgstr "일치하는 항목이 없습니다..." + +msgid "Clear connection monitor log?" +msgstr "연결 모니터 로그를 삭제하시겠습니까?" + +msgid "Download error" +msgstr "다운로드 오류" + +msgid "Unable to load log data:" +msgstr "로그 데이터를 로드할 수 없습니다:" + +msgid "Entries filter" +msgstr "항목 필터" + +msgid "Filter entries using regexp, press [Delete] to delete all text" +msgstr "정규식을 사용하여 항목을 필터링하고, [삭제]를 눌러 모든 텍스트 삭제" + +msgid "Refresh" +msgstr "새로고침" + +msgid "Connection monitor activity log" +msgstr "연결 모니터 활동 로그" + +msgid "Connection monitor activity log known from the easyconfig package. More information on the %seko.one.pl forum%s." +msgstr "easyconfig 패키지에서 알려진 연결 모니터 활동 로그입니다. %seko.one.pl 포럼%s에서 자세한 정보를 확인하세요." + +msgid "Show only the last entries" +msgstr "마지막 항목만 표시" + +msgid "Message filter" +msgstr "메시지 필터" + +msgid "Refresh log" +msgstr "로그 새로고침" + +msgid "Clear log" +msgstr "로그 삭제" + +msgid "Download log" +msgstr "로그 다운로드" + +msgid "Upload log file" +msgstr "로그 파일 업로드" + +msgid "Type of messages" +msgstr "메시지 유형" + +msgid "All actions" +msgstr "모든 작업" + +msgid "Only connection problems" +msgstr "연결 문제만" + +msgid "LED settings" +msgstr "LED 설정" + +msgid "The LED shows the internet connection status." +msgstr "LED는 인터넷 연결 상태를 표시합니다." + +msgid "Select the status LED." +msgstr "상태 LED를 선택합니다." + +msgid "Edit user script" +msgstr "사용자 스크립트 편집" + +msgid "Before executing the action, system calls a script in which user can place his own commands." +msgstr "작업 실행 전에 시스템이 사용자가 고유한 명령을 배치할 수 있는 스크립트를 호출합니다." + +msgid "Edit user script" +msgstr "사용자 스크립트 편집" + +msgid "User script" +msgstr "사용자 스크립트" + +msgid "User-defined commands." +msgstr "사용자 정의 명령." + +msgid "Contents have been saved" +msgstr "콘텐츠가 저장되었습니다" + +msgid "Unable to save the contents" +msgstr "콘텐츠를 저장할 수 없습니다" + +msgid "Unable to read the contents" +msgstr "콘텐츠를 읽을 수 없습니다" + +msgid "Status" +msgstr "상태" + +msgid "ONLINE" +msgstr "온라인" + +msgid "OFFLINE" +msgstr "오프라인" + +msgid "Action" +msgstr "작업" + +msgid "Restarting interface" +msgstr "인터페이스 재시작 중" + +msgid "Reboot" +msgstr "다시 시작" + +msgid "At command was sent to modem" +msgstr "AT 명령이 모뎀으로 전송되었습니다" + +msgid "January" +msgstr "1월" + +msgid "February" +msgstr "2월" + +msgid "March" +msgstr "3월" + +msgid "April" +msgstr "4월" + +msgid "May" +msgstr "5월" + +msgid "June" +msgstr "6월" + +msgid "July" +msgstr "7월" + +msgid "August" +msgstr "8월" + +msgid "September" +msgstr "9월" + +msgid "October" +msgstr "10월" + +msgid "November" +msgstr "11월" + +msgid "December" +msgstr "12월" + +msgid "Monday" +msgstr "월요일" + +msgid "Tuesday" +msgstr "화요일" + +msgid "Wednesday" +msgstr "수요일" + +msgid "Thursday" +msgstr "목요일" + +msgid "Friday" +msgstr "금요일" + +msgid "Saturday" +msgstr "토요일" + +msgid "Sunday" +msgstr "일요일" + +msgid "User Script Wizard" +msgstr "사용자 스크립트 마법사" + +msgid "Hint: You do not need to save anything in the settings. Select the actions and click the Generate button." +msgstr "힌트: 설정에 아무것도 저장할 필요가 없습니다. 작업을 선택하고 [생성] 버튼을 클릭합니다." + +msgid "modem restart" +msgstr "모뎀 재시작" + +msgid "reboot" +msgstr "재시작" + +msgid "Restart modem if restarting the interfaces did not restore internet access." +msgstr "인터페이스 재시작이 인터넷 액세스를 복구하지 못한 경우 모뎀을 재시작합니다." + +msgid "Router reboot if restarting the interfaces did not restore internet access." +msgstr "인터페이스 재시작이 인터넷 액세스를 복구하지 못한 경우 라우터를 재시작합니다." + +msgid "Actions in script" +msgstr "스크립트의 작업" + +msgid "Modem actions" +msgstr "모뎀 작업" + +msgid "Restart modem using at commands" +msgstr "AT 명령을 사용하여 모뎀 재시작" + +msgid "effect depends on modem" +msgstr "효과는 모뎀에 따라 다릅니다" + +msgid "Some at commands can also restart the router." +msgstr "일부 AT 명령은 라우터도 재시작할 수 있습니다." + +msgid "soft restart" +msgstr "소프트 재시작" + +msgid "hard restart" +msgstr "하드 재시작" + +msgid "Restart modem via GPIO." +msgstr "GPIO를 통해 모뎀을 재시작합니다." + +msgid "Restart modem using GPIO" +msgstr "GPIO를 사용하여 모뎀 재시작" + +msgid "Select the GPIO related to 4G/5G modem." +msgstr "4G/5G 모뎀과 관련된 GPIO를 선택합니다." + +msgid "Generate a script" +msgstr "스크립트 생성" + +msgid "Generate user script" +msgstr "사용자 스크립트 생성" + +msgid "Generate and save the prepared script." +msgstr "준비된 스크립트를 생성하고 저장합니다." + +msgid "User can add his script or generate a new one from the selection options." +msgstr "사용자는 고유한 스크립트를 추가하거나 선택 옵션에서 새 스크립트를 생성할 수 있습니다." + +msgid "Set test address (only one recommended)." +msgstr "테스트 주소 설정(1개만 권장)." + +msgid "The available options depend on the previously defined main action (interface or router restart)." +msgstr "사용 가능한 옵션은 이전에 정의된 주요 작업(인터페이스 또는 라우터 재시작)에 따라 다릅니다." + +msgid "user code" +msgstr "사용자 코드" + +msgid "Add custom commands before restarting the device." +msgstr "장치를 재시작하기 전에 사용자 정의 명령을 추가합니다." + +msgid "from script:" +msgstr "스크립트에서:" + +msgid "USER-SCRIPT:" +msgstr "사용자 스크립트:" + +msgid "Soft modem restart" +msgstr "모뎀 소프트 재시작" + +msgid "Hard modem restart" +msgstr "모뎀 하드 재시작" + +msgid "Space for user actions" +msgstr "사용자 작업 공간" + +msgid "Commands before main action" +msgstr "주요 작업 전 명령" + +msgid "Commands after main action" +msgstr "주요 작업 후 명령" + +msgid "Loading..." +msgstr "로드 중..." + +msgid "Waiting for ping command execution..." +msgstr "ping 명령 실행 대기 중..." + +msgid "Watchdog initialized" +msgstr "워치도그가 초기화되었습니다" + +msgid "uptime" +msgstr "가동 시간" + +msgid "hosts" +msgstr "호스트" diff --git a/luci-app-lite-watchdog/po/nl/watchdog.po b/luci-app-lite-watchdog/po/nl/watchdog.po new file mode 100644 index 000000000..1ee4c0cdb --- /dev/null +++ b/luci-app-lite-watchdog/po/nl/watchdog.po @@ -0,0 +1,400 @@ +msgid "" +msgstr "" +"Language-Team: Rafał Wabik (IceG)\n" +"Language: nl\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +msgid "Connection Monitor" +msgstr "Verbindingsmonitor" + +msgid "Connection monitor settings" +msgstr "Instellingen verbindingsmonitor" + +msgid "Configuration lite-watchdog" +msgstr "Configuratie lite-watchdog" + +msgid "Configuration panel for lite-watchdog and gui application." +msgstr "Configuratiepaneel voor lite-watchdog en GUI-applicatie." + +msgid "Interface" +msgstr "Interface" + +msgid "Network interface for Internet access." +msgstr "Netwerkinterface voor internettoegang." + +msgid "Port for communication with the modem" +msgstr "Poort voor communicatie met de modem" + +msgid "Select one of the available ttyUSBX ports." +msgstr "Selecteer een van de beschikbare ttyUSBX-poorten." + +msgid "Please select a port" +msgstr "Selecteer alstublieft een poort" + +msgid "Perform a modem restart before resuming the connection." +msgstr "Voer een modemherstartuit alvorens de verbinding te hervatten." + +msgid "Restart modem with AT command" +msgstr "Modem herstarten met AT-commando" + +msgid "AT command to restart the modem." +msgstr "AT-commando om de modem opnieuw te starten." + +msgid "AT command" +msgstr "AT-commando" + +msgid "total checks" +msgstr "totale controles" + +msgid "Configuration of the connection monitor known from the easyconfig package. More information on the %seko.one.pl forum%s." +msgstr "Configuratie van de verbindingsmonitor bekend uit het easyconfig-pakket. Meer informatie op het %seko.one.pl-forum%s." + +msgid "eko.one.pl forum" +msgstr "eko.one.pl-forum" + +msgid "Enable a connection monitor." +msgstr "Schakel een verbindingsmonitor in." + +msgid "System startup delay" +msgstr "Systeemstartvertraging" + +msgid "[1 - 59] minute(s)" +msgstr "[1 - 59] minuten" + +msgid "Expect a decimal value between one and fifty-nine" +msgstr "Verwacht een decimale waarde tussen een en negenenvijftig" + +msgid "Address or name" +msgstr "Adres of naam" + +msgid "Verification period" +msgstr "Verificatieperiode" + +msgid "Number of failed checks" +msgstr "Aantal mislukte controles" + +msgid "Action" +msgstr "Actie" + +msgid "Connection restart" +msgstr "Verbinding opnieuw starten" + +msgid "Modem restart" +msgstr "Modem herstarten" + +msgid "Reboot" +msgstr "Apparaat opnieuw starten" + +msgid "Changes have been saved. Connection Monitor has started." +msgstr "Wijzigingen zijn opgeslagen. Verbindingsmonitor is gestart." + +msgid "Changes have been saved. Connection Monitor is not running." +msgstr "Wijzigingen zijn opgeslagen. Verbindingsmonitor wordt niet uitgevoerd." + +msgid "Last check" +msgstr "Laatste controle" + +msgid "minimum" +msgstr "minimum" + +msgid "average" +msgstr "gemiddelde" + +msgid "maximum" +msgstr "maximum" + +msgid "Information" +msgstr "Informatie" + +msgid "Basic settings" +msgstr "Basisinstellingen" + +msgid "failed" +msgstr "mislukt" + +msgid "Failed" +msgstr "Mislukt" + +msgid "out of" +msgstr "van" + +msgid "Activity log" +msgstr "Activiteitenlogboek" + +msgid "Wrong regular expression" +msgstr "Onjuiste reguliere expressie" + +msgid "No matches..." +msgstr "Geen resultaten..." + +msgid "Clear connection monitor log?" +msgstr "Verbindingsmonitorlog wissen?" + +msgid "Download error" +msgstr "Downloadfout" + +msgid "Unable to load log data:" +msgstr "Kan loggegevens niet laden:" + +msgid "Entries filter" +msgstr "Invoerfilter" + +msgid "Filter entries using regexp, press [Delete] to delete all text" +msgstr "Filter invoeren met behulp van regexp, druk [Delete] om alle tekst te verwijderen" + +msgid "Refresh" +msgstr "Vernieuwen" + +msgid "Connection monitor activity log" +msgstr "Verbindingsmonitor activiteitenlogboek" + +msgid "Connection monitor activity log known from the easyconfig package. More information on the %seko.one.pl forum%s." +msgstr "Verbindingsmonitor activiteitenlogboek bekend uit het easyconfig-pakket. Meer informatie op het %seko.one.pl-forum%s." + +msgid "Show only the last entries" +msgstr "Alleen de laatste invoeren weergeven" + +msgid "Message filter" +msgstr "Berichtfilter" + +msgid "Refresh log" +msgstr "Logboek vernieuwen" + +msgid "Clear log" +msgstr "Logboek wissen" + +msgid "Download log" +msgstr "Logboek downloaden" + +msgid "Upload log file" +msgstr "Logbestand uploaden" + +msgid "Type of messages" +msgstr "Type berichten" + +msgid "All actions" +msgstr "Alle acties" + +msgid "Only connection problems" +msgstr "Alleen verbindingsproblemen" + +msgid "LED settings" +msgstr "LED-instellingen" + +msgid "The LED shows the internet connection status." +msgstr "De LED geeft de status van de internetverbinding aan." + +msgid "Select the status LED." +msgstr "Selecteer de status-LED." + +msgid "Edit user script" +msgstr "Gebruikersscript bewerken" + +msgid "Before executing the action, system calls a script in which user can place his own commands." +msgstr "Alvorens de actie uit te voeren, roept het systeem een script aan waarin de gebruiker zijn eigen commando's kan plaatsen." + +msgid "Edit user script" +msgstr "Gebruikersscript bewerken" + +msgid "User script" +msgstr "Gebruikersscript" + +msgid "User-defined commands." +msgstr "Door gebruiker gedefinieerde commando's." + +msgid "Contents have been saved" +msgstr "Inhoud is opgeslagen" + +msgid "Unable to save the contents" +msgstr "Kan inhoud niet opslaan" + +msgid "Unable to read the contents" +msgstr "Kan inhoud niet lezen" + +msgid "Status" +msgstr "Status" + +msgid "ONLINE" +msgstr "ONLINE" + +msgid "OFFLINE" +msgstr "OFFLINE" + +msgid "Action" +msgstr "Actie" + +msgid "Restarting interface" +msgstr "Verbinding opnieuw starten" + +msgid "Reboot" +msgstr "Apparaat opnieuw starten" + +msgid "At command was sent to modem" +msgstr "AT-commando is naar modem verzonden" + +msgid "January" +msgstr "Januari" + +msgid "February" +msgstr "Februari" + +msgid "March" +msgstr "Maart" + +msgid "April" +msgstr "April" + +msgid "May" +msgstr "Mei" + +msgid "June" +msgstr "Juni" + +msgid "July" +msgstr "Juli" + +msgid "August" +msgstr "Augustus" + +msgid "September" +msgstr "September" + +msgid "October" +msgstr "Oktober" + +msgid "November" +msgstr "November" + +msgid "December" +msgstr "December" + +msgid "Monday" +msgstr "Maandag" + +msgid "Tuesday" +msgstr "Dinsdag" + +msgid "Wednesday" +msgstr "Woensdag" + +msgid "Thursday" +msgstr "Donderdag" + +msgid "Friday" +msgstr "Vrijdag" + +msgid "Saturday" +msgstr "Zaterdag" + +msgid "Sunday" +msgstr "Zondag" + +msgid "User Script Wizard" +msgstr "Wizard gebruikersscript" + +msgid "Hint: You do not need to save anything in the settings. Select the actions and click the Generate button." +msgstr "Hint: U hoeft niets in de instellingen op te slaan. Selecteer de acties en klik op de knop Genereren." + +msgid "modem restart" +msgstr "modem herstarten" + +msgid "reboot" +msgstr "apparaat opnieuw starten" + +msgid "Restart modem if restarting the interfaces did not restore internet access." +msgstr "Start de modem opnieuw op als het herstarten van de interfaces internettoegangnie heeft hersteld." + +msgid "Router reboot if restarting the interfaces did not restore internet access." +msgstr "Als het herstarten van de interfaces internettoegangnie heeft hersteld, start u de router opnieuw op." + +msgid "Actions in script" +msgstr "Acties in script" + +msgid "Modem actions" +msgstr "Modemacties" + +msgid "Restart modem using at commands" +msgstr "Start modem opnieuw op met AT-commando's." + +msgid "effect depends on modem" +msgstr "effect is afhankelijk van modem" + +msgid "Some at commands can also restart the router." +msgstr "Sommige AT-commando's kunnen ook de router opnieuw starten." + +msgid "soft restart" +msgstr "zachte herstart" + +msgid "hard restart" +msgstr "harde herstart" + +msgid "Restart modem via GPIO." +msgstr "Modem herstarten via GPIO." + +msgid "Restart modem using GPIO" +msgstr "Start modem opnieuw op met behulp van GPIO" + +msgid "Select the GPIO related to 4G/5G modem." +msgstr "Selecteer de GPIO met betrekking tot 4G/5G-modem." + +msgid "Generate a script" +msgstr "Een script genereren" + +msgid "Generate user script" +msgstr "Gebruikersscript genereren" + +msgid "Generate and save the prepared script." +msgstr "Genereer en sla het voorbereide script op." + +msgid "User can add his script or generate a new one from the selection options." +msgstr "Gebruiker kan zijn script toevoegen of een nieuw genereren uit de selectieopties." + +msgid "Set test address (only one recommended)." +msgstr "Stel testadres in (slechts één aanbevolen)." + +msgid "The available options depend on the previously defined main action (interface or router restart)." +msgstr "De beschikbare opties zijn afhankelijk van de eerder gedefinieerde hoofdactie (interface- of routerherstarten)." + +msgid "user code" +msgstr "gebruikerscode" + +msgid "Add custom commands before restarting the device." +msgstr "Voeg aangepaste commando's toe alvorens het apparaat opnieuw te starten." + +msgid "from script:" +msgstr "uit script:" + +msgid "USER-SCRIPT:" +msgstr "GEBRUIKERSSCRIPT:" + +msgid "Soft modem restart" +msgstr "Zachte modemherstart" + +msgid "Hard modem restart" +msgstr "Harde modemherstart" + +msgid "Space for user actions" +msgstr "Ruimte voor gebruikersacties" + +msgid "Commands before main action" +msgstr "Commando's vóór hoofdactie" + +msgid "Commands after main action" +msgstr "Commando's na hoofdactie" + +msgid "Loading..." +msgstr "Laden..." + +msgid "Waiting for ping command execution..." +msgstr "Wachten op uitvoering van ping-commando..." + +msgid "Watchdog initialized" +msgstr "Watchdog geïnitialiseerd" + +msgid "uptime" +msgstr "uptime" + +msgid "hosts" +msgstr "hosts" diff --git a/luci-app-lite-watchdog/po/pl/watchdog.po b/luci-app-lite-watchdog/po/pl/watchdog.po index af404df93..639a5b3af 100644 --- a/luci-app-lite-watchdog/po/pl/watchdog.po +++ b/luci-app-lite-watchdog/po/pl/watchdog.po @@ -37,8 +37,14 @@ msgstr "Restart modemu za pomocą polecenia AT" msgid "AT command to restart the modem." msgstr "Polecenie AT restartujące modem." -msgid "Configuration of the connection monitor, which is a conversion of the monitor known from the easyconfig package. More information on the %seko.one.pl forum%s." -msgstr "Konfiguracja monitora połączenia, który jest konwersją monitora znanego z pakietu easyconfig. Więcej informacji na %sforum eko.one.pl%s." +msgid "AT command" +msgstr "Polecenie AT" + +msgid "total checks" +msgstr "łącznie sprawdzeń" + +msgid "Configuration of the connection monitor known from the easyconfig package. More information on the %seko.one.pl forum%s." +msgstr "Konfiguracja monitora połączenia znanego z pakietu easyconfig. Więcej informacji na %sforum eko.one.pl%s." msgid "eko.one.pl forum" msgstr "forum eko.one.pl" @@ -68,7 +74,7 @@ msgid "Action" msgstr "Akcja" msgid "Connection restart" -msgstr "Restart połączenia z internetem" +msgstr "Ponowne uruchomienie połączenia z internetem" msgid "Modem restart" msgstr "Restart modemu" @@ -139,8 +145,8 @@ msgstr "Odśwież" msgid "Connection monitor activity log" msgstr "Dziennik aktywności monitora połączenia" -msgid "Connection monitor activity log, which is a conversion of the monitor known from the easyconfig package. More information on the %seko.one.pl forum%s." -msgstr "Dziennik aktywności monitora połączenia, który jest konwersją monitora znanego z pakietu easyconfig. Więcej informacji na %sforum eko.one.pl%s." +msgid "Connection monitor activity log known from the easyconfig package. More information on the %seko.one.pl forum%s." +msgstr "Dziennik aktywności monitora połączenia znanego z pakietu easyconfig. Więcej informacji na %sforum eko.one.pl%s." msgid "Show only the last entries" msgstr "Pokaż tylko ostatnie wpisy" @@ -157,6 +163,9 @@ msgstr "Wyczyść dziennik" msgid "Download log" msgstr "Pobierz dziennik" +msgid "Upload log file" +msgstr "Załaduj plik dziennika" + msgid "Type of messages" msgstr "Rodzaj komunikatów" @@ -218,7 +227,7 @@ msgid "Reboot" msgstr "Ponowne uruchomienie urządzenia" msgid "At command was sent to modem" -msgstr "Polecenie at zostało wysłane do modemu" +msgstr "Wysłano polecenie at do modemu" msgid "January" msgstr "Styczeń" @@ -276,3 +285,111 @@ msgstr "Sobota" msgid "Sunday" msgstr "Niedziela" + +msgid "User Script Wizard" +msgstr "Kreator skryptów użytkownika" + +msgid "Hint: You do not need to save anything in the settings. Select the actions and click the Generate button." +msgstr "Wskazówka: Nie musisz niczego zapisywać w ustawieniach. Wybierz akcje i kliknij przycisk Generuj." + +msgid "modem restart" +msgstr "restart modemu" + +msgid "reboot" +msgstr "ponowne uruchomienie urządzenia" + +msgid "Restart modem if restarting the interfaces did not restore internet access." +msgstr "Uruchom ponownie modem, jeśli restart interfejsu nie przywrócił dostępu do internetu." + +msgid "Router reboot if restarting the interfaces did not restore internet access." +msgstr "Jeśli restart interfejsu nie przywrócił dostępu do internetu, uruchom ponownie router." + +msgid "Actions in script" +msgstr "Akcje w skrypcie" + +msgid "Modem actions" +msgstr "Obsługa modemu" + +msgid "Restart modem using at commands" +msgstr "Uruchom ponownie modem za pomocą poleceń at." + +msgid "effect depends on modem" +msgstr "efekt zależy od modemu" + +msgid "Some at commands can also restart the router." +msgstr "Niektóre polecenia at mogą również obsługiwać ponowne uruchomienie routera." + +msgid "soft restart" +msgstr "miękki restart" + +msgid "hard restart" +msgstr "twardy restart" + +msgid "Restart modem via GPIO." +msgstr "Restart modemu za pomocą interfejsu GPIO." + +msgid "Restart modem using GPIO" +msgstr "Uruchom ponownie modem za pomocą GPIO" + +msgid "Select the GPIO related to 4G/5G modem." +msgstr "Wybierz GPIO przypisane do modemu 4G/5G." + +msgid "Generate a script" +msgstr "Wygeneruj skrypt" + +msgid "Generate user script" +msgstr "Wygeneruj skrypt użytkownika" + +msgid "Generate and save the prepared script." +msgstr "Wygeneruj i zapisz przygotowany skrypt." + +msgid "User can add his script or generate a new one from the selection options." +msgstr "Użytkownik może dodać swój skrypt lub wygenerować nowy z opcji wyboru." + +msgid "Set test address (only one recommended)." +msgstr "Ustaw adres do odpytywania (zalecany tylko jeden)." + +msgid "The available options depend on the previously defined main action (interface or router restart)." +msgstr "Dostępne opcje zależą od zdefiniowanej wcześniej akcji głównej (restartu interfejsu lub routera)." + +msgid "user code" +msgstr "kod użytkownika" + +msgid "Add custom commands before restarting the device." +msgstr "Przed ponownym uruchomieniem urządzenia dodaj polecenia niestandardowe." + +msgid "from script:" +msgstr "ze skryptu:" + +msgid "USER-SCRIPT:" +msgstr "Skrypt użytkownika:" + +msgid "Soft modem restart" +msgstr "Miękki restart modemu" + +msgid "Hard modem restart" +msgstr "Twardy restart modemu" + +msgid "Space for user actions" +msgstr "Miejsce na akcje użytkownika" + +msgid "Commands before main action" +msgstr "Polecenia przed główną akcją" + +msgid "Commands after main action" +msgstr "Polecenia po akcji głównej" + +msgid "Loading..." +msgstr "Wczytywanie..." + +msgid "Waiting for ping command execution..." +msgstr "Oczekiwanie na wykonanie polecenia ping..." + +msgid "Watchdog initialized" +msgstr "Watchdog zainicjowany" + +msgid "uptime" +msgstr "czas działania" + +msgid "hosts" +msgstr "host(-y)" diff --git a/luci-app-lite-watchdog/po/pt_BR/watchdog.po b/luci-app-lite-watchdog/po/pt_BR/watchdog.po new file mode 100644 index 000000000..0e017c5f3 --- /dev/null +++ b/luci-app-lite-watchdog/po/pt_BR/watchdog.po @@ -0,0 +1,399 @@ +msgid "" +msgstr "" +"Language: pt_BR\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" + +msgid "Connection Monitor" +msgstr "Monitor de Conexão" + +msgid "Connection monitor settings" +msgstr "Configurações do monitor de conexão" + +msgid "Configuration lite-watchdog" +msgstr "Configuração lite-watchdog" + +msgid "Configuration panel for lite-watchdog and gui application." +msgstr "Painel de configuração para aplicativo lite-watchdog e GUI." + +msgid "Interface" +msgstr "Interface" + +msgid "Network interface for Internet access." +msgstr "Interface de rede para acesso à Internet." + +msgid "Port for communication with the modem" +msgstr "Porta para comunicação com o modem" + +msgid "Select one of the available ttyUSBX ports." +msgstr "Selecione uma das portas ttyUSBX disponíveis." + +msgid "Please select a port" +msgstr "Selecione uma porta" + +msgid "Perform a modem restart before resuming the connection." +msgstr "Execute uma reinicialização do modem antes de retomar a conexão." + +msgid "Restart modem with AT command" +msgstr "Reiniciar modem com comando AT" + +msgid "AT command to restart the modem." +msgstr "Comando AT para reiniciar o modem." + +msgid "AT command" +msgstr "Comando AT" + +msgid "total checks" +msgstr "verificações totais" + +msgid "Configuration of the connection monitor known from the easyconfig package. More information on the %seko.one.pl forum%s." +msgstr "Configuração do monitor de conexão conhecido do pacote easyconfig. Mais informações no %sfórum eko.one.pl%s." + +msgid "eko.one.pl forum" +msgstr "fórum eko.one.pl" + +msgid "Enable a connection monitor." +msgstr "Ative um monitor de conexão." + +msgid "System startup delay" +msgstr "Atraso de inicialização do sistema" + +msgid "[1 - 59] minute(s)" +msgstr "[1 - 59] minuto(s)" + +msgid "Expect a decimal value between one and fifty-nine" +msgstr "Esperado um valor decimal entre um e cinquenta e nove" + +msgid "Address or name" +msgstr "Endereço ou nome" + +msgid "Verification period" +msgstr "Período de verificação" + +msgid "Number of failed checks" +msgstr "Número de verificações com falha" + +msgid "Action" +msgstr "Ação" + +msgid "Connection restart" +msgstr "Reinicializar conexão" + +msgid "Modem restart" +msgstr "Reinicializar modem" + +msgid "Reboot" +msgstr "Reiniciar" + +msgid "Changes have been saved. Connection Monitor has started." +msgstr "As alterações foram salvas. Monitor de Conexão foi iniciado." + +msgid "Changes have been saved. Connection Monitor is not running." +msgstr "As alterações foram salvas. Monitor de Conexão não está em execução." + +msgid "Last check" +msgstr "Última verificação" + +msgid "minimum" +msgstr "mínimo" + +msgid "average" +msgstr "médio" + +msgid "maximum" +msgstr "máximo" + +msgid "Information" +msgstr "Informação" + +msgid "Basic settings" +msgstr "Configurações básicas" + +msgid "failed" +msgstr "falha" + +msgid "Failed" +msgstr "Falha" + +msgid "out of" +msgstr "de" + +msgid "Activity log" +msgstr "Log de atividades" + +msgid "Wrong regular expression" +msgstr "Expressão regular incorreta" + +msgid "No matches..." +msgstr "Nenhuma correspondência..." + +msgid "Clear connection monitor log?" +msgstr "Limpar o log do monitor de conexão?" + +msgid "Download error" +msgstr "Erro de download" + +msgid "Unable to load log data:" +msgstr "Não é possível carregar dados de log:" + +msgid "Entries filter" +msgstr "Filtro de entradas" + +msgid "Filter entries using regexp, press [Delete] to delete all text" +msgstr "Filtrar entradas usando regexp, pressione [Excluir] para excluir todo o texto" + +msgid "Refresh" +msgstr "Atualizar" + +msgid "Connection monitor activity log" +msgstr "Log de atividades do monitor de conexão" + +msgid "Connection monitor activity log known from the easyconfig package. More information on the %seko.one.pl forum%s." +msgstr "Log de atividades do monitor de conexão conhecido do pacote easyconfig. Mais informações no %sfórum eko.one.pl%s." + +msgid "Show only the last entries" +msgstr "Mostrar apenas as últimas entradas" + +msgid "Message filter" +msgstr "Filtro de mensagens" + +msgid "Refresh log" +msgstr "Atualizar log" + +msgid "Clear log" +msgstr "Limpar log" + +msgid "Download log" +msgstr "Download log" + +msgid "Upload log file" +msgstr "Carregar arquivo de log" + +msgid "Type of messages" +msgstr "Tipo de mensagens" + +msgid "All actions" +msgstr "Todas as ações" + +msgid "Only connection problems" +msgstr "Apenas problemas de conexão" + +msgid "LED settings" +msgstr "Configurações de LED" + +msgid "The LED shows the internet connection status." +msgstr "O LED mostra o status da conexão com a Internet." + +msgid "Select the status LED." +msgstr "Selecione o LED de status." + +msgid "Edit user script" +msgstr "Editar script do usuário" + +msgid "Before executing the action, system calls a script in which user can place his own commands." +msgstr "Antes de executar a ação, o sistema chama um script em que o usuário pode inserir seus próprios comandos." + +msgid "Edit user script" +msgstr "Editar script do usuário" + +msgid "User script" +msgstr "Script do usuário" + +msgid "User-defined commands." +msgstr "Comandos definidos pelo usuário." + +msgid "Contents have been saved" +msgstr "O conteúdo foi salvo" + +msgid "Unable to save the contents" +msgstr "Não é possível salvar o conteúdo" + +msgid "Unable to read the contents" +msgstr "Não é possível ler o conteúdo" + +msgid "Status" +msgstr "Status" + +msgid "ONLINE" +msgstr "Online" + +msgid "OFFLINE" +msgstr "Offline" + +msgid "Action" +msgstr "Ação" + +msgid "Restarting interface" +msgstr "Reiniciando interface" + +msgid "Reboot" +msgstr "Reiniciar" + +msgid "At command was sent to modem" +msgstr "Comando AT foi enviado para o modem" + +msgid "January" +msgstr "Janeiro" + +msgid "February" +msgstr "Fevereiro" + +msgid "March" +msgstr "Março" + +msgid "April" +msgstr "Abril" + +msgid "May" +msgstr "Maio" + +msgid "June" +msgstr "Junho" + +msgid "July" +msgstr "Julho" + +msgid "August" +msgstr "Agosto" + +msgid "September" +msgstr "Setembro" + +msgid "October" +msgstr "Outubro" + +msgid "November" +msgstr "Novembro" + +msgid "December" +msgstr "Dezembro" + +msgid "Monday" +msgstr "Segunda-feira" + +msgid "Tuesday" +msgstr "Terça-feira" + +msgid "Wednesday" +msgstr "Quarta-feira" + +msgid "Thursday" +msgstr "Quinta-feira" + +msgid "Friday" +msgstr "Sexta-feira" + +msgid "Saturday" +msgstr "Sábado" + +msgid "Sunday" +msgstr "Domingo" + +msgid "User Script Wizard" +msgstr "Assistente de Script do Usuário" + +msgid "Hint: You do not need to save anything in the settings. Select the actions and click the Generate button." +msgstr "Dica: Você não precisa salvar nada nas configurações. Selecione as ações e clique no botão Gerar." + +msgid "modem restart" +msgstr "reinicializar modem" + +msgid "reboot" +msgstr "reinicializar" + +msgid "Restart modem if restarting the interfaces did not restore internet access." +msgstr "Reinicie o modem se reiniciar as interfaces não restaurar o acesso à Internet." + +msgid "Router reboot if restarting the interfaces did not restore internet access." +msgstr "Reiniciar o roteador se reiniciar as interfaces não restaurar o acesso à Internet." + +msgid "Actions in script" +msgstr "Ações no script" + +msgid "Modem actions" +msgstr "Ações do modem" + +msgid "Restart modem using at commands" +msgstr "Reiniciar modem usando comandos AT" + +msgid "effect depends on modem" +msgstr "o efeito depende do modem" + +msgid "Some at commands can also restart the router." +msgstr "Alguns comandos AT também podem reiniciar o roteador." + +msgid "soft restart" +msgstr "reinicialização suave" + +msgid "hard restart" +msgstr "reinicialização forçada" + +msgid "Restart modem via GPIO." +msgstr "Reiniciar modem via GPIO." + +msgid "Restart modem using GPIO" +msgstr "Reiniciar modem usando GPIO" + +msgid "Select the GPIO related to 4G/5G modem." +msgstr "Selecione o GPIO relacionado ao modem 4G/5G." + +msgid "Generate a script" +msgstr "Gerar um script" + +msgid "Generate user script" +msgstr "Gerar script do usuário" + +msgid "Generate and save the prepared script." +msgstr "Gere e salve o script preparado." + +msgid "User can add his script or generate a new one from the selection options." +msgstr "O usuário pode adicionar seu script ou gerar um novo a partir das opções de seleção." + +msgid "Set test address (only one recommended)." +msgstr "Definir endereço de teste (apenas um recomendado)." + +msgid "The available options depend on the previously defined main action (interface or router restart)." +msgstr "As opções disponíveis dependem da ação principal definida anteriormente (reinicialização da interface ou do roteador)." + +msgid "user code" +msgstr "código do usuário" + +msgid "Add custom commands before restarting the device." +msgstr "Adicione comandos personalizados antes de reiniciar o dispositivo." + +msgid "from script:" +msgstr "do script:" + +msgid "USER-SCRIPT:" +msgstr "SCRIPT-USUÁRIO:" + +msgid "Soft modem restart" +msgstr "Reinicialização suave do modem" + +msgid "Hard modem restart" +msgstr "Reinicialização forçada do modem" + +msgid "Space for user actions" +msgstr "Espaço para ações do usuário" + +msgid "Commands before main action" +msgstr "Comandos antes da ação principal" + +msgid "Commands after main action" +msgstr "Comandos após a ação principal" + +msgid "Loading..." +msgstr "Carregando..." + +msgid "Waiting for ping command execution..." +msgstr "Aguardando execução do comando ping..." + +msgid "Watchdog initialized" +msgstr "Watchdog inicializado" + +msgid "uptime" +msgstr "tempo de atividade" + +msgid "hosts" +msgstr "hosts" diff --git a/luci-app-lite-watchdog/po/ru/watchdog.po b/luci-app-lite-watchdog/po/ru/watchdog.po new file mode 100644 index 000000000..be315db70 --- /dev/null +++ b/luci-app-lite-watchdog/po/ru/watchdog.po @@ -0,0 +1,401 @@ +msgid "" +msgstr "" +"Language-Team: Rafał Wabik (IceG)\n" +"Language: ru\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" + +msgid "Connection Monitor" +msgstr "Монитор подключения" + +msgid "Connection monitor settings" +msgstr "Настройки монитора подключения" + +msgid "Configuration lite-watchdog" +msgstr "Конфигурация lite-watchdog" + +msgid "Configuration panel for lite-watchdog and gui application." +msgstr "Панель настройки для приложения lite-watchdog и графического интерфейса." + +msgid "Interface" +msgstr "Интерфейс" + +msgid "Network interface for Internet access." +msgstr "Сетевой интерфейс для доступа в Интернет." + +msgid "Port for communication with the modem" +msgstr "Порт для связи с модемом" + +msgid "Select one of the available ttyUSBX ports." +msgstr "Выберите один из доступных портов ttyUSBX." + +msgid "Please select a port" +msgstr "Выберите порт" + +msgid "Perform a modem restart before resuming the connection." +msgstr "Выполните перезапуск модема перед возобновлением соединения." + +msgid "Restart modem with AT command" +msgstr "Перезапустить модем с помощью команды AT" + +msgid "AT command to restart the modem." +msgstr "Команда AT для перезапуска модема." + +msgid "AT command" +msgstr "Команда AT" + +msgid "total checks" +msgstr "всего проверок" + +msgid "Configuration of the connection monitor known from the easyconfig package. More information on the %seko.one.pl forum%s." +msgstr "Конфигурация монитора подключения из пакета easyconfig. Дополнительная информация на %sфоруме eko.one.pl%s." + +msgid "eko.one.pl forum" +msgstr "форум eko.one.pl" + +msgid "Enable a connection monitor." +msgstr "Включить монитор подключения." + +msgid "System startup delay" +msgstr "Задержка запуска системы" + +msgid "[1 - 59] minute(s)" +msgstr "[1 - 59] минут(ы)" + +msgid "Expect a decimal value between one and fifty-nine" +msgstr "Ожидается десятичное значение от одного до пятидесяти девяти" + +msgid "Address or name" +msgstr "Адрес или имя" + +msgid "Verification period" +msgstr "Период проверки" + +msgid "Number of failed checks" +msgstr "Количество неудачных проверок" + +msgid "Action" +msgstr "Действие" + +msgid "Connection restart" +msgstr "Перезапуск соединения" + +msgid "Modem restart" +msgstr "Перезапуск модема" + +msgid "Reboot" +msgstr "Перезагрузка" + +msgid "Changes have been saved. Connection Monitor has started." +msgstr "Изменения сохранены. Монитор подключения запущен." + +msgid "Changes have been saved. Connection Monitor is not running." +msgstr "Изменения сохранены. Монитор подключения не работает." + +msgid "Last check" +msgstr "Последняя проверка" + +msgid "minimum" +msgstr "минимум" + +msgid "average" +msgstr "среднее" + +msgid "maximum" +msgstr "максимум" + +msgid "Information" +msgstr "Информация" + +msgid "Basic settings" +msgstr "Основные настройки" + +msgid "failed" +msgstr "неудачных" + +msgid "Failed" +msgstr "Неудачных" + +msgid "out of" +msgstr "из" + +msgid "Activity log" +msgstr "Журнал активности" + +msgid "Wrong regular expression" +msgstr "Неверное регулярное выражение" + +msgid "No matches..." +msgstr "Совпадений не найдено..." + +msgid "Clear connection monitor log?" +msgstr "Очистить журнал монитора подключения?" + +msgid "Download error" +msgstr "Ошибка загрузки" + +msgid "Unable to load log data:" +msgstr "Не удаётся загрузить данные журнала:" + +msgid "Entries filter" +msgstr "Фильтр записей" + +msgid "Filter entries using regexp, press [Delete] to delete all text" +msgstr "Фильтровать записи с помощью регулярного выражения, нажмите [Delete] для удаления всего текста" + +msgid "Refresh" +msgstr "Обновить" + +msgid "Connection monitor activity log" +msgstr "Журнал активности монитора подключения" + +msgid "Connection monitor activity log known from the easyconfig package. More information on the %seko.one.pl forum%s." +msgstr "Журнал активности монитора подключения из пакета easyconfig. Дополнительная информация на %sфоруме eko.one.pl%s." + +msgid "Show only the last entries" +msgstr "Показать только последние записи" + +msgid "Message filter" +msgstr "Фильтр сообщений" + +msgid "Refresh log" +msgstr "Обновить журнал" + +msgid "Clear log" +msgstr "Очистить журнал" + +msgid "Download log" +msgstr "Скачать журнал" + +msgid "Upload log file" +msgstr "Загрузить файл журнала" + +msgid "Type of messages" +msgstr "Тип сообщений" + +msgid "All actions" +msgstr "Все действия" + +msgid "Only connection problems" +msgstr "Только проблемы с подключением" + +msgid "LED settings" +msgstr "Настройки светодиода" + +msgid "The LED shows the internet connection status." +msgstr "Светодиод показывает состояние интернет-соединения." + +msgid "Select the status LED." +msgstr "Выбрать индикаторный светодиод." + +msgid "Edit user script" +msgstr "Редактировать пользовательский скрипт" + +msgid "Before executing the action, system calls a script in which user can place his own commands." +msgstr "Перед выполнением действия система вызывает скрипт, в котором пользователь может разместить собственные команды." + +msgid "Edit user script" +msgstr "Редактировать пользовательский скрипт" + +msgid "User script" +msgstr "Пользовательский скрипт" + +msgid "User-defined commands." +msgstr "Команды, определённые пользователем." + +msgid "Contents have been saved" +msgstr "Содержимое сохранено" + +msgid "Unable to save the contents" +msgstr "Не удаётся сохранить содержимое" + +msgid "Unable to read the contents" +msgstr "Не удаётся прочитать содержимое" + +msgid "Status" +msgstr "Статус" + +msgid "ONLINE" +msgstr "ОНЛАЙН" + +msgid "OFFLINE" +msgstr "ОФЛАЙН" + +msgid "Action" +msgstr "Действие" + +msgid "Restarting interface" +msgstr "Перезапуск интерфейса" + +msgid "Reboot" +msgstr "Перезагрузка" + +msgid "At command was sent to modem" +msgstr "Команда AT отправлена модему" + +msgid "January" +msgstr "Январь" + +msgid "February" +msgstr "Февраль" + +msgid "March" +msgstr "Март" + +msgid "April" +msgstr "Апрель" + +msgid "May" +msgstr "Май" + +msgid "June" +msgstr "Июнь" + +msgid "July" +msgstr "Июль" + +msgid "August" +msgstr "Август" + +msgid "September" +msgstr "Сентябрь" + +msgid "October" +msgstr "Октябрь" + +msgid "November" +msgstr "Ноябрь" + +msgid "December" +msgstr "Декабрь" + +msgid "Monday" +msgstr "Понедельник" + +msgid "Tuesday" +msgstr "Вторник" + +msgid "Wednesday" +msgstr "Среда" + +msgid "Thursday" +msgstr "Четверг" + +msgid "Friday" +msgstr "Пятница" + +msgid "Saturday" +msgstr "Суббота" + +msgid "Sunday" +msgstr "Воскресенье" + +msgid "User Script Wizard" +msgstr "Мастер пользовательских скриптов" + +msgid "Hint: You do not need to save anything in the settings. Select the actions and click the Generate button." +msgstr "Подсказка: Вам не нужно ничего сохранять в настройках. Выберите действия и нажмите кнопку Генерировать." + +msgid "modem restart" +msgstr "перезапуск модема" + +msgid "reboot" +msgstr "перезагрузка" + +msgid "Restart modem if restarting the interfaces did not restore internet access." +msgstr "Перезапустите модем, если перезапуск интерфейсов не восстановил доступ в Интернет." + +msgid "Router reboot if restarting the interfaces did not restore internet access." +msgstr "Перезагрузка маршрутизатора, если перезапуск интерфейсов не восстановил доступ в Интернет." + +msgid "Actions in script" +msgstr "Действия в скрипте" + +msgid "Modem actions" +msgstr "Действия с модемом" + +msgid "Restart modem using at commands" +msgstr "Перезапустить модем с помощью команд AT" + +msgid "effect depends on modem" +msgstr "эффект зависит от модема" + +msgid "Some at commands can also restart the router." +msgstr "Некоторые команды AT могут также перезапустить маршрутизатор." + +msgid "soft restart" +msgstr "мягкая перезагрузка" + +msgid "hard restart" +msgstr "жёсткая перезагрузка" + +msgid "Restart modem via GPIO." +msgstr "Перезапустить модем через GPIO." + +msgid "Restart modem using GPIO" +msgstr "Перезапустить модем через GPIO" + +msgid "Select the GPIO related to 4G/5G modem." +msgstr "Выбрать GPIO, связанный с модемом 4G/5G." + +msgid "Generate a script" +msgstr "Создать скрипт" + +msgid "Generate user script" +msgstr "Создать пользовательский скрипт" + +msgid "Generate and save the prepared script." +msgstr "Создать и сохранить подготовленный скрипт." + +msgid "User can add his script or generate a new one from the selection options." +msgstr "Пользователь может добавить свой скрипт или создать новый из параметров выбора." + +msgid "Set test address (only one recommended)." +msgstr "Задать тестовый адрес (рекомендуется только один)." + +msgid "The available options depend on the previously defined main action (interface or router restart)." +msgstr "Доступные параметры зависят от ранее определённого основного действия (перезапуск интерфейса или маршрутизатора)." + +msgid "user code" +msgstr "пользовательский код" + +msgid "Add custom commands before restarting the device." +msgstr "Добавить пользовательские команды перед перезапуском устройства." + +msgid "from script:" +msgstr "из скрипта:" + +msgid "USER-SCRIPT:" +msgstr "ПОЛЬЗОВАТЕЛЬСКИЙ-СКРИПТ:" + +msgid "Soft modem restart" +msgstr "Мягкий перезапуск модема" + +msgid "Hard modem restart" +msgstr "Жёсткий перезапуск модема" + +msgid "Space for user actions" +msgstr "Место для пользовательских действий" + +msgid "Commands before main action" +msgstr "Команды перед основным действием" + +msgid "Commands after main action" +msgstr "Команды после основного действия" + +msgid "Loading..." +msgstr "Загрузка..." + +msgid "Waiting for ping command execution..." +msgstr "Ожидание выполнения команды ping..." + +msgid "Watchdog initialized" +msgstr "Watchdog инициализирован" + +msgid "uptime" +msgstr "время работы" + +msgid "hosts" +msgstr "хосты" diff --git a/luci-app-lite-watchdog/po/vi/watchdog.po b/luci-app-lite-watchdog/po/vi/watchdog.po new file mode 100644 index 000000000..090192d9e --- /dev/null +++ b/luci-app-lite-watchdog/po/vi/watchdog.po @@ -0,0 +1,400 @@ +msgid "" +msgstr "" +"Language-Team: Rafał Wabik (IceG)\n" +"Language: vi\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Connection Monitor" +msgstr "Giám sát kết nối" + +msgid "Connection monitor settings" +msgstr "Cài đặt giám sát kết nối" + +msgid "Configuration lite-watchdog" +msgstr "Cấu hình lite-watchdog" + +msgid "Configuration panel for lite-watchdog and gui application." +msgstr "Bảng cấu hình cho ứng dụng lite-watchdog và giao diện đồ họa." + +msgid "Interface" +msgstr "Giao diện mạng" + +msgid "Network interface for Internet access." +msgstr "Giao diện mạng để truy cập Internet." + +msgid "Port for communication with the modem" +msgstr "Cổng giao tiếp với modem" + +msgid "Select one of the available ttyUSBX ports." +msgstr "Chọn một trong các cổng ttyUSBX có sẵn." + +msgid "Please select a port" +msgstr "Vui lòng chọn một cổng" + +msgid "Perform a modem restart before resuming the connection." +msgstr "Thực hiện khởi động lại modem trước khi tiếp tục kết nối." + +msgid "Restart modem with AT command" +msgstr "Khởi động lại modem bằng lệnh AT" + +msgid "AT command to restart the modem." +msgstr "Lệnh AT để khởi động lại modem." + +msgid "AT command" +msgstr "Lệnh AT" + +msgid "total checks" +msgstr "tổng số lần kiểm tra" + +msgid "Configuration of the connection monitor known from the easyconfig package. More information on the %seko.one.pl forum%s." +msgstr "Cấu hình giám sát kết nối từ gói easyconfig. Thông tin thêm trên %sdiễn đàn eko.one.pl%s." + +msgid "eko.one.pl forum" +msgstr "diễn đàn eko.one.pl" + +msgid "Enable a connection monitor." +msgstr "Bật giám sát kết nối." + +msgid "System startup delay" +msgstr "Độ trễ khởi động hệ thống" + +msgid "[1 - 59] minute(s)" +msgstr "[1 - 59] phút" + +msgid "Expect a decimal value between one and fifty-nine" +msgstr "Yêu cầu giá trị thập phân từ một đến năm mươi chín" + +msgid "Address or name" +msgstr "Địa chỉ hoặc tên" + +msgid "Verification period" +msgstr "Khoảng thời gian kiểm tra" + +msgid "Number of failed checks" +msgstr "Số lần kiểm tra thất bại" + +msgid "Action" +msgstr "Hành động" + +msgid "Connection restart" +msgstr "Khởi động lại kết nối" + +msgid "Modem restart" +msgstr "Khởi động lại modem" + +msgid "Reboot" +msgstr "Khởi động lại thiết bị" + +msgid "Changes have been saved. Connection Monitor has started." +msgstr "Các thay đổi đã được lưu. Giám sát kết nối đã bắt đầu." + +msgid "Changes have been saved. Connection Monitor is not running." +msgstr "Các thay đổi đã được lưu. Giám sát kết nối không hoạt động." + +msgid "Last check" +msgstr "Lần kiểm tra cuối" + +msgid "minimum" +msgstr "tối thiểu" + +msgid "average" +msgstr "trung bình" + +msgid "maximum" +msgstr "tối đa" + +msgid "Information" +msgstr "Thông tin" + +msgid "Basic settings" +msgstr "Cài đặt cơ bản" + +msgid "failed" +msgstr "thất bại" + +msgid "Failed" +msgstr "Thất bại" + +msgid "out of" +msgstr "trong" + +msgid "Activity log" +msgstr "Nhật ký hoạt động" + +msgid "Wrong regular expression" +msgstr "Biểu thức chính quy không hợp lệ" + +msgid "No matches..." +msgstr "Không có kết quả..." + +msgid "Clear connection monitor log?" +msgstr "Xóa nhật ký giám sát kết nối?" + +msgid "Download error" +msgstr "Lỗi tải xuống" + +msgid "Unable to load log data:" +msgstr "Không thể tải dữ liệu nhật ký:" + +msgid "Entries filter" +msgstr "Bộ lọc mục" + +msgid "Filter entries using regexp, press [Delete] to delete all text" +msgstr "Lọc mục bằng biểu thức chính quy, nhấn [Delete] để xóa tất cả văn bản" + +msgid "Refresh" +msgstr "Làm mới" + +msgid "Connection monitor activity log" +msgstr "Nhật ký hoạt động giám sát kết nối" + +msgid "Connection monitor activity log known from the easyconfig package. More information on the %seko.one.pl forum%s." +msgstr "Nhật ký hoạt động giám sát kết nối từ gói easyconfig. Thông tin thêm trên %sdiễn đàn eko.one.pl%s." + +msgid "Show only the last entries" +msgstr "Chỉ hiển thị các mục cuối cùng" + +msgid "Message filter" +msgstr "Bộ lọc thông báo" + +msgid "Refresh log" +msgstr "Làm mới nhật ký" + +msgid "Clear log" +msgstr "Xóa nhật ký" + +msgid "Download log" +msgstr "Tải nhật ký" + +msgid "Upload log file" +msgstr "Tải lên tệp nhật ký" + +msgid "Type of messages" +msgstr "Loại thông báo" + +msgid "All actions" +msgstr "Tất cả hành động" + +msgid "Only connection problems" +msgstr "Chỉ sự cố kết nối" + +msgid "LED settings" +msgstr "Cài đặt đèn LED" + +msgid "The LED shows the internet connection status." +msgstr "Đèn LED hiển thị trạng thái kết nối Internet." + +msgid "Select the status LED." +msgstr "Chọn đèn LED trạng thái." + +msgid "Edit user script" +msgstr "Chỉnh sửa tập lệnh người dùng" + +msgid "Before executing the action, system calls a script in which user can place his own commands." +msgstr "Trước khi thực hiện hành động, hệ thống gọi một tập lệnh mà người dùng có thể đặt các lệnh của riêng mình." + +msgid "Edit user script" +msgstr "Chỉnh sửa tập lệnh người dùng" + +msgid "User script" +msgstr "Tập lệnh người dùng" + +msgid "User-defined commands." +msgstr "Các lệnh do người dùng định nghĩa." + +msgid "Contents have been saved" +msgstr "Nội dung đã được lưu" + +msgid "Unable to save the contents" +msgstr "Không thể lưu nội dung" + +msgid "Unable to read the contents" +msgstr "Không thể đọc nội dung" + +msgid "Status" +msgstr "Trạng thái" + +msgid "ONLINE" +msgstr "TRỰC TUYẾN" + +msgid "OFFLINE" +msgstr "NGOẠI TUYẾN" + +msgid "Action" +msgstr "Hành động" + +msgid "Restarting interface" +msgstr "Khởi động lại giao diện mạng" + +msgid "Reboot" +msgstr "Khởi động lại thiết bị" + +msgid "At command was sent to modem" +msgstr "Lệnh AT đã được gửi đến modem" + +msgid "January" +msgstr "Tháng Một" + +msgid "February" +msgstr "Tháng Hai" + +msgid "March" +msgstr "Tháng Ba" + +msgid "April" +msgstr "Tháng Tư" + +msgid "May" +msgstr "Tháng Năm" + +msgid "June" +msgstr "Tháng Sáu" + +msgid "July" +msgstr "Tháng Bảy" + +msgid "August" +msgstr "Tháng Tám" + +msgid "September" +msgstr "Tháng Chín" + +msgid "October" +msgstr "Tháng Mười" + +msgid "November" +msgstr "Tháng Mười Một" + +msgid "December" +msgstr "Tháng Mười Hai" + +msgid "Monday" +msgstr "Thứ Hai" + +msgid "Tuesday" +msgstr "Thứ Ba" + +msgid "Wednesday" +msgstr "Thứ Tư" + +msgid "Thursday" +msgstr "Thứ Năm" + +msgid "Friday" +msgstr "Thứ Sáu" + +msgid "Saturday" +msgstr "Thứ Bảy" + +msgid "Sunday" +msgstr "Chủ Nhật" + +msgid "User Script Wizard" +msgstr "Trình hướng dẫn tập lệnh người dùng" + +msgid "Hint: You do not need to save anything in the settings. Select the actions and click the Generate button." +msgstr "Gợi ý: Bạn không cần lưu bất cứ điều gì trong cài đặt. Chọn các hành động và nhấp vào nút Tạo." + +msgid "modem restart" +msgstr "khởi động lại modem" + +msgid "reboot" +msgstr "khởi động lại thiết bị" + +msgid "Restart modem if restarting the interfaces did not restore internet access." +msgstr "Khởi động lại modem nếu khởi động lại giao diện không khôi phục được truy cập Internet." + +msgid "Router reboot if restarting the interfaces did not restore internet access." +msgstr "Khởi động lại bộ định tuyến nếu khởi động lại giao diện không khôi phục được truy cập Internet." + +msgid "Actions in script" +msgstr "Hành động trong tập lệnh" + +msgid "Modem actions" +msgstr "Hành động modem" + +msgid "Restart modem using at commands" +msgstr "Khởi động lại modem bằng lệnh AT" + +msgid "effect depends on modem" +msgstr "hiệu quả phụ thuộc vào modem" + +msgid "Some at commands can also restart the router." +msgstr "Một số lệnh AT cũng có thể khởi động lại bộ định tuyến." + +msgid "soft restart" +msgstr "khởi động lại mềm" + +msgid "hard restart" +msgstr "khởi động lại cứng" + +msgid "Restart modem via GPIO." +msgstr "Khởi động lại modem qua GPIO." + +msgid "Restart modem using GPIO" +msgstr "Khởi động lại modem qua GPIO" + +msgid "Select the GPIO related to 4G/5G modem." +msgstr "Chọn GPIO liên quan đến modem 4G/5G." + +msgid "Generate a script" +msgstr "Tạo tập lệnh" + +msgid "Generate user script" +msgstr "Tạo tập lệnh người dùng" + +msgid "Generate and save the prepared script." +msgstr "Tạo và lưu tập lệnh đã chuẩn bị." + +msgid "User can add his script or generate a new one from the selection options." +msgstr "Người dùng có thể thêm tập lệnh của mình hoặc tạo tập lệnh mới từ các tùy chọn." + +msgid "Set test address (only one recommended)." +msgstr "Đặt địa chỉ kiểm tra (chỉ khuyến nghị một địa chỉ)." + +msgid "The available options depend on the previously defined main action (interface or router restart)." +msgstr "Các tùy chọn có sẵn phụ thuộc vào hành động chính đã định nghĩa trước (khởi động lại giao diện hoặc bộ định tuyến)." + +msgid "user code" +msgstr "mã người dùng" + +msgid "Add custom commands before restarting the device." +msgstr "Thêm các lệnh tùy chỉnh trước khi khởi động lại thiết bị." + +msgid "from script:" +msgstr "từ tập lệnh:" + +msgid "USER-SCRIPT:" +msgstr "TẬP-LỆNH-NGƯỜI-DÙNG:" + +msgid "Soft modem restart" +msgstr "Khởi động lại modem mềm" + +msgid "Hard modem restart" +msgstr "Khởi động lại modem cứng" + +msgid "Space for user actions" +msgstr "Không gian cho hành động người dùng" + +msgid "Commands before main action" +msgstr "Lệnh trước hành động chính" + +msgid "Commands after main action" +msgstr "Lệnh sau hành động chính" + +msgid "Loading..." +msgstr "Đang tải..." + +msgid "Waiting for ping command execution..." +msgstr "Đang chờ thực thi lệnh ping..." + +msgid "Watchdog initialized" +msgstr "Watchdog đã khởi tạo" + +msgid "uptime" +msgstr "thời gian hoạt động" + +msgid "hosts" +msgstr "máy chủ" diff --git a/luci-app-lite-watchdog/po/zh-cn b/luci-app-lite-watchdog/po/zh-cn new file mode 120000 index 000000000..8d69574dd --- /dev/null +++ b/luci-app-lite-watchdog/po/zh-cn @@ -0,0 +1 @@ +zh_Hans \ No newline at end of file diff --git a/luci-app-lite-watchdog/po/zh_Hans/watchdog.po b/luci-app-lite-watchdog/po/zh_Hans/watchdog.po new file mode 100644 index 000000000..1ae3b4ca1 --- /dev/null +++ b/luci-app-lite-watchdog/po/zh_Hans/watchdog.po @@ -0,0 +1,400 @@ +msgid "" +msgstr "" +"Language-Team: Rafał Wabik (IceG)\n" +"Language: zh_Hans\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Connection Monitor" +msgstr "连接监控器" + +msgid "Connection monitor settings" +msgstr "连接监控器设置" + +msgid "Configuration lite-watchdog" +msgstr "lite-watchdog 配置" + +msgid "Configuration panel for lite-watchdog and gui application." +msgstr "lite-watchdog 及图形界面应用程序的配置面板。" + +msgid "Interface" +msgstr "网络接口" + +msgid "Network interface for Internet access." +msgstr "用于访问互联网的网络接口。" + +msgid "Port for communication with the modem" +msgstr "与调制解调器通信的端口" + +msgid "Select one of the available ttyUSBX ports." +msgstr "选择一个可用的 ttyUSBX 端口。" + +msgid "Please select a port" +msgstr "请选择一个端口" + +msgid "Perform a modem restart before resuming the connection." +msgstr "恢复连接前请重启调制解调器。" + +msgid "Restart modem with AT command" +msgstr "使用 AT 命令重启调制解调器" + +msgid "AT command to restart the modem." +msgstr "用于重启调制解调器的 AT 命令。" + +msgid "AT command" +msgstr "AT 命令" + +msgid "total checks" +msgstr "检查总次数" + +msgid "Configuration of the connection monitor known from the easyconfig package. More information on the %seko.one.pl forum%s." +msgstr "来自 easyconfig 软件包的连接监控器配置。更多信息请访问 %seko.one.pl 论坛%s。" + +msgid "eko.one.pl forum" +msgstr "eko.one.pl 论坛" + +msgid "Enable a connection monitor." +msgstr "启用连接监控器。" + +msgid "System startup delay" +msgstr "系统启动延迟" + +msgid "[1 - 59] minute(s)" +msgstr "[1 - 59] 分钟" + +msgid "Expect a decimal value between one and fifty-nine" +msgstr "请输入 1 到 59 之间的整数值" + +msgid "Address or name" +msgstr "地址或名称" + +msgid "Verification period" +msgstr "检查周期" + +msgid "Number of failed checks" +msgstr "失败检查次数" + +msgid "Action" +msgstr "操作" + +msgid "Connection restart" +msgstr "重启连接" + +msgid "Modem restart" +msgstr "重启调制解调器" + +msgid "Reboot" +msgstr "重启设备" + +msgid "Changes have been saved. Connection Monitor has started." +msgstr "更改已保存。连接监控器已启动。" + +msgid "Changes have been saved. Connection Monitor is not running." +msgstr "更改已保存。连接监控器未运行。" + +msgid "Last check" +msgstr "上次检查" + +msgid "minimum" +msgstr "最小值" + +msgid "average" +msgstr "平均值" + +msgid "maximum" +msgstr "最大值" + +msgid "Information" +msgstr "信息" + +msgid "Basic settings" +msgstr "基本设置" + +msgid "failed" +msgstr "失败" + +msgid "Failed" +msgstr "失败" + +msgid "out of" +msgstr "共" + +msgid "Activity log" +msgstr "活动日志" + +msgid "Wrong regular expression" +msgstr "正则表达式错误" + +msgid "No matches..." +msgstr "无匹配结果..." + +msgid "Clear connection monitor log?" +msgstr "清除连接监控器日志?" + +msgid "Download error" +msgstr "下载错误" + +msgid "Unable to load log data:" +msgstr "无法加载日志数据:" + +msgid "Entries filter" +msgstr "条目过滤器" + +msgid "Filter entries using regexp, press [Delete] to delete all text" +msgstr "使用正则表达式过滤条目,按 [Delete] 删除所有文本" + +msgid "Refresh" +msgstr "刷新" + +msgid "Connection monitor activity log" +msgstr "连接监控器活动日志" + +msgid "Connection monitor activity log known from the easyconfig package. More information on the %seko.one.pl forum%s." +msgstr "来自 easyconfig 软件包的连接监控器活动日志。更多信息请访问 %seko.one.pl 论坛%s。" + +msgid "Show only the last entries" +msgstr "仅显示最新条目" + +msgid "Message filter" +msgstr "消息过滤器" + +msgid "Refresh log" +msgstr "刷新日志" + +msgid "Clear log" +msgstr "清除日志" + +msgid "Download log" +msgstr "下载日志" + +msgid "Upload log file" +msgstr "上传日志文件" + +msgid "Type of messages" +msgstr "消息类型" + +msgid "All actions" +msgstr "所有操作" + +msgid "Only connection problems" +msgstr "仅连接问题" + +msgid "LED settings" +msgstr "LED 设置" + +msgid "The LED shows the internet connection status." +msgstr "LED 显示互联网连接状态。" + +msgid "Select the status LED." +msgstr "选择状态 LED。" + +msgid "Edit user script" +msgstr "编辑用户脚本" + +msgid "Before executing the action, system calls a script in which user can place his own commands." +msgstr "执行操作前,系统调用一个脚本,用户可在其中放置自定义命令。" + +msgid "Edit user script" +msgstr "编辑用户脚本" + +msgid "User script" +msgstr "用户脚本" + +msgid "User-defined commands." +msgstr "用户自定义命令。" + +msgid "Contents have been saved" +msgstr "内容已保存" + +msgid "Unable to save the contents" +msgstr "无法保存内容" + +msgid "Unable to read the contents" +msgstr "无法读取内容" + +msgid "Status" +msgstr "状态" + +msgid "ONLINE" +msgstr "在线" + +msgid "OFFLINE" +msgstr "离线" + +msgid "Action" +msgstr "操作" + +msgid "Restarting interface" +msgstr "正在重启网络接口" + +msgid "Reboot" +msgstr "重启设备" + +msgid "At command was sent to modem" +msgstr "AT 命令已发送至调制解调器" + +msgid "January" +msgstr "一月" + +msgid "February" +msgstr "二月" + +msgid "March" +msgstr "三月" + +msgid "April" +msgstr "四月" + +msgid "May" +msgstr "五月" + +msgid "June" +msgstr "六月" + +msgid "July" +msgstr "七月" + +msgid "August" +msgstr "八月" + +msgid "September" +msgstr "九月" + +msgid "October" +msgstr "十月" + +msgid "November" +msgstr "十一月" + +msgid "December" +msgstr "十二月" + +msgid "Monday" +msgstr "星期一" + +msgid "Tuesday" +msgstr "星期二" + +msgid "Wednesday" +msgstr "星期三" + +msgid "Thursday" +msgstr "星期四" + +msgid "Friday" +msgstr "星期五" + +msgid "Saturday" +msgstr "星期六" + +msgid "Sunday" +msgstr "星期日" + +msgid "User Script Wizard" +msgstr "用户脚本向导" + +msgid "Hint: You do not need to save anything in the settings. Select the actions and click the Generate button." +msgstr "提示:无需在设置中保存任何内容。选择操作并点击生成按钮。" + +msgid "modem restart" +msgstr "重启调制解调器" + +msgid "reboot" +msgstr "重启设备" + +msgid "Restart modem if restarting the interfaces did not restore internet access." +msgstr "如果重启接口未能恢复互联网访问,请重启调制解调器。" + +msgid "Router reboot if restarting the interfaces did not restore internet access." +msgstr "如果重启接口未能恢复互联网访问,请重启路由器。" + +msgid "Actions in script" +msgstr "脚本中的操作" + +msgid "Modem actions" +msgstr "调制解调器操作" + +msgid "Restart modem using at commands" +msgstr "使用 AT 命令重启调制解调器" + +msgid "effect depends on modem" +msgstr "效果取决于调制解调器" + +msgid "Some at commands can also restart the router." +msgstr "某些 AT 命令也可以重启路由器。" + +msgid "soft restart" +msgstr "软重启" + +msgid "hard restart" +msgstr "硬重启" + +msgid "Restart modem via GPIO." +msgstr "通过 GPIO 重启调制解调器。" + +msgid "Restart modem using GPIO" +msgstr "通过 GPIO 重启调制解调器" + +msgid "Select the GPIO related to 4G/5G modem." +msgstr "选择与 4G/5G 调制解调器相关的 GPIO。" + +msgid "Generate a script" +msgstr "生成脚本" + +msgid "Generate user script" +msgstr "生成用户脚本" + +msgid "Generate and save the prepared script." +msgstr "生成并保存准备好的脚本。" + +msgid "User can add his script or generate a new one from the selection options." +msgstr "用户可以添加自己的脚本或从选项中生成新脚本。" + +msgid "Set test address (only one recommended)." +msgstr "设置测试地址(建议仅设置一个)。" + +msgid "The available options depend on the previously defined main action (interface or router restart)." +msgstr "可用选项取决于之前定义的主操作(接口或路由器重启)。" + +msgid "user code" +msgstr "用户代码" + +msgid "Add custom commands before restarting the device." +msgstr "在重启设备前添加自定义命令。" + +msgid "from script:" +msgstr "来自脚本:" + +msgid "USER-SCRIPT:" +msgstr "用户脚本:" + +msgid "Soft modem restart" +msgstr "调制解调器软重启" + +msgid "Hard modem restart" +msgstr "调制解调器硬重启" + +msgid "Space for user actions" +msgstr "用户操作空间" + +msgid "Commands before main action" +msgstr "主操作前的命令" + +msgid "Commands after main action" +msgstr "主操作后的命令" + +msgid "Loading..." +msgstr "正在加载..." + +msgid "Waiting for ping command execution..." +msgstr "等待执行 ping 命令..." + +msgid "Watchdog initialized" +msgstr "看门狗已初始化" + +msgid "uptime" +msgstr "运行时间" + +msgid "hosts" +msgstr "主机" diff --git a/luci-app-lite-watchdog/po/zh_Hant/watchdog.po b/luci-app-lite-watchdog/po/zh_Hant/watchdog.po new file mode 100644 index 000000000..f236375da --- /dev/null +++ b/luci-app-lite-watchdog/po/zh_Hant/watchdog.po @@ -0,0 +1,400 @@ +msgid "" +msgstr "" +"Language-Team: Rafał Wabik (IceG)\n" +"Language: zh_Hant\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Connection Monitor" +msgstr "連線監控器" + +msgid "Connection monitor settings" +msgstr "連線監控器設定" + +msgid "Configuration lite-watchdog" +msgstr "lite-watchdog 設定" + +msgid "Configuration panel for lite-watchdog and gui application." +msgstr "lite-watchdog 及圖形介面應用程式的設定面板。" + +msgid "Interface" +msgstr "網路介面" + +msgid "Network interface for Internet access." +msgstr "用於存取網際網路的網路介面。" + +msgid "Port for communication with the modem" +msgstr "與數據機通訊的連接埠" + +msgid "Select one of the available ttyUSBX ports." +msgstr "選擇一個可用的 ttyUSBX 連接埠。" + +msgid "Please select a port" +msgstr "請選擇一個連接埠" + +msgid "Perform a modem restart before resuming the connection." +msgstr "恢復連線前請重新啟動數據機。" + +msgid "Restart modem with AT command" +msgstr "使用 AT 命令重新啟動數據機" + +msgid "AT command to restart the modem." +msgstr "用於重新啟動數據機的 AT 命令。" + +msgid "AT command" +msgstr "AT 命令" + +msgid "total checks" +msgstr "檢查總次數" + +msgid "Configuration of the connection monitor known from the easyconfig package. More information on the %seko.one.pl forum%s." +msgstr "來自 easyconfig 套件的連線監控器設定。更多資訊請訪問 %seko.one.pl 論壇%s。" + +msgid "eko.one.pl forum" +msgstr "eko.one.pl 論壇" + +msgid "Enable a connection monitor." +msgstr "啟用連線監控器。" + +msgid "System startup delay" +msgstr "系統啟動延遲" + +msgid "[1 - 59] minute(s)" +msgstr "[1 - 59] 分鐘" + +msgid "Expect a decimal value between one and fifty-nine" +msgstr "請輸入 1 到 59 之間的整數值" + +msgid "Address or name" +msgstr "位址或名稱" + +msgid "Verification period" +msgstr "檢查週期" + +msgid "Number of failed checks" +msgstr "失敗檢查次數" + +msgid "Action" +msgstr "操作" + +msgid "Connection restart" +msgstr "重新啟動連線" + +msgid "Modem restart" +msgstr "重新啟動數據機" + +msgid "Reboot" +msgstr "重新啟動裝置" + +msgid "Changes have been saved. Connection Monitor has started." +msgstr "變更已儲存。連線監控器已啟動。" + +msgid "Changes have been saved. Connection Monitor is not running." +msgstr "變更已儲存。連線監控器未執行。" + +msgid "Last check" +msgstr "上次檢查" + +msgid "minimum" +msgstr "最小值" + +msgid "average" +msgstr "平均值" + +msgid "maximum" +msgstr "最大值" + +msgid "Information" +msgstr "資訊" + +msgid "Basic settings" +msgstr "基本設定" + +msgid "failed" +msgstr "失敗" + +msgid "Failed" +msgstr "失敗" + +msgid "out of" +msgstr "共" + +msgid "Activity log" +msgstr "活動記錄" + +msgid "Wrong regular expression" +msgstr "正規表示式錯誤" + +msgid "No matches..." +msgstr "無符合結果..." + +msgid "Clear connection monitor log?" +msgstr "清除連線監控器記錄?" + +msgid "Download error" +msgstr "下載錯誤" + +msgid "Unable to load log data:" +msgstr "無法載入記錄資料:" + +msgid "Entries filter" +msgstr "項目篩選器" + +msgid "Filter entries using regexp, press [Delete] to delete all text" +msgstr "使用正規表示式篩選項目,按 [Delete] 刪除所有文字" + +msgid "Refresh" +msgstr "重新整理" + +msgid "Connection monitor activity log" +msgstr "連線監控器活動記錄" + +msgid "Connection monitor activity log known from the easyconfig package. More information on the %seko.one.pl forum%s." +msgstr "來自 easyconfig 套件的連線監控器活動記錄。更多資訊請訪問 %seko.one.pl 論壇%s。" + +msgid "Show only the last entries" +msgstr "僅顯示最新項目" + +msgid "Message filter" +msgstr "訊息篩選器" + +msgid "Refresh log" +msgstr "重新整理記錄" + +msgid "Clear log" +msgstr "清除記錄" + +msgid "Download log" +msgstr "下載記錄" + +msgid "Upload log file" +msgstr "上傳記錄檔案" + +msgid "Type of messages" +msgstr "訊息類型" + +msgid "All actions" +msgstr "所有操作" + +msgid "Only connection problems" +msgstr "僅連線問題" + +msgid "LED settings" +msgstr "LED 設定" + +msgid "The LED shows the internet connection status." +msgstr "LED 顯示網際網路連線狀態。" + +msgid "Select the status LED." +msgstr "選擇狀態 LED。" + +msgid "Edit user script" +msgstr "編輯使用者指令碼" + +msgid "Before executing the action, system calls a script in which user can place his own commands." +msgstr "執行操作前,系統呼叫一個指令碼,使用者可在其中放置自訂命令。" + +msgid "Edit user script" +msgstr "編輯使用者指令碼" + +msgid "User script" +msgstr "使用者指令碼" + +msgid "User-defined commands." +msgstr "使用者自訂命令。" + +msgid "Contents have been saved" +msgstr "內容已儲存" + +msgid "Unable to save the contents" +msgstr "無法儲存內容" + +msgid "Unable to read the contents" +msgstr "無法讀取內容" + +msgid "Status" +msgstr "狀態" + +msgid "ONLINE" +msgstr "線上" + +msgid "OFFLINE" +msgstr "離線" + +msgid "Action" +msgstr "操作" + +msgid "Restarting interface" +msgstr "正在重新啟動網路介面" + +msgid "Reboot" +msgstr "重新啟動裝置" + +msgid "At command was sent to modem" +msgstr "AT 命令已傳送至數據機" + +msgid "January" +msgstr "一月" + +msgid "February" +msgstr "二月" + +msgid "March" +msgstr "三月" + +msgid "April" +msgstr "四月" + +msgid "May" +msgstr "五月" + +msgid "June" +msgstr "六月" + +msgid "July" +msgstr "七月" + +msgid "August" +msgstr "八月" + +msgid "September" +msgstr "九月" + +msgid "October" +msgstr "十月" + +msgid "November" +msgstr "十一月" + +msgid "December" +msgstr "十二月" + +msgid "Monday" +msgstr "星期一" + +msgid "Tuesday" +msgstr "星期二" + +msgid "Wednesday" +msgstr "星期三" + +msgid "Thursday" +msgstr "星期四" + +msgid "Friday" +msgstr "星期五" + +msgid "Saturday" +msgstr "星期六" + +msgid "Sunday" +msgstr "星期日" + +msgid "User Script Wizard" +msgstr "使用者指令碼精靈" + +msgid "Hint: You do not need to save anything in the settings. Select the actions and click the Generate button." +msgstr "提示:無需在設定中儲存任何內容。選擇操作並點擊產生按鈕。" + +msgid "modem restart" +msgstr "重新啟動數據機" + +msgid "reboot" +msgstr "重新啟動裝置" + +msgid "Restart modem if restarting the interfaces did not restore internet access." +msgstr "如果重新啟動介面未能恢復網際網路存取,請重新啟動數據機。" + +msgid "Router reboot if restarting the interfaces did not restore internet access." +msgstr "如果重新啟動介面未能恢復網際網路存取,請重新啟動路由器。" + +msgid "Actions in script" +msgstr "指令碼中的操作" + +msgid "Modem actions" +msgstr "數據機操作" + +msgid "Restart modem using at commands" +msgstr "使用 AT 命令重新啟動數據機" + +msgid "effect depends on modem" +msgstr "效果取決於數據機" + +msgid "Some at commands can also restart the router." +msgstr "某些 AT 命令也可以重新啟動路由器。" + +msgid "soft restart" +msgstr "軟重啟" + +msgid "hard restart" +msgstr "硬重啟" + +msgid "Restart modem via GPIO." +msgstr "透過 GPIO 重新啟動數據機。" + +msgid "Restart modem using GPIO" +msgstr "透過 GPIO 重新啟動數據機" + +msgid "Select the GPIO related to 4G/5G modem." +msgstr "選擇與 4G/5G 數據機相關的 GPIO。" + +msgid "Generate a script" +msgstr "產生指令碼" + +msgid "Generate user script" +msgstr "產生使用者指令碼" + +msgid "Generate and save the prepared script." +msgstr "產生並儲存準備好的指令碼。" + +msgid "User can add his script or generate a new one from the selection options." +msgstr "使用者可以新增自己的指令碼或從選項中產生新指令碼。" + +msgid "Set test address (only one recommended)." +msgstr "設定測試位址(建議僅設定一個)。" + +msgid "The available options depend on the previously defined main action (interface or router restart)." +msgstr "可用選項取決於之前定義的主操作(介面或路由器重新啟動)。" + +msgid "user code" +msgstr "使用者程式碼" + +msgid "Add custom commands before restarting the device." +msgstr "在重新啟動裝置前新增自訂命令。" + +msgid "from script:" +msgstr "來自指令碼:" + +msgid "USER-SCRIPT:" +msgstr "使用者指令碼:" + +msgid "Soft modem restart" +msgstr "數據機軟重啟" + +msgid "Hard modem restart" +msgstr "數據機硬重啟" + +msgid "Space for user actions" +msgstr "使用者操作空間" + +msgid "Commands before main action" +msgstr "主操作前的命令" + +msgid "Commands after main action" +msgstr "主操作後的命令" + +msgid "Loading..." +msgstr "正在載入..." + +msgid "Waiting for ping command execution..." +msgstr "等待執行 ping 命令..." + +msgid "Watchdog initialized" +msgstr "看門狗已初始化" + +msgid "uptime" +msgstr "運行時間" + +msgid "hosts" +msgstr "主機" diff --git a/luci-app-lite-watchdog/root/etc/uci-defaults/setupltw b/luci-app-lite-watchdog/root/etc/uci-defaults/setupltw index 626a8b442..782fb4adf 100644 --- a/luci-app-lite-watchdog/root/etc/uci-defaults/setupltw +++ b/luci-app-lite-watchdog/root/etc/uci-defaults/setupltw @@ -1,9 +1,7 @@ #!/bin/sh -# Copyright 2020-2023 Rafał Wabik (IceG) - From eko.one.pl forum +# Copyright 2020-2026 Rafał Wabik (IceG) - From eko.one.pl forum # MIT License -chmod +x /sbin/watchdog2cron.sh 2>&1 & -chmod +x /sbin/refresh2cron.sh 2>&1 & chmod +x /usr/bin/lite-watchdog-data.sh 2>&1 & chmod +x /usr/bin/lite_watchdog.sh 2>&1 & chmod +x /etc/lite_watchdog.user 2>&1 & diff --git a/luci-app-lite-watchdog/root/sbin/refresh2cron.sh b/luci-app-lite-watchdog/root/sbin/refresh2cron.sh deleted file mode 100755 index e3d3097cd..000000000 --- a/luci-app-lite-watchdog/root/sbin/refresh2cron.sh +++ /dev/null @@ -1,25 +0,0 @@ -#!/bin/sh - -[ -e /etc/crontabs/root ] || touch /etc/crontabs/root - - if grep -q "watchdog" /etc/crontabs/root; then - grep -v "watchdog" /etc/crontabs/root > /tmp/new_cron - mv /tmp/new_cron /etc/crontabs/root - /etc/init.d/cron restart - fi - -sleep 2 - -if ! grep -q "watchdog" /etc/crontabs/root; then - - DY=$(uci -q get watchdog.@watchdog[0].delay) - PD=$(uci -q get watchdog.@watchdog[0].period) - DT=$(uci -q get watchdog.@watchdog[0].dest) - CT=$(uci -q get watchdog.@watchdog[0].period_count) - AN=$(uci -q get watchdog.@watchdog[0].action) - - echo "*/$PD * * * * /usr/bin/lite_watchdog.sh $DY 3 $DT $CT $AN" >> /etc/crontabs/root - /etc/init.d/cron restart -fi - -exit 0 diff --git a/luci-app-lite-watchdog/root/sbin/watchdog2cron.sh b/luci-app-lite-watchdog/root/sbin/watchdog2cron.sh deleted file mode 100755 index d84a862bb..000000000 --- a/luci-app-lite-watchdog/root/sbin/watchdog2cron.sh +++ /dev/null @@ -1,31 +0,0 @@ -#!/bin/sh - -[ -e /etc/crontabs/root ] || touch /etc/crontabs/root - -sleep 4 -ONF=$(uci -q get watchdog.@watchdog[0].enabled) -if [ "x$ONF" != "x1" ]; then - if grep -q "watchdog" /etc/crontabs/root; then - grep -v "watchdog" /etc/crontabs/root > /tmp/new_cron - mv /tmp/new_cron /etc/crontabs/root - /etc/init.d/cron restart - fi - exit 0 -fi - -if ! grep -q "watchdog" /etc/crontabs/root; then - - grep -v "watchdog" /etc/crontabs/root > /tmp/new_cron - mv /tmp/new_cron /etc/crontabs/root - - DY=$(uci -q get watchdog.@watchdog[0].delay) - PD=$(uci -q get watchdog.@watchdog[0].period) - DT=$(uci -q get watchdog.@watchdog[0].dest) - CT=$(uci -q get watchdog.@watchdog[0].period_count) - AN=$(uci -q get watchdog.@watchdog[0].action) - - echo "*/$PD * * * * /usr/bin/lite_watchdog.sh $DY 3 $DT $CT $AN" >> /etc/crontabs/root - /etc/init.d/cron restart -fi - -exit 0 diff --git a/luci-app-lite-watchdog/root/usr/bin/lite-watchdog-data.sh b/luci-app-lite-watchdog/root/usr/bin/lite-watchdog-data.sh index c37db4e98..6ebff6dfd 100755 --- a/luci-app-lite-watchdog/root/usr/bin/lite-watchdog-data.sh +++ b/luci-app-lite-watchdog/root/usr/bin/lite-watchdog-data.sh @@ -1,29 +1,57 @@ #!/bin/sh -VPING="$(cat /tmp/lite_watchdog)" -VMIN=$(echo $VPING | awk -v FS="(round-trip|ms)" '{print $2}') -MIN=$(echo $VMIN | awk -F[=/] '{print $4}' | xargs) -AVG=$(echo $VMIN | awk -F[=/] '{print $5}' | xargs) -MAX=$(echo $VMIN | awk -F[=/] '{print $6}' | xargs) +PING_FILE="/tmp/lite_watchdog" +TEST_TIME_FILE="/tmp/lite_watchdog_tt" +GCNT_FILE="/tmp/lite_watchdog_gcnt" -TEST_TIME="$(cat /tmp/lite_watchdog_tt)" +MIN="" +AVG="" +MAX="" -CNT=$(wc -l < /tmp/lite_watchdog_cnt) -CNT=$((CNT-1)) +if [ -f "$PING_FILE" ]; then + VPING="$(cat "$PING_FILE" 2>/dev/null)" -ONV=$(uci -q get watchdog.@watchdog[0].enabled) -if [ $ONV == "0" ]; then + LINE="$(printf '%s\n' "$VPING" | grep -E '(^|[[:space:]])(rtt|round-trip)[^=]*min/avg/max' | tail -n1)" + if [ -n "$LINE" ]; then + STATS="$(printf '%s' "$LINE" | sed -n 's/.*=\s*\([^ ]*\)\s*ms.*/\1/p')" - ON="0" -else - ON="1" + MIN="$(printf '%s' "$STATS" | cut -d'/' -f1)" + AVG="$(printf '%s' "$STATS" | cut -d'/' -f2)" + MAX="$(printf '%s' "$STATS" | cut -d'/' -f3)" + fi fi -DT=$(uci -q get watchdog.@watchdog[0].dest) -DY=$(uci -q get watchdog.@watchdog[0].delay) -PD=$(uci -q get watchdog.@watchdog[0].period) -CT=$(uci -q get watchdog.@watchdog[0].period_count) -AN=$(uci -q get watchdog.@watchdog[0].action) +[ -n "$MIN" ] || MIN="--.---" +[ -n "$AVG" ] || AVG="--.---" +[ -n "$MAX" ] || MAX="--.---" + +if [ -f "$TEST_TIME_FILE" ]; then + TEST_TIME="$(cat "$TEST_TIME_FILE" 2>/dev/null)" +else + TEST_TIME="" +fi + +if [ -f "$GCNT_FILE" ]; then + NOW_COUNT="$(wc -l < "$GCNT_FILE" 2>/dev/null)" + case "$NOW_COUNT" in ''|*[!0-9]*) NOW_COUNT=0 ;; esac +else + NOW_COUNT=0 +fi + +ONV="$(uci -q get watchdog.@watchdog[0].enabled)" +if [ "$ONV" = "0" ]; then ON="0"; else ON="1"; fi + +DT="$(uci -q get watchdog.@watchdog[0].dest)" +DY="$(uci -q get watchdog.@watchdog[0].delay)" +PD="$(uci -q get watchdog.@watchdog[0].period)" +CT="$(uci -q get watchdog.@watchdog[0].period_count)" +AN="$(uci -q get watchdog.@watchdog[0].action)" + +[ -n "$DT" ] || DT="" +[ -n "$DY" ] || DY="0" +[ -n "$PD" ] || PD="0" +[ -n "$CT" ] || CT="0" +[ -n "$AN" ] || AN="" cat </dev/null || echo 255)" -if [[ "$LINES_COUNT" -ge "$LINES_MAX" ]]; then - echo "$(tail -$LINES_MIN $LOG_FILE)" > $LOG_FILE +[ -d "$DIR" ] || mkdir -p "$DIR" 2>/dev/null +[ -f "$LOG_FILE" ] || : > "$LOG_FILE" + +LINES_COUNT="$(wc -l < "$LOG_FILE" 2>/dev/null)" +[ -z "$LINES_COUNT" ] && LINES_COUNT=0 +if [ "$LINES_COUNT" -ge "$LINES_MAX" ]; then + tmpf="$(mktemp /tmp/lwlog.XXXXXX)" + tail -n "$LINES_MIN" "$LOG_FILE" > "$tmpf" 2>/dev/null + cat "$tmpf" > "$LOG_FILE" + rm -f "$tmpf" fi -if [ ! -f "$CNT_FILE" ]; then - echo -n "" > /tmp/lite_watchdog_cnt - echo 0 >> /tmp/lite_watchdog_cnt +acquire_lock() { + i=0 + while ! mkdir "$LOCKDIR" 2>/dev/null; do + i=$((i+1)) + [ "$i" -ge 10 ] && break + sleep 1 + done +} +release_lock() { + rmdir "$LOCKDIR" 2>/dev/null +} + +lines_count() { + f="$1" + [ -f "$f" ] || { echo 0; return; } + n="$(wc -l < "$f" 2>/dev/null)" + case "$n" in ''|*[!0-9]*) n=0 ;; esac + echo "$n" +} +lines_reset() { : > "$1"; } +lines_inc() { echo "fail" >> "$1"; } + +read_int_file() { + f="$1" + [ -f "$f" ] || { echo 0; return; } + v="$(cat "$f" 2>/dev/null)" + case "$v" in ''|*[!0-9]*) v=0 ;; esac + echo "$v" +} + +init_temp_files() { + local init_needed=0 + + if [ ! -d "/tmp" ] || [ ! -w "/tmp" ]; then + logger -t LITE-WATCHDOG "ERROR: /tmp directory is not accessible or writable" + exit 1 + fi + + if [ ! -f "$GCNT_FILE" ]; then + : > "$GCNT_FILE" 2>/dev/null || { + logger -t LITE-WATCHDOG "ERROR: Cannot create $GCNT_FILE" + exit 1 + } + init_needed=1 + else + if ! wc -l < "$GCNT_FILE" >/dev/null 2>&1; then + : > "$GCNT_FILE" + init_needed=1 + fi + fi + + if [ ! -f "$HIDX_FILE" ]; then + echo "0" > "$HIDX_FILE" 2>/dev/null || { + logger -t LITE-WATCHDOG "ERROR: Cannot create $HIDX_FILE" + exit 1 + } + init_needed=1 + else + hidx_val="$(read_int_file "$HIDX_FILE")" + if [ "$hidx_val" -ge "$HOST_COUNT" ]; then + echo "0" > "$HIDX_FILE" + init_needed=1 + fi + fi + + if [ -f "$STAGE_FILE" ] && [ "$UPTIME" -lt 300 ]; then + rm -f "$STAGE_FILE" + init_needed=1 + fi + + if [ "$init_needed" -eq 1 ]; then + date +"%A %d-%B %Y %T, Watchdog initialized (uptime: ${UPTIME}s, hosts: $HOST_COUNT)" >> "$LOG_FILE" + fi +} + +PC="$2" +case "$PC" in + ''|*[!0-9]*) PC=1 ;; + *) [ "$PC" -le 0 ] && PC=1 ;; +esac + +HOSTS="$(echo "$3" | tr ',' ' ')" +HOST_COUNT=0 +for H in $HOSTS; do + [ -n "$H" ] || continue + eval "HOST_${HOST_COUNT}=\$H" + HOST_COUNT=$((HOST_COUNT + 1)) +done +[ "$HOST_COUNT" -le 0 ] && exit 0 + +PRD="$4" +case "$PRD" in + ''|*[!0-9]*) PRD=3 ;; + *) if [ "$PRD" -le 0 ] || [ "$PRD" -gt 100 ]; then PRD=3; fi ;; +esac + +MAX_GLOBAL_COUNT=$((PRD + 5)) + +init_temp_files + +date +"%Y-%m-%d %T" > /tmp/lite_watchdog_tt + +acquire_lock +HIDX="$(read_int_file "$HIDX_FILE")" +if [ "$HIDX" -ge "$HOST_COUNT" ] || [ "$HIDX" -lt 0 ]; then + HIDX=0 + echo "0" > "$HIDX_FILE" fi -date +"%Y-%m-%d %T" 2>&1 > /tmp/lite_watchdog_tt -ping -q -4 -w 10 -c $2 $3 > /tmp/lite_watchdog 2>/dev/null +eval "CURRENT_HOST=\$HOST_${HIDX}" -PR=$(awk '/packets received/ {print $4}' /tmp/lite_watchdog) -[ -z "$PR" ] && PR=0 -if [ "$PR" = "0" ]; then +if [ -z "$CURRENT_HOST" ]; then + logger -t LITE-WATCHDOG "ERROR: Cannot read host at index $HIDX" + release_lock + exit 1 +fi +release_lock - echo 0 >> /tmp/lite_watchdog_cnt +if ping -q -4 -w 10 -c "$PC" "$CURRENT_HOST" >/tmp/lite_watchdog 2>&1; then + # ONLINE + acquire_lock + if [ "$LOG_D" != "offline" ]; then + date +"%A %d-%B %Y %T, Status: ONLINE (host: $CURRENT_HOST)" >> "$LOG_FILE" + fi + lines_reset "$GCNT_FILE" + release_lock + rm -f "$STAGE_FILE" - TSTC=$(wc -l < /tmp/lite_watchdog_cnt) - TST=$((TSTC-1)) - - date +"%A %d-%B %Y %T, Status: OFFLINE > Failed $TST out of $4" >> $LOG_FILE - - if [ "x$LEDST" = "x1" ]; then - echo "0" > $LEDON - fi + if [ "x$LEDST" = "x1" ] && [ -w "$LEDON" ]; then + echo "$LEDMAX" > "$LEDON" 2>/dev/null + fi + exit 0 else - if [ "$LOG_D" != "offline" ]; then - date +"%A %d-%B %Y %T, Status: ONLINE" >> $LOG_FILE - fi - - if [ "x$LEDST" = "x1" ]; then - echo "255" > $LEDON - fi + # OFFLINE + acquire_lock + GCNT_BEFORE="$(lines_count "$GCNT_FILE")" + [ "$GCNT_BEFORE" -lt "$MAX_GLOBAL_COUNT" ] && lines_inc "$GCNT_FILE" + GCNT="$(lines_count "$GCNT_FILE")" + + NEXT_HIDX=$(( (HIDX + 1) % HOST_COUNT )) + echo "$NEXT_HIDX" > "$HIDX_FILE" + release_lock - echo 1 > /tmp/lite_watchdog_cnt - exit 0 -fi -CNT=$(wc -l < /tmp/lite_watchdog_cnt) -CNT=$((CNT-1)) + date +"%A %d-%B %Y %T, Status: OFFLINE, host: $CURRENT_HOST ➜ Failed $GCNT out of $PRD" >> "$LOG_FILE" -if [ $CNT -ge $4 ]; then + if [ "x$LEDST" = "x1" ] && [ -w "$LEDON" ]; then + echo "0" > "$LEDON" 2>/dev/null + fi - case "$5" in - "reboot") - [ -e /etc/lite_watchdog.user ] && env -i ACTION="reboot" /bin/sh /etc/lite_watchdog.user + if [ "$GCNT" -ge "$PRD" ]; then + ACTION="$5" + WAN="$(uci -q get watchdog.@watchdog[0].iface)" - date +"%A %d-%B %Y %T, Status: OFFLINE > Action: Reboot" >> $LOG_FILE && sleep 5 + if [ -x /etc/lite_watchdog.user ]; then + env -i \ + ACTION="$ACTION" PHASE="pre" \ + HOST_COUNT="$HOST_COUNT" PRD="$PRD" \ + GCNT_FILE="$GCNT_FILE" \ + GCNT="$GCNT" GLOBAL_THRESHOLD="$PRD" \ + LOG_FILE="$LOG_FILE" STAGE_FILE="$STAGE_FILE" \ + /bin/sh /etc/lite_watchdog.user >/dev/null 2>&1 + fi - logger -t LITE-WATCHDOG "Reboot" - reboot - ;; - "wan") - [ -e /etc/lite_watchdog.user ] && env -i ACTION="wan" /bin/sh /etc/lite_watchdog.user + case "$ACTION" in + reboot) + date +"%A %d-%B %Y %T, Status: OFFLINE ➜ Action: Reboot" >> "$LOG_FILE" && sleep 5 + logger -t LITE-WATCHDOG "Reboot" + reboot + ;; + wan) + if [ ! -f "$STAGE_FILE" ]; then + date +"%A %d-%B %Y %T, Status: OFFLINE ➜ Action: Restarting interface" >> "$LOG_FILE" && sleep 5 + logger -t LITE-WATCHDOG "Restarting network interface: \"$WAN\"." + : > "$STAGE_FILE" + ( ifdown "$WAN"; sleep 5; ifup "$WAN" ) & + fi + ;; + esac - echo -n "" > /tmp/lite_watchdog_cnt - echo 0 >> /tmp/lite_watchdog_cnt - - MODRES=$(uci -q get watchdog.@watchdog[0].modemrestart) - if [ "$MODRES" == "1" ]; then - CMD=$(uci -q get watchdog.@watchdog[0].restartcmd) - PORT=$(uci -q get watchdog.@watchdog[0].set_port) - - logger -t LITE-WATCHDOG "Restart modem on port: \"$PORT\"." - (sms_tool -d $PORT at "$CMD") & - - date +"%A %d-%B %Y %T, Status: OFFLINE > Action: At command was sent to modem" >> $LOG_FILE && sleep 59 - fi - - WANT=$(uci -q get watchdog.@watchdog[0].iface) - - if [[ "$WANT" == *"@"* ]]; then - WAN=$(echo $WANT | sed 's/@//') - else - WAN=$(uci -q get watchdog.@watchdog[0].iface) - fi - - date +"%A %d-%B %Y %T, Status: OFFLINE > Action: Restarting interface" >> $LOG_FILE && sleep 5 - - logger -t LITE-WATCHDOG "Restarting network interface: \"$WAN\"." - (ifdown $WAN; sleep 5; ifup $WAN) & - ;; - esac + if [ -f "$STAGE_FILE" ] && [ "$GCNT" -ge $((PRD + 1)) ]; then + if [ -x /etc/lite_watchdog.user ]; then + env -i \ + ACTION="$5" PHASE="post" \ + HOST_COUNT="$HOST_COUNT" PRD="$PRD" \ + GCNT_FILE="$GCNT_FILE" \ + GCNT="$GCNT" GLOBAL_THRESHOLD="$PRD" \ + LOG_FILE="$LOG_FILE" STAGE_FILE="$STAGE_FILE" \ + /bin/sh /etc/lite_watchdog.user >/dev/null 2>&1 + fi + fi + fi fi exit 0 diff --git a/luci-app-lite-watchdog/root/usr/share/rpcd/acl.d/luci-app-lite-watchdog.json b/luci-app-lite-watchdog/root/usr/share/rpcd/acl.d/luci-app-lite-watchdog.json index 8645f34cd..275cb6091 100644 --- a/luci-app-lite-watchdog/root/usr/share/rpcd/acl.d/luci-app-lite-watchdog.json +++ b/luci-app-lite-watchdog/root/usr/share/rpcd/acl.d/luci-app-lite-watchdog.json @@ -1,34 +1,39 @@ -{ - "luci-app-lite-watchdog": { - "description": "Grant access to LuCI app lite-watchdog", - "read": { - "file": { - "/usr/bin/lite-watchdog-data.sh": [ "exec" ], - "/usr/bin/lite_watchdog.sh": [ "exec" ], - "/sbin/watchdog2cron.sh": [ "exec" ], - "/sbin/refresh2cron.sh": [ "exec" ], - "/etc/lite_watchdog.user": [ "exec" ], - "/etc/modem/log.txt": [ "read" ], - "/tmp/lite_watchdog_cnt": [ "read" ], - "/tmp/lite_watchdog": [ "read" ], - "/tmp/lite_watchdog_tt": [ "read" ], - "/etc/lite_watchdog.user": [ "read" ], - "/etc/watchdog": [ "read" ] - }, - "uci": [ "watchdog", "luci-app-lite-watchdog" ] - }, - "write": { - "file": { - "/etc/watchdog": [ "write" ], - "/tmp/lite_watchdog_cnt": [ "write" ], - "/tmp/lite_watchdog": [ "write" ], - "/tmp/lite_watchdog_tt": [ "write" ], - "/etc/lite_watchdog.user": [ "write" ], - "/sys/class/leds/*/brightness": [ "write" ], - "/etc/modem/log.txt": [ "write" ] - }, - "uci": [ "watchdog", "luci-app-lite-watchdog" ] - } - } -} - +{ + "luci-app-lite-watchdog": { + "description": "Grant access to LuCI app lite-watchdog", + "read": { + "file": { + "/usr/bin/lite-watchdog-data.sh": [ "exec" ], + "/usr/bin/lite_watchdog.sh": [ "exec" ], + "/etc/init.d/cron restart": [ "exec" ], + "/etc/lite_watchdog.user": [ "exec" ], + "/etc/modem/log.txt": [ "read" ], + "/tmp/lite_watchdog_cnt": [ "read" ], + "/tmp/lite_watchdog": [ "read" ], + "/tmp/lite_watchdog_tt": [ "read" ], + "/etc/lite_watchdog.user": [ "read" ], + "/etc/watchdog": [ "read" ], + "/etc/crontabs/root": [ "read" ] + }, + "uci": [ "watchdog", "luci-app-lite-watchdog" ] + }, + "write": { + "file": { + "/etc/watchdog": [ "write" ], + "/etc/init.d/cron restart": [ "exec" ], + "/tmp/lite_watchdog_cnt": [ "write" ], + "/tmp/lite_watchdog_gcnt": [ "write" ], + "/tmp/lite_watchdog_index": [ "write" ], + "/tmp/lite_watchdog_stage": [ "write" ], + "/tmp/lite_watchdog": [ "write" ], + "/tmp/lite_watchdog_tt": [ "write" ], + "/etc/lite_watchdog.user": [ "write" ], + "/etc/crontabs/root": [ "write" ], + "/sys/class/leds/*/brightness": [ "write" ], + "/etc/modem/log.txt": [ "write" ] + }, + "uci": [ "watchdog", "luci-app-lite-watchdog" ] + } + } +} + diff --git a/luci-app-log/Makefile b/luci-app-log/Makefile index 5efaaf118..5760592cd 100644 --- a/luci-app-log/Makefile +++ b/luci-app-log/Makefile @@ -8,7 +8,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=luci-app-log-viewer PKG_VERSION:=1.5.0 -PKG_RELEASE:=2 +PKG_RELEASE:=3 LUCI_TITLE:=Advanced syslog and kernel log (tail, search, etc) LUCI_DEPENDS:=+ucode +ucode-mod-fs LUCI_PKGARCH:=all diff --git a/luci-app-log/htdocs/luci-static/resources/view/log-viewer/log-base.js b/luci-app-log/htdocs/luci-static/resources/view/log-viewer/log-base.js index b34c85740..62141bf74 100644 --- a/luci-app-log/htdocs/luci-static/resources/view/log-viewer/log-base.js +++ b/luci-app-log/htdocs/luci-static/resources/view/log-viewer/log-base.js @@ -724,7 +724,7 @@ return baseclass.extend({ if(!fPattern) { return entriesArray; }; - fPattern = this.htmlEntities(fPattern); + //fPattern = this.htmlEntities(fPattern); return (this.msgFilterReValue) ? this.setRegexpFilter(entriesArray, 5, fPattern) : this.setStringFilter(entriesArray, 5, fPattern);