Browse Source

Update luci

NYNEX 6 years ago
parent
commit
b12f8eef88
100 changed files with 7625 additions and 638 deletions
  1. 5 0
      package/luci/.buildpath
  2. 221 0
      package/luci/.cproject
  3. 78 0
      package/luci/.project
  4. 4 6
      package/luci/applications/luci-app-adblock/Makefile
  5. 45 3
      package/luci/applications/luci-app-adblock/luasrc/controller/adblock.lua
  6. 0 63
      package/luci/applications/luci-app-adblock/luasrc/model/cbi/adblock.lua
  7. 52 0
      package/luci/applications/luci-app-adblock/luasrc/model/cbi/adblock/blacklist_tab.lua
  8. 39 0
      package/luci/applications/luci-app-adblock/luasrc/model/cbi/adblock/configuration_tab.lua
  9. 237 0
      package/luci/applications/luci-app-adblock/luasrc/model/cbi/adblock/overview_tab.lua
  10. 51 0
      package/luci/applications/luci-app-adblock/luasrc/model/cbi/adblock/whitelist_tab.lua
  11. 10 0
      package/luci/applications/luci-app-adblock/luasrc/view/adblock/config_css.htm
  12. 14 0
      package/luci/applications/luci-app-adblock/luasrc/view/adblock/logread.htm
  13. 65 0
      package/luci/applications/luci-app-adblock/luasrc/view/adblock/query.htm
  14. 10 0
      package/luci/applications/luci-app-adblock/luasrc/view/adblock/runtime.htm
  15. 337 0
      package/luci/applications/luci-app-adblock/po/it/adblock.po
  16. 273 76
      package/luci/applications/luci-app-adblock/po/ja/adblock.po
  17. 338 35
      package/luci/applications/luci-app-adblock/po/pt-br/adblock.po
  18. 301 29
      package/luci/applications/luci-app-adblock/po/sv/adblock.po
  19. 226 19
      package/luci/applications/luci-app-adblock/po/templates/adblock.pot
  20. 297 31
      package/luci/applications/luci-app-adblock/po/zh-cn/adblock.po
  21. 20 0
      package/luci/applications/luci-app-advanced-reboot/Makefile
  22. 35 0
      package/luci/applications/luci-app-advanced-reboot/README.md
  23. 120 0
      package/luci/applications/luci-app-advanced-reboot/luasrc/controller/advanced_reboot.lua
  24. 92 0
      package/luci/applications/luci-app-advanced-reboot/luasrc/view/advanced_reboot/advanced_reboot.htm
  25. 29 0
      package/luci/applications/luci-app-advanced-reboot/luasrc/view/advanced_reboot/alternative_reboot.htm
  26. 25 0
      package/luci/applications/luci-app-advanced-reboot/luasrc/view/advanced_reboot/power_off.htm
  27. 108 0
      package/luci/applications/luci-app-advanced-reboot/po/sv/luci-app-advanced-reboot.po
  28. 102 0
      package/luci/applications/luci-app-advanced-reboot/po/templates/luci-app-advanced-reboot.pot
  29. 5 1
      package/luci/applications/luci-app-ahcp/po/sv/ahcp.po
  30. 208 0
      package/luci/applications/luci-app-aria2/po/sv/aria2.po
  31. 11 0
      package/luci/applications/luci-app-attendedsysupgrade/Makefile
  32. 5 0
      package/luci/applications/luci-app-attendedsysupgrade/luasrc/controller/attendedsysupgrade.lua
  33. 376 0
      package/luci/applications/luci-app-attendedsysupgrade/luasrc/view/attendedsysupgrade.htm
  34. 18 0
      package/luci/applications/luci-app-bcp38/Makefile
  35. 7 0
      package/luci/applications/luci-app-bcp38/luasrc/controller/bcp38.lua
  36. 60 0
      package/luci/applications/luci-app-bcp38/luasrc/model/cbi/bcp38.lua
  37. 45 0
      package/luci/applications/luci-app-bcp38/po/sv/bcp38.po
  38. 45 0
      package/luci/applications/luci-app-bcp38/po/templates/bcp38.pot
  39. 52 0
      package/luci/applications/luci-app-bcp38/po/zh-cn/bcp38.po
  40. 11 0
      package/luci/applications/luci-app-bcp38/root/etc/uci-defaults/60_luci-bcp38
  41. 18 0
      package/luci/applications/luci-app-clamav/Makefile
  42. 22 0
      package/luci/applications/luci-app-clamav/luasrc/controller/clamav.lua
  43. 178 0
      package/luci/applications/luci-app-clamav/luasrc/model/cbi/clamav.lua
  44. 130 0
      package/luci/applications/luci-app-clamav/po/ja/clamav.po
  45. 119 0
      package/luci/applications/luci-app-clamav/po/sv/clamav.po
  46. 119 0
      package/luci/applications/luci-app-clamav/po/templates/clamav.pot
  47. 131 0
      package/luci/applications/luci-app-clamav/po/zh-cn/clamav.po
  48. 2 0
      package/luci/applications/luci-app-commands/Makefile
  49. 55 14
      package/luci/applications/luci-app-commands/luasrc/controller/commands.lua
  50. 9 6
      package/luci/applications/luci-app-commands/luasrc/view/commands.htm
  51. 50 0
      package/luci/applications/luci-app-commands/luasrc/view/commands_public.htm
  52. 21 3
      package/luci/applications/luci-app-commands/po/ca/commands.po
  53. 18 3
      package/luci/applications/luci-app-commands/po/cs/commands.po
  54. 21 3
      package/luci/applications/luci-app-commands/po/de/commands.po
  55. 18 3
      package/luci/applications/luci-app-commands/po/el/commands.po
  56. 27 5
      package/luci/applications/luci-app-commands/po/en/commands.po
  57. 21 3
      package/luci/applications/luci-app-commands/po/es/commands.po
  58. 21 3
      package/luci/applications/luci-app-commands/po/fr/commands.po
  59. 18 3
      package/luci/applications/luci-app-commands/po/he/commands.po
  60. 21 3
      package/luci/applications/luci-app-commands/po/hu/commands.po
  61. 21 3
      package/luci/applications/luci-app-commands/po/it/commands.po
  62. 22 4
      package/luci/applications/luci-app-commands/po/ja/commands.po
  63. 18 3
      package/luci/applications/luci-app-commands/po/ms/commands.po
  64. 21 3
      package/luci/applications/luci-app-commands/po/no/commands.po
  65. 21 3
      package/luci/applications/luci-app-commands/po/pl/commands.po
  66. 20 20
      package/luci/applications/luci-app-commands/po/pt-br/commands.po
  67. 21 3
      package/luci/applications/luci-app-commands/po/pt/commands.po
  68. 21 3
      package/luci/applications/luci-app-commands/po/ro/commands.po
  69. 21 3
      package/luci/applications/luci-app-commands/po/ru/commands.po
  70. 18 3
      package/luci/applications/luci-app-commands/po/sk/commands.po
  71. 45 26
      package/luci/applications/luci-app-commands/po/sv/commands.po
  72. 18 3
      package/luci/applications/luci-app-commands/po/templates/commands.pot
  73. 18 3
      package/luci/applications/luci-app-commands/po/tr/commands.po
  74. 18 3
      package/luci/applications/luci-app-commands/po/uk/commands.po
  75. 18 3
      package/luci/applications/luci-app-commands/po/vi/commands.po
  76. 26 7
      package/luci/applications/luci-app-commands/po/zh-cn/commands.po
  77. 21 3
      package/luci/applications/luci-app-commands/po/zh-tw/commands.po
  78. 1 1
      package/luci/applications/luci-app-coovachilli/po/sv/coovachilli.po
  79. 17 0
      package/luci/applications/luci-app-cshark/Makefile
  80. 125 0
      package/luci/applications/luci-app-cshark/luasrc/controller/cshark.lua
  81. 30 0
      package/luci/applications/luci-app-cshark/luasrc/model/cbi/admin_network/cshark.lua
  82. 291 0
      package/luci/applications/luci-app-cshark/luasrc/view/cshark.htm
  83. 2 2
      package/luci/applications/luci-app-ddns/Makefile
  84. 5 7
      package/luci/applications/luci-app-ddns/luasrc/controller/ddns.lua
  85. 233 174
      package/luci/applications/luci-app-ddns/po/it/ddns.po
  86. 724 0
      package/luci/applications/luci-app-ddns/po/sv/ddns.po
  87. 4 2
      package/luci/applications/luci-app-diag-core/po/sv/diag_core.po
  88. 44 44
      package/luci/applications/luci-app-diag-devinfo/po/sv/diag_devinfo.po
  89. 13 0
      package/luci/applications/luci-app-dnscrypt-proxy/Makefile
  90. 32 0
      package/luci/applications/luci-app-dnscrypt-proxy/luasrc/controller/dnscrypt-proxy.lua
  91. 37 0
      package/luci/applications/luci-app-dnscrypt-proxy/luasrc/model/cbi/dnscrypt-proxy/cfg_dnsmasq_tab.lua
  92. 39 0
      package/luci/applications/luci-app-dnscrypt-proxy/luasrc/model/cbi/dnscrypt-proxy/configuration_tab.lua
  93. 177 0
      package/luci/applications/luci-app-dnscrypt-proxy/luasrc/model/cbi/dnscrypt-proxy/overview_tab.lua
  94. 13 0
      package/luci/applications/luci-app-dnscrypt-proxy/luasrc/view/dnscrypt-proxy/config_css.htm
  95. 15 0
      package/luci/applications/luci-app-dnscrypt-proxy/luasrc/view/dnscrypt-proxy/logread.htm
  96. 10 0
      package/luci/applications/luci-app-dnscrypt-proxy/luasrc/view/dnscrypt-proxy/res_options.htm
  97. 15 0
      package/luci/applications/luci-app-dnscrypt-proxy/luasrc/view/dnscrypt-proxy/view_reslist.htm
  98. 232 0
      package/luci/applications/luci-app-dnscrypt-proxy/po/ja/dnscrypt-proxy.po
  99. 191 0
      package/luci/applications/luci-app-dnscrypt-proxy/po/templates/dnscrypt-proxy.pot
  100. 11 0
      package/luci/applications/luci-app-dnscrypt-proxy/root/etc/uci-defaults/60_luci-dnscrypt-proxy

+ 5 - 0
package/luci/.buildpath

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<buildpath>
+	<buildpathentry kind="src" path="src"/>
+	<buildpathentry kind="con" path="org.eclipse.dltk.launching.INTERPRETER_CONTAINER"/>
+</buildpath>

+ 221 - 0
package/luci/.cproject

@@ -0,0 +1,221 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<?fileVersion 4.0.0?>
+
+<cproject>
+<storageModule moduleId="org.eclipse.cdt.core.settings">
+<cconfiguration id="preference.org.eclipse.cdt.managedbuilder.core.configurationDataProvider.1510318341">
+<storageModule moduleId="cdtBuildSystem" version="4.0.0">
+<configuration artifactName="luci" buildProperties="" description="" id="preference.org.eclipse.cdt.managedbuilder.core.configurationDataProvider.1510318341" name="Preference Configuration" parent="org.eclipse.cdt.build.core.prefbase.cfg">
+<folderInfo id="preference.org.eclipse.cdt.managedbuilder.core.configurationDataProvider.1510318341." name="/" resourcePath="">
+<toolChain id="org.eclipse.cdt.build.core.prefbase.toolchain.407447051" name="No ToolChain" resourceTypeBasedDiscovery="false" superClass="org.eclipse.cdt.build.core.prefbase.toolchain">
+<targetPlatform id="org.eclipse.cdt.build.core.prefbase.toolchain.407447051.1470931541" name=""/>
+<builder id="org.eclipse.cdt.build.core.settings.default.builder.823611263" keepEnvironmentInBuildfile="false" name="Gnu Make Builder" superClass="org.eclipse.cdt.build.core.settings.default.builder"/>
+<tool id="org.eclipse.cdt.build.core.settings.holder.libs.1685234798" name="holder for library settings" superClass="org.eclipse.cdt.build.core.settings.holder.libs"/>
+<tool id="org.eclipse.cdt.build.core.settings.holder.570824141" name="Assembly" superClass="org.eclipse.cdt.build.core.settings.holder">
+<option id="org.eclipse.cdt.build.core.settings.holder.incpaths.491129717" name="Include Paths" superClass="org.eclipse.cdt.build.core.settings.holder.incpaths" valueType="includePath">
+<listOptionValue builtIn="false" value="/usr/include/lua5.1"/>
+<listOptionValue builtIn="false" value="/usr/include"/>
+</option>
+<inputType id="org.eclipse.cdt.build.core.settings.holder.inType.858094059" languageId="org.eclipse.cdt.core.assembly" languageName="Assembly" sourceContentType="org.eclipse.cdt.core.asmSource" superClass="org.eclipse.cdt.build.core.settings.holder.inType"/>
+</tool>
+<tool id="org.eclipse.cdt.build.core.settings.holder.344617955" name="GNU C++" superClass="org.eclipse.cdt.build.core.settings.holder">
+<option id="org.eclipse.cdt.build.core.settings.holder.incpaths.564526987" name="Include Paths" superClass="org.eclipse.cdt.build.core.settings.holder.incpaths" valueType="includePath">
+<listOptionValue builtIn="false" value="/usr/include/lua5.1"/>
+<listOptionValue builtIn="false" value="/usr/include"/>
+</option>
+<inputType id="org.eclipse.cdt.build.core.settings.holder.inType.1426860237" languageId="org.eclipse.cdt.core.g++" languageName="GNU C++" sourceContentType="org.eclipse.cdt.core.cxxSource,org.eclipse.cdt.core.cxxHeader" superClass="org.eclipse.cdt.build.core.settings.holder.inType"/>
+</tool>
+<tool id="org.eclipse.cdt.build.core.settings.holder.869454750" name="GNU C" superClass="org.eclipse.cdt.build.core.settings.holder">
+<option id="org.eclipse.cdt.build.core.settings.holder.incpaths.838425449" name="Include Paths" superClass="org.eclipse.cdt.build.core.settings.holder.incpaths" valueType="includePath">
+<listOptionValue builtIn="false" value="/usr/include/lua5.1"/>
+<listOptionValue builtIn="false" value="/usr/include"/>
+</option>
+<inputType id="org.eclipse.cdt.build.core.settings.holder.inType.1755775295" languageId="org.eclipse.cdt.core.gcc" languageName="GNU C" sourceContentType="org.eclipse.cdt.core.cSource,org.eclipse.cdt.core.cHeader" superClass="org.eclipse.cdt.build.core.settings.holder.inType"/>
+</tool>
+</toolChain>
+</folderInfo>
+</configuration>
+</storageModule>
+<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="preference.org.eclipse.cdt.managedbuilder.core.configurationDataProvider.1510318341" moduleId="org.eclipse.cdt.core.settings" name="Preference Configuration">
+<externalSettings/>
+<extensions>
+<extension id="org.eclipse.cdt.core.VCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+<extension id="org.eclipse.cdt.core.MakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+<extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+<extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+</extensions>
+</storageModule>
+<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
+<storageModule moduleId="scannerConfiguration">
+<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile"/>
+<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="makefileGenerator">
+<runAction arguments="-f ${project_name}_scd.mk" command="make" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfile">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfile">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileCPP">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileC">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<scannerConfigBuildInfo instanceId="preference.org.eclipse.cdt.managedbuilder.core.configurationDataProvider.1510318341">
+<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile"/>
+<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="makefileGenerator">
+<runAction arguments="-f ${project_name}_scd.mk" command="make" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfile">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfile">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileCPP">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileC">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+</scannerConfigBuildInfo>
+</storageModule>
+</cconfiguration>
+</storageModule>
+<storageModule moduleId="cdtBuildSystem" version="4.0.0">
+<project id="luci.null.949486034" name="luci"/>
+</storageModule>
+</cproject>

+ 78 - 0
package/luci/.project

@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>luci</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.cdt.managedbuilder.core.genmakebuilder</name>
+			<triggers>clean,full,incremental,</triggers>
+			<arguments>
+				<dictionary>
+					<key>?name?</key>
+					<value></value>
+				</dictionary>
+				<dictionary>
+					<key>org.eclipse.cdt.make.core.append_environment</key>
+					<value>true</value>
+				</dictionary>
+				<dictionary>
+					<key>org.eclipse.cdt.make.core.autoBuildTarget</key>
+					<value>all</value>
+				</dictionary>
+				<dictionary>
+					<key>org.eclipse.cdt.make.core.buildArguments</key>
+					<value></value>
+				</dictionary>
+				<dictionary>
+					<key>org.eclipse.cdt.make.core.buildCommand</key>
+					<value>make</value>
+				</dictionary>
+				<dictionary>
+					<key>org.eclipse.cdt.make.core.cleanBuildTarget</key>
+					<value>clean</value>
+				</dictionary>
+				<dictionary>
+					<key>org.eclipse.cdt.make.core.contents</key>
+					<value>org.eclipse.cdt.make.core.activeConfigSettings</value>
+				</dictionary>
+				<dictionary>
+					<key>org.eclipse.cdt.make.core.enableAutoBuild</key>
+					<value>false</value>
+				</dictionary>
+				<dictionary>
+					<key>org.eclipse.cdt.make.core.enableCleanBuild</key>
+					<value>true</value>
+				</dictionary>
+				<dictionary>
+					<key>org.eclipse.cdt.make.core.enableFullBuild</key>
+					<value>true</value>
+				</dictionary>
+				<dictionary>
+					<key>org.eclipse.cdt.make.core.fullBuildTarget</key>
+					<value>all</value>
+				</dictionary>
+				<dictionary>
+					<key>org.eclipse.cdt.make.core.stopOnError</key>
+					<value>true</value>
+				</dictionary>
+				<dictionary>
+					<key>org.eclipse.cdt.make.core.useDefaultBuildCmd</key>
+					<value>true</value>
+				</dictionary>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature>
+		<nature>org.eclipse.cdt.managedbuilder.core.managedBuildNature</nature>
+		<nature>org.eclipse.cdt.core.cnature</nature>
+		<nature>org.eclipse.dltk.lua.core.nature</nature>
+	</natures>
+</projectDescription>

+ 4 - 6
package/luci/applications/luci-app-adblock/Makefile

@@ -1,14 +1,12 @@
-# Copyright (C) 2016 Openwrt.org
-#
-# This is free software, licensed under the Apache License, Version 2.0 .
-#
+# Copyright 2017 Dirk Brenken (dev@brenken.org)
+# This is free software, licensed under the Apache License, Version 2.0
 
 
 include $(TOPDIR)/rules.mk
 include $(TOPDIR)/rules.mk
 
 
 LUCI_TITLE:=LuCI support for Adblock
 LUCI_TITLE:=LuCI support for Adblock
-LUCI_DEPENDS:=+adblock
+LUCI_DEPENDS:=+adblock +luci-lib-jsonc
 LUCI_PKGARCH:=all
 LUCI_PKGARCH:=all
 
 
 include ../../luci.mk
 include ../../luci.mk
 
 
-# call BuildPackage - OpenWrt buildroot signature
+# call BuildPackage - OpenWrt buildroot signature

+ 45 - 3
package/luci/applications/luci-app-adblock/luasrc/controller/adblock.lua

@@ -1,12 +1,54 @@
--- Copyright 2016 Openwrt.org
--- Licensed to the public under the Apache License 2.0.
+-- Copyright 2017 Dirk Brenken (dev@brenken.org)
+-- This is free software, licensed under the Apache License, Version 2.0
 
 
 module("luci.controller.adblock", package.seeall)
 module("luci.controller.adblock", package.seeall)
 
 
+local fs    = require("nixio.fs")
+local util  = require("luci.util")
+local templ = require("luci.template")
+local i18n  = require("luci.i18n")
+
 function index()
 function index()
 	if not nixio.fs.access("/etc/config/adblock") then
 	if not nixio.fs.access("/etc/config/adblock") then
 		return
 		return
 	end
 	end
+	entry({"admin", "services", "adblock"}, firstchild(), _("Adblock"), 30).dependent = false
+	entry({"admin", "services", "adblock", "tab_from_cbi"}, cbi("adblock/overview_tab", {hideresetbtn=true, hidesavebtn=true}), _("Overview"), 10).leaf = true
+	entry({"admin", "services", "adblock", "logfile"}, call("logread"), _("View Logfile"), 20).leaf = true
+	entry({"admin", "services", "adblock", "advanced"}, firstchild(), _("Advanced"), 100)
+	entry({"admin", "services", "adblock", "advanced", "blacklist"}, cbi("adblock/blacklist_tab"), _("Edit Blacklist"), 110).leaf = true
+	entry({"admin", "services", "adblock", "advanced", "whitelist"}, cbi("adblock/whitelist_tab"), _("Edit Whitelist"), 120).leaf = true
+	entry({"admin", "services", "adblock", "advanced", "configuration"}, cbi("adblock/configuration_tab"), _("Edit Configuration"), 130).leaf = true
+	entry({"admin", "services", "adblock", "advanced", "query"}, template("adblock/query"), _("Query domains"), 140).leaf = true
+	entry({"admin", "services", "adblock", "advanced", "result"}, call("queryData"), nil, 150).leaf = true
+end
 
 
-	entry({"admin", "services", "adblock"}, cbi("adblock"), _("Adblock"), 40)
+function logread()
+	local logfile
+
+	if nixio.fs.access("/var/log/messages") then
+		logfile = util.trim(util.exec("cat /var/log/messages | grep 'adblock'"))
+	else
+		logfile = util.trim(util.exec("logread -e 'adblock'"))
+	end
+	templ.render("adblock/logread", {title = i18n.translate("Adblock Logfile"), content = logfile})
+end
+
+function queryData(domain)
+	if domain and domain:match("^[a-zA-Z0-9%-%._]+$") then
+		luci.http.prepare_content("text/plain")
+		local cmd = "/etc/init.d/adblock query %q 2>&1"
+		local util = io.popen(cmd % domain)
+		if util then
+			while true do
+				local line = util:read("*l")
+				if not line then
+					break
+				end
+				luci.http.write(line)
+				luci.http.write("\n")
+			end
+			util:close()
+		end
+	end
 end
 end

+ 0 - 63
package/luci/applications/luci-app-adblock/luasrc/model/cbi/adblock.lua

@@ -1,63 +0,0 @@
--- Copyright 2016 Hannu Nyman
--- Licensed to the public under the Apache License 2.0.
-
-m = Map("adblock", translate("Adblock"),
-	translate("Configuration of the adblock package to block ad/abuse domains by using DNS."))
-
--- General options
-
-s = m:section(NamedSection, "global", "adblock", translate("Global options"))
-
-o1 = s:option(Flag, "adb_enabled", translate("Enable adblock"))
-o1.rmempty = false
-o1.default = 0
-
-o3 = s:option(Value, "adb_whitelist", translate("Whitelist file"),
-     translate("File with whitelisted hosts/domains that are allowed despite being on a blocklist."))
-o3.rmempty = false
-o3.datatype = "file"
-
--- Blocklist options
-
-bl = m:section(TypedSection, "source", translate("Blocklist sources"),
-	translate("Available blocklist sources (")
-	.. [[<a href="https://github.com/openwrt/packages/blob/master/net/adblock/files/README.md" target="_blank">]]
-	.. translate("see list details")
-	.. [[</a>]]
-	.. translate("). Note that list URLs and Shallalist category selections are not configurable via Luci."))
-bl.template = "cbi/tblsection"
-
-name = bl:option(Flag, "enabled", translate("Enabled"))
-name.rmempty  = false
-
-des = bl:option(DummyValue, "adb_src_desc", translate("Description"))
-
--- Additional options
-
-s2 = m:section(NamedSection, "global", "adblock", translate("Backup options"))
-
-o4 = s2:option(Flag, "adb_backup", translate("Enable blocklist backup"))
-o4.rmempty = false
-o4.default = 0
-
-o5 = s2:option(Value, "adb_backupdir", translate("Backup directory"))
-o5.rmempty = false
-o5.datatype = "directory"
-
--- Extra options
-
-e = m:section(NamedSection, "global", "adblock", translate("Extra options"),
-	translate("Options for further tweaking in case the defaults are not suitable for you."))
-
-a = e:option(Flag, "adb_debug", translate("Enable verbose debug logging"))
-a.default = a.disabled
-a.rmempty = false
-
-a = e:option(Value, "adb_iface", translate("Restrict reload trigger to certain interface(s)"),
-	translate("Space separated list of wan interfaces that trigger reload action. " ..
-		"To disable reload trigger set it to 'false'. Default: empty"))
-a.datatype = "network"
-a.rmempty = true
-
-return m
-

+ 52 - 0
package/luci/applications/luci-app-adblock/luasrc/model/cbi/adblock/blacklist_tab.lua

@@ -0,0 +1,52 @@
+-- Copyright 2017 Dirk Brenken (dev@brenken.org)
+-- This is free software, licensed under the Apache License, Version 2.0
+
+local fs = require("nixio.fs")
+local util = require("luci.util")
+local uci = require("uci")
+local adbinput = uci.get("adblock", "blacklist", "adb_src" or "/etc/adblock/adblock.blacklist")
+
+if not nixio.fs.access(adbinput) then
+	m = SimpleForm("error", nil,
+		translate("Input file not found, please check your configuration."))
+	m.reset = false
+	m.submit = false
+	return m
+end
+
+if nixio.fs.stat(adbinput).size > 524288 then
+	m = SimpleForm("error", nil,
+		translate("The file size is too large for online editing in LuCI (&gt; 512 KB). ")
+		.. translate("Please edit this file directly in a terminal session."))
+	m.reset = false
+	m.submit = false
+	return m
+end
+
+m = SimpleForm("input", nil)
+m:append(Template("adblock/config_css"))
+m.submit = translate("Save")
+m.reset = false
+
+s = m:section(SimpleSection, nil,
+	translatef("This form allows you to modify the content of the adblock blacklist (%s).<br />", adbinput)
+	.. translate("Please add only one domain per line. Comments introduced with '#' are allowed - ip addresses, wildcards and regex are not."))
+
+f = s:option(TextValue, "data")
+f.datatype = "string"
+f.rows = 20
+f.rmempty = true
+
+function f.cfgvalue()
+	return nixio.fs.readfile(adbinput) or ""
+end
+
+function f.write(self, section, data)
+	return nixio.fs.writefile(adbinput, "\n" .. util.trim(data:gsub("\r\n", "\n")) .. "\n")
+end
+
+function s.handle(self, state, data)
+	return true
+end
+
+return m

+ 39 - 0
package/luci/applications/luci-app-adblock/luasrc/model/cbi/adblock/configuration_tab.lua

@@ -0,0 +1,39 @@
+-- Copyright 2017 Dirk Brenken (dev@brenken.org)
+-- This is free software, licensed under the Apache License, Version 2.0
+
+local fs = require("nixio.fs")
+local util = require("luci.util")
+local adbinput = "/etc/config/adblock"
+
+if not nixio.fs.access(adbinput) then
+	m = SimpleForm("error", nil, translate("Input file not found, please check your configuration."))
+	m.reset = false
+	m.submit = false
+	return m
+end
+
+m = SimpleForm("input", nil)
+m:append(Template("adblock/config_css"))
+m.submit = translate("Save")
+m.reset = false
+
+s = m:section(SimpleSection, nil,
+	translate("This form allows you to modify the content of the main adblock configuration file (/etc/config/adblock)."))
+
+f = s:option(TextValue, "data")
+f.rows = 20
+f.rmempty = true
+
+function f.cfgvalue()
+	return nixio.fs.readfile(adbinput) or ""
+end
+
+function f.write(self, section, data)
+	return nixio.fs.writefile(adbinput, "\n" .. util.trim(data:gsub("\r\n", "\n")) .. "\n")
+end
+
+function s.handle(self, state, data)
+	return true
+end
+
+return m

+ 237 - 0
package/luci/applications/luci-app-adblock/luasrc/model/cbi/adblock/overview_tab.lua

@@ -0,0 +1,237 @@
+-- Copyright 2017 Dirk Brenken (dev@brenken.org)
+-- This is free software, licensed under the Apache License, Version 2.0
+
+local fs       = require("nixio.fs")
+local uci      = require("luci.model.uci").cursor()
+local sys      = require("luci.sys")
+local util     = require("luci.util")
+local dump     = util.ubus("network.interface", "dump", {})
+local json     = require("luci.jsonc")
+local adbinput = uci.get("adblock", "global", "adb_rtfile") or "/tmp/adb_runtime.json"
+
+if not uci:get_first("adblock", "adblock", "adb_trigger") then
+	m = SimpleForm("error", nil, translate("Please update your adblock config file to use this package. ")
+	.. translatef("In OPKG use the '--force-maintainer' option to overwrite the pre-existing config file or download a fresh default config from "
+	.. "<a href=\"%s\" target=\"_blank\">"
+	.. "here</a>", "https://raw.githubusercontent.com/openwrt/packages/master/net/adblock/files/adblock.conf"))
+	m.submit = false
+	m.reset = false
+	return m
+end
+
+m = Map("adblock", translate("Adblock"),
+	translate("Configuration of the adblock package to block ad/abuse domains by using DNS. ")
+	.. translatef("For further information "
+	.. "<a href=\"%s\" target=\"_blank\">"
+	.. "see online documentation</a>", "https://github.com/openwrt/packages/blob/master/net/adblock/files/README.md"))
+
+function m.on_after_commit(self)
+	function e4.validate(self, value)
+		if value == "0" then
+			luci.sys.call("/etc/init.d/adblock reload >/dev/null 2>&1")
+		else
+			luci.sys.call("/etc/init.d/adblock start >/dev/null 2>&1")
+		end
+	end
+	luci.http.redirect(luci.dispatcher.build_url("admin", "services", "adblock"))
+end
+
+-- Main adblock options
+
+s = m:section(NamedSection, "global", "adblock")
+
+local parse = json.parse(fs.readfile(adbinput) or "")
+if parse then
+	status  = parse.data.adblock_status
+	version = parse.data.adblock_version
+	domains = parse.data.blocked_domains
+	fetch   = parse.data.fetch_utility
+	backend = parse.data.dns_backend
+	rundate = parse.data.last_rundate
+end
+
+o1 = s:option(Flag, "adb_enabled", translate("Enable Adblock"))
+o1.default = o1.disabled
+o1.rmempty = false
+
+btn = s:option(Button, "", translate("Suspend / Resume Adblock"))
+if parse and status == "enabled" then
+	btn.inputtitle = translate("Suspend")
+	btn.inputstyle = "reset"
+	btn.disabled = false
+	function btn.write()
+		luci.sys.call("/etc/init.d/adblock suspend >/dev/null 2>&1")
+		luci.http.redirect(luci.dispatcher.build_url("admin", "services", "adblock"))
+	end
+elseif parse and status == "paused" then
+	btn.inputtitle = translate("Resume")
+	btn.inputstyle = "apply"
+	btn.disabled = false
+	function btn.write()
+		luci.sys.call("/etc/init.d/adblock resume >/dev/null 2>&1")
+		luci.http.redirect(luci.dispatcher.build_url("admin", "services", "adblock"))
+	end
+else
+	btn.inputtitle = translate("-------")
+	btn.inputstyle = "button"
+	btn.disabled = true
+end
+
+o2 = s:option(ListValue, "adb_dns", translate("DNS Backend (DNS Directory)"),
+	translate("List of supported DNS backends with their default list export directory.<br />")
+	.. translate("To overwrite the default path use the 'DNS Directory' option in the extra section below."))
+o2:value("dnsmasq", "dnsmasq (/tmp/dnsmasq.d)")
+o2:value("unbound", "unbound (/var/lib/unbound)")
+o2:value("named", "bind (/var/lib/bind)")
+o2:value("kresd", "kresd (/etc/kresd)")
+o2:value("dnscrypt-proxy","dnscrypt-proxy (/tmp)")
+o2.default = "dnsmasq"
+o2.rmempty = false
+
+o3 = s:option(ListValue, "adb_trigger", translate("Startup Trigger"),
+	translate("List of available network interfaces. By default the startup will be triggered by the 'wan' interface.<br />")
+	.. translate("Choose 'none' to disable automatic startups, 'timed' to use a classic timeout (default 30 sec.) or select another trigger interface."))
+o3:value("none")
+o3:value("timed")
+if dump then
+	local i, v
+	for i, v in ipairs(dump.interface) do
+		if v.interface ~= "loopback" then
+			o3:value(v.interface)
+		end
+	end
+end
+o3.rmempty = false
+
+-- Runtime information
+
+ds = s:option(DummyValue, "", translate("Runtime Information"))
+ds.template = "cbi/nullsection"
+
+dv1 = s:option(DummyValue, "", translate("Adblock Status"))
+dv1.template = "adblock/runtime"
+if parse == nil then
+	dv1.value = translate("n/a")
+else
+	if status == "error" then
+		dv1.value = translate("error")
+	elseif status == "disabled" then
+		dv1.value = translate("disabled")
+	elseif status == "paused" then
+		dv1.value = translate("paused")
+	else
+		dv1.value = translate("enabled")
+	end
+end
+
+dv2 = s:option(DummyValue, "", translate("Adblock Version"))
+dv2.template = "adblock/runtime"
+if parse == nil then
+	dv2.value = translate("n/a")
+else
+	dv2.value = version
+end
+
+dv3 = s:option(DummyValue, "", translate("Download Utility (SSL Library)"),
+	translate("For SSL protected blocklist sources you need a suitable SSL library, e.g. 'libustream-ssl' or the wget 'built-in'."))
+dv3.template = "adblock/runtime"
+if parse == nil then
+	dv3.value = translate("n/a")
+else
+	dv3.value = fetch
+end
+
+dv4 = s:option(DummyValue, "", translate("DNS Backend (DNS Directory)"))
+dv4.template = "adblock/runtime"
+if parse == nil then
+	dv4.value = translate("n/a")
+else
+	dv4.value = backend
+end
+
+dv5 = s:option(DummyValue, "", translate("Overall Blocked Domains"))
+dv5.template = "adblock/runtime"
+if parse == nil then
+	dv5.value = translate("n/a")
+else
+	dv5.value = domains
+end
+
+dv6 = s:option(DummyValue, "", translate("Last Run"))
+dv6.template = "adblock/runtime"
+if parse == nil then
+	dv6.value = translate("n/a")
+else
+	dv6.value = rundate
+end
+
+-- Blocklist table
+
+bl = m:section(TypedSection, "source", translate("Blocklist Sources"),
+	translate("Available blocklist sources. ")
+	.. translate("List URLs and Shallalist category selections are configurable in the 'Advanced' section.<br />")
+	.. translate("Caution: Please don't select big lists or many lists at once on low memory devices to prevent OOM exceptions!"))
+bl.template = "cbi/tblsection"
+
+name = bl:option(Flag, "enabled", translate("Enabled"))
+name.rmempty = false
+
+ssl = bl:option(DummyValue, "adb_src", translate("SSL req."))
+function ssl.cfgvalue(self, section)
+	local source = self.map:get(section, "adb_src")
+	if source and source:match("https://") then
+		return translate("Yes")
+	else
+		return translate("No")
+	end
+end
+
+des = bl:option(DummyValue, "adb_src_desc", translate("Description"))
+
+-- Extra options
+
+e = m:section(NamedSection, "global", "adblock", translate("Extra Options"),
+	translate("Options for further tweaking in case the defaults are not suitable for you."))
+
+e1 = e:option(Flag, "adb_debug", translate("Verbose Debug Logging"),
+	translate("Enable verbose debug logging in case of any processing error."))
+e1.default = e1.disabled
+e1.rmempty = false
+
+e2 = e:option(Flag, "adb_forcedns", translate("Force Local DNS"),
+	translate("Redirect all DNS queries from 'lan' zone to the local resolver."))
+e2.default = e2.disabled
+e2.rmempty = false
+
+e3 = e:option(Flag, "adb_forcesrt", translate("Force Overall Sort"),
+	translate("Enable memory intense overall sort / duplicate removal on low memory devices (&lt; 64 MB RAM)"))
+e3.default = e3.disabled
+e3.rmempty = false
+
+e4 = e:option(Flag, "adb_manmode", translate("Manual / Backup mode"),
+	translate("Do not automatically update blocklists during startup, use blocklist backups instead."))
+e4.default = e4.disabled
+e4.rmempty = false
+
+e5 = e:option(Flag, "adb_backup", translate("Enable Blocklist Backup"),
+	translate("Create compressed blocklist backups, they will be used in case of download errors or during startup in manual mode."))
+e5.default = e5.disabled
+e5.rmempty = false
+
+e6 = e:option(Value, "adb_backupdir", translate("Backup Directory"),
+	translate("Target directory for adblock backups. Please use only non-volatile disks, no ram/tmpfs drives."))
+e6.datatype = "directory"
+e6.default = "/mnt"
+e6.rmempty = false
+
+e7 = e:option(Value, "adb_dnsdir", translate("DNS Directory"),
+	translate("Target directory for the generated blocklist 'adb_list.overall'."))
+e7.datatype = "directory"
+e7.optional = true
+
+e8 = e:option(Value, "adb_triggerdelay", translate("Trigger Delay"),
+	translate("Additional trigger delay in seconds before adblock processing begins."))
+e8.datatype = "range(1,60)"
+e8.optional = true
+
+return m

+ 51 - 0
package/luci/applications/luci-app-adblock/luasrc/model/cbi/adblock/whitelist_tab.lua

@@ -0,0 +1,51 @@
+-- Copyright 2017 Dirk Brenken (dev@brenken.org)
+-- This is free software, licensed under the Apache License, Version 2.0
+
+local fs = require("nixio.fs")
+local util = require("luci.util")
+local uci = require("uci")
+local adbinput = uci.get("adblock", "global", "adb_whitelist") or "/etc/adblock/adblock.whitelist"
+
+if not nixio.fs.access(adbinput) then
+	m = SimpleForm("error", nil, translate("Input file not found, please check your configuration."))
+	m.reset = false
+	m.submit = false
+	return m
+end
+
+if nixio.fs.stat(adbinput).size > 524288 then
+	m = SimpleForm("error", nil,
+	translate("The file size is too large for online editing in LuCI (&gt; 512 KB). ")
+	.. translate("Please edit this file directly in a terminal session."))
+	m.reset = false
+	m.submit = false
+	return m
+end
+
+m = SimpleForm("input", nil)
+m:append(Template("adblock/config_css"))
+m.submit = translate("Save")
+m.reset = false
+
+s = m:section(SimpleSection, nil,
+	translatef("This form allows you to modify the content of the adblock whitelist (%s).<br />", adbinput)
+	.. translate("Please add only one domain per line. Comments introduced with '#' are allowed - ip addresses, wildcards and regex are not."))
+
+f = s:option(TextValue, "data")
+f.datatype = "string"
+f.rows = 20
+f.rmempty = true
+
+function f.cfgvalue()
+	return nixio.fs.readfile(adbinput) or ""
+end
+
+function f.write(self, section, data)
+	return nixio.fs.writefile(adbinput, "\n" .. util.trim(data:gsub("\r\n", "\n")) .. "\n")
+end
+
+function s.handle(self, state, data)
+	return true
+end
+
+return m

+ 10 - 0
package/luci/applications/luci-app-adblock/luasrc/view/adblock/config_css.htm

@@ -0,0 +1,10 @@
+<style type="text/css">
+	textarea
+	{
+		border: 1px solid #cccccc;
+		padding: 5px;
+		font-size: 12px;
+		font-family: monospace;
+		resize: none;
+	}
+</style>

+ 14 - 0
package/luci/applications/luci-app-adblock/luasrc/view/adblock/logread.htm

@@ -0,0 +1,14 @@
+<%#
+Copyright 2017 Dirk Brenken (dev@brenken.org)
+This is free software, licensed under the Apache License, Version 2.0
+-%>
+
+<%+header%>
+
+<div class="cbi-map">
+	<fieldset class="cbi-section">
+		<div class="cbi-section-descr"><%:This form shows the syslog output, pre-filtered for adblock related messages only.%></div>
+		<textarea id="logread_id" style="width: 100%; height: 450px; border: 1px solid #cccccc; padding: 5px; font-size: 12px; font-family: monospace; resize: none;" readonly="readonly" wrap="off" rows="<%=content:cmatch("\n")+2%>"><%=content:pcdata()%></textarea>
+	</fieldset>
+</div>
+<%+footer%>

+ 65 - 0
package/luci/applications/luci-app-adblock/luasrc/view/adblock/query.htm

@@ -0,0 +1,65 @@
+<%#
+Copyright 2017 Dirk Brenken (dev@brenken.org)
+This is free software, licensed under the Apache License, Version 2.0
+-%>
+
+<%+header%>
+
+<script type="text/javascript" src="<%=resource%>/cbi.js"></script>
+<script type="text/javascript">
+//<![CDATA[
+	var stxhr = new XHR();
+
+	function update_status(data)
+	{
+		var domain = data.value;
+		var input = document.getElementById('query_input');
+		var output = document.getElementById('query_output');
+
+		if (input && output)
+		{
+			output.innerHTML =
+				'<img src="<%=resource%>/icons/loading.gif" alt="<%:Loading%>" style="vertical-align:middle" /> ' +
+				'<%:Waiting for command to complete...%>'
+			;
+			input.parentNode.style.display = 'block';
+			input.style.display = 'inline';
+			stxhr.post('<%=luci.dispatcher.build_url('admin/services/adblock/advanced/result/')%>' + domain, { token: '<%=token%>' },
+				function(x)
+				{
+					if (x.responseText)
+					{
+						input.style.display = 'none';
+						output.innerHTML = String.format('<pre>%h</pre>', x.responseText);
+					}
+					else
+					{
+						input.style.display = 'none';
+						output.innerHTML = '<span class="error"><%:Invalid domain specified!%></span>';
+					}
+				}
+			);
+		}
+	}
+//]]>
+</script>
+
+<form method="post" action="<%=REQUEST_URI%>">
+	<div class="cbi-map">
+		<fieldset class="cbi-section">
+			<div class="cbi-section-descr"><%:This form allows you to query active block lists for certain domains, e.g. for whitelisting.%></div>
+			<div style="width:33%; float:left;">
+				<input style="margin: 5px 0" type="text" value="www.lede-project.org" name="input" />
+				<input type="button" value="<%:Query%>" class="cbi-button cbi-button-apply" onclick="update_status(this.form.input)" />
+			</div>
+			<br style="clear:both" />
+			<br />
+		</fieldset>
+	</div>
+	<fieldset class="cbi-section" style="display:none">
+		<legend id="query_input"><%:Collecting data...%></legend>
+		<span id="query_output"></span>
+	</fieldset>
+</form>
+
+<%+footer%>

+ 10 - 0
package/luci/applications/luci-app-adblock/luasrc/view/adblock/runtime.htm

@@ -0,0 +1,10 @@
+<%#
+Copyright 2017 Dirk Brenken (dev@brenken.org)
+This is free software, licensed under the Apache License, Version 2.0
+-%>
+
+<%+cbi/valueheader%>
+
+<input name="runtime" id="runtime" type="text" class="cbi-input-text" style="border:none;box-shadow:none;background:transparent;color:#0069d6;" value="<%=self:cfgvalue(section)%>" disabled="disabled" />
+
+<%+cbi/valuefooter%>

+ 337 - 0
package/luci/applications/luci-app-adblock/po/it/adblock.po

@@ -0,0 +1,337 @@
+msgid ""
+msgstr ""
+"Content-Type: text/plain; charset=UTF-8\n"
+"Project-Id-Version: \n"
+"POT-Creation-Date: \n"
+"PO-Revision-Date: 17/09/2017\n"
+"Last-Translator: Bubu83 <bubu83@gmail.com>\n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Poedit 2.0.3\n"
+"Language: it\n"
+
+msgid "-------"
+msgstr ""
+
+msgid "Adblock"
+msgstr "Adblock"
+
+msgid "Adblock Logfile"
+msgstr "Registro Adblock"
+
+msgid "Adblock Status"
+msgstr "Status Adblock"
+
+msgid "Adblock Version"
+msgstr "Versione Adblock"
+
+msgid "Additional trigger delay in seconds before adblock processing begins."
+msgstr "Tempo addizionale in secondi di attesa prima che adblock si avvii."
+
+msgid "Advanced"
+msgstr "Avanzato"
+
+msgid "Available blocklist sources."
+msgstr "Fonti lista di blocco disponibili."
+
+msgid "Backup Directory"
+msgstr "Directory del Backup"
+
+msgid "Blocklist Sources"
+msgstr "Fonti lista di Blocco"
+
+msgid ""
+"Caution: Please don't select big lists or many lists at once on low memory "
+"devices to prevent OOM exceptions!"
+msgstr ""
+"Attenzione: Per favore non selezionare grandi liste o molte liste alla volta "
+"su dispositivi con poca memoria per prevenire errori OOM!"
+
+msgid ""
+"Choose 'none' to disable automatic startups, 'timed' to use a classic "
+"timeout (default 30 sec.) or select another trigger interface."
+msgstr ""
+"Scegli 'none' per disabilitare l'avvio automatico, 'timed' per usare un "
+"classico timeout (default 30 sec.) o seleziona un'altra interfaccia di avvio."
+
+msgid "Collecting data..."
+msgstr "Raccogliendo dati..."
+
+msgid ""
+"Configuration of the adblock package to block ad/abuse domains by using DNS."
+msgstr ""
+"Configurazione del pacchetto adblock per bloccare domini pubblicità/abuso "
+"usando i DNS."
+
+msgid ""
+"Create compressed blocklist backups, they will be used in case of download "
+"errors or during startup in manual mode."
+msgstr ""
+"Crea i backup compressi delle liste di blocco, saranno usati in caso di "
+"errori di download o durante l'avvio in modalità manuale."
+
+msgid "DNS Backend (DNS Directory)"
+msgstr ""
+
+msgid "DNS Directory"
+msgstr "Directory DNS"
+
+msgid "Description"
+msgstr "Descrizione"
+
+msgid ""
+"Do not automatically update blocklists during startup, use blocklist backups "
+"instead."
+msgstr ""
+"Non aggiornare automaticamente le liste durante l'avvio, usa invece i backup "
+"della lista di blocco."
+
+msgid "Download Utility (SSL Library)"
+msgstr ""
+
+msgid "Edit Blacklist"
+msgstr "Modifica Lista Nera"
+
+msgid "Edit Configuration"
+msgstr "Modifica Configurazione"
+
+msgid "Edit Whitelist"
+msgstr "Modifica Lista Bianca"
+
+msgid "Enable Adblock"
+msgstr "Attiva Adblock"
+
+msgid "Enable Blocklist Backup"
+msgstr "Attiva Backup Lista di Blocco"
+
+msgid ""
+"Enable memory intense overall sort / duplicate removal on low memory devices "
+"(&lt; 64 MB RAM)"
+msgstr ""
+"Attiva l'ordinamento globale / rimozione duplicati stressante per la memoria "
+"su dispositivi con poca memoria (&lt; 64 MB RAM)"
+
+msgid "Enable verbose debug logging in case of any processing error."
+msgstr ""
+"Abilita il registro dettagliato in caso di qualsiasi errore di processo."
+
+msgid "Enabled"
+msgstr "Abilitato"
+
+msgid "Extra Options"
+msgstr "Opzioni Extra"
+
+msgid ""
+"For SSL protected blocklist sources you need a suitable SSL library, e.g. "
+"'libustream-ssl' or the wget 'built-in'."
+msgstr ""
+"Per le fonti delle liste protette da SSL hai bisogno di una libreria SSL "
+"adatta, p.e. 'libustream-ssl' o wget 'built-in'."
+
+msgid ""
+"For further information <a href=\"%s\" target=\"_blank\">see online "
+"documentation</a>"
+msgstr ""
+"Per ulteriori informazioni <a href=\"%s\" target=\"_blank\">vedi "
+"documentazione online</a>"
+
+msgid "Force Local DNS"
+msgstr "Forza DNS Locale"
+
+msgid "Force Overall Sort"
+msgstr "Forza Ordinamento Globale"
+
+msgid ""
+"In OPKG use the '--force-maintainer' option to overwrite the pre-existing "
+"config file or download a fresh default config from <a href=\"%s\" target="
+"\"_blank\">here</a>"
+msgstr ""
+"In OPKG usa l'opzione '--force-maintainer' per sovrascrivere il pre-"
+"esistente file di configurazione o scarica una nuova configurazione di "
+"default da <a href=\"%s\" target=\"_blank\">qui</a>"
+
+msgid "Input file not found, please check your configuration."
+msgstr "File di input non trovato, per favore controlla la tua configurazione."
+
+msgid "Invalid domain specified!"
+msgstr "Dominio invalido specificato!"
+
+msgid "Last Run"
+msgstr "Ultimo Avvio"
+
+msgid ""
+"List URLs and Shallalist category selections are configurable in the "
+"'Advanced' section.<br />"
+msgstr ""
+"Le selezioni degli URL delle liste e categorie Shallalist sono configurabili "
+"nella sezione 'Avanzato'.<br />"
+
+msgid ""
+"List of available network interfaces. By default the startup will be "
+"triggered by the 'wan' interface.<br />"
+msgstr ""
+"Lista delle interfacce di rete disponibili. Per default l'avvio sarà "
+"innescato dall'interfaccia 'wan'.<br />"
+
+msgid ""
+"List of supported DNS backends with their default list export directory.<br /"
+">"
+msgstr ""
+"Lista dei backend DNS supportati con la loro directory di default di esporto "
+"della lista.<br />"
+
+msgid "Loading"
+msgstr "Caricando"
+
+msgid "Manual / Backup mode"
+msgstr "Modalità Manuale / Backup"
+
+msgid "No"
+msgstr "No"
+
+msgid ""
+"Options for further tweaking in case the defaults are not suitable for you."
+msgstr ""
+"Opzioni per ulteriori modifiche in caso che quelle di default non ti sono "
+"adatte."
+
+msgid "Overall Blocked Domains"
+msgstr "Totale Domini Bloccati"
+
+msgid "Overview"
+msgstr "Riassunto"
+
+msgid ""
+"Please add only one domain per line. Comments introduced with '#' are "
+"allowed - ip addresses, wildcards and regex are not."
+msgstr ""
+"Per favore aggiungi solo un dominio per linea. I commenti introdotti con '#' "
+"sono consentiti - indirizzi ip , jolly e regex non lo sono."
+
+msgid "Please edit this file directly in a terminal session."
+msgstr ""
+"Per favore modifica questo file direttamente in una sessione al terminale."
+
+msgid "Please update your adblock config file to use this package."
+msgstr ""
+"Per favore aggiorna il tuo file configurazione di adblock per usare questo "
+"pacchetto."
+
+msgid "Query"
+msgstr "Interrogazione"
+
+msgid "Query domains"
+msgstr "Interrogazione domini"
+
+msgid "Redirect all DNS queries from 'lan' zone to the local resolver."
+msgstr ""
+"Reindirizza tutte le richieste DNS dalla zona 'lan' al risolvitore locale."
+
+msgid "Resume"
+msgstr "Riprendi"
+
+msgid "Runtime Information"
+msgstr "Informazione di Runtime"
+
+msgid "SSL req."
+msgstr "Ric. SSL"
+
+msgid "Save"
+msgstr "Salva"
+
+msgid "Startup Trigger"
+msgstr "Innesco d'Avvio"
+
+msgid "Suspend"
+msgstr "Sospendi"
+
+msgid "Suspend / Resume Adblock"
+msgstr "Sospendi / Riprendi Adblock"
+
+msgid ""
+"Target directory for adblock backups. Please use only non-volatile disks, no "
+"ram/tmpfs drives."
+msgstr ""
+"Directory per i backup di adblock. Per favore usa solo dischi non volatili, "
+"non dischi ram/tmpfs."
+
+msgid "Target directory for the generated blocklist 'adb_list.overall'."
+msgstr "Directory per la lista di blocco generata 'adb_list.overall'."
+
+msgid "The file size is too large for online editing in LuCI (&gt; 512 KB)."
+msgstr ""
+"La grandezza del file è troppo grande per modificarla online in LuCI (&gt; "
+"512 KB)."
+
+msgid ""
+"This form allows you to modify the content of the adblock blacklist (%s)."
+"<br />"
+msgstr ""
+"Questo form ti consente di modificare il contenuto della lista nera di "
+"adblock (%s).<br />"
+
+msgid ""
+"This form allows you to modify the content of the adblock whitelist (%s)."
+"<br />"
+msgstr ""
+"Questo form ti consente di modificare il contenuto della lista bianca di "
+"adblock (%s).<br />"
+
+msgid ""
+"This form allows you to modify the content of the main adblock configuration "
+"file (/etc/config/adblock)."
+msgstr ""
+"Questo form ti consente di modificare il contenuto del file principale di "
+"configurazione di adblock (/etc/config/adblock)."
+
+msgid ""
+"This form allows you to query active block lists for certain domains, e.g. "
+"for whitelisting."
+msgstr ""
+"Questo form ti consente di interrogare le liste di blocco attive per "
+"determinati domini, p.e. per metterli nella lista bianca."
+
+msgid ""
+"This form shows the syslog output, pre-filtered for adblock related messages "
+"only."
+msgstr ""
+"Questo form mostra l'output del registro, prefiltrato per messaggi relativi "
+"solo ad adblock."
+
+msgid ""
+"To overwrite the default path use the 'DNS Directory' option in the extra "
+"section below."
+msgstr ""
+"Per sovrascrivere il percorso di default usa l'opzione 'Directory DNS' nella "
+"sezione aggiuntiva sotto."
+
+msgid "Trigger Delay"
+msgstr "Ritardo Innesco"
+
+msgid "Verbose Debug Logging"
+msgstr "Registro di Debug Dettagliato"
+
+msgid "View Logfile"
+msgstr "Vedi Registro"
+
+msgid "Waiting for command to complete..."
+msgstr "Aspettando che il comando venga completato..."
+
+msgid "Yes"
+msgstr "Sì"
+
+msgid "disabled"
+msgstr "disabilitato"
+
+msgid "enabled"
+msgstr "abilitato"
+
+msgid "error"
+msgstr "errore"
+
+msgid "n/a"
+msgstr "n/d"
+
+msgid "paused"
+msgstr "in pausa"

+ 273 - 76
package/luci/applications/luci-app-adblock/po/ja/adblock.po

@@ -8,132 +8,329 @@ msgstr ""
 "Language-Team: \n"
 "Language-Team: \n"
 "MIME-Version: 1.0\n"
 "MIME-Version: 1.0\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Poedit 1.8.11\n"
+"X-Generator: Poedit 2.0.3\n"
 "Language: ja\n"
 "Language: ja\n"
 
 
-msgid ""
-"). Note that list URLs and Shallalist category selections are not "
-"configurable via Luci."
-msgstr ""
-")。これらのリストのURLおよびshallaリストのカテゴリー選択は、Luciによって設定"
-"できないことに注意します。"
+msgid "-------"
+msgstr "(利用不可)"
 
 
 msgid "Adblock"
 msgid "Adblock"
 msgstr "Adblock"
 msgstr "Adblock"
 
 
-msgid "Available blocklist sources ("
-msgstr "利用可能なブロックリスト提供元です("
+msgid "Adblock Logfile"
+msgstr "Adblock ログファイル"
+
+msgid "Adblock Status"
+msgstr "Adblock ステータス"
+
+msgid "Adblock Version"
+msgstr "Adblock バージョン"
+
+msgid "Additional trigger delay in seconds before adblock processing begins."
+msgstr "Adblock の処理が開始されるまでの、追加の遅延時間(秒)です。"
+
+msgid "Advanced"
+msgstr "詳細設定"
 
 
-msgid "Backup directory"
-msgstr "バックアップ ディレクトリ"
+msgid "Available blocklist sources."
+msgstr "利用可能なブロックリスト提供元です。"
 
 
-msgid "Backup options"
-msgstr "バックアップ オプション"
+msgid "Backup Directory"
+msgstr "バックアップ先 ディレクトリ"
 
 
-msgid "Blocklist sources"
+msgid "Blocklist Sources"
 msgstr "ブロックリスト提供元"
 msgstr "ブロックリスト提供元"
 
 
+msgid ""
+"Caution: Please don't select big lists or many lists at once on low memory "
+"devices to prevent OOM exceptions!"
+msgstr ""
+"警告: メモリー容量の小さいデバイスでは OutOfMemory (OOM) 例外を防ぐため、大き"
+"いリストや一度にたくさんのリストを選択しないでください。"
+
+msgid ""
+"Choose 'none' to disable automatic startups, 'timed' to use a classic "
+"timeout (default 30 sec.) or select another trigger interface."
+msgstr ""
+"自動スタートアップを無効にするには 'none' を、従来のタイムアウト(既定値: 30"
+"秒)を使用するには 'timed' を選択してください。または、他のトリガとなるイン"
+"ターフェースを選択してください。"
+
+msgid "Collecting data..."
+msgstr "データ収集中です..."
+
 msgid ""
 msgid ""
 "Configuration of the adblock package to block ad/abuse domains by using DNS."
 "Configuration of the adblock package to block ad/abuse domains by using DNS."
 msgstr ""
 msgstr ""
-"広告/不正ドメインをDNSを利用してブロックする、adblock パッケージの設定です。"
+"DNS の利用によって広告/不正ドメインをブロックする、Adblock パッケージの設定で"
+"す。"
+
+msgid ""
+"Create compressed blocklist backups, they will be used in case of download "
+"errors or during startup in manual mode."
+msgstr ""
+"圧縮されたブロックリストのバックアップを作成します。これは、リストのダウン"
+"ロードがエラーの場合、またはマニュアル モードでサービスを起動時に使用されま"
+"す。"
+
+msgid "DNS Backend (DNS Directory)"
+msgstr "DNS バックエンド(DNS ディレクトリ)"
+
+msgid "DNS Directory"
+msgstr "DNS ディレクトリ"
 
 
 msgid "Description"
 msgid "Description"
 msgstr "説明"
 msgstr "説明"
 
 
-msgid "Enable adblock"
-msgstr "adblockの有効化"
+msgid ""
+"Do not automatically update blocklists during startup, use blocklist backups "
+"instead."
+msgstr ""
+"サービス起動時にブロックリストを自動的に更新せず、代わりにバックアップされた"
+"ブロックリストを使用します。"
+
+msgid "Download Utility (SSL Library)"
+msgstr "ダウンロード ユーティリティ(SSL ライブラリ)"
+
+msgid "Edit Blacklist"
+msgstr "ブラックリストの編集"
 
 
-msgid "Enable blocklist backup"
+msgid "Edit Configuration"
+msgstr "設定の編集"
+
+msgid "Edit Whitelist"
+msgstr "ホワイトリストの編集"
+
+msgid "Enable Adblock"
+msgstr "Adblock の有効化"
+
+msgid "Enable Blocklist Backup"
 msgstr "ブロックリスト バックアップの有効化"
 msgstr "ブロックリスト バックアップの有効化"
 
 
-msgid "Enable verbose debug logging"
-msgstr "詳細なデバッグ ログの有効化"
+msgid ""
+"Enable memory intense overall sort / duplicate removal on low memory devices "
+"(&lt; 64 MB RAM)"
+msgstr ""
+"メモリー容量の少ないデバイス(RAM 64MB 未満)において、一時ファイル内の全体的"
+"なソート及び重複の除去を有効にします。"
+
+msgid "Enable verbose debug logging in case of any processing error."
+msgstr ""
+"何らかの処理エラーが発生した場合に、詳細なデバッグ ログを有効にします。"
 
 
 msgid "Enabled"
 msgid "Enabled"
 msgstr "有効"
 msgstr "有効"
 
 
-msgid "Extra options"
-msgstr "拡張設定"
+msgid "Extra Options"
+msgstr "拡張オプション"
 
 
 msgid ""
 msgid ""
-"File with whitelisted hosts/domains that are allowed despite being on a "
-"blocklist."
+"For SSL protected blocklist sources you need a suitable SSL library, e.g. "
+"'libustream-ssl' or the wget 'built-in'."
 msgstr ""
 msgstr ""
-"ファイルのホワイトリスト ホスト/ドメインは、ブロックリストに登録されていても"
-"許可されます。"
+"SSLで保護されているブロックリストの取得には、適切なSSL ライブラリが必要です。"
+"例: 'libustream-ssl' または wget 'built-in'"
+
+msgid ""
+"For further information <a href=\"%s\" target=\"_blank\">see online "
+"documentation</a>"
+msgstr ""
+"詳細な情報は<a href=\"%s\" target=\"_blank\">オンライン ドキュメント</a>を確"
+"認してください。"
+
+msgid "Force Local DNS"
+msgstr "ローカル DNS の強制"
 
 
-msgid "Global options"
-msgstr "一般設定"
+msgid "Force Overall Sort"
+msgstr "全体ソートの強制"
+
+msgid ""
+"In OPKG use the '--force-maintainer' option to overwrite the pre-existing "
+"config file or download a fresh default config from <a href=\"%s\" target="
+"\"_blank\">here</a>"
+msgstr ""
+"OPKGで '--force-maintainer' オプションを使用して既存の設定ファイルを上書きす"
+"るか、 <a href=\"%s\" target=\"_blank\">ここ</a> からデフォルトの設定ファイル"
+"をダウンロードしてください。"
+
+msgid "Input file not found, please check your configuration."
+msgstr "入力ファイルが見つかりません。設定を確認してください。"
+
+msgid "Invalid domain specified!"
+msgstr "無効なドメインが指定されています!"
+
+msgid "Last Run"
+msgstr "最終実行"
+
+msgid ""
+"List URLs and Shallalist category selections are configurable in the "
+"'Advanced' section.<br />"
+msgstr ""
+"リストの URL 及び \"Shalla\" リストのカテゴリー設定は、'詳細設定' セクション"
+"で設定することができます。<br />"
+
+msgid ""
+"List of available network interfaces. By default the startup will be "
+"triggered by the 'wan' interface.<br />"
+msgstr ""
+"利用可能なネットワーク インターフェースの一覧です。デフォルトでは 'wan' イン"
+"ターフェースによりスタートアップがトリガされます。"
+
+msgid ""
+"List of supported DNS backends with their default list export directory.<br /"
+">"
+msgstr ""
+"サポートされる DNS バックエンドと、それぞれのデフォルトのリスト出力先ディレク"
+"トリのリストです<br />"
+
+msgid "Loading"
+msgstr "読込中"
+
+msgid "Manual / Backup mode"
+msgstr "手動 / バックアップ モード"
+
+msgid "No"
+msgstr "いいえ"
 
 
 msgid ""
 msgid ""
 "Options for further tweaking in case the defaults are not suitable for you."
 "Options for further tweaking in case the defaults are not suitable for you."
 msgstr "デフォルト設定が適切でない場合、追加で設定するためのオプションです。"
 msgstr "デフォルト設定が適切でない場合、追加で設定するためのオプションです。"
 
 
-msgid "Restrict reload trigger to certain interface(s)"
-msgstr "リロードトリガを特定のインターフェースに限定する"
+msgid "Overall Blocked Domains"
+msgstr "全体のブロック済みドメイン"
+
+msgid "Overview"
+msgstr "概要"
+
+msgid ""
+"Please add only one domain per line. Comments introduced with '#' are "
+"allowed - ip addresses, wildcards and regex are not."
+msgstr ""
+"1行に1つのドメインを追加してください。'#' から始まるコメントを記述できます"
+"が、IP アドレスやワイルドカード、正規表現を設定値として使用することはできませ"
+"ん。"
+
+msgid "Please edit this file directly in a terminal session."
+msgstr "ターミナル セッションで直接このファイルを編集してください。"
+
+msgid "Please update your adblock config file to use this package."
+msgstr ""
+"このパッケージを使用するには、既存の Adblock 設定ファイルを更新してください。"
+
+msgid "Query"
+msgstr "検索"
+
+msgid "Query domains"
+msgstr "ドメインの検索"
+
+msgid "Redirect all DNS queries from 'lan' zone to the local resolver."
+msgstr ""
+"'lan' ゾーンからの全 DNS クエリを、ローカル リゾルバにリダイレクトします。"
+
+msgid "Resume"
+msgstr "再開"
+
+msgid "Runtime Information"
+msgstr "実行情報"
+
+msgid "SSL req."
+msgstr "SSL 必須"
+
+msgid "Save"
+msgstr "保存"
+
+msgid "Startup Trigger"
+msgstr "スタートアップ トリガ"
+
+msgid "Suspend"
+msgstr "一時停止"
+
+msgid "Suspend / Resume Adblock"
+msgstr "Adblock の一時停止 / 再開"
 
 
 msgid ""
 msgid ""
-"Space separated list of wan interfaces that trigger reload action. To "
-"disable reload trigger set it to 'false'. Default: empty"
+"Target directory for adblock backups. Please use only non-volatile disks, no "
+"ram/tmpfs drives."
 msgstr ""
 msgstr ""
-"リロード実行のトリガとなる、スペースで区切られたWANインターフェースのリストで"
-"す。リロードトリガを無効にするには、 false を設定します。デフォルト:(空)"
+"Adblock バックアップの保存先ディレクトリです。 RAM/tmpfs ドライブではなく、不"
+"揮発性のドライブのみを使用してください。"
 
 
-msgid "Whitelist file"
-msgstr "ホワイトリスト ファイル"
+msgid "Target directory for the generated blocklist 'adb_list.overall'."
+msgstr "生成されたブロックリスト 'adb_list.overall' の保存先ディレクトリです。"
 
 
-msgid "see list details"
-msgstr "リストの詳細を見る"
+msgid "The file size is too large for online editing in LuCI (&gt; 512 KB)."
+msgstr ""
+"ファイル サイズが大きすぎる(512 KB超)ため、 LuCI 上でオンライン編集できませ"
+"ん。"
 
 
-#~ msgid "Count"
-#~ msgstr "カウント"
+msgid ""
+"This form allows you to modify the content of the adblock blacklist (%s)."
+"<br />"
+msgstr ""
+"このフォームでは、Adblock ブラックリスト (%s) の内容を変更することができま"
+"す。<br />"
 
 
-#~ msgid "Do not write status info to flash"
-#~ msgstr "ステータス情報をフラッシュに書き込まない"
+msgid ""
+"This form allows you to modify the content of the adblock whitelist (%s)."
+"<br />"
+msgstr ""
+"このフォームでは、Adblock ホワイトリスト (%s) の内容を変更することができま"
+"す。<br />"
 
 
-#~ msgid "Last update of the blocklists"
-#~ msgstr "ブロックリストの最終更新日時"
+msgid ""
+"This form allows you to modify the content of the main adblock configuration "
+"file (/etc/config/adblock)."
+msgstr ""
+"このフォームでは、メインのAdblock 設定ファイル (/etc/config/adblock) の内容を"
+"変更することができます。"
+
+msgid ""
+"This form allows you to query active block lists for certain domains, e.g. "
+"for whitelisting."
+msgstr ""
+"このフォームでは、現在有効なリスト内で特定のドメインを検索することができま"
+"す。例: ホワイトリスト内"
+
+msgid ""
+"This form shows the syslog output, pre-filtered for adblock related messages "
+"only."
+msgstr ""
+"このフォームには、システムログ内の Adblock に関連するメッセージのみが表示され"
+"ます。"
 
 
-#~ msgid "List date/state"
-#~ msgstr "リスト日時/状態"
+msgid ""
+"To overwrite the default path use the 'DNS Directory' option in the extra "
+"section below."
+msgstr ""
+"デフォルトのパスを上書きするには、下記拡張セクションの 'DNS ディレクトリ' オ"
+"プションを使用します。"
 
 
-#~ msgid "Name of the logical lan interface"
-#~ msgstr "論理LANインターフェース名"
+msgid "Trigger Delay"
+msgstr "トリガ遅延"
 
 
-#~ msgid "Percentage of blocked packets (before last update, IPv4/IPv6)"
-#~ msgstr "ブロック済みパケットの割合(最終更新以前、IPv4/IPv6)"
+msgid "Verbose Debug Logging"
+msgstr "詳細なデバッグ ログ"
 
 
-#~ msgid "Port of the adblock uhttpd instance"
-#~ msgstr "adblock uhttpdインスタンスのポート"
+msgid "View Logfile"
+msgstr "ログファイルを見る"
 
 
-#~ msgid "Port of the adblock uhttpd instance for https links"
-#~ msgstr "httpsリンク用adblock uhttpdインスタンスのポート"
+msgid "Waiting for command to complete..."
+msgstr "コマンド実行中です..."
 
 
-#~ msgid "Redirect all DNS queries to the local resolver"
-#~ msgstr "全てのDNSクエリをローカルリゾルバにリダイレクト"
+msgid "Yes"
+msgstr "はい"
 
 
-#~ msgid ""
-#~ "Skip writing update status information to the config file. Status fields "
-#~ "on this page will not be updated."
-#~ msgstr ""
-#~ "更新ステータス情報をコンフィグファイルに書き込まず、スキップします。この"
-#~ "ページのステータス画面は更新されなくなります。"
+msgid "disabled"
+msgstr "無効"
 
 
-#~ msgid "Statistics"
-#~ msgstr "ステータス"
+msgid "enabled"
+msgstr "有効"
 
 
-#~ msgid "Timeout for blocklist fetch (seconds)"
-#~ msgstr "ブロックリスト取得の制限時間(秒)"
+msgid "error"
+msgstr "エラー"
 
 
-#~ msgid "Total count of blocked domains"
-#~ msgstr "ブロック済みドメインの合計"
+msgid "n/a"
+msgstr "利用不可"
 
 
-#~ msgid ""
-#~ "When adblock is active, all DNS queries are redirected to the local "
-#~ "resolver in this server by default. You can disable that to allow queries "
-#~ "to external DNS servers."
-#~ msgstr ""
-#~ "adblockがアクティブである時、全てのDNSクエリは既定でこのサーバー上のリゾル"
-#~ "バにリダイレクトされます。外部DNSサーバーへのクエリを許可する場合、この設"
-#~ "定を無効にすることもできます。"
+msgid "paused"
+msgstr "一時停止"

+ 338 - 35
package/luci/applications/luci-app-adblock/po/pt-br/adblock.po

@@ -8,65 +8,176 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "MIME-Version: 1.0\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Content-Transfer-Encoding: 8bit\n"
 "X-Generator: Poedit 1.8.11\n"
 "X-Generator: Poedit 1.8.11\n"
-"Last-Translator: Luiz Angelo Daros de Luca <luizluca@gmail.com>\n"
+"Last-Translator: Luís Gabriel Lima Silva <gabrielima.si@gmail.com>\n"
 "Plural-Forms: nplurals=2; plural=(n > 1);\n"
 "Plural-Forms: nplurals=2; plural=(n > 1);\n"
 "Language: pt_BR\n"
 "Language: pt_BR\n"
 
 
-msgid ""
-"). Note that list URLs and Shallalist category selections are not "
-"configurable via Luci."
+msgid "-------"
 msgstr ""
 msgstr ""
-"). Note que a lista de URL e as seleções de categoria da Shallalist não são "
-"configuráveis pelo Luci."
 
 
 msgid "Adblock"
 msgid "Adblock"
 msgstr "Adblock"
 msgstr "Adblock"
 
 
-msgid "Available blocklist sources ("
-msgstr "Fontes de listas de bloqueio disponíveis ("
+msgid "Adblock Logfile"
+msgstr "Arquivo de log do Adblock"
 
 
-msgid "Backup directory"
-msgstr "Diretório da cópia de segurança"
+msgid "Adblock Status"
+msgstr ""
 
 
-msgid "Backup options"
-msgstr "Opções da cópia de segurança"
+msgid "Adblock Version"
+msgstr "Versão do Adblock"
+
+msgid "Additional trigger delay in seconds before adblock processing begins."
+msgstr ""
+"Atraso de gatilho adicional em segundos antes do processamento do adblock "
+"começar."
+
+msgid "Advanced"
+msgstr "Avançado"
+
+msgid "Available blocklist sources."
+msgstr "Fontes de listas de bloqueio disponíveis."
+
+msgid "Backup Directory"
+msgstr "Diretório da cópia de segurança"
 
 
-msgid "Blocklist sources"
+msgid "Blocklist Sources"
 msgstr "Fontes de listas de bloqueio"
 msgstr "Fontes de listas de bloqueio"
 
 
+msgid ""
+"Caution: Please don't select big lists or many lists at once on low memory "
+"devices to prevent OOM exceptions!"
+msgstr ""
+
+msgid ""
+"Choose 'none' to disable automatic startups, 'timed' to use a classic "
+"timeout (default 30 sec.) or select another trigger interface."
+msgstr ""
+
+msgid "Collecting data..."
+msgstr "Coletando dados..."
+
 msgid ""
 msgid ""
 "Configuration of the adblock package to block ad/abuse domains by using DNS."
 "Configuration of the adblock package to block ad/abuse domains by using DNS."
 msgstr ""
 msgstr ""
 "Configuração do pacote adblock para bloquear, usando o DNS, domínios que "
 "Configuração do pacote adblock para bloquear, usando o DNS, domínios que "
 "distribuem propagandas abusivas."
 "distribuem propagandas abusivas."
 
 
+msgid ""
+"Create compressed blocklist backups, they will be used in case of download "
+"errors or during startup in manual mode."
+msgstr ""
+"Crie backups comprimidos das listas de bloqueio, eles serão usados em caso "
+"de erro dedownload ou durante o início em modo manual."
+
+msgid "DNS Backend (DNS Directory)"
+msgstr ""
+
+msgid "DNS Directory"
+msgstr ""
+
 msgid "Description"
 msgid "Description"
 msgstr "Descrição"
 msgstr "Descrição"
 
 
-msgid "Enable adblock"
+msgid ""
+"Do not automatically update blocklists during startup, use blocklist backups "
+"instead."
+msgstr ""
+"Não atualize as listas de bloqueio automaticamente durante o início, use o "
+"backup das listas como alternativa."
+
+msgid "Download Utility (SSL Library)"
+msgstr "Utilitário de Download (Biblioteca SSL)"
+
+msgid "Edit Blacklist"
+msgstr "Editar Lista de Bloqueio"
+
+msgid "Edit Configuration"
+msgstr "Editar Configuração"
+
+msgid "Edit Whitelist"
+msgstr "Editar Lista Permitida"
+
+msgid "Enable Adblock"
 msgstr "Habilitar adblock"
 msgstr "Habilitar adblock"
 
 
-msgid "Enable blocklist backup"
+msgid "Enable Blocklist Backup"
 msgstr "Habilitar cópia de segurança da lista de bloqueio"
 msgstr "Habilitar cópia de segurança da lista de bloqueio"
 
 
-msgid "Enable verbose debug logging"
-msgstr "Habilite registros detalhados para depuração"
+msgid ""
+"Enable memory intense overall sort / duplicate removal on low memory devices "
+"(&lt; 64 MB RAM)"
+msgstr ""
+"Ativar tipo geral intenso de memória / duplicar remoção em dispositivos com "
+"pouca memória (&lt; 64 MB RAM)"
+
+msgid "Enable verbose debug logging in case of any processing error."
+msgstr ""
 
 
 msgid "Enabled"
 msgid "Enabled"
 msgstr "Habilitado"
 msgstr "Habilitado"
 
 
-msgid "Extra options"
+msgid "Extra Options"
 msgstr "Opções adicionais"
 msgstr "Opções adicionais"
 
 
 msgid ""
 msgid ""
-"File with whitelisted hosts/domains that are allowed despite being on a "
-"blocklist."
+"For SSL protected blocklist sources you need a suitable SSL library, e.g. "
+"'libustream-ssl' or the wget 'built-in'."
 msgstr ""
 msgstr ""
-"Arquivo com a lista branca dos equipamentos/domínios que serão autorizados "
-"mesmo estando na lista de bloqueio."
+"Para uma lista de bloqueio protegida por SSL você precisa de uma biblioteca "
+"SSL adequada, e.x. 'libustream-ssl' ou o wget 'built-in'."
 
 
-msgid "Global options"
-msgstr "Opções Globais"
+msgid ""
+"For further information <a href=\"%s\" target=\"_blank\">see online "
+"documentation</a>"
+msgstr ""
+"Para outras informações <a href=\"%s\" target=\"_blank\">veja a documentação "
+"online</a>"
+
+msgid "Force Local DNS"
+msgstr "Force o DNS local"
+
+msgid "Force Overall Sort"
+msgstr "Force Tipo Geral"
+
+msgid ""
+"In OPKG use the '--force-maintainer' option to overwrite the pre-existing "
+"config file or download a fresh default config from <a href=\"%s\" target="
+"\"_blank\">here</a>"
+msgstr ""
+
+msgid "Input file not found, please check your configuration."
+msgstr "Arquivo de entrada não encontrado, por favor cheque sua configuração."
+
+msgid "Invalid domain specified!"
+msgstr "Domínio especificado inválido!"
+
+msgid "Last Run"
+msgstr ""
+
+msgid ""
+"List URLs and Shallalist category selections are configurable in the "
+"'Advanced' section.<br />"
+msgstr ""
+
+msgid ""
+"List of available network interfaces. By default the startup will be "
+"triggered by the 'wan' interface.<br />"
+msgstr ""
+
+msgid ""
+"List of supported DNS backends with their default list export directory.<br /"
+">"
+msgstr ""
+
+msgid "Loading"
+msgstr "Carregando"
+
+msgid "Manual / Backup mode"
+msgstr "Manual / Modo backup"
+
+msgid "No"
+msgstr "Não"
 
 
 msgid ""
 msgid ""
 "Options for further tweaking in case the defaults are not suitable for you."
 "Options for further tweaking in case the defaults are not suitable for you."
@@ -74,19 +185,211 @@ msgstr ""
 "Opções para aprimoramentos adicionais caso as opções padrão não sejam "
 "Opções para aprimoramentos adicionais caso as opções padrão não sejam "
 "suficientes para você."
 "suficientes para você."
 
 
-msgid "Restrict reload trigger to certain interface(s)"
-msgstr "Restringir o gatilho de recarga para somente alguma(s) interface(s)"
+msgid "Overall Blocked Domains"
+msgstr ""
+
+msgid "Overview"
+msgstr "Visão geral"
 
 
 msgid ""
 msgid ""
-"Space separated list of wan interfaces that trigger reload action. To "
-"disable reload trigger set it to 'false'. Default: empty"
+"Please add only one domain per line. Comments introduced with '#' are "
+"allowed - ip addresses, wildcards and regex are not."
+msgstr ""
+
+msgid "Please edit this file directly in a terminal session."
+msgstr "Por favor edite esse arquivo direto em uma sessão de terminal."
+
+msgid "Please update your adblock config file to use this package."
+msgstr ""
+
+msgid "Query"
+msgstr "Consulta"
+
+msgid "Query domains"
+msgstr "Consulta de domínios"
+
+msgid "Redirect all DNS queries from 'lan' zone to the local resolver."
+msgstr ""
+
+msgid "Resume"
 msgstr ""
 msgstr ""
-"Lista das interfaces WAN, separadas por espaço, que podem disparar uma ação "
-"de recarga. Para desabilitar este gatilho, defina-o como 'false'. Padrão: em "
-"branco"
 
 
-msgid "Whitelist file"
-msgstr "Arquivo da lista branca"
+msgid "Runtime Information"
+msgstr "Informação de execução"
+
+msgid "SSL req."
+msgstr "req. de SSL"
+
+msgid "Save"
+msgstr "Salvar"
+
+msgid "Startup Trigger"
+msgstr ""
+
+msgid "Suspend"
+msgstr ""
+
+msgid "Suspend / Resume Adblock"
+msgstr "Suspender / Resumir adblock"
+
+msgid ""
+"Target directory for adblock backups. Please use only non-volatile disks, no "
+"ram/tmpfs drives."
+msgstr ""
+
+msgid "Target directory for the generated blocklist 'adb_list.overall'."
+msgstr ""
+
+msgid "The file size is too large for online editing in LuCI (&gt; 512 KB)."
+msgstr ""
+"O tamanho do arquivo é muito grande para edição online no LuCI (&gt; 512 KB)."
+
+msgid ""
+"This form allows you to modify the content of the adblock blacklist (%s)."
+"<br />"
+msgstr ""
+"Esse formulário permite que você modifique o conteúdo das listas de bloqueio "
+"do adblock (%s).<br />"
+
+msgid ""
+"This form allows you to modify the content of the adblock whitelist (%s)."
+"<br />"
+msgstr ""
+"Esse formulário permite que você modifique o conteúdo das listas de "
+"permissão do adblock (%s).<br />"
+
+msgid ""
+"This form allows you to modify the content of the main adblock configuration "
+"file (/etc/config/adblock)."
+msgstr ""
+"Esse formulário permite que você modifique o conteúdo das do arquivo de "
+"configuração principal (/etc/config/adblock)."
+
+msgid ""
+"This form allows you to query active block lists for certain domains, e.g. "
+"for whitelisting."
+msgstr ""
+"Esse formulário permite que você consulte listas de blocos ativos para "
+"certos domínios, e.x. para listas de permissão."
+
+msgid ""
+"This form shows the syslog output, pre-filtered for adblock related messages "
+"only."
+msgstr ""
+"Esse formulário mostra a saída do syslog, pré-filtrado para mensagens do "
+"adblock  apenas."
+
+msgid ""
+"To overwrite the default path use the 'DNS Directory' option in the extra "
+"section below."
+msgstr ""
+
+msgid "Trigger Delay"
+msgstr "Atraso no gatilho"
+
+msgid "Verbose Debug Logging"
+msgstr ""
+
+msgid "View Logfile"
+msgstr "Ver arquivo de log"
+
+msgid "Waiting for command to complete..."
+msgstr "Aguardando por comando para completar..."
+
+msgid "Yes"
+msgstr "Sim"
+
+msgid "disabled"
+msgstr ""
+
+msgid "enabled"
+msgstr ""
+
+msgid "error"
+msgstr ""
+
+msgid "n/a"
+msgstr "n/d"
+
+msgid "paused"
+msgstr ""
+
+#~ msgid "Blocked domains (overall)"
+#~ msgstr "Domínios bloqueados (total)"
+
+#~ msgid "DNS backend"
+#~ msgstr "Porta dos fundos de DNS"
+
+#~ msgid "Enable verbose debug logging"
+#~ msgstr "Habilite registros detalhados para depuração"
+
+#~ msgid "Last rundate"
+#~ msgstr "Última data de execução"
+
+#~ msgid ""
+#~ "Note that list URLs and Shallalist category selections are configurable "
+#~ "in the 'Advanced' section."
+#~ msgstr ""
+#~ "Observe que as URLs da lista e as seleções da categoria Shallalist são "
+#~ "configuráveis na secção 'Avançada'."
+
+#~ msgid "Redirect all DNS queries to the local resolver."
+#~ msgstr "Redirecione todas as consultas de DNS para o resolvedor local."
+
+#~ msgid "Restrict interface trigger to certain interface(s)"
+#~ msgstr "Restingir o gatilho de interface para certas interface(s)"
+
+#~ msgid "Resume adblock"
+#~ msgstr "Resumir adblock"
+
+#~ msgid "Status"
+#~ msgstr "Estado"
+
+#~ msgid "active"
+#~ msgstr "ativo"
+
+#~ msgid "no domains blocked"
+#~ msgstr "nenhum domínio bloqueado"
+
+#~ msgid "suspended"
+#~ msgstr "suspenso"
+
+#~ msgid "Backup options"
+#~ msgstr "Opções da cópia de segurança"
+
+#~ msgid ""
+#~ "). Note that list URLs and Shallalist category selections are not "
+#~ "configurable via Luci."
+#~ msgstr ""
+#~ "). Note que a lista de URL e as seleções de categoria da Shallalist não "
+#~ "são configuráveis pelo Luci."
+
+#~ msgid "Available blocklist sources ("
+#~ msgstr "Fontes de listas de bloqueio disponíveis ("
+
+#~ msgid ""
+#~ "File with whitelisted hosts/domains that are allowed despite being on a "
+#~ "blocklist."
+#~ msgstr ""
+#~ "Arquivo com a lista branca dos equipamentos/domínios que serão "
+#~ "autorizados mesmo estando na lista de bloqueio."
+
+#~ msgid "Global options"
+#~ msgstr "Opções Globais"
+
+#~ msgid "Restrict reload trigger to certain interface(s)"
+#~ msgstr "Restringir o gatilho de recarga para somente alguma(s) interface(s)"
+
+#~ msgid ""
+#~ "Space separated list of wan interfaces that trigger reload action. To "
+#~ "disable reload trigger set it to 'false'. Default: empty"
+#~ msgstr ""
+#~ "Lista das interfaces WAN, separadas por espaço, que podem disparar uma "
+#~ "ação de recarga. Para desabilitar este gatilho, defina-o como 'false'. "
+#~ "Padrão: em branco"
+
+#~ msgid "Whitelist file"
+#~ msgstr "Arquivo da lista branca"
 
 
-msgid "see list details"
-msgstr "veja os detalhes da lista"
+#~ msgid "see list details"
+#~ msgstr "veja os detalhes da lista"

+ 301 - 29
package/luci/applications/luci-app-adblock/po/sv/adblock.po

@@ -1,75 +1,347 @@
 msgid ""
 msgid ""
 msgstr "Content-Type: text/plain; charset=UTF-8\n"
 msgstr "Content-Type: text/plain; charset=UTF-8\n"
 
 
-msgid ""
-"). Note that list URLs and Shallalist category selections are not "
-"configurable via Luci."
+msgid "-------"
 msgstr ""
 msgstr ""
 
 
 msgid "Adblock"
 msgid "Adblock"
-msgstr "Blockering av annonser"
+msgstr "Adblock"
 
 
-msgid "Available blocklist sources ("
-msgstr "Tillgängliga källor för blockeringslistor ("
+msgid "Adblock Logfile"
+msgstr "Adblock's loggfil"
 
 
-msgid "Backup directory"
-msgstr "Säkerhetskopiera mapp"
+msgid "Adblock Status"
+msgstr ""
 
 
-msgid "Backup options"
-msgstr "Alternativ för säkerhetskopiering"
+msgid "Adblock Version"
+msgstr "Version för Adblock"
+
+msgid "Additional trigger delay in seconds before adblock processing begins."
+msgstr ""
+
+msgid "Advanced"
+msgstr "Avancerat"
+
+msgid "Available blocklist sources."
+msgstr "Tillgängliga källor för blockeringslistor"
+
+msgid "Backup Directory"
+msgstr "Säkerhetskopiera mapp"
 
 
-msgid "Blocklist sources"
+msgid "Blocklist Sources"
 msgstr "Källor för blockeringslistor"
 msgstr "Källor för blockeringslistor"
 
 
+msgid ""
+"Caution: Please don't select big lists or many lists at once on low memory "
+"devices to prevent OOM exceptions!"
+msgstr ""
+
+msgid ""
+"Choose 'none' to disable automatic startups, 'timed' to use a classic "
+"timeout (default 30 sec.) or select another trigger interface."
+msgstr ""
+
+msgid "Collecting data..."
+msgstr "Samlar in data..."
+
 msgid ""
 msgid ""
 "Configuration of the adblock package to block ad/abuse domains by using DNS."
 "Configuration of the adblock package to block ad/abuse domains by using DNS."
 msgstr ""
 msgstr ""
-"Konfiguration av paket adblock för att blockera annons/otillåtna domäner "
-"genom att användning DNS."
+"Konfiguration av paketet adblock för att blockera annons/otillåtna domäner "
+"genom att använda DNS."
+
+msgid ""
+"Create compressed blocklist backups, they will be used in case of download "
+"errors or during startup in manual mode."
+msgstr ""
+
+msgid "DNS Backend (DNS Directory)"
+msgstr ""
+
+msgid "DNS Directory"
+msgstr ""
 
 
 msgid "Description"
 msgid "Description"
 msgstr "Beskrivning"
 msgstr "Beskrivning"
 
 
-msgid "Enable adblock"
-msgstr "Aktivera abblock"
+msgid ""
+"Do not automatically update blocklists during startup, use blocklist backups "
+"instead."
+msgstr ""
+"Uppdatera inte automatiskt blockeringlistor vid uppstarten, använd "
+"säkerhetskopierade blockeringslistor istället."
+
+msgid "Download Utility (SSL Library)"
+msgstr "Nerladdningsprogram (SSL-bibliotek)"
+
+msgid "Edit Blacklist"
+msgstr "Redigera svartlista"
+
+msgid "Edit Configuration"
+msgstr "Redigerar konfigurationen"
+
+msgid "Edit Whitelist"
+msgstr "Redigera vitlista"
 
 
-msgid "Enable blocklist backup"
+msgid "Enable Adblock"
+msgstr "Aktivera adblock"
+
+msgid "Enable Blocklist Backup"
 msgstr "Aktivera säkerhetskopiering av blockeringslistan"
 msgstr "Aktivera säkerhetskopiering av blockeringslistan"
 
 
-msgid "Enable verbose debug logging"
+msgid ""
+"Enable memory intense overall sort / duplicate removal on low memory devices "
+"(&lt; 64 MB RAM)"
+msgstr ""
+
+msgid "Enable verbose debug logging in case of any processing error."
 msgstr ""
 msgstr ""
 
 
 msgid "Enabled"
 msgid "Enabled"
 msgstr "Aktiverad"
 msgstr "Aktiverad"
 
 
-msgid "Extra options"
+msgid "Extra Options"
 msgstr "Extra alternativ"
 msgstr "Extra alternativ"
 
 
 msgid ""
 msgid ""
-"File with whitelisted hosts/domains that are allowed despite being on a "
-"blocklist."
+"For SSL protected blocklist sources you need a suitable SSL library, e.g. "
+"'libustream-ssl' or the wget 'built-in'."
 msgstr ""
 msgstr ""
 
 
-msgid "Global options"
-msgstr "Globala alternativ"
+msgid ""
+"For further information <a href=\"%s\" target=\"_blank\">see online "
+"documentation</a>"
+msgstr ""
+"För mer information <a href=\"%s\" target=\"_blank\">se dokumentationen på "
+"internet</a>"
+
+msgid "Force Local DNS"
+msgstr "Tvinga lokal DNS"
+
+msgid "Force Overall Sort"
+msgstr ""
+
+msgid ""
+"In OPKG use the '--force-maintainer' option to overwrite the pre-existing "
+"config file or download a fresh default config from <a href=\"%s\" target="
+"\"_blank\">here</a>"
+msgstr ""
+
+msgid "Input file not found, please check your configuration."
+msgstr ""
+"Inmatningsfilen kunde inte hittas, var vänlig kontrollera din konfiguration."
+
+msgid "Invalid domain specified!"
+msgstr "Ogiltig domän angiven!"
+
+msgid "Last Run"
+msgstr ""
+
+msgid ""
+"List URLs and Shallalist category selections are configurable in the "
+"'Advanced' section.<br />"
+msgstr ""
+
+msgid ""
+"List of available network interfaces. By default the startup will be "
+"triggered by the 'wan' interface.<br />"
+msgstr ""
+
+msgid ""
+"List of supported DNS backends with their default list export directory.<br /"
+">"
+msgstr ""
+
+msgid "Loading"
+msgstr "Laddar"
+
+msgid "Manual / Backup mode"
+msgstr "Manuell / Säkerhetskopieringsläge"
+
+msgid "No"
+msgstr "Nej"
 
 
 msgid ""
 msgid ""
 "Options for further tweaking in case the defaults are not suitable for you."
 "Options for further tweaking in case the defaults are not suitable for you."
 msgstr ""
 msgstr ""
 
 
-msgid "Restrict reload trigger to certain interface(s)"
+msgid "Overall Blocked Domains"
+msgstr ""
+
+msgid "Overview"
+msgstr "Översikt"
+
+msgid ""
+"Please add only one domain per line. Comments introduced with '#' are "
+"allowed - ip addresses, wildcards and regex are not."
+msgstr ""
+
+msgid "Please edit this file directly in a terminal session."
+msgstr "Vänligen redigera den här filen direkt i en terminal-session."
+
+msgid "Please update your adblock config file to use this package."
+msgstr ""
+
+msgid "Query"
+msgstr "Fråga"
+
+msgid "Query domains"
+msgstr "Fråga efter domäner"
+
+msgid "Redirect all DNS queries from 'lan' zone to the local resolver."
+msgstr ""
+
+msgid "Resume"
+msgstr ""
+
+msgid "Runtime Information"
+msgstr "Information om körtid"
+
+msgid "SSL req."
+msgstr "SSL-rek."
+
+msgid "Save"
+msgstr "Spara"
+
+msgid "Startup Trigger"
+msgstr ""
+
+msgid "Suspend"
+msgstr ""
+
+msgid "Suspend / Resume Adblock"
+msgstr "Upphäv / Återuppta adblock"
+
+msgid ""
+"Target directory for adblock backups. Please use only non-volatile disks, no "
+"ram/tmpfs drives."
+msgstr ""
+
+msgid "Target directory for the generated blocklist 'adb_list.overall'."
+msgstr ""
+
+msgid "The file size is too large for online editing in LuCI (&gt; 512 KB)."
+msgstr "Filstorleken är för stor för online-redigering i LuCi (&gt; 512 KB)."
+
+msgid ""
+"This form allows you to modify the content of the adblock blacklist (%s)."
+"<br />"
+msgstr ""
+"Det här formuläret tillåter dig att förändra innehållet i adblock's "
+"svartlista (%s).<br />"
+
+msgid ""
+"This form allows you to modify the content of the adblock whitelist (%s)."
+"<br />"
+msgstr ""
+"Det här formuläret tillåter dig att förändra innehållet i adblock's vitlista "
+"(%s).<br />"
+
+msgid ""
+"This form allows you to modify the content of the main adblock configuration "
+"file (/etc/config/adblock)."
+msgstr ""
+"Det här formuläret tillåter dig att förändra innehållet i adblock's "
+"huvudsakliga konfigurations fil (/etc/config/adblock)."
+
+msgid ""
+"This form allows you to query active block lists for certain domains, e.g. "
+"for whitelisting."
+msgstr ""
+
+msgid ""
+"This form shows the syslog output, pre-filtered for adblock related messages "
+"only."
 msgstr ""
 msgstr ""
 
 
 msgid ""
 msgid ""
-"Space separated list of wan interfaces that trigger reload action. To "
-"disable reload trigger set it to 'false'. Default: empty"
+"To overwrite the default path use the 'DNS Directory' option in the extra "
+"section below."
+msgstr ""
+
+msgid "Trigger Delay"
+msgstr ""
+
+msgid "Verbose Debug Logging"
+msgstr ""
+
+msgid "View Logfile"
+msgstr "Visa loggfil"
+
+msgid "Waiting for command to complete..."
+msgstr "Väntar på att kommandot ska slutföras..."
+
+msgid "Yes"
+msgstr "Ja"
+
+msgid "disabled"
+msgstr ""
+
+msgid "enabled"
+msgstr ""
+
+msgid "error"
+msgstr ""
+
+msgid "n/a"
+msgstr "n/a"
+
+msgid "paused"
 msgstr ""
 msgstr ""
 
 
-msgid "Whitelist file"
-msgstr "Vitlista fil"
+#~ msgid "Blocked domains (overall)"
+#~ msgstr "Blockerade domäner (övergripande)"
+
+#~ msgid "DNS backend"
+#~ msgstr "Bakände för DNS"
+
+#~ msgid "Enable verbose debug logging"
+#~ msgstr "Aktivera utförlig loggning för avlusning"
+
+#~ msgid "Last rundate"
+#~ msgstr "Senaste kördatum"
+
+#~ msgid "Redirect all DNS queries to the local resolver."
+#~ msgstr "Dirigera om alla DNS-förfrågningar till den lokala "
+
+#~ msgid "Resume adblock"
+#~ msgstr "Återuppta adblock"
+
+#~ msgid "Status"
+#~ msgstr "Status"
+
+#~ msgid "Suspend adblock"
+#~ msgstr "Upphäv adblock"
+
+#~ msgid "active"
+#~ msgstr "aktiv"
+
+#~ msgid "no domains blocked"
+#~ msgstr "inga domäner blockerades"
+
+#~ msgid "suspended"
+#~ msgstr "upphävd"
+
+#~ msgid "."
+#~ msgstr "."
+
+#~ msgid "For further information"
+#~ msgstr "För mer information"
+
+#~ msgid "Backup options"
+#~ msgstr "Alternativ för säkerhetskopiering"
+
+#~ msgid "Available blocklist sources ("
+#~ msgstr "Tillgängliga källor för blockeringslistor ("
+
+#~ msgid "Global options"
+#~ msgstr "Globala alternativ"
+
+#~ msgid "Whitelist file"
+#~ msgstr "Vitlista fil"
 
 
-msgid "see list details"
-msgstr "se listans detaljer"
+#~ msgid "see list details"
+#~ msgstr "se listans detaljer"
 
 
 #~ msgid "Count"
 #~ msgid "Count"
 #~ msgstr "Räkna"
 #~ msgstr "Räkna"

+ 226 - 19
package/luci/applications/luci-app-adblock/po/templates/adblock.pot

@@ -1,70 +1,277 @@
 msgid ""
 msgid ""
 msgstr "Content-Type: text/plain; charset=UTF-8"
 msgstr "Content-Type: text/plain; charset=UTF-8"
 
 
-msgid ""
-"). Note that list URLs and Shallalist category selections are not "
-"configurable via Luci."
+msgid "-------"
 msgstr ""
 msgstr ""
 
 
 msgid "Adblock"
 msgid "Adblock"
 msgstr ""
 msgstr ""
 
 
-msgid "Available blocklist sources ("
+msgid "Adblock Logfile"
+msgstr ""
+
+msgid "Adblock Status"
+msgstr ""
+
+msgid "Adblock Version"
+msgstr ""
+
+msgid "Additional trigger delay in seconds before adblock processing begins."
+msgstr ""
+
+msgid "Advanced"
 msgstr ""
 msgstr ""
 
 
-msgid "Backup directory"
+msgid "Available blocklist sources."
 msgstr ""
 msgstr ""
 
 
-msgid "Backup options"
+msgid "Backup Directory"
+msgstr ""
+
+msgid "Blocklist Sources"
+msgstr ""
+
+msgid ""
+"Caution: Please don't select big lists or many lists at once on low memory "
+"devices to prevent OOM exceptions!"
+msgstr ""
+
+msgid ""
+"Choose 'none' to disable automatic startups, 'timed' to use a classic "
+"timeout (default 30 sec.) or select another trigger interface."
 msgstr ""
 msgstr ""
 
 
-msgid "Blocklist sources"
+msgid "Collecting data..."
 msgstr ""
 msgstr ""
 
 
 msgid ""
 msgid ""
 "Configuration of the adblock package to block ad/abuse domains by using DNS."
 "Configuration of the adblock package to block ad/abuse domains by using DNS."
 msgstr ""
 msgstr ""
 
 
+msgid ""
+"Create compressed blocklist backups, they will be used in case of download "
+"errors or during startup in manual mode."
+msgstr ""
+
+msgid "DNS Backend (DNS Directory)"
+msgstr ""
+
+msgid "DNS Directory"
+msgstr ""
+
 msgid "Description"
 msgid "Description"
 msgstr ""
 msgstr ""
 
 
-msgid "Enable adblock"
+msgid ""
+"Do not automatically update blocklists during startup, use blocklist backups "
+"instead."
 msgstr ""
 msgstr ""
 
 
-msgid "Enable blocklist backup"
+msgid "Download Utility (SSL Library)"
 msgstr ""
 msgstr ""
 
 
-msgid "Enable verbose debug logging"
+msgid "Edit Blacklist"
+msgstr ""
+
+msgid "Edit Configuration"
+msgstr ""
+
+msgid "Edit Whitelist"
+msgstr ""
+
+msgid "Enable Adblock"
+msgstr ""
+
+msgid "Enable Blocklist Backup"
+msgstr ""
+
+msgid ""
+"Enable memory intense overall sort / duplicate removal on low memory devices "
+"(&lt; 64 MB RAM)"
+msgstr ""
+
+msgid "Enable verbose debug logging in case of any processing error."
 msgstr ""
 msgstr ""
 
 
 msgid "Enabled"
 msgid "Enabled"
 msgstr ""
 msgstr ""
 
 
-msgid "Extra options"
+msgid "Extra Options"
 msgstr ""
 msgstr ""
 
 
 msgid ""
 msgid ""
-"File with whitelisted hosts/domains that are allowed despite being on a "
-"blocklist."
+"For SSL protected blocklist sources you need a suitable SSL library, e.g. "
+"'libustream-ssl' or the wget 'built-in'."
+msgstr ""
+
+msgid ""
+"For further information <a href=\"%s\" target=\"_blank\">see online "
+"documentation</a>"
+msgstr ""
+
+msgid "Force Local DNS"
+msgstr ""
+
+msgid "Force Overall Sort"
+msgstr ""
+
+msgid ""
+"In OPKG use the '--force-maintainer' option to overwrite the pre-existing "
+"config file or download a fresh default config from <a href=\"%s\" target="
+"\"_blank\">here</a>"
+msgstr ""
+
+msgid "Input file not found, please check your configuration."
+msgstr ""
+
+msgid "Invalid domain specified!"
+msgstr ""
+
+msgid "Last Run"
+msgstr ""
+
+msgid ""
+"List URLs and Shallalist category selections are configurable in the "
+"'Advanced' section.<br />"
+msgstr ""
+
+msgid ""
+"List of available network interfaces. By default the startup will be "
+"triggered by the 'wan' interface.<br />"
+msgstr ""
+
+msgid ""
+"List of supported DNS backends with their default list export directory.<br /"
+">"
+msgstr ""
+
+msgid "Loading"
+msgstr ""
+
+msgid "Manual / Backup mode"
 msgstr ""
 msgstr ""
 
 
-msgid "Global options"
+msgid "No"
 msgstr ""
 msgstr ""
 
 
 msgid ""
 msgid ""
 "Options for further tweaking in case the defaults are not suitable for you."
 "Options for further tweaking in case the defaults are not suitable for you."
 msgstr ""
 msgstr ""
 
 
-msgid "Restrict reload trigger to certain interface(s)"
+msgid "Overall Blocked Domains"
+msgstr ""
+
+msgid "Overview"
+msgstr ""
+
+msgid ""
+"Please add only one domain per line. Comments introduced with '#' are "
+"allowed - ip addresses, wildcards and regex are not."
+msgstr ""
+
+msgid "Please edit this file directly in a terminal session."
+msgstr ""
+
+msgid "Please update your adblock config file to use this package."
+msgstr ""
+
+msgid "Query"
+msgstr ""
+
+msgid "Query domains"
+msgstr ""
+
+msgid "Redirect all DNS queries from 'lan' zone to the local resolver."
+msgstr ""
+
+msgid "Resume"
+msgstr ""
+
+msgid "Runtime Information"
+msgstr ""
+
+msgid "SSL req."
+msgstr ""
+
+msgid "Save"
+msgstr ""
+
+msgid "Startup Trigger"
+msgstr ""
+
+msgid "Suspend"
+msgstr ""
+
+msgid "Suspend / Resume Adblock"
 msgstr ""
 msgstr ""
 
 
 msgid ""
 msgid ""
-"Space separated list of wan interfaces that trigger reload action. To "
-"disable reload trigger set it to 'false'. Default: empty"
+"Target directory for adblock backups. Please use only non-volatile disks, no "
+"ram/tmpfs drives."
+msgstr ""
+
+msgid "Target directory for the generated blocklist 'adb_list.overall'."
+msgstr ""
+
+msgid "The file size is too large for online editing in LuCI (&gt; 512 KB)."
+msgstr ""
+
+msgid ""
+"This form allows you to modify the content of the adblock blacklist (%s)."
+"<br />"
+msgstr ""
+
+msgid ""
+"This form allows you to modify the content of the adblock whitelist (%s)."
+"<br />"
+msgstr ""
+
+msgid ""
+"This form allows you to modify the content of the main adblock configuration "
+"file (/etc/config/adblock)."
+msgstr ""
+
+msgid ""
+"This form allows you to query active block lists for certain domains, e.g. "
+"for whitelisting."
+msgstr ""
+
+msgid ""
+"This form shows the syslog output, pre-filtered for adblock related messages "
+"only."
+msgstr ""
+
+msgid ""
+"To overwrite the default path use the 'DNS Directory' option in the extra "
+"section below."
+msgstr ""
+
+msgid "Trigger Delay"
+msgstr ""
+
+msgid "Verbose Debug Logging"
+msgstr ""
+
+msgid "View Logfile"
+msgstr ""
+
+msgid "Waiting for command to complete..."
+msgstr ""
+
+msgid "Yes"
+msgstr ""
+
+msgid "disabled"
+msgstr ""
+
+msgid "enabled"
+msgstr ""
+
+msgid "error"
 msgstr ""
 msgstr ""
 
 
-msgid "Whitelist file"
+msgid "n/a"
 msgstr ""
 msgstr ""
 
 
-msgid "see list details"
+msgid "paused"
 msgstr ""
 msgstr ""

+ 297 - 31
package/luci/applications/luci-app-adblock/po/zh-cn/adblock.po

@@ -1,84 +1,350 @@
+# liushuyu <liushuyu_011@163.com>, 2017.
 msgid ""
 msgid ""
 msgstr ""
 msgstr ""
 "Project-Id-Version: \n"
 "Project-Id-Version: \n"
 "POT-Creation-Date: \n"
 "POT-Creation-Date: \n"
-"PO-Revision-Date: \n"
-"Last-Translator: kuoruan@gmail.com\n"
-"Language-Team: none\n"
+"PO-Revision-Date: 2017-04-15 21:35-0600\n"
+"Last-Translator: liushuyu <liushuyu011@gmail.com>\n"
+"Language-Team: Chinese <kde-i18n-doc@kde.org>\n"
 "Language: zh_CN\n"
 "Language: zh_CN\n"
 "MIME-Version: 1.0\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Poedit 1.8.5\n"
+"X-Generator: Poedit 2.0.1\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
 
 
-msgid ""
-"). Note that list URLs and Shallalist category selections are not "
-"configurable via Luci."
-msgstr ")。需要注意的是列表URL和列表类别选项无法通过Luci设置。"
+msgid "-------"
+msgstr ""
 
 
 msgid "Adblock"
 msgid "Adblock"
 msgstr "Adblock"
 msgstr "Adblock"
 
 
-msgid "Available blocklist sources ("
-msgstr "可用拦截列表来源("
+msgid "Adblock Logfile"
+msgstr "Adblock 日志文件"
 
 
-msgid "Backup directory"
-msgstr "备份目录"
+msgid "Adblock Status"
+msgstr ""
+
+msgid "Adblock Version"
+msgstr "Adblock 版本"
+
+msgid "Additional trigger delay in seconds before adblock processing begins."
+msgstr ""
+
+msgid "Advanced"
+msgstr "高级"
+
+msgid "Available blocklist sources."
+msgstr "可用的 blocklist 来源"
 
 
-msgid "Backup options"
-msgstr "备份选项"
+msgid "Backup Directory"
+msgstr "备份目录"
 
 
-msgid "Blocklist sources"
+msgid "Blocklist Sources"
 msgstr "拦截列表来源"
 msgstr "拦截列表来源"
 
 
+msgid ""
+"Caution: Please don't select big lists or many lists at once on low memory "
+"devices to prevent OOM exceptions!"
+msgstr ""
+
+msgid ""
+"Choose 'none' to disable automatic startups, 'timed' to use a classic "
+"timeout (default 30 sec.) or select another trigger interface."
+msgstr ""
+
+msgid "Collecting data..."
+msgstr "正在收集数据..."
+
 msgid ""
 msgid ""
 "Configuration of the adblock package to block ad/abuse domains by using DNS."
 "Configuration of the adblock package to block ad/abuse domains by using DNS."
 msgstr "Adblock 配置工具,通过 DNS 来拦截广告和阻止域名。"
 msgstr "Adblock 配置工具,通过 DNS 来拦截广告和阻止域名。"
 
 
+msgid ""
+"Create compressed blocklist backups, they will be used in case of download "
+"errors or during startup in manual mode."
+msgstr ""
+
+msgid "DNS Backend (DNS Directory)"
+msgstr ""
+
+msgid "DNS Directory"
+msgstr ""
+
 msgid "Description"
 msgid "Description"
 msgstr "描述"
 msgstr "描述"
 
 
-msgid "Enable adblock"
+msgid ""
+"Do not automatically update blocklists during startup, use blocklist backups "
+"instead."
+msgstr ""
+
+msgid "Download Utility (SSL Library)"
+msgstr ""
+
+msgid "Edit Blacklist"
+msgstr "编辑黑名单"
+
+msgid "Edit Configuration"
+msgstr "编辑设置"
+
+msgid "Edit Whitelist"
+msgstr "编辑白名单"
+
+msgid "Enable Adblock"
 msgstr "启用Adblock"
 msgstr "启用Adblock"
 
 
-msgid "Enable blocklist backup"
+msgid "Enable Blocklist Backup"
 msgstr "启用拦截规则备份"
 msgstr "启用拦截规则备份"
 
 
-msgid "Enable verbose debug logging"
+msgid ""
+"Enable memory intense overall sort / duplicate removal on low memory devices "
+"(&lt; 64 MB RAM)"
+msgstr ""
+
+msgid "Enable verbose debug logging in case of any processing error."
 msgstr ""
 msgstr ""
 
 
 msgid "Enabled"
 msgid "Enabled"
 msgstr "启用"
 msgstr "启用"
 
 
-msgid "Extra options"
+msgid "Extra Options"
 msgstr "额外选项"
 msgstr "额外选项"
 
 
 msgid ""
 msgid ""
-"File with whitelisted hosts/domains that are allowed despite being on a "
-"blocklist."
-msgstr "允许的主机/域名列表"
+"For SSL protected blocklist sources you need a suitable SSL library, e.g. "
+"'libustream-ssl' or the wget 'built-in'."
+msgstr ""
+
+msgid ""
+"For further information <a href=\"%s\" target=\"_blank\">see online "
+"documentation</a>"
+msgstr ""
+
+msgid "Force Local DNS"
+msgstr ""
+
+msgid "Force Overall Sort"
+msgstr ""
+
+msgid ""
+"In OPKG use the '--force-maintainer' option to overwrite the pre-existing "
+"config file or download a fresh default config from <a href=\"%s\" target="
+"\"_blank\">here</a>"
+msgstr ""
+
+msgid "Input file not found, please check your configuration."
+msgstr ""
+
+msgid "Invalid domain specified!"
+msgstr "无效域名!"
+
+msgid "Last Run"
+msgstr ""
+
+msgid ""
+"List URLs and Shallalist category selections are configurable in the "
+"'Advanced' section.<br />"
+msgstr ""
+
+msgid ""
+"List of available network interfaces. By default the startup will be "
+"triggered by the 'wan' interface.<br />"
+msgstr ""
+
+msgid ""
+"List of supported DNS backends with their default list export directory.<br /"
+">"
+msgstr ""
+
+msgid "Loading"
+msgstr "加载中"
+
+msgid "Manual / Backup mode"
+msgstr ""
 
 
-msgid "Global options"
-msgstr "全局选项"
+msgid "No"
+msgstr ""
 
 
 msgid ""
 msgid ""
 "Options for further tweaking in case the defaults are not suitable for you."
 "Options for further tweaking in case the defaults are not suitable for you."
 msgstr "在默认设置并不适合你时的额外选项。"
 msgstr "在默认设置并不适合你时的额外选项。"
 
 
-msgid "Restrict reload trigger to certain interface(s)"
+msgid "Overall Blocked Domains"
+msgstr ""
+
+msgid "Overview"
+msgstr "总览"
+
+msgid ""
+"Please add only one domain per line. Comments introduced with '#' are "
+"allowed - ip addresses, wildcards and regex are not."
+msgstr ""
+
+msgid "Please edit this file directly in a terminal session."
+msgstr ""
+
+msgid "Please update your adblock config file to use this package."
+msgstr ""
+
+msgid "Query"
+msgstr "查询"
+
+msgid "Query domains"
+msgstr ""
+
+msgid "Redirect all DNS queries from 'lan' zone to the local resolver."
+msgstr ""
+
+msgid "Resume"
+msgstr ""
+
+msgid "Runtime Information"
+msgstr "运行信息"
+
+msgid "SSL req."
+msgstr ""
+
+msgid "Save"
+msgstr ""
+
+msgid "Startup Trigger"
+msgstr ""
+
+msgid "Suspend"
+msgstr ""
+
+msgid "Suspend / Resume Adblock"
+msgstr "暂停/恢复 Adblock"
+
+msgid ""
+"Target directory for adblock backups. Please use only non-volatile disks, no "
+"ram/tmpfs drives."
+msgstr ""
+
+msgid "Target directory for the generated blocklist 'adb_list.overall'."
+msgstr ""
+
+msgid "The file size is too large for online editing in LuCI (&gt; 512 KB)."
+msgstr ""
+
+msgid ""
+"This form allows you to modify the content of the adblock blacklist (%s)."
+"<br />"
+msgstr ""
+
+msgid ""
+"This form allows you to modify the content of the adblock whitelist (%s)."
+"<br />"
+msgstr ""
+
+msgid ""
+"This form allows you to modify the content of the main adblock configuration "
+"file (/etc/config/adblock)."
+msgstr ""
+
+msgid ""
+"This form allows you to query active block lists for certain domains, e.g. "
+"for whitelisting."
+msgstr ""
+
+msgid ""
+"This form shows the syslog output, pre-filtered for adblock related messages "
+"only."
 msgstr ""
 msgstr ""
 
 
 msgid ""
 msgid ""
-"Space separated list of wan interfaces that trigger reload action. To "
-"disable reload trigger set it to 'false'. Default: empty"
+"To overwrite the default path use the 'DNS Directory' option in the extra "
+"section below."
+msgstr ""
+
+msgid "Trigger Delay"
+msgstr "触发延迟"
+
+msgid "Verbose Debug Logging"
+msgstr ""
+
+msgid "View Logfile"
+msgstr "查看日志文件"
+
+msgid "Waiting for command to complete..."
+msgstr "正在执行命令..."
+
+msgid "Yes"
+msgstr "是"
+
+msgid "disabled"
+msgstr ""
+
+msgid "enabled"
+msgstr ""
+
+msgid "error"
+msgstr ""
+
+msgid "n/a"
+msgstr ""
+
+msgid "paused"
 msgstr ""
 msgstr ""
 
 
-msgid "Whitelist file"
-msgstr "白名单文件"
+#~ msgid "DNS backend"
+#~ msgstr "DNS 后端"
+
+#~ msgid "Enable verbose debug logging"
+#~ msgstr "启用详细调试输出"
+
+#~ msgid "Resume adblock"
+#~ msgstr "恢复 Adblock"
+
+#~ msgid "Status"
+#~ msgstr "状态"
+
+#~ msgid "Suspend adblock"
+#~ msgstr "暂停 Adblock"
+
+#~ msgid "active"
+#~ msgstr "已启用"
+
+#~ msgid "no domains blocked"
+#~ msgstr "没有被拦截的域名"
+
+#~ msgid "suspended"
+#~ msgstr "已暂停"
+
+#~ msgid "."
+#~ msgstr "."
+
+#~ msgid "For further information"
+#~ msgstr "更多信息"
+
+#~ msgid "see online documentation"
+#~ msgstr "查看在线文档"
+
+#~ msgid "Backup options"
+#~ msgstr "备份选项"
+
+#~ msgid ""
+#~ "). Note that list URLs and Shallalist category selections are not "
+#~ "configurable via Luci."
+#~ msgstr ")。需要注意的是列表URL和列表类别选项无法通过Luci设置。"
+
+#~ msgid "Available blocklist sources ("
+#~ msgstr "可用拦截列表来源("
+
+#~ msgid ""
+#~ "File with whitelisted hosts/domains that are allowed despite being on a "
+#~ "blocklist."
+#~ msgstr "允许的主机/域名列表"
+
+#~ msgid "Global options"
+#~ msgstr "全局选项"
+
+#~ msgid "Whitelist file"
+#~ msgstr "白名单文件"
 
 
-msgid "see list details"
-msgstr "查看列表详情"
+#~ msgid "see list details"
+#~ msgstr "查看列表详情"
 
 
 #~ msgid "Count"
 #~ msgid "Count"
 #~ msgstr "数量"
 #~ msgstr "数量"

+ 20 - 0
package/luci/applications/luci-app-advanced-reboot/Makefile

@@ -0,0 +1,20 @@
+# Copyright (c) 2017 Stan Grishin (stangri@melmac.net)
+# This is free software, licensed under the GNU General Public License v3.
+
+include $(TOPDIR)/rules.mk
+
+PKG_LICENSE:=GPL-3.0+
+PKG_MAINTAINER:=Stan Grishin <stangri@melmac.net>
+
+LUCI_TITLE:=Advanced Linksys Reboot Web UI
+LUCI_DESCRIPTION:=Provides Web UI (found under System/Advanced Reboot) to reboot supported Linksys routers to\
+	an altnerative partition. Also provides Web UI to shut down (power off) your device. 	Supported dual-partition\
+	routers are listed at https://github.com/stangri/openwrt-luci/blob/luci-app-advanced-reboot/applications/luci-app-advanced-reboot/README.md
+
+LUCI_DEPENDS:=+luci
+LUCI_PKGARCH:=all
+PKG_RELEASE:=23
+
+include ../../luci.mk
+
+# call BuildPackage - OpenWrt buildroot signature

+ 35 - 0
package/luci/applications/luci-app-advanced-reboot/README.md

@@ -0,0 +1,35 @@
+# Advanced Reboot Web UI (luci-app-advanced-reboot)
+
+## Description
+This package allows you to reboot to an alternative partition on supported (dual-partition) routers and to power off (power down) your OpenWrt/LEDE Project device.
+
+## Supported Devices
+Currently supported dual-partition devices include:
+- Linksys WRT1200AC
+- Linksys WRT1900AC
+- Linksys WRT1900ACv2
+- Linksys WRT1900ACS
+- Linksys WRT3200ACM
+- Linksys E4200v2
+- Linksys EA4500
+- Linksys EA8500
+
+If you're interested in having your device supported, please post in [LEDE Project Forum Support Thread](https://forum.lede-project.org/t/web-ui-to-reboot-to-another-partition-dual-partition-routers/3423).
+
+## Screenshot (luci-app-advanced-reboot)
+![screenshot](https://raw.githubusercontent.com/stangri/screenshots/master/luci-app-advanced-reboot/screenshot01.png "screenshot")
+
+## How to install
+Install ```luci-app-advanced-reboot``` from Web UI or connect to your router via ssh and run the following commands:
+```sh
+opkg update
+opkg install luci-app-advanced-reboot
+```
+
+## Notes/Known Issues
+- When you reboot to a different partition, your current settings (WiFi SSID/password, etc.) will not apply to a different partition. Different partitions might have completely different settings and even firmware.
+- If you reboot to a partition which doesn't allow you to switch boot partitions (like stock Linksys firmware), you might not be able to boot back to OpenWrt/LEDE Project unless you reflash it, loosing all the settings.
+- Some devices allow you to trigger reboot to alternative partition by interrupting boot 3 times in a row (by resetting/switching off the device or pulling power). As these methods might be different for different devices, do your own homework.
+
+## Thanks
+I'd like to thank everyone who helped create, test and troubleshoot this package. Without contributions from [@hnyman](https://github.com/hnyman) and [@jpstyves](https://github.com/jpstyves) it wouldn't have been possible.

+ 120 - 0
package/luci/applications/luci-app-advanced-reboot/luasrc/controller/advanced_reboot.lua

@@ -0,0 +1,120 @@
+-- Copyright 2017 Stan Grishin <stangri@melmac.net>
+-- Licensed to the public under the Apache License 2.0.
+
+module("luci.controller.advanced_reboot", package.seeall)
+
+-- device, board_name, part1, part2, offset, env_var_1, value_1_1, value_1_2, env_var_2, value_2_1, value_2_2
+devices = {
+  {"Linksys WRT1200AC", "armada-385-linksys-caiman", "mtd4", "mtd6", 32, "boot_part", 1, 2, "bootcmd", "run nandboot", "run altnandboot"},
+  {"Linksys WRT1900AC", "armada-xp-linksys-mamba", "mtd4", "mtd6", 32, "boot_part", 1, 2, "bootcmd", "run nandboot", "run altnandboot"},
+  {"Linksys WRT1900ACv2", "armada-385-linksys-cobra", "mtd4", "mtd6", 32, "boot_part", 1, 2, "bootcmd", "run nandboot", "run altnandboot"},
+  {"Linksys WRT1900ACS", "armada-385-linksys-shelby", "mtd4", "mtd6", 32, "boot_part", 1, 2, "bootcmd", "run nandboot", "run altnandboot"},
+  {"Linksys WRT3200ACM", "armada-385-linksys-rango", "mtd5", "mtd7", 32, "boot_part", 1, 2, "bootcmd", "run nandboot", "run altnandboot"},
+  {"Linksys E4200v2/EA4500", "linksys-viper", "mtd3", "mtd5", 32, "boot_part", 1, 2, "bootcmd", "run nandboot", "run altnandboot"},
+  {"Linksys EA8500", "ea8500", "mtd13", "mtd15", 32, "boot_part", 1, 2}
+}
+
+board_name = luci.util.trim(luci.sys.exec("cat /tmp/sysinfo/board_name"))
+for i=1, #devices do
+  if board_name and devices[i][2] == board_name then
+    device_name = devices[i][1]
+    partition_one_mtd = devices[i][3] or nil
+    partition_two_mtd = devices[i][4] or nil
+    partition_skip = devices[i][5] or nil
+    boot_envvar1 = devices[i][6] or nil
+    boot_envvar1_partition_one = tonumber(devices[i][7]) or nil
+    boot_envvar1_partition_two = tonumber(devices[i][8]) or nil
+    boot_envvar2 = devices[i][9] or nil
+    boot_envvar2_partition_one = devices[i][10] or nil
+    boot_envvar2_partition_two = devices[i][11] or nil
+    if partition_one_mtd and partition_skip then
+      partition_one_label = luci.util.trim(luci.sys.exec("dd if=/dev/" .. partition_one_mtd .. " bs=1 skip=" .. partition_skip .. " count=25" .. "  2>/dev/null"))
+      n, partition_one_version = string.match(partition_one_label, '(Linux)-([%d|.]+)')
+    end
+    if partition_two_mtd and partition_skip then
+      partition_two_label = luci.util.trim(luci.sys.exec("dd if=/dev/" .. partition_two_mtd .. " bs=1 skip=" .. partition_skip .. " count=25" .. "  2>/dev/null"))
+      n, partition_two_version = string.match(partition_two_label, '(Linux)-([%d|.]+)')
+    end
+    if string.find(partition_one_label, "LEDE") then partition_one_os = "LEDE" end
+    if string.find(partition_one_label, "OpenWrt") then partition_one_os = "OpenWrt" end
+    if string.find(partition_one_label, "Linksys") then partition_one_os = "Linksys" end
+    if string.find(partition_two_label, "LEDE") then partition_two_os = "LEDE" end
+    if string.find(partition_two_label, "OpenWrt") then partition_two_os = "OpenWrt" end
+    if string.find(partition_two_label, "Linksys") then partition_two_os = "Linksys" end
+    if not partition_one_os then partition_one_os = "Unknown" end
+    if not partition_two_os then partition_two_os = "Unknown" end
+    if partition_one_os and partition_one_version then partition_one_os = partition_one_os .. " (Linux " .. partition_one_version .. ")" end
+    if partition_two_os and partition_two_version then partition_two_os = partition_two_os .. " (Linux " .. partition_two_version .. ")" end
+    if nixio.fs.access("/usr/sbin/fw_printenv") and nixio.fs.access("/usr/sbin/fw_setenv") then
+      current_partition = tonumber(luci.util.trim(luci.sys.exec("/usr/sbin/fw_printenv -n " .. boot_envvar1)))
+      other_partition = current_partition == boot_envvar1_partition_one and boot_envvar1_partition_two or boot_envvar1_partition_one
+    end
+  end
+end
+
+function index()
+  entry({"admin", "system", "advanced_reboot"}, template("advanced_reboot/advanced_reboot"), _("Advanced Reboot"), 90)
+  entry({"admin", "system", "advanced_reboot", "reboot"}, post("action_reboot"))
+--  if device_name then entry({"admin", "system", "advanced_reboot", "altreboot"}, post("action_altreboot")) end
+  entry({"admin", "system", "advanced_reboot", "alternative_reboot"}, post("action_altreboot"))
+  entry({"admin", "system", "advanced_reboot", "power_off"}, post("action_poweroff"))
+end
+
+function action_reboot()
+  luci.template.render("admin_system/applyreboot", {
+        title = luci.i18n.translate("Rebooting..."),
+        msg   = luci.i18n.translate("The system is rebooting now.<br /> DO NOT POWER OFF THE DEVICE!<br /> Wait a few minutes before you try to reconnect. It might be necessary to renew the address of your computer to reach the device again, depending on your settings."),
+        addr  = luci.ip.new(uci.cursor():get("network", "lan", "ipaddr")) or "192.168.1.1"
+      })
+  luci.sys.reboot()
+end
+
+function action_altreboot()
+  if luci.http.formvalue("cancel") then
+    luci.http.redirect(luci.dispatcher.build_url('admin/system/advanced_reboot'))
+    return
+  end
+  local step = tonumber(luci.http.formvalue("step") or 1)
+  if step == 1 then
+    if device_name and nixio.fs.access("/usr/sbin/fw_printenv") and nixio.fs.access("/usr/sbin/fw_setenv") then
+      luci.template.render("advanced_reboot/alternative_reboot",{})
+    else
+      luci.template.render("advanced_reboot/advanced_reboot",{})
+    end
+  elseif step == 2 then
+    luci.template.render("admin_system/applyreboot", {
+          title = luci.i18n.translate("Rebooting..."),
+          msg   = luci.i18n.translate("The system is rebooting to an alternative partition now.<br /> DO NOT POWER OFF THE DEVICE!<br /> Wait a few minutes before you try to reconnect. It might be necessary to renew the address of your computer to reach the device again, depending on your settings."),
+          addr  = luci.ip.new(uci.cursor():get("network", "lan", "ipaddr")) or "192.168.1.1"
+        })
+    if boot_envvar1 then env1 = tonumber(luci.util.trim(luci.sys.exec("/usr/sbin/fw_printenv -n " .. boot_envvar1))) end
+    if boot_envvar2 then env2 = luci.util.trim(luci.sys.exec("/usr/sbin/fw_printenv -n " .. boot_envvar2)) end
+    if env1 and env1 == boot_envvar1_partition_one then luci.sys.call("/usr/sbin/fw_setenv " .. boot_envvar1 .. " " .. boot_envvar1_partition_two) end
+    if env1 and env1 == boot_envvar1_partition_two then luci.sys.call("/usr/sbin/fw_setenv " .. boot_envvar1 .. " " .. boot_envvar1_partition_one) end
+    if env2 and env2 == boot_envvar2_partition_one then luci.sys.call("/usr/sbin/fw_setenv " .. boot_envvar2 .. " '" .. boot_envvar2_partition_two .. "'") end
+    if env2 and env2 == boot_envvar2_partition_two then luci.sys.call("/usr/sbin/fw_setenv " .. boot_envvar2 .. " '" .. boot_envvar2_partition_one .. "'") end
+    luci.sys.reboot()
+  end
+end
+
+function action_poweroff()
+  if luci.http.formvalue("cancel") then
+    luci.http.redirect(luci.dispatcher.build_url('admin/system/advanced_reboot'))
+    return
+  end
+  local step = tonumber(luci.http.formvalue("step") or 1)
+  if step == 1 then
+    if nixio.fs.access("/sbin/poweroff") then
+      luci.template.render("advanced_reboot/power_off",{})
+    else
+      luci.template.render("advanced_reboot/advanced_reboot",{})
+    end
+  elseif step == 2 then
+    luci.template.render("admin_system/applyreboot", {
+          title = luci.i18n.translate("Shutting down..."),
+          msg   = luci.i18n.translate("The system is shutting down now.<br /> DO NOT POWER OFF THE DEVICE!<br /> It might be necessary to renew the address of your computer to reach the device again, depending on your settings."),
+          addr  = luci.ip.new(uci.cursor():get("network", "lan", "ipaddr")) or "192.168.1.1"
+        })
+    luci.sys.call("/sbin/poweroff")
+  end
+end

+ 92 - 0
package/luci/applications/luci-app-advanced-reboot/luasrc/view/advanced_reboot/advanced_reboot.htm

@@ -0,0 +1,92 @@
+<%#
+ Copyright 2008 Steven Barth <steven@midlink.org>
+ Copyright 2008-2015 Jo-Philipp Wich <jow@openwrt.org>
+ Copyright 2017 Stan Grishin <stangri@melmac.net>
+ Licensed to the public under the Apache License 2.0.
+-%>
+
+<%+header%>
+
+<h2 name="content"><%:Advanced Reboot%></h2>
+<br />
+
+<%- local c = require("luci.model.uci").cursor():changes(); if c and next(c) then -%>
+	<p class="alert-message warning"><%:Warning: There are unsaved changes that will get lost on reboot!%></p>
+<%- end -%>
+
+<%- if device_name then -%>
+<fieldset class="cbi-section">
+  <legend><%=device_name%><%: Partitions%></legend>
+  <table class="cbi-section-table" id="partitions">
+    <tr class="cbi-section-table-titles">
+      <th class="cbi-section-table-cell"><%:Partition%></th>
+      <th class="cbi-section-table-cell"><%:Status%></th>
+      <th class="cbi-section-table-cell"><%:Firmware/OS (Kernel)%></th>
+      <th class="cbi-section-table-cell"><%:Action%></th>
+    </tr>
+    <tr class="cbi-section-table-row">
+      <td>
+        <%=boot_envvar1_partition_one%>
+      </td>
+      <td>
+        <%- if boot_envvar1_partition_one == current_partition then -%><%:Current%><%- else -%><%:Alternative%><%- end -%>
+      </td>
+      <td>
+        <%=partition_one_os%>
+      </td>
+      <td>
+        <%- if boot_envvar1_partition_one == current_partition then -%>
+        <form method="post" action="<%=url('admin/system/advanced_reboot/reboot')%>">
+          <input type="hidden" name="token" value="<%=token%>" />
+          <input id="reboot-button" type="submit" class="cbi-button cbi-button-apply" value="<%:Reboot to current partition%>" />
+        </form>
+      <%- else -%>
+      <form method="post" action="<%=url('admin/system/advanced_reboot/alternative_reboot')%>">
+        <input type="hidden" name="token" value="<%=token%>" />
+        <input id="altreboot-button" type="submit" class="cbi-button cbi-button-apply" value="<%:Reboot to alternative partition...%>" />
+      </form>
+        <%- end -%>
+      </td>
+    </tr>
+    <tr class="cbi-section-table-row">
+      <td>
+        <%=boot_envvar1_partition_two%>
+      </td>
+      <td>
+        <%- if boot_envvar1_partition_two == current_partition then -%><%:Current%><%- else -%><%:Alternative%><%- end -%>
+      </td>
+      <td>
+        <%=partition_two_os%>
+      </td>
+      <td>
+        <%- if boot_envvar1_partition_two == current_partition then -%>
+          <form method="post" action="<%=url('admin/system/advanced_reboot/reboot')%>">
+          	<input type="hidden" name="token" value="<%=token%>" />
+            <input id="reboot-button" type="submit" class="cbi-button cbi-button-apply" value="<%:Reboot to current partition%>" />
+          </form>
+        <%- else -%>
+        <form method="post" action="<%=url('admin/system/advanced_reboot/alternative_reboot')%>">
+          <input type="hidden" name="token" value="<%=token%>" />
+          <input id="altreboot-button" type="submit" class="cbi-button cbi-button-apply" value="<%:Reboot to alternative partition...%>" />
+        </form>
+        <%- end -%>
+      </td>
+    </tr>
+  </table>
+</fieldset>
+<%- else -%>
+  <p class="alert-message warning"><%:Warning: This system does not have two partitions!%></p>
+<%- end -%>
+
+<hr />
+
+<%- if nixio.fs.access("/sbin/poweroff") then -%>
+<form method="post" action="<%=url('admin/system/advanced_reboot/power_off')%>">
+	<input type="hidden" name="token" value="<%=token%>" />
+  <input id="poweroff-button" type="submit" class="cbi-button cbi-button-apply" value="<%:Perform power off...%>" />
+</form>
+<%- else -%>
+  <p class="alert-message warning"><%:Warning: This system does not support powering off!%></p>
+<%- end -%>
+
+<%+footer%>

+ 29 - 0
package/luci/applications/luci-app-advanced-reboot/luasrc/view/advanced_reboot/alternative_reboot.htm

@@ -0,0 +1,29 @@
+<%#
+ Copyright 2008 Steven Barth <steven@midlink.org>
+ Copyright 2008-2009 Jo-Philipp Wich <jow@openwrt.org>
+ Copyright 2017 Stan Grishin <stangri@melmac.net>
+ Licensed to the public under the Apache License 2.0.
+-%>
+
+<%+header%>
+
+<h2 name="content"><%:Reboot Device to an Alternative Partition%> - <%:Confirm%></h2>
+<p>
+	<%_ WARNING: An alternative partition might have its own settings and completely different firmware.<br /><br />
+    As your network configuration and WiFi SSID/password on alternative partition might be different,
+      you might have to adjust your computer settings to be able to access your device once it reboots.<br /><br />
+    Please also be aware that alternative partition firmware might not provide an easy way to switch active partition
+      and boot back to the currently active partition.<br /><br />
+		Click "Proceed" below to reboot device to an alternative partition. %>
+</p>
+
+<div class="cbi-page-actions right">
+	<form class="inline" action="<%=REQUEST_URI%>" method="post">
+		<input type="hidden" name="token" value="<%=token%>" />
+		<input type="hidden" name="step" value="2" />
+		<input class="cbi-button cbi-button-reset" name="cancel" type="submit" value="<%:Cancel%>" />
+		<input class="cbi-button cbi-button-apply" type="submit" value="<%:Proceed%>" />
+	</form>
+</div>
+
+<%+footer%>

+ 25 - 0
package/luci/applications/luci-app-advanced-reboot/luasrc/view/advanced_reboot/power_off.htm

@@ -0,0 +1,25 @@
+<%#
+ Copyright 2008 Steven Barth <steven@midlink.org>
+ Copyright 2008-2009 Jo-Philipp Wich <jow@openwrt.org>
+ Copyright 2017 Stan Grishin <stangri@melmac.net>
+ Licensed to the public under the Apache License 2.0.
+-%>
+
+<%+header%>
+
+<h2 name="content"><%:Power Off Device%> - <%:Confirm%></h2>
+<p>
+	<%_ WARNING: Power off might result in a reboot on a device which doesn't support power off.<br /><br />
+		Click "Proceed" below to power off your device. %>
+</p>
+
+<div class="cbi-page-actions right">
+	<form class="inline" action="<%=REQUEST_URI%>" method="post">
+		<input type="hidden" name="token" value="<%=token%>" />
+		<input type="hidden" name="step" value="2" />
+		<input class="cbi-button cbi-button-reset" name="cancel" type="submit" value="<%:Cancel%>" />
+		<input class="cbi-button cbi-button-apply" type="submit" value="<%:Proceed%>" />
+	</form>
+</div>
+
+<%+footer%>

+ 108 - 0
package/luci/applications/luci-app-advanced-reboot/po/sv/luci-app-advanced-reboot.po

@@ -0,0 +1,108 @@
+msgid ""
+msgstr "Content-Type: text/plain; charset=UTF-8"
+
+msgid "Action"
+msgstr "Åtgärd"
+
+msgid "Advanced Reboot"
+msgstr "Avancerad omstart"
+
+msgid "Alternative"
+msgstr "Alternativ"
+
+msgid "Cancel"
+msgstr "Avbryt"
+
+msgid "Confirm"
+msgstr "Bekräfta"
+
+msgid "Current"
+msgstr "Nuvarande"
+
+msgid "Firmware/OS (Kernel)"
+msgstr "Inre mjukvara/OS (Kärna)"
+
+msgid "Partition"
+msgstr "Partition"
+
+msgid "Partitions"
+msgstr "Partitioner"
+
+msgid "Perform power off..."
+msgstr "Utför avstängning..."
+
+msgid "Power Off Device"
+msgstr "Stäng av enhet"
+
+msgid "Proceed"
+msgstr "Fortsätt"
+
+msgid "Reboot Device to an Alternative Partition"
+msgstr "Starta om enheten till en alternativ partition"
+
+msgid "Reboot to alternative partition..."
+msgstr "Starta om till alternativ partition..."
+
+msgid "Reboot to current partition"
+msgstr "Starta om till nuvarande partition"
+
+msgid "Rebooting..."
+msgstr "Startar om..."
+
+msgid "Shutting down..."
+msgstr "Stänger av..."
+
+msgid "Status"
+msgstr "Status"
+
+msgid ""
+"The system is rebooting now.<br /> DO NOT POWER OFF THE DEVICE!<br /> Wait a "
+"few minutes before you try to reconnect. It might be necessary to renew the "
+"address of your computer to reach the device again, depending on your "
+"settings."
+msgstr ""
+
+msgid ""
+"The system is rebooting to an alternative partition now.<br /> DO NOT POWER "
+"OFF THE DEVICE!<br /> Wait a few minutes before you try to reconnect. It "
+"might be necessary to renew the address of your computer to reach the device "
+"again, depending on your settings."
+msgstr ""
+
+msgid ""
+"The system is shutting down now.<br /> DO NOT POWER OFF THE DEVICE!<br /> It "
+"might be necessary to renew the address of your computer to reach the device "
+"again, depending on your settings."
+msgstr ""
+"Systemet stänger ner nu.<br /> STÄNG INTE AV ENHETEN!<br /> Beroende 
+"på dina inställningar så kan det vara nödvändigt att förnya din dators adress "
+"för att nå enheten igen."
+
+msgid ""
+"WARNING: An alternative partition might have its own settings and completely "
+"different firmware.<br /><br /> As your network configuration and WiFi SSID/"
+"password on alternative partition might be different, you might have to "
+"adjust your computer settings to be able to access your device once it "
+"reboots.<br /><br /> Please also be aware that alternative partition "
+"firmware might not provide an easy way to switch active partition and boot "
+"back to the currently active partition.<br /><br /> Click \"Proceed\" below "
+"to reboot device to an alternative partition."
+msgstr ""
+
+msgid ""
+"WARNING: Power off might result in a reboot on a device which doesn't "
+"support power off.<br /><br /> Click \"Proceed\" below to power off your "
+"device."
+msgstr ""
+"VARNING: Att stänga av kan resultera i en omstart i en enhet som inte "
+"har stöd för avstängning.<br /><br /> Klicka på \"Fortsätt\" nedanför för att stänga av din "
+"enhet."
+
+msgid "Warning: There are unsaved changes that will get lost on reboot!"
+msgstr "Varning: Det finns osparade ändringar som kommer att förloras vid omstart!"
+
+msgid "Warning: This system does not have two partitions!"
+msgstr "Varning: Det här systemet har inte två partitioner!"
+
+msgid "Warning: This system does not support powering off!"
+msgstr "Varning: Det här systemet har inte stöd för avstängning!"

+ 102 - 0
package/luci/applications/luci-app-advanced-reboot/po/templates/luci-app-advanced-reboot.pot

@@ -0,0 +1,102 @@
+msgid ""
+msgstr "Content-Type: text/plain; charset=UTF-8"
+
+msgid "Action"
+msgstr ""
+
+msgid "Advanced Reboot"
+msgstr ""
+
+msgid "Alternative"
+msgstr ""
+
+msgid "Cancel"
+msgstr ""
+
+msgid "Confirm"
+msgstr ""
+
+msgid "Current"
+msgstr ""
+
+msgid "Firmware/OS (Kernel)"
+msgstr ""
+
+msgid "Partition"
+msgstr ""
+
+msgid "Partitions"
+msgstr ""
+
+msgid "Perform power off..."
+msgstr ""
+
+msgid "Power Off Device"
+msgstr ""
+
+msgid "Proceed"
+msgstr ""
+
+msgid "Reboot Device to an Alternative Partition"
+msgstr ""
+
+msgid "Reboot to alternative partition..."
+msgstr ""
+
+msgid "Reboot to current partition"
+msgstr ""
+
+msgid "Rebooting..."
+msgstr ""
+
+msgid "Shutting down..."
+msgstr ""
+
+msgid "Status"
+msgstr ""
+
+msgid ""
+"The system is rebooting now.<br /> DO NOT POWER OFF THE DEVICE!<br /> Wait a "
+"few minutes before you try to reconnect. It might be necessary to renew the "
+"address of your computer to reach the device again, depending on your "
+"settings."
+msgstr ""
+
+msgid ""
+"The system is rebooting to an alternative partition now.<br /> DO NOT POWER "
+"OFF THE DEVICE!<br /> Wait a few minutes before you try to reconnect. It "
+"might be necessary to renew the address of your computer to reach the device "
+"again, depending on your settings."
+msgstr ""
+
+msgid ""
+"The system is shutting down now.<br /> DO NOT POWER OFF THE DEVICE!<br /> It "
+"might be necessary to renew the address of your computer to reach the device "
+"again, depending on your settings."
+msgstr ""
+
+msgid ""
+"WARNING: An alternative partition might have its own settings and completely "
+"different firmware.<br /><br /> As your network configuration and WiFi SSID/"
+"password on alternative partition might be different, you might have to "
+"adjust your computer settings to be able to access your device once it "
+"reboots.<br /><br /> Please also be aware that alternative partition "
+"firmware might not provide an easy way to switch active partition and boot "
+"back to the currently active partition.<br /><br /> Click \"Proceed\" below "
+"to reboot device to an alternative partition."
+msgstr ""
+
+msgid ""
+"WARNING: Power off might result in a reboot on a device which doesn't "
+"support power off.<br /><br /> Click \"Proceed\" below to power off your "
+"device."
+msgstr ""
+
+msgid "Warning: There are unsaved changes that will get lost on reboot!"
+msgstr ""
+
+msgid "Warning: This system does not have two partitions!"
+msgstr ""
+
+msgid "Warning: This system does not support powering off!"
+msgstr ""

+ 5 - 1
package/luci/applications/luci-app-ahcp/po/sv/ahcp.po

@@ -2,7 +2,7 @@ msgid ""
 msgstr ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Project-Id-Version: PACKAGE VERSION\n"
 "PO-Revision-Date: 2014-04-27 22:52+0200\n"
 "PO-Revision-Date: 2014-04-27 22:52+0200\n"
-"Last-Translator: Umeaboy <kristoffer.grundstrom1983@gmail.com>\n"
+"Last-Translator: Umeaboy <hamnisdude@gmail.com>\n"
 "Language-Team: none\n"
 "Language-Team: none\n"
 "Language: sv\n"
 "Language: sv\n"
 "MIME-Version: 1.0\n"
 "MIME-Version: 1.0\n"
@@ -20,6 +20,10 @@ msgid ""
 "networks where it is difficult or impossible to configure a server within "
 "networks where it is difficult or impossible to configure a server within "
 "every link-layer broadcast domain, for example mobile ad-hoc networks."
 "every link-layer broadcast domain, for example mobile ad-hoc networks."
 msgstr ""
 msgstr ""
+"AHCP är ett autokonfigurationsprotokoll för IPv6 och dual-stack IPv6/IPv4- "
+"nätverk designade för att användas vid upptäckt av router eller DHCP på "
+"nätverk där det är svårt eller omöjligt att ställa in en server inom "
+"varje sändningslänkslags-domän, till exempel mobila ad-hocnätverk."
 
 
 msgid "Active AHCP Leases"
 msgid "Active AHCP Leases"
 msgstr "Aktiva AHCP-hyror"
 msgstr "Aktiva AHCP-hyror"

+ 208 - 0
package/luci/applications/luci-app-aria2/po/sv/aria2.po

@@ -0,0 +1,208 @@
+msgid ""
+msgstr "Content-Type: text/plain; charset=UTF-8\n"
+
+msgid "\"Falloc\" is not available in all cases."
+msgstr ""
+
+msgid "<abbr title=\"Distributed Hash Table\">DHT</abbr> enabled"
+msgstr ""
+
+msgid "<abbr title=\"Local Peer Discovery\">LPD</abbr> enabled"
+msgstr ""
+
+msgid "Additional Bt tracker enabled"
+msgstr ""
+
+msgid "Aria2"
+msgstr "Aria2"
+
+msgid "Aria2 Settings"
+msgstr "Inställningar för Aria2"
+
+msgid "Aria2 Status"
+msgstr "Status för Aria2"
+
+msgid ""
+"Aria2 is a multi-protocol &amp; multi-source download utility, here you can "
+"configure the settings."
+msgstr ""
+
+msgid "Autosave session interval"
+msgstr "Autospara sessionintervall"
+
+msgid "BitTorrent Settings"
+msgstr "Inställningar för BitTorrent"
+
+msgid "BitTorrent listen port"
+msgstr "Lyssningsport för BitTorrent"
+
+msgid "Collecting data..."
+msgstr "Samlar in data..."
+
+msgid "Config file directory"
+msgstr "Ställ in fil-mapp"
+
+msgid "Debug"
+msgstr "Avlusa"
+
+msgid "Default download directory"
+msgstr "Standard nerladdningsmapp"
+
+msgid "Disk cache"
+msgstr "Disk-cache"
+
+msgid "Enable log"
+msgstr "Aktivera logg"
+
+msgid "Enabled"
+msgstr "Aktiverad"
+
+msgid "Error"
+msgstr "Fel"
+
+msgid "Extra Settings"
+msgstr "Extra inställningar"
+
+msgid "Falloc"
+msgstr "Falloc"
+
+msgid "Files and Locations"
+msgstr "Filer och Platser"
+
+msgid "Follow torrent"
+msgstr "Följ torrenten"
+
+msgid "General Settings"
+msgstr "Generella inställningar"
+
+msgid "Generate Randomly"
+msgstr "Generera slumpmässigt"
+
+msgid "Info"
+msgstr "Info"
+
+msgid "List of additional Bt tracker"
+msgstr "Lista över extra Bt-tracker"
+
+msgid "List of extra settings"
+msgstr "Lista över extra inställningar"
+
+msgid "Log file is in the config file dir."
+msgstr "Logg-filen är i konfigurationsfilens mapp."
+
+msgid "Log level"
+msgstr "Loggnivå"
+
+msgid "Max concurrent downloads"
+msgstr "Maximalt sammanhängande nerladdningar"
+
+msgid "Max connection per server"
+msgstr "Max antalet anslutningar per server"
+
+msgid "Max number of peers per torrent"
+msgstr "Maximalt antalet jämlikar per torrent"
+
+msgid "Max number of split"
+msgstr "Högst antal split"
+
+msgid "Min split size"
+msgstr "Minsta split-storlek"
+
+msgid "No Authentication"
+msgstr "Ingen autentisering"
+
+msgid "Notice"
+msgstr "Avisering"
+
+msgid "Off"
+msgstr "Av"
+
+msgid "Open WebUI-Aria2"
+msgstr "Öppna WebUI-Aria2"
+
+msgid "Open YAAW"
+msgstr "Öppna YAAW"
+
+msgid "Overall download limit"
+msgstr ""
+
+msgid "Overall speed limit enabled"
+msgstr ""
+
+msgid "Overall upload limit"
+msgstr ""
+
+msgid "Per task download limit"
+msgstr ""
+
+msgid "Per task speed limit enabled"
+msgstr ""
+
+msgid "Per task upload limit"
+msgstr ""
+
+msgid "Prealloc"
+msgstr "Prealloc"
+
+msgid "Preallocation"
+msgstr "Förallokering"
+
+msgid "Prefix of peer ID"
+msgstr "Peer-ID prefix"
+
+msgid "RPC Token"
+msgstr ""
+
+msgid "RPC authentication method"
+msgstr ""
+
+msgid "RPC password"
+msgstr "RPC-lösenord"
+
+msgid "RPC port"
+msgstr "RPC-port"
+
+msgid "RPC username"
+msgstr "RPC-användarnamn"
+
+msgid "Run daemon as user"
+msgstr "Kör daemonen som användare"
+
+msgid "Sec"
+msgstr "Sek"
+
+msgid "Task Settings"
+msgstr "Inställningar för uppgifter"
+
+msgid "The Aria2 service is not running."
+msgstr "Aria2-tjänsten körs inte."
+
+msgid "The Aria2 service is running."
+msgstr "Aria2-tjänsten körs."
+
+msgid "Token"
+msgstr "Tecken"
+
+msgid "Trunc"
+msgstr ""
+
+msgid "Use WebSocket"
+msgstr "Använd WebSocket"
+
+msgid "User agent value"
+msgstr "Använd agent-värde"
+
+msgid "Username & Password"
+msgstr "Användarnamn & Lösenord"
+
+msgid "View Json-RPC URL"
+msgstr "Visa Json-RPC URL"
+
+msgid "Warn"
+msgstr "Varna"
+
+msgid "in bytes, You can append K or M."
+msgstr "i bytes, Du kan bifoga K eller M."
+
+msgid "in bytes/sec, You can append K or M."
+msgstr "i bytes/sek, Du kan bifoga K eller M."

+ 11 - 0
package/luci/applications/luci-app-attendedsysupgrade/Makefile

@@ -0,0 +1,11 @@
+# See /LICENSE for more information.
+# This is free software, licensed under the GNU General Public License v2.
+
+include $(TOPDIR)/rules.mk
+
+LUCI_TITLE:=LuCI support for attended sysupgrades
+LUCI_DEPENDS:=+luci-base +uhttpd-mod-ubus +rpcd-mod-attendedsysupgrade
+
+include ../../luci.mk
+
+# call BuildPackage - OpenWrt buildroot signature

+ 5 - 0
package/luci/applications/luci-app-attendedsysupgrade/luasrc/controller/attendedsysupgrade.lua

@@ -0,0 +1,5 @@
+module("luci.controller.attendedsysupgrade", package.seeall)
+
+function index()
+        entry({"admin", "system", "attended_sysupgrade"}, template("attendedsysupgrade"), _("Attended Sysupgrade"), 1)
+end

+ 376 - 0
package/luci/applications/luci-app-attendedsysupgrade/luasrc/view/attendedsysupgrade.htm

@@ -0,0 +1,376 @@
+<%
+-- all lua code provided by https://github.com/jow-/
+-- thank you very much!
+
+    function apply_acls(filename, session)
+        local json = require "luci.jsonc"
+        local util = require "luci.util"
+        local fs   = require "nixio.fs"
+
+        local grants = { }
+
+        local acl = json.parse(fs.readfile(filename))
+        if type(acl) ~= "table" then
+            return
+        end
+
+        local group, perms
+        for group, perms in pairs(acl) do
+            local perm, scopes
+            for perm, scopes in pairs(perms) do
+                if type(scopes) == "table" then
+                    local scope, objects
+                    for scope, objects in pairs(scopes) do
+                        if type(objects) == "table" then
+                            if not grants[scope] then
+                                grants[scope] = { }
+                            end
+
+                            if next(objects) == 1 then
+                                local _, object
+                                for _, object in ipairs(objects) do
+                                    if not grants[scope][object] then
+                                        grants[scope][object] = { }
+                                    end
+                                    table.insert(grants[scope][object], perm)
+                                end
+                            else
+                                local object, funcs
+                                for object, funcs in pairs(objects) do
+                                    if type(funcs) == "table" then
+                                        local _, func
+                                        for _, func in ipairs(funcs) do
+                                            if not grants[scope][object] then
+                                                grants[scope][object] = { }
+                                            end
+                                            table.insert(grants[scope][object], func)
+                                        end
+                                    end
+                                end
+                            end
+                        end
+                    end
+                end
+            end
+        end
+
+        local _, scope, object, func
+        for scope, _ in pairs(grants) do
+            local objects = { }
+            for object, _ in pairs(_) do
+                for _, func in ipairs(_) do
+                    table.insert(objects, { object, func })
+                end
+            end
+
+            util.ubus("session", "grant", {
+                ubus_rpc_session = session,
+                scope = scope, objects = objects
+            })
+        end
+    end
+
+    apply_acls("/usr/share/rpcd/acl.d/attendedsysupgrade.json", luci.dispatcher.context.authsession)
+    apply_acls("/usr/share/rpcd/acl.d/packagelist.json", luci.dispatcher.context.authsession)
+%>
+<%+header%>
+<h2 name="content"><%:Attended Sysupgrade%></h2>
+<div class="container">
+	<div style="display: none" id="update_info" class="alert-message info"></div>
+	<div style="display: none" id="update_error" class="alert-message danger"></div>
+</div>
+<input class="cbi-button" value="search for updates" onclick="update_request()" type="button" id="update_button">
+<div style="display: none" id="packages" class="alert-message success"></div>
+<div class="cbi-value" id="update_packages_container" style="display: block">
+	<label class="cbi-value-title" for="keep">search for package updates:</label>
+	<div class="cbi-value-field">
+		<input type="checkbox" name="update_packages" id="update_packages" />
+	</div>
+</div>
+<div class="cbi-value" id="keep_container" style="display: none">
+	<label class="cbi-value-title" for="keep">keep settings:</label>
+	<div class="cbi-value-field">
+		<input type="checkbox" name="keep" id="keep" checked="checked" />
+	</div>
+</div>
+
+<script type="text/javascript">
+
+latest_version = "";
+data = {};
+ubus_counter = 1
+origin = document.location.href.replace(location.pathname, "")
+ubus_url = origin + "/ubus/"
+
+// requests to the update server
+function server_request(request_dict, path, callback) {
+	url = data.update_server + "/" + path
+	request_dict.distro = data.release.distribution;
+	request_dict.target = data.release.target.split("\/")[0];
+	request_dict.subtarget = data.release.target.split("\/")[1];
+	var xmlhttp = new XMLHttpRequest();
+	xmlhttp.open("POST", url, true);
+	xmlhttp.setRequestHeader("Content-type", "application/json");
+	xmlhttp.send(JSON.stringify(request_dict));
+	xmlhttp.onerror = function(e) {
+		update_error("update server down")
+	}
+	xmlhttp.addEventListener('load', function(event) {
+		callback(xmlhttp)
+	});
+}
+
+// requests ubus via rpcd
+function ubus_request(command, argument, params, callback) {
+	request_data = {};
+	request_data.jsonrpc = "2.0";
+	request_data.id = ubus_counter;
+	request_data.method = "call";
+	request_data.params = [ data.ubus_rpc_session, command, argument, params ]
+	ubus_counter++
+	var xmlhttp = new XMLHttpRequest();
+	xmlhttp.open("POST", ubus_url, true);
+	xmlhttp.setRequestHeader("Content-type", "application/json");
+	xmlhttp.onerror = function(e) {
+		setTimeout(back_online, 5000)
+	}
+	xmlhttp.addEventListener('load', function(event) {
+		if(command === "uci") {
+			ubus_request_callback_uci(xmlhttp, callback)
+		} else {
+			ubus_request_callback(xmlhttp, callback)
+		}
+	});
+	xmlhttp.send(JSON.stringify(request_data));
+}
+
+// handle ubus_requests, set variables or perform functions
+function ubus_request_callback(response_object, callback) {
+	if(response_object.status === 200) {
+		console.log(callback)
+		if(typeof callback === "string") {
+			response_json = JSON.parse(response_object.responseText).result[1]
+			if (callback == "release") {
+				latest_version = response_json.release.version
+			}
+			data[callback] = response_json[callback]
+		} else {
+			callback(response_object)
+		}
+	} else {
+		console.log(respons_object.responseText)
+	}
+}
+
+function ubus_request_callback_uci(response_object, callback) {
+	if(response_object.status === 200) {
+		console.log(callback)
+		response_json = JSON.parse(response_object.responseText).result[1].value
+		data[callback] = response_json
+
+		document.getElementById("update_packages").checked = data.update_packages;
+	} else {
+		console.log(respons_object.responseText)
+	}
+}
+
+// initial setup, get system information
+function setup() {
+	data["ubus_rpc_session"] = "<%=luci.dispatcher.context.authsession%>"
+	ubus_request("packagelist", "list", {}, "packagelist");
+	ubus_request("system", "board", {}, "release");
+	ubus_request("system", "board", {}, "board_name");
+	ubus_request("system", "board", {}, "model");
+	ubus_request("uci", "get", { "config": "attendedsysupgrade", "section": "updateserver", "option": "url" }, "update_server")
+	ubus_request("uci", "get", { "config": "attendedsysupgrade", "section": "updateclient", "option": "update_packages" }, "update_packages")
+}
+
+// shows notification if update is available
+function update_info(info_output) {
+	document.getElementById("update_info").style.display = "block";
+	document.getElementById("update_info").innerHTML = info_output;
+}
+
+function update_error(error_output) {
+	document.getElementById("update_error").style.display = "block";
+	document.getElementById("update_error").innerHTML = error_output;
+	document.getElementById("update_info").style.display = "none";
+}
+
+// asks server for news updates, actually only based on relesae not packages
+function update_request() {
+	console.log("update_request")
+	request_dict = {}
+	request_dict.version = data.release.version;
+	request_dict.packages = data.packagelist;
+	if (document.getElementById("update_packages").checked == 1) {
+		request_dict.update_packages = 1
+	}
+	server_request(request_dict, "update-request", update_request_callback)
+}
+
+function update_request_callback(response_object) {
+	if (response_object.status === 500) {
+		// python crashed
+		update_error("internal server error, please try again later")
+		console.log("update server issue")
+	} else if (response_object.status === 502) {
+		// python part offline
+		update_error("internal server error, please try again later")
+		console.log("update server issue")
+	} else if (response_object.status === 503) {
+		// handle overload
+		update_error("server overloaded, retry in 5 minutes")
+		console.log("server overloaded")
+		setTimeout(update_request, 300000)
+	} else if (response_object.status === 201) {
+		update_info("imagebuilder not ready, please wait")
+		console.log("setting up imagebuilder")
+		setTimeout(update_request, 5000)
+	} else if (response_object.status === 204) {
+		// no updates
+		update_info("no updates available")
+	} else if (response_object.status === 400) {
+		// bad request
+		console.log(response_object.responseText)
+		response_object_content = JSON.parse(response_object.responseText)
+		update_error(response_object_content.error)
+	} else if (response_object.status === 200) {
+		// new release/updates
+		response_object_content = JSON.parse(response_object.responseText)
+		update_request_200(response_object_content)
+	}
+}
+
+function back_online() {
+	ubus_request("session", "login", {}, back_online_callback)
+}
+
+function back_online_callback(response_object) {
+	if (response_object.status != 200) {
+		setTimeout(back_online, 5000)
+	} else {
+		update_info("upgrade successfull!")
+		document.getElementById("update_button").value = "reload page";
+		document.getElementById("update_button").onclick = function() { location.reload(); }
+	}
+
+}
+
+function update_request_200(response_content) {
+	info_output = ""
+	if(response_content.version != undefined) {
+		info_output += "<h3>new update available</h3>"
+		info_output += data.release.version + " to " + response_content.version
+		latest_version = response_content.version;
+	}
+	if(response_content.updates != undefined) {
+		info_output += "<h3>package updates available</h3>"
+		for (update in response_content.updates) {
+			info_output += "<b>" + update + "</b>: " + response_content.updates[update][1] + " to " + response_content.updates[update][0] + "</br>"
+		}
+	}
+	data.packages = response_content.packages
+	update_info(info_output)
+	document.getElementById("update_button").value = "request image";
+	document.getElementById("update_packages_container").style.display = "none";
+	document.getElementById("update_button").onclick = image_request;
+}
+
+// request the image, need merge with update_request
+function image_request() {
+	console.log("image_request")
+	document.getElementById("update_packages_container").style.display = "none";
+	request_dict = {}
+	request_dict.version = latest_version;
+	request_dict.board = data.board_name
+	request_dict.packages = data.packages;
+	request_dict.model = data.model
+	server_request(request_dict, "image-request", image_request_handler)
+}
+
+function image_request_handler(response) {
+	if (response.status === 400) {
+		response_content = JSON.parse(response.responseText)
+		update_error(response_content.error)
+	} else if (response.status === 500) {
+		image_request_500()
+	} else if (response.status === 503) {
+		update_error("please wait. server overloaded")
+		// handle overload
+		setTimeout(image_request, 30000)
+	} else if (response.status === 201) {
+		response_content = JSON.parse(response.responseText)
+		if(response_content.queue != undefined) {
+			// in queue
+			update_info("please wait. you are in queue position " + response_content.queue)
+			console.log("queued")
+		} else {
+			update_info("imagebuilder not ready, please wait")
+			console.log("setting up imagebuilder")
+		}
+		setTimeout(image_request, 5000)
+	} else if (response.status === 206) {
+		// building
+		console.log("building")
+		update_info("building image")
+		setTimeout(image_request, 5000)
+	} else if (response.status === 200) {
+		// ready to download
+		response_content = JSON.parse(response.responseText)
+		update_info("image created")
+		document.getElementById("update_button").value = "sysupgrade"
+		document.getElementById("update_button").onclick = function() {download_image(response_content.url); }
+		document.getElementById("keep_container").style.display = "block";
+	}
+}
+
+
+// uploads received blob data to the server using cgi-io
+function upload_image(blob) {
+	var upload_request = new XMLHttpRequest();
+	var form_data  = new FormData();
+
+	form_data.append("sessionid", data.ubus_rpc_session)
+	form_data.append("filename", "/tmp/sysupgrade.bin")
+	form_data.append("filemode", 755) // insecure?
+	form_data.append("filedata", blob)
+
+	upload_request.addEventListener('load', function(event) {
+		// this checksum should be parsed
+		document.getElementById("update_info").innerHTML = "flashing... please wait" // show fancy indicator http://www.ajaxload.info/
+
+		ubus_request("attendedsysupgrade", "sysupgrade", { "keep_settings": document.getElementById("keep").checked }, 'done');
+  	});
+
+  	upload_request.addEventListener('error', function(event) {
+		document.getElementById("update_info").innerHTML = "uploading failed, please retry"
+  	});
+
+  	upload_request.open('POST', origin + '/cgi-bin/cgi-upload');
+  	upload_request.send(form_data);
+}
+
+// download image from server once the url was received by image_request
+function download_image(url) {
+	console.log("download_image")
+	document.getElementById("update_button").value = "flashing..."
+	document.getElementById("update_button").disabled = true;
+	var download_request = new XMLHttpRequest();
+	download_request.open("GET", url);
+	download_request.responseType = "arraybuffer";
+
+	download_request.onload = function () {
+		if (this.status === 200) {
+			var blob = new Blob([download_request.response], {type: "application/octet-stream"});
+			upload_image(blob)
+		}
+	};
+	document.getElementById("update_info").innerHTML = "downloading image"
+	download_request.send();
+}
+
+document.onload = setup()
+</script>
+
+<%+footer%>

+ 18 - 0
package/luci/applications/luci-app-bcp38/Makefile

@@ -0,0 +1,18 @@
+#
+# Copyright (C) 2010 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+LUCI_TITLE:=BCP38 LuCI interface
+LUCI_DEPENDS:=+luci-mod-admin-full +bcp38
+
+PKG_MAINTAINER:=Toke Høiland-Jørgensen <toke@toke.dk>
+PKG_LICENSE:=Apache-2.0
+
+include ../../luci.mk
+
+# call BuildPackage - OpenWrt buildroot signature

+ 7 - 0
package/luci/applications/luci-app-bcp38/luasrc/controller/bcp38.lua

@@ -0,0 +1,7 @@
+module("luci.controller.bcp38", package.seeall)
+
+function index()
+	entry({"admin", "network", "firewall", "bcp38"},
+		cbi("bcp38"),
+		_("BCP38"), 50).dependent = false
+end

+ 60 - 0
package/luci/applications/luci-app-bcp38/luasrc/model/cbi/bcp38.lua

@@ -0,0 +1,60 @@
+--[[
+LuCI - Lua Configuration Interface
+
+Copyright 2014 Toke Høiland-Jørgensen <toke@toke.dk>
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+	http://www.apache.org/licenses/LICENSE-2.0
+
+$Id$
+]]--
+
+local wa = require "luci.tools.webadmin"
+local net = require "luci.model.network".init()
+local ifaces = net:get_interfaces()
+
+m = Map("bcp38", translate("BCP38"),
+	translate("This function blocks packets with private address destinations " ..
+		"from going out onto the internet as per " ..
+		"<a href=\"http://tools.ietf.org/html/bcp38\">BCP 38</a>. " ..
+		"For IPv6, only source specific default routes are installed, so " ..
+		"no BCP38 firewall routes are needed."))
+
+s = m:section(TypedSection, "bcp38", translate("BCP38 config"))
+s.anonymous = true
+-- BASIC
+e = s:option(Flag, "enabled", translate("Enable"))
+e.rmempty = false
+
+a = s:option(Flag, "detect_upstream", translate("Auto-detect upstream IP"),
+				translate("Attempt to automatically detect if the upstream IP " ..
+					"will be blocked by the configuration, and add an exception if it will. " ..
+					"If this does not work correctly, you can add exceptions manually below."))
+a.rmempty = false
+
+n = s:option(ListValue, "interface", translate("Interface name"), translate("Interface to apply the blocking to " ..
+							"(should be the upstream WAN interface)."))
+for _, iface in ipairs(ifaces) do
+     if iface:is_up() then
+	n:value(iface:name())
+     end
+end
+n.rmempty = false
+
+ma = s:option(DynamicList, "match",
+	translate("Blocked IP ranges"))
+
+ma.datatype = "ip4addr"
+
+nm = s:option(DynamicList, "nomatch",
+	translate("Allowed IP ranges"), translate("Takes precedence over blocked ranges. "..
+						  "Use to whitelist your upstream network if you're behind a double NAT " ..
+						  "and the auto-detection doesn't work."))
+
+nm.datatype = "ip4addr"
+
+
+return m

+ 45 - 0
package/luci/applications/luci-app-bcp38/po/sv/bcp38.po

@@ -0,0 +1,45 @@
+msgid ""
+msgstr "Content-Type: text/plain; charset=UTF-8\n"
+
+msgid "Allowed IP ranges"
+msgstr ""
+
+msgid ""
+"Attempt to automatically detect if the upstream IP will be blocked by the "
+"configuration, and add an exception if it will. If this does not work "
+"correctly, you can add exceptions manually below."
+msgstr ""
+
+msgid "Auto-detect upstream IP"
+msgstr "Upptäck automatiskt IP från uppströms"
+
+msgid "BCP38"
+msgstr "BCP38"
+
+msgid "BCP38 config"
+msgstr ""
+
+msgid "Blocked IP ranges"
+msgstr ""
+
+msgid "Enable"
+msgstr "Aktivera"
+
+msgid "Interface name"
+msgstr "Namn på gränssnittet"
+
+msgid ""
+"Interface to apply the blocking to (should be the upstream WAN interface)."
+msgstr ""
+
+msgid ""
+"Takes precedence over blocked ranges. Use to whitelist your upstream network "
+"if you're behind a double NAT and the auto-detection doesn't work."
+msgstr ""
+
+msgid ""
+"This function blocks packets with private address destinations from going "
+"out onto the internet as per <a href=\"http://tools.ietf.org/html/"
+"bcp38\">BCP 38</a>. For IPv6, only source specific default routes are "
+"installed, so no BCP38 firewall routes are needed."
+msgstr ""

+ 45 - 0
package/luci/applications/luci-app-bcp38/po/templates/bcp38.pot

@@ -0,0 +1,45 @@
+msgid ""
+msgstr "Content-Type: text/plain; charset=UTF-8"
+
+msgid "Allowed IP ranges"
+msgstr ""
+
+msgid ""
+"Attempt to automatically detect if the upstream IP will be blocked by the "
+"configuration, and add an exception if it will. If this does not work "
+"correctly, you can add exceptions manually below."
+msgstr ""
+
+msgid "Auto-detect upstream IP"
+msgstr ""
+
+msgid "BCP38"
+msgstr ""
+
+msgid "BCP38 config"
+msgstr ""
+
+msgid "Blocked IP ranges"
+msgstr ""
+
+msgid "Enable"
+msgstr ""
+
+msgid "Interface name"
+msgstr ""
+
+msgid ""
+"Interface to apply the blocking to (should be the upstream WAN interface)."
+msgstr ""
+
+msgid ""
+"Takes precedence over blocked ranges. Use to whitelist your upstream network "
+"if you're behind a double NAT and the auto-detection doesn't work."
+msgstr ""
+
+msgid ""
+"This function blocks packets with private address destinations from going "
+"out onto the internet as per <a href=\"http://tools.ietf.org/html/"
+"bcp38\">BCP 38</a>. For IPv6, only source specific default routes are "
+"installed, so no BCP38 firewall routes are needed."
+msgstr ""

+ 52 - 0
package/luci/applications/luci-app-bcp38/po/zh-cn/bcp38.po

@@ -0,0 +1,52 @@
+msgid ""
+msgstr "Content-Type: text/plain; charset=UTF-8\n"
+
+msgid "Allowed IP ranges"
+msgstr "允许的 IP 范围"
+
+msgid ""
+"Attempt to automatically detect if the upstream IP will be blocked by the "
+"configuration, and add an exception if it will. If this does not work "
+"correctly, you can add exceptions manually below."
+msgstr ""
+"自动检测上游 IP 是否会被当前配置所阻止,当检测到会被阻止时将会添加例外。如果"
+"自动检测无法正常工作,你可以在下面手动添加例外。"
+
+msgid "Auto-detect upstream IP"
+msgstr "自动检测上游 IP"
+
+msgid "BCP38"
+msgstr "BCP38"
+
+msgid "BCP38 config"
+msgstr "BCP38 配置"
+
+msgid "Blocked IP ranges"
+msgstr "阻止的 IP 范围"
+
+msgid "Enable"
+msgstr "启用"
+
+msgid "Interface name"
+msgstr "接口名称"
+
+msgid ""
+"Interface to apply the blocking to (should be the upstream WAN interface)."
+msgstr "应用“阻止规则”的接口(应当为上游 WAN 接口)。"
+
+msgid ""
+"Takes precedence over blocked ranges. Use to whitelist your upstream network "
+"if you're behind a double NAT and the auto-detection doesn't work."
+msgstr ""
+"这里的规则优先于阻止规则被使用。如果你在双重 NAT 之后并且自动检测功能不起作"
+"用,请在这里添加你上游网络的白名单。"
+
+msgid ""
+"This function blocks packets with private address destinations from going "
+"out onto the internet as per <a href=\"http://tools.ietf.org/html/"
+"bcp38\">BCP 38</a>. For IPv6, only source specific default routes are "
+"installed, so no BCP38 firewall routes are needed."
+msgstr ""
+"此功能可以阻止具有私有目标地址的数据包通过 <a href=\"http://tools.ietf.org/"
+"html/bcp38\">BCP 38</a> 发送到互联网上。对于 IPv6,仅安装源特定的默认路由,因"
+"此不需要 BCP38 防火墙路由。"

+ 11 - 0
package/luci/applications/luci-app-bcp38/root/etc/uci-defaults/60_luci-bcp38

@@ -0,0 +1,11 @@
+#!/bin/sh
+
+uci -q batch <<-EOF >/dev/null
+	delete ucitrack.@bcp38[-1]
+	add ucitrack bcp38
+        add_list ucitrack.@bcp38[0].affects=firewall
+	commit ucitrack
+EOF
+
+rm -f /tmp/luci-indexcache
+exit 0

+ 18 - 0
package/luci/applications/luci-app-clamav/Makefile

@@ -0,0 +1,18 @@
+#
+# Copyright (C) 2015 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+LUCI_TITLE:=ClamAV LuCI interface
+LUCI_DEPENDS:=+luci-mod-admin-full +clamav
+
+PKG_MAINTAINER:=Marko Ratkaj <marko.ratkaj@sartura.hr>
+PKG_LICENSE:=Apache-2.0
+
+include ../../luci.mk
+
+# call BuildPackage - OpenWrt buildroot signature

+ 22 - 0
package/luci/applications/luci-app-clamav/luasrc/controller/clamav.lua

@@ -0,0 +1,22 @@
+--[[
+
+LuCI ClamAV module
+
+Copyright (C) 2015, Itus Networks, Inc.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+	http://www.apache.org/licenses/LICENSE-2.0
+
+Author: Marko Ratkaj <marko.ratkaj@sartura.hr>
+	Luka Perkov <luka.perkov@sartura.hr>
+
+]]--
+
+module("luci.controller.clamav", package.seeall)
+
+function index()
+	entry({"admin", "services", "clamav"}, cbi("clamav"), _("ClamAV"))
+end

+ 178 - 0
package/luci/applications/luci-app-clamav/luasrc/model/cbi/clamav.lua

@@ -0,0 +1,178 @@
+--[[
+
+LuCI ClamAV module
+
+Copyright (C) 2015, Itus Networks, Inc.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+	http://www.apache.org/licenses/LICENSE-2.0
+
+Author: Marko Ratkaj <marko.ratkaj@sartura.hr>
+	Luka Perkov <luka.perkov@sartura.hr>
+
+]]--
+
+local fs = require "nixio.fs"
+local sys = require "luci.sys"
+require "ubus"
+
+m = Map("clamav", translate("ClamAV"))
+m.on_after_commit = function() luci.sys.call("/etc/init.d/clamav restart") end
+
+s = m:section(TypedSection, "clamav")
+s.anonymous = true
+s.addremove = false
+
+s:tab("tab_advanced", translate("Settings"))
+s:tab("tab_logs", translate("Log"))
+
+--------------- Settings --------------
+
+LogFileMaxSize = s:taboption("tab_advanced", Value, "LogFileMaxSize", translate("Max size of log file"))
+LogFileMaxSize:value("512K",  translate("512K"))
+LogFileMaxSize:value("1M",  translate("1M"))
+LogFileMaxSize:value("2M",  translate("2M"))
+LogFileMaxSize.default = "1M"
+
+LogTime = s:taboption("tab_advanced", ListValue, "LogTime", translate("Log time with each message"))
+LogTime:value("no",  translate("No"))
+LogTime:value("yes",  translate("Yes"))
+LogTime.default = "no"
+
+LogVerbose = s:taboption("tab_advanced", ListValue, "LogVerbose", translate("Enable verbose logging"))
+LogVerbose:value("no",  translate("No"))
+LogVerbose:value("yes",  translate("Yes"))
+LogVerbose.default = "no"
+
+ExtendedDetectionInfo = s:taboption("tab_advanced", ListValue, "ExtendedDetectionInfo", translate("Log additional infection info"))
+ExtendedDetectionInfo:value("no",  translate("No"))
+ExtendedDetectionInfo:value("yes",  translate("Yes"))
+ExtendedDetectionInfo.default = "no"
+
+dummy3 = s:taboption("tab_advanced", DummyValue, "")
+dummy4 = s:taboption("tab_advanced", DummyValue, "")
+
+MaxDirectoryRecursion = s:taboption("tab_advanced", Value, "MaxDirectoryRecursion", translate("Max directory scan depth"))
+MaxDirectoryRecursion:value("15",  translate("15"))
+MaxDirectoryRecursion:value("20",  translate("20"))
+MaxDirectoryRecursion.default = "15"
+
+FollowDirectorySymlink = s:taboption("tab_advanced", ListValue, "FollowDirectorySymlink", translate("Follow directory symlinks"))
+FollowDirectorySymlink:value("no",  translate("No"))
+FollowDirectorySymlink:value("yes",  translate("Yes"))
+FollowDirectorySymlink.default = "no"
+
+FollowFileSymlinks = s:taboption("tab_advanced", ListValue, "FollowFileSymlinks", translate("Follow file symlinks"))
+FollowFileSymlinks:value("no",  translate("No"))
+FollowFileSymlinks:value("yes",  translate("Yes"))
+FollowFileSymlinks.default = "no"
+
+DetectPUA = s:taboption("tab_advanced", ListValue, "DetectPUA", translate("Detect possibly unwanted apps"))
+DetectPUA:value("no",  translate("No"))
+DetectPUA:value("yes",  translate("Yes"))
+DetectPUA.default = "no"
+
+ScanPE = s:taboption("tab_advanced", ListValue, "ScanPE", translate("Scan portable executables"))
+ScanPE:value("no",  translate("No"))
+ScanPE:value("yes",  translate("Yes"))
+ScanPE.default = "yes"
+
+ScanELF = s:taboption("tab_advanced", ListValue, "ScanELF", translate("Scan ELF files"))
+ScanELF:value("no",  translate("No"))
+ScanELF:value("yes",  translate("Yes"))
+ScanELF.default = "yes"
+
+DetectBrokenExecutables = s:taboption("tab_advanced", ListValue, "DetectBrokenExecutables", translate("Detect broken executables"))
+DetectBrokenExecutables:value("no",  translate("No"))
+DetectBrokenExecutables:value("yes",  translate("Yes"))
+DetectBrokenExecutables.default = "no"
+
+ScanOLE2 = s:taboption("tab_advanced", ListValue, "ScanOLE2", translate("Scan MS Office and .msi files"))
+ScanOLE2:value("no",  translate("No"))
+ScanOLE2:value("yes",  translate("Yes"))
+ScanOLE2.default = "yes"
+
+ScanPDF = s:taboption("tab_advanced", ListValue, "ScanPDF", translate("Scan pdf files"))
+ScanPDF:value("no",  translate("No"))
+ScanPDF:value("yes",  translate("Yes"))
+ScanPDF.default = "yes"
+
+ScanSWF = s:taboption("tab_advanced", ListValue, "ScanSWF", translate("Scan swf files"))
+ScanSWF:value("no",  translate("No"))
+ScanSWF:value("yes",  translate("Yes"))
+ScanSWF.default = "yes"
+
+ScanMail = s:taboption("tab_advanced", ListValue, "ScanMail", translate("Scan emails"))
+ScanMail:value("no",  translate("No"))
+ScanMail:value("yes",  translate("Yes"))
+ScanMail.default = "yes"
+
+ScanPartialMessages = s:taboption("tab_advanced", ListValue, "ScanPartialMessages", translate("Scan RFC1341 messages split over many emails"))
+ScanPartialMessages:value("no",  translate("No"))
+ScanPartialMessages:value("yes",  translate("Yes"))
+ScanPartialMessages.default = "no"
+
+ScanArchive = s:taboption("tab_advanced", ListValue, "ScanArchive", translate("Scan archives"))
+ScanArchive:value("no",  translate("No"))
+ScanArchive:value("yes",  translate("Yes"))
+ScanArchive.default = "yes"
+
+ArchiveBlockEncrypted = s:taboption("tab_advanced", ListValue, "ArchiveBlockEncrypted", translate("Block encrypted archives"))
+ArchiveBlockEncrypted:value("no",  translate("No"))
+ArchiveBlockEncrypted:value("yes",  translate("Yes"))
+ArchiveBlockEncrypted.default = "no"
+
+dummy5 = s:taboption("tab_advanced", DummyValue, "")
+dummy6 = s:taboption("tab_advanced", DummyValue, "")
+
+StreamMinPort = s:taboption("tab_advanced", Value, "StreamMinPort", translate("Port range, lowest port"))
+StreamMinPort.datatype = "portrange"
+StreamMinPort:value("1024",translate("1024"))
+StreamMinPort.default = "1024"
+
+StreamMaxPort = s:taboption("tab_advanced", Value, "StreamMaxPort", translate("Port range, highest port"))
+StreamMaxPort.datatype = "portrange"
+StreamMaxPort:value("2048",translate("2048"))
+StreamMaxPort.default = "2048"
+
+MaxThreads = s:taboption("tab_advanced", Value, "MaxThreads", translate("Max number of threads"))
+MaxThreads.datatype = "and(uinteger,min(1))"
+MaxThreads:value("10",translate("10"))
+MaxThreads:value("20",translate("20"))
+MaxThreads.default = "10"
+
+SelfCheck = s:taboption("tab_advanced", Value, "SelfCheck", translate("Database check every N sec"))
+SelfCheck.datatype = "and(uinteger,min(1))"
+SelfCheck:value("600",translate("600"))
+SelfCheck.default = "600"
+
+MaxFileSize = s:taboption("tab_advanced", Value, "MaxFileSize", translate("Max size of scanned file"))
+MaxFileSize.datatype = "string"
+MaxFileSize:value("150M",translate("150M"))
+MaxFileSize:value("50M",translate("50M"))
+MaxFileSize.default = "150M"
+
+------------------ Log --------------------
+
+clamav_logfile = s:taboption("tab_logs", TextValue, "lines", "")
+clamav_logfile.wrap = "off"
+clamav_logfile.rows = 25
+clamav_logfile.rmempty = true
+
+function clamav_logfile.cfgvalue()
+	local uci = require "luci.model.uci".cursor_state()
+	local file = "/tmp/clamd.log"
+	if file then
+		return fs.readfile(file) or ""
+	else
+		return ""
+	end
+end
+
+function clamav_logfile.write()
+end
+
+return m

+ 130 - 0
package/luci/applications/luci-app-clamav/po/ja/clamav.po

@@ -0,0 +1,130 @@
+msgid ""
+msgstr ""
+"Content-Type: text/plain; charset=UTF-8\n"
+"Project-Id-Version: \n"
+"POT-Creation-Date: \n"
+"PO-Revision-Date: \n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Poedit 1.8.12\n"
+"Last-Translator: INAGAKI Hiroshi <musashino.open@gmail.com>\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"Language: ja\n"
+
+msgid "10"
+msgstr "10"
+
+msgid "1024"
+msgstr "1024"
+
+msgid "15"
+msgstr "15"
+
+msgid "150M"
+msgstr "150M"
+
+msgid "1M"
+msgstr "1M"
+
+msgid "20"
+msgstr "20"
+
+msgid "2048"
+msgstr "2048"
+
+msgid "2M"
+msgstr "2M"
+
+msgid "50M"
+msgstr "50M"
+
+msgid "512K"
+msgstr "512K"
+
+msgid "600"
+msgstr "600"
+
+msgid "Block encrypted archives"
+msgstr "暗号化されたアーカイブのブロック"
+
+msgid "ClamAV"
+msgstr "ClamAV"
+
+msgid "Database check every N sec"
+msgstr "データベース チェック間隔(秒)"
+
+msgid "Detect broken executables"
+msgstr "破損した実行ファイルの検出"
+
+msgid "Detect possibly unwanted apps"
+msgstr "不必要と思われるアプリケーションの検出"
+
+msgid "Enable verbose logging"
+msgstr "詳細なログの有効化"
+
+msgid "Follow directory symlinks"
+msgstr "ディレクトリ シンボリックリンクに従う"
+
+msgid "Follow file symlinks"
+msgstr "ファイル シンボリックリンクに従う"
+
+msgid "Log"
+msgstr "ログ"
+
+msgid "Log additional infection info"
+msgstr "追加の感染情報ログ"
+
+msgid "Log time with each message"
+msgstr "ログ メッセージ毎に時刻を付加"
+
+msgid "Max directory scan depth"
+msgstr "ディレクトリ スキャンの最大深度"
+
+msgid "Max number of threads"
+msgstr "スレッドの最大数"
+
+msgid "Max size of log file"
+msgstr "ログの最大サイズ"
+
+msgid "Max size of scanned file"
+msgstr ""
+
+msgid "No"
+msgstr "いいえ"
+
+msgid "Port range, highest port"
+msgstr "ポート範囲(上限)"
+
+msgid "Port range, lowest port"
+msgstr "ポート範囲(下限)"
+
+msgid "Scan ELF files"
+msgstr "ELF ファイルのスキャン"
+
+msgid "Scan MS Office and .msi files"
+msgstr "MS Office と .msi ファイルのスキャン"
+
+msgid "Scan RFC1341 messages split over many emails"
+msgstr ""
+
+msgid "Scan archives"
+msgstr "アーカイブのスキャン"
+
+msgid "Scan emails"
+msgstr "E-mailのスキャン"
+
+msgid "Scan pdf files"
+msgstr "PDF ファイルのスキャン"
+
+msgid "Scan portable executables"
+msgstr "ポータブル 実行ファイルのスキャン"
+
+msgid "Scan swf files"
+msgstr "SWF ファイルのスキャン"
+
+msgid "Settings"
+msgstr "設定"
+
+msgid "Yes"
+msgstr "はい"

+ 119 - 0
package/luci/applications/luci-app-clamav/po/sv/clamav.po

@@ -0,0 +1,119 @@
+msgid ""
+msgstr "Content-Type: text/plain; charset=UTF-8\n"
+
+msgid "10"
+msgstr "10"
+
+msgid "1024"
+msgstr "1024"
+
+msgid "15"
+msgstr "15"
+
+msgid "150M"
+msgstr "150M"
+
+msgid "1M"
+msgstr "1M"
+
+msgid "20"
+msgstr "20"
+
+msgid "2048"
+msgstr "2048"
+
+msgid "2M"
+msgstr "2M"
+
+msgid "50M"
+msgstr "50M"
+
+msgid "512K"
+msgstr "512K"
+
+msgid "600"
+msgstr "600"
+
+msgid "Block encrypted archives"
+msgstr "Blockera krypterade arkiv"
+
+msgid "ClamAV"
+msgstr "ClamAV"
+
+msgid "Database check every N sec"
+msgstr "Kontrollera databasen var N sek"
+
+msgid "Detect broken executables"
+msgstr "Upptäck trasiga exekverbara filer"
+
+msgid "Detect possibly unwanted apps"
+msgstr "Upptäck möjliga oönskade appar"
+
+msgid "Enable verbose logging"
+msgstr "Aktivera utförlig loggning"
+
+msgid "Follow directory symlinks"
+msgstr "Följ mappens symbollänkar"
+
+msgid "Follow file symlinks"
+msgstr "Följ symbollänkar för fil"
+
+msgid "Log"
+msgstr "Logg"
+
+msgid "Log additional infection info"
+msgstr "Logga ytterligare information om infektionen"
+
+msgid "Log time with each message"
+msgstr "Loggtid med varje meddelande"
+
+msgid "Max directory scan depth"
+msgstr ""
+
+msgid "Max number of threads"
+msgstr "Maximalt antalet trådar"
+
+msgid "Max size of log file"
+msgstr "Högsta storlek av loggfilen"
+
+msgid "Max size of scanned file"
+msgstr "Högsta storlek av skannad fil"
+
+msgid "No"
+msgstr "Nej"
+
+msgid "Port range, highest port"
+msgstr "Räckvidd för port, högsta port"
+
+msgid "Port range, lowest port"
+msgstr "Räckvidd för port, lägsta port"
+
+msgid "Scan ELF files"
+msgstr "Sök igenom ELF-filer"
+
+msgid "Scan MS Office and .msi files"
+msgstr "Sök igen MS Office och .msi-filer"
+
+msgid "Scan RFC1341 messages split over many emails"
+msgstr "Sök igen RFC1341-meddelanden uppdelade över många e-postmeddelanden"
+
+msgid "Scan archives"
+msgstr "Sök igenom arkiven"
+
+msgid "Scan emails"
+msgstr "Sök igenom e-postmeddelanden"
+
+msgid "Scan pdf files"
+msgstr "Sök igenom pdf-filer"
+
+msgid "Scan portable executables"
+msgstr "Sök igenom bärbara exekverbara filer"
+
+msgid "Scan swf files"
+msgstr "Sök igenom swf-filer"
+
+msgid "Settings"
+msgstr "Inställningar"
+
+msgid "Yes"
+msgstr "Ja"

+ 119 - 0
package/luci/applications/luci-app-clamav/po/templates/clamav.pot

@@ -0,0 +1,119 @@
+msgid ""
+msgstr "Content-Type: text/plain; charset=UTF-8"
+
+msgid "10"
+msgstr ""
+
+msgid "1024"
+msgstr ""
+
+msgid "15"
+msgstr ""
+
+msgid "150M"
+msgstr ""
+
+msgid "1M"
+msgstr ""
+
+msgid "20"
+msgstr ""
+
+msgid "2048"
+msgstr ""
+
+msgid "2M"
+msgstr ""
+
+msgid "50M"
+msgstr ""
+
+msgid "512K"
+msgstr ""
+
+msgid "600"
+msgstr ""
+
+msgid "Block encrypted archives"
+msgstr ""
+
+msgid "ClamAV"
+msgstr ""
+
+msgid "Database check every N sec"
+msgstr ""
+
+msgid "Detect broken executables"
+msgstr ""
+
+msgid "Detect possibly unwanted apps"
+msgstr ""
+
+msgid "Enable verbose logging"
+msgstr ""
+
+msgid "Follow directory symlinks"
+msgstr ""
+
+msgid "Follow file symlinks"
+msgstr ""
+
+msgid "Log"
+msgstr ""
+
+msgid "Log additional infection info"
+msgstr ""
+
+msgid "Log time with each message"
+msgstr ""
+
+msgid "Max directory scan depth"
+msgstr ""
+
+msgid "Max number of threads"
+msgstr ""
+
+msgid "Max size of log file"
+msgstr ""
+
+msgid "Max size of scanned file"
+msgstr ""
+
+msgid "No"
+msgstr ""
+
+msgid "Port range, highest port"
+msgstr ""
+
+msgid "Port range, lowest port"
+msgstr ""
+
+msgid "Scan ELF files"
+msgstr ""
+
+msgid "Scan MS Office and .msi files"
+msgstr ""
+
+msgid "Scan RFC1341 messages split over many emails"
+msgstr ""
+
+msgid "Scan archives"
+msgstr ""
+
+msgid "Scan emails"
+msgstr ""
+
+msgid "Scan pdf files"
+msgstr ""
+
+msgid "Scan portable executables"
+msgstr ""
+
+msgid "Scan swf files"
+msgstr ""
+
+msgid "Settings"
+msgstr ""
+
+msgid "Yes"
+msgstr ""

+ 131 - 0
package/luci/applications/luci-app-clamav/po/zh-cn/clamav.po

@@ -0,0 +1,131 @@
+# liushuyu <liushuyu_011@163.com>, 2017.
+msgid ""
+msgstr ""
+"Content-Type: text/plain; charset=UTF-8\n"
+"Project-Id-Version: \n"
+"POT-Creation-Date: \n"
+"PO-Revision-Date: 2017-04-15 21:37-0600\n"
+"Language-Team: Chinese <kde-i18n-doc@kde.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Poedit 2.0.1\n"
+"Last-Translator: liushuyu <liushuyu011@gmail.com>\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"Language: zh_CN\n"
+
+msgid "10"
+msgstr "10"
+
+msgid "1024"
+msgstr "1024"
+
+msgid "15"
+msgstr "15"
+
+msgid "150M"
+msgstr "150M"
+
+msgid "1M"
+msgstr "1M"
+
+msgid "20"
+msgstr "20"
+
+msgid "2048"
+msgstr "2048"
+
+msgid "2M"
+msgstr "2M"
+
+msgid "50M"
+msgstr "50M"
+
+msgid "512K"
+msgstr "512K"
+
+msgid "600"
+msgstr "600"
+
+msgid "Block encrypted archives"
+msgstr "拦截加密的归档文件"
+
+msgid "ClamAV"
+msgstr "ClamAV"
+
+msgid "Database check every N sec"
+msgstr "每 N 秒检测一次数据库"
+
+msgid "Detect broken executables"
+msgstr "检测破损的可执行文件"
+
+msgid "Detect possibly unwanted apps"
+msgstr "检测不受欢迎的软件"
+
+msgid "Enable verbose logging"
+msgstr "启用详细日志输出"
+
+msgid "Follow directory symlinks"
+msgstr "跟随目录符号链接"
+
+msgid "Follow file symlinks"
+msgstr "跟随文件符号链接"
+
+msgid "Log"
+msgstr "日志"
+
+msgid "Log additional infection info"
+msgstr "记录详细的感染信息"
+
+msgid "Log time with each message"
+msgstr "记录消息时间戳"
+
+msgid "Max directory scan depth"
+msgstr "最大扫描深度"
+
+msgid "Max number of threads"
+msgstr "最大线程数"
+
+msgid "Max size of log file"
+msgstr "最大日志大小"
+
+msgid "Max size of scanned file"
+msgstr "最大可扫描的文件大小"
+
+msgid "No"
+msgstr "否"
+
+msgid "Port range, highest port"
+msgstr "端口范围,最大端口"
+
+msgid "Port range, lowest port"
+msgstr "端口范围,最小端口"
+
+msgid "Scan ELF files"
+msgstr "扫描 ELF 文件"
+
+msgid "Scan MS Office and .msi files"
+msgstr "扫描 MS Office 文档和 .msi 安装包文件"
+
+msgid "Scan RFC1341 messages split over many emails"
+msgstr "扫描符合 RFC1341 邮件分离规范的邮件"
+
+msgid "Scan archives"
+msgstr "扫描归档文件"
+
+msgid "Scan emails"
+msgstr "扫描电子邮件"
+
+msgid "Scan pdf files"
+msgstr "扫描 PDF 文件"
+
+msgid "Scan portable executables"
+msgstr "扫描 PE (Windows) 可执行文件"
+
+msgid "Scan swf files"
+msgstr "扫描 SWF 文件"
+
+msgid "Settings"
+msgstr "设置"
+
+msgid "Yes"
+msgstr "是"

+ 2 - 0
package/luci/applications/luci-app-commands/Makefile

@@ -9,6 +9,8 @@ include $(TOPDIR)/rules.mk
 LUCI_TITLE:=LuCI Shell Command Module
 LUCI_TITLE:=LuCI Shell Command Module
 LUCI_DEPENDS:=
 LUCI_DEPENDS:=
 
 
+PKG_LICENSE:=Apache-2.0
+
 include ../../luci.mk
 include ../../luci.mk
 
 
 # call BuildPackage - OpenWrt buildroot signature
 # call BuildPackage - OpenWrt buildroot signature

+ 55 - 14
package/luci/applications/luci-app-commands/luasrc/controller/commands.lua

@@ -153,8 +153,8 @@ local function parse_cmdline(cmdid, args)
 	end
 	end
 end
 end
 
 
-function action_run(...)
-	local fs   = require "nixio.fs"
+function execute_command(callback, ...)
+	local fs = require "nixio.fs"
 	local argv = parse_cmdline(...)
 	local argv = parse_cmdline(...)
 	if argv then
 	if argv then
 		local outfile = os.tmpname()
 		local outfile = os.tmpname()
@@ -169,8 +169,8 @@ function action_run(...)
 
 
 		local binary = not not (stdout:match("[%z\1-\8\14-\31]"))
 		local binary = not not (stdout:match("[%z\1-\8\14-\31]"))
 
 
-		luci.http.prepare_content("application/json")
-		luci.http.write_json({
+		callback({
+			ok       = true,
 			command  = table.concat(argv, " "),
 			command  = table.concat(argv, " "),
 			stdout   = not binary and stdout,
 			stdout   = not binary and stdout,
 			stderr   = stderr,
 			stderr   = stderr,
@@ -178,10 +178,41 @@ function action_run(...)
 			binary   = binary
 			binary   = binary
 		})
 		})
 	else
 	else
-		luci.http.status(404, "No such command")
+		callback({
+			ok       = false,
+			code     = 404,
+			reason   = "No such command"
+		})
+	end
+end
+
+function return_json(result)
+	if result.ok then
+		luci.http.prepare_content("application/json")
+		luci.http.write_json(result)
+	else
+		luci.http.status(result.code, result.reason)
 	end
 	end
 end
 end
 
 
+function action_run(...)
+	execute_command(return_json, ...)
+end
+
+function return_html(result)
+	if result.ok then
+		require("luci.template")
+		luci.template.render("commands_public", {
+			exitcode = result.exitcode,
+			stdout = result.stdout,
+			stderr = result.stderr
+		})
+	else
+		luci.http.status(result.code, result.reason)
+	end
+
+end
+
 function action_download(...)
 function action_download(...)
 	local fs   = require "nixio.fs"
 	local fs   = require "nixio.fs"
 	local argv = parse_cmdline(...)
 	local argv = parse_cmdline(...)
@@ -192,11 +223,11 @@ function action_download(...)
 			local name
 			local name
 			if chunk:match("[%z\1-\8\14-\31]") then
 			if chunk:match("[%z\1-\8\14-\31]") then
 				luci.http.header("Content-Disposition", "attachment; filename=%s"
 				luci.http.header("Content-Disposition", "attachment; filename=%s"
-				                 % fs.basename(argv[1]):gsub("%W+", ".") .. ".bin")
+					% fs.basename(argv[1]):gsub("%W+", ".") .. ".bin")
 				luci.http.prepare_content("application/octet-stream")
 				luci.http.prepare_content("application/octet-stream")
 			else
 			else
 				luci.http.header("Content-Disposition", "attachment; filename=%s"
 				luci.http.header("Content-Disposition", "attachment; filename=%s"
-				                 % fs.basename(argv[1]):gsub("%W+", ".") .. ".txt")
+					% fs.basename(argv[1]):gsub("%W+", ".") .. ".txt")
 				luci.http.prepare_content("text/plain")
 				luci.http.prepare_content("text/plain")
 			end
 			end
 
 
@@ -214,14 +245,24 @@ function action_download(...)
 	end
 	end
 end
 end
 
 
+
 function action_public(cmdid, args)
 function action_public(cmdid, args)
+	local disp = false
+	if string.sub(cmdid, -1) == "s" then
+		disp = true
+		cmdid = string.sub(cmdid, 1, -2)
+	end
 	local uci = require "luci.model.uci".cursor()
 	local uci = require "luci.model.uci".cursor()
 	if cmdid and
 	if cmdid and
-	   uci:get("luci", cmdid) == "command" and
-	   uci:get("luci", cmdid, "public") == "1"
-	then
-		action_download(cmdid, args)
-	else
-		luci.http.status(403, "Access to command denied")
+		uci:get("luci", cmdid) == "command" and
+		uci:get("luci", cmdid, "public") == "1"
+		then
+			if disp then
+				execute_command(return_html, cmdid, args)
+			else
+				action_download(cmdid, args)
+			end
+		else
+			luci.http.status(403, "Access to command denied")
+		end
 	end
 	end
-end

+ 9 - 6
package/luci/applications/luci-app-commands/luasrc/view/commands.htm

@@ -108,16 +108,19 @@
 
 
 		if (legend && output)
 		if (legend && output)
 		{
 		{
-			var link = location.protocol + '//' + location.hostname +
+			var prefix = location.protocol + '//' + location.hostname +
 			           (location.port ? ':' + location.port : '') +
 			           (location.port ? ':' + location.port : '') +
-					   location.pathname.split(';')[0] + 'command/' +
-					   id + (args ? '/' + args : '');
-
+					   location.pathname.split(';')[0] + 'command/';
+			var suffix = (args ? '/' + args : '');
+			
+			var link = prefix + id + suffix;
+			var link_nodownload = prefix + id + "s" + suffix;
+			
 			legend.style.display = 'none';
 			legend.style.display = 'none';
 			output.parentNode.style.display = 'block';
 			output.parentNode.style.display = 'block';
 			output.innerHTML = String.format(
 			output.innerHTML = String.format(
-				'<div class="alert-message"><%:Access command with%> <a href="%s">%s</a></div>',
-				link, link
+				'<div class="alert-message"><p><%:Download execution result%> <a href="%s">%s</a></p><p><%:Or display result%> <a href="%s">%s</a></p></div>',
+				link, link, link_nodownload, link_nodownload
 			);
 			);
 
 
 			location.hash = '#output';
 			location.hash = '#output';

+ 50 - 0
package/luci/applications/luci-app-commands/luasrc/view/commands_public.htm

@@ -0,0 +1,50 @@
+<%#
+ Copyright 2016 t123yh <t123yh@outlook.com>
+ Licensed to the public under the Apache License 2.0.
+-%>
+
+<% css = [[
+.alert-success {
+    color: #3c763d;
+    background-color: #dff0d8;
+    border-color: #d6e9c6;
+}
+
+.alert {
+    padding: 15px;
+    margin-bottom: 20px;
+    border: 1px solid transparent;
+    border-radius: 4px;
+}
+
+.alert-warning {
+    color: #8a6d3b;
+    background-color: #fcf8e3;
+    border-color: #faebcc;
+}
+]] -%>
+
+<%+header%>
+
+<% if exitcode == 0 then %>
+    <div class="alert alert-success" role="alert"> <%:Command executed successfully.%> </div>
+<% else %>
+    <div class="alert alert-warning" role="alert"> <%:Command exited with status code %> <%= exitcode %> </div>
+<% end %>
+
+<% if stdout ~= "" then %>
+    <h3><%:Standard Output%></h3>
+    <pre><%= stdout %></pre>
+<% end %>
+
+<% if stderr ~= "" then %>
+    <h3><%:Standard Error%></h3>
+    <pre><%= stderr %></pre>
+<% end %>
+
+<script>
+    <%# Display top bar on mobile devices -%>
+    document.getElementsByClassName('brand')[0].style.setProperty("display", "block", "important");
+</script>
+
+<%+footer%>

+ 21 - 3
package/luci/applications/luci-app-commands/po/ca/commands.po

@@ -14,9 +14,6 @@ msgstr ""
 msgid "A short textual description of the configured command"
 msgid "A short textual description of the configured command"
 msgstr "Una breva descripció textual de l'ordre configurat"
 msgstr "Una breva descripció textual de l'ordre configurat"
 
 
-msgid "Access command with"
-msgstr "Accedeix l'ordre amb"
-
 msgid ""
 msgid ""
 "Allow executing the command and downloading its output without prior "
 "Allow executing the command and downloading its output without prior "
 "authentication"
 "authentication"
@@ -42,6 +39,12 @@ msgstr "Recollint dades..."
 msgid "Command"
 msgid "Command"
 msgstr "Ordre"
 msgstr "Ordre"
 
 
+msgid "Command executed successfully."
+msgstr ""
+
+msgid "Command exited with status code"
+msgstr ""
+
 msgid "Command failed"
 msgid "Command failed"
 msgstr "L'ordre ha fallat"
 msgstr "L'ordre ha fallat"
 
 
@@ -72,6 +75,9 @@ msgstr "Descripció"
 msgid "Download"
 msgid "Download"
 msgstr "Baixa"
 msgstr "Baixa"
 
 
+msgid "Download execution result"
+msgstr ""
+
 msgid "Failed to execute command!"
 msgid "Failed to execute command!"
 msgstr "L'execució de l'ordre ha fallat!"
 msgstr "L'execució de l'ordre ha fallat!"
 
 
@@ -81,12 +87,21 @@ msgstr "Enllaç"
 msgid "Loading"
 msgid "Loading"
 msgstr "Carregant"
 msgstr "Carregant"
 
 
+msgid "Or display result"
+msgstr ""
+
 msgid "Public access"
 msgid "Public access"
 msgstr "Accés públic"
 msgstr "Accés públic"
 
 
 msgid "Run"
 msgid "Run"
 msgstr "Executa"
 msgstr "Executa"
 
 
+msgid "Standard Error"
+msgstr ""
+
+msgid "Standard Output"
+msgstr ""
+
 msgid ""
 msgid ""
 "This page allows you to configure custom shell commands which can be easily "
 "This page allows you to configure custom shell commands which can be easily "
 "invoked from the web interface."
 "invoked from the web interface."
@@ -96,3 +111,6 @@ msgstr ""
 
 
 msgid "Waiting for command to complete..."
 msgid "Waiting for command to complete..."
 msgstr "Esperant que l'ordre acabi..."
 msgstr "Esperant que l'ordre acabi..."
+
+#~ msgid "Access command with"
+#~ msgstr "Accedeix l'ordre amb"

+ 18 - 3
package/luci/applications/luci-app-commands/po/cs/commands.po

@@ -14,9 +14,6 @@ msgstr ""
 msgid "A short textual description of the configured command"
 msgid "A short textual description of the configured command"
 msgstr "Krátky popis nastaveného příkazu"
 msgstr "Krátky popis nastaveného příkazu"
 
 
-msgid "Access command with"
-msgstr ""
-
 msgid ""
 msgid ""
 "Allow executing the command and downloading its output without prior "
 "Allow executing the command and downloading its output without prior "
 "authentication"
 "authentication"
@@ -40,6 +37,12 @@ msgstr "Sbírání dat..."
 msgid "Command"
 msgid "Command"
 msgstr "Příkaz"
 msgstr "Příkaz"
 
 
+msgid "Command executed successfully."
+msgstr ""
+
+msgid "Command exited with status code"
+msgstr ""
+
 msgid "Command failed"
 msgid "Command failed"
 msgstr "Příkaz selhal"
 msgstr "Příkaz selhal"
 
 
@@ -70,6 +73,9 @@ msgstr "Popis"
 msgid "Download"
 msgid "Download"
 msgstr "Stáhnout"
 msgstr "Stáhnout"
 
 
+msgid "Download execution result"
+msgstr ""
+
 msgid "Failed to execute command!"
 msgid "Failed to execute command!"
 msgstr "Chyba při zpracování příkazu!"
 msgstr "Chyba při zpracování příkazu!"
 
 
@@ -79,12 +85,21 @@ msgstr "Odkaz"
 msgid "Loading"
 msgid "Loading"
 msgstr "Nahrávám"
 msgstr "Nahrávám"
 
 
+msgid "Or display result"
+msgstr ""
+
 msgid "Public access"
 msgid "Public access"
 msgstr "Veřejný přístup"
 msgstr "Veřejný přístup"
 
 
 msgid "Run"
 msgid "Run"
 msgstr "Spustit"
 msgstr "Spustit"
 
 
+msgid "Standard Error"
+msgstr ""
+
+msgid "Standard Output"
+msgstr ""
+
 msgid ""
 msgid ""
 "This page allows you to configure custom shell commands which can be easily "
 "This page allows you to configure custom shell commands which can be easily "
 "invoked from the web interface."
 "invoked from the web interface."

+ 21 - 3
package/luci/applications/luci-app-commands/po/de/commands.po

@@ -14,9 +14,6 @@ msgstr ""
 msgid "A short textual description of the configured command"
 msgid "A short textual description of the configured command"
 msgstr "Kurze Beschreibung des abgespeicherten Kommandos"
 msgstr "Kurze Beschreibung des abgespeicherten Kommandos"
 
 
-msgid "Access command with"
-msgstr "Kommando aufrufen mit"
-
 msgid ""
 msgid ""
 "Allow executing the command and downloading its output without prior "
 "Allow executing the command and downloading its output without prior "
 "authentication"
 "authentication"
@@ -42,6 +39,12 @@ msgstr "Sammle Daten..."
 msgid "Command"
 msgid "Command"
 msgstr "Kommando"
 msgstr "Kommando"
 
 
+msgid "Command executed successfully."
+msgstr ""
+
+msgid "Command exited with status code"
+msgstr ""
+
 msgid "Command failed"
 msgid "Command failed"
 msgstr "Kommando fehlgeschlagen"
 msgstr "Kommando fehlgeschlagen"
 
 
@@ -72,6 +75,9 @@ msgstr "Beschreibung"
 msgid "Download"
 msgid "Download"
 msgstr "Herunterladen"
 msgstr "Herunterladen"
 
 
+msgid "Download execution result"
+msgstr ""
+
 msgid "Failed to execute command!"
 msgid "Failed to execute command!"
 msgstr "Kommando konnte nicht ausgeführt werden!"
 msgstr "Kommando konnte nicht ausgeführt werden!"
 
 
@@ -81,12 +87,21 @@ msgstr "Link"
 msgid "Loading"
 msgid "Loading"
 msgstr "Lade"
 msgstr "Lade"
 
 
+msgid "Or display result"
+msgstr ""
+
 msgid "Public access"
 msgid "Public access"
 msgstr "Öffentlicher Zugriff"
 msgstr "Öffentlicher Zugriff"
 
 
 msgid "Run"
 msgid "Run"
 msgstr "Ausführen"
 msgstr "Ausführen"
 
 
+msgid "Standard Error"
+msgstr ""
+
+msgid "Standard Output"
+msgstr ""
+
 msgid ""
 msgid ""
 "This page allows you to configure custom shell commands which can be easily "
 "This page allows you to configure custom shell commands which can be easily "
 "invoked from the web interface."
 "invoked from the web interface."
@@ -96,3 +111,6 @@ msgstr ""
 
 
 msgid "Waiting for command to complete..."
 msgid "Waiting for command to complete..."
 msgstr "Warte auf die Ausführung des Kommandos..."
 msgstr "Warte auf die Ausführung des Kommandos..."
+
+#~ msgid "Access command with"
+#~ msgstr "Kommando aufrufen mit"

+ 18 - 3
package/luci/applications/luci-app-commands/po/el/commands.po

@@ -11,9 +11,6 @@ msgstr ""
 msgid "A short textual description of the configured command"
 msgid "A short textual description of the configured command"
 msgstr ""
 msgstr ""
 
 
-msgid "Access command with"
-msgstr ""
-
 msgid ""
 msgid ""
 "Allow executing the command and downloading its output without prior "
 "Allow executing the command and downloading its output without prior "
 "authentication"
 "authentication"
@@ -37,6 +34,12 @@ msgstr ""
 msgid "Command"
 msgid "Command"
 msgstr ""
 msgstr ""
 
 
+msgid "Command executed successfully."
+msgstr ""
+
+msgid "Command exited with status code"
+msgstr ""
+
 msgid "Command failed"
 msgid "Command failed"
 msgstr ""
 msgstr ""
 
 
@@ -67,6 +70,9 @@ msgstr ""
 msgid "Download"
 msgid "Download"
 msgstr ""
 msgstr ""
 
 
+msgid "Download execution result"
+msgstr ""
+
 msgid "Failed to execute command!"
 msgid "Failed to execute command!"
 msgstr ""
 msgstr ""
 
 
@@ -76,12 +82,21 @@ msgstr ""
 msgid "Loading"
 msgid "Loading"
 msgstr ""
 msgstr ""
 
 
+msgid "Or display result"
+msgstr ""
+
 msgid "Public access"
 msgid "Public access"
 msgstr ""
 msgstr ""
 
 
 msgid "Run"
 msgid "Run"
 msgstr ""
 msgstr ""
 
 
+msgid "Standard Error"
+msgstr ""
+
+msgid "Standard Output"
+msgstr ""
+
 msgid ""
 msgid ""
 "This page allows you to configure custom shell commands which can be easily "
 "This page allows you to configure custom shell commands which can be easily "
 "invoked from the web interface."
 "invoked from the web interface."

+ 27 - 5
package/luci/applications/luci-app-commands/po/en/commands.po

@@ -1,19 +1,20 @@
 msgid ""
 msgid ""
 msgstr ""
 msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Last-Translator: Automatically generated\n"
+"Project-Id-Version: \n"
+"Last-Translator: INAGAKI Hiroshi <musashino.open@gmail.com>\n"
 "Language-Team: none\n"
 "Language-Team: none\n"
 "MIME-Version: 1.0\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"POT-Creation-Date: \n"
+"PO-Revision-Date: \n"
+"Language: en\n"
+"X-Generator: Poedit 1.8.11\n"
 
 
 msgid "A short textual description of the configured command"
 msgid "A short textual description of the configured command"
 msgstr "A short textual description of the configured command"
 msgstr "A short textual description of the configured command"
 
 
-msgid "Access command with"
-msgstr "Access command with"
-
 msgid ""
 msgid ""
 "Allow executing the command and downloading its output without prior "
 "Allow executing the command and downloading its output without prior "
 "authentication"
 "authentication"
@@ -39,6 +40,12 @@ msgstr "Collecting data..."
 msgid "Command"
 msgid "Command"
 msgstr "Command"
 msgstr "Command"
 
 
+msgid "Command executed successfully."
+msgstr "Command executed successfully."
+
+msgid "Command exited with status code"
+msgstr "Command exited with status code"
+
 msgid "Command failed"
 msgid "Command failed"
 msgstr "Command failed"
 msgstr "Command failed"
 
 
@@ -69,6 +76,9 @@ msgstr "Description"
 msgid "Download"
 msgid "Download"
 msgstr "Download"
 msgstr "Download"
 
 
+msgid "Download execution result"
+msgstr "Download execution result"
+
 msgid "Failed to execute command!"
 msgid "Failed to execute command!"
 msgstr "Failed to execute command!"
 msgstr "Failed to execute command!"
 
 
@@ -78,12 +88,21 @@ msgstr "Link"
 msgid "Loading"
 msgid "Loading"
 msgstr "Loading"
 msgstr "Loading"
 
 
+msgid "Or display result"
+msgstr "Or display result"
+
 msgid "Public access"
 msgid "Public access"
 msgstr "Public access"
 msgstr "Public access"
 
 
 msgid "Run"
 msgid "Run"
 msgstr "Run"
 msgstr "Run"
 
 
+msgid "Standard Error"
+msgstr "Standard Error"
+
+msgid "Standard Output"
+msgstr "Standard Output"
+
 msgid ""
 msgid ""
 "This page allows you to configure custom shell commands which can be easily "
 "This page allows you to configure custom shell commands which can be easily "
 "invoked from the web interface."
 "invoked from the web interface."
@@ -93,3 +112,6 @@ msgstr ""
 
 
 msgid "Waiting for command to complete..."
 msgid "Waiting for command to complete..."
 msgstr "Waiting for command to complete..."
 msgstr "Waiting for command to complete..."
+
+#~ msgid "Command exited with status code "
+#~ msgstr "Command exited with status code "

+ 21 - 3
package/luci/applications/luci-app-commands/po/es/commands.po

@@ -14,9 +14,6 @@ msgstr ""
 msgid "A short textual description of the configured command"
 msgid "A short textual description of the configured command"
 msgstr "Descripción breve del comando a configurar"
 msgstr "Descripción breve del comando a configurar"
 
 
-msgid "Access command with"
-msgstr "Acceder al comando con"
-
 msgid ""
 msgid ""
 "Allow executing the command and downloading its output without prior "
 "Allow executing the command and downloading its output without prior "
 "authentication"
 "authentication"
@@ -41,6 +38,12 @@ msgstr "Recuperando datos..."
 msgid "Command"
 msgid "Command"
 msgstr "Comando"
 msgstr "Comando"
 
 
+msgid "Command executed successfully."
+msgstr ""
+
+msgid "Command exited with status code"
+msgstr ""
+
 msgid "Command failed"
 msgid "Command failed"
 msgstr "Falló"
 msgstr "Falló"
 
 
@@ -71,6 +74,9 @@ msgstr "Descripción"
 msgid "Download"
 msgid "Download"
 msgstr "Descarga"
 msgstr "Descarga"
 
 
+msgid "Download execution result"
+msgstr ""
+
 msgid "Failed to execute command!"
 msgid "Failed to execute command!"
 msgstr "¡Error al ejecutar el comando!"
 msgstr "¡Error al ejecutar el comando!"
 
 
@@ -80,12 +86,21 @@ msgstr "Enlace"
 msgid "Loading"
 msgid "Loading"
 msgstr "Cargando"
 msgstr "Cargando"
 
 
+msgid "Or display result"
+msgstr ""
+
 msgid "Public access"
 msgid "Public access"
 msgstr "Acceso público"
 msgstr "Acceso público"
 
 
 msgid "Run"
 msgid "Run"
 msgstr "Ejecutar"
 msgstr "Ejecutar"
 
 
+msgid "Standard Error"
+msgstr ""
+
+msgid "Standard Output"
+msgstr ""
+
 msgid ""
 msgid ""
 "This page allows you to configure custom shell commands which can be easily "
 "This page allows you to configure custom shell commands which can be easily "
 "invoked from the web interface."
 "invoked from the web interface."
@@ -95,3 +110,6 @@ msgstr ""
 
 
 msgid "Waiting for command to complete..."
 msgid "Waiting for command to complete..."
 msgstr "Esperando a que termine el comando..."
 msgstr "Esperando a que termine el comando..."
+
+#~ msgid "Access command with"
+#~ msgstr "Acceder al comando con"

+ 21 - 3
package/luci/applications/luci-app-commands/po/fr/commands.po

@@ -14,9 +14,6 @@ msgstr ""
 msgid "A short textual description of the configured command"
 msgid "A short textual description of the configured command"
 msgstr "Une courte description de la commande configurée"
 msgstr "Une courte description de la commande configurée"
 
 
-msgid "Access command with"
-msgstr "Accéder à la commande par"
-
 msgid ""
 msgid ""
 "Allow executing the command and downloading its output without prior "
 "Allow executing the command and downloading its output without prior "
 "authentication"
 "authentication"
@@ -44,6 +41,12 @@ msgstr "Récupération des données ..."
 msgid "Command"
 msgid "Command"
 msgstr "Commande"
 msgstr "Commande"
 
 
+msgid "Command executed successfully."
+msgstr ""
+
+msgid "Command exited with status code"
+msgstr ""
+
 msgid "Command failed"
 msgid "Command failed"
 msgstr "Echec de la commande"
 msgstr "Echec de la commande"
 
 
@@ -74,6 +77,9 @@ msgstr "Description"
 msgid "Download"
 msgid "Download"
 msgstr "Télécharger"
 msgstr "Télécharger"
 
 
+msgid "Download execution result"
+msgstr ""
+
 msgid "Failed to execute command!"
 msgid "Failed to execute command!"
 msgstr "Echec de l'exécution de la commande ! "
 msgstr "Echec de l'exécution de la commande ! "
 
 
@@ -83,12 +89,21 @@ msgstr "Lien"
 msgid "Loading"
 msgid "Loading"
 msgstr "Chargement"
 msgstr "Chargement"
 
 
+msgid "Or display result"
+msgstr ""
+
 msgid "Public access"
 msgid "Public access"
 msgstr "Accès public"
 msgstr "Accès public"
 
 
 msgid "Run"
 msgid "Run"
 msgstr "Exécuter"
 msgstr "Exécuter"
 
 
+msgid "Standard Error"
+msgstr ""
+
+msgid "Standard Output"
+msgstr ""
+
 msgid ""
 msgid ""
 "This page allows you to configure custom shell commands which can be easily "
 "This page allows you to configure custom shell commands which can be easily "
 "invoked from the web interface."
 "invoked from the web interface."
@@ -98,3 +113,6 @@ msgstr ""
 
 
 msgid "Waiting for command to complete..."
 msgid "Waiting for command to complete..."
 msgstr "En attente de la commande pour finir..."
 msgstr "En attente de la commande pour finir..."
+
+#~ msgid "Access command with"
+#~ msgstr "Accéder à la commande par"

+ 18 - 3
package/luci/applications/luci-app-commands/po/he/commands.po

@@ -11,9 +11,6 @@ msgstr ""
 msgid "A short textual description of the configured command"
 msgid "A short textual description of the configured command"
 msgstr ""
 msgstr ""
 
 
-msgid "Access command with"
-msgstr ""
-
 msgid ""
 msgid ""
 "Allow executing the command and downloading its output without prior "
 "Allow executing the command and downloading its output without prior "
 "authentication"
 "authentication"
@@ -37,6 +34,12 @@ msgstr ""
 msgid "Command"
 msgid "Command"
 msgstr ""
 msgstr ""
 
 
+msgid "Command executed successfully."
+msgstr ""
+
+msgid "Command exited with status code"
+msgstr ""
+
 msgid "Command failed"
 msgid "Command failed"
 msgstr ""
 msgstr ""
 
 
@@ -67,6 +70,9 @@ msgstr ""
 msgid "Download"
 msgid "Download"
 msgstr ""
 msgstr ""
 
 
+msgid "Download execution result"
+msgstr ""
+
 msgid "Failed to execute command!"
 msgid "Failed to execute command!"
 msgstr ""
 msgstr ""
 
 
@@ -76,12 +82,21 @@ msgstr ""
 msgid "Loading"
 msgid "Loading"
 msgstr ""
 msgstr ""
 
 
+msgid "Or display result"
+msgstr ""
+
 msgid "Public access"
 msgid "Public access"
 msgstr ""
 msgstr ""
 
 
 msgid "Run"
 msgid "Run"
 msgstr ""
 msgstr ""
 
 
+msgid "Standard Error"
+msgstr ""
+
+msgid "Standard Output"
+msgstr ""
+
 msgid ""
 msgid ""
 "This page allows you to configure custom shell commands which can be easily "
 "This page allows you to configure custom shell commands which can be easily "
 "invoked from the web interface."
 "invoked from the web interface."

+ 21 - 3
package/luci/applications/luci-app-commands/po/hu/commands.po

@@ -14,9 +14,6 @@ msgstr ""
 msgid "A short textual description of the configured command"
 msgid "A short textual description of the configured command"
 msgstr "A beállított parancs rövid szöveges leírása"
 msgstr "A beállított parancs rövid szöveges leírása"
 
 
-msgid "Access command with"
-msgstr "Parancs hozzáférése"
-
 msgid ""
 msgid ""
 "Allow executing the command and downloading its output without prior "
 "Allow executing the command and downloading its output without prior "
 "authentication"
 "authentication"
@@ -42,6 +39,12 @@ msgstr "Adatgyűjtés..."
 msgid "Command"
 msgid "Command"
 msgstr "Paracs"
 msgstr "Paracs"
 
 
+msgid "Command executed successfully."
+msgstr ""
+
+msgid "Command exited with status code"
+msgstr ""
+
 msgid "Command failed"
 msgid "Command failed"
 msgstr "Parancs végrehajtás sikertelen"
 msgstr "Parancs végrehajtás sikertelen"
 
 
@@ -72,6 +75,9 @@ msgstr "Leírás"
 msgid "Download"
 msgid "Download"
 msgstr "Letöltés"
 msgstr "Letöltés"
 
 
+msgid "Download execution result"
+msgstr ""
+
 msgid "Failed to execute command!"
 msgid "Failed to execute command!"
 msgstr "Parancs végrehajtása sikertelen!"
 msgstr "Parancs végrehajtása sikertelen!"
 
 
@@ -81,12 +87,21 @@ msgstr "Link"
 msgid "Loading"
 msgid "Loading"
 msgstr "Betöltés"
 msgstr "Betöltés"
 
 
+msgid "Or display result"
+msgstr ""
+
 msgid "Public access"
 msgid "Public access"
 msgstr "Nyilvános hozzáférés"
 msgstr "Nyilvános hozzáférés"
 
 
 msgid "Run"
 msgid "Run"
 msgstr "Futtatás"
 msgstr "Futtatás"
 
 
+msgid "Standard Error"
+msgstr ""
+
+msgid "Standard Output"
+msgstr ""
+
 msgid ""
 msgid ""
 "This page allows you to configure custom shell commands which can be easily "
 "This page allows you to configure custom shell commands which can be easily "
 "invoked from the web interface."
 "invoked from the web interface."
@@ -96,3 +111,6 @@ msgstr ""
 
 
 msgid "Waiting for command to complete..."
 msgid "Waiting for command to complete..."
 msgstr "Várakozás a parancs befejezésére..."
 msgstr "Várakozás a parancs befejezésére..."
+
+#~ msgid "Access command with"
+#~ msgstr "Parancs hozzáférése"

+ 21 - 3
package/luci/applications/luci-app-commands/po/it/commands.po

@@ -14,9 +14,6 @@ msgstr ""
 msgid "A short textual description of the configured command"
 msgid "A short textual description of the configured command"
 msgstr "Una breve descrizione testuale del comando configurato"
 msgstr "Una breve descrizione testuale del comando configurato"
 
 
-msgid "Access command with"
-msgstr "Accesso comando con"
-
 msgid ""
 msgid ""
 "Allow executing the command and downloading its output without prior "
 "Allow executing the command and downloading its output without prior "
 "authentication"
 "authentication"
@@ -43,6 +40,12 @@ msgstr "Raccolta dei dati..."
 msgid "Command"
 msgid "Command"
 msgstr "Comando"
 msgstr "Comando"
 
 
+msgid "Command executed successfully."
+msgstr ""
+
+msgid "Command exited with status code"
+msgstr ""
+
 msgid "Command failed"
 msgid "Command failed"
 msgstr "Comando fallito"
 msgstr "Comando fallito"
 
 
@@ -73,6 +76,9 @@ msgstr "Descrizione"
 msgid "Download"
 msgid "Download"
 msgstr "Download"
 msgstr "Download"
 
 
+msgid "Download execution result"
+msgstr ""
+
 msgid "Failed to execute command!"
 msgid "Failed to execute command!"
 msgstr "Impossibile eseguire il comando!"
 msgstr "Impossibile eseguire il comando!"
 
 
@@ -82,12 +88,21 @@ msgstr "Collegamento"
 msgid "Loading"
 msgid "Loading"
 msgstr "Caricamento"
 msgstr "Caricamento"
 
 
+msgid "Or display result"
+msgstr ""
+
 msgid "Public access"
 msgid "Public access"
 msgstr "Accesso Pubblico"
 msgstr "Accesso Pubblico"
 
 
 msgid "Run"
 msgid "Run"
 msgstr "Esegui"
 msgstr "Esegui"
 
 
+msgid "Standard Error"
+msgstr ""
+
+msgid "Standard Output"
+msgstr ""
+
 msgid ""
 msgid ""
 "This page allows you to configure custom shell commands which can be easily "
 "This page allows you to configure custom shell commands which can be easily "
 "invoked from the web interface."
 "invoked from the web interface."
@@ -97,3 +112,6 @@ msgstr ""
 
 
 msgid "Waiting for command to complete..."
 msgid "Waiting for command to complete..."
 msgstr "In attesa del comando da completare..."
 msgstr "In attesa del comando da completare..."
+
+#~ msgid "Access command with"
+#~ msgstr "Accesso comando con"

+ 22 - 4
package/luci/applications/luci-app-commands/po/ja/commands.po

@@ -1,7 +1,7 @@
 msgid ""
 msgid ""
 msgstr ""
 msgstr ""
 "Project-Id-Version: \n"
 "Project-Id-Version: \n"
-"PO-Revision-Date: 2016-12-21 11:59+0900\n"
+"PO-Revision-Date: 2017-01-21 18:09+0900\n"
 "Last-Translator: INAGAKI Hiroshi <musashino.open@gmail.com>\n"
 "Last-Translator: INAGAKI Hiroshi <musashino.open@gmail.com>\n"
 "Language-Team: none\n"
 "Language-Team: none\n"
 "Language: ja\n"
 "Language: ja\n"
@@ -15,9 +15,6 @@ msgstr ""
 msgid "A short textual description of the configured command"
 msgid "A short textual description of the configured command"
 msgstr "設定したコマンドの簡単な説明文を記載します"
 msgstr "設定したコマンドの簡単な説明文を記載します"
 
 
-msgid "Access command with"
-msgstr "コマンドへのアクセス"
-
 msgid ""
 msgid ""
 "Allow executing the command and downloading its output without prior "
 "Allow executing the command and downloading its output without prior "
 "authentication"
 "authentication"
@@ -41,6 +38,12 @@ msgstr "データ収集中です..."
 msgid "Command"
 msgid "Command"
 msgstr "コマンド"
 msgstr "コマンド"
 
 
+msgid "Command executed successfully."
+msgstr "コマンドの実行に成功しました。"
+
+msgid "Command exited with status code"
+msgstr "コマンドは次のステータス コードで終了しました:"
+
 msgid "Command failed"
 msgid "Command failed"
 msgstr "コマンド失敗"
 msgstr "コマンド失敗"
 
 
@@ -71,6 +74,9 @@ msgstr "説明"
 msgid "Download"
 msgid "Download"
 msgstr "ダウンロード"
 msgstr "ダウンロード"
 
 
+msgid "Download execution result"
+msgstr "実行結果のダウンロード:"
+
 msgid "Failed to execute command!"
 msgid "Failed to execute command!"
 msgstr "コマンドの実行に失敗しました!"
 msgstr "コマンドの実行に失敗しました!"
 
 
@@ -80,12 +86,21 @@ msgstr "リンク"
 msgid "Loading"
 msgid "Loading"
 msgstr "読み込み中"
 msgstr "読み込み中"
 
 
+msgid "Or display result"
+msgstr "または結果の表示:"
+
 msgid "Public access"
 msgid "Public access"
 msgstr "パブリック・アクセス"
 msgstr "パブリック・アクセス"
 
 
 msgid "Run"
 msgid "Run"
 msgstr "実行"
 msgstr "実行"
 
 
+msgid "Standard Error"
+msgstr "標準エラー"
+
+msgid "Standard Output"
+msgstr "標準出力"
+
 msgid ""
 msgid ""
 "This page allows you to configure custom shell commands which can be easily "
 "This page allows you to configure custom shell commands which can be easily "
 "invoked from the web interface."
 "invoked from the web interface."
@@ -95,3 +110,6 @@ msgstr ""
 
 
 msgid "Waiting for command to complete..."
 msgid "Waiting for command to complete..."
 msgstr "コマンド実行中です..."
 msgstr "コマンド実行中です..."
+
+#~ msgid "Access command with"
+#~ msgstr "コマンドへのアクセス"

+ 18 - 3
package/luci/applications/luci-app-commands/po/ms/commands.po

@@ -10,9 +10,6 @@ msgstr ""
 msgid "A short textual description of the configured command"
 msgid "A short textual description of the configured command"
 msgstr ""
 msgstr ""
 
 
-msgid "Access command with"
-msgstr ""
-
 msgid ""
 msgid ""
 "Allow executing the command and downloading its output without prior "
 "Allow executing the command and downloading its output without prior "
 "authentication"
 "authentication"
@@ -36,6 +33,12 @@ msgstr ""
 msgid "Command"
 msgid "Command"
 msgstr ""
 msgstr ""
 
 
+msgid "Command executed successfully."
+msgstr ""
+
+msgid "Command exited with status code"
+msgstr ""
+
 msgid "Command failed"
 msgid "Command failed"
 msgstr ""
 msgstr ""
 
 
@@ -66,6 +69,9 @@ msgstr ""
 msgid "Download"
 msgid "Download"
 msgstr ""
 msgstr ""
 
 
+msgid "Download execution result"
+msgstr ""
+
 msgid "Failed to execute command!"
 msgid "Failed to execute command!"
 msgstr ""
 msgstr ""
 
 
@@ -75,12 +81,21 @@ msgstr ""
 msgid "Loading"
 msgid "Loading"
 msgstr ""
 msgstr ""
 
 
+msgid "Or display result"
+msgstr ""
+
 msgid "Public access"
 msgid "Public access"
 msgstr ""
 msgstr ""
 
 
 msgid "Run"
 msgid "Run"
 msgstr ""
 msgstr ""
 
 
+msgid "Standard Error"
+msgstr ""
+
+msgid "Standard Output"
+msgstr ""
+
 msgid ""
 msgid ""
 "This page allows you to configure custom shell commands which can be easily "
 "This page allows you to configure custom shell commands which can be easily "
 "invoked from the web interface."
 "invoked from the web interface."

+ 21 - 3
package/luci/applications/luci-app-commands/po/no/commands.po

@@ -14,9 +14,6 @@ msgstr ""
 msgid "A short textual description of the configured command"
 msgid "A short textual description of the configured command"
 msgstr "En kort tekstlig beskrivelse av den konfigurerte kommandoen"
 msgstr "En kort tekstlig beskrivelse av den konfigurerte kommandoen"
 
 
-msgid "Access command with"
-msgstr "Åpne kommandoen med"
-
 msgid ""
 msgid ""
 "Allow executing the command and downloading its output without prior "
 "Allow executing the command and downloading its output without prior "
 "authentication"
 "authentication"
@@ -42,6 +39,12 @@ msgstr "Henter data..."
 msgid "Command"
 msgid "Command"
 msgstr "Kommando"
 msgstr "Kommando"
 
 
+msgid "Command executed successfully."
+msgstr ""
+
+msgid "Command exited with status code"
+msgstr ""
+
 msgid "Command failed"
 msgid "Command failed"
 msgstr "Kommando feilet"
 msgstr "Kommando feilet"
 
 
@@ -72,6 +75,9 @@ msgstr "Beskrivelse"
 msgid "Download"
 msgid "Download"
 msgstr "Nedlasting"
 msgstr "Nedlasting"
 
 
+msgid "Download execution result"
+msgstr ""
+
 msgid "Failed to execute command!"
 msgid "Failed to execute command!"
 msgstr "Kunne ikke utføre kommandoen!"
 msgstr "Kunne ikke utføre kommandoen!"
 
 
@@ -81,12 +87,21 @@ msgstr "Link"
 msgid "Loading"
 msgid "Loading"
 msgstr "Laster"
 msgstr "Laster"
 
 
+msgid "Or display result"
+msgstr ""
+
 msgid "Public access"
 msgid "Public access"
 msgstr "Tilgjengelig for alle"
 msgstr "Tilgjengelig for alle"
 
 
 msgid "Run"
 msgid "Run"
 msgstr "Kjør"
 msgstr "Kjør"
 
 
+msgid "Standard Error"
+msgstr ""
+
+msgid "Standard Output"
+msgstr ""
+
 msgid ""
 msgid ""
 "This page allows you to configure custom shell commands which can be easily "
 "This page allows you to configure custom shell commands which can be easily "
 "invoked from the web interface."
 "invoked from the web interface."
@@ -96,3 +111,6 @@ msgstr ""
 
 
 msgid "Waiting for command to complete..."
 msgid "Waiting for command to complete..."
 msgstr "Venter på at kommandoen fullføres..."
 msgstr "Venter på at kommandoen fullføres..."
+
+#~ msgid "Access command with"
+#~ msgstr "Åpne kommandoen med"

+ 21 - 3
package/luci/applications/luci-app-commands/po/pl/commands.po

@@ -15,9 +15,6 @@ msgstr ""
 msgid "A short textual description of the configured command"
 msgid "A short textual description of the configured command"
 msgstr "Krótki opis konfigurowanej komendy"
 msgstr "Krótki opis konfigurowanej komendy"
 
 
-msgid "Access command with"
-msgstr "Dostęp do komendy przez"
-
 msgid ""
 msgid ""
 "Allow executing the command and downloading its output without prior "
 "Allow executing the command and downloading its output without prior "
 "authentication"
 "authentication"
@@ -43,6 +40,12 @@ msgstr "Zbieram dane:"
 msgid "Command"
 msgid "Command"
 msgstr "Komenda"
 msgstr "Komenda"
 
 
+msgid "Command executed successfully."
+msgstr ""
+
+msgid "Command exited with status code"
+msgstr ""
+
 msgid "Command failed"
 msgid "Command failed"
 msgstr "Zła komenda"
 msgstr "Zła komenda"
 
 
@@ -73,6 +76,9 @@ msgstr "Opis"
 msgid "Download"
 msgid "Download"
 msgstr "Download"
 msgstr "Download"
 
 
+msgid "Download execution result"
+msgstr ""
+
 msgid "Failed to execute command!"
 msgid "Failed to execute command!"
 msgstr "Nie można wykonać komendy!"
 msgstr "Nie można wykonać komendy!"
 
 
@@ -82,12 +88,21 @@ msgstr "Łącze"
 msgid "Loading"
 msgid "Loading"
 msgstr "Ładowanie"
 msgstr "Ładowanie"
 
 
+msgid "Or display result"
+msgstr ""
+
 msgid "Public access"
 msgid "Public access"
 msgstr "Publiczny dostęp"
 msgstr "Publiczny dostęp"
 
 
 msgid "Run"
 msgid "Run"
 msgstr "Uruchom"
 msgstr "Uruchom"
 
 
+msgid "Standard Error"
+msgstr ""
+
+msgid "Standard Output"
+msgstr ""
+
 msgid ""
 msgid ""
 "This page allows you to configure custom shell commands which can be easily "
 "This page allows you to configure custom shell commands which can be easily "
 "invoked from the web interface."
 "invoked from the web interface."
@@ -97,3 +112,6 @@ msgstr ""
 
 
 msgid "Waiting for command to complete..."
 msgid "Waiting for command to complete..."
 msgstr "Czekanie na wykonanie komendy..."
 msgstr "Czekanie na wykonanie komendy..."
+
+#~ msgid "Access command with"
+#~ msgstr "Dostęp do komendy przez"

+ 20 - 20
package/luci/applications/luci-app-commands/po/pt-br/commands.po

@@ -15,9 +15,6 @@ msgstr ""
 msgid "A short textual description of the configured command"
 msgid "A short textual description of the configured command"
 msgstr "Uma pequena descrição textual do comando configurado"
 msgstr "Uma pequena descrição textual do comando configurado"
 
 
-msgid "Access command with"
-msgstr "Acessar o comando com"
-
 msgid ""
 msgid ""
 "Allow executing the command and downloading its output without prior "
 "Allow executing the command and downloading its output without prior "
 "authentication"
 "authentication"
@@ -43,6 +40,12 @@ msgstr "Adquirindo dados..."
 msgid "Command"
 msgid "Command"
 msgstr "Comando"
 msgstr "Comando"
 
 
+msgid "Command executed successfully."
+msgstr "O comando executou com sucesso."
+
+msgid "Command exited with status code"
+msgstr "O comando encerrou com um estado de erro"
+
 msgid "Command failed"
 msgid "Command failed"
 msgstr "O comando falhou"
 msgstr "O comando falhou"
 
 
@@ -73,6 +76,9 @@ msgstr "Descrição"
 msgid "Download"
 msgid "Download"
 msgstr "Baixar"
 msgstr "Baixar"
 
 
+msgid "Download execution result"
+msgstr "Baixar os resultados da execução"
+
 msgid "Failed to execute command!"
 msgid "Failed to execute command!"
 msgstr "Falha ao executar comando!"
 msgstr "Falha ao executar comando!"
 
 
@@ -82,12 +88,21 @@ msgstr "Endereço"
 msgid "Loading"
 msgid "Loading"
 msgstr "Carregando"
 msgstr "Carregando"
 
 
+msgid "Or display result"
+msgstr "Ou mostre o resultado"
+
 msgid "Public access"
 msgid "Public access"
 msgstr "Acesso público"
 msgstr "Acesso público"
 
 
 msgid "Run"
 msgid "Run"
 msgstr "Executar"
 msgstr "Executar"
 
 
+msgid "Standard Error"
+msgstr "Saída de Erro"
+
+msgid "Standard Output"
+msgstr "Saída Padrão"
+
 msgid ""
 msgid ""
 "This page allows you to configure custom shell commands which can be easily "
 "This page allows you to configure custom shell commands which can be easily "
 "invoked from the web interface."
 "invoked from the web interface."
@@ -98,20 +113,5 @@ msgstr ""
 msgid "Waiting for command to complete..."
 msgid "Waiting for command to complete..."
 msgstr "Aguardando a conclusão do comando..."
 msgstr "Aguardando a conclusão do comando..."
 
 
-#~ msgid "Command executed successfully."
-#~ msgstr "O comando executou com sucesso."
-
-#~ msgid "Command exited with status code"
-#~ msgstr "O comando encerrou com um estado de erro"
-
-#~ msgid "Download execution result"
-#~ msgstr "Baixar os resultados da execução"
-
-#~ msgid "Or display result"
-#~ msgstr "Ou mostre o resultado"
-
-#~ msgid "Standard Error"
-#~ msgstr "Saída de Erro"
-
-#~ msgid "Standard Output"
-#~ msgstr "Saída Padrão"
+#~ msgid "Access command with"
+#~ msgstr "Acessar o comando com"

+ 21 - 3
package/luci/applications/luci-app-commands/po/pt/commands.po

@@ -14,9 +14,6 @@ msgstr ""
 msgid "A short textual description of the configured command"
 msgid "A short textual description of the configured command"
 msgstr "Uma pequena descrição textual do comando configurado"
 msgstr "Uma pequena descrição textual do comando configurado"
 
 
-msgid "Access command with"
-msgstr "Aceder ao comando com"
-
 msgid ""
 msgid ""
 "Allow executing the command and downloading its output without prior "
 "Allow executing the command and downloading its output without prior "
 "authentication"
 "authentication"
@@ -43,6 +40,12 @@ msgstr "A obter dados..."
 msgid "Command"
 msgid "Command"
 msgstr "Comando"
 msgstr "Comando"
 
 
+msgid "Command executed successfully."
+msgstr ""
+
+msgid "Command exited with status code"
+msgstr ""
+
 msgid "Command failed"
 msgid "Command failed"
 msgstr "O comando falhou"
 msgstr "O comando falhou"
 
 
@@ -73,6 +76,9 @@ msgstr "Descrição"
 msgid "Download"
 msgid "Download"
 msgstr "Descarregar"
 msgstr "Descarregar"
 
 
+msgid "Download execution result"
+msgstr ""
+
 msgid "Failed to execute command!"
 msgid "Failed to execute command!"
 msgstr "Falha ao executar comando!"
 msgstr "Falha ao executar comando!"
 
 
@@ -82,12 +88,21 @@ msgstr "Link"
 msgid "Loading"
 msgid "Loading"
 msgstr "A carregar"
 msgstr "A carregar"
 
 
+msgid "Or display result"
+msgstr ""
+
 msgid "Public access"
 msgid "Public access"
 msgstr "Acesso público"
 msgstr "Acesso público"
 
 
 msgid "Run"
 msgid "Run"
 msgstr "Executar"
 msgstr "Executar"
 
 
+msgid "Standard Error"
+msgstr ""
+
+msgid "Standard Output"
+msgstr ""
+
 msgid ""
 msgid ""
 "This page allows you to configure custom shell commands which can be easily "
 "This page allows you to configure custom shell commands which can be easily "
 "invoked from the web interface."
 "invoked from the web interface."
@@ -97,3 +112,6 @@ msgstr ""
 
 
 msgid "Waiting for command to complete..."
 msgid "Waiting for command to complete..."
 msgstr "A aguardar que o comando termine..."
 msgstr "A aguardar que o comando termine..."
+
+#~ msgid "Access command with"
+#~ msgstr "Aceder ao comando com"

+ 21 - 3
package/luci/applications/luci-app-commands/po/ro/commands.po

@@ -15,9 +15,6 @@ msgstr ""
 msgid "A short textual description of the configured command"
 msgid "A short textual description of the configured command"
 msgstr "O scurta descriere textuala a comenzii configurate"
 msgstr "O scurta descriere textuala a comenzii configurate"
 
 
-msgid "Access command with"
-msgstr "Acces la comanda cu"
-
 msgid ""
 msgid ""
 "Allow executing the command and downloading its output without prior "
 "Allow executing the command and downloading its output without prior "
 "authentication"
 "authentication"
@@ -43,6 +40,12 @@ msgstr "Colectare date..."
 msgid "Command"
 msgid "Command"
 msgstr "Comandă"
 msgstr "Comandă"
 
 
+msgid "Command executed successfully."
+msgstr ""
+
+msgid "Command exited with status code"
+msgstr ""
+
 msgid "Command failed"
 msgid "Command failed"
 msgstr "Comandă eşuată"
 msgstr "Comandă eşuată"
 
 
@@ -73,6 +76,9 @@ msgstr "Descriere"
 msgid "Download"
 msgid "Download"
 msgstr "Descarca"
 msgstr "Descarca"
 
 
+msgid "Download execution result"
+msgstr ""
+
 msgid "Failed to execute command!"
 msgid "Failed to execute command!"
 msgstr "S-a esuat executarea comenzii!!"
 msgstr "S-a esuat executarea comenzii!!"
 
 
@@ -82,12 +88,21 @@ msgstr "Link"
 msgid "Loading"
 msgid "Loading"
 msgstr "Se incarca"
 msgstr "Se incarca"
 
 
+msgid "Or display result"
+msgstr ""
+
 msgid "Public access"
 msgid "Public access"
 msgstr "Access public"
 msgstr "Access public"
 
 
 msgid "Run"
 msgid "Run"
 msgstr "Ruleaza"
 msgstr "Ruleaza"
 
 
+msgid "Standard Error"
+msgstr ""
+
+msgid "Standard Output"
+msgstr ""
+
 msgid ""
 msgid ""
 "This page allows you to configure custom shell commands which can be easily "
 "This page allows you to configure custom shell commands which can be easily "
 "invoked from the web interface."
 "invoked from the web interface."
@@ -97,3 +112,6 @@ msgstr ""
 
 
 msgid "Waiting for command to complete..."
 msgid "Waiting for command to complete..."
 msgstr "Astept finalizarea comenzii..."
 msgstr "Astept finalizarea comenzii..."
+
+#~ msgid "Access command with"
+#~ msgstr "Acces la comanda cu"

+ 21 - 3
package/luci/applications/luci-app-commands/po/ru/commands.po

@@ -15,9 +15,6 @@ msgstr ""
 msgid "A short textual description of the configured command"
 msgid "A short textual description of the configured command"
 msgstr "Короткое текстовое описание команды"
 msgstr "Короткое текстовое описание команды"
 
 
-msgid "Access command with"
-msgstr "Доступ к команде через"
-
 #, fuzzy
 #, fuzzy
 msgid ""
 msgid ""
 "Allow executing the command and downloading its output without prior "
 "Allow executing the command and downloading its output without prior "
@@ -46,6 +43,12 @@ msgstr "Сбор данных..."
 msgid "Command"
 msgid "Command"
 msgstr "Команда"
 msgstr "Команда"
 
 
+msgid "Command executed successfully."
+msgstr ""
+
+msgid "Command exited with status code"
+msgstr ""
+
 msgid "Command failed"
 msgid "Command failed"
 msgstr "Команда не выполнена"
 msgstr "Команда не выполнена"
 
 
@@ -76,6 +79,9 @@ msgstr "Описание"
 msgid "Download"
 msgid "Download"
 msgstr "Скачать"
 msgstr "Скачать"
 
 
+msgid "Download execution result"
+msgstr ""
+
 msgid "Failed to execute command!"
 msgid "Failed to execute command!"
 msgstr "Ошибка выполнения команды!"
 msgstr "Ошибка выполнения команды!"
 
 
@@ -85,12 +91,21 @@ msgstr "Ссылка"
 msgid "Loading"
 msgid "Loading"
 msgstr "Загрузка"
 msgstr "Загрузка"
 
 
+msgid "Or display result"
+msgstr ""
+
 msgid "Public access"
 msgid "Public access"
 msgstr "Публичный доступ"
 msgstr "Публичный доступ"
 
 
 msgid "Run"
 msgid "Run"
 msgstr "Запуск"
 msgstr "Запуск"
 
 
+msgid "Standard Error"
+msgstr ""
+
+msgid "Standard Output"
+msgstr ""
+
 msgid ""
 msgid ""
 "This page allows you to configure custom shell commands which can be easily "
 "This page allows you to configure custom shell commands which can be easily "
 "invoked from the web interface."
 "invoked from the web interface."
@@ -100,3 +115,6 @@ msgstr ""
 
 
 msgid "Waiting for command to complete..."
 msgid "Waiting for command to complete..."
 msgstr "Ожидание завершения команды..."
 msgstr "Ожидание завершения команды..."
+
+#~ msgid "Access command with"
+#~ msgstr "Доступ к команде через"

+ 18 - 3
package/luci/applications/luci-app-commands/po/sk/commands.po

@@ -11,9 +11,6 @@ msgstr ""
 msgid "A short textual description of the configured command"
 msgid "A short textual description of the configured command"
 msgstr ""
 msgstr ""
 
 
-msgid "Access command with"
-msgstr ""
-
 msgid ""
 msgid ""
 "Allow executing the command and downloading its output without prior "
 "Allow executing the command and downloading its output without prior "
 "authentication"
 "authentication"
@@ -37,6 +34,12 @@ msgstr ""
 msgid "Command"
 msgid "Command"
 msgstr ""
 msgstr ""
 
 
+msgid "Command executed successfully."
+msgstr ""
+
+msgid "Command exited with status code"
+msgstr ""
+
 msgid "Command failed"
 msgid "Command failed"
 msgstr ""
 msgstr ""
 
 
@@ -67,6 +70,9 @@ msgstr ""
 msgid "Download"
 msgid "Download"
 msgstr ""
 msgstr ""
 
 
+msgid "Download execution result"
+msgstr ""
+
 msgid "Failed to execute command!"
 msgid "Failed to execute command!"
 msgstr ""
 msgstr ""
 
 
@@ -76,12 +82,21 @@ msgstr ""
 msgid "Loading"
 msgid "Loading"
 msgstr ""
 msgstr ""
 
 
+msgid "Or display result"
+msgstr ""
+
 msgid "Public access"
 msgid "Public access"
 msgstr ""
 msgstr ""
 
 
 msgid "Run"
 msgid "Run"
 msgstr ""
 msgstr ""
 
 
+msgid "Standard Error"
+msgstr ""
+
+msgid "Standard Output"
+msgstr ""
+
 msgid ""
 msgid ""
 "This page allows you to configure custom shell commands which can be easily "
 "This page allows you to configure custom shell commands which can be easily "
 "invoked from the web interface."
 "invoked from the web interface."

+ 45 - 26
package/luci/applications/luci-app-commands/po/sv/commands.po

@@ -10,83 +10,102 @@ msgstr ""
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
 
 msgid "A short textual description of the configured command"
 msgid "A short textual description of the configured command"
-msgstr ""
-
-msgid "Access command with"
-msgstr ""
+msgstr "En kort textuell beskrivning av det inställda kommandot"
 
 
 msgid ""
 msgid ""
 "Allow executing the command and downloading its output without prior "
 "Allow executing the command and downloading its output without prior "
 "authentication"
 "authentication"
 msgstr ""
 msgstr ""
+"Tillåt att kommandot kan köras och ladda ner dess utmatning utan föregående "
+"autentisering"
 
 
 msgid "Allow the user to provide additional command line arguments"
 msgid "Allow the user to provide additional command line arguments"
-msgstr ""
+msgstr "Tillåt användaren att tillge extra kommandoradsargument"
 
 
 msgid "Arguments:"
 msgid "Arguments:"
-msgstr ""
+msgstr "Argument:"
 
 
 msgid "Binary data not displayed, download instead."
 msgid "Binary data not displayed, download instead."
-msgstr ""
+msgstr "Binärdatan visades inte, ladda ner istället."
 
 
 msgid "Code:"
 msgid "Code:"
-msgstr ""
+msgstr "Kod:"
 
 
 msgid "Collecting data..."
 msgid "Collecting data..."
-msgstr ""
+msgstr "Samlar in data..."
 
 
 msgid "Command"
 msgid "Command"
-msgstr ""
+msgstr "Kommando"
+
+msgid "Command executed successfully."
+msgstr "Kommandot utfördes korrekt"
+
+msgid "Command exited with status code"
+msgstr "Kommandot avslutade med statuskod"
 
 
 msgid "Command failed"
 msgid "Command failed"
-msgstr ""
+msgstr "Kommandot misslyckades"
 
 
 msgid "Command line to execute"
 msgid "Command line to execute"
-msgstr ""
+msgstr "Kommandorad att exekvera"
 
 
 msgid "Command successful"
 msgid "Command successful"
-msgstr ""
+msgstr "Kommandot lyckades"
 
 
 msgid "Command:"
 msgid "Command:"
-msgstr ""
+msgstr "Kommando:"
 
 
 msgid "Configure"
 msgid "Configure"
-msgstr ""
+msgstr "Ställ in"
 
 
 msgid "Custom Commands"
 msgid "Custom Commands"
-msgstr ""
+msgstr "Anpassade kommandon"
 
 
 msgid "Custom arguments"
 msgid "Custom arguments"
-msgstr ""
+msgstr "Anpassade argument"
 
 
 msgid "Dashboard"
 msgid "Dashboard"
-msgstr ""
+msgstr "Instrumentpanel"
 
 
 msgid "Description"
 msgid "Description"
-msgstr ""
+msgstr "Beskrivning"
 
 
 msgid "Download"
 msgid "Download"
-msgstr ""
+msgstr "Ladda ner"
+
+msgid "Download execution result"
+msgstr "Resultatet av nerladdningen"
 
 
 msgid "Failed to execute command!"
 msgid "Failed to execute command!"
-msgstr ""
+msgstr "Misslyckade med att köra kommando!"
 
 
 msgid "Link"
 msgid "Link"
-msgstr ""
+msgstr "Länk"
 
 
 msgid "Loading"
 msgid "Loading"
-msgstr ""
+msgstr "Laddar"
+
+msgid "Or display result"
+msgstr "Eller visa resultat"
 
 
 msgid "Public access"
 msgid "Public access"
-msgstr ""
+msgstr "Publik tillgång"
 
 
 msgid "Run"
 msgid "Run"
-msgstr ""
+msgstr "Kör"
+
+msgid "Standard Error"
+msgstr "Standardfel"
+
+msgid "Standard Output"
+msgstr "Standardinmatning"
 
 
 msgid ""
 msgid ""
 "This page allows you to configure custom shell commands which can be easily "
 "This page allows you to configure custom shell commands which can be easily "
 "invoked from the web interface."
 "invoked from the web interface."
 msgstr ""
 msgstr ""
+"Den här sidan tillåter dig att ställa in anpassade skalkommandon som lättast "
+"kan åberopas från webbgränssnittet."
 
 
 msgid "Waiting for command to complete..."
 msgid "Waiting for command to complete..."
-msgstr ""
+msgstr "Väntar på att kommandot ska slutföras..."

+ 18 - 3
package/luci/applications/luci-app-commands/po/templates/commands.pot

@@ -4,9 +4,6 @@ msgstr "Content-Type: text/plain; charset=UTF-8"
 msgid "A short textual description of the configured command"
 msgid "A short textual description of the configured command"
 msgstr ""
 msgstr ""
 
 
-msgid "Access command with"
-msgstr ""
-
 msgid ""
 msgid ""
 "Allow executing the command and downloading its output without prior "
 "Allow executing the command and downloading its output without prior "
 "authentication"
 "authentication"
@@ -30,6 +27,12 @@ msgstr ""
 msgid "Command"
 msgid "Command"
 msgstr ""
 msgstr ""
 
 
+msgid "Command executed successfully."
+msgstr ""
+
+msgid "Command exited with status code"
+msgstr ""
+
 msgid "Command failed"
 msgid "Command failed"
 msgstr ""
 msgstr ""
 
 
@@ -60,6 +63,9 @@ msgstr ""
 msgid "Download"
 msgid "Download"
 msgstr ""
 msgstr ""
 
 
+msgid "Download execution result"
+msgstr ""
+
 msgid "Failed to execute command!"
 msgid "Failed to execute command!"
 msgstr ""
 msgstr ""
 
 
@@ -69,12 +75,21 @@ msgstr ""
 msgid "Loading"
 msgid "Loading"
 msgstr ""
 msgstr ""
 
 
+msgid "Or display result"
+msgstr ""
+
 msgid "Public access"
 msgid "Public access"
 msgstr ""
 msgstr ""
 
 
 msgid "Run"
 msgid "Run"
 msgstr ""
 msgstr ""
 
 
+msgid "Standard Error"
+msgstr ""
+
+msgid "Standard Output"
+msgstr ""
+
 msgid ""
 msgid ""
 "This page allows you to configure custom shell commands which can be easily "
 "This page allows you to configure custom shell commands which can be easily "
 "invoked from the web interface."
 "invoked from the web interface."

+ 18 - 3
package/luci/applications/luci-app-commands/po/tr/commands.po

@@ -11,9 +11,6 @@ msgstr ""
 msgid "A short textual description of the configured command"
 msgid "A short textual description of the configured command"
 msgstr ""
 msgstr ""
 
 
-msgid "Access command with"
-msgstr ""
-
 msgid ""
 msgid ""
 "Allow executing the command and downloading its output without prior "
 "Allow executing the command and downloading its output without prior "
 "authentication"
 "authentication"
@@ -37,6 +34,12 @@ msgstr ""
 msgid "Command"
 msgid "Command"
 msgstr ""
 msgstr ""
 
 
+msgid "Command executed successfully."
+msgstr ""
+
+msgid "Command exited with status code"
+msgstr ""
+
 msgid "Command failed"
 msgid "Command failed"
 msgstr ""
 msgstr ""
 
 
@@ -67,6 +70,9 @@ msgstr ""
 msgid "Download"
 msgid "Download"
 msgstr ""
 msgstr ""
 
 
+msgid "Download execution result"
+msgstr ""
+
 msgid "Failed to execute command!"
 msgid "Failed to execute command!"
 msgstr ""
 msgstr ""
 
 
@@ -76,12 +82,21 @@ msgstr ""
 msgid "Loading"
 msgid "Loading"
 msgstr ""
 msgstr ""
 
 
+msgid "Or display result"
+msgstr ""
+
 msgid "Public access"
 msgid "Public access"
 msgstr ""
 msgstr ""
 
 
 msgid "Run"
 msgid "Run"
 msgstr ""
 msgstr ""
 
 
+msgid "Standard Error"
+msgstr ""
+
+msgid "Standard Output"
+msgstr ""
+
 msgid ""
 msgid ""
 "This page allows you to configure custom shell commands which can be easily "
 "This page allows you to configure custom shell commands which can be easily "
 "invoked from the web interface."
 "invoked from the web interface."

+ 18 - 3
package/luci/applications/luci-app-commands/po/uk/commands.po

@@ -16,9 +16,6 @@ msgstr ""
 msgid "A short textual description of the configured command"
 msgid "A short textual description of the configured command"
 msgstr "Короткий опис команд налаштування"
 msgstr "Короткий опис команд налаштування"
 
 
-msgid "Access command with"
-msgstr ""
-
 msgid ""
 msgid ""
 "Allow executing the command and downloading its output without prior "
 "Allow executing the command and downloading its output without prior "
 "authentication"
 "authentication"
@@ -43,6 +40,12 @@ msgstr "Збирання даних..."
 msgid "Command"
 msgid "Command"
 msgstr ""
 msgstr ""
 
 
+msgid "Command executed successfully."
+msgstr ""
+
+msgid "Command exited with status code"
+msgstr ""
+
 msgid "Command failed"
 msgid "Command failed"
 msgstr "Команда не виконана"
 msgstr "Команда не виконана"
 
 
@@ -74,6 +77,9 @@ msgstr "Опис"
 msgid "Download"
 msgid "Download"
 msgstr "Завантажити"
 msgstr "Завантажити"
 
 
+msgid "Download execution result"
+msgstr ""
+
 #, fuzzy
 #, fuzzy
 msgid "Failed to execute command!"
 msgid "Failed to execute command!"
 msgstr "Помилка під час запуску команди!"
 msgstr "Помилка під час запуску команди!"
@@ -84,12 +90,21 @@ msgstr ""
 msgid "Loading"
 msgid "Loading"
 msgstr "Триває завантаження"
 msgstr "Триває завантаження"
 
 
+msgid "Or display result"
+msgstr ""
+
 msgid "Public access"
 msgid "Public access"
 msgstr "Відкритий доступ"
 msgstr "Відкритий доступ"
 
 
 msgid "Run"
 msgid "Run"
 msgstr "Запустити"
 msgstr "Запустити"
 
 
+msgid "Standard Error"
+msgstr ""
+
+msgid "Standard Output"
+msgstr ""
+
 #, fuzzy
 #, fuzzy
 msgid ""
 msgid ""
 "This page allows you to configure custom shell commands which can be easily "
 "This page allows you to configure custom shell commands which can be easily "

+ 18 - 3
package/luci/applications/luci-app-commands/po/vi/commands.po

@@ -11,9 +11,6 @@ msgstr ""
 msgid "A short textual description of the configured command"
 msgid "A short textual description of the configured command"
 msgstr ""
 msgstr ""
 
 
-msgid "Access command with"
-msgstr ""
-
 msgid ""
 msgid ""
 "Allow executing the command and downloading its output without prior "
 "Allow executing the command and downloading its output without prior "
 "authentication"
 "authentication"
@@ -37,6 +34,12 @@ msgstr ""
 msgid "Command"
 msgid "Command"
 msgstr ""
 msgstr ""
 
 
+msgid "Command executed successfully."
+msgstr ""
+
+msgid "Command exited with status code"
+msgstr ""
+
 msgid "Command failed"
 msgid "Command failed"
 msgstr ""
 msgstr ""
 
 
@@ -67,6 +70,9 @@ msgstr ""
 msgid "Download"
 msgid "Download"
 msgstr ""
 msgstr ""
 
 
+msgid "Download execution result"
+msgstr ""
+
 msgid "Failed to execute command!"
 msgid "Failed to execute command!"
 msgstr ""
 msgstr ""
 
 
@@ -76,12 +82,21 @@ msgstr ""
 msgid "Loading"
 msgid "Loading"
 msgstr ""
 msgstr ""
 
 
+msgid "Or display result"
+msgstr ""
+
 msgid "Public access"
 msgid "Public access"
 msgstr ""
 msgstr ""
 
 
 msgid "Run"
 msgid "Run"
 msgstr ""
 msgstr ""
 
 
+msgid "Standard Error"
+msgstr ""
+
+msgid "Standard Output"
+msgstr ""
+
 msgid ""
 msgid ""
 "This page allows you to configure custom shell commands which can be easily "
 "This page allows you to configure custom shell commands which can be easily "
 "invoked from the web interface."
 "invoked from the web interface."

+ 26 - 7
package/luci/applications/luci-app-commands/po/zh-cn/commands.po

@@ -1,22 +1,20 @@
 msgid ""
 msgid ""
 msgstr ""
 msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"PO-Revision-Date: 2013-10-08 15:47+0200\n"
-"Last-Translator: Tanyingyu <Tanyingyu@163.com>\n"
+"Project-Id-Version: \n"
+"PO-Revision-Date: 2017-01-21 09:34+0900\n"
+"Last-Translator: INAGAKI Hiroshi <musashino.open@gmail.com>\n"
 "Language-Team: none\n"
 "Language-Team: none\n"
 "Language: zh_CN\n"
 "Language: zh_CN\n"
 "MIME-Version: 1.0\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: Pootle 2.0.6\n"
+"X-Generator: Poedit 1.8.11\n"
+"POT-Creation-Date: \n"
 
 
 msgid "A short textual description of the configured command"
 msgid "A short textual description of the configured command"
 msgstr "简短描述命令用途"
 msgstr "简短描述命令用途"
 
 
-msgid "Access command with"
-msgstr "访问命令"
-
 msgid ""
 msgid ""
 "Allow executing the command and downloading its output without prior "
 "Allow executing the command and downloading its output without prior "
 "authentication"
 "authentication"
@@ -40,6 +38,12 @@ msgstr "收集数据:"
 msgid "Command"
 msgid "Command"
 msgstr "命令"
 msgstr "命令"
 
 
+msgid "Command executed successfully."
+msgstr "命令成功执行。"
+
+msgid "Command exited with status code"
+msgstr "命令退出,状态码:"
+
 msgid "Command failed"
 msgid "Command failed"
 msgstr "执行命令失败"
 msgstr "执行命令失败"
 
 
@@ -70,6 +74,9 @@ msgstr "描述"
 msgid "Download"
 msgid "Download"
 msgstr "下载"
 msgstr "下载"
 
 
+msgid "Download execution result"
+msgstr "下载执行结果"
+
 msgid "Failed to execute command!"
 msgid "Failed to execute command!"
 msgstr "执行命令失败!"
 msgstr "执行命令失败!"
 
 
@@ -79,12 +86,21 @@ msgstr "连接"
 msgid "Loading"
 msgid "Loading"
 msgstr "加载中"
 msgstr "加载中"
 
 
+msgid "Or display result"
+msgstr "显示执行结果"
+
 msgid "Public access"
 msgid "Public access"
 msgstr "公共访问"
 msgstr "公共访问"
 
 
 msgid "Run"
 msgid "Run"
 msgstr "运行"
 msgstr "运行"
 
 
+msgid "Standard Error"
+msgstr "标准错误流"
+
+msgid "Standard Output"
+msgstr "标准输出流"
+
 msgid ""
 msgid ""
 "This page allows you to configure custom shell commands which can be easily "
 "This page allows you to configure custom shell commands which can be easily "
 "invoked from the web interface."
 "invoked from the web interface."
@@ -92,3 +108,6 @@ msgstr "此页面允许您配置自定义Shell命令,并可以从Web界面调
 
 
 msgid "Waiting for command to complete..."
 msgid "Waiting for command to complete..."
 msgstr "等待命令执行完成... ..."
 msgstr "等待命令执行完成... ..."
+
+#~ msgid "Command exited with status code "
+#~ msgstr "命令退出,状态码:"

+ 21 - 3
package/luci/applications/luci-app-commands/po/zh-tw/commands.po

@@ -14,9 +14,6 @@ msgstr ""
 msgid "A short textual description of the configured command"
 msgid "A short textual description of the configured command"
 msgstr "以短文描述設定指令"
 msgstr "以短文描述設定指令"
 
 
-msgid "Access command with"
-msgstr "存取指令"
-
 msgid ""
 msgid ""
 "Allow executing the command and downloading its output without prior "
 "Allow executing the command and downloading its output without prior "
 "authentication"
 "authentication"
@@ -40,6 +37,12 @@ msgstr "收集資料中..."
 msgid "Command"
 msgid "Command"
 msgstr "指令"
 msgstr "指令"
 
 
+msgid "Command executed successfully."
+msgstr ""
+
+msgid "Command exited with status code"
+msgstr ""
+
 msgid "Command failed"
 msgid "Command failed"
 msgstr "命令失敗"
 msgstr "命令失敗"
 
 
@@ -70,6 +73,9 @@ msgstr "描述"
 msgid "Download"
 msgid "Download"
 msgstr "下載"
 msgstr "下載"
 
 
+msgid "Download execution result"
+msgstr ""
+
 msgid "Failed to execute command!"
 msgid "Failed to execute command!"
 msgstr "執行指令失敗!"
 msgstr "執行指令失敗!"
 
 
@@ -79,12 +85,21 @@ msgstr "連結"
 msgid "Loading"
 msgid "Loading"
 msgstr "掛載"
 msgstr "掛載"
 
 
+msgid "Or display result"
+msgstr ""
+
 msgid "Public access"
 msgid "Public access"
 msgstr "公用存取"
 msgstr "公用存取"
 
 
 msgid "Run"
 msgid "Run"
 msgstr "執行"
 msgstr "執行"
 
 
+msgid "Standard Error"
+msgstr ""
+
+msgid "Standard Output"
+msgstr ""
+
 msgid ""
 msgid ""
 "This page allows you to configure custom shell commands which can be easily "
 "This page allows you to configure custom shell commands which can be easily "
 "invoked from the web interface."
 "invoked from the web interface."
@@ -92,3 +107,6 @@ msgstr "只要可以從web介輕易調用, 這頁面允許你自定shell指令."
 
 
 msgid "Waiting for command to complete..."
 msgid "Waiting for command to complete..."
 msgstr "等待完整命令中..."
 msgstr "等待完整命令中..."
+
+#~ msgid "Access command with"
+#~ msgstr "存取指令"

+ 1 - 1
package/luci/applications/luci-app-coovachilli/po/sv/coovachilli.po

@@ -2,7 +2,7 @@ msgid ""
 msgstr ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Project-Id-Version: PACKAGE VERSION\n"
 "PO-Revision-Date: 2014-04-28 06:16+0200\n"
 "PO-Revision-Date: 2014-04-28 06:16+0200\n"
-"Last-Translator: Umeaboy <kristoffer.grundstrom1983@gmail.com>\n"
+"Last-Translator: Kristoffer Grundström <hamnisdude@gmail.com>\n"
 "Language-Team: none\n"
 "Language-Team: none\n"
 "Language: sv\n"
 "Language: sv\n"
 "MIME-Version: 1.0\n"
 "MIME-Version: 1.0\n"

+ 17 - 0
package/luci/applications/luci-app-cshark/Makefile

@@ -0,0 +1,17 @@
+#
+# Copyright (C) 2017 Dan Luedtke <mail@danrl.com>
+#
+# This is free software, licensed under the Apache License, Version 2.0 .
+#
+
+include $(TOPDIR)/rules.mk
+
+LUCI_TITLE:=Cloudshark capture tool Web UI
+LUCI_DEPENDS:=+cshark
+LUCI_PKGARCH:=all
+
+PKG_MAINTAINER:=Luka Perkov <luka@openwrt.org>
+
+include ../../luci.mk
+
+# call BuildPackage - OpenWrt buildroot signature

+ 125 - 0
package/luci/applications/luci-app-cshark/luasrc/controller/cshark.lua

@@ -0,0 +1,125 @@
+--[[
+LuCI - Lua Configuration Interface
+
+Copyright (C) 2014, QA Cafe, Inc.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+	http://www.apache.org/licenses/LICENSE-2.0
+
+]]--
+
+module("luci.controller.cshark", package.seeall)
+
+function index()
+		page = node("admin", "network", "cloudshark")
+		page.target = cbi("admin_network/cshark")
+		page.title = _("CloudShark")
+		page.order = 70
+
+		page = entry({"admin", "network", "cshark_iface_dump_start"}, call("cshark_iface_dump_start"), nil)
+		page.leaf = true
+
+		page = entry({"admin", "network", "cshark_iface_dump_stop"}, call("cshark_iface_dump_stop"), nil)
+		page.leaf = true
+
+		page = entry({"admin", "network", "cshark_check_status"}, call("cshark_check_status"), nil)
+		page.leaf = true
+
+		page = entry({"admin", "network", "cshark_link_list_get"}, call("cshark_link_list_get"), nil)
+		page.leaf = true
+
+		page = entry({"admin", "network", "cshark_link_list_clear"}, call("cshark_link_list_clear"), nil)
+		page.leaf = true
+end
+
+function cshark_iface_dump_start(ifname, value, flag, filter)
+	if ifname == nil or ifname == '' then
+		ifname = 'any'
+	end
+	if tonumber(value) == nil
+	then
+		value = '0'
+	end
+	if filter == nil or filter == '' then
+		filter = ''
+	end
+
+	if flag == nil or flag == '' then
+		filter = 'T'
+	end
+
+	luci.http.prepare_content("text/plain")
+
+	local res = os.execute("(/sbin/cshark -i " .. ifname .. " -" .. flag .. " " .. value .. " -p /tmp/cshark-luci.pid " .. filter .. " > /tmp/cshark-luci.out 2>&1) &")
+	luci.http.write(tostring(res))
+end
+
+function cshark_iface_dump_stop()
+	luci.http.prepare_content("text/plain")
+
+	local f = io.open("/tmp/cshark-luci.pid", "rb")
+	local pid = f:read("*all")
+	io.close(f)
+
+	local res = os.execute("kill -TERM " .. pid)
+	luci.http.write(tostring(res))
+end
+
+function cshark_check_status()
+
+	local msg = "";
+	local status;
+	local f = io.open("/tmp/cshark-luci.pid","r")
+	if f ~= nil then
+		status = 1;
+		io.close(f)
+	else
+		status = 0;
+	end
+
+	f = io.open("/tmp/cshark-luci.out","r")
+	if f ~= nil then
+		msg = f:read("*all")
+		io.close(f)
+		if msg ~= '' then
+			os.remove('/tmp/cshark-luci.out')
+		end
+	end
+
+	luci.http.prepare_content("application/json")
+
+	local res = {}
+	res["status"] = status;
+	res["msg"] = msg;
+
+	luci.http.write_json(res)
+end
+
+function cshark_link_list_get()
+	local uci = require("uci").cursor()
+
+	luci.http.prepare_content("application/json")
+
+	luci.http.write("[")
+
+	local t = uci:get("cshark", "cshark", "entry")
+  if (t ~= nil) then
+	  for i = #t, 1, -1 do
+		  luci.http.write("[\"" .. t[i] .. "\"],")
+	  end
+  end
+
+	luci.http.write("[]]")
+end
+
+function cshark_link_list_clear()
+	local uci = require("uci").cursor()
+
+	uci:delete("cshark", "cshark", "entry")
+	uci:commit("cshark");
+
+	luci.http.status(200, "OK")
+end

+ 30 - 0
package/luci/applications/luci-app-cshark/luasrc/model/cbi/admin_network/cshark.lua

@@ -0,0 +1,30 @@
+--[[
+LuCI - Lua Configuration Interface
+
+Copyright (C) 2014, QA Cafe, Inc.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+	http://www.apache.org/licenses/LICENSE-2.0
+
+$Id$
+]]--
+
+local fs = require "nixio.fs"
+
+m = Map("cshark", translate("CloudShark"))
+
+if fs.access("/etc/config/cshark") then
+	m:section(SimpleSection).template = "cshark"
+
+	s = m:section(TypedSection, "cshark", translate("Options"))
+	s.anonymous = true
+	s.addremove = false
+
+	s:option(Value, "url", translate("CloudShark URL"))
+	s:option(Value, "token", translate("CloudShark API token"))
+end
+
+return m

+ 291 - 0
package/luci/applications/luci-app-cshark/luasrc/view/cshark.htm

@@ -0,0 +1,291 @@
+<%#
+LuCI - Lua Configuration Interface
+
+Copyright (C) 2014, QA Cafe, Inc.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+	http://www.apache.org/licenses/LICENSE-2.0
+
+$Id$
+
+-%>
+
+<fieldset class="cbi-section">
+	<legend><%:Start network capture%></legend>
+	<div class="cbi-section-node">
+		<table class="cbi-section-table">
+			<tr>
+				<th><%:Interface%></th>
+				<th colspan='2'><%:seconds, packets, bytes%></th>
+				<th><%:Filter%></th>
+				<th><%:Actions%></th>
+			</tr>
+			<tr>
+				<td>
+					<select title="<%:Interface%>" style="width:auto" id="s_interfaces">
+					<%
+						local nixio = require "nixio"
+						for k, v in ipairs(nixio.getifaddrs()) do
+							if v.family == "packet" then
+							%>
+								<option value="<%=v.name%>"><%=v.name%> </option>
+							<%
+							end
+						end
+					%>
+						<option value="any"><%:any%></option>
+					</select>
+				</td>
+				<td colspan='2'>
+					<input id="tx_value" type="text" value="0" />
+					<select title="<%:timeout, bytes, seconds%>" id="s_value_type" style="width:auto">
+						<option value="T"><%:seconds%></option>
+						<option value="P"><%:packets%></option>
+						<option value="S"><%:bytes%></option>
+					</select>
+				</td>
+				<td>
+					<input style="margin: 5px 0" type="text" title="<%:Filter%>" placeholder="filter" id="i_filter" />
+				</td>
+				<td>
+					<input type="button" id="bt_action" data-action="start" value="<%:Start capture%>" class="cbi-button" />
+				</td>
+			</tr>
+		</table>
+	</div>
+</fieldset>
+
+<fieldset class="cbi-section">
+	<span id="cshark-rc-output"></span>
+</fieldset>
+
+<hr/>
+
+<fieldset class="cbi-section">
+	<legend><%:Capture links%></legend>
+	<div class="cbi-section-node">
+		<table id="t_link_list" class="cbi-section-table">
+			<tr class="cbi-section-table-titles">
+				<th class="cbi-section-table-cell"><%:Capture URL%></th>
+				<th class="cbi-section-table-cell"><%:Capture time%></th>
+			</tr>
+		</table>
+	</div>
+</fieldset>
+
+<fieldset class="cbi-section">
+  <a href="https://support.cloudshark.org/openwrt/openwrt-cloudshark.html" target="_blank">Visit support.cloudshark.org for help.</a>
+</fieldset>
+
+<hr/>
+
+<script type="text/javascript" src="<%=resource%>/cbi.js"></script>
+<script type="text/javascript">//<![CDATA[
+
+	var capture_running = 0;
+	var pid_file = 0;
+	var bt_action = document.getElementById('bt_action');
+	var a_clear_links = document.getElementById('a_clear_links');
+	var output = document.getElementById('cshark-rc-output');
+	var loader = '<img src="<%=resource%>/icons/loading.gif" alt="<%:Loading%>" width="16" height="16" style="vertical-align:middle" /> ';
+	var msg = { 'start' : '<%:Waiting for capture to complete...%>', 'stop' : '<%:Waiting for upload to complete...%>' };
+	var status_msg = msg['start'];
+
+	function get_date(timestamp)
+	{
+		function pad_str(str)
+		{
+			return (str < 10) ? "0" + str : str;
+		}
+
+		var current_date = new Date(timestamp * 1000);
+		return current_date.getFullYear() + "-" +
+				pad_str(current_date.getMonth() + 1) + "-" +
+				pad_str(current_date.getDate()) + " " +
+				pad_str(current_date.getHours()) + ":" +
+				pad_str(current_date.getMinutes()) + ":" +
+				pad_str(current_date.getSeconds());
+	}
+
+	bt_action.onclick = function()
+	{
+		var action = this.getAttribute("data-action");
+		var csxhr = new XHR();
+
+		if (action == "stop")
+		{
+			update_status(action);
+
+			bt_action.disabled = true;
+
+			csxhr.get('<%=luci.dispatcher.build_url("admin", "network")%>/cshark_iface_dump_stop', null,
+			function(x)
+			{
+				if (!x || x.responseText.trim() != "0")
+				{
+					update_status("failed", "Invalid response on stop.");
+				}
+			});
+
+		}
+		else if (action == "start")
+		{
+
+			var s_interfaces = document.getElementById('s_interfaces');
+			var s_value_type = document.getElementById('s_value_type');
+			var i_filter = document.getElementById('i_filter');
+
+			var if_n = s_interfaces.selectedIndex;
+			var t_n = s_value_type.selectedIndex;
+			var ifname = s_interfaces.options[if_n].value.trim();
+			var filter_val = i_filter.value.trim();
+			var tx_val = document.getElementById('tx_value').value.trim();
+			var type_val = s_value_type.options[t_n].value.trim();
+
+			if (type_val != 'P' && type_val != 'T' && type_val != 'S') type_val = 'T';
+
+			if (!ifname || !type_val) return;
+
+			if (isNaN(tx_val)) return alert("<%:value for [seconds, packets, bytes] must be Integer%>");
+
+			update_status(action);
+
+			csxhr.get('<%=luci.dispatcher.build_url("admin", "network")%>/cshark_iface_dump_start/' + ifname + '/' + tx_val + '/' + type_val + '/'+ filter_val, null,
+			function(x)
+			{
+				if (!x)
+					update_status("failed", "Invalid response on start.");
+				else
+					update_status("running");
+			});
+		}
+	}
+
+	function update_status(status, message)
+	{
+		switch (status)
+		{
+			case 'start':
+			case 'stop':
+				status_msg = msg[status];
+				output.innerHTML = loader + status_msg;
+			break
+
+			case 'running':
+				if (capture_running) break;;
+
+				output.innerHTML = loader + status_msg;
+
+				bt_action.value = '<%:Stop capture%>';
+				bt_action.setAttribute('data-action', 'stop');
+				capture_running = 1;
+			break;
+
+			case 'completed':
+			case 'failed':
+				if (!capture_running) break;
+
+				if (status == "completed")
+				{
+					link_list_update();
+				}
+
+				output.innerHTML = "<pre>" + message + "</pre>";
+				bt_action.value = '<%:Start capture%>';
+				bt_action.setAttribute('data-action', 'start');
+				bt_action.disabled = false;
+				capture_running = 0;
+			break;
+		}
+	}
+
+
+	function check_status()
+	{
+
+		XHR.poll(3, '<%=luci.dispatcher.build_url("admin", "network")%>/cshark_check_status', null,
+		function(x, data)
+		{
+			if (!x)
+			{
+				if (capture_running)
+					update_status("failed", "Invalid response when fetching status.");
+
+				return;
+			}
+			console.log(data)
+
+			update_status( (data.status == 1) && "running" || "completed", data.msg);
+		})
+	}
+
+	function link_list_clear()
+	{
+		var csxhr_del = new XHR();
+		csxhr_del.get('<%=luci.dispatcher.build_url("admin", "network")%>/cshark_link_list_clear', null,
+		function(x)
+		{
+			if (!x)
+				return false;
+
+			link_list_update();
+		});
+	}
+
+
+	function link_list_update()
+	{
+		var t_link = document.getElementById("t_link_list");
+		if (!t_link) return;
+
+		var row_count = t_link.rows.length;
+		while(--row_count) t_link.deleteRow(row_count);
+
+		var cell = t_link.insertRow(-1).insertCell(0);
+		cell.colSpan = 2;
+		cell.innerHTML = loader;
+
+		var csxhr_link = new XHR();
+		csxhr_link.get('<%=luci.dispatcher.build_url("admin", "network")%>/cshark_link_list_get', null,
+		function(x, entries)
+		{
+			var row = t_link.deleteRow(1);
+
+			if (!x) return;
+
+			if (!entries || !entries.length)
+			{
+				var cell = t_link.insertRow(-1).insertCell(0);
+				cell.colSpan = 2;
+				cell.innerHTML = '<em><br />There are no captures available yet.</em>';
+
+				return;
+			}
+
+			for (var i = 0, len = entries.length; i < len ; i++)
+			{
+				var entry = entries[i][0];
+				if (!entry) continue;
+
+				var data = entry.split(",");
+				var url = data[0];
+				var timestamp = data[1];
+
+				var row = t_link.insertRow(-1);
+				row.insertCell(0).innerHTML = '<a href="'+url+'" target="_blank">'+url+'</a>';
+				row.insertCell(1).innerHTML = get_date(timestamp);
+			}
+
+			var cell = t_link.insertRow(-1).insertCell(0);
+			cell.colSpan = 2;
+			cell.style.textAlign="center";
+			cell.innerHTML = '<input type="button" onclick="link_list_clear()" class="cbi-button" value ="<%:Clear list%>" />';
+		})
+	}
+
+	check_status();
+	link_list_update();
+//]]></script>

+ 2 - 2
package/luci/applications/luci-app-ddns/Makefile

@@ -2,7 +2,7 @@
 # Copyright 2008 Steven Barth <steven@midlink.org>
 # Copyright 2008 Steven Barth <steven@midlink.org>
 # Copyright 2008 Jo-Philipp Wich <jow@openwrt.org>
 # Copyright 2008 Jo-Philipp Wich <jow@openwrt.org>
 # Copyright 2013 Manuel Munz <freifunk at somakoma dot de>
 # Copyright 2013 Manuel Munz <freifunk at somakoma dot de>
-# Copyright 2014-2016 Christian Schoenebeck <christian dot schoenebeck at gmail dot com>
+# Copyright 2014-2017 Christian Schoenebeck <christian dot schoenebeck at gmail dot com>
 #
 #
 # This is free software, licensed under the Apache License, Version 2.0
 # This is free software, licensed under the Apache License, Version 2.0
 
 
@@ -16,7 +16,7 @@ PKG_VERSION:=2.4.8
 
 
 # Release == build
 # Release == build
 # increase on changes of translation files
 # increase on changes of translation files
-PKG_RELEASE:=1
+PKG_RELEASE:=2
 
 
 PKG_LICENSE:=Apache-2.0
 PKG_LICENSE:=Apache-2.0
 PKG_MAINTAINER:=Christian Schoenebeck <christian.schoenebeck@gmail.com>
 PKG_MAINTAINER:=Christian Schoenebeck <christian.schoenebeck@gmail.com>

+ 5 - 7
package/luci/applications/luci-app-ddns/luasrc/controller/ddns.lua

@@ -1,7 +1,7 @@
 -- Copyright 2008 Steven Barth <steven@midlink.org>
 -- Copyright 2008 Steven Barth <steven@midlink.org>
 -- Copyright 2008 Jo-Philipp Wich <jow@openwrt.org>
 -- Copyright 2008 Jo-Philipp Wich <jow@openwrt.org>
 -- Copyright 2013 Manuel Munz <freifunk at somakoma dot de>
 -- Copyright 2013 Manuel Munz <freifunk at somakoma dot de>
--- Copyright 2014-2016 Christian Schoenebeck <christian dot schoenebeck at gmail dot com>
+-- Copyright 2014-2017 Christian Schoenebeck <christian dot schoenebeck at gmail dot com>
 -- Licensed to the public under the Apache License 2.0.
 -- Licensed to the public under the Apache License 2.0.
 
 
 module("luci.controller.ddns", package.seeall)
 module("luci.controller.ddns", package.seeall)
@@ -24,7 +24,7 @@ local srv_ver_min = "2.7.6"			-- minimum version of service required
 local srv_ver_cmd = luci_helper .. [[ -V | awk {'print $2'}]]
 local srv_ver_cmd = luci_helper .. [[ -V | awk {'print $2'}]]
 local app_name    = "luci-app-ddns"
 local app_name    = "luci-app-ddns"
 local app_title   = "Dynamic DNS"
 local app_title   = "Dynamic DNS"
-local app_version = "2.4.8-1"
+local app_version = "2.4.8-2"
 
 
 function index()
 function index()
 	local nxfs	= require "nixio.fs"		-- global definitions not available
 	local nxfs	= require "nixio.fs"		-- global definitions not available
@@ -180,12 +180,10 @@ local function _get_status()
 		end
 		end
 
 
 		-- get/set monitored interface and IP version
 		-- get/set monitored interface and IP version
-		local iface	= s["interface"] or "_nonet_"
+		local iface	= s["interface"] or "wan"
 		local use_ipv6	= tonumber(s["use_ipv6"]) or 0
 		local use_ipv6	= tonumber(s["use_ipv6"]) or 0
-		if iface ~= "_nonet_" then
-			local ipv = (use_ipv6 == 1) and "IPv6" or "IPv4"
-			iface = ipv .. " / " .. iface
-		end
+		local ipv = (use_ipv6 == 1) and "IPv6" or "IPv4"
+		iface = ipv .. " / " .. iface
 
 
 		-- try to get registered IP
 		-- try to get registered IP
 		local lookup_host = s["lookup_host"] or "_nolookup_"
 		local lookup_host = s["lookup_host"] or "_nolookup_"

+ 233 - 174
package/luci/applications/luci-app-ddns/po/it/ddns.po

@@ -2,8 +2,8 @@ msgid ""
 msgstr ""
 msgstr ""
 "Project-Id-Version: luci-app-ddns 2.4.0-1\n"
 "Project-Id-Version: luci-app-ddns 2.4.0-1\n"
 "POT-Creation-Date: 2016-01-30 11:07+0100\n"
 "POT-Creation-Date: 2016-01-30 11:07+0100\n"
-"PO-Revision-Date: 2013-02-03 13:53+0200\n"
-"Last-Translator: Francesco <3gasas@gmail.com>\n"
+"PO-Revision-Date: 2017-09-06 01:53+0200\n"
+"Last-Translator: Bubu83 <bubu83@gmail.com>\n"
 "Language-Team: \n"
 "Language-Team: \n"
 "Language: it\n"
 "Language: it\n"
 "MIME-Version: 1.0\n"
 "MIME-Version: 1.0\n"
@@ -22,160 +22,182 @@ msgid "-- default --"
 msgstr ""
 msgstr ""
 
 
 msgid "Advanced Settings"
 msgid "Advanced Settings"
-msgstr ""
+msgstr "Opzioni Avanzate"
 
 
 msgid "Allow non-public IP's"
 msgid "Allow non-public IP's"
-msgstr ""
+msgstr "Consenti IP non pubblici"
 
 
 msgid "Applying changes"
 msgid "Applying changes"
-msgstr ""
+msgstr "Applico i cambiamenti"
 
 
 msgid "Basic Settings"
 msgid "Basic Settings"
-msgstr ""
+msgstr "Opzioni di Base"
 
 
 msgid ""
 msgid ""
 "Below a list of configuration tips for your system to run Dynamic DNS "
 "Below a list of configuration tips for your system to run Dynamic DNS "
 "updates without limitations"
 "updates without limitations"
 msgstr ""
 msgstr ""
+"Sotto c'è una lista di consigli di configurazione per il tuo sistema per eseguire "
+"aggiornamenti di Dynamic DNS senza limitazioni"
 
 
 msgid ""
 msgid ""
 "Below is a list of configured DDNS configurations and their current state."
 "Below is a list of configured DDNS configurations and their current state."
 msgstr ""
 msgstr ""
+"Sotto c'è una lista delle configurazioni DDNS configurate e il loro stato attuale."
 
 
 msgid "Bind Network"
 msgid "Bind Network"
-msgstr ""
+msgstr "Collega Rete"
 
 
 msgid "Binding to a specific network not supported"
 msgid "Binding to a specific network not supported"
-msgstr ""
+msgstr "Collegamento a una specifica rete non supportato"
 
 
 msgid ""
 msgid ""
 "BusyBox's nslookup and Wget do not support to specify the IP version to use "
 "BusyBox's nslookup and Wget do not support to specify the IP version to use "
 "for communication with DDNS Provider!"
 "for communication with DDNS Provider!"
 msgstr ""
 msgstr ""
+"Nslookup di BusyBox e Wget non supportano lo specificare la versione IP da usare "
+"per la comunicazione con il Provider DDNS!"
 
 
 msgid ""
 msgid ""
 "BusyBox's nslookup and hostip do not support to specify to use TCP instead "
 "BusyBox's nslookup and hostip do not support to specify to use TCP instead "
 "of default UDP when requesting DNS server!"
 "of default UDP when requesting DNS server!"
 msgstr ""
 msgstr ""
+"Nslookup di BusyBox e hostip non supportano lo specificare l'uso di TCP invece "
+"di UDP di default quando richiedono il server DNS!"
 
 
 msgid ""
 msgid ""
 "BusyBox's nslookup in the current compiled version does not handle given DNS "
 "BusyBox's nslookup in the current compiled version does not handle given DNS "
 "Servers correctly!"
 "Servers correctly!"
 msgstr ""
 msgstr ""
+"Nslookup di BusyBox nella versione compilata corrente non gestisce i dati Server "
+"DNS correttamente!"
 
 
 msgid "Casual users should not change this setting"
 msgid "Casual users should not change this setting"
-msgstr ""
+msgstr "Gli utenti casuali non dovrebbero cambiare questa opzione"
 
 
 msgid "Change provider"
 msgid "Change provider"
-msgstr ""
+msgstr "Cambia provider"
 
 
 msgid "Check Interval"
 msgid "Check Interval"
-msgstr ""
+msgstr "Controlla Intervallo"
 
 
 msgid "Collecting data..."
 msgid "Collecting data..."
-msgstr ""
+msgstr "Raccogliendo dati..."
 
 
 msgid "Config error"
 msgid "Config error"
-msgstr ""
+msgstr "Errore di configurazione"
 
 
 msgid "Configuration"
 msgid "Configuration"
-msgstr ""
+msgstr "Configurazione"
 
 
 msgid ""
 msgid ""
 "Configure here the details for all Dynamic DNS services including this LuCI "
 "Configure here the details for all Dynamic DNS services including this LuCI "
 "application."
 "application."
 msgstr ""
 msgstr ""
+"Configura qui i dettagli per tutti i servizi Dynamic DNS inclusa questa "
+"applicazione LuCI."
 
 
 msgid "Configure here the details for selected Dynamic DNS service."
 msgid "Configure here the details for selected Dynamic DNS service."
-msgstr ""
+msgstr "Configura qui i dettagli per il servizio Dynamic DNS selezionato."
 
 
 msgid "Current setting"
 msgid "Current setting"
-msgstr ""
+msgstr "Impostazione corrente"
 
 
 msgid ""
 msgid ""
 "Currently DDNS updates are not started at boot or on interface events.<br /"
 "Currently DDNS updates are not started at boot or on interface events.<br /"
 ">This is the default if you run DDNS scripts by yourself (i.e. via cron with "
 ">This is the default if you run DDNS scripts by yourself (i.e. via cron with "
 "force_interval set to '0')"
 "force_interval set to '0')"
 msgstr ""
 msgstr ""
+"Attualmente gli aggiornamenti DDNS non si avviano al boot o per eventi "
+"dell'interfaccia.  <br />Questo è di default se esegui gli script DDNS per conto tuo "
+" (es. usando cron con force_interval impostato a '0')"
 
 
 msgid ""
 msgid ""
 "Currently DDNS updates are not started at boot or on interface events.<br /"
 "Currently DDNS updates are not started at boot or on interface events.<br /"
 ">You can start/stop each configuration here. It will run until next reboot."
 ">You can start/stop each configuration here. It will run until next reboot."
 msgstr ""
 msgstr ""
+"Attualmente gli aggiornamenti DDNS non si avviano al boot o per eventi "
+"dell'interfaccia. <br />Puoi avviare/fermare ogni configurazione qui. Verrà eseguita "
+"fino al prossimo riavvio."
 
 
 msgid "Custom update script to be used for updating your DDNS Provider."
 msgid "Custom update script to be used for updating your DDNS Provider."
-msgstr ""
+msgstr "Script aggiornamento personalizzato da usare per aggiornare il tuo DDNS Provider."
 
 
 msgid "Custom update-URL"
 msgid "Custom update-URL"
 msgstr "URL di aggiornamento personalizzato"
 msgstr "URL di aggiornamento personalizzato"
 
 
 msgid "Custom update-script"
 msgid "Custom update-script"
-msgstr ""
+msgstr "Script di aggiornamento personalizzato"
 
 
 msgid "DDNS Autostart disabled"
 msgid "DDNS Autostart disabled"
-msgstr ""
+msgstr "Autoavvio DDNS disabilitato"
 
 
 msgid "DDNS Client Configuration"
 msgid "DDNS Client Configuration"
-msgstr ""
+msgstr "Configurazione Cliente DDNS"
 
 
 msgid "DDNS Client Documentation"
 msgid "DDNS Client Documentation"
-msgstr ""
+msgstr "Documentazione Cliente DDNS"
 
 
 msgid "DDNS Service provider"
 msgid "DDNS Service provider"
-msgstr ""
+msgstr "Provider del Servizio DDNS"
 
 
 msgid "DNS requests via TCP not supported"
 msgid "DNS requests via TCP not supported"
-msgstr ""
+msgstr "Richieste DNS via TCP non supportate"
 
 
 msgid "DNS-Server"
 msgid "DNS-Server"
-msgstr ""
+msgstr "Server DNS"
 
 
 msgid "Date format"
 msgid "Date format"
-msgstr ""
+msgstr "Formato Data"
 
 
 msgid "Defines the Web page to read systems IPv4-Address from"
 msgid "Defines the Web page to read systems IPv4-Address from"
-msgstr ""
+msgstr "Definisce la pagina WEB che legge l'indirizzo IPv4 dei sistemi"
 
 
 msgid "Defines the Web page to read systems IPv6-Address from"
 msgid "Defines the Web page to read systems IPv6-Address from"
-msgstr ""
+msgstr "Definisce la pagina WEB che legge l'indirizzo IPv6 dei sistemi"
 
 
 msgid "Defines the interface to read systems IP-Address from"
 msgid "Defines the interface to read systems IP-Address from"
-msgstr ""
+msgstr "Definisce l'interfaccia che legge l'indirizzo IP dei sistemi"
 
 
 msgid "Defines the network to read systems IPv4-Address from"
 msgid "Defines the network to read systems IPv4-Address from"
-msgstr ""
+msgstr "Definisce la rete che legge l'indirizzo IPv4 dei sistemi"
 
 
 msgid "Defines the network to read systems IPv6-Address from"
 msgid "Defines the network to read systems IPv6-Address from"
-msgstr ""
+msgstr "Definisce la rete che legge l'indirizzo IPv6 dei sistemi"
 
 
 msgid ""
 msgid ""
 "Defines the source to read systems IPv4-Address from, that will be send to "
 "Defines the source to read systems IPv4-Address from, that will be send to "
 "the DDNS provider"
 "the DDNS provider"
 msgstr ""
 msgstr ""
+"Definisce la sorgente che legge l'indirizzo IPv4 dei sistemi, che sarà mandata "
+"al provider DDNS"
 
 
 msgid ""
 msgid ""
 "Defines the source to read systems IPv6-Address from, that will be send to "
 "Defines the source to read systems IPv6-Address from, that will be send to "
 "the DDNS provider"
 "the DDNS provider"
 msgstr ""
 msgstr ""
+"Definisce la sorgente che legge l'indirizzo IPv6 dei sistemi, che sarà mandata "
+"al provider DDNS"
 
 
 msgid "Defines which IP address 'IPv4/IPv6' is send to the DDNS provider"
 msgid "Defines which IP address 'IPv4/IPv6' is send to the DDNS provider"
-msgstr ""
+msgstr "Definisce quale indirizzo IP 'IPv4/IPv6' è mandato al provider DDNS"
 
 
 msgid "Details for"
 msgid "Details for"
-msgstr ""
+msgstr "Dettagli per"
 
 
 msgid "Directory contains Log files for each running section"
 msgid "Directory contains Log files for each running section"
-msgstr ""
+msgstr "Directory che contiene i file di registro per ogni sezione avviata"
 
 
 msgid ""
 msgid ""
 "Directory contains PID and other status information for each running section"
 "Directory contains PID and other status information for each running section"
 msgstr ""
 msgstr ""
+"Directory che contiene il PID e altre informazioni di stato per ogni seziona avviata"
 
 
 msgid "Disabled"
 msgid "Disabled"
-msgstr ""
+msgstr "Disabilitato"
 
 
 msgid "Domain"
 msgid "Domain"
-msgstr ""
+msgstr "Dominio"
 
 
 msgid "Dynamic DNS"
 msgid "Dynamic DNS"
 msgstr "DNS Dinamico"
 msgstr "DNS Dinamico"
@@ -188,124 +210,136 @@ msgstr ""
 "statico anche nel caso in cui tu disponga di un indirizzo IP dinamico."
 "statico anche nel caso in cui tu disponga di un indirizzo IP dinamico."
 
 
 msgid "Enable secure communication with DDNS provider"
 msgid "Enable secure communication with DDNS provider"
-msgstr ""
+msgstr "Abilita la comunicazione sicura con il provider DDNS"
 
 
 msgid "Enabled"
 msgid "Enabled"
-msgstr ""
+msgstr "Abilitato"
 
 
 msgid "Error"
 msgid "Error"
-msgstr ""
+msgstr "Errore"
 
 
 msgid "Error Retry Counter"
 msgid "Error Retry Counter"
-msgstr ""
+msgstr "Conteggio errore di riprova"
 
 
 msgid "Error Retry Interval"
 msgid "Error Retry Interval"
-msgstr ""
+msgstr "Intervallo errore di riprova"
 
 
 msgid "Event Network"
 msgid "Event Network"
-msgstr ""
+msgstr "Network Evento"
 
 
 msgid "File"
 msgid "File"
 msgstr ""
 msgstr ""
 
 
 msgid "File not found"
 msgid "File not found"
-msgstr ""
+msgstr "File non trovato"
 
 
 msgid "File not found or empty"
 msgid "File not found or empty"
-msgstr ""
+msgstr "File non trovato o vuoto"
 
 
 msgid ""
 msgid ""
 "Follow this link<br />You will find more hints to optimize your system to "
 "Follow this link<br />You will find more hints to optimize your system to "
 "run DDNS scripts with all options"
 "run DDNS scripts with all options"
 msgstr ""
 msgstr ""
+"Segui questo collegamento<br />Troverai più aiuti per ottimizzare il tuo sistema "
+"a eseguire script DDNS con tutte le opzioni"
 
 
 msgid "For detailed information about parameter settings look here."
 msgid "For detailed information about parameter settings look here."
-msgstr ""
+msgstr "Per informazioni dettagliate sui parametri opzionali guarda qui."
 
 
 msgid "For supported codes look here"
 msgid "For supported codes look here"
-msgstr ""
+msgstr "Per i codici supportati guarda qui"
 
 
 msgid "Force IP Version"
 msgid "Force IP Version"
-msgstr ""
+msgstr "Forza Versione IP"
 
 
 msgid "Force IP Version not supported"
 msgid "Force IP Version not supported"
-msgstr ""
+msgstr "Forza Versione IP non supportato"
 
 
 msgid "Force Interval"
 msgid "Force Interval"
-msgstr ""
+msgstr "Forza Intervallo"
 
 
 msgid "Force TCP on DNS"
 msgid "Force TCP on DNS"
-msgstr ""
+msgstr "Forza TCP su DNS"
 
 
 msgid "Forced IP Version don't matched"
 msgid "Forced IP Version don't matched"
-msgstr ""
+msgstr "La Versione IP forzata non corrisponde"
 
 
 msgid "Format"
 msgid "Format"
-msgstr ""
+msgstr "Formato"
 
 
 msgid "Format: IP or FQDN"
 msgid "Format: IP or FQDN"
-msgstr ""
+msgstr "Formato: IP o FQDN"
 
 
 msgid ""
 msgid ""
 "GNU Wget will use the IP of given network, cURL will use the physical "
 "GNU Wget will use the IP of given network, cURL will use the physical "
 "interface."
 "interface."
 msgstr ""
 msgstr ""
+"GNU Wget userà l'IP della rete data, cURL userà l'interfaccia "
+"fisica."
 
 
 msgid "Global Settings"
 msgid "Global Settings"
-msgstr ""
+msgstr "Opzioni Globali"
 
 
 msgid "HTTPS not supported"
 msgid "HTTPS not supported"
-msgstr ""
+msgstr "HTTPS non supportato"
 
 
 msgid "Hints"
 msgid "Hints"
-msgstr ""
+msgstr "Suggerimenti"
 
 
 msgid "Hostname/FQDN to validate, if IP update happen or necessary"
 msgid "Hostname/FQDN to validate, if IP update happen or necessary"
-msgstr ""
+msgstr "Indirizzo/FQDN da validare, se l'aggiornamento IP avviene o è necessario"
 
 
 msgid "IP address source"
 msgid "IP address source"
-msgstr ""
+msgstr "Sorgente indirizzo IP"
 
 
 msgid "IP address version"
 msgid "IP address version"
-msgstr ""
+msgstr "Versione indirizzo IP"
 
 
 msgid "IPv4-Address"
 msgid "IPv4-Address"
-msgstr ""
+msgstr "Indirizzo IPv4"
 
 
 msgid "IPv6 address must be given in square brackets"
 msgid "IPv6 address must be given in square brackets"
-msgstr ""
+msgstr "Indirizzo IPv6 deve essere dato con le parentesi quadre"
 
 
 msgid ""
 msgid ""
 "IPv6 is currently not (fully) supported by this system<br />Please follow "
 "IPv6 is currently not (fully) supported by this system<br />Please follow "
 "the instructions on OpenWrt's homepage to enable IPv6 support<br />or update "
 "the instructions on OpenWrt's homepage to enable IPv6 support<br />or update "
 "your system to the latest OpenWrt Release"
 "your system to the latest OpenWrt Release"
 msgstr ""
 msgstr ""
+"IPv6 non è (pienamente) supportato da questo sistema<br />Per favore segui "
+"le istruzioni sul sito di OpenWrt per abilitare il supporto a IPv6<br />o aggiorna "
+"il tuo sistema all'ultima Release di OpenWrt"
 
 
 msgid "IPv6 not supported"
 msgid "IPv6 not supported"
-msgstr ""
+msgstr "IPv6 non supportato"
 
 
 msgid "IPv6-Address"
 msgid "IPv6-Address"
-msgstr ""
+msgstr "Indirizzo IPv6"
 
 
 msgid "If both cURL and GNU Wget are installed, Wget is used by default."
 msgid "If both cURL and GNU Wget are installed, Wget is used by default."
-msgstr ""
+msgstr "Se sia cURL e sia GNU Wget sono installati, Wget è usato di default."
 
 
 msgid ""
 msgid ""
 "If this service section is disabled it could not be started.<br />Neither "
 "If this service section is disabled it could not be started.<br />Neither "
 "from LuCI interface nor from console"
 "from LuCI interface nor from console"
 msgstr ""
 msgstr ""
+"Se questa sezione del servizio è disabilitata, non può essere avviata<br />Nè "
+"da interfaccia LuCI nè da console"
 
 
 msgid "If using secure communication you should verify server certificates!"
 msgid "If using secure communication you should verify server certificates!"
-msgstr ""
+msgstr "Se usi la comunicazione sicura dovresti verificare i certificati del server!"
 
 
 msgid ""
 msgid ""
 "If you want to send updates for IPv4 and IPv6 you need to define two "
 "If you want to send updates for IPv4 and IPv6 you need to define two "
 "separate Configurations i.e. 'myddns_ipv4' and 'myddns_ipv6'"
 "separate Configurations i.e. 'myddns_ipv4' and 'myddns_ipv6'"
 msgstr ""
 msgstr ""
+"Se vuoi mandare aggiornamenti per IPv4 e IPv6, devi definire due "
+"Configurazioni separate es. 'myddns_ipv4' e 'myddns_ipv6'"
 
 
 msgid ""
 msgid ""
 "In some versions cURL/libcurl in OpenWrt is compiled without proxy support."
 "In some versions cURL/libcurl in OpenWrt is compiled without proxy support."
 msgstr ""
 msgstr ""
+"In alcune versioni cURL/libcurl in OpenWrt è compilato senza supporto proxy."
 
 
 msgid "Info"
 msgid "Info"
 msgstr ""
 msgstr ""
@@ -314,6 +348,8 @@ msgid ""
 "Install 'ca-certificates' package or needed certificates by hand into /etc/"
 "Install 'ca-certificates' package or needed certificates by hand into /etc/"
 "ssl/certs default directory"
 "ssl/certs default directory"
 msgstr ""
 msgstr ""
+"Installa il pacchetto 'ca-certificates' o i certificati necessari "
+"a mano nella directory di default /etc/ssl/certs"
 
 
 msgid "Interface"
 msgid "Interface"
 msgstr "Interfaccia"
 msgstr "Interfaccia"
@@ -322,408 +358,431 @@ msgid ""
 "Interval to check for changed IP<br />Values below 5 minutes == 300 seconds "
 "Interval to check for changed IP<br />Values below 5 minutes == 300 seconds "
 "are not supported"
 "are not supported"
 msgstr ""
 msgstr ""
+"Intervallo per controllare i cambiamenti dell'IP<br />I valori sotto i 5 minuti == "
+"300 secondi non sono supportati"
 
 
 msgid ""
 msgid ""
 "Interval to force updates send to DDNS Provider<br />Setting this parameter "
 "Interval to force updates send to DDNS Provider<br />Setting this parameter "
 "to 0 will force the script to only run once<br />Values lower 'Check "
 "to 0 will force the script to only run once<br />Values lower 'Check "
 "Interval' except '0' are not supported"
 "Interval' except '0' are not supported"
 msgstr ""
 msgstr ""
+"Intervallo per forzare gli aggiornamenti da mandare al provider DDNS<br />Impostanto questo "
+"parametro a 0 forzerà lo script ad eseguirsi una sola volta<br />Valori sotto 'Controllo "
+"Intervallo' eccetto '0' non sono supportati"
 
 
 msgid "It is NOT recommended for casual users to change settings on this page."
 msgid "It is NOT recommended for casual users to change settings on this page."
-msgstr ""
+msgstr "Non è raccomandato agli utenti casuali di cambiare le opzioni in questa pagina."
 
 
 msgid "Last Update"
 msgid "Last Update"
-msgstr ""
+msgstr "Ultimo Aggiornamento"
 
 
 msgid "Loading"
 msgid "Loading"
-msgstr ""
+msgstr "Caricando"
 
 
 msgid "Log File Viewer"
 msgid "Log File Viewer"
-msgstr ""
+msgstr "Visualizzatore Registro"
 
 
 msgid "Log directory"
 msgid "Log directory"
-msgstr ""
+msgstr "Directory registro"
 
 
 msgid "Log length"
 msgid "Log length"
-msgstr ""
+msgstr "Lunghezza registro"
 
 
 msgid "Log to file"
 msgid "Log to file"
-msgstr ""
+msgstr "Registra su file"
 
 
 msgid "Log to syslog"
 msgid "Log to syslog"
-msgstr ""
+msgstr "Registra su syslog"
 
 
 msgid "Lookup Hostname"
 msgid "Lookup Hostname"
-msgstr ""
+msgstr "Indirizzo da consultare"
 
 
 msgid "NOT installed"
 msgid "NOT installed"
-msgstr ""
+msgstr "NON installato"
 
 
 msgid ""
 msgid ""
 "Neither GNU Wget with SSL nor cURL installed to select a network to use for "
 "Neither GNU Wget with SSL nor cURL installed to select a network to use for "
 "communication."
 "communication."
 msgstr ""
 msgstr ""
+"Nè GNU Wget con SSL nè cURL installati per selezionare una rete da usare per "
+"comunicazione."
 
 
 msgid ""
 msgid ""
 "Neither GNU Wget with SSL nor cURL installed to support secure updates via "
 "Neither GNU Wget with SSL nor cURL installed to support secure updates via "
 "HTTPS protocol."
 "HTTPS protocol."
 msgstr ""
 msgstr ""
+"Nè GNU Wget con SSL nè cURL installati per supportare aggiornamenti sicuri via "
+"protocollo HTTPS."
 
 
 msgid "Network"
 msgid "Network"
 msgstr "Rete"
 msgstr "Rete"
 
 
 msgid "Network on which the ddns-updater scripts will be started"
 msgid "Network on which the ddns-updater scripts will be started"
-msgstr ""
+msgstr "Rete su cui lo script di aggiornamento DDNS sara avviato"
 
 
 msgid "Never"
 msgid "Never"
-msgstr ""
+msgstr "Mai"
 
 
 msgid "Next Update"
 msgid "Next Update"
-msgstr ""
+msgstr "Prossimo Aggiornamento"
 
 
 msgid "No certificates found"
 msgid "No certificates found"
-msgstr ""
+msgstr "Nessun certificato trovato"
 
 
 msgid "No data"
 msgid "No data"
-msgstr ""
+msgstr "Nessuno dato"
 
 
 msgid "No logging"
 msgid "No logging"
-msgstr ""
+msgstr "Nessun registro"
 
 
 msgid "Non-public and by default blocked IP's"
 msgid "Non-public and by default blocked IP's"
-msgstr ""
+msgstr "Ip non pubblici e bloccati di default"
 
 
 msgid "Notice"
 msgid "Notice"
-msgstr ""
+msgstr "Avviso"
 
 
 msgid "Number of last lines stored in log files"
 msgid "Number of last lines stored in log files"
-msgstr ""
+msgstr "Numero di ultime linee memorizzato nei file registro"
 
 
 msgid "OPTIONAL: Force the usage of pure IPv4/IPv6 only communication."
 msgid "OPTIONAL: Force the usage of pure IPv4/IPv6 only communication."
-msgstr ""
+msgstr "OPZIONALE: Forza l'uso di puro IPv4/IPv6 solo comunicazione."
 
 
 msgid "OPTIONAL: Force the use of TCP instead of default UDP on DNS requests."
 msgid "OPTIONAL: Force the use of TCP instead of default UDP on DNS requests."
-msgstr ""
+msgstr "OPZIONALE: Forza l'uso del TCP invece del UDP di default per richieste DNS."
 
 
 msgid "OPTIONAL: Network to use for communication"
 msgid "OPTIONAL: Network to use for communication"
-msgstr ""
+msgstr "OPZIONALE: Rete da usare per comunicazione"
 
 
 msgid "OPTIONAL: Proxy-Server for detection and updates."
 msgid "OPTIONAL: Proxy-Server for detection and updates."
-msgstr ""
+msgstr "OPZIONALE: Server Proxy per rivelazioni e aggiornamenti."
 
 
 msgid "OPTIONAL: Use non-default DNS-Server to detect 'Registered IP'."
 msgid "OPTIONAL: Use non-default DNS-Server to detect 'Registered IP'."
-msgstr ""
+msgstr "OPZIONALE: Usa Server DNS non di default per individuare 'IP Registrati'."
 
 
 msgid "On Error the script will retry the failed action after given time"
 msgid "On Error the script will retry the failed action after given time"
-msgstr ""
+msgstr "Ad Errore lo script riproverà l'azione fallita dopo il tempo dato"
 
 
 msgid "On Error the script will stop execution after given number of retrys"
 msgid "On Error the script will stop execution after given number of retrys"
-msgstr ""
+msgstr "Ad Errore lo script fermerà l'esecuzione dopo il numero di tentativi dati"
 
 
 msgid "OpenWrt Wiki"
 msgid "OpenWrt Wiki"
 msgstr ""
 msgstr ""
 
 
 msgid "Optional Encoded Parameter"
 msgid "Optional Encoded Parameter"
-msgstr ""
+msgstr "Parametro Codificato Opzionale"
 
 
 msgid "Optional Parameter"
 msgid "Optional Parameter"
-msgstr ""
+msgstr "Parametro Opzionale"
 
 
 msgid "Optional: Replaces [PARAMENC] in Update-URL (URL-encoded)"
 msgid "Optional: Replaces [PARAMENC] in Update-URL (URL-encoded)"
-msgstr ""
+msgstr "Opzionale: Sostituisci [PARAMENC] nell'URL di aggiornamento (URL codificato)"
 
 
 msgid "Optional: Replaces [PARAMOPT] in Update-URL (NOT URL-encoded)"
 msgid "Optional: Replaces [PARAMOPT] in Update-URL (NOT URL-encoded)"
-msgstr ""
+msgstr "Opzionale: Sostituisci [PARAMOPT] nell'URL di aggiornamento (URL NON codificato)"
 
 
 msgid "Overview"
 msgid "Overview"
-msgstr ""
+msgstr "Riassunto"
 
 
 msgid "PROXY-Server"
 msgid "PROXY-Server"
-msgstr ""
+msgstr "Server PROXY"
 
 
 msgid "PROXY-Server not supported"
 msgid "PROXY-Server not supported"
-msgstr ""
+msgstr "SERVER PROXY non supportato"
 
 
 msgid "Password"
 msgid "Password"
 msgstr "Password"
 msgstr "Password"
 
 
 msgid "Path to CA-Certificate"
 msgid "Path to CA-Certificate"
-msgstr ""
+msgstr "Percorso per Certificato CA"
 
 
 msgid "Please [Save & Apply] your changes first"
 msgid "Please [Save & Apply] your changes first"
-msgstr ""
+msgstr "Per favore [Salva & Applica] prima i cambiamenti"
 
 
 msgid "Please press [Read] button"
 msgid "Please press [Read] button"
-msgstr ""
+msgstr "Per favore premi il pulsante [Leggi]"
 
 
 msgid "Please update to the current version!"
 msgid "Please update to the current version!"
-msgstr ""
+msgstr "Per favore aggiorna alla versione corrente!"
 
 
 msgid "Process ID"
 msgid "Process ID"
-msgstr ""
+msgstr "ID del Processo"
 
 
 msgid "Read / Reread log file"
 msgid "Read / Reread log file"
-msgstr ""
+msgstr "Leggi / Rileggi registro"
 
 
 msgid "Really change DDNS provider?"
 msgid "Really change DDNS provider?"
-msgstr ""
+msgstr "Cambiare provider DDNS veramente?"
 
 
 msgid "Registered IP"
 msgid "Registered IP"
-msgstr ""
+msgstr "IP Registrato"
 
 
 msgid "Replaces [DOMAIN] in Update-URL"
 msgid "Replaces [DOMAIN] in Update-URL"
-msgstr ""
+msgstr "Sostituisci [DOMAIN] nell'URL di aggiornamento"
 
 
 msgid "Replaces [PASSWORD] in Update-URL (URL-encoded)"
 msgid "Replaces [PASSWORD] in Update-URL (URL-encoded)"
-msgstr ""
+msgstr "Sostituisci [PASSWORD] nell'URL di aggiornamento (URL codificato)"
 
 
 msgid "Replaces [USERNAME] in Update-URL (URL-encoded)"
 msgid "Replaces [USERNAME] in Update-URL (URL-encoded)"
-msgstr ""
+msgstr "Sostituisci [NOME UTENTE] nell'URL di aggiornamento (URL codificato)"
 
 
 msgid "Run once"
 msgid "Run once"
-msgstr ""
+msgstr "Esegui una volta"
 
 
 msgid "Script"
 msgid "Script"
 msgstr ""
 msgstr ""
 
 
 msgid "Show more"
 msgid "Show more"
-msgstr ""
+msgstr "Mostra di più"
 
 
 msgid "Software update required"
 msgid "Software update required"
-msgstr ""
+msgstr "Richiesto aggiornamento Software"
 
 
 msgid "Specifying a DNS-Server is not supported"
 msgid "Specifying a DNS-Server is not supported"
-msgstr ""
+msgstr "Specificare un server DNS non è supportato"
 
 
 msgid "Start"
 msgid "Start"
-msgstr ""
+msgstr "Inizio"
 
 
 msgid "Start / Stop"
 msgid "Start / Stop"
-msgstr ""
+msgstr "Inizio / Stop"
 
 
 msgid "Status directory"
 msgid "Status directory"
 msgstr ""
 msgstr ""
 
 
 msgid "Stopped"
 msgid "Stopped"
-msgstr ""
+msgstr "Fermato"
 
 
 msgid ""
 msgid ""
 "The currently installed 'ddns-scripts' package did not support all available "
 "The currently installed 'ddns-scripts' package did not support all available "
 "settings."
 "settings."
 msgstr ""
 msgstr ""
+"Il pacchetto 'ddns-scripts' attualmente installato non supporta tutte le opzioni "
+"disponibili."
 
 
 msgid "The default setting of '0' will retry infinite."
 msgid "The default setting of '0' will retry infinite."
-msgstr ""
+msgstr "L'opzione di default '0' riproverà all'infinito."
 
 
 msgid "There is no service configured."
 msgid "There is no service configured."
-msgstr ""
+msgstr "Non c'è un servizio configurato."
 
 
 msgid "Timer Settings"
 msgid "Timer Settings"
-msgstr ""
+msgstr "Impostazioni del Timer"
 
 
 msgid "To change global settings click here"
 msgid "To change global settings click here"
-msgstr ""
+msgstr "Per cambiare le opzioni globali clicca qui"
 
 
 msgid "To use cURL activate this option."
 msgid "To use cURL activate this option."
-msgstr ""
+msgstr "Per usare cURL attiva questa opzione."
 
 
 msgid "URL"
 msgid "URL"
 msgstr "URL"
 msgstr "URL"
 
 
 msgid "URL to detect"
 msgid "URL to detect"
-msgstr ""
+msgstr "URL da individuare"
 
 
 msgid "Unknown error"
 msgid "Unknown error"
-msgstr ""
+msgstr "Errore sconosciuto"
 
 
 msgid ""
 msgid ""
 "Update URL to be used for updating your DDNS Provider.<br />Follow "
 "Update URL to be used for updating your DDNS Provider.<br />Follow "
 "instructions you will find on their WEB page."
 "instructions you will find on their WEB page."
 msgstr ""
 msgstr ""
+"L'URL di aggiornamento da usare per aggiornare il tuo Provider DDNS.<br />"
+"Segui le istruzioni che trovi sulla loro pagina WEB."
 
 
 msgid "Update error"
 msgid "Update error"
-msgstr ""
+msgstr "Errore di aggiornamento"
 
 
 msgid "Use HTTP Secure"
 msgid "Use HTTP Secure"
-msgstr ""
+msgstr "Usa HTTP Sicuro"
 
 
 msgid "Use cURL"
 msgid "Use cURL"
-msgstr ""
+msgstr "Usa cURL"
 
 
 msgid "User defined script to read systems IP-Address"
 msgid "User defined script to read systems IP-Address"
-msgstr ""
+msgstr "Script definito dall'utente per leggere l'indirizzo IP dei sistemi"
 
 
 msgid "Username"
 msgid "Username"
 msgstr "Nome Utente"
 msgstr "Nome Utente"
 
 
 msgid "Using specific DNS Server not supported"
 msgid "Using specific DNS Server not supported"
-msgstr ""
+msgstr "Usare specifici Server DNS non supportato"
 
 
 msgid "Verify"
 msgid "Verify"
-msgstr ""
+msgstr "Verifica"
 
 
 msgid "Version"
 msgid "Version"
-msgstr ""
+msgstr "Versione"
 
 
 msgid "Version Information"
 msgid "Version Information"
-msgstr ""
+msgstr "Informazione Versione"
 
 
 msgid "Waiting for changes to be applied..."
 msgid "Waiting for changes to be applied..."
-msgstr ""
+msgstr "Aspettando l'applicazione dei cambiamenti..."
 
 
 msgid "Warning"
 msgid "Warning"
-msgstr ""
+msgstr "Allarme"
 
 
 msgid ""
 msgid ""
 "Writes detailed messages to log file. File will be truncated automatically."
 "Writes detailed messages to log file. File will be truncated automatically."
 msgstr ""
 msgstr ""
+"Scrivi messaggi dettagliati sul registro. Il file sarà tagliato automaticamente."
 
 
 msgid ""
 msgid ""
 "Writes log messages to syslog. Critical Errors will always be written to "
 "Writes log messages to syslog. Critical Errors will always be written to "
 "syslog."
 "syslog."
 msgstr ""
 msgstr ""
+"Scrivi i messaggi registro al syslog. Gli Errori Critici saranno sempre scritti "
+"sul syslog."
 
 
 msgid ""
 msgid ""
 "You should install 'bind-host' or 'knot-host' or 'drill' or 'hostip' "
 "You should install 'bind-host' or 'knot-host' or 'drill' or 'hostip' "
 "package, if you need to specify a DNS server to detect your registered IP."
 "package, if you need to specify a DNS server to detect your registered IP."
 msgstr ""
 msgstr ""
+"Dovresti installare il pacchetto 'bind-host' o 'knot-host' o 'drill' o 'hostip', "
+"se hai bisogno di specificare un server DNS che identifichi il tuo IP registrato."
 
 
 msgid ""
 msgid ""
 "You should install 'bind-host' or 'knot-host' or 'drill' package for DNS "
 "You should install 'bind-host' or 'knot-host' or 'drill' package for DNS "
 "requests."
 "requests."
 msgstr ""
 msgstr ""
+"Dovresti installare il pacchetto 'bind-host' o 'knot-host' o 'drill' per le "
+"richieste DNS."
 
 
 msgid "You should install 'wget' or 'curl' or 'uclient-fetch' package."
 msgid "You should install 'wget' or 'curl' or 'uclient-fetch' package."
-msgstr ""
+msgstr "Dovresti installare il pacchetto 'wget' o 'curl' o 'uclient-fetch'."
 
 
 msgid ""
 msgid ""
 "You should install 'wget' or 'curl' or 'uclient-fetch' with 'libustream-"
 "You should install 'wget' or 'curl' or 'uclient-fetch' with 'libustream-"
 "*ssl' package."
 "*ssl' package."
 msgstr ""
 msgstr ""
+"Dovresti installare il pacchetto 'wget' o 'curl' o 'uclient-fetch' con il "
+"pacchetto 'libustream-*ssl'."
 
 
 msgid "You should install 'wget' or 'curl' package."
 msgid "You should install 'wget' or 'curl' package."
-msgstr ""
+msgstr "Dovresti installare il pacchetto 'wget' o 'curl'."
 
 
 msgid ""
 msgid ""
 "You should install 'wget' or 'uclient-fetch' package or replace libcurl."
 "You should install 'wget' or 'uclient-fetch' package or replace libcurl."
 msgstr ""
 msgstr ""
+"Dovresti installare il pacchetto 'wget' o 'uclient-fetch' o sostituire libcurl."
 
 
 msgid "cURL is installed, but libcurl was compiled without proxy support."
 msgid "cURL is installed, but libcurl was compiled without proxy support."
-msgstr ""
+msgstr "cURL è installato, ma libcurl è compilato senza supporto proxy."
 
 
 msgid "cURL without Proxy Support"
 msgid "cURL without Proxy Support"
-msgstr ""
+msgstr "cURL senza Supporto Proxy"
 
 
 msgid "can not detect local IP. Please select a different Source combination"
 msgid "can not detect local IP. Please select a different Source combination"
-msgstr ""
+msgstr "non individuo l'IP locale. Per favore seleziona una combinazione Sorgente diversa"
 
 
 msgid "can not resolve host:"
 msgid "can not resolve host:"
-msgstr ""
+msgstr "non posso risolvere host:"
 
 
 msgid "config error"
 msgid "config error"
-msgstr ""
+msgstr "errore configurazione"
 
 
 msgid "days"
 msgid "days"
-msgstr ""
+msgstr "giorni"
 
 
 msgid "directory or path/file"
 msgid "directory or path/file"
-msgstr ""
+msgstr "directory o percorso/file"
 
 
 msgid "either url or script could be set"
 msgid "either url or script could be set"
-msgstr ""
+msgstr "o l'url o lo script può essere impostato"
 
 
 msgid "enable here"
 msgid "enable here"
-msgstr ""
+msgstr "abilita qui"
 
 
 msgid "file or directory not found or not 'IGNORE'"
 msgid "file or directory not found or not 'IGNORE'"
-msgstr ""
+msgstr "file o directory non trovati o non 'IGNORE'"
 
 
 msgid "help"
 msgid "help"
-msgstr ""
+msgstr "aiuto"
 
 
 msgid "hours"
 msgid "hours"
-msgstr ""
+msgstr "ore"
 
 
 msgid "installed"
 msgid "installed"
-msgstr ""
+msgstr "installato"
 
 
 msgid "invalid FQDN / required - Sample"
 msgid "invalid FQDN / required - Sample"
-msgstr ""
+msgstr "FQDN invalido / richiesto - Esempio"
 
 
 msgid "minimum value '0'"
 msgid "minimum value '0'"
-msgstr ""
+msgstr "valore minimo '0'"
 
 
 msgid "minimum value '1'"
 msgid "minimum value '1'"
-msgstr ""
+msgstr "valore minimo '1'"
 
 
 msgid "minimum value 5 minutes == 300 seconds"
 msgid "minimum value 5 minutes == 300 seconds"
-msgstr ""
+msgstr "valore minimo 5 minuti == 300 secondi"
 
 
 msgid "minutes"
 msgid "minutes"
-msgstr ""
+msgstr "minuti"
 
 
 msgid "missing / required"
 msgid "missing / required"
-msgstr ""
+msgstr "mancante / richiesto"
 
 
 msgid "must be greater or equal 'Check Interval'"
 msgid "must be greater or equal 'Check Interval'"
-msgstr ""
+msgstr "deve essere più grande o uguale "Controlla Intervallo'"
 
 
 msgid "must start with 'http://'"
 msgid "must start with 'http://'"
-msgstr ""
+msgstr "deve iniziare con 'http://'"
 
 
 msgid "nc (netcat) can not connect"
 msgid "nc (netcat) can not connect"
-msgstr ""
+msgstr "nc (netcat) non può connettersi"
 
 
 msgid "never"
 msgid "never"
-msgstr ""
+msgstr "mai"
 
 
 msgid "no data"
 msgid "no data"
-msgstr ""
+msgstr "Niente dati"
 
 
 msgid "not found or not executable - Sample: '/path/to/script.sh'"
 msgid "not found or not executable - Sample: '/path/to/script.sh'"
-msgstr ""
+msgstr "non trovato o non eseguibile - Esempio: '/path/to/script.sh'"
 
 
 msgid "nslookup can not resolve host"
 msgid "nslookup can not resolve host"
-msgstr ""
+msgstr "nslookup non può risolvere l'host"
 
 
 msgid "or"
 msgid "or"
-msgstr ""
+msgstr "o"
 
 
 msgid "or higher"
 msgid "or higher"
-msgstr ""
+msgstr "o più alto"
 
 
 msgid "please disable"
 msgid "please disable"
-msgstr ""
+msgstr "per favore disabilita"
 
 
 msgid "please remove entry"
 msgid "please remove entry"
-msgstr ""
+msgstr "per favore rimuovi la voce"
 
 
 msgid "please select 'IPv4' address version"
 msgid "please select 'IPv4' address version"
-msgstr ""
+msgstr "per favore seleziona versione indirizzo 'IPv4'"
 
 
 msgid "please select 'IPv4' address version in"
 msgid "please select 'IPv4' address version in"
-msgstr ""
+msgstr "per favore seleziona versione indirizzo 'IPv4' in"
 
 
 msgid "please set to 'default'"
 msgid "please set to 'default'"
-msgstr ""
+msgstr "per favore imposta a 'default'"
 
 
 msgid "proxy port missing"
 msgid "proxy port missing"
-msgstr ""
+msgstr "porta proxy mancante"
 
 
 msgid "required"
 msgid "required"
-msgstr ""
+msgstr "richiesto"
 
 
 msgid "seconds"
 msgid "seconds"
-msgstr ""
+msgstr "secondi"
 
 
 msgid "to run HTTPS without verification of server certificates (insecure)"
 msgid "to run HTTPS without verification of server certificates (insecure)"
-msgstr ""
+msgstr "per eseguire HTTPS senza la verifica dei certificati del server (insicuro)"
 
 
 msgid "unknown error"
 msgid "unknown error"
-msgstr ""
+msgstr "errore sconosciuto"
 
 
 msgid "unspecific error"
 msgid "unspecific error"
-msgstr ""
+msgstr "errore non specifico"
 
 
 msgid "use hostname, FQDN, IPv4- or IPv6-Address"
 msgid "use hostname, FQDN, IPv4- or IPv6-Address"
-msgstr ""
+msgstr "usa nome host, FQDN, indirizzo IPv4 o IPv6"

+ 724 - 0
package/luci/applications/luci-app-ddns/po/sv/ddns.po

@@ -0,0 +1,724 @@
+msgid ""
+msgstr "Content-Type: text/plain; charset=UTF-8\n"
+
+msgid "&"
+msgstr "&"
+
+msgid "-- custom --"
+msgstr "-- anpassad --"
+
+msgid "-- default --"
+msgstr "-- standard --"
+
+msgid "Advanced Settings"
+msgstr "Avancerade inställningar"
+
+msgid "Allow non-public IP's"
+msgstr "Tillåt icke-publika IP-adresser"
+
+msgid "Applying changes"
+msgstr "Verkställer ändringar"
+
+msgid "Basic Settings"
+msgstr "Standardinställningar"
+
+msgid ""
+"Below a list of configuration tips for your system to run Dynamic DNS "
+"updates without limitations"
+msgstr ""
+
+msgid ""
+"Below is a list of configured DDNS configurations and their current state."
+msgstr ""
+"Här nedanför finns det en lista över konfigurerade DDNS-konfigurationer och deras nuvarande skick."
+
+msgid "Bind Network"
+msgstr "Bind samman nätverk"
+
+msgid "Binding to a specific network not supported"
+msgstr "Att binda samman med ett specifikt nätverk stöds inte"
+
+msgid ""
+"BusyBox's nslookup and Wget do not support to specify the IP version to use "
+"for communication with DDNS Provider!"
+msgstr ""
+
+msgid ""
+"BusyBox's nslookup and hostip do not support to specify to use TCP instead "
+"of default UDP when requesting DNS server!"
+msgstr ""
+
+msgid ""
+"BusyBox's nslookup in the current compiled version does not handle given DNS "
+"Servers correctly!"
+msgstr ""
+
+msgid "Casual users should not change this setting"
+msgstr ""
+
+msgid "Change provider"
+msgstr "Byt operatör"
+
+msgid "Check Interval"
+msgstr "Kontroll-intervall"
+
+msgid "Collecting data..."
+msgstr "Samlar in data..."
+
+msgid "Config error"
+msgstr "Konfigurationsfel"
+
+msgid "Configuration"
+msgstr "Konfiguration"
+
+msgid ""
+"Configure here the details for all Dynamic DNS services including this LuCI "
+"application."
+msgstr ""
+
+msgid "Configure here the details for selected Dynamic DNS service."
+msgstr ""
+
+msgid "Current setting"
+msgstr "Nuvarande inställning"
+
+msgid ""
+"Currently DDNS updates are not started at boot or on interface events.<br /"
+">This is the default if you run DDNS scripts by yourself (i.e. via cron with "
+"force_interval set to '0')"
+msgstr ""
+
+msgid ""
+"Currently DDNS updates are not started at boot or on interface events.<br /"
+">You can start/stop each configuration here. It will run until next reboot."
+msgstr ""
+
+msgid "Custom update script to be used for updating your DDNS Provider."
+msgstr ""
+
+msgid "Custom update-URL"
+msgstr "Anpassad webbadress för uppdatering"
+
+msgid "Custom update-script"
+msgstr "Anpassat uppdateringsskript"
+
+msgid "DDNS Autostart disabled"
+msgstr ""
+
+msgid "DDNS Client Configuration"
+msgstr ""
+
+msgid "DDNS Client Documentation"
+msgstr ""
+
+msgid "DDNS Service provider"
+msgstr ""
+
+msgid "DNS requests via TCP not supported"
+msgstr ""
+
+msgid "DNS-Server"
+msgstr "DNS-server"
+
+msgid "Date format"
+msgstr "Datumformat"
+
+msgid "Defines the Web page to read systems IPv4-Address from"
+msgstr ""
+
+msgid "Defines the Web page to read systems IPv6-Address from"
+msgstr ""
+
+msgid "Defines the interface to read systems IP-Address from"
+msgstr ""
+
+msgid "Defines the network to read systems IPv4-Address from"
+msgstr ""
+
+msgid "Defines the network to read systems IPv6-Address from"
+msgstr ""
+
+msgid ""
+"Defines the source to read systems IPv4-Address from, that will be send to "
+"the DDNS provider"
+msgstr ""
+
+msgid ""
+"Defines the source to read systems IPv6-Address from, that will be send to "
+"the DDNS provider"
+msgstr ""
+
+msgid "Defines which IP address 'IPv4/IPv6' is send to the DDNS provider"
+msgstr ""
+
+msgid "Details for"
+msgstr "Detaljer för"
+
+msgid "Directory contains Log files for each running section"
+msgstr ""
+
+msgid ""
+"Directory contains PID and other status information for each running section"
+msgstr ""
+
+msgid "Disabled"
+msgstr "Inaktivera"
+
+msgid "Domain"
+msgstr "Domän"
+
+msgid "Dynamic DNS"
+msgstr "Dynamisk DNS"
+
+msgid ""
+"Dynamic DNS allows that your router can be reached with a fixed hostname "
+"while having a dynamically changing IP address."
+msgstr ""
+
+msgid "Enable secure communication with DDNS provider"
+msgstr ""
+
+msgid "Enabled"
+msgstr "Aktiverad"
+
+msgid "Error"
+msgstr "Fel"
+
+msgid "Error Retry Counter"
+msgstr ""
+
+msgid "Error Retry Interval"
+msgstr ""
+
+msgid "Event Network"
+msgstr ""
+
+msgid "File"
+msgstr "Fil"
+
+msgid "File not found"
+msgstr "Filen hittades inte"
+
+msgid "File not found or empty"
+msgstr "Filen hittades inte eller tom"
+
+msgid ""
+"Follow this link<br />You will find more hints to optimize your system to "
+"run DDNS scripts with all options"
+msgstr ""
+
+msgid "For detailed information about parameter settings look here."
+msgstr ""
+
+msgid "For supported codes look here"
+msgstr ""
+
+msgid "Force IP Version"
+msgstr "Tvinga IP-version"
+
+msgid "Force IP Version not supported"
+msgstr "Påtvingad IP-version stöds inte"
+
+msgid "Force Interval"
+msgstr ""
+
+msgid "Force TCP on DNS"
+msgstr ""
+
+msgid "Forced IP Version don't matched"
+msgstr ""
+
+msgid "Format"
+msgstr "Format"
+
+msgid "Format: IP or FQDN"
+msgstr "Format: IP eller FQDN"
+
+msgid ""
+"GNU Wget will use the IP of given network, cURL will use the physical "
+"interface."
+msgstr ""
+"GNU Wget kommer att använda IP-adressen för det angivna nätverket, cURL "
+"kommer att använda det fysiska gränssnittet."
+
+msgid "Global Settings"
+msgstr "Globala inställningar"
+
+msgid "HTTPS not supported"
+msgstr "HTTPS stöds inte"
+
+msgid "Hints"
+msgstr "Ledtrådar"
+
+msgid "Hostname/FQDN to validate, if IP update happen or necessary"
+msgstr ""
+
+msgid "IP address source"
+msgstr "IP-adressens källa"
+
+msgid "IP address version"
+msgstr "Version för IP-adress"
+
+msgid "IPv4-Address"
+msgstr "IPv4-adress"
+
+msgid "IPv6 address must be given in square brackets"
+msgstr ""
+
+msgid ""
+"IPv6 is currently not (fully) supported by this system<br />Please follow "
+"the instructions on OpenWrt's homepage to enable IPv6 support<br />or update "
+"your system to the latest OpenWrt Release"
+msgstr ""
+
+msgid "IPv6 not supported"
+msgstr "IPv6 stöds inte"
+
+msgid "IPv6-Address"
+msgstr "IPv6-adress"
+
+msgid "If both cURL and GNU Wget are installed, Wget is used by default."
+msgstr ""
+"Om både cURL och GNU Wget är installerade så används Wget som standard."
+
+msgid ""
+"If this service section is disabled it could not be started.<br />Neither "
+"from LuCI interface nor from console"
+msgstr ""
+
+msgid "If using secure communication you should verify server certificates!"
+msgstr ""
+
+msgid ""
+"If you want to send updates for IPv4 and IPv6 you need to define two "
+"separate Configurations i.e. 'myddns_ipv4' and 'myddns_ipv6'"
+msgstr ""
+
+msgid ""
+"In some versions cURL/libcurl in OpenWrt is compiled without proxy support."
+msgstr ""
+
+msgid "Info"
+msgstr "Info"
+
+msgid ""
+"Install 'ca-certificates' package or needed certificates by hand into /etc/"
+"ssl/certs default directory"
+msgstr ""
+
+msgid "Interface"
+msgstr "Gränssnitt"
+
+msgid ""
+"Interval to check for changed IP<br />Values below 5 minutes == 300 seconds "
+"are not supported"
+msgstr ""
+
+msgid ""
+"Interval to force updates send to DDNS Provider<br />Setting this parameter "
+"to 0 will force the script to only run once<br />Values lower 'Check "
+"Interval' except '0' are not supported"
+msgstr ""
+
+msgid "It is NOT recommended for casual users to change settings on this page."
+msgstr ""
+"Det är INTE rekommenderat för vanliga användare att ändra inställningar på "
+"den här sidan."
+
+msgid "Last Update"
+msgstr "Senaste uppdateringen"
+
+msgid "Loading"
+msgstr "Laddar"
+
+msgid "Log File Viewer"
+msgstr "Visare för loggfil"
+
+msgid "Log directory"
+msgstr ""
+
+msgid "Log length"
+msgstr "Loggens längd"
+
+msgid "Log to file"
+msgstr "Logga till fil"
+
+msgid "Log to syslog"
+msgstr "Logga till syslog"
+
+msgid "Lookup Hostname"
+msgstr "Kolla upp värdnamn"
+
+msgid "NOT installed"
+msgstr "INTE installerad"
+
+msgid ""
+"Neither GNU Wget with SSL nor cURL installed to select a network to use for "
+"communication."
+msgstr ""
+
+msgid ""
+"Neither GNU Wget with SSL nor cURL installed to support secure updates via "
+"HTTPS protocol."
+msgstr ""
+
+msgid "Network"
+msgstr "Nätverk"
+
+msgid "Network on which the ddns-updater scripts will be started"
+msgstr ""
+
+msgid "Never"
+msgstr "Aldrig"
+
+msgid "Next Update"
+msgstr "Nästa uppdatering"
+
+msgid "No certificates found"
+msgstr "Inga ceritifikat hittades"
+
+msgid "No data"
+msgstr "Ingen data"
+
+msgid "No logging"
+msgstr "Ingen loggning"
+
+msgid "Non-public and by default blocked IP's"
+msgstr ""
+
+msgid "Notice"
+msgstr ""
+
+msgid "Number of last lines stored in log files"
+msgstr ""
+
+msgid "OPTIONAL: Force the usage of pure IPv4/IPv6 only communication."
+msgstr ""
+
+msgid "OPTIONAL: Force the use of TCP instead of default UDP on DNS requests."
+msgstr ""
+
+msgid "OPTIONAL: Network to use for communication"
+msgstr ""
+
+msgid "OPTIONAL: Proxy-Server for detection and updates."
+msgstr ""
+
+msgid "OPTIONAL: Use non-default DNS-Server to detect 'Registered IP'."
+msgstr ""
+
+msgid "On Error the script will retry the failed action after given time"
+msgstr ""
+
+msgid "On Error the script will stop execution after given number of retrys"
+msgstr ""
+
+msgid "OpenWrt Wiki"
+msgstr "Wiki för OpenWrt"
+
+msgid "Optional Encoded Parameter"
+msgstr ""
+
+msgid "Optional Parameter"
+msgstr "Valfri parameter"
+
+msgid "Optional: Replaces [PARAMENC] in Update-URL (URL-encoded)"
+msgstr ""
+
+msgid "Optional: Replaces [PARAMOPT] in Update-URL (NOT URL-encoded)"
+msgstr ""
+
+msgid "Overview"
+msgstr ""
+
+msgid "PROXY-Server"
+msgstr "PROXY-server"
+
+msgid "PROXY-Server not supported"
+msgstr "PROXY-servern stöds inte"
+
+msgid "Password"
+msgstr "Lösenord"
+
+msgid "Path to CA-Certificate"
+msgstr ""
+
+msgid "Please [Save & Apply] your changes first"
+msgstr "Vänligen [Spara & Verkställ] dina ändringar först"
+
+msgid "Please press [Read] button"
+msgstr "Vänligen tryck på [Läs]-knappen"
+
+msgid "Please update to the current version!"
+msgstr "Vänligen uppdatera till den senaste versionen!"
+
+msgid "Process ID"
+msgstr ""
+
+msgid "Read / Reread log file"
+msgstr "Läs / Läs om loggfilen"
+
+msgid "Really change DDNS provider?"
+msgstr ""
+
+msgid "Registered IP"
+msgstr "Registrerad IP"
+
+msgid "Replaces [DOMAIN] in Update-URL"
+msgstr ""
+
+msgid "Replaces [PASSWORD] in Update-URL (URL-encoded)"
+msgstr ""
+
+msgid "Replaces [USERNAME] in Update-URL (URL-encoded)"
+msgstr ""
+
+msgid "Run once"
+msgstr "Kör en gång"
+
+msgid "Script"
+msgstr "Skript"
+
+msgid "Show more"
+msgstr "Visa mer"
+
+msgid "Software update required"
+msgstr ""
+
+msgid "Specifying a DNS-Server is not supported"
+msgstr ""
+
+msgid "Start"
+msgstr "Starta"
+
+msgid "Start / Stop"
+msgstr "Starta / Stoppa"
+
+msgid "Status directory"
+msgstr ""
+
+msgid "Stopped"
+msgstr "Stoppad"
+
+msgid ""
+"The currently installed 'ddns-scripts' package did not support all available "
+"settings."
+msgstr ""
+
+msgid "The default setting of '0' will retry infinite."
+msgstr ""
+
+msgid "There is no service configured."
+msgstr "Det finns ingen tjänst inställd."
+
+msgid "Timer Settings"
+msgstr ""
+
+msgid "To change global settings click here"
+msgstr "Klicka här för att ändra på globala inställningar"
+
+msgid "To use cURL activate this option."
+msgstr ""
+
+msgid "URL"
+msgstr "Webbadress"
+
+msgid "URL to detect"
+msgstr "Webbadress att upptäcka"
+
+msgid "Unknown error"
+msgstr "Okänt fel"
+
+msgid ""
+"Update URL to be used for updating your DDNS Provider.<br />Follow "
+"instructions you will find on their WEB page."
+msgstr ""
+
+msgid "Update error"
+msgstr "Uppdateringsfel"
+
+msgid "Use HTTP Secure"
+msgstr "Använd Säker HTTP"
+
+msgid "Use cURL"
+msgstr "Använd cURL"
+
+msgid "User defined script to read systems IP-Address"
+msgstr ""
+
+msgid "Username"
+msgstr "Användarnamn"
+
+msgid "Using specific DNS Server not supported"
+msgstr ""
+
+msgid "Verify"
+msgstr "Verkställ"
+
+msgid "Version"
+msgstr "Version"
+
+msgid "Version Information"
+msgstr "Information om versionen"
+
+msgid "Waiting for changes to be applied..."
+msgstr "Väntar på att ändringarna ska bli verkställda..."
+
+msgid "Warning"
+msgstr "Varning"
+
+msgid ""
+"Writes detailed messages to log file. File will be truncated automatically."
+msgstr ""
+
+msgid ""
+"Writes log messages to syslog. Critical Errors will always be written to "
+"syslog."
+msgstr ""
+
+msgid ""
+"You should install 'bind-host' or 'knot-host' or 'drill' or 'hostip' "
+"package, if you need to specify a DNS server to detect your registered IP."
+msgstr ""
+
+msgid ""
+"You should install 'bind-host' or 'knot-host' or 'drill' package for DNS "
+"requests."
+msgstr ""
+
+msgid "You should install 'wget' or 'curl' or 'uclient-fetch' package."
+msgstr ""
+
+msgid ""
+"You should install 'wget' or 'curl' or 'uclient-fetch' with 'libustream-"
+"*ssl' package."
+msgstr ""
+
+msgid "You should install 'wget' or 'curl' package."
+msgstr ""
+
+msgid ""
+"You should install 'wget' or 'uclient-fetch' package or replace libcurl."
+msgstr ""
+
+msgid "cURL is installed, but libcurl was compiled without proxy support."
+msgstr ""
+
+msgid "cURL without Proxy Support"
+msgstr "cURL utan Proxy-stöd"
+
+msgid "can not detect local IP. Please select a different Source combination"
+msgstr ""
+"kan inte upptäcka lokal IP-adress. Vänligen välj en annorlunda Käll-"
+"kombination"
+
+msgid "can not resolve host:"
+msgstr "kan inte avgöra värd:"
+
+msgid "config error"
+msgstr "konfigurationsfel"
+
+msgid "days"
+msgstr "dagar"
+
+msgid "directory or path/file"
+msgstr ""
+
+msgid "either url or script could be set"
+msgstr "kunde varken fastställa webbadress eller skript"
+
+msgid "enable here"
+msgstr "aktivera här"
+
+msgid "file or directory not found or not 'IGNORE'"
+msgstr ""
+
+msgid "help"
+msgstr "hjälp"
+
+msgid "hours"
+msgstr "timmar"
+
+msgid "installed"
+msgstr "installerad"
+
+msgid "invalid FQDN / required - Sample"
+msgstr "ogiltig FQDN / behövs - Urval"
+
+msgid "minimum value '0'"
+msgstr "minimalt värde '0'"
+
+msgid "minimum value '1'"
+msgstr "minimalt värde '1'"
+
+msgid "minimum value 5 minutes == 300 seconds"
+msgstr "minimalt värde 5 minuter == 300 sekunder"
+
+msgid "minutes"
+msgstr "minutrar"
+
+msgid "missing / required"
+msgstr "saknas / behövs"
+
+msgid "must be greater or equal 'Check Interval'"
+msgstr ""
+
+msgid "must start with 'http://'"
+msgstr "måste börja med 'http://"
+
+msgid "nc (netcat) can not connect"
+msgstr "nc (netcat) kan inte ansluta"
+
+msgid "never"
+msgstr "aldrig"
+
+msgid "no data"
+msgstr "ingen data"
+
+msgid "not found or not executable - Sample: '/path/to/script.sh'"
+msgstr ""
+
+msgid "nslookup can not resolve host"
+msgstr ""
+
+msgid "or"
+msgstr "eller"
+
+msgid "or higher"
+msgstr "eller större"
+
+msgid "please disable"
+msgstr "vänligen inaktivera"
+
+msgid "please remove entry"
+msgstr "vänligen ta bort inmatningen"
+
+msgid "please select 'IPv4' address version"
+msgstr "vänligen välj version för 'IPv4'-adress"
+
+msgid "please select 'IPv4' address version in"
+msgstr ""
+
+msgid "please set to 'default'"
+msgstr ""
+
+msgid "proxy port missing"
+msgstr ""
+
+msgid "required"
+msgstr "behövs"
+
+msgid "seconds"
+msgstr "sekunder"
+
+msgid "to run HTTPS without verification of server certificates (insecure)"
+msgstr "för att köra HTTPS utan verifiering av server-certifikaten (osäkert)"
+
+msgid "unknown error"
+msgstr "okänt fel"
+
+msgid "unspecific error"
+msgstr "ospecifierat fel"
+
+msgid "use hostname, FQDN, IPv4- or IPv6-Address"
+msgstr "använd värdnamn, FQDN, IPv4- eller IPv6-adress"

+ 4 - 2
package/luci/applications/luci-app-diag-core/po/sv/diag_core.po

@@ -10,10 +10,10 @@ msgstr ""
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
 
 msgid "Configure Diagnostics"
 msgid "Configure Diagnostics"
-msgstr ""
+msgstr "Ställ in diagnostik"
 
 
 msgid "Diagnostics"
 msgid "Diagnostics"
-msgstr ""
+msgstr "Diagnostik"
 
 
 msgid ""
 msgid ""
 "The diagnostics available under this menu depend on what modules you have "
 "The diagnostics available under this menu depend on what modules you have "
@@ -29,3 +29,5 @@ msgid ""
 "With this menu you can configure network diagnostics, such as network device "
 "With this menu you can configure network diagnostics, such as network device "
 "scans and ping tests."
 "scans and ping tests."
 msgstr ""
 msgstr ""
+"Med den här menyn så kan du ställa in nätverksdiagnostik så som "
+"igenomsökningar och ping-tester för nätverksenheten."

+ 44 - 44
package/luci/applications/luci-app-diag-devinfo/po/sv/diag_devinfo.po

@@ -2,7 +2,7 @@ msgid ""
 msgstr ""
 msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Project-Id-Version: PACKAGE VERSION\n"
 "Project-Id-Version: PACKAGE VERSION\n"
-"Last-Translator: Automatically generated\n"
+"Last-Translator: Kristoffer Grundström <hamnisdude@gmail.com>\n"
 "Language-Team: none\n"
 "Language-Team: none\n"
 "Language: sv\n"
 "Language: sv\n"
 "MIME-Version: 1.0\n"
 "MIME-Version: 1.0\n"
@@ -10,22 +10,22 @@ msgstr ""
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
 
 msgid "Actions"
 msgid "Actions"
-msgstr ""
+msgstr "Åtgärder"
 
 
 msgid "Add"
 msgid "Add"
-msgstr ""
+msgstr "Lägg till"
 
 
 msgid "Beginning of MAC address range"
 msgid "Beginning of MAC address range"
-msgstr ""
+msgstr "Början av räckvidd för MAC-adress"
 
 
 msgid "Config Phone Scan"
 msgid "Config Phone Scan"
-msgstr ""
+msgstr "Konfigurera skanning av telefon"
 
 
 msgid "Configure"
 msgid "Configure"
-msgstr ""
+msgstr "Konfigurera"
 
 
 msgid "Configure Scans"
 msgid "Configure Scans"
-msgstr ""
+msgstr "Konfigurera skanningar"
 
 
 msgid ""
 msgid ""
 "Configure scanning for devices on specified networks. Decreasing 'Timeout', "
 "Configure scanning for devices on specified networks. Decreasing 'Timeout', "
@@ -40,46 +40,46 @@ msgid ""
 msgstr ""
 msgstr ""
 
 
 msgid "Delete"
 msgid "Delete"
-msgstr ""
+msgstr "Radera"
 
 
 msgid "Device Scan Config"
 msgid "Device Scan Config"
 msgstr ""
 msgstr ""
 
 
 msgid "Device Type"
 msgid "Device Type"
-msgstr ""
+msgstr "Enhetstyp"
 
 
 msgid "Devices discovered for"
 msgid "Devices discovered for"
 msgstr ""
 msgstr ""
 
 
 msgid "Devices on Network"
 msgid "Devices on Network"
-msgstr ""
+msgstr "Enheter på nätverket"
 
 
 msgid "Edit"
 msgid "Edit"
-msgstr ""
+msgstr "Redigera"
 
 
 msgid "Enable"
 msgid "Enable"
-msgstr ""
+msgstr "Aktivera"
 
 
 msgid "End of MAC address range"
 msgid "End of MAC address range"
 msgstr ""
 msgstr ""
 
 
 msgid "Go to relevant configuration page"
 msgid "Go to relevant configuration page"
-msgstr ""
+msgstr "Gå till relevant konfigurationssida"
 
 
 msgid "IP Address"
 msgid "IP Address"
-msgstr ""
+msgstr "IP-adress"
 
 
 msgid "Interface"
 msgid "Interface"
-msgstr ""
+msgstr "Gränssnitt"
 
 
 msgid "Invalid"
 msgid "Invalid"
-msgstr ""
+msgstr "Ogiltig"
 
 
 msgid "Link to Device"
 msgid "Link to Device"
-msgstr ""
+msgstr "Länka till enhet"
 
 
 msgid "MAC Address"
 msgid "MAC Address"
-msgstr ""
+msgstr "MAC-adress"
 
 
 msgid "MAC Device Info Overrides"
 msgid "MAC Device Info Overrides"
 msgstr ""
 msgstr ""
@@ -94,10 +94,10 @@ msgid "Milliseconds to sleep between requests (default 100)"
 msgstr ""
 msgstr ""
 
 
 msgid "Model"
 msgid "Model"
-msgstr ""
+msgstr "Modell"
 
 
 msgid "Name"
 msgid "Name"
-msgstr ""
+msgstr "Namn"
 
 
 msgid "Network Device Scan"
 msgid "Network Device Scan"
 msgstr ""
 msgstr ""
@@ -106,16 +106,16 @@ msgid "Network Device Scanning Configuration"
 msgstr ""
 msgstr ""
 
 
 msgid "Networks to scan for devices"
 msgid "Networks to scan for devices"
-msgstr ""
+msgstr "Nätverk att skanna efter enheter i"
 
 
 msgid "Networks to scan for supported devices"
 msgid "Networks to scan for supported devices"
 msgstr ""
 msgstr ""
 
 
 msgid "No SIP devices"
 msgid "No SIP devices"
-msgstr ""
+msgstr "Inga SIP-enheter"
 
 
 msgid "No devices detected"
 msgid "No devices detected"
-msgstr ""
+msgstr "Upptäckte inga enheter"
 
 
 msgid "Number of times to send requests (default 1)"
 msgid "Number of times to send requests (default 1)"
 msgstr ""
 msgstr ""
@@ -132,28 +132,28 @@ msgid "Perform Scans (this can take a few minutes)"
 msgstr ""
 msgstr ""
 
 
 msgid "Phone Information"
 msgid "Phone Information"
-msgstr ""
+msgstr "Information om telefon"
 
 
 msgid "Phone Scan"
 msgid "Phone Scan"
-msgstr ""
+msgstr "Skanning av telefon"
 
 
 msgid "Phone Scanning Configuration"
 msgid "Phone Scanning Configuration"
-msgstr ""
+msgstr "Konfiguration av skanning i telefon"
 
 
 msgid "Phones"
 msgid "Phones"
-msgstr ""
+msgstr "Telefoner"
 
 
 msgid "Ports"
 msgid "Ports"
-msgstr ""
+msgstr "Portar"
 
 
 msgid "Raw"
 msgid "Raw"
-msgstr ""
+msgstr ""
 
 
 msgid "Repeat Count"
 msgid "Repeat Count"
 msgstr ""
 msgstr ""
 
 
 msgid "Repeat Scans (this can take a few minutes)"
 msgid "Repeat Scans (this can take a few minutes)"
-msgstr ""
+msgstr "Repetera skanningar (det här kan ta några minuter)"
 
 
 msgid "SIP Device Information"
 msgid "SIP Device Information"
 msgstr ""
 msgstr ""
@@ -162,46 +162,46 @@ msgid "SIP Device Scan"
 msgstr ""
 msgstr ""
 
 
 msgid "SIP Device Scanning Configuration"
 msgid "SIP Device Scanning Configuration"
-msgstr ""
+msgstr "Skanningskonfiguration för SIP-enhet"
 
 
 msgid "SIP Devices on Network"
 msgid "SIP Devices on Network"
-msgstr ""
+msgstr "SIP-enheter på nätverk"
 
 
 msgid "SIP devices discovered for"
 msgid "SIP devices discovered for"
-msgstr ""
+msgstr "Upptäckta SIP-enheter för"
 
 
 msgid "Scan for devices on specified networks."
 msgid "Scan for devices on specified networks."
-msgstr ""
+msgstr "Skanna efter enheter i angivna nätverk."
 
 
 msgid "Scan for supported SIP devices on specified networks."
 msgid "Scan for supported SIP devices on specified networks."
-msgstr ""
+msgstr "Skannar efter SIP-enheter som stöds i angivna nätverk."
 
 
 msgid "Scanning Configuration"
 msgid "Scanning Configuration"
-msgstr ""
+msgstr "Skannar konfiguration"
 
 
 msgid "Scans for devices on specified networks."
 msgid "Scans for devices on specified networks."
-msgstr ""
+msgstr "Skannar efter enheter i angivna nätverk."
 
 
 msgid "Sleep Between Requests"
 msgid "Sleep Between Requests"
-msgstr ""
+msgstr "Sov mellan förfrågningar"
 
 
 msgid "Subnet"
 msgid "Subnet"
-msgstr ""
+msgstr "Subnät"
 
 
 msgid "This section contains no values yet"
 msgid "This section contains no values yet"
-msgstr ""
+msgstr "Den här sektionen innehåller inga värden än"
 
 
 msgid "Time to wait for responses in seconds (default 10)"
 msgid "Time to wait for responses in seconds (default 10)"
-msgstr ""
+msgstr "Tid att vänta på svar i sekunder (standard 10)"
 
 
 msgid "Timeout"
 msgid "Timeout"
 msgstr ""
 msgstr ""
 
 
 msgid "Use Configuration"
 msgid "Use Configuration"
-msgstr ""
+msgstr "Använd konfiguration"
 
 
 msgid "Vendor"
 msgid "Vendor"
-msgstr ""
+msgstr "Tillverkare"
 
 
 msgid "check other networks"
 msgid "check other networks"
-msgstr ""
+msgstr "kolla andra nätverk"

+ 13 - 0
package/luci/applications/luci-app-dnscrypt-proxy/Makefile

@@ -0,0 +1,13 @@
+# Copyright 2017 Dirk Brenken (dev@brenken.org)
+# This is free software, licensed under the Apache License, Version 2.0
+#
+
+include $(TOPDIR)/rules.mk
+
+LUCI_TITLE:=LuCI support for DNSCrypt-Proxy
+LUCI_DEPENDS:=+uclient-fetch +dnscrypt-proxy
+LUCI_PKGARCH:=all
+
+include ../../luci.mk
+
+# call BuildPackage - OpenWrt buildroot signature

+ 32 - 0
package/luci/applications/luci-app-dnscrypt-proxy/luasrc/controller/dnscrypt-proxy.lua

@@ -0,0 +1,32 @@
+-- Copyright 2017 Dirk Brenken (dev@brenken.org)
+-- This is free software, licensed under the Apache License, Version 2.0
+
+module("luci.controller.dnscrypt-proxy", package.seeall)
+
+local util  = require("luci.util")
+local i18n  = require("luci.i18n")
+local templ = require("luci.template")
+
+function index()
+	if not nixio.fs.access("/etc/config/dnscrypt-proxy") then
+		nixio.fs.writefile("/etc/config/dnscrypt-proxy", "")
+	end
+	entry({"admin", "services", "dnscrypt-proxy"}, firstchild(), _("DNSCrypt-Proxy"), 60).dependent = false
+	entry({"admin", "services", "dnscrypt-proxy", "tab_from_cbi"}, cbi("dnscrypt-proxy/overview_tab", {hideresetbtn=true, hidesavebtn=true}), _("Overview"), 10).leaf = true
+	entry({"admin", "services", "dnscrypt-proxy", "logfile"}, call("logread"), _("View Logfile"), 20).leaf = true
+	entry({"admin", "services", "dnscrypt-proxy", "advanced"}, firstchild(), _("Advanced"), 100)
+	entry({"admin", "services", "dnscrypt-proxy", "advanced", "configuration"}, cbi("dnscrypt-proxy/configuration_tab"), _("Edit DNSCrypt-Proxy Configuration"), 110).leaf = true
+	entry({"admin", "services", "dnscrypt-proxy", "advanced", "cfg_dnsmasq"}, cbi("dnscrypt-proxy/cfg_dnsmasq_tab"), _("Edit Dnsmasq Configuration"), 120).leaf = true
+	entry({"admin", "services", "dnscrypt-proxy", "advanced", "view_reslist"}, call("view_reslist"), _("View Resolver List"), 130).leaf = true
+
+end
+
+function view_reslist()
+	local reslist = util.trim(util.exec("cat /usr/share/dnscrypt-proxy/dnscrypt-resolvers.csv"))
+	templ.render("dnscrypt-proxy/view_reslist", {title = i18n.translate("DNSCrypt-Proxy Resolver List"), content = reslist})
+end
+
+function logread()
+	local logfile = util.trim(util.exec("logread -e 'dnscrypt-proxy'"))
+	templ.render("dnscrypt-proxy/logread", {title = i18n.translate("DNSCrypt-Proxy Logfile"), content = logfile})
+end

+ 37 - 0
package/luci/applications/luci-app-dnscrypt-proxy/luasrc/model/cbi/dnscrypt-proxy/cfg_dnsmasq_tab.lua

@@ -0,0 +1,37 @@
+-- Copyright 2017 Dirk Brenken (dev@brenken.org)
+-- This is free software, licensed under the Apache License, Version 2.0
+
+local nxfs      = require("nixio.fs")
+local util      = require("luci.util")
+local uci_input = "/etc/config/dhcp"
+
+if not nxfs.access(uci_input) then
+	m = SimpleForm("error", nil, translate("Input file not found, please check your configuration."))
+	return m
+end
+
+m = SimpleForm("input", nil)
+m:append(Template("dnscrypt-proxy/config_css"))
+m.submit = translate("Save")
+m.reset = false
+
+s = m:section(SimpleSection, nil,
+	translate("This form allows you to modify the content of the main Dnsmasq configuration file (/etc/config/dhcp)."))
+
+f = s:option(TextValue, "data")
+f.rows = 20
+f.rmempty = true
+
+function f.cfgvalue()
+	return nxfs.readfile(uci_input) or ""
+end
+
+function f.write(self, section, data)
+	return nxfs.writefile(uci_input, "\n" .. util.trim(data:gsub("\r\n", "\n")) .. "\n")
+end
+
+function s.handle(self, state, data)
+	return true
+end
+
+return m

+ 39 - 0
package/luci/applications/luci-app-dnscrypt-proxy/luasrc/model/cbi/dnscrypt-proxy/configuration_tab.lua

@@ -0,0 +1,39 @@
+-- Copyright 2017 Dirk Brenken (dev@brenken.org)
+-- This is free software, licensed under the Apache License, Version 2.0
+
+local nxfs      = require("nixio.fs")
+local util      = require("luci.util")
+local uci_input = "/etc/config/dnscrypt-proxy"
+
+if not nxfs.access(uci_input) then
+	m = SimpleForm("error", nil, translate("Input file not found, please check your configuration."))
+	m.reset = false
+	m.submit = false
+	return m
+end
+
+m = SimpleForm("input", nil)
+m:append(Template("dnscrypt-proxy/config_css"))
+m.submit = translate("Save")
+m.reset = false
+
+s = m:section(SimpleSection, nil,
+	translate("This form allows you to modify the content of the main DNSCrypt-Proxy configuration file (/etc/config/dnscrypt-proxy)."))
+
+f = s:option(TextValue, "data")
+f.rows = 20
+f.rmempty = true
+
+function f.cfgvalue()
+	return nxfs.readfile(uci_input) or ""
+end
+
+function f.write(self, section, data)
+	return nxfs.writefile(uci_input, "\n" .. util.trim(data:gsub("\r\n", "\n")) .. "\n")
+end
+
+function s.handle(self, state, data)
+	return true
+end
+
+return m

+ 177 - 0
package/luci/applications/luci-app-dnscrypt-proxy/luasrc/model/cbi/dnscrypt-proxy/overview_tab.lua

@@ -0,0 +1,177 @@
+-- Copyright 2017 Dirk Brenken (dev@brenken.org)
+-- This is free software, licensed under the Apache License, Version 2.0
+
+local fs        = require("nixio.fs")
+local uci       = require("luci.model.uci").cursor()
+local util      = require("luci.util")
+local date      = require("luci.http.protocol.date")
+local res_input = "/usr/share/dnscrypt-proxy/dnscrypt-resolvers.csv"
+local dump      = util.ubus("network.interface", "dump", {})
+local plug_cnt  = tonumber(luci.sys.exec("env -i /usr/sbin/dnscrypt-proxy --version | grep 'Support for plugins: present' | wc -l"))
+local res_list  = {}
+local url       = "https://download.dnscrypt.org/dnscrypt-proxy/dnscrypt-resolvers.csv"
+
+if not fs.access("/lib/libustream-ssl.so") then
+	m = SimpleForm("error", nil, translate("SSL support not available, please install an libustream-ssl variant to use this package."))
+	m.submit = false
+	m.reset = false
+	return m
+end
+
+if not fs.access(res_input) then
+	luci.sys.call("env -i /bin/uclient-fetch --no-check-certificate -O " .. res_input .. " " .. url .. " >/dev/null 2>&1")
+end
+
+if not uci:get_first("dnscrypt-proxy", "global") then
+	uci:add("dnscrypt-proxy", "global")
+	uci:save("dnscrypt-proxy")
+	uci:commit("dnscrypt-proxy")
+end
+
+for line in io.lines(res_input) do
+	local name = line:match("^[%w_.-]*")
+	res_list[#res_list + 1] = { name = name }
+end
+
+m = Map("dnscrypt-proxy", translate("DNSCrypt-Proxy"),
+	translate("Configuration of the DNSCrypt-Proxy package. ")
+	.. translate("Keep in mind to configure Dnsmasq as well. ")
+	.. translatef("For further information "
+	.. "<a href=\"%s\" target=\"_blank\">"
+	.. "see the wiki online</a>", "https://wiki.openwrt.org/inbox/dnscrypt"))
+
+function m.on_after_commit(self)
+	luci.sys.call("env -i /etc/init.d/dnsmasq restart >/dev/null 2>&1")
+	luci.sys.call("env -i /etc/init.d/dnscrypt-proxy restart >/dev/null 2>&1")
+end
+
+s = m:section(TypedSection, "global", translate("General options"))
+s.anonymous = true
+
+-- Main dnscrypt-proxy resource list
+
+o1 = s:option(DummyValue, "", translate("Default Resolver List"))
+o1.template = "dnscrypt-proxy/res_options"
+o1.value = res_input
+
+o2 = s:option(DummyValue, "", translate("File Date"))
+o2.template = "dnscrypt-proxy/res_options"
+o2.value = date.to_http(nixio.fs.stat(res_input).mtime)
+
+o3 = s:option(DummyValue, "", translate("File Checksum"))
+o3.template = "dnscrypt-proxy/res_options"
+o3.value = luci.sys.exec("sha256sum " .. res_input .. " | awk '{print $1}'")
+
+btn = s:option(Button, "", translate("Refresh Resolver List"))
+btn.inputtitle = translate("Refresh List")
+btn.inputstyle = "apply"
+btn.disabled = false
+function btn.write(self, section, value)
+	luci.sys.call("env -i /bin/uclient-fetch --no-check-certificate -O " .. res_input .. " " .. url .. " >/dev/null 2>&1")
+	luci.http.redirect(luci.dispatcher.build_url("admin", "services", "dnscrypt-proxy"))
+end
+
+-- Trigger settings
+
+t = s:option(DynamicList, "procd_trigger", translate("Startup Trigger"),
+	translate("By default the DNSCrypt-Proxy startup will be triggered by ifup events of multiple network interfaces. ")
+	.. translate("To restrict the trigger, add only the relevant network interface(s). ")
+	.. translate("Usually the 'wan' interface should work for most users."))
+if dump then
+	local i, v
+	for i, v in ipairs(dump.interface) do
+		if v.interface ~= "loopback" then
+			t:value(v.interface)
+		end
+	end
+end
+t.rmempty = true
+
+-- Extra options
+
+ds = s:option(DummyValue, "_dummy", translate("Extra options"),
+	translate("Options for further tweaking in case the defaults are not suitable for you."))
+ds.template = "cbi/nullsection"
+
+btn = s:option(Button, "", translate("Create custom config file"),
+	translate("Create '/etc/resolv-crypt.conf' with 'options timeout:1' to reduce DNS upstream timeouts with multiple DNSCrypt instances. ")
+	.. translatef("For further information "
+	.. "<a href=\"%s\" target=\"_blank\">"
+	.. "see the wiki online</a>", "https://wiki.openwrt.org/inbox/dnscrypt"))
+btn.inputtitle = translate("Create Config File")
+btn.inputstyle = "apply"
+btn.disabled = false
+function btn.write(self, section, value)
+	if not fs.access("/etc/resolv-crypt.conf") then
+		luci.sys.call("env -i echo 'options timeout:1' > '/etc/resolv-crypt.conf'")
+	end
+end
+
+-- Mandatory options per instance
+
+s = m:section(TypedSection, "dnscrypt-proxy", translate("Instance options"))
+s.anonymous = true
+s.addremove = true
+
+o1 = s:option(Value, "address", translate("IP Address"),
+	translate("The local IPv4 or IPv6 address. The latter one should be specified within brackets, e.g. '[::1]'."))
+o1.default = address or "127.0.0.1"
+o1.rmempty = false
+
+o2 = s:option(Value, "port", translate("Port"),
+	translate("The listening port for DNS queries."))
+o2.datatype = "port"
+o2.default = port
+o2.rmempty = false
+
+o3 = s:option(ListValue, "resolver", translate("Resolver"),
+	translate("Name of the remote DNS service for resolving queries."))
+o3.datatype = "hostname"
+o3.widget = "select"
+local i, v
+for i, v in ipairs(res_list) do
+	if v.name ~= "Name" then
+		o3:value(v.name)
+	end
+end
+o3.default = resolver
+o3.rmempty = false
+
+-- Extra options per instance
+
+e1 = s:option(Value, "resolvers_list", translate("Alternate Resolver List"),
+	translate("Specify a non-default Resolver List."))
+e1.datatype = "file"
+e1.optional = true
+
+e2 = s:option(Value, "ephemeral_keys", translate("Ephemeral Keys"),
+	translate("Improve privacy by using an ephemeral public key for each query. ")
+	.. translate("This option requires extra CPU cycles and is useless with most DNSCrypt server."))
+e2.datatype = "bool"
+e2.value = 1
+e2.optional = true
+
+if plug_cnt > 0 then
+	e3 = s:option(DynamicList, "blacklist", translate("Blacklist"),
+		translate("Local blacklists allow you to block abuse sites by domains or ip addresses. ")
+		.. translate("The value for this property is the blocklist type and path to the file, e.g.'domains:/path/to/dbl.txt' or 'ips:/path/to/ipbl.txt'."))
+	e3.optional = true
+
+	e4 = s:option(Value, "block_ipv6", translate("Block IPv6"),
+		translate("Disable IPv6 to speed up DNSCrypt-Proxy."))
+	e4.datatype = "bool"
+	e4.value = 1
+	e4.optional = true
+
+	e5 = s:option(Value, "local_cache", translate("Local Cache"),
+		translate("Enable Caching to speed up DNSCcrypt-Proxy."))
+	e5.datatype = "bool"
+	e5.value = 1
+	e5.optional = true
+	
+	e6 = s:option(Value, "query_log_file", translate("DNS Query Logfile"),
+	translate("Log the received DNS queries to a file, so you can watch in real-time what is happening on the network."))
+	e6.optional = true
+end
+
+return m

+ 13 - 0
package/luci/applications/luci-app-dnscrypt-proxy/luasrc/view/dnscrypt-proxy/config_css.htm

@@ -0,0 +1,13 @@
+<style type="text/css">
+	textarea
+	{
+		border: 1px solid #cccccc;
+		padding: 5px;
+		font-size: 12px;
+		font-family: monospace;
+		resize: none;
+		white-space: pre;
+		overflow-wrap: normal;
+		overflow-x: scroll;
+	}
+</style>

+ 15 - 0
package/luci/applications/luci-app-dnscrypt-proxy/luasrc/view/dnscrypt-proxy/logread.htm

@@ -0,0 +1,15 @@
+<%#
+Copyright 2017 Dirk Brenken (dev@brenken.org)
+This is free software, licensed under the Apache License, Version 2.0
+-%>
+
+<%+header%>
+
+<div class="cbi-map">
+	<fieldset class="cbi-section">
+		<div class="cbi-section-descr"><%:This form shows the syslog output, pre-filtered for DNSCrypt-Proxy related messages only.%></div>
+		<textarea id="logread_id" style="width: 100%; height: 450px; border: 1px solid #cccccc; padding: 5px; font-size: 12px; font-family: monospace; resize: none;" readonly="readonly" wrap="off" rows="<%=content:cmatch("\n")+2%>"><%=content:pcdata()%></textarea>
+	</fieldset>
+</div>
+
+<%+footer%>

+ 10 - 0
package/luci/applications/luci-app-dnscrypt-proxy/luasrc/view/dnscrypt-proxy/res_options.htm

@@ -0,0 +1,10 @@
+<%#
+Copyright 2017 Dirk Brenken (dev@brenken.org)
+This is free software, licensed under the Apache License, Version 2.0
+-%>
+
+<%+cbi/valueheader%>
+
+<input name="reslist" id="reslist" type="text" class="cbi-input-text" style="background:transparent;border:none;box-shadow:none;color:#0069d6;width:500px" value="<%=self:cfgvalue(section)%>" disabled="disabled" />
+
+<%+cbi/valuefooter%>

+ 15 - 0
package/luci/applications/luci-app-dnscrypt-proxy/luasrc/view/dnscrypt-proxy/view_reslist.htm

@@ -0,0 +1,15 @@
+<%#
+Copyright 2017 Dirk Brenken (dev@brenken.org)
+This is free software, licensed under the Apache License, Version 2.0
+-%>
+
+<%+header%>
+
+<div class="cbi-map">
+	<fieldset class="cbi-section">
+		<div class="cbi-section-descr"><%:This form shows the content of the current DNSCrypt Resolver List.%></div>
+		<textarea id="logread_id" style="width: 100%; height: 450px; border: 1px solid #cccccc; padding: 5px; font-size: 12px; font-family: monospace; resize: none;" readonly="readonly" wrap="off" rows="<%=content:cmatch("\n")+2%>"><%=content:pcdata()%></textarea>
+	</fieldset>
+</div>
+
+<%+footer%>

+ 232 - 0
package/luci/applications/luci-app-dnscrypt-proxy/po/ja/dnscrypt-proxy.po

@@ -0,0 +1,232 @@
+msgid ""
+msgstr ""
+"Content-Type: text/plain; charset=UTF-8\n"
+"Project-Id-Version: \n"
+"POT-Creation-Date: \n"
+"PO-Revision-Date: \n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Poedit 2.0.3\n"
+"Last-Translator: INAGAKI Hiroshi <musashino.open@gmail.com>\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"Language: ja\n"
+
+msgid "Advanced"
+msgstr "詳細"
+
+msgid "Alternate Resolver List"
+msgstr "代替 リゾルバ リスト"
+
+msgid "Blacklist"
+msgstr "ブラックリスト"
+
+msgid "Block IPv6"
+msgstr "IPv6 のブロック"
+
+msgid ""
+"By default the DNSCrypt-Proxy startup will be triggered by ifup events of "
+"multiple network interfaces."
+msgstr ""
+"デフォルトでは、 DNSCrypt-Proxy は全ネットワーク インターフェースの ifup イベ"
+"ントによりトリガされ起動します。"
+
+msgid "Configuration of the DNSCrypt-Proxy package."
+msgstr "DNSCrypt-Proxy パッケージの設定です。"
+
+msgid ""
+"Create '/etc/resolv-crypt.conf' with 'options timeout:1' to reduce DNS "
+"upstream timeouts with multiple DNSCrypt instances."
+msgstr ""
+"複数の DNSCrypt インスタンスで DNS アップストリーム タイムアウトの設定値を共"
+"用するため、 'options timeout:1' を含めた '/etc/resolv-crypt.conf' を作成しま"
+"す。"
+
+msgid "Create Config File"
+msgstr "設定ファイルの作成"
+
+msgid "Create custom config file"
+msgstr "カスタム設定ファイルの作成"
+
+msgid "DNS Query Logfile"
+msgstr "DNS クエリ ログファイル"
+
+msgid "DNSCrypt-Proxy"
+msgstr "DNSCrypt-Proxy"
+
+msgid "DNSCrypt-Proxy Logfile"
+msgstr "DNSCrypt-Proxy ログファイル"
+
+msgid "DNSCrypt-Proxy Resolver List"
+msgstr "DNSCrypt-Proxy リゾルバ リスト"
+
+msgid "Default Resolver List"
+msgstr "デフォルト リゾルバ リスト"
+
+msgid "Disable IPv6 to speed up DNSCrypt-Proxy."
+msgstr "DNSCrypt-Proxy の高速化のため、IPv6 を無効化します。"
+
+msgid "Edit DNSCrypt-Proxy Configuration"
+msgstr "DNSCrypt-Proxy 設定の編集"
+
+msgid "Edit Dnsmasq Configuration"
+msgstr "Dnsmasq 設定の編集"
+
+msgid "Enable Caching to speed up DNSCcrypt-Proxy."
+msgstr "DNSCrypt-Proxy の高速化のため、キャッシュ機能を有効化します。"
+
+msgid "Ephemeral Keys"
+msgstr "一時的なキー"
+
+msgid "Extra options"
+msgstr "拡張オプション"
+
+msgid "File Checksum"
+msgstr "ファイル チェックサム"
+
+msgid "File Date"
+msgstr "ファイル日付"
+
+msgid ""
+"For further information <a href=\"%s\" target=\"_blank\">see the wiki "
+"online</a>"
+msgstr ""
+"詳細な情報は <a href=\"%s\" target=\"_blank\">オンライン Wiki</a> を確認して"
+"ください。"
+
+msgid "General options"
+msgstr "全般設定"
+
+msgid "IP Address"
+msgstr "IP アドレス"
+
+msgid "Improve privacy by using an ephemeral public key for each query."
+msgstr ""
+"クエリ毎に一時的な公開鍵を使用することにより、プライバシーを向上します。"
+
+msgid "Input file not found, please check your configuration."
+msgstr "入力ファイルが見つかりません。設定を確認してください。"
+
+msgid "Instance options"
+msgstr "インスタンス オプション"
+
+msgid "Keep in mind to configure Dnsmasq as well."
+msgstr "Dnsmasq を適切に設定する必要があることに留意してください。"
+
+msgid "Local Cache"
+msgstr "ローカル キャッシュ"
+
+msgid ""
+"Local blacklists allow you to block abuse sites by domains or ip addresses."
+msgstr ""
+"ローカル ブラックリストは、不正なサイトをドメイン名または IP アドレスによって"
+"ブロックすることが可能です。"
+
+msgid ""
+"Log the received DNS queries to a file, so you can watch in real-time what "
+"is happening on the network."
+msgstr ""
+"受信した DNS クエリをファイルに記録します。これにより、ネットワークで何が起き"
+"ているかをリアルタイムに把握することが可能です。"
+
+msgid "Name of the remote DNS service for resolving queries."
+msgstr "クエリの名前解決を行う、リモートの DNS サービス名です。"
+
+msgid ""
+"Options for further tweaking in case the defaults are not suitable for you."
+msgstr "デフォルト設定が適切でない場合、追加で設定するためのオプションです。"
+
+msgid "Overview"
+msgstr "概要"
+
+msgid "Port"
+msgstr "ポート"
+
+msgid "Refresh List"
+msgstr "リストのリフレッシュ"
+
+msgid "Refresh Resolver List"
+msgstr "リゾルバ リストのリフレッシュ"
+
+msgid "Resolver"
+msgstr "リゾルバ"
+
+msgid ""
+"SSL support not available, please install an libustream-ssl variant to use "
+"this package."
+msgstr ""
+"SSL サポートが利用できません。このパッケージを使用するには libustream-ssl 等"
+"をインストールし、 SSL サポートを有効にしてください。"
+
+msgid "Save"
+msgstr "保存"
+
+msgid "Specify a non-default Resolver List."
+msgstr "デフォルトとは異なるリゾルバ リストを設定します。"
+
+msgid "Startup Trigger"
+msgstr "スタートアップ トリガ"
+
+msgid "The listening port for DNS queries."
+msgstr "DNS クエリを待ち受けるポートです。"
+
+msgid ""
+"The local IPv4 or IPv6 address. The latter one should be specified within "
+"brackets, e.g. '[::1]'."
+msgstr ""
+"ローカルの IPv4 または IPv6 アドレスです。 IPv6 アドレスの場合、ブラケット "
+"\"[ ]\" を含めて記述される必要があります(例: '[::1]')。"
+
+msgid ""
+"The value for this property is the blocklist type and path to the file, e."
+"g.'domains:/path/to/dbl.txt' or 'ips:/path/to/ipbl.txt'."
+msgstr ""
+"このプロパティの値は、ブロックリストのタイプ及びファイルへのパスの組み合わせ"
+"です。(例: 'domains:/path/to/domainlist.txt' または 'ips:/path/to/iplist."
+"txt')"
+
+msgid ""
+"This form allows you to modify the content of the main DNSCrypt-Proxy "
+"configuration file (/etc/config/dnscrypt-proxy)."
+msgstr ""
+"このフォームでは、メインの DNSCrypt-Proxy 設定ファイル (/etc/config/dnscrypt-"
+"proxy) の内容を変更することができます。"
+
+msgid ""
+"This form allows you to modify the content of the main Dnsmasq configuration "
+"file (/etc/config/dhcp)."
+msgstr ""
+"このフォームでは、メインの Dnsmasq 設定ファイル (/etc/config/dhcp) の内容を変"
+"更することができます。"
+
+msgid "This form shows the content of the current DNSCrypt Resolver List."
+msgstr ""
+"このフォームには、現在の DNSCrypt リゾルバ リストの内容が表示されます。"
+
+msgid ""
+"This form shows the syslog output, pre-filtered for DNSCrypt-Proxy related "
+"messages only."
+msgstr ""
+"このフォームには、システムログ内の DNSCrypt-Proxy に関連するメッセージのみが"
+"表示されます。"
+
+msgid ""
+"This option requires extra CPU cycles and is useless with most DNSCrypt "
+"server."
+msgstr ""
+"このオプションは、通常よりも CPU リソースを多く使用するほか、ほとんどの "
+"DNSCrypt サーバーでは不要なものです。"
+
+msgid "To restrict the trigger, add only the relevant network interface(s)."
+msgstr ""
+"トリガを限定するには、適切なネットワーク インターフェースのみを追加してくださ"
+"い。"
+
+msgid "Usually the 'wan' interface should work for most users."
+msgstr "通常、 'wan' インターフェースがほとんどのユーザーに適しています。"
+
+msgid "View Logfile"
+msgstr "ログファイルの確認"
+
+msgid "View Resolver List"
+msgstr "リゾルバ リストの確認"

+ 191 - 0
package/luci/applications/luci-app-dnscrypt-proxy/po/templates/dnscrypt-proxy.pot

@@ -0,0 +1,191 @@
+msgid ""
+msgstr "Content-Type: text/plain; charset=UTF-8"
+
+msgid "Advanced"
+msgstr ""
+
+msgid "Alternate Resolver List"
+msgstr ""
+
+msgid "Blacklist"
+msgstr ""
+
+msgid "Block IPv6"
+msgstr ""
+
+msgid ""
+"By default the DNSCrypt-Proxy startup will be triggered by ifup events of "
+"multiple network interfaces."
+msgstr ""
+
+msgid "Configuration of the DNSCrypt-Proxy package."
+msgstr ""
+
+msgid ""
+"Create '/etc/resolv-crypt.conf' with 'options timeout:1' to reduce DNS "
+"upstream timeouts with multiple DNSCrypt instances."
+msgstr ""
+
+msgid "Create Config File"
+msgstr ""
+
+msgid "Create custom config file"
+msgstr ""
+
+msgid "DNS Query Logfile"
+msgstr ""
+
+msgid "DNSCrypt-Proxy"
+msgstr ""
+
+msgid "DNSCrypt-Proxy Logfile"
+msgstr ""
+
+msgid "DNSCrypt-Proxy Resolver List"
+msgstr ""
+
+msgid "Default Resolver List"
+msgstr ""
+
+msgid "Disable IPv6 to speed up DNSCrypt-Proxy."
+msgstr ""
+
+msgid "Edit DNSCrypt-Proxy Configuration"
+msgstr ""
+
+msgid "Edit Dnsmasq Configuration"
+msgstr ""
+
+msgid "Enable Caching to speed up DNSCcrypt-Proxy."
+msgstr ""
+
+msgid "Ephemeral Keys"
+msgstr ""
+
+msgid "Extra options"
+msgstr ""
+
+msgid "File Checksum"
+msgstr ""
+
+msgid "File Date"
+msgstr ""
+
+msgid ""
+"For further information <a href=\"%s\" target=\"_blank\">see the wiki "
+"online</a>"
+msgstr ""
+
+msgid "General options"
+msgstr ""
+
+msgid "IP Address"
+msgstr ""
+
+msgid "Improve privacy by using an ephemeral public key for each query."
+msgstr ""
+
+msgid "Input file not found, please check your configuration."
+msgstr ""
+
+msgid "Instance options"
+msgstr ""
+
+msgid "Keep in mind to configure Dnsmasq as well."
+msgstr ""
+
+msgid "Local Cache"
+msgstr ""
+
+msgid ""
+"Local blacklists allow you to block abuse sites by domains or ip addresses."
+msgstr ""
+
+msgid ""
+"Log the received DNS queries to a file, so you can watch in real-time what "
+"is happening on the network."
+msgstr ""
+
+msgid "Name of the remote DNS service for resolving queries."
+msgstr ""
+
+msgid ""
+"Options for further tweaking in case the defaults are not suitable for you."
+msgstr ""
+
+msgid "Overview"
+msgstr ""
+
+msgid "Port"
+msgstr ""
+
+msgid "Refresh List"
+msgstr ""
+
+msgid "Refresh Resolver List"
+msgstr ""
+
+msgid "Resolver"
+msgstr ""
+
+msgid ""
+"SSL support not available, please install an libustream-ssl variant to use "
+"this package."
+msgstr ""
+
+msgid "Save"
+msgstr ""
+
+msgid "Specify a non-default Resolver List."
+msgstr ""
+
+msgid "Startup Trigger"
+msgstr ""
+
+msgid "The listening port for DNS queries."
+msgstr ""
+
+msgid ""
+"The local IPv4 or IPv6 address. The latter one should be specified within "
+"brackets, e.g. '[::1]'."
+msgstr ""
+
+msgid ""
+"The value for this property is the blocklist type and path to the file, e."
+"g.'domains:/path/to/dbl.txt' or 'ips:/path/to/ipbl.txt'."
+msgstr ""
+
+msgid ""
+"This form allows you to modify the content of the main DNSCrypt-Proxy "
+"configuration file (/etc/config/dnscrypt-proxy)."
+msgstr ""
+
+msgid ""
+"This form allows you to modify the content of the main Dnsmasq configuration "
+"file (/etc/config/dhcp)."
+msgstr ""
+
+msgid "This form shows the content of the current DNSCrypt Resolver List."
+msgstr ""
+
+msgid ""
+"This form shows the syslog output, pre-filtered for DNSCrypt-Proxy related "
+"messages only."
+msgstr ""
+
+msgid ""
+"This option requires extra CPU cycles and is useless with most DNSCrypt "
+"server."
+msgstr ""
+
+msgid "To restrict the trigger, add only the relevant network interface(s)."
+msgstr ""
+
+msgid "Usually the 'wan' interface should work for most users."
+msgstr ""
+
+msgid "View Logfile"
+msgstr ""
+
+msgid "View Resolver List"
+msgstr ""

+ 11 - 0
package/luci/applications/luci-app-dnscrypt-proxy/root/etc/uci-defaults/60_luci-dnscrypt-proxy

@@ -0,0 +1,11 @@
+#!/bin/sh
+
+uci -q batch <<-EOF >/dev/null
+	delete ucitrack.@dnscrypt-proxy[-1]
+	add ucitrack dnscrypt-proxy
+	set ucitrack.@dnscrypt-proxy[-1].init=dnscrypt-proxy
+	commit ucitrack
+EOF
+
+rm -f /tmp/luci-indexcache
+exit 0

Some files were not shown because too many files changed in this diff