luci-app-ddns: Update to version 2.1.1-0 297/head
authorChristian Schoenebeck <christian.schoenebeck@gmail.com>
Sun, 18 Jan 2015 18:22:54 +0000 (19:22 +0100)
committerChristian Schoenebeck <christian.schoenebeck@gmail.com>
Sun, 18 Jan 2015 18:22:54 +0000 (19:22 +0100)
- 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:
applications/luci-app-ddns/Makefile
applications/luci-app-ddns/luasrc/controller/ddns.lua
applications/luci-app-ddns/luasrc/model/cbi/ddns/detail.lua
applications/luci-app-ddns/luasrc/model/cbi/ddns/hints.lua
applications/luci-app-ddns/luasrc/model/cbi/ddns/overview.lua
applications/luci-app-ddns/luasrc/tools/ddns.lua
applications/luci-app-ddns/luasrc/view/ddns/detail_lvalue.htm
applications/luci-app-ddns/luasrc/view/ddns/detail_value.htm
applications/luci-app-ddns/luasrc/view/ddns/overview_startstop.htm
applications/luci-app-ddns/luasrc/view/ddns/overview_status.htm
applications/luci-app-ddns/luasrc/view/ddns/system_status.htm
applications/luci-app-ddns/po/de/ddns.po
applications/luci-app-ddns/po/templates/ddns.pot

index d116f06..18906cd 100644 (file)
@@ -6,17 +6,32 @@
 
 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_NAME:=luci-app-ddns
 
 PKG_NAME:=luci-app-ddns
-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
index 3cd52e5..56d2b66 100644 (file)
@@ -15,19 +15,21 @@ local SYS  = require "luci.sys"
 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
 
 function index()
 
 function index()
-       -- 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)
@@ -44,17 +46,11 @@ local function _get_status()
        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)
@@ -63,8 +59,8 @@ local function _get_status()
                -- 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(
@@ -182,7 +178,7 @@ function startstop(section, enabled)
                return
        end
 
                return
        end
 
-       -- 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
@@ -210,9 +206,9 @@ function startstop(section, enabled)
        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
        if not exec then
        if not exec then
-               HTTP.write("_uncommited_")
+               HTTP.write("_uncommitted_")
                return
        end
 
                return
        end
 
@@ -238,14 +234,3 @@ function status()
        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
-
index 057b8c8..77753c0 100644 (file)
@@ -22,7 +22,7 @@ has_ipv6   = DDNS.check_ipv6()        -- IPv6 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_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'>"
index 15da028..009ba99 100644 (file)
@@ -11,7 +11,8 @@ local DDNS = require "luci.tools.ddns"                -- ddns multiused functions
 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">]]
index 2944ec5..83b10e9 100644 (file)
@@ -14,7 +14,8 @@ show_hints = not (DDNS.check_ipv6()           -- IPv6 support
                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">]]
@@ -28,8 +29,17 @@ m = Map("ddns")
 -- 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 " ..
index 5c8ced5..2fbcff8 100644 (file)
@@ -96,33 +96,29 @@ function get_pid(section)
        return pid
 end
 
        return pid
 end
 
--- 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
                return nil
        end
                return nil
        end
-       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
        end
        end
-       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
        end
        end
-       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
+       return nil
 end
 
 -- replacement of build-in read of UCI option
 end
 
 -- replacement of build-in read of UCI option
index d516837..0bcfd44 100644 (file)
@@ -1,6 +1,6 @@
 
 <!-- ++ 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 -->
 &#160;
 <% 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") %>>
 &#160;
 <% 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") %>>
index 7cb28e2..cbe76ab 100644 (file)
@@ -5,5 +5,5 @@
                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 ++ -->
index 8255aa6..327028c 100644 (file)
@@ -6,7 +6,7 @@
 -- 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")
index 37c54be..6cca0e7 100644 (file)
@@ -2,12 +2,6 @@
 <!-- ++ 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 "&#38;" or "&amp;"
                                        // after translation
                                        txt="<%:Please [Save & Apply] your changes first%>";
                                        // we need a trick to display Ampersand "&" in stead of "&#38;" or "&amp;"
                                        // 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);
                }
index db9d1d1..7c60726 100644 (file)
                                        break;
                        }
 
                                        break;
                        }
 
-                       // monitored interfacce
+                       // monitored interface
                        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);
                }
index 9706dbd..b965a91 100644 (file)
@@ -1,10 +1,10 @@
 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-Team: \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"
@@ -17,6 +17,15 @@ msgstr ""
 msgid "&"
 msgstr "&"
 
 msgid "&"
 msgstr "&"
 
+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"
 
@@ -36,9 +45,6 @@ msgstr ""
 ">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."
@@ -56,15 +62,15 @@ msgstr ""
 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"
 
@@ -153,6 +159,9 @@ msgstr ""
 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"
 
@@ -166,6 +175,12 @@ msgstr ""
 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"
 
@@ -175,8 +190,8 @@ msgstr "Wiederholungsintervall 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"
@@ -203,12 +218,6 @@ msgstr "Erzwungene Aktualisierung"
 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"
 
@@ -233,6 +242,9 @@ msgstr "IP-Adressquelle"
 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"
 
@@ -248,6 +260,9 @@ msgstr ""
 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"
@@ -261,6 +276,12 @@ msgstr ""
 "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"
@@ -280,6 +301,9 @@ msgstr ""
 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"
 
@@ -296,6 +320,9 @@ msgstr ""
 "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"
 
@@ -311,6 +338,9 @@ msgstr "Keine Daten"
 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."
@@ -338,12 +368,21 @@ msgstr ""
 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"
 
