- adaption Makefile to changed luci.mk
- description in Makefile for correct version handling
- modified handling to detect and display installed version
- new functions ipkg_ver_installed() and ipkg_ver_compare
- correct wrong spellings
- modified language template and German translation
Signed-off-by: Christian Schoenebeck <christian.schoenebeck@gmail.com>
13 files changed:
include $(TOPDIR)/rules.mk
include $(TOPDIR)/rules.mk
-LUCI_TITLE:=LuCI Support for Dynamic DNS (ddns-scripts)
-LUCI_DEPENDS:=+ddns-scripts +luci-mod-admin-full
+# LuCI specific settings
+LUCI_TITLE:=LuCI Support for Dynamic DNS Client (ddns-scripts)
+LUCI_DEPENDS:=+luci-mod-admin-full +ddns-scripts
-PKG_VERSION:=2.1.0
-PKG_RELEASE:=4
-PKG_LICENSE:=Apache-2.0
-PKGARCH:=all
+# Version == major.minor.patch
+# increase on new functionality (minor) or patches (patch)
+PKG_VERSION:=2.1.1
+
+# Release == build
+# increase on changes of translation files
+PKG_RELEASE:=0
+
+PKG_LICENSE:=Apache-2.0
PKG_MAINTAINER:=Christian Schoenebeck <christian.schoenebeck@gmail.com>
PKG_MAINTAINER:=Christian Schoenebeck <christian.schoenebeck@gmail.com>
+define Package/$(PKG_NAME)/config
+# shown in make menuconfig <Help>
+help
+ $(LUCI_TITLE)
+
+ Version : $(PKG_VERSION)-$(PKG_RELEASE)
+ Maintainer: $(PKG_MAINTAINER)
+endef
+
include ../../luci.mk
# call BuildPackage - OpenWrt buildroot signature
include ../../luci.mk
# call BuildPackage - OpenWrt buildroot signature
local DDNS = require "luci.tools.ddns" -- ddns multiused functions
local UTIL = require "luci.util"
local DDNS = require "luci.tools.ddns" -- ddns multiused functions
local UTIL = require "luci.util"
-local luci_ddns_version = "2.1.0-4" -- luci-app-ddns / openwrt Makefile compatible version
-local ddns_scripts_min = "2.1.0-3" -- minimum version of ddns-scripts required
+DDNS_MIN = "2.1.0-2" -- minimum version of service required
- -- no services_ipv6 file or no dynamic_dns_lucihelper.sh
- -- do NOT start
- if not nixio.fs.access("/usr/lib/ddns/services_ipv6")
- or not nixio.fs.access("/usr/lib/ddns/dynamic_dns_lucihelper.sh") then
+ local nxfs = require "nixio.fs" -- global definitions not available
+ local sys = require "luci.sys" -- in function index()
+ local ddns = require "luci.tools.ddns" -- ddns multiused functions
+ local verinst = ddns.ipkg_ver_installed("ddns-scripts")
+ local verok = ddns.ipkg_ver_compare(verinst, ">=", "2.0.0-0")
+ -- do NOT start it not ddns-scripts version 2.x
+ if not verok then
return
end
-- no config create an empty one
return
end
-- no config create an empty one
- if not nixio.fs.access("/etc/config/ddns") then
- nixio.fs.writefile("/etc/config/ddns", "")
+ if not nxfs.access("/etc/config/ddns") then
+ nxfs.writefile("/etc/config/ddns", "")
end
entry( {"admin", "services", "ddns"}, cbi("ddns/overview"), _("Dynamic DNS"), 59)
end
entry( {"admin", "services", "ddns"}, cbi("ddns/overview"), _("Dynamic DNS"), 59)
local uci = UCI.cursor()
local service = SYS.init.enabled("ddns") and 1 or 0
local url_start = DISP.build_url("admin", "system", "startup")
local uci = UCI.cursor()
local service = SYS.init.enabled("ddns") and 1 or 0
local url_start = DISP.build_url("admin", "system", "startup")
- local luci_build = DDNS.ipkg_version("luci-app-ddns").version
- local ddns_act = DDNS.ipkg_version("ddns-scripts").version
local data = {} -- Array to transfer data to javascript
data[#data+1] = {
enabled = service, -- service enabled
url_up = url_start, -- link to enable DDS (System-Startup)
local data = {} -- Array to transfer data to javascript
data[#data+1] = {
enabled = service, -- service enabled
url_up = url_start, -- link to enable DDS (System-Startup)
- luci_ver = luci_ddns_version, -- luci-app-ddns / openwrt Makefile compatible version
- luci_build = luci_build, -- installed luci build
- script_min = ddns_scripts_min, -- minimum version of ddns-scripts needed
- script_ver = ddns_act -- installed ddns-scripts
}
uci:foreach("ddns", "service", function (s)
}
uci:foreach("ddns", "service", function (s)
-- and enabled state
local section = s[".name"]
local enabled = tonumber(s["enabled"]) or 0
-- and enabled state
local section = s[".name"]
local enabled = tonumber(s["enabled"]) or 0
- local datelast = "_empty_" -- formated date of last update
- local datenext = "_empty_" -- formated date of next update
+ local datelast = "_empty_" -- formatted date of last update
+ local datenext = "_empty_" -- formatted date of next update
-- get force seconds
local force_seconds = DDNS.calc_seconds(
-- get force seconds
local force_seconds = DDNS.calc_seconds(
- -- read uncommited changes
+ -- read uncommitted changes
-- we don't save and commit data from other section or other options
-- only enabled will be done
local exec = true
-- we don't save and commit data from other section or other options
-- only enabled will be done
local exec = true
end
-- we can not execute because other
end
-- we can not execute because other
- -- uncommited changes pending, so exit here
+ -- uncommitted changes pending, so exit here
- HTTP.write("_uncommited_")
+ HTTP.write("_uncommitted_")
HTTP.prepare_content("application/json")
HTTP.write_json(data)
end
HTTP.prepare_content("application/json")
HTTP.write_json(data)
end
-
--- check if installed ddns-scripts version < required version
-function update_needed()
- local sver = DDNS.ipkg_version("ddns-scripts")
- local rver = UTIL.split(ddns_scripts_min, "[%.%-]", nil, true)
- return (sver.major < (tonumber(rver[1]) or 0))
- or (sver.minor < (tonumber(rver[2]) or 0))
- or (sver.patch < (tonumber(rver[3]) or 0))
- or (sver.build < (tonumber(rver[4]) or 0))
-end
-
has_ssl = DDNS.check_ssl() -- HTTPS support
has_proxy = DDNS.check_proxy() -- Proxy support
has_dnstcp = DDNS.check_bind_host() -- DNS TCP support
has_ssl = DDNS.check_ssl() -- HTTPS support
has_proxy = DDNS.check_proxy() -- Proxy support
has_dnstcp = DDNS.check_bind_host() -- DNS TCP support
-has_force = has_ssl and has_dnstcp -- Force IP Protocoll
+has_force = has_ssl and has_dnstcp -- Force IP Protocoll
-- html constants -- ###########################################################
font_red = "<font color='red'>"
-- html constants -- ###########################################################
font_red = "<font color='red'>"
has_ssl = DDNS.check_ssl() -- HTTPS support
has_proxy = DDNS.check_proxy() -- Proxy support
has_dnstcp = DDNS.check_bind_host() -- DNS TCP support
has_ssl = DDNS.check_ssl() -- HTTPS support
has_proxy = DDNS.check_proxy() -- Proxy support
has_dnstcp = DDNS.check_bind_host() -- DNS TCP support
-need_update = CTRL.update_needed() -- correct ddns-scripts version
+-- correct ddns-scripts version
+need_update = DDNS.ipkg_ver_compare(DDNS.ipkg_ver_installed("ddns-scripts"), "<<", CTRL.DDNS_MIN)
-- html constants
font_red = [[<font color="red">]]
-- html constants
font_red = [[<font color="red">]]
and DDNS.check_proxy() -- Proxy support
and DDNS.check_bind_host() -- DNS TCP support
)
and DDNS.check_proxy() -- Proxy support
and DDNS.check_bind_host() -- DNS TCP support
)
-need_update = CTRL.update_needed() -- correct ddns-scripts version
+-- correct ddns-scripts version
+need_update = DDNS.ipkg_ver_compare(DDNS.ipkg_ver_installed("ddns-scripts"), "<<", CTRL.DDNS_MIN)
-- html constants
font_red = [[<font color="red">]]
-- html constants
font_red = [[<font color="red">]]
-- first need to close <a> from cbi map template our <a> closed by template
--m.title = [[</a><a href="javascript:alert(']] .. CTRL.show_versions() ..[[')">]] ..
-- translate("Dynamic DNS")
-- first need to close <a> from cbi map template our <a> closed by template
--m.title = [[</a><a href="javascript:alert(']] .. CTRL.show_versions() ..[[')">]] ..
-- translate("Dynamic DNS")
-m.title = [[</a><a href="#" onclick="onclick_maptitle();">]] ..
- translate("Dynamic DNS")
+m.title = [[</a><a href="javascript:alert(']]
+ .. translate("Version Information")
+ .. [[\n\nluci-app-ddns]]
+ .. [[\n\t]] .. translate("Version") .. [[:\t]] .. DDNS.ipkg_ver_installed("luci-app-ddns")
+ .. [[\n\nddns-scripts ]] .. translate("required") .. [[:]]
+ .. [[\n\t]] .. translate("Version") .. [[:\t]] .. CTRL.DDNS_MIN .. [[ ]] .. translate("or higher")
+ .. [[\n\nddns-scripts ]] .. translate("installed") .. [[:]]
+ .. [[\n\t]] .. translate("Version") .. [[:\t]] .. DDNS.ipkg_ver_installed("ddns-scripts")
+ .. [[\n\n]]
+ .. [[')">]]
+ .. translate("Dynamic DNS")
m.description = translate("Dynamic DNS allows that your router can be reached with " ..
"a fixed hostname while having a dynamically changing " ..
m.description = translate("Dynamic DNS allows that your router can be reached with " ..
"a fixed hostname while having a dynamically changing " ..
--- read version information for given package if installed
-function ipkg_version(package)
- if not package then
+-- compare versions using "<=" "<" ">" ">=" "=" "<<" ">>"
+function ipkg_ver_compare(ver1, comp, ver2)
+ if not ver1 or not (#ver1 > 0)
+ or not ver2 or not (#ver2 > 0)
+ or not comp or not (#comp > 0) then
- local info = OPKG.info(package)
- local data = {}
- local version = ""
- local i = 0
- for k, v in pairs(info) do
- if v.Package == package and v.Status.installed then
- version = v.Version
- i = i + 1
- end
+ return (tonumber(SYS.call(
+ [[opkg compare-versions "]] .. ver1 .. [[" "]] .. comp .. [[" "]] .. ver2 .. [["]]
+ )) == 1)
+end
+
+-- read version information for given package if installed
+function ipkg_ver_installed(pkg)
+ if not pkg then
+ return nil
- if i > 1 then -- more then one valid record
- return data
+ -- opkg list-installed [pkg] | cut -d " " -f 3 - return version as sting
+ local ver = SYS.exec([[opkg list-installed ]] .. pkg .. [[ | cut -d " " -f 3 ]])
+ if (#ver > 0) then
+ return ver
- local sver = UTIL.split(version, "[%.%-]", nil, true)
- data = {
- version = version,
- major = tonumber(sver[1]) or 0,
- minor = tonumber(sver[2]) or 0,
- patch = tonumber(sver[3]) or 0,
- build = tonumber(sver[4]) or 0
- }
- return data
end
-- replacement of build-in read of UCI option
end
-- replacement of build-in read of UCI option
<!-- ++ BEGIN ++ Dynamic DNS ++ detail_lvalue.htm ++ -->
<!-- ++ BEGIN ++ Dynamic DNS ++ detail_lvalue.htm ++ -->
-<!-- no value header to supress next line -->
+<!-- no value header to suppress next line -->
 
<% if self.widget == "select" then %>
<select class="cbi-input-select" onchange="cbi_d_update(this.id)"<%= attr("id", cbid) .. attr("name", cbid) .. ifattr(self.size, "size") %>>
 
<% if self.widget == "select" then %>
<select class="cbi-input-select" onchange="cbi_d_update(this.id)"<%= attr("id", cbid) .. attr("name", cbid) .. ifattr(self.size, "size") %>>
attr("name", cbid) .. attr("id", cbid) .. attr("value", self:cfgvalue(section) or self.default) ..
ifattr(self.size, "size") .. ifattr(self.placeholder, "placeholder")
%> />
attr("name", cbid) .. attr("id", cbid) .. attr("value", self:cfgvalue(section) or self.default) ..
ifattr(self.size, "size") .. ifattr(self.placeholder, "placeholder")
%> />
-<!-- no value footer to supress next line -->
+<!-- no value footer to suppress next line -->
<!-- ++ END ++ Dynamic DNS ++ detail_value.htm ++ -->
<!-- ++ END ++ Dynamic DNS ++ detail_value.htm ++ -->
-- We need to garantie that function cfgvalue run first to set missing parameters
%>
<!-- style="font-size: 100%;" needed for openwrt theme to fix font size -->
-- We need to garantie that function cfgvalue run first to set missing parameters
%>
<!-- style="font-size: 100%;" needed for openwrt theme to fix font size -->
- <!-- type="button" onclick="..." enable standard onclick functionalty -->
+ <!-- type="button" onclick="..." enable standard onclick functionality -->
<input class="cbi-button cbi-input-<%=self.inputstyle or "button" %>" style="font-size: 100%;" type="button" onclick="onclick_startstop(this.id)"
<%=
attr("name", section) .. attr("id", cbid) .. attr("value", self.inputtitle) .. ifattr(self.disabled, "disabled")
<input class="cbi-button cbi-input-<%=self.inputstyle or "button" %>" style="font-size: 100%;" type="button" onclick="onclick_startstop(this.id)"
<%=
attr("name", section) .. attr("id", cbid) .. attr("value", self.inputtitle) .. ifattr(self.disabled, "disabled")
<!-- ++ BEGIN ++ Dynamic DNS ++ overview_status.htm ++ -->
<script type="text/javascript">//<![CDATA[
<!-- ++ BEGIN ++ Dynamic DNS ++ overview_status.htm ++ -->
<script type="text/javascript">//<![CDATA[
- // variables to store version information
- var luci_version
- var luci_build
- var ddns_version
- var ddns_required
-
// helper to extract section from objects id
// cbi.ddns.SECTION._xyz
function _id2section(id) {
// helper to extract section from objects id
// cbi.ddns.SECTION._xyz
function _id2section(id) {
// screen objects
// called by XHR.poll and onclick_startstop
function _data2elements(data) {
// screen objects
// called by XHR.poll and onclick_startstop
function _data2elements(data) {
- // DDNS Service
- // fill Version informations
- luci_version = data[0].luci_ver
- luci_build = data[0].luci_build
- ddns_version = data[0].script_ver
- ddns_required = data[0].script_min
-
// Service sections
for( i = 1; i < data.length; i++ )
{
// Service sections
for( i = 1; i < data.length; i++ )
{
- // event handler for map.title link
- function onclick_maptitle() {
- var str = "<%:Version Information%>";
- str += "\n\nluci-app-ddns:";
- str += "\n\t<%:Version%>:\t" + luci_version;
- str += "\n\t<%:Build%>:\t" + luci_build;
- str += "\n\nddns-scripts <%:required%>:";
- str += "\n\t<%:Version%>:\t" + ddns_required + " <%:or greater%>";
- str += "\n\nddns-scripts <%:installed%>:";
- str += "\n\t<%:Version%>:\t" + ddns_version;
- str += "\n\n"
- alert(str);
- }
-
// event handler for start/stop button
function onclick_startstop(id) {
// extract section
var section = _id2section(id);
// get elements
var cbx = document.getElementById("cbid.ddns." + section + ".enabled"); // Enabled
// event handler for start/stop button
function onclick_startstop(id) {
// extract section
var section = _id2section(id);
// get elements
var cbx = document.getElementById("cbid.ddns." + section + ".enabled"); // Enabled
- var obj = document.getElementById("cbi-ddns-overview-status-legend"); // objext defined below to make in-/visible
+ var obj = document.getElementById("cbi-ddns-overview-status-legend"); // object defined below to make in-/visible
if ( !(obj && cbx) ) { return; } // security check
// make me visible
if ( !(obj && cbx) ) { return; } // security check
// make me visible
var btnXHR = new XHR();
btnXHR.get('<%=luci.dispatcher.build_url("admin", "services", "ddns", "startstop")%>/' + section + '/' + cbx.checked, null,
function(x, data) {
var btnXHR = new XHR();
btnXHR.get('<%=luci.dispatcher.build_url("admin", "services", "ddns", "startstop")%>/' + section + '/' + cbx.checked, null,
function(x, data) {
- if (x.responseText == "_uncommited_") {
+ if (x.responseText == "_uncommitted_") {
// we need a trick to display Ampersand "&" in stead of "&" or "&"
// after translation
txt="<%:Please [Save & Apply] your changes first%>";
// we need a trick to display Ampersand "&" in stead of "&" or "&"
// after translation
txt="<%:Please [Save & Apply] your changes first%>";
+ var ddns_ov_XHR = new XHR();
// force to immediate show status on page load (not waiting for XHR.poll)
// force to immediate show status on page load (not waiting for XHR.poll)
- XHR.get('<%=luci.dispatcher.build_url("admin", "services", "ddns", "status")%>', null,
+ ddns_ov_XHR.get('<%=luci.dispatcher.build_url("admin", "services", "ddns", "status")%>', null,
function(x, data) {
_data2elements(data);
}
function(x, data) {
_data2elements(data);
}
// define only ONE XHR.poll in a page because if one is running it blocks the other one
// optimum is to define on Map or Section Level from here you can reach all elements
// we need update every 15 seconds only
// define only ONE XHR.poll in a page because if one is running it blocks the other one
// optimum is to define on Map or Section Level from here you can reach all elements
// we need update every 15 seconds only
- XHR.poll(15, '<%=luci.dispatcher.build_url("admin", "services", "ddns", "status")%>', null,
+ ddns_ov_XHR.poll(15, '<%=luci.dispatcher.build_url("admin", "services", "ddns", "status")%>', null,
function(x, data) {
_data2elements(data);
}
function(x, data) {
_data2elements(data);
}
- // monitored interfacce
if (data[i].iface == "_nonet_")
tr.insertCell(-1).innerHTML = '<em><%:Config error%></em>';
else
if (data[i].iface == "_nonet_")
tr.insertCell(-1).innerHTML = '<em><%:Config error%></em>';
else
+ var ddns_status_XHR = new XHR();
// force to immediate show status (not waiting for XHR.poll)
// force to immediate show status (not waiting for XHR.poll)
- XHR.get('<%=luci.dispatcher.build_url("admin", "services", "ddns", "status")%>', null,
+ ddns_status_XHR.get('<%=luci.dispatcher.build_url("admin", "services", "ddns", "status")%>', null,
function(x, data) {
_data2elements(x, data);
}
);
function(x, data) {
_data2elements(x, data);
}
);
- XHR.poll(10, '<%=luci.dispatcher.build_url("admin", "services", "ddns", "status")%>', null,
+ ddns_status_XHR.poll(10, '<%=luci.dispatcher.build_url("admin", "services", "ddns", "status")%>', null,
function(x, data) {
_data2elements(x, data);
}
function(x, data) {
_data2elements(x, data);
}
msgid ""
msgstr ""
"Project-Id-Version: luci-app-ddns\n"
msgid ""
msgstr ""
"Project-Id-Version: luci-app-ddns\n"
-"POT-Creation-Date: 2014-11-09 13:41+0100\n"
-"PO-Revision-Date: 2014-11-09 14:29+0100\n"
+"POT-Creation-Date: 2015-01-17 18:28+0100\n"
+"PO-Revision-Date: 2015-01-17 18:36+0100\n"
"Last-Translator: Christian Schoenebeck <christian.schoenebeck@gmail.com>\n"
"Last-Translator: Christian Schoenebeck <christian.schoenebeck@gmail.com>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: de\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Language: de\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
+msgid "-- custom --"
+msgstr "-- benutzerdefiniert --"
+
+msgid "Advanced Settings"
+msgstr "Erweiterte Einstellungen"
+
+msgid "Applying changes"
+msgstr "Änderungen anwenden"
+
msgid "Basic Settings"
msgstr "Grundlegende Einstellungen"
msgid "Basic Settings"
msgstr "Grundlegende Einstellungen"
">Wenn Sie Aktualisierungen für IPv4 und IPv6 senden möchten benötigen Sie "
"zwei Konfigurationen z.B. 'myddns_ipv4' und 'myddns_ipv6'"
">Wenn Sie Aktualisierungen für IPv4 und IPv6 senden möchten benötigen Sie "
"zwei Konfigurationen z.B. 'myddns_ipv4' und 'myddns_ipv6'"
-msgid "Build"
-msgstr "Build"
-
msgid ""
"BusyBox's nslookup and Wget do not support to specify the IP version to use "
"for communication with DDNS Provider."
msgid ""
"BusyBox's nslookup and Wget do not support to specify the IP version to use "
"for communication with DDNS Provider."
msgid "Check Interval"
msgstr "Prüfinterval"
msgid "Check Interval"
msgstr "Prüfinterval"
-msgid "Check for changed IP every"
-msgstr "Teste auf neue IP alle"
-
-msgid "Check-time unit"
-msgstr "Zeiteinheit"
+msgid "Collecting data..."
+msgstr "Sammle Daten..."
msgid "Config error"
msgstr "Konfigurationsfehler"
msgid "Config error"
msgstr "Konfigurationsfehler"
+msgid "Configuration"
+msgstr "Einstellungen"
+
msgid "Configure here the details for selected Dynamic DNS service"
msgstr "Konfiguriere hier die Details für den gewählten Dynamik DNS Dienst"
msgid "Configure here the details for selected Dynamic DNS service"
msgstr "Konfiguriere hier die Details für den gewählten Dynamik DNS Dienst"
msgid "Details for"
msgstr "Details für"
msgid "Details for"
msgstr "Details für"
+msgid "Disabled"
+msgstr "Deaktiviert"
+
msgid "Dynamic DNS"
msgstr "Dynamisches DNS"
msgid "Dynamic DNS"
msgstr "Dynamisches DNS"
msgid "Enable secure communication with DDNS provider"
msgstr "Aktiviert sichere Kommunikation mit dem DDNS Anbieter"
msgid "Enable secure communication with DDNS provider"
msgstr "Aktiviert sichere Kommunikation mit dem DDNS Anbieter"
+msgid "Enabled"
+msgstr "Aktiviert"
+
+msgid "Error"
+msgstr "Fehler"
+
msgid "Error Retry Counter"
msgstr "Wiederholungszähler bei Fehler"
msgid "Error Retry Counter"
msgstr "Wiederholungszähler bei Fehler"
msgid "Event Network"
msgstr "Ereignis Netzwerk"
msgid "Event Network"
msgstr "Ereignis Netzwerk"
-msgid "Event interface"
-msgstr "Ereignis Netzwerk"
+msgid "File"
+msgstr "Datei"
msgid "File not found"
msgstr "Datei nicht gefunden"
msgid "File not found"
msgstr "Datei nicht gefunden"
msgid "Force TCP on DNS"
msgstr "Erzwinge TCP bei DNS-Anfragen"
msgid "Force TCP on DNS"
msgstr "Erzwinge TCP bei DNS-Anfragen"
-msgid "Force update every"
-msgstr "Erzwinge Aktualisierung alle"
-
-msgid "Force-time unit"
-msgstr "Zeiteinheit"
-
msgid "Forced IP Version don't matched"
msgstr "Erzwungene IP Version stimmt nicht überein"
msgid "Forced IP Version don't matched"
msgstr "Erzwungene IP Version stimmt nicht überein"
msgid "IP address version"
msgstr "IP-Adressversion"
msgid "IP address version"
msgstr "IP-Adressversion"
+msgid "IPv4-Address"
+msgstr "IPv4-Adresse"
+
msgid "IPv6 address must be given in square brackets"
msgstr "Eine IPv6 Adresse muss in eckigen Klammern angegeben werden"
msgid "IPv6 address must be given in square brackets"
msgstr "Eine IPv6 Adresse muss in eckigen Klammern angegeben werden"
msgid "IPv6 not supported"
msgstr "IPv6 nicht unterstützt"
msgid "IPv6 not supported"
msgstr "IPv6 nicht unterstützt"
+msgid "IPv6-Address"
+msgstr "IPv6-Adresse"
+
msgid ""
"If this service section is disabled it could not be started.<br />Neither "
"from LuCI interface nor from console"
msgid ""
"If this service section is disabled it could not be started.<br />Neither "
"from LuCI interface nor from console"
"In einigen Versionen von OpenWrt wurde cURL/libcurl ohne Proxy Unterstützung "
"compiliert."
"In einigen Versionen von OpenWrt wurde cURL/libcurl ohne Proxy Unterstützung "
"compiliert."
+msgid "Info"
+msgstr "Informationen"
+
+msgid "Interface"
+msgstr "Schnittstelle"
+
msgid ""
"Interval to check for changed IP<br />Values below 5 minutes == 300 seconds "
"are not supported"
msgid ""
"Interval to check for changed IP<br />Values below 5 minutes == 300 seconds "
"are not supported"
msgid "Last Update"
msgstr "Letztes Aktualisierung"
msgid "Last Update"
msgstr "Letztes Aktualisierung"
+msgid "Loading"
+msgstr "Lade"
+
msgid "Log File Viewer"
msgstr "Protokolldatei"
msgid "Log File Viewer"
msgstr "Protokolldatei"
"Weder GNU Wget mit SSL noch cURL sind installiert um Aktualisierungen über "
"HTTPS Protokoll zu unterstützen."
"Weder GNU Wget mit SSL noch cURL sind installiert um Aktualisierungen über "
"HTTPS Protokoll zu unterstützen."
+msgid "Network"
+msgstr "Netzwerk"
+
msgid "Network on which the ddns-updater scripts will be started"
msgstr "Netzwerk auf dem Ereignisse die ddns-updater Skripte starten"
msgid "Network on which the ddns-updater scripts will be started"
msgstr "Netzwerk auf dem Ereignisse die ddns-updater Skripte starten"
msgid "No logging"
msgstr "Keine Protokollierung"
msgid "No logging"
msgstr "Keine Protokollierung"
+msgid "Notice"
+msgstr "Notiz"
+
msgid "OPTIONAL: Force the usage of pure IPv4/IPv6 only communication."
msgstr ""
"OPTIONAL: Erzwingt die Verwendung einer reinen IPv4/IPv6 Kommunikation."
msgid "OPTIONAL: Force the usage of pure IPv4/IPv6 only communication."
msgstr ""
"OPTIONAL: Erzwingt die Verwendung einer reinen IPv4/IPv6 Kommunikation."
msgid "On Error the script will stop execution after given number of retrys"
msgstr "Das Skript wird nach der gegebener Anzahlt von Fehlversuchen beendet"
msgid "On Error the script will stop execution after given number of retrys"
msgstr "Das Skript wird nach der gegebener Anzahlt von Fehlversuchen beendet"
+msgid "Overview"
+msgstr "Übersicht"
+
msgid "PROXY-Server"
msgstr "Proxy-Server"
msgid "PROXY-Server not supported"
msgstr "Proxy-Server nicht unterstützt"
msgid "PROXY-Server"
msgstr "Proxy-Server"
msgid "PROXY-Server not supported"
msgstr "Proxy-Server nicht unterstützt"
+msgid "Password"
+msgstr "Passwort"
+
+msgid "Path to CA-Certificate"
+msgstr "Pfad zum CA-Zertifikat"
+
msgid "Please [Save & Apply] your changes first"
msgstr "Bitte [Speichern & Anwenden] Sie Änderungen zunächst"
msgid "Please [Save & Apply] your changes first"
msgstr "Bitte [Speichern & Anwenden] Sie Änderungen zunächst"
msgid "Script"
msgstr "Skript"
msgid "Script"
msgstr "Skript"
-msgid "Service"
-msgstr "Dienst"
-
msgid "Show more"
msgstr "Zeige mehr"
msgid "Software update required"
msgstr "Softwareaktualisierung nötig"
msgid "Show more"
msgstr "Zeige mehr"
msgid "Software update required"
msgstr "Softwareaktualisierung nötig"
-msgid "Source of IP address"
-msgstr "Quelle der IP-Adresse"
+msgid "Start"
+msgstr "Start"
msgid "Start / Stop"
msgstr "Start / Stopp"
msgid "Start / Stop"
msgstr "Start / Stopp"
"Definiert das Skript mit dem die aktuelle IP-Adresse des System gelesen "
"wird."
"Definiert das Skript mit dem die aktuelle IP-Adresse des System gelesen "
"wird."
+msgid "Username"
+msgstr "Benutzername"
+
+msgid "Verify"
+msgstr "überprüfen"
+
+msgid "Version"
+msgstr "Version"
+
msgid "Version Information"
msgstr "Versionsinformationen"
msgid "Version Information"
msgstr "Versionsinformationen"
+msgid "Waiting for changes to be applied..."
+msgstr "Änderungen werden angewandt..."
+
+msgid "Warning"
+msgstr "Warnung"
+
msgid ""
"Writes detailed messages to log file. File will be truncated automatically."
msgstr ""
msgid ""
"Writes detailed messages to log file. File will be truncated automatically."
msgstr ""
msgid "config error"
msgstr "Konfigurationsfehler"
msgid "config error"
msgstr "Konfigurationsfehler"
-msgid "custom"
-msgstr "benutzerdefiniert"
-
msgid "days"
msgstr "Tage"
msgid "days"
msgstr "Tage"
msgid "file or directory not found or not 'IGNORE'"
msgstr "Datei oder Verzeichnis nicht gefunden oder nicht 'IGNORE'"
msgid "file or directory not found or not 'IGNORE'"
msgstr "Datei oder Verzeichnis nicht gefunden oder nicht 'IGNORE'"
-msgid "h"
-msgstr "Stunden"
-
msgid "hours"
msgstr "Stunden"
msgid "hours"
msgstr "Stunden"
msgid "installed"
msgstr "installiert"
msgid "installed"
msgstr "installiert"
-msgid "interface"
-msgstr "Schnittstelle"
-
msgid "invalid - Sample"
msgstr "ungültig - Beispiel"
msgid "invalid - Sample"
msgstr "ungültig - Beispiel"
-msgid "min"
-msgstr "Minuten"
-
msgid "minimum value '0'"
msgstr "Minimum Wert '0'"
msgid "minimum value '0'"
msgstr "Minimum Wert '0'"
msgid "nc (netcat) can not connect"
msgstr "nc (netcat) kann keine Verbindung herstellen"
msgid "nc (netcat) can not connect"
msgstr "nc (netcat) kann keine Verbindung herstellen"
-msgid "network"
-msgstr "Netzwerk"
-
msgid "never"
msgstr "nie"
msgid "never"
msgstr "nie"
-msgid "or greater"
-msgstr "oder größer"
+msgid "or higher"
+msgstr "oder höher"
msgid "please disable"
msgstr "Bitte deaktivieren"
msgid "please disable"
msgstr "Bitte deaktivieren"
+msgid "-- custom --"
+msgstr ""
+
+msgid "Advanced Settings"
+msgstr ""
+
+msgid "Applying changes"
+msgstr ""
+
msgid "Basic Settings"
msgstr ""
msgid "Basic Settings"
msgstr ""
"separate Configurations i.e. 'myddns_ipv4' and 'myddns_ipv6'"
msgstr ""
"separate Configurations i.e. 'myddns_ipv4' and 'myddns_ipv6'"
msgstr ""
-msgid "Build"
-msgstr ""
-
msgid ""
"BusyBox's nslookup and Wget do not support to specify the IP version to use "
"for communication with DDNS Provider."
msgid ""
"BusyBox's nslookup and Wget do not support to specify the IP version to use "
"for communication with DDNS Provider."
msgid "Check Interval"
msgstr ""
msgid "Check Interval"
msgstr ""
-msgid "Check for changed IP every"
+msgid "Collecting data..."
msgstr ""
msgid "Configure here the details for selected Dynamic DNS service"
msgstr ""
msgid "Configure here the details for selected Dynamic DNS service"
msgid "Details for"
msgstr ""
msgid "Details for"
msgstr ""
+msgid "Disabled"
+msgstr ""
+
msgid "Dynamic DNS"
msgstr ""
msgid "Dynamic DNS"
msgstr ""
msgid "Enable secure communication with DDNS provider"
msgstr ""
msgid "Enable secure communication with DDNS provider"
msgstr ""
+msgid "Enabled"
+msgstr ""
+
+msgid "Error"
+msgstr ""
+
msgid "Error Retry Counter"
msgstr ""
msgid "Error Retry Counter"
msgstr ""
msgid "Event Network"
msgstr ""
msgid "Event Network"
msgstr ""
msgstr ""
msgid "File not found"
msgstr ""
msgid "File not found"
msgid "Force TCP on DNS"
msgstr ""
msgid "Force TCP on DNS"
msgstr ""
-msgid "Force update every"
-msgstr ""
-
-msgid "Force-time unit"
-msgstr ""
-
msgid "Forced IP Version don't matched"
msgstr ""
msgid "Forced IP Version don't matched"
msgstr ""
msgid "IP address version"
msgstr ""
msgid "IP address version"
msgstr ""
+msgid "IPv4-Address"
+msgstr ""
+
msgid "IPv6 address must be given in square brackets"
msgstr ""
msgid "IPv6 address must be given in square brackets"
msgstr ""
msgid "IPv6 not supported"
msgstr ""
msgid "IPv6 not supported"
msgstr ""
+msgid "IPv6-Address"
+msgstr ""
+
msgid ""
"If this service section is disabled it could not be started.<br />Neither "
"from LuCI interface nor from console"
msgid ""
"If this service section is disabled it could not be started.<br />Neither "
"from LuCI interface nor from console"
"In some versions cURL/libcurl in OpenWrt is compiled without proxy support."
msgstr ""
"In some versions cURL/libcurl in OpenWrt is compiled without proxy support."
msgstr ""
+msgid "Info"
+msgstr ""
+
+msgid "Interface"
+msgstr ""
+
msgid ""
"Interval to check for changed IP<br />Values below 5 minutes == 300 seconds "
"are not supported"
msgid ""
"Interval to check for changed IP<br />Values below 5 minutes == 300 seconds "
"are not supported"
msgid "Last Update"
msgstr ""
msgid "Last Update"
msgstr ""
+msgid "Loading"
+msgstr ""
+
msgid "Log File Viewer"
msgstr ""
msgid "Log File Viewer"
msgstr ""
+msgid "Network"
+msgstr ""
+
msgid "Network on which the ddns-updater scripts will be started"
msgstr ""
msgid "Network on which the ddns-updater scripts will be started"
msgstr ""
msgid "No logging"
msgstr ""
msgid "No logging"
msgstr ""
+msgid "Notice"
+msgstr ""
+
msgid "OPTIONAL: Force the usage of pure IPv4/IPv6 only communication."
msgstr ""
msgid "OPTIONAL: Force the usage of pure IPv4/IPv6 only communication."
msgstr ""
msgid "On Error the script will stop execution after given number of retrys"
msgstr ""
msgid "On Error the script will stop execution after given number of retrys"
msgstr ""
+msgid "Overview"
+msgstr ""
+
msgid "PROXY-Server"
msgstr ""
msgid "PROXY-Server not supported"
msgstr ""
msgid "PROXY-Server"
msgstr ""
msgid "PROXY-Server not supported"
msgstr ""
+msgid "Password"
+msgstr ""
+
+msgid "Path to CA-Certificate"
+msgstr ""
+
msgid "Please [Save & Apply] your changes first"
msgstr ""
msgid "Please [Save & Apply] your changes first"
msgstr ""
-msgid "Service"
-msgstr ""
-
msgid "Show more"
msgstr ""
msgid "Software update required"
msgstr ""
msgid "Show more"
msgstr ""
msgid "Software update required"
msgstr ""
-msgid "Source of IP address"
msgstr ""
msgid "Start / Stop"
msgstr ""
msgid "Start / Stop"
msgid "User defined script to read systems IP-Address"
msgstr ""
msgid "User defined script to read systems IP-Address"
msgstr ""
+msgid "Username"
+msgstr ""
+
+msgid "Verify"
+msgstr ""
+
+msgid "Version"
+msgstr ""
+
msgid "Version Information"
msgstr ""
msgid "Version Information"
msgstr ""
+msgid "Waiting for changes to be applied..."
+msgstr ""
+
+msgid "Warning"
+msgstr ""
+
msgid ""
"Writes detailed messages to log file. File will be truncated automatically."
msgstr ""
msgid ""
"Writes detailed messages to log file. File will be truncated automatically."
msgstr ""
msgid "config error"
msgstr ""
msgid "config error"
msgstr ""
-msgid "custom"
-msgstr ""
-
msgid "file or directory not found or not 'IGNORE'"
msgstr ""
msgid "file or directory not found or not 'IGNORE'"
msgstr ""
msgid "installed"
msgstr ""
msgid "installed"
msgstr ""
-msgid "interface"
-msgstr ""
-
msgid "invalid - Sample"
msgstr ""
msgid "invalid - Sample"
msgstr ""
-msgid "min"
-msgstr ""
-
msgid "minimum value '0'"
msgstr ""
msgid "minimum value '0'"
msgstr ""
msgid "nc (netcat) can not connect"
msgstr ""
msgid "nc (netcat) can not connect"
msgstr ""
-msgid "network"
-msgstr ""
-
msgstr ""
msgid "please disable"
msgstr ""
msgid "please disable"