@@ -377,17 +416,14 @@ msgstr "Einmalig ausführen"
 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"
@@ -435,9 +471,24 @@ msgstr ""
 "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 ""
@@ -482,9 +533,6 @@ msgstr "Konnte Server nicht finden:"
 msgid "config error"
 msgstr "Konfigurationsfehler"
 
 msgid "config error"
 msgstr "Konfigurationsfehler"
 
-msgid "custom"
-msgstr "benutzerdefiniert"
-
 msgid "days"
 msgstr "Tage"
 
 msgid "days"
 msgstr "Tage"
 
@@ -500,9 +548,6 @@ msgstr "hier aktivieren"
 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"
 
@@ -512,15 +557,9 @@ msgstr "Aktualisierung hier installieren"
 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'"
 
@@ -545,9 +584,6 @@ msgstr "muss mit 'http://' beginnen"
 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"
 
@@ -564,8 +600,8 @@ msgstr "nslookup kann den Namen nicht auflösen"
 msgid "or"
 msgstr "oder"
 
 msgid "or"
 msgstr "oder"
 
-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"
index c3b8c93..4b983ce 100644 (file)
@@ -4,6 +4,15 @@ msgstr "Content-Type: text/plain; charset=UTF-8"
 msgid "&"
 msgstr ""
 
 msgid "&"
 msgstr ""
 
+msgid "-- custom --"
+msgstr ""
+
+msgid "Advanced Settings"
+msgstr ""
+
+msgid "Applying changes"
+msgstr ""
+
 msgid "Basic Settings"
 msgstr ""
 
 msgid "Basic Settings"
 msgstr ""
 
@@ -18,9 +27,6 @@ msgid ""
 "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."
@@ -34,13 +40,13 @@ msgstr ""
 msgid "Check Interval"
 msgstr ""
 
 msgid "Check Interval"
 msgstr ""
 
-msgid "Check for changed IP every"
+msgid "Collecting data..."
 msgstr ""
 
 msgstr ""
 
-msgid "Check-time unit"
+msgid "Config error"
 msgstr ""
 
 msgstr ""
 
-msgid "Config error"
+msgid "Configuration"
 msgstr ""
 
 msgid "Configure here the details for selected Dynamic DNS service"
 msgstr ""
 
 msgid "Configure here the details for selected Dynamic DNS service"
@@ -109,6 +115,9 @@ msgstr ""
 msgid "Details for"
 msgstr ""
 
 msgid "Details for"
 msgstr ""
 
+msgid "Disabled"
+msgstr ""
+
 msgid "Dynamic DNS"
 msgstr ""
 
 msgid "Dynamic DNS"
 msgstr ""
 
@@ -120,6 +129,12 @@ 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 ""
 
@@ -129,7 +144,7 @@ msgstr ""
 msgid "Event Network"
 msgstr ""
 
 msgid "Event Network"
 msgstr ""
 
-msgid "Event interface"
+msgid "File"
 msgstr ""
 
 msgid "File not found"
 msgstr ""
 
 msgid "File not found"
@@ -155,12 +170,6 @@ msgstr ""
 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 ""
 
@@ -185,6 +194,9 @@ 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 ""
 
@@ -197,6 +209,9 @@ 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"
@@ -206,6 +221,12 @@ msgid ""
 "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"
@@ -220,6 +241,9 @@ msgstr ""
 msgid "Last Update"
 msgstr ""
 
 msgid "Last Update"
 msgstr ""
 
+msgid "Loading"
+msgstr ""
+
 msgid "Log File Viewer"
 msgstr ""
 
 msgid "Log File Viewer"
 msgstr ""
 
@@ -234,6 +258,9 @@ msgid ""
 "protocol."
 msgstr ""
 
 "protocol."
 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 ""
 
@@ -249,6 +276,9 @@ 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 ""
 
@@ -270,12 +300,21 @@ 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 ""
 
@@ -309,16 +348,13 @@ msgstr ""
 msgid "Script"
 msgstr ""
 
 msgid "Script"
 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"
+msgid "Start"
 msgstr ""
 
 msgid "Start / Stop"
 msgstr ""
 
 msgid "Start / Stop"
@@ -361,9 +397,24 @@ msgstr ""
 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 ""
@@ -397,9 +448,6 @@ msgstr ""
 msgid "config error"
 msgstr ""
 
 msgid "config error"
 msgstr ""
 
-msgid "custom"
-msgstr ""
-
 msgid "days"
 msgstr ""
 
 msgid "days"
 msgstr ""
 
@@ -415,9 +463,6 @@ msgstr ""
 msgid "file or directory not found or not 'IGNORE'"
 msgstr ""
 
 msgid "file or directory not found or not 'IGNORE'"
 msgstr ""
 
-msgid "h"
-msgstr ""
-
 msgid "hours"
 msgstr ""
 
 msgid "hours"
 msgstr ""
 
@@ -427,15 +472,9 @@ 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 ""
 
@@ -460,9 +499,6 @@ msgstr ""
 msgid "nc (netcat) can not connect"
 msgstr ""
 
 msgid "nc (netcat) can not connect"
 msgstr ""
 
-msgid "network"
-msgstr ""
-
 msgid "never"
 msgstr ""
 
 msgid "never"
 msgstr ""
 
@@ -478,7 +514,7 @@ msgstr ""
 msgid "or"
 msgstr ""
 
 msgid "or"
 msgstr ""
 
-msgid "or greater"
+msgid "or higher"
 msgstr ""
 
 msgid "please disable"
 msgstr ""
 
 msgid "please disable"