Merge pull request #693 from chris5560/master
[luci-app-privoxy] New LuCI App to support privoxy
This commit is contained in:
commit
4b93183f55
9 changed files with 2247 additions and 0 deletions
69
net/privoxy-luci/Makefile
Normal file
69
net/privoxy-luci/Makefile
Normal file
|
@ -0,0 +1,69 @@
|
|||
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=luci-app-privoxy
|
||||
PKG_VERSION:=1.0.0
|
||||
#PKG_RELEASE:=0
|
||||
|
||||
PKG_MAINTAINER:=Christian Schoenebeck <christian.schoenebeck@gmail.com>
|
||||
PKG_LICENSE:=GPL-2.0
|
||||
PKG_LICENSE_FILES:=LICENSE
|
||||
|
||||
PKG_BUILD_DIR:= $(BUILD_DIR)/$(PKG_NAME)
|
||||
|
||||
# needed inside Build/Compile
|
||||
# po2lmo is compiled inside luci-base
|
||||
PKG_BUILD_DEPENDS:=+luci-base
|
||||
|
||||
include $(INCLUDE_DIR)/package.mk
|
||||
|
||||
define Package/luci-app-privoxy
|
||||
SECTION:=luci
|
||||
CATEGORY:=LuCI
|
||||
SUBMENU:=3. Applications
|
||||
TITLE:=LuCI support for Privoxy WEB Proxy
|
||||
DEPENDS:=+luci-lib-nixio +luci-mod-admin-full +privoxy
|
||||
PKGARCH:=all
|
||||
endef
|
||||
|
||||
define Package/luci-app-privoxy/description
|
||||
LuCi web interface for Privoxy WEB Proxy
|
||||
Version: $(PKG_VERSION)
|
||||
endef
|
||||
|
||||
define Build/Prepare
|
||||
# do nothing
|
||||
endef
|
||||
|
||||
define Build/Configure
|
||||
# do nothing
|
||||
endef
|
||||
|
||||
define Build/Compile
|
||||
mkdir -p $(PKG_INSTALL_DIR)/build $(PKG_INSTALL_DIR)/files $(PKG_INSTALL_DIR)/po
|
||||
# copy everthing we need ot PKG_INSTALL_DIR
|
||||
$(CP) ./* $(PKG_INSTALL_DIR)/
|
||||
# due to package dependencies LuCI is compiled first so the needed binary exists
|
||||
$(LN) $(BUILD_DIR)/luci/build/po2lmo $(PKG_INSTALL_DIR)/build/po2lmo
|
||||
$(LN) $(BUILD_DIR)/luci/build/i18n-po2lua.pl $(PKG_INSTALL_DIR)/build/i18n-po2lua.pl
|
||||
# generate needed .lmo files out of given .po files
|
||||
cd $(PKG_INSTALL_DIR); build/i18n-po2lua.pl po files/luasrc/i18n
|
||||
endef
|
||||
|
||||
define Package/luci-app-privoxy/install
|
||||
$(INSTALL_DIR) $(1)/etc/uci-defaults
|
||||
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/files/root/etc/uci-defaults/* $(1)/etc/uci-defaults
|
||||
|
||||
$(INSTALL_DIR) $(1)/usr/lib/lua/luci
|
||||
$(CP) $(PKG_INSTALL_DIR)/files/luasrc/* $(1)/usr/lib/lua/luci
|
||||
endef
|
||||
|
||||
define Package/luci-app-privoxy/postinst
|
||||
#!/bin/sh
|
||||
[ -z "$${IPKG_INSTROOT}" ] && {
|
||||
/etc/uci-defaults/luci-privoxy && rm -f /etc/uci-defaults/luci-privoxy
|
||||
}
|
||||
exit 0
|
||||
endef
|
||||
|
||||
$(eval $(call BuildPackage,luci-app-privoxy))
|
174
net/privoxy-luci/files/luasrc/controller/privoxy.lua
Executable file
174
net/privoxy-luci/files/luasrc/controller/privoxy.lua
Executable file
|
@ -0,0 +1,174 @@
|
|||
--[[
|
||||
LuCI - Lua Configuration Interface
|
||||
|
||||
Copyright 2014 Christian Schoenebeck <christian dot schoenebeck at gmail dot com>
|
||||
|
||||
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$
|
||||
]]--
|
||||
|
||||
module("luci.controller.privoxy", package.seeall)
|
||||
|
||||
local NX = require "nixio"
|
||||
local NXFS = require "nixio.fs"
|
||||
local HTTP = require "luci.http"
|
||||
local IPKG = require "luci.model.ipkg"
|
||||
local UCI = require "luci.model.uci"
|
||||
local SYS = require "luci.sys"
|
||||
local UTIL = require "luci.util"
|
||||
|
||||
version_luci_app = "1.0.0" -- luci-application / openwrt Makefile compatible version
|
||||
version_required = "3.0.22" -- minimum required service version
|
||||
|
||||
function index()
|
||||
local _service = "privoxy"
|
||||
local _vermin = "3.0.22"
|
||||
local _verinst
|
||||
local _util = require "luci.util"
|
||||
local _ipkg = require "luci.model.ipkg"
|
||||
local _info = _ipkg.info(_service)
|
||||
for _, v in pairs(_info) do
|
||||
if v.Package == _service and v.Status.installed then
|
||||
_verinst = v.Version
|
||||
break
|
||||
end
|
||||
end
|
||||
local _sver = _util.split(_verinst, "[%.%-]", nil, true)
|
||||
local _rver = _util.split(_vermin , "[%.%-]", nil, true)
|
||||
|
||||
-- check config file and version
|
||||
if not nixio.fs.access("/etc/config/" .. _service )
|
||||
or (tonumber(_sver[1]) or 0) < (tonumber(_rver[1]) or 0)
|
||||
or (tonumber(_sver[2]) or 0) < (tonumber(_rver[2]) or 0)
|
||||
or (tonumber(_sver[3]) or 0) < (tonumber(_rver[3]) or 0)
|
||||
or (tonumber(_sver[4]) or 0) < (tonumber(_rver[4]) or 0) then
|
||||
entry( {"admin", "services", "privoxy"}, cbi("privoxy/apperror",
|
||||
{hideapplybtn=true, hidesavebtn=true, hideresetbtn=true }), _("Privoxy WEB proxy"), 59)
|
||||
else
|
||||
entry( {"admin", "services", "privoxy"}, cbi("privoxy/detail"), _("Privoxy WEB proxy"), 59)
|
||||
entry( {"admin", "services", "privoxy", "logview"}, call("logread") ).leaf = true
|
||||
entry( {"admin", "services", "privoxy", "startstop"}, call("startstop") ).leaf = true
|
||||
entry( {"admin", "services", "privoxy", "status"}, call("get_pid") ).leaf = true
|
||||
end
|
||||
end
|
||||
|
||||
-- called by XHR.get from detail_logview.htm
|
||||
function logread()
|
||||
-- read application settings
|
||||
local uci = UCI.cursor()
|
||||
local logdir = uci:get("privoxy", "privoxy", "logdir") or "/var/log"
|
||||
local logfile = uci:get("privoxy", "privoxy", "logfile") or "privoxy.log"
|
||||
uci:unload("privoxy")
|
||||
|
||||
local lfile=logdir .. "/" .. logfile
|
||||
local ldata=NXFS.readfile(lfile)
|
||||
if not ldata or #ldata == 0 then
|
||||
ldata="_nodata_"
|
||||
end
|
||||
HTTP.write(ldata)
|
||||
end
|
||||
|
||||
-- called by XHR.get from detail_startstop.htm
|
||||
function startstop()
|
||||
local pid = get_pid(true)
|
||||
if pid > 0 then
|
||||
SYS.call("/etc/init.d/privoxy stop")
|
||||
NX.nanosleep(1) -- sleep a second
|
||||
if NX.kill(pid, 0) then -- still running
|
||||
NX.kill(pid, 9) -- send SIGKILL
|
||||
end
|
||||
pid = 0
|
||||
else
|
||||
SYS.call("/etc/init.d/privoxy start")
|
||||
NX.nanosleep(1) -- sleep a second
|
||||
pid = tonumber(NXFS.readfile("/var/run/privoxy.pid") or 0 )
|
||||
if pid > 0 and not NX.kill(pid, 0) then
|
||||
pid = 0 -- process did not start
|
||||
end
|
||||
end
|
||||
HTTP.write(tostring(pid)) -- HTTP needs string not number
|
||||
end
|
||||
|
||||
-- called by XHR.poll from detail_startstop.htm
|
||||
-- and from lua (with parameter "true")
|
||||
function get_pid(from_lua)
|
||||
local pid = tonumber(NXFS.readfile("/var/run/privoxy.pid") or 0 )
|
||||
if pid > 0 and not NX.kill(pid, 0) then
|
||||
pid = 0
|
||||
end
|
||||
if from_lua then
|
||||
return pid
|
||||
else
|
||||
HTTP.write(tostring(pid)) -- HTTP needs string not number
|
||||
end
|
||||
end
|
||||
|
||||
-- get the "name" of the current active theme
|
||||
function get_theme()
|
||||
local _uci = UCI.cursor()
|
||||
local _base = _uci:get("luci", "main", "mediaurlbase") -- only pathname
|
||||
_uci:unload("luci")
|
||||
|
||||
for k, v in pairs(luci.config.themes) do
|
||||
if k:sub(1, 1) ~= "." and v == _base then
|
||||
return k
|
||||
end
|
||||
end
|
||||
return nil
|
||||
end
|
||||
|
||||
-- read version information for given package if installed
|
||||
function ipkg_version(package)
|
||||
if not package then
|
||||
return nil
|
||||
end
|
||||
local _info = IPKG.info(package)
|
||||
local _data = {}
|
||||
local _version = ""
|
||||
local i = 0
|
||||
for k, v in pairs(_info) do
|
||||
if v.Package == package and v.Status.installed then
|
||||
_version = v.Version
|
||||
i = i + 1
|
||||
end
|
||||
end
|
||||
if i > 1 then -- more then one valid record
|
||||
return _data
|
||||
end
|
||||
local _sver = UTIL.split(_version, "[%.%-]", nil, true)
|
||||
_data = {
|
||||
version = _version,
|
||||
major = tonumber(_sver[1]) or 0,
|
||||
minor = tonumber(_sver[2]) or 0,
|
||||
patch = tonumber(_sver[3]) or 0,
|
||||
build = tonumber(_sver[4]) or 0
|
||||
}
|
||||
return _data
|
||||
end
|
||||
|
||||
-- replacement of build-in Flag.parse of cbi.lua
|
||||
-- modified to mark section as changed if value changes
|
||||
-- current parse did not do this, but it is done AbstaractValue.parse()
|
||||
function flag_parse(self, section)
|
||||
local fexists = self.map:formvalue(
|
||||
luci.cbi.FEXIST_PREFIX .. self.config .. "." .. section .. "." .. self.option)
|
||||
|
||||
if fexists then
|
||||
local fvalue = self:formvalue(section) and self.enabled or self.disabled
|
||||
local cvalue = self:cfgvalue(section)
|
||||
if fvalue ~= self.default or (not self.optional and not self.rmempty) then
|
||||
self:write(section, fvalue)
|
||||
else
|
||||
self:remove(section)
|
||||
end
|
||||
if (fvalue ~= cvalue) then self.section.changed = true end
|
||||
else
|
||||
self:remove(section)
|
||||
self.section.changed = true
|
||||
end
|
||||
end
|
58
net/privoxy-luci/files/luasrc/model/cbi/privoxy/apperror.lua
Executable file
58
net/privoxy-luci/files/luasrc/model/cbi/privoxy/apperror.lua
Executable file
|
@ -0,0 +1,58 @@
|
|||
--[[
|
||||
LuCI - Lua Configuration Interface
|
||||
|
||||
Copyright 2014 Christian Schoenebeck <christian dot schoenebeck at gmail dot com>
|
||||
|
||||
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 CTRL = require "luci.controller.privoxy" -- privoxy multiused functions
|
||||
local DISP = require "luci.dispatcher"
|
||||
|
||||
-- Build javascript string to be displayed as version information
|
||||
local VERSION = translate("Version Information")
|
||||
.. [[\n\nluci-app-privoxy]]
|
||||
.. [[\n\t]] .. translate("Version") .. [[:\t]] .. CTRL.version_luci_app
|
||||
.. [[\n\t]] .. translate("Build") .. [[:\t]] .. CTRL.ipkg_version("luci-app-privoxy").version
|
||||
.. [[\n\nprivoxy ]] .. translate("required") .. [[:]]
|
||||
.. [[\n\t]] .. translate("Version") .. [[:\t]] .. CTRL.version_required .. [[ ]] .. translate("or higher")
|
||||
.. [[\n\nprivoxy ]] .. translate("installed") .. [[:]]
|
||||
.. [[\n\t]] .. translate("Version") .. [[:\t]] .. CTRL.ipkg_version("privoxy").version
|
||||
.. [[\n\n]]
|
||||
local HELP = [[<a href="http://www.privoxy.org/user-manual/config.html#%s" target="_blank">%s</a>]]
|
||||
|
||||
-- cbi-map -- ##################################################################
|
||||
local m = Map("privoxy")
|
||||
m.title = [[</a><a href="javascript:alert(']]
|
||||
.. VERSION
|
||||
.. [[')">]]
|
||||
.. translate("Privoxy WEB proxy")
|
||||
m.description = translate("Privoxy is a non-caching web proxy with advanced filtering "
|
||||
.. "capabilities for enhancing privacy, modifying web page data and HTTP headers, "
|
||||
.. "controlling access, and removing ads and other obnoxious Internet junk.")
|
||||
|
||||
-- cbi-section -- ##############################################################
|
||||
local s = m:section(SimpleSection)
|
||||
s.title = [[<font color="red">]] .. [[<strong>]]
|
||||
.. translate("Software update required")
|
||||
.. [[</strong>]] .. [[</font>]]
|
||||
|
||||
-- old privoxy sofware version --------------------------------------------------------------
|
||||
local v = s:option(DummyValue, "_update_needed")
|
||||
v.titleref = DISP.build_url("admin", "system", "packages")
|
||||
v.rawhtml = true
|
||||
--v.title = [[<h3>]] .. [[<font color="red">]] .. [[<strong>]]
|
||||
-- .. translate("Software update required")
|
||||
-- .. [[</strong>]] .. [[</font>]] .. [[</h3>]] .. [[<br />]]
|
||||
v.value = [[<h3>]] .. [[<strong>]]
|
||||
.. translate("The currently installed 'privoxy' package is not supported by LuCI application.")
|
||||
.. [[<br />]]
|
||||
.. translate("Please update to the current version!")
|
||||
.. [[</strong>]] .. [[</h3>]]
|
||||
return m
|
940
net/privoxy-luci/files/luasrc/model/cbi/privoxy/detail.lua
Executable file
940
net/privoxy-luci/files/luasrc/model/cbi/privoxy/detail.lua
Executable file
|
@ -0,0 +1,940 @@
|
|||
--[[
|
||||
LuCI - Lua Configuration Interface
|
||||
|
||||
Copyright 2014 Christian Schoenebeck <christian dot schoenebeck at gmail dot com>
|
||||
|
||||
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 NXFS = require "nixio.fs"
|
||||
local LUFS = require "luci.fs"
|
||||
local SYS = require "luci.sys"
|
||||
local UTIL = require "luci.util"
|
||||
local DTYP = require "luci.cbi.datatypes"
|
||||
local CTRL = require "luci.controller.privoxy" -- privoxy multiused functions
|
||||
|
||||
-- Bootstrap theme needs 2 or 3 additional linefeeds for tab description for better optic
|
||||
local LFLF = (CTRL.get_theme() == "Bootstrap") and [[<br /><br /><br />]] or [[]]
|
||||
-- Build javascript string to be displayed as version information
|
||||
local VERSION = translate("Version Information")
|
||||
.. [[\n\nluci-app-privoxy]]
|
||||
.. [[\n\t]] .. translate("Version") .. [[:\t]] .. CTRL.version_luci_app
|
||||
.. [[\n\t]] .. translate("Build") .. [[:\t]] .. CTRL.ipkg_version("luci-app-privoxy").version
|
||||
.. [[\n\nprivoxy ]] .. translate("required") .. [[:]]
|
||||
.. [[\n\t]] .. translate("Version") .. [[:\t]] .. CTRL.version_required .. [[ ]] .. translate("or greater")
|
||||
.. [[\n\nprivoxy ]] .. translate("installed") .. [[:]]
|
||||
.. [[\n\t]] .. translate("Version") .. [[:\t]] .. CTRL.ipkg_version("privoxy").version
|
||||
.. [[\n\n]]
|
||||
local HELP = [[<a href="http://www.privoxy.org/user-manual/config.html#%s" target="_blank">%s</a>]]
|
||||
|
||||
-- cbi-map -- ##################################################################
|
||||
local m = Map("privoxy")
|
||||
m.title = [[</a><a href="javascript:alert(']]
|
||||
.. VERSION
|
||||
.. [[')">]]
|
||||
.. translate("Privoxy WEB proxy")
|
||||
m.description = translate("Privoxy is a non-caching web proxy with advanced filtering "
|
||||
.. "capabilities for enhancing privacy, modifying web page data and HTTP headers, "
|
||||
.. "controlling access, and removing ads and other obnoxious Internet junk.")
|
||||
.. [[<br /><strong>]]
|
||||
.. translate("For help use link at the relevant option")
|
||||
.. [[</strong>]]
|
||||
function m.commit_handler(self)
|
||||
if self.changed then -- changes ?
|
||||
os.execute("/etc/init.d/privoxy reload &") -- reload configuration
|
||||
end
|
||||
end
|
||||
|
||||
-- cbi-section -- ##############################################################
|
||||
local ns = m:section( NamedSection, "privoxy", "privoxy")
|
||||
|
||||
ns:tab("local",
|
||||
translate("Local Set-up"),
|
||||
translate("If you intend to operate Privoxy for more users than just yourself, "
|
||||
.. "it might be a good idea to let them know how to reach you, what you block "
|
||||
.. "and why you do that, your policies, etc.")
|
||||
.. LFLF )
|
||||
local function err_tab_local(self, msg)
|
||||
return string.format(translate("Local Set-up") .. " - %s: %s", self.title_base, msg )
|
||||
end
|
||||
|
||||
ns:tab("filter",
|
||||
translate("Files and Directories"),
|
||||
translate("Privoxy can (and normally does) use a number of other files "
|
||||
.. "for additional configuration, help and logging. This section of "
|
||||
.. "the configuration file tells Privoxy where to find those other files.")
|
||||
.. LFLF )
|
||||
local function err_tab_filter(self, msg)
|
||||
return string.format(translate("Files and Directories") .. " - %s: %s", self.title_base, msg )
|
||||
end
|
||||
|
||||
ns:tab("access",
|
||||
translate("Access Control"),
|
||||
translate("This tab controls the security-relevant aspects of Privoxy's configuration.")
|
||||
.. LFLF )
|
||||
local function err_tab_access(self, msg)
|
||||
return string.format(translate("Access Control") .. " - %s: %s", self.title_base, msg )
|
||||
end
|
||||
|
||||
ns:tab("forward",
|
||||
translate("Forwarding"),
|
||||
translate("Configure here the routing of HTTP requests through a chain of multiple proxies. "
|
||||
.. "Note that parent proxies can severely decrease your privacy level. "
|
||||
.. "Also specified here are SOCKS proxies.")
|
||||
.. LFLF )
|
||||
|
||||
ns:tab("misc",
|
||||
translate("Miscellaneous"),
|
||||
nil)
|
||||
local function err_tab_misc(self, msg)
|
||||
return string.format(translate("Miscellaneous") .. " - %s: %s", self.title_base, msg )
|
||||
end
|
||||
|
||||
ns:tab("debug",
|
||||
translate("Logging"),
|
||||
nil )
|
||||
|
||||
ns:tab("logview",
|
||||
translate("Log File Viewer"),
|
||||
nil )
|
||||
|
||||
-- tab: local -- ###############################################################
|
||||
|
||||
-- start/stop button -----------------------------------------------------------
|
||||
local btn = ns:taboption("local", Button, "_startstop")
|
||||
btn.title = translate("Start / Stop")
|
||||
btn.description = translate("Start/Stop Privoxy WEB Proxy")
|
||||
btn.template = "privoxy/detail_startstop"
|
||||
function btn.cfgvalue(self, section)
|
||||
local pid = CTRL.get_pid(true)
|
||||
if pid > 0 then
|
||||
btn.inputtitle = "PID: " .. pid
|
||||
btn.inputstyle = "reset"
|
||||
btn.disabled = false
|
||||
else
|
||||
btn.inputtitle = translate("Start")
|
||||
btn.inputstyle = "apply"
|
||||
btn.disabled = false
|
||||
end
|
||||
return true
|
||||
end
|
||||
|
||||
-- enabled ---------------------------------------------------------------------
|
||||
local ena = ns:taboption("local", Flag, "_enabled")
|
||||
ena.title = translate("Enabled")
|
||||
ena.description = translate("Enable/Disable autostart of Privoxy on system startup and interface events")
|
||||
ena.orientation = "horizontal" -- put description under the checkbox
|
||||
ena.rmempty = false
|
||||
function ena.cfgvalue(self, section)
|
||||
return (SYS.init.enabled("privoxy")) and "1" or "0"
|
||||
end
|
||||
function ena.validate(self, value)
|
||||
error("Validate " .. value)
|
||||
end
|
||||
function ena.write(self, section, value)
|
||||
--error("Write " .. value)
|
||||
if value == "1" then
|
||||
return SYS.init.enable("privoxy")
|
||||
else
|
||||
return SYS.init.disable("privoxy")
|
||||
end
|
||||
end
|
||||
|
||||
-- hostname --------------------------------------------------------------------
|
||||
local hn = ns:taboption("local", Value, "hostname")
|
||||
hn.title = string.format(HELP, "HOSTNAME", "Hostname" )
|
||||
hn.description = translate("The hostname shown on the CGI pages.")
|
||||
hn.placeholder = SYS.hostname()
|
||||
hn.optional = true
|
||||
hn.rmempty = true
|
||||
|
||||
-- user-manual -----------------------------------------------------------------
|
||||
local um = ns:taboption("local", Value, "user_manual")
|
||||
um.title = string.format(HELP, "USER-MANUAL", "User Manual" )
|
||||
um.description = translate("Location of the Privoxy User Manual.")
|
||||
um.placeholder = "http://www.privoxy.org/user-manual/"
|
||||
um.optional = true
|
||||
um.rmempty = true
|
||||
|
||||
-- admin-address ---------------------------------------------------------------
|
||||
local aa = ns:taboption("local", Value, "admin_address")
|
||||
aa.title_base = "Admin Email"
|
||||
aa.title = string.format(HELP, "ADMIN-ADDRESS", aa.title_base )
|
||||
aa.description = translate("An email address to reach the Privoxy administrator.")
|
||||
aa.placeholder = "privoxy.admin@example.com"
|
||||
aa.optional = true
|
||||
aa.rmempty = true
|
||||
function aa.validate(self, value)
|
||||
if not value or #value == 0 then
|
||||
return ""
|
||||
end
|
||||
if not (value:match("[A-Za-z0-9%.%%%+%-]+@[A-Za-z0-9%.%%%+%-]+%.%w%w%w?%w?")) then
|
||||
return nil, err_tab_local(self, translate("Invalid email address") )
|
||||
end
|
||||
return value
|
||||
end
|
||||
|
||||
-- proxy-info-url --------------------------------------------------------------
|
||||
local piu = ns:taboption("local", Value, "proxy_info_url")
|
||||
piu.title = string.format(HELP, "PROXY-INFO-URL", "Proxy Info URL" )
|
||||
piu.description = translate("A URL to documentation about the local Privoxy setup, configuration or policies.")
|
||||
piu.optional = true
|
||||
piu.rmempty = true
|
||||
|
||||
-- trust-info-url --------------------------------------------------------------
|
||||
local tiu = ns:taboption("local", DynamicList, "trust_info_url")
|
||||
tiu.title = string.format(HELP, "TRUST-INFO-URL", "Trust Info URLs" )
|
||||
tiu.description = translate("A URL to be displayed in the error page that users will see if access to an untrusted page is denied.")
|
||||
.. [[<br /><strong>]]
|
||||
.. translate("The value of this option only matters if the experimental trust mechanism has been activated.")
|
||||
.. [[</strong>]]
|
||||
tiu.optional = true
|
||||
tiu.rmepty = true
|
||||
|
||||
-- tab: filter -- ##############################################################
|
||||
|
||||
-- logdir ----------------------------------------------------------------------
|
||||
local ld = ns:taboption("filter", Value, "logdir")
|
||||
ld.title_base = "Log Directory"
|
||||
ld.title = string.format(HELP, "LOGDIR", ld.title_base )
|
||||
ld.description = translate("The directory where all logging takes place (i.e. where the logfile is located).")
|
||||
.. [[<br />]]
|
||||
.. translate("No trailing '/', please.")
|
||||
ld.default = "/var/log"
|
||||
ld.rmempty = false
|
||||
function ld.validate(self, value)
|
||||
if not value or #value == 0 then
|
||||
return nil, err_tab_filter(self, translate("Mandatory Input: No Directory given!") )
|
||||
elseif not LUFS.isdirectory(value) then
|
||||
return nil, err_tab_filter(self, translate("Directory does not exist!") )
|
||||
else
|
||||
return value
|
||||
end
|
||||
end
|
||||
|
||||
-- logfile ---------------------------------------------------------------------
|
||||
local lf = ns:taboption("filter", Value, "logfile")
|
||||
lf.title_base = "Log File"
|
||||
lf.title = string.format(HELP, "LOGFILE", lf.title_base )
|
||||
lf.description = translate("The log file to use. File name, relative to log directory.")
|
||||
lf.default = "privoxy.log"
|
||||
lf.rmempty = false
|
||||
function lf.validate(self, value)
|
||||
if not value or #value == 0 then
|
||||
return nil, err_tab_filter(self, translate("Mandatory Input: No File given!") )
|
||||
else
|
||||
return value
|
||||
end
|
||||
end
|
||||
|
||||
-- confdir ---------------------------------------------------------------------
|
||||
local cd = ns:taboption("filter", Value, "confdir")
|
||||
cd.title = string.format(HELP, "CONFDIR", "Configuration Directory" )
|
||||
cd.description = translate("The directory where the other configuration files are located.")
|
||||
.. [[<br />]]
|
||||
.. translate("No trailing '/', please.")
|
||||
cd.default = "/etc/privoxy"
|
||||
cd.rmempty = false
|
||||
function cd.validate(self, value)
|
||||
if not value or #value == 0 then
|
||||
return nil, err_tab_filter(self, translate("Mandatory Input: No Directory given!") )
|
||||
elseif not LUFS.isdirectory(value) then
|
||||
return nil, err_tab_filter(self, translate("Directory does not exist!") )
|
||||
else
|
||||
return value
|
||||
end
|
||||
end
|
||||
|
||||
-- templdir --------------------------------------------------------------------
|
||||
local td = ns:taboption("filter", Value, "templdir")
|
||||
td.title_base = "Template Directory"
|
||||
td.title = string.format(HELP, "TEMPLDIR", td.title_base )
|
||||
td.description = translate("An alternative directory where the templates are loaded from.")
|
||||
.. [[<br />]]
|
||||
.. translate("No trailing '/', please.")
|
||||
td.placeholder = "/etc/privoxy/templates"
|
||||
td.rmempty = true
|
||||
function td.validate(self, value)
|
||||
if not LUFS.isdirectory(value) then
|
||||
return nil, err_tab_filter(self, translate("Directory does not exist!") )
|
||||
else
|
||||
return value
|
||||
end
|
||||
end
|
||||
|
||||
-- actionsfile -----------------------------------------------------------------
|
||||
local af = ns:taboption("filter", DynamicList, "actionsfile")
|
||||
af.title_base = "Action Files"
|
||||
af.title = string.format(HELP, "ACTIONSFILE", af.title_base)
|
||||
af.description = translate("The actions file(s) to use. Multiple actionsfile lines are permitted, and are in fact recommended!")
|
||||
.. [[<br /><strong>match-all.action := </strong>]]
|
||||
.. translate("Actions that are applied to all sites and maybe overruled later on.")
|
||||
.. [[<br /><strong>default.action := </strong>]]
|
||||
.. translate("Main actions file")
|
||||
.. [[<br /><strong>user.action := </strong>]]
|
||||
.. translate("User customizations")
|
||||
af.rmempty = false
|
||||
function af.validate(self, value)
|
||||
if not value or #value == 0 then
|
||||
return nil, err_tab_access(self, translate("Mandatory Input: No files given!") )
|
||||
end
|
||||
local confdir = cd:formvalue(ns.section)
|
||||
local err = false
|
||||
local file = ""
|
||||
if type(value) == "table" then
|
||||
local x
|
||||
for _, x in ipairs(value) do
|
||||
if x and #x > 0 then
|
||||
if not LUFS.isfile(confdir .."/".. x) then
|
||||
err = true
|
||||
file = x
|
||||
break -- break/leave for on error
|
||||
end
|
||||
end
|
||||
end
|
||||
else
|
||||
if not LUFS.isfile(confdir .."/".. value) then
|
||||
err = true
|
||||
file = value
|
||||
end
|
||||
end
|
||||
if err then
|
||||
return nil, string.format(err_tab_filter(self, translate("File '%s' not found inside Configuration Directory") ), file)
|
||||
end
|
||||
return value
|
||||
end
|
||||
|
||||
-- filterfile ------------------------------------------------------------------
|
||||
local ff = ns:taboption("filter", DynamicList, "filterfile")
|
||||
ff.title_base = "Filter files"
|
||||
ff.title = string.format(HELP, "FILTERFILE", ff.title_base )
|
||||
ff.description = translate("The filter files contain content modification rules that use regular expressions.")
|
||||
ff.rmempty = false
|
||||
function ff.validate(self, value)
|
||||
if not value or #value == 0 then
|
||||
return nil, err_tab_access(self, translate("Mandatory Input: No files given!") )
|
||||
end
|
||||
local confdir = cd:formvalue(ns.section)
|
||||
local err = false
|
||||
local file = ""
|
||||
if type(value) == "table" then
|
||||
local x
|
||||
for _, x in ipairs(value) do
|
||||
if x and #x > 0 then
|
||||
if not LUFS.isfile(confdir .."/".. x) then
|
||||
err = true
|
||||
file = x
|
||||
break -- break/leave for on error
|
||||
end
|
||||
end
|
||||
end
|
||||
else
|
||||
if not LUFS.isfile(confdir .."/".. value) then
|
||||
err = true
|
||||
file = value
|
||||
end
|
||||
end
|
||||
if err then
|
||||
return nil, string.format(err_tab_filter(self, translate("File '%s' not found inside Configuration Directory") ), file )
|
||||
end
|
||||
return value
|
||||
end
|
||||
|
||||
-- trustfile -------------------------------------------------------------------
|
||||
local tf = ns:taboption("filter", Value, "trustfile")
|
||||
tf.title_base = "Trust file"
|
||||
tf.title = string.format(HELP, "TRUSTFILE", tf.title_base )
|
||||
tf.description = translate("The trust mechanism is an experimental feature for building white-lists "
|
||||
.."and should be used with care.")
|
||||
.. [[<br /><strong>]]
|
||||
.. translate("It is NOT recommended for the casual user.")
|
||||
.. [[</strong>]]
|
||||
tf.placeholder = "sites.trust"
|
||||
tf.rmempty = true
|
||||
function tf.validate(self, value)
|
||||
local confdir = cd:formvalue(ns.section)
|
||||
local err = false
|
||||
local file = ""
|
||||
if type(value) == "table" then
|
||||
local x
|
||||
for _, x in ipairs(value) do
|
||||
if x and #x > 0 then
|
||||
if not LUFS.isfile(confdir .."/".. x) then
|
||||
err = true
|
||||
file = x
|
||||
break -- break/leave for on error
|
||||
end
|
||||
end
|
||||
end
|
||||
else
|
||||
if not LUFS.isfile(confdir .."/".. value) then
|
||||
err = true
|
||||
file = value
|
||||
end
|
||||
end
|
||||
if err then
|
||||
return nil, string.format(err_tab_filter(self, translate("File '%s' not found inside Configuration Directory") ), file )
|
||||
end
|
||||
return value
|
||||
end
|
||||
|
||||
-- tab: access -- ##############################################################
|
||||
|
||||
-- listen-address --------------------------------------------------------------
|
||||
local la = ns:taboption("access", DynamicList, "listen_address")
|
||||
la.title_base = "Listen addresses"
|
||||
la.title = string.format(HELP, "LISTEN-ADDRESS", la.title_base )
|
||||
la.description = translate("The address and TCP port on which Privoxy will listen for client requests.")
|
||||
.. [[<br />]]
|
||||
.. translate("Syntax: ")
|
||||
.. "IPv4:Port / [IPv6]:Port / Host:Port"
|
||||
la.default = "127.0.0.1:8118"
|
||||
la.rmempty = false
|
||||
function la.validate(self, value)
|
||||
if not value or #value == 0 then
|
||||
return nil, err_tab_access(self, translate("Mandatory Input: No Data given!") )
|
||||
end
|
||||
|
||||
local function check_value(v)
|
||||
local _ret = UTIL.split(v, "]:")
|
||||
local _ip
|
||||
if _ret[2] then -- ip6 with port
|
||||
_ip = string.gsub(_ret[1], "%[", "") -- remove "[" at beginning
|
||||
if not DTYP.ip6addr(_ip) then
|
||||
return translate("Mandatory Input: No valid IPv6 address given!")
|
||||
elseif not DTYP.port(_ret[2]) then
|
||||
return translate("Mandatory Input: No valid Port given!")
|
||||
else
|
||||
return nil
|
||||
end
|
||||
end
|
||||
_ret = UTIL.split(v, ":")
|
||||
if not _ret[2] then
|
||||
return translate("Mandatory Input: No Port given!")
|
||||
end
|
||||
if #_ret[1] > 0 and not DTYP.host(_ret[1]) then -- :8118 is valid address
|
||||
return translate("Mandatory Input: No valid IPv4 address or host given!")
|
||||
elseif not DTYP.port(_ret[2]) then
|
||||
return translate("Mandatory Input: No valid Port given!")
|
||||
else
|
||||
return nil
|
||||
end
|
||||
end
|
||||
|
||||
local err = ""
|
||||
local entry = ""
|
||||
if type(value) == "table" then
|
||||
local x
|
||||
for _, x in ipairs(value) do
|
||||
if x and #x > 0 then
|
||||
err = check_value(x)
|
||||
if err then
|
||||
entry = x
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
else
|
||||
err = check_value(value)
|
||||
entry = value
|
||||
end
|
||||
if err then
|
||||
return nil, string.format(err_tab_access(self, err .. " - %s"), entry )
|
||||
end
|
||||
return value
|
||||
end
|
||||
|
||||
-- permit-access ---------------------------------------------------------------
|
||||
local pa = ns:taboption("access", DynamicList, "permit_access")
|
||||
pa.title = string.format(HELP, "ACLS", "Permit access" )
|
||||
pa.description = translate("Who can access what.")
|
||||
.. [[<br /><strong>]]
|
||||
.. translate("Please read Privoxy manual for details!")
|
||||
.. [[</strong>]]
|
||||
pa.rmempty = true
|
||||
|
||||
-- deny-access -----------------------------------------------------------------
|
||||
local da = ns:taboption("access", DynamicList, "deny_access")
|
||||
da.title = string.format(HELP, "ACLS", "Deny Access" )
|
||||
da.description = translate("Who can access what.")
|
||||
.. [[<br /><strong>]]
|
||||
.. translate("Please read Privoxy manual for details!")
|
||||
.. [[</strong>]]
|
||||
da.rmempty = true
|
||||
|
||||
-- buffer-limit ----------------------------------------------------------------
|
||||
local bl = ns:taboption("access", Value, "buffer_limit")
|
||||
bl.title_base = "Buffer Limit"
|
||||
bl.title = string.format(HELP, "BUFFER-LIMIT", bl.title_base )
|
||||
bl.description = translate("Maximum size (in KB) of the buffer for content filtering.")
|
||||
.. [[<br />]]
|
||||
.. translate("Value range 1 to 4096, no entry defaults to 4096")
|
||||
bl.default = 4096
|
||||
bl.rmempty = true
|
||||
function bl.validate(self, value)
|
||||
local v = tonumber(value)
|
||||
if not v then
|
||||
return nil, err_tab_access(self, translate("Value is not a number") )
|
||||
elseif v < 1 or v > 4096 then
|
||||
return nil, err_tab_access(self, translate("Value not between 1 and 4096") )
|
||||
elseif v == self.default then
|
||||
return "" -- dont need to save default
|
||||
end
|
||||
return value
|
||||
end
|
||||
|
||||
-- toggle ----------------------------------------------------------------------
|
||||
local tgl = ns:taboption("access", Flag, "toggle")
|
||||
tgl.title = string.format(HELP, "TOGGLE", "Toggle Status" )
|
||||
tgl.description = translate("Enable/Disable filtering when Privoxy starts.")
|
||||
.. [[<br />]]
|
||||
.. translate("Disabled == Transparent Proxy Mode")
|
||||
tgl.orientation = "horizontal"
|
||||
tgl.default = "1"
|
||||
tgl.rmempty = false
|
||||
function tgl.parse(self, section)
|
||||
CTRL.flag_parse(self, section)
|
||||
end
|
||||
|
||||
-- enable-remote-toggle --------------------------------------------------------
|
||||
local ert = ns:taboption("access", Flag, "enable_remote_toggle")
|
||||
ert.title = string.format(HELP, "ENABLE-REMOTE-TOGGLE", "Enable remote toggle" )
|
||||
ert.description = translate("Whether or not the web-based toggle feature may be used.")
|
||||
ert.orientation = "horizontal"
|
||||
ert.rmempty = true
|
||||
function ert.parse(self, section)
|
||||
CTRL.flag_parse(self, section)
|
||||
end
|
||||
|
||||
-- enable-remote-http-toggle ---------------------------------------------------
|
||||
local eht = ns:taboption("access", Flag, "enable_remote_http_toggle")
|
||||
eht.title = string.format(HELP, "ENABLE-REMOTE-HTTP-TOGGLE", "Enable remote toggle via HTTP" )
|
||||
eht.description = translate("Whether or not Privoxy recognizes special HTTP headers to change its behaviour.")
|
||||
.. [[<br /><strong>]]
|
||||
.. translate("This option will be removed in future releases as it has been obsoleted by the more general header taggers.")
|
||||
.. [[</strong>]]
|
||||
eht.orientation = "horizontal"
|
||||
eht.rmempty = true
|
||||
function eht.parse(self, section)
|
||||
CTRL.flag_parse(self, section)
|
||||
end
|
||||
|
||||
-- enable-edit-actions ---------------------------------------------------------
|
||||
local eea = ns:taboption("access", Flag, "enable_edit_actions")
|
||||
eea.title = string.format(HELP, "ENABLE-EDIT-ACTIONS", "Enable action file editor" )
|
||||
eea.description = translate("Whether or not the web-based actions file editor may be used.")
|
||||
eea.orientation = "horizontal"
|
||||
eea.rmempty = true
|
||||
function eea.parse(self, section)
|
||||
CTRL.flag_parse(self, section)
|
||||
end
|
||||
|
||||
-- enforce-blocks --------------------------------------------------------------
|
||||
local eb = ns:taboption("access", Flag, "enforce_blocks")
|
||||
eb.title = string.format(HELP, "ENFORCE-BLOCKS", "Enforce page blocking" )
|
||||
eb.description = translate("If enabled, Privoxy hides the 'go there anyway' link. "
|
||||
.. "The user obviously should not be able to bypass any blocks.")
|
||||
eb.orientation = "horizontal"
|
||||
eb.rmempty = true
|
||||
function eb.parse(self, section)
|
||||
CTRL.flag_parse(self, section)
|
||||
end
|
||||
|
||||
-- tab: forward -- #############################################################
|
||||
|
||||
-- enable-proxy-authentication-forwarding --------------------------------------
|
||||
local paf = ns:taboption("forward", Flag, "enable_proxy_authentication_forwarding")
|
||||
paf.title = string.format(HELP, "ENABLE-PROXY-AUTHENTICATION-FORWARDING",
|
||||
translate("Enable proxy authentication forwarding") )
|
||||
paf.description = translate("Whether or not proxy authentication through Privoxy should work.")
|
||||
.. [[<br /><strong>]]
|
||||
.. translate("Enabling this option is NOT recommended if there is no parent proxy that requires authentication!")
|
||||
.. [[</strong>]]
|
||||
--paf.orientation = "horizontal"
|
||||
paf.rmempty = true
|
||||
function paf.parse(self, section)
|
||||
CTRL.flag_parse(self, section)
|
||||
end
|
||||
|
||||
-- forward ---------------------------------------------------------------------
|
||||
local fwd = ns:taboption("forward", DynamicList, "forward")
|
||||
fwd.title = string.format(HELP, "FORWARD", "Forward HTTP" )
|
||||
fwd.description = translate("To which parent HTTP proxy specific requests should be routed.")
|
||||
.. [[<br />]]
|
||||
.. translate("Syntax: target_pattern http_parent[:port]")
|
||||
fwd.rmempty = true
|
||||
|
||||
-- forward-socks4 --------------------------------------------------------------
|
||||
local fs4 = ns:taboption("forward", DynamicList, "forward_socks4")
|
||||
fs4.title = string.format(HELP, "SOCKS", "Forward SOCKS 4" )
|
||||
fs4.description = translate("Through which SOCKS proxy (and optionally to which parent HTTP proxy) specific requests should be routed.")
|
||||
.. [[<br />]]
|
||||
.. translate("Syntax: target_pattern socks_proxy[:port] http_parent[:port]")
|
||||
fs4.rmempty = true
|
||||
|
||||
-- forward-socks4a -------------------------------------------------------------
|
||||
local f4a = ns:taboption("forward", DynamicList, "forward_socks4a")
|
||||
f4a.title = string.format(HELP, "SOCKS", "Forward SOCKS 4A" )
|
||||
f4a.description = fs4.description
|
||||
f4a.rmempty = true
|
||||
|
||||
-- forward-socks5 --------------------------------------------------------------
|
||||
local fs5 = ns:taboption("forward", DynamicList, "forward_socks5")
|
||||
fs5.title = string.format(HELP, "SOCKS", "Forward SOCKS 5" )
|
||||
fs5.description = fs4.description
|
||||
fs5.rmempty = true
|
||||
|
||||
-- forward-socks5t -------------------------------------------------------------
|
||||
local f5t = ns:taboption("forward", DynamicList, "forward_socks5t")
|
||||
f5t.title = string.format(HELP, "SOCKS", "Forward SOCKS 5t" )
|
||||
f5t.description = fs4.description
|
||||
f5t.rmempty = true
|
||||
|
||||
-- tab: misc -- ################################################################
|
||||
|
||||
-- accept-intercepted-requests -------------------------------------------------
|
||||
local air = ns:taboption("misc", Flag, "accept_intercepted_requests")
|
||||
air.title = string.format(HELP, "ACCEPT-INTERCEPTED-REQUESTS", "Accept intercepted requests" )
|
||||
air.description = translate("Whether intercepted requests should be treated as valid.")
|
||||
air.orientation = "horizontal"
|
||||
air.rmempty = true
|
||||
function air.parse(self, section)
|
||||
CTRL.flag_parse(self, section)
|
||||
end
|
||||
|
||||
-- allow-cgi-request-crunching -------------------------------------------------
|
||||
local crc = ns:taboption("misc", Flag, "allow_cgi_request_crunching")
|
||||
crc.title = string.format(HELP, "ALLOW-CGI-REQUEST-CRUNCHING", "Allow CGI request crunching" )
|
||||
crc.description = translate("Whether requests to Privoxy's CGI pages can be blocked or redirected.")
|
||||
crc.orientation = "horizontal"
|
||||
crc.rmempty = true
|
||||
function crc.parse(self, section)
|
||||
CTRL.flag_parse(self, section)
|
||||
end
|
||||
|
||||
-- split-large-forms -----------------------------------------------------------
|
||||
local slf = ns:taboption("misc", Flag, "split_large_forms")
|
||||
slf.title = string.format(HELP, "SPLIT-LARGE-FORMS", "Split large forms" )
|
||||
slf.description = translate("Whether the CGI interface should stay compatible with broken HTTP clients.")
|
||||
slf.orientation = "horizontal"
|
||||
slf.rmempty = true
|
||||
function slf.parse(self, section)
|
||||
CTRL.flag_parse(self, section)
|
||||
end
|
||||
|
||||
-- keep-alive-timeout ----------------------------------------------------------
|
||||
local kat = ns:taboption("misc", Value, "keep_alive_timeout")
|
||||
kat.title_base = "Keep-alive timeout"
|
||||
kat.title = string.format(HELP, "KEEP-ALIVE-TIMEOUT", kat.title_base)
|
||||
kat.description = translate("Number of seconds after which an open connection will no longer be reused.")
|
||||
kat.rmempty = true
|
||||
function kat.validate(self, value)
|
||||
local v = tonumber(value)
|
||||
if not v then
|
||||
return nil, err_tab_misc(self, translate("Value is not a number") )
|
||||
elseif v < 1 then
|
||||
return nil, err_tab_misc(self, translate("Value not greater 0 or empty") )
|
||||
end
|
||||
return value
|
||||
end
|
||||
|
||||
-- tolerate-pipelining ---------------------------------------------------------
|
||||
local tp = ns:taboption("misc", Flag, "tolerate_pipelining")
|
||||
tp.title = string.format(HELP, "TOLERATE-PIPELINING", "Tolerate pipelining" )
|
||||
tp.description = translate("Whether or not pipelined requests should be served.")
|
||||
tp.orientation = "horizontal"
|
||||
tp.rmempty = true
|
||||
function tp.parse(self, section)
|
||||
CTRL.flag_parse(self, section)
|
||||
end
|
||||
|
||||
-- default-server-timeout ------------------------------------------------------
|
||||
local dst = ns:taboption("misc", Value, "default_server_timeout")
|
||||
dst.title_base = "Default server timeout"
|
||||
dst.title = string.format(HELP, "DEFAULT-SERVER-TIMEOUT", dst.title_base)
|
||||
dst.description = translate("Assumed server-side keep-alive timeout (in seconds) if not specified by the server.")
|
||||
dst.rmempty = true
|
||||
function dst.validate(self, value)
|
||||
local v = tonumber(value)
|
||||
if not v then
|
||||
return nil, err_tab_misc(self, translate("Value is not a number") )
|
||||
elseif v < 1 then
|
||||
return nil, err_tab_misc(self, translate("Value not greater 0 or empty") )
|
||||
end
|
||||
return value
|
||||
end
|
||||
|
||||
-- connection-sharing ----------------------------------------------------------
|
||||
local cs = ns:taboption("misc", Flag, "connection_sharing")
|
||||
cs.title = string.format(HELP, "CONNECTION-SHARING", "Connection sharing" )
|
||||
cs.description = translate("Whether or not outgoing connections that have been kept alive should be shared between different incoming connections.")
|
||||
cs.orientation = "horizontal"
|
||||
cs.rmempty = true
|
||||
function cs.parse(self, section)
|
||||
CTRL.flag_parse(self, section)
|
||||
end
|
||||
|
||||
-- socket-timeout --------------------------------------------------------------
|
||||
local st = ns:taboption("misc", Value, "socket_timeout")
|
||||
st.title_base = "Socket timeout"
|
||||
st.title = string.format(HELP, "SOCKET-TIMEOUT", st.title_base )
|
||||
st.description = translate("Number of seconds after which a socket times out if no data is received.")
|
||||
st.default = 300
|
||||
st.rmempty = true
|
||||
function st.validate(self, value)
|
||||
local v = tonumber(value)
|
||||
if not v then
|
||||
return nil, err_tab_misc(self, translate("Value is not a number") )
|
||||
elseif v < 1 then
|
||||
return nil, err_tab_misc(self, translate("Value not greater 0 or empty") )
|
||||
elseif v == self.default then
|
||||
return "" -- dont need to save default
|
||||
end
|
||||
return value
|
||||
end
|
||||
|
||||
-- max-client-connections ------------------------------------------------------
|
||||
local mcc = ns:taboption("misc", Value, "max_client_connections")
|
||||
mcc.title_base = "Max. client connections"
|
||||
mcc.title = string.format(HELP, "MAX-CLIENT-CONNECTIONS", mcc.title_base )
|
||||
mcc.description = translate("Maximum number of client connections that will be served.")
|
||||
mcc.default = 128
|
||||
mcc.rmempty = true
|
||||
function mcc.validate(self, value)
|
||||
local v = tonumber(value)
|
||||
if not v then
|
||||
return nil, err_tab_misc(self, translate("Value is not a number") )
|
||||
elseif v < 1 then
|
||||
return nil, err_tab_misc(self, translate("Value not greater 0 or empty") )
|
||||
elseif v == self.default then
|
||||
return "" -- dont need to save default
|
||||
end
|
||||
return value
|
||||
end
|
||||
|
||||
-- handle-as-empty-doc-returns-ok ----------------------------------------------
|
||||
local her = ns:taboption("misc", Flag, "handle_as_empty_doc_returns_ok")
|
||||
her.title = string.format(HELP, "HANDLE-AS-EMPTY-DOC-RETURNS-OK", "Handle as empty doc returns ok" )
|
||||
her.description = translate("The status code Privoxy returns for pages blocked with +handle-as-empty-document.")
|
||||
her.orientation = "horizontal"
|
||||
her.rmempty = true
|
||||
function her.parse(self, section)
|
||||
CTRL.flag_parse(self, section)
|
||||
end
|
||||
|
||||
-- enable-compression ----------------------------------------------------------
|
||||
local ec = ns:taboption("misc", Flag, "enable_compression")
|
||||
ec.title = string.format(HELP, "ENABLE-COMPRESSION", "Enable compression" )
|
||||
ec.description = translate("Whether or not buffered content is compressed before delivery.")
|
||||
ec.orientation = "horizontal"
|
||||
ec.rmempty = true
|
||||
function ec.parse(self, section)
|
||||
CTRL.flag_parse(self, section)
|
||||
end
|
||||
|
||||
-- compression-level -----------------------------------------------------------
|
||||
local cl = ns:taboption("misc", Value, "compression_level")
|
||||
cl.title_base = "Compression level"
|
||||
cl.title = string.format(HELP, "COMPRESSION-LEVEL", cl.title_base )
|
||||
cl.description = translate("The compression level that is passed to the zlib library when compressing buffered content.")
|
||||
cl.default = 1
|
||||
cl.rmempty = true
|
||||
function cl.validate(self, value)
|
||||
local v = tonumber(value)
|
||||
if not v then
|
||||
return nil, err_tab_misc(self, translate("Value is not a number") )
|
||||
elseif v < 0 or v > 9 then
|
||||
return nil, err_tab_misc(self, translate("Value not between 0 and 9") )
|
||||
elseif v == self.default then
|
||||
return "" -- don't need to save default
|
||||
end
|
||||
return value
|
||||
end
|
||||
|
||||
-- client-header-order ---------------------------------------------------------
|
||||
local cho = ns:taboption("misc", Value, "client_header_order")
|
||||
cho.title = string.format(HELP, "CLIENT-HEADER-ORDER", "Client header order" )
|
||||
cho.description = translate("The order in which client headers are sorted before forwarding them.")
|
||||
.. [[<br />]]
|
||||
.. translate("Syntax: Client header names delimited by spaces.")
|
||||
cho.rmempty = true
|
||||
|
||||
-- "debug"-tab definition -- ###################################################
|
||||
|
||||
-- single-threaded -------------------------------------------------------------
|
||||
local st = ns:taboption("debug", Flag, "single_threaded")
|
||||
st.title = string.format(HELP, "SINGLE-THREADED", "Single Threaded" )
|
||||
st.description = translate("Whether to run only one server thread.")
|
||||
.. [[<br /><strong>]]
|
||||
.. translate("This option is only there for debugging purposes. It will drastically reduce performance.")
|
||||
.. [[</strong>]]
|
||||
st.rmempty = true
|
||||
function st.parse(self, section)
|
||||
CTRL.flag_parse(self, section)
|
||||
end
|
||||
|
||||
-- debug -----------------------------------------------------------------------
|
||||
local d1 = ns:taboption("debug", Flag, "debug_1")
|
||||
d1.title = string.format(HELP, "DEBUG", "Debug 1" )
|
||||
d1.description = translate("Log the destination for each request Privoxy let through. See also 'Debug 1024'.")
|
||||
d1.rmempty = true
|
||||
function d1.parse(self, section)
|
||||
CTRL.flag_parse(self, section)
|
||||
end
|
||||
|
||||
-- debug -----------------------------------------------------------------------
|
||||
local d2 = ns:taboption("debug", Flag, "debug_2")
|
||||
d2.title = string.format(HELP, "DEBUG", "Debug 2" )
|
||||
d2.description = translate("Show each connection status")
|
||||
d2.rmempty = true
|
||||
function d2.parse(self, section)
|
||||
CTRL.flag_parse(self, section)
|
||||
end
|
||||
|
||||
-- debug -----------------------------------------------------------------------
|
||||
local d3 = ns:taboption("debug", Flag, "debug_4")
|
||||
d3.title = string.format(HELP, "DEBUG", "Debug 4" )
|
||||
d3.description = translate("Show I/O status")
|
||||
d3.rmempty = true
|
||||
function d3.parse(self, section)
|
||||
CTRL.flag_parse(self, section)
|
||||
end
|
||||
|
||||
-- debug -----------------------------------------------------------------------
|
||||
local d4 = ns:taboption("debug", Flag, "debug_8")
|
||||
d4.title = string.format(HELP, "DEBUG", "Debug 8" )
|
||||
d4.description = translate("Show header parsing")
|
||||
d4.rmempty = true
|
||||
function d4.parse(self, section)
|
||||
CTRL.flag_parse(self, section)
|
||||
end
|
||||
|
||||
-- debug -----------------------------------------------------------------------
|
||||
local d5 = ns:taboption("debug", Flag, "debug_16")
|
||||
d5.title = string.format(HELP, "DEBUG", "Debug 16" )
|
||||
d5.description = translate("Log all data written to the network")
|
||||
d5.rmempty = true
|
||||
function d5.parse(self, section)
|
||||
CTRL.flag_parse(self, section)
|
||||
end
|
||||
|
||||
-- debug -----------------------------------------------------------------------
|
||||
local d6 = ns:taboption("debug", Flag, "debug_32")
|
||||
d6.title = string.format(HELP, "DEBUG", "Debug 32" )
|
||||
d6.description = translate("Debug force feature")
|
||||
d6.rmempty = true
|
||||
function d6.parse(self, section)
|
||||
CTRL.flag_parse(self, section)
|
||||
end
|
||||
|
||||
-- debug -----------------------------------------------------------------------
|
||||
local d7 = ns:taboption("debug", Flag, "debug_64")
|
||||
d7.title = string.format(HELP, "DEBUG", "Debug 64" )
|
||||
d7.description = translate("Debug regular expression filters")
|
||||
d7.rmempty = true
|
||||
function d7.parse(self, section)
|
||||
CTRL.flag_parse(self, section)
|
||||
end
|
||||
|
||||
-- debug -----------------------------------------------------------------------
|
||||
local d8 = ns:taboption("debug", Flag, "debug_128")
|
||||
d8.title = string.format(HELP, "DEBUG", "Debug 128" )
|
||||
d8.description = translate("Debug redirects")
|
||||
d8.rmempty = true
|
||||
function d8.parse(self, section)
|
||||
CTRL.flag_parse(self, section)
|
||||
end
|
||||
|
||||
-- debug -----------------------------------------------------------------------
|
||||
local d9 = ns:taboption("debug", Flag, "debug_256")
|
||||
d9.title = string.format(HELP, "DEBUG", "Debug 256" )
|
||||
d9.description = translate("Debug GIF de-animation")
|
||||
d9.rmempty = true
|
||||
function d9.parse(self, section)
|
||||
CTRL.flag_parse(self, section)
|
||||
end
|
||||
|
||||
-- debug -----------------------------------------------------------------------
|
||||
local d10 = ns:taboption("debug", Flag, "debug_512")
|
||||
d10.title = string.format(HELP, "DEBUG", "Debug 512" )
|
||||
d10.description = translate("Common Log Format")
|
||||
d10.rmempty = true
|
||||
function d10.parse(self, section)
|
||||
CTRL.flag_parse(self, section)
|
||||
end
|
||||
|
||||
-- debug -----------------------------------------------------------------------
|
||||
local d11 = ns:taboption("debug", Flag, "debug_1024")
|
||||
d11.title = string.format(HELP, "DEBUG", "Debug 1024" )
|
||||
d11.description = translate("Log the destination for requests Privoxy didn't let through, and the reason why.")
|
||||
d11.rmempty = true
|
||||
function d11.parse(self, section)
|
||||
CTRL.flag_parse(self, section)
|
||||
end
|
||||
|
||||
-- debug -----------------------------------------------------------------------
|
||||
local d12 = ns:taboption("debug", Flag, "debug_2048")
|
||||
d12.title = string.format(HELP, "DEBUG", "Debug 2048" )
|
||||
d12.description = translate("CGI user interface")
|
||||
d12.rmempty = true
|
||||
function d12.parse(self, section)
|
||||
CTRL.flag_parse(self, section)
|
||||
end
|
||||
|
||||
-- debug -----------------------------------------------------------------------
|
||||
local d13 = ns:taboption("debug", Flag, "debug_4096")
|
||||
d13.title = string.format(HELP, "DEBUG", "Debug 4096" )
|
||||
d13.description = translate("Startup banner and warnings.")
|
||||
d13.rmempty = true
|
||||
function d13.parse(self, section)
|
||||
CTRL.flag_parse(self, section)
|
||||
end
|
||||
|
||||
-- debug -----------------------------------------------------------------------
|
||||
local d14 = ns:taboption("debug", Flag, "debug_8192")
|
||||
d14.title = string.format(HELP, "DEBUG", "Debug 8192" )
|
||||
d14.description = translate("Non-fatal errors - *we highly recommended enabling this*")
|
||||
d14.rmempty = true
|
||||
function d14.parse(self, section)
|
||||
CTRL.flag_parse(self, section)
|
||||
end
|
||||
|
||||
-- debug -----------------------------------------------------------------------
|
||||
local d15 = ns:taboption("debug", Flag, "debug_32768")
|
||||
d15.title = string.format(HELP, "DEBUG", "Debug 32768" )
|
||||
d15.description = translate("Log all data read from the network")
|
||||
d15.rmempty = true
|
||||
function d15.parse(self, section)
|
||||
CTRL.flag_parse(self, section)
|
||||
end
|
||||
|
||||
-- debug -----------------------------------------------------------------------
|
||||
local d16 = ns:taboption("debug", Flag, "debug_65536")
|
||||
d16.title = string.format(HELP, "DEBUG", "Debug 65536" )
|
||||
d16.description = translate("Log the applying actions")
|
||||
d16.rmempty = true
|
||||
function d16.parse(self, section)
|
||||
CTRL.flag_parse(self, section)
|
||||
end
|
||||
|
||||
-- tab: logview -- #############################################################
|
||||
|
||||
local lv = ns:taboption("logview", DummyValue, "_logview")
|
||||
lv.template = "privoxy/detail_logview"
|
||||
lv.inputtitle = translate("Read / Reread log file")
|
||||
lv.rows = 50
|
||||
function lv.cfgvalue(self, section)
|
||||
local lfile=self.map:get(ns.section, "logdir") .. "/" .. self.map:get(ns.section, "logfile")
|
||||
if NXFS.access(lfile) then
|
||||
return lfile .. "\n" .. translate("Please press [Read] button")
|
||||
end
|
||||
return lfile .. "\n" .. translate("File not found or empty")
|
||||
end
|
||||
|
||||
return m
|
56
net/privoxy-luci/files/luasrc/view/privoxy/detail_logview.htm
Executable file
56
net/privoxy-luci/files/luasrc/view/privoxy/detail_logview.htm
Executable file
|
@ -0,0 +1,56 @@
|
|||
|
||||
<!-- ++ BEGIN ++ Privoxy ++ detail_logview.htm ++ -->
|
||||
<script type="text/javascript">//<![CDATA[
|
||||
function onclick_logview(section, bottom) {
|
||||
// get elements
|
||||
var txt = document.getElementById("cbid.privoxy.privoxy._logview.txt"); // TextArea
|
||||
if ( !txt ) { return; } // security check
|
||||
var lvXHR = new XHR();
|
||||
lvXHR.get('<%=luci.dispatcher.build_url("admin", "services", "privoxy", "logview")%>', null,
|
||||
function(x) {
|
||||
if (x.responseText == "_nodata_")
|
||||
txt.value = "<%:File not found or empty%>";
|
||||
else
|
||||
txt.value = x.responseText;
|
||||
if (bottom)
|
||||
txt.scrollTop = txt.scrollHeight;
|
||||
else
|
||||
txt.scrollTop = 0; }
|
||||
);
|
||||
}
|
||||
//]]></script>
|
||||
|
||||
<%+cbi/valueheader%>
|
||||
|
||||
<br />
|
||||
|
||||
<%
|
||||
-- one button on top, one at the buttom
|
||||
%>
|
||||
<input class="cbi-button cbi-input-button" style="align: center; width: 100%" type="button" onclick="onclick_logview(this.name, false)"
|
||||
<%=
|
||||
attr("name", section) .. attr("id", cbid .. ".btn1") .. attr("value", self.inputtitle)
|
||||
%> />
|
||||
|
||||
<br /><br />
|
||||
|
||||
<%
|
||||
-- set a readable style taken from openwrt theme for textarea#syslog
|
||||
-- in openwrt theme there are problems with a width of 100 so we check for theme and set to lower value
|
||||
%>
|
||||
<textarea style="width: <%if media == "/luci-static/openwrt.org" then%>98.7%<%else%>100%<%end%> ; min-height: 500px; border: 3px solid #cccccc; padding: 5px; font-family: monospace; resize: none;" wrap="off" readonly="readonly"
|
||||
<%=
|
||||
attr("name", cbid .. ".txt") .. attr("id", cbid .. ".txt") .. ifattr(self.rows, "rows")
|
||||
%> >
|
||||
<%-=pcdata(self:cfgvalue(section))-%>
|
||||
</textarea>
|
||||
<br /><br />
|
||||
|
||||
<%
|
||||
-- one button on top, one at the buttom
|
||||
%>
|
||||
<input class="cbi-button cbi-input-button" style="align: center; width: 100%" type="button" onclick="onclick_logview(this.name, true)"
|
||||
<%= attr("name", section) .. attr("id", cbid .. ".btn2") .. attr("value", self.inputtitle) %> />
|
||||
|
||||
<%+cbi/valuefooter%>
|
||||
<!-- ++ END ++ Privoxy ++ detail_logview.htm ++ -->
|
|
@ -0,0 +1,49 @@
|
|||
|
||||
<!-- ++ BEGIN ++ Privoxy ++ detail_startstop.htm ++ -->
|
||||
<script type="text/javascript">//<![CDATA[
|
||||
|
||||
// show XHR.poll/XHR.get response on button
|
||||
function _data2elements(x) {
|
||||
var btn = document.getElementById("cbid.privoxy.privoxy._startstop");
|
||||
if ( ! btn ) { return; } // security check
|
||||
if (x.responseText == "0") {
|
||||
btn.value = "<%:Start%>";
|
||||
btn.className = "cbi-button cbi-button-apply";
|
||||
btn.disabled = false;
|
||||
} else {
|
||||
btn.value = "PID: " + x.responseText;
|
||||
btn.className = "cbi-button cbi-button-reset";
|
||||
btn.disabled = false;
|
||||
}
|
||||
}
|
||||
|
||||
// event handler for start/stop button
|
||||
function onclick_startstop(id) {
|
||||
// do start/stop
|
||||
var btnXHR = new XHR();
|
||||
btnXHR.get('<%=luci.dispatcher.build_url("admin", "services", "privoxy", "startstop")%>', null,
|
||||
function(x) { _data2elements(x); }
|
||||
);
|
||||
}
|
||||
|
||||
XHR.poll(5, '<%=luci.dispatcher.build_url("admin", "services", "privoxy", "status")%>', null,
|
||||
function(x, data) { _data2elements(x); }
|
||||
);
|
||||
|
||||
//]]></script>
|
||||
|
||||
<%+cbi/valueheader%>
|
||||
|
||||
<% if self:cfgvalue(section) ~= false then
|
||||
-- We need to garantie that function cfgvalue run first to set missing parameters
|
||||
%>
|
||||
<!-- style="font-size: 100%;" needed for openwrt theme to fix font size -->
|
||||
<!-- type="button" onclick="..." enable standard onclick functionalty -->
|
||||
<input class="cbi-button cbi-input-<%=self.inputstyle or "button" %>" style="font-size: 100%;" type="button" onclick="onclick_startstop(this.id)"
|
||||
<%=
|
||||
attr("name", section) .. attr("id", cbid) .. attr("value", self.inputtitle) .. ifattr(self.disabled, "disabled")
|
||||
%> />
|
||||
<% end %>
|
||||
|
||||
<%+cbi/valuefooter%>
|
||||
<!-- ++ END ++ Privoxy ++ detail_startstop.htm ++ -->
|
12
net/privoxy-luci/files/root/etc/uci-defaults/luci-privoxy
Executable file
12
net/privoxy-luci/files/root/etc/uci-defaults/luci-privoxy
Executable file
|
@ -0,0 +1,12 @@
|
|||
#!/bin/sh
|
||||
|
||||
# no longer needed for "Save and Apply" to restart privoxy
|
||||
# luci-app-privoxy calls /etc/init.d/preivoxy reload
|
||||
uci -q batch <<-EOF >/dev/null
|
||||
delete ucitrack.@privoxy[-1]
|
||||
commit ucitrack
|
||||
EOF
|
||||
|
||||
rm -f /tmp/luci-indexcache
|
||||
|
||||
exit 0
|
490
net/privoxy-luci/po/de/privoxy.po
Normal file
490
net/privoxy-luci/po/de/privoxy.po
Normal file
|
@ -0,0 +1,490 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: luci-app-privoxy\n"
|
||||
"POT-Creation-Date: 2014-12-13 22:34:49\n"
|
||||
"PO-Revision-Date: 2014-12-20 14:57+0100\n"
|
||||
"Last-Translator: Christian Schoenebeck <christian.schoenebeck@gmail.com>\n"
|
||||
"Language-Team: Christian Schoenebeck <christian.schoenebeck@gmail.com>\n"
|
||||
"Language: de\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: Poedit 1.5.4\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"X-Poedit-SourceCharset: UTF-8\n"
|
||||
|
||||
msgid ""
|
||||
"A URL to be displayed in the error page that users will see if access to an "
|
||||
"untrusted page is denied."
|
||||
msgstr ""
|
||||
"Ein Link auf der Fehlerseite, der Benutzern angezeigt wird, wenn der Zugang "
|
||||
"zu einer nicht vertrauenswürdigen Seite verweigert wird."
|
||||
|
||||
msgid ""
|
||||
"A URL to documentation about the local Privoxy setup, configuration or "
|
||||
"policies."
|
||||
msgstr ""
|
||||
"Ein Link zur Dokumentation über die lokale Privoxy Konfiguration und die "
|
||||
"Sicherheitseinstellungen."
|
||||
|
||||
msgid "Access Control"
|
||||
msgstr "Zugriffskontrolle"
|
||||
|
||||
msgid "Actions that are applied to all sites and maybe overruled later on."
|
||||
msgstr ""
|
||||
"Aktionen, die für alle Websites angewendet werden, und vielleicht später "
|
||||
"überschrieben werden."
|
||||
|
||||
msgid "An alternative directory where the templates are loaded from."
|
||||
msgstr "Eine alternatives Verzeichnis, aus dem die Vorlagen geladen werden."
|
||||
|
||||
msgid "An email address to reach the Privoxy administrator."
|
||||
msgstr "Eine E-Mail-Adresse, um die Privoxy-Administrator zu erreichen."
|
||||
|
||||
msgid ""
|
||||
"Assumed server-side keep-alive timeout (in seconds) if not specified by the "
|
||||
"server."
|
||||
msgstr ""
|
||||
"Angenommenes serverseitiges Keep-Alive-Timeout (in Sekunden), falls nicht "
|
||||
"vom Server festgelegt."
|
||||
|
||||
msgid "Build"
|
||||
msgstr "Build"
|
||||
|
||||
msgid "CGI user interface"
|
||||
msgstr "Protokolliert die CGI Benutzer Schnittstelle"
|
||||
|
||||
msgid "Common Log Format"
|
||||
msgstr "Gemeinsames Protokollformat"
|
||||
|
||||
msgid ""
|
||||
"Configure here the routing of HTTP requests through a chain of multiple "
|
||||
"proxies. Note that parent proxies can severely decrease your privacy level. "
|
||||
"Also specified here are SOCKS proxies."
|
||||
msgstr ""
|
||||
"Konfigurieren Sie hier das Weiterleiten von HTTP-Anforderungen durch eine "
|
||||
"Kette von mehreren Proxies. Beachten Sie, dass übergeordnete Proxies Ihre "
|
||||
"Privatsphäre stark verringern können. Auch hier angegeben werden SOCKS-"
|
||||
"Proxies."
|
||||
|
||||
msgid "Debug GIF de-animation"
|
||||
msgstr "Protokolliert die GIF de-animation"
|
||||
|
||||
msgid "Debug force feature"
|
||||
msgstr "Protokolliert die 'Force' Eigenschaft"
|
||||
|
||||
msgid "Debug redirects"
|
||||
msgstr "Protokolliert Weiterleitungen"
|
||||
|
||||
msgid "Debug regular expression filters"
|
||||
msgstr "Protokolliert Filter für reguläre Ausdrücke"
|
||||
|
||||
msgid "Directory does not exist!"
|
||||
msgstr "Verzeichnis existiert nicht!"
|
||||
|
||||
msgid "Disabled == Transparent Proxy Mode"
|
||||
msgstr "Deaktiviert == Transparent Proxy Betrieb"
|
||||
|
||||
msgid "Enable proxy authentication forwarding"
|
||||
msgstr "Aktivieren die Weiterleitung von Proxy-Authentifizierungen"
|
||||
|
||||
msgid ""
|
||||
"Enable/Disable autostart of Privoxy on system startup and interface events"
|
||||
msgstr ""
|
||||
"Aktivieren / Deaktivieren des Autostart von Privoxy beim Systemstart und "
|
||||
"Schnittstellenereignissen."
|
||||
|
||||
msgid "Enable/Disable filtering when Privoxy starts."
|
||||
msgstr "Aktivieren / Deaktivieren der Filterung, wenn Privoxy startet."
|
||||
|
||||
msgid ""
|
||||
"Enabling this option is NOT recommended if there is no parent proxy that "
|
||||
"requires authentication!"
|
||||
msgstr ""
|
||||
"Die Aktivierung dieser Option wird NICHT empfohlen, wenn es keinen "
|
||||
"übergeordneten Proxy gibt, der eine Authentifizierung erfordert!"
|
||||
|
||||
msgid "File '%s' not found inside Configuration Directory"
|
||||
msgstr "Datei '%s' nicht im Konfigurationsverzeichnis gefunden!"
|
||||
|
||||
msgid "File not found or empty"
|
||||
msgstr "Datei nicht gefunden oder leer"
|
||||
|
||||
msgid "Files and Directories"
|
||||
msgstr "Dateien und Verzeichnisse"
|
||||
|
||||
msgid "For help use link at the relevant option"
|
||||
msgstr ""
|
||||
"Für Hilfe zur Verwendung, benutzen Sie die Verknüpfung der betreffenden "
|
||||
"Option."
|
||||
|
||||
msgid "Forwarding"
|
||||
msgstr "Weiterleitung"
|
||||
|
||||
msgid ""
|
||||
"If enabled, Privoxy hides the 'go there anyway' link. The user obviously "
|
||||
"should not be able to bypass any blocks."
|
||||
msgstr ""
|
||||
"Wenn aktiviert, verbirgt Privoxy den Link 'go there anyway'. Normalerweise "
|
||||
"sollten Benutzer nicht in der Lage sein, Blockierungen zu umgehen."
|
||||
|
||||
msgid ""
|
||||
"If you intend to operate Privoxy for more users than just yourself, it might "
|
||||
"be a good idea to let them know how to reach you, what you block and why you "
|
||||
"do that, your policies, etc."
|
||||
msgstr ""
|
||||
"Wenn Sie beabsichtigen, Privoxy für mehr Nutzer als nur sich selbst zu "
|
||||
"betreiben, ist es eine gute Idee, sie wissen zu lassen, wie sie Sie "
|
||||
"erreichen können, was Sie blockieren und warum Sie das tun, etc."
|
||||
|
||||
msgid "Invalid email address"
|
||||
msgstr "Ungültige Email Adresse"
|
||||
|
||||
msgid "It is NOT recommended for the casual user."
|
||||
msgstr "Es wird NICHT für den gelegentlichen Anwender empfohlen."
|
||||
|
||||
msgid "Local Set-up"
|
||||
msgstr "Lokale Einstellungen"
|
||||
|
||||
msgid "Location of the Privoxy User Manual."
|
||||
msgstr "Ort des Privoxy Benutzer Handbuches"
|
||||
|
||||
msgid "Log File Viewer"
|
||||
msgstr "Protokolldatei"
|
||||
|
||||
msgid "Log all data read from the network"
|
||||
msgstr "Protokolliert alle Daten, die vom Netzwerk gelesen werden."
|
||||
|
||||
msgid "Log all data written to the network"
|
||||
msgstr "Protokolliert alle Daten, die auf das Netzwerk geschrieben werden."
|
||||
|
||||
msgid "Log the applying actions"
|
||||
msgstr "Protokiolliert angewendete Aktionen"
|
||||
|
||||
msgid ""
|
||||
"Log the destination for each request Privoxy let through. See also 'Debug "
|
||||
"1024'."
|
||||
msgstr ""
|
||||
"Protokolliert das Ziel für jede Anforderung die Privoxy durchlässt. Siehe "
|
||||
"auch 'Debug 1024'."
|
||||
|
||||
msgid ""
|
||||
"Log the destination for requests Privoxy didn't let through, and the reason "
|
||||
"why."
|
||||
msgstr ""
|
||||
"Protokolliert das Ziel für Anfragen die Privoxy nicht durchgelassen hat, und "
|
||||
"den Grund dafür."
|
||||
|
||||
msgid "Main actions file"
|
||||
msgstr "Wichtige Aktionen-Datei"
|
||||
|
||||
msgid "Mandatory Input: No Data given!"
|
||||
msgstr "Pflichtfeld: Keine Daten angegeben!"
|
||||
|
||||
msgid "Mandatory Input: No Directory given!"
|
||||
msgstr "Pflichtfeld: Kein Verzeichnis angegeben!"
|
||||
|
||||
msgid "Mandatory Input: No File given!"
|
||||
msgstr "Pflichtfeld: Keine Datei angegeben!"
|
||||
|
||||
msgid "Mandatory Input: No Port given!"
|
||||
msgstr "Pflichtfeld: Kein Port angegeben!"
|
||||
|
||||
msgid "Mandatory Input: No files given!"
|
||||
msgstr "Pflichtfeld: Keine Dateien angegeben!"
|
||||
|
||||
msgid "Mandatory Input: No valid IPv4 address or host given!"
|
||||
msgstr ""
|
||||
"Pflichtfeld: Keine gültige IPv4 Adresse oder gültiger Hostname angegeben!"
|
||||
|
||||
msgid "Mandatory Input: No valid IPv6 address given!"
|
||||
msgstr "Pflichtfeld: Keine gültige IPv6 Adresse angegeben!"
|
||||
|
||||
msgid "Mandatory Input: No valid Port given!"
|
||||
msgstr "Pflichtfeld: Keine gültige Port Nummer angegeben!"
|
||||
|
||||
msgid "Maximum number of client connections that will be served."
|
||||
msgstr "Maximale Anzahl von Client-Verbindungen."
|
||||
|
||||
msgid "Maximum size (in KB) of the buffer for content filtering."
|
||||
msgstr "Maximale Größe (in KB) des Puffers für die Inhaltsfilterung."
|
||||
|
||||
msgid "Miscellaneous"
|
||||
msgstr "Verschiedenes"
|
||||
|
||||
msgid "No trailing '/', please."
|
||||
msgstr "Bitte kein '/' am Ende."
|
||||
|
||||
msgid "Non-fatal errors - *we highly recommended enabling this*"
|
||||
msgstr ""
|
||||
"Protokolliert nicht schwerwiegende Fehler - * Es wird dringend empfohlen, "
|
||||
"dieses zu aktivieren *"
|
||||
|
||||
msgid ""
|
||||
"Number of seconds after which a socket times out if no data is received."
|
||||
msgstr ""
|
||||
"Anzahl der Sekunden, nach der eine Socket Timeout erfolgt, wenn keine Daten "
|
||||
"empfangen werden."
|
||||
|
||||
msgid ""
|
||||
"Number of seconds after which an open connection will no longer be reused."
|
||||
msgstr ""
|
||||
"Anzahl von Sekunden, nach der eine offene Verbindung nicht mehr "
|
||||
"wiederverwendet wird."
|
||||
|
||||
msgid "Please press [Read] button"
|
||||
msgstr "Bitte Protokolldatei einlesen"
|
||||
|
||||
msgid "Please read Privoxy manual for details!"
|
||||
msgstr "Bitte lesen Sie das Privoxy Handbuch für Details!"
|
||||
|
||||
msgid "Please update to the current version!"
|
||||
msgstr "Aktualisieren Sie bitte auf die aktuelle Version!"
|
||||
|
||||
msgid "Privoxy WEB proxy"
|
||||
msgstr "Privoxy WEB proxy"
|
||||
|
||||
msgid ""
|
||||
"Privoxy can (and normally does) use a number of other files for additional "
|
||||
"configuration, help and logging. This section of the configuration file "
|
||||
"tells Privoxy where to find those other files."
|
||||
msgstr ""
|
||||
"Privoxy verwendet (was in der Regel der Fall ist), eine Reihe von anderen "
|
||||
"Dateien für eine zusätzliche Konfiguration, Hilfe und Protokollierung. "
|
||||
"Dieser Abschnitt der Konfigurationsdatei definiert, wo diese Dateien zu "
|
||||
"finden sind."
|
||||
|
||||
msgid ""
|
||||
"Privoxy is a non-caching web proxy with advanced filtering capabilities for "
|
||||
"enhancing privacy, modifying web page data and HTTP headers, controlling "
|
||||
"access, and removing ads and other obnoxious Internet junk."
|
||||
msgstr ""
|
||||
"Privoxy ist ein non-caching Web-Proxy mit erweiterten Filterfunktion zur "
|
||||
"Verbesserung der Privatsphäre. Er modifiziert Webseitendaten und HTTP-"
|
||||
"Header, kontrolliert den Zugang und das Entfernen von Anzeigen und anderem "
|
||||
"abscheulichen Internet Schrott."
|
||||
|
||||
msgid "Read / Reread log file"
|
||||
msgstr "Protokolldatei (neu) lesen"
|
||||
|
||||
msgid "Show I/O status"
|
||||
msgstr "Protokolliert den I/O Status"
|
||||
|
||||
msgid "Show each connection status"
|
||||
msgstr "Protokolliert jeden Verbindungsstatus"
|
||||
|
||||
msgid "Show header parsing"
|
||||
msgstr "Protokolliert das 'Header parsing'"
|
||||
|
||||
msgid "Software update required"
|
||||
msgstr "Softwareaktualisierung nötig"
|
||||
|
||||
msgid "Start / Stop"
|
||||
msgstr "Start / Stopp"
|
||||
|
||||
msgid "Start/Stop Privoxy WEB Proxy"
|
||||
msgstr "Start/Stopp Privoxy WEB Proxy"
|
||||
|
||||
msgid "Startup banner and warnings."
|
||||
msgstr "Protokolliert Start-Meldungen und Warnungen"
|
||||
|
||||
msgid "Syntax:"
|
||||
msgstr "Syntax:"
|
||||
|
||||
msgid "Syntax: Client header names delimited by spaces."
|
||||
msgstr "Syntax: Client header Namen getrennt durch Leerzeichen."
|
||||
|
||||
msgid "Syntax: target_pattern http_parent[:port]"
|
||||
msgstr "Syntax: target_pattern http_parent[:port]"
|
||||
|
||||
msgid "Syntax: target_pattern socks_proxy[:port] http_parent[:port]"
|
||||
msgstr "Syntax: target_pattern socks_proxy[:port] http_parent[:port]"
|
||||
|
||||
msgid ""
|
||||
"The actions file(s) to use. Multiple actionsfile lines are permitted, and "
|
||||
"are in fact recommended!"
|
||||
msgstr ""
|
||||
"Die zu verwendenden Aktion-Datei(en). Mehrere Dateien sind gestattet und "
|
||||
"empfohlen!"
|
||||
|
||||
msgid ""
|
||||
"The address and TCP port on which Privoxy will listen for client requests."
|
||||
msgstr ""
|
||||
"Die Adresse und das TCP-Port, auf dem Privoxy auf Client-Anforderungen "
|
||||
"wartet."
|
||||
|
||||
msgid ""
|
||||
"The compression level that is passed to the zlib library when compressing "
|
||||
"buffered content."
|
||||
msgstr ""
|
||||
"Die Komprimierungsstufe (0-9), die der zlib-Bibliothek beim Komprimieren "
|
||||
"gepufferten Inhaltes übergeben wird."
|
||||
|
||||
msgid ""
|
||||
"The currently installed 'privoxy' package is not supported by LuCI "
|
||||
"application."
|
||||
msgstr ""
|
||||
"Das aktuell installierte \"privoxy' Paket wird von dieser LuCI Anwendung "
|
||||
"NICHT unterstützt."
|
||||
|
||||
msgid ""
|
||||
"The directory where all logging takes place (i.e. where the logfile is "
|
||||
"located)."
|
||||
msgstr "Das Verzeichnis in dem die Protokolldatei gespeichert wird."
|
||||
|
||||
msgid "The directory where the other configuration files are located."
|
||||
msgstr "Das Verzeichnis in dem weitere Konfigurationsdateien gespeichert sind."
|
||||
|
||||
msgid ""
|
||||
"The filter files contain content modification rules that use regular "
|
||||
"expressions."
|
||||
msgstr ""
|
||||
"Die Filterdateien enthalten Änderung des Inhalts, die reguläre Ausdrücke "
|
||||
"als Regeln verwenden."
|
||||
|
||||
msgid "The hostname shown on the CGI pages."
|
||||
msgstr "Der Hostname der auf CGI-Seiten angezeigt wird."
|
||||
|
||||
msgid "The log file to use. File name, relative to log directory."
|
||||
msgstr ""
|
||||
"Zu verwendende Protokolldatei. Dateiname relativ zum Protokoll-Verzeichnis."
|
||||
|
||||
msgid "The order in which client headers are sorted before forwarding them."
|
||||
msgstr ""
|
||||
"Die Reihenfolge, in der Client-Header sortiert werden, bevor sie "
|
||||
"weitergeleitet werden."
|
||||
|
||||
msgid ""
|
||||
"The status code Privoxy returns for pages blocked with +handle-as-empty-"
|
||||
"document."
|
||||
msgstr ""
|
||||
"Ob Statuscode 200(OK) oder 403(forbidden) für Seiten gemeldet wird, die "
|
||||
"durch den Filter 'handle-as-empty-document' blockiert werden."
|
||||
|
||||
msgid ""
|
||||
"The trust mechanism is an experimental feature for building white-lists and "
|
||||
"should be used with care."
|
||||
msgstr ""
|
||||
"Der Trust-Mechanismus ist eine experimentelle Funktion für den Aufbau von "
|
||||
"White-Listen und sollte mit Vorsicht verwendet werden."
|
||||
|
||||
msgid ""
|
||||
"The value of this option only matters if the experimental trust mechanism "
|
||||
"has been activated."
|
||||
msgstr ""
|
||||
"Der Wert dieser Option ist nur wirksam, wenn der experimentelle Trust-"
|
||||
"Mechanismus aktiviert wurde."
|
||||
|
||||
msgid ""
|
||||
"This option is only there for debugging purposes. It will drastically reduce "
|
||||
"performance."
|
||||
msgstr ""
|
||||
"Diese Option ist ausschließlich zur Fehlersuche. Es wird drastisch die "
|
||||
"Leistung beeinträchtigt."
|
||||
|
||||
msgid ""
|
||||
"This option will be removed in future releases as it has been obsoleted by "
|
||||
"the more general header taggers."
|
||||
msgstr "Diese Option wird in zukünftigen Versionen entfernt werden."
|
||||
|
||||
msgid ""
|
||||
"This tab controls the security-relevant aspects of Privoxy's configuration."
|
||||
msgstr ""
|
||||
"Diese Registerkarte steuert die sicherheitsrelevanten Aspekte der Privoxy "
|
||||
"Konfiguration."
|
||||
|
||||
msgid ""
|
||||
"Through which SOCKS proxy (and optionally to which parent HTTP proxy) "
|
||||
"specific requests should be routed."
|
||||
msgstr ""
|
||||
"An welchen SOCKS-Proxy (und gegebenenfalls an welchen übergeordneten HTTP-"
|
||||
"Proxy) spezifischen Anforderungen weitergeleitet werden."
|
||||
|
||||
msgid "To which parent HTTP proxy specific requests should be routed."
|
||||
msgstr ""
|
||||
"An welchen übergeordneten HTTP-Proxy spezifischen Anforderungen "
|
||||
"weitergeleitet werden."
|
||||
|
||||
msgid "User customizations"
|
||||
msgstr "Benutzerdefinierte Anpassungen"
|
||||
|
||||
msgid "Value is not a number"
|
||||
msgstr "Eingabe ist keine Zahl"
|
||||
|
||||
msgid "Value not between 0 and 9"
|
||||
msgstr "Wert nicht zwischen 0 und 9"
|
||||
|
||||
msgid "Value not between 1 and 4096"
|
||||
msgstr "Wert nicht zwischen 1 und 4096"
|
||||
|
||||
msgid "Value not greater 0 or empty"
|
||||
msgstr "Wert nicht größer 0 oder leer"
|
||||
|
||||
msgid "Value range 1 to 4096, no entry defaults to 4096"
|
||||
msgstr "Wertebereich: 1 bis 4096; Keine Angabe setzt 4096."
|
||||
|
||||
msgid "Version Information"
|
||||
msgstr "Versionsinformation"
|
||||
|
||||
msgid "Whether intercepted requests should be treated as valid."
|
||||
msgstr "Ob abgefangen Anfragen als gültig behandelt werden."
|
||||
|
||||
msgid ""
|
||||
"Whether or not Privoxy recognizes special HTTP headers to change its "
|
||||
"behaviour."
|
||||
msgstr ""
|
||||
"Ob Privoxy erkannte spezielle HTTP-Header in ihrer Bedeutung ändert oder "
|
||||
"nicht."
|
||||
|
||||
msgid "Whether or not buffered content is compressed before delivery."
|
||||
msgstr ""
|
||||
"Ob gepufferte Inhalte vor der Weiterleitung komprimiert werden oder nicht."
|
||||
|
||||
msgid ""
|
||||
"Whether or not outgoing connections that have been kept alive should be "
|
||||
"shared between different incoming connections."
|
||||
msgstr ""
|
||||
"Ob ausgehende Verbindungen, die am Leben gehalten werden, für verschiedenen "
|
||||
"eingehenden Verbindungen gemeinsam genutzt werden oder nicht."
|
||||
|
||||
msgid "Whether or not pipelined requests should be served."
|
||||
msgstr "Ob Pipeline-Anfragen bedient werden oder nicht."
|
||||
|
||||
msgid "Whether or not proxy authentication through Privoxy should work."
|
||||
msgstr ""
|
||||
"Ob Proxy-Authentifizierungen durch Privoxy weitergeleitet werden oder nicht."
|
||||
|
||||
msgid "Whether or not the web-based actions file editor may be used."
|
||||
msgstr "De-/Aktiviert den webbasierte Action-Datei Editor."
|
||||
|
||||
msgid "Whether or not the web-based toggle feature may be used."
|
||||
msgstr "De-Aktiviert die webbasierte Umschaltfunktion."
|
||||
|
||||
msgid "Whether requests to Privoxy's CGI pages can be blocked or redirected."
|
||||
msgstr ""
|
||||
"Ob Anfragen an Privoxy CGI-Seiten gesperrt oder umgeleitet werden können "
|
||||
"oder nicht."
|
||||
|
||||
msgid ""
|
||||
"Whether the CGI interface should stay compatible with broken HTTP clients."
|
||||
msgstr ""
|
||||
"Ob die CGI-Schnittstelle mit broken HTTP-Clients kompatibel bleibt oder "
|
||||
"nicht."
|
||||
|
||||
msgid "Whether to run only one server thread."
|
||||
msgstr "Ob nur ein Server-Thread ausgeführt wird."
|
||||
|
||||
msgid "Who can access what."
|
||||
msgstr "Wer kann auf Was zugreifen."
|
||||
|
||||
msgid "installed"
|
||||
msgstr "installiert"
|
||||
|
||||
msgid "or greater"
|
||||
msgstr "oder groeßer"
|
||||
|
||||
msgid "or higher"
|
||||
msgstr "oder höher"
|
||||
|
||||
msgid "required"
|
||||
msgstr "benötigt"
|
399
net/privoxy-luci/po/templates/privoxy.pot
Normal file
399
net/privoxy-luci/po/templates/privoxy.pot
Normal file
|
@ -0,0 +1,399 @@
|
|||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=UTF-8"
|
||||
|
||||
msgid ""
|
||||
"A URL to be displayed in the error page that users will see if access to an "
|
||||
"untrusted page is denied."
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"A URL to documentation about the local Privoxy setup, configuration or "
|
||||
"policies."
|
||||
msgstr ""
|
||||
|
||||
msgid "Access Control"
|
||||
msgstr ""
|
||||
|
||||
msgid "Actions that are applied to all sites and maybe overruled later on."
|
||||
msgstr ""
|
||||
|
||||
msgid "An alternative directory where the templates are loaded from."
|
||||
msgstr ""
|
||||
|
||||
msgid "An email address to reach the Privoxy administrator."
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Assumed server-side keep-alive timeout (in seconds) if not specified by the "
|
||||
"server."
|
||||
msgstr ""
|
||||
|
||||
msgid "Build"
|
||||
msgstr ""
|
||||
|
||||
msgid "CGI user interface"
|
||||
msgstr ""
|
||||
|
||||
msgid "Common Log Format"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Configure here the routing of HTTP requests through a chain of multiple "
|
||||
"proxies. Note that parent proxies can severely decrease your privacy level. "
|
||||
"Also specified here are SOCKS proxies."
|
||||
msgstr ""
|
||||
|
||||
msgid "Debug GIF de-animation"
|
||||
msgstr ""
|
||||
|
||||
msgid "Debug force feature"
|
||||
msgstr ""
|
||||
|
||||
msgid "Debug redirects"
|
||||
msgstr ""
|
||||
|
||||
msgid "Debug regular expression filters"
|
||||
msgstr ""
|
||||
|
||||
msgid "Directory does not exist!"
|
||||
msgstr ""
|
||||
|
||||
msgid "Disabled == Transparent Proxy Mode"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable proxy authentication forwarding"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Enable/Disable autostart of Privoxy on system startup and interface events"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable/Disable filtering when Privoxy starts."
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Enabling this option is NOT recommended if there is no parent proxy that "
|
||||
"requires authentication!"
|
||||
msgstr ""
|
||||
|
||||
msgid "File '%s' not found inside Configuration Directory"
|
||||
msgstr ""
|
||||
|
||||
msgid "File not found or empty"
|
||||
msgstr ""
|
||||
|
||||
msgid "Files and Directories"
|
||||
msgstr ""
|
||||
|
||||
msgid "For help use link at the relevant option"
|
||||
msgstr ""
|
||||
|
||||
msgid "Forwarding"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"If enabled, Privoxy hides the 'go there anyway' link. The user obviously "
|
||||
"should not be able to bypass any blocks."
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"If you intend to operate Privoxy for more users than just yourself, it might "
|
||||
"be a good idea to let them know how to reach you, what you block and why you "
|
||||
"do that, your policies, etc."
|
||||
msgstr ""
|
||||
|
||||
msgid "Invalid email address"
|
||||
msgstr ""
|
||||
|
||||
msgid "It is NOT recommended for the casual user."
|
||||
msgstr ""
|
||||
|
||||
msgid "Local Set-up"
|
||||
msgstr ""
|
||||
|
||||
msgid "Location of the Privoxy User Manual."
|
||||
msgstr ""
|
||||
|
||||
msgid "Log File Viewer"
|
||||
msgstr ""
|
||||
|
||||
msgid "Log all data read from the network"
|
||||
msgstr ""
|
||||
|
||||
msgid "Log all data written to the network"
|
||||
msgstr ""
|
||||
|
||||
msgid "Log the applying actions"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Log the destination for each request Privoxy let through. See also 'Debug "
|
||||
"1024'."
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Log the destination for requests Privoxy didn't let through, and the reason "
|
||||
"why."
|
||||
msgstr ""
|
||||
|
||||
msgid "Main actions file"
|
||||
msgstr ""
|
||||
|
||||
msgid "Mandatory Input: No Data given!"
|
||||
msgstr ""
|
||||
|
||||
msgid "Mandatory Input: No Directory given!"
|
||||
msgstr ""
|
||||
|
||||
msgid "Mandatory Input: No File given!"
|
||||
msgstr ""
|
||||
|
||||
msgid "Mandatory Input: No Port given!"
|
||||
msgstr ""
|
||||
|
||||
msgid "Mandatory Input: No files given!"
|
||||
msgstr ""
|
||||
|
||||
msgid "Mandatory Input: No valid IPv4 address or host given!"
|
||||
msgstr ""
|
||||
|
||||
msgid "Mandatory Input: No valid IPv6 address given!"
|
||||
msgstr ""
|
||||
|
||||
msgid "Mandatory Input: No valid Port given!"
|
||||
msgstr ""
|
||||
|
||||
msgid "Maximum number of client connections that will be served."
|
||||
msgstr ""
|
||||
|
||||
msgid "Maximum size (in KB) of the buffer for content filtering."
|
||||
msgstr ""
|
||||
|
||||
msgid "Miscellaneous"
|
||||
msgstr ""
|
||||
|
||||
msgid "No trailing '/', please."
|
||||
msgstr ""
|
||||
|
||||
msgid "Non-fatal errors - *we highly recommended enabling this*"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Number of seconds after which a socket times out if no data is received."
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Number of seconds after which an open connection will no longer be reused."
|
||||
msgstr ""
|
||||
|
||||
msgid "Please press [Read] button"
|
||||
msgstr ""
|
||||
|
||||
msgid "Please read Privoxy manual for details!"
|
||||
msgstr ""
|
||||
|
||||
msgid "Please update to the current version!"
|
||||
msgstr ""
|
||||
|
||||
msgid "Privoxy WEB proxy"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Privoxy can (and normally does) use a number of other files for additional "
|
||||
"configuration, help and logging. This section of the configuration file "
|
||||
"tells Privoxy where to find those other files."
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Privoxy is a non-caching web proxy with advanced filtering capabilities for "
|
||||
"enhancing privacy, modifying web page data and HTTP headers, controlling "
|
||||
"access, and removing ads and other obnoxious Internet junk."
|
||||
msgstr ""
|
||||
|
||||
msgid "Read / Reread log file"
|
||||
msgstr ""
|
||||
|
||||
msgid "Show I/O status"
|
||||
msgstr ""
|
||||
|
||||
msgid "Show each connection status"
|
||||
msgstr ""
|
||||
|
||||
msgid "Show header parsing"
|
||||
msgstr ""
|
||||
|
||||
msgid "Software update required"
|
||||
msgstr ""
|
||||
|
||||
msgid "Start / Stop"
|
||||
msgstr ""
|
||||
|
||||
msgid "Start/Stop Privoxy WEB Proxy"
|
||||
msgstr ""
|
||||
|
||||
msgid "Startup banner and warnings."
|
||||
msgstr ""
|
||||
|
||||
msgid "Syntax:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Syntax: Client header names delimited by spaces."
|
||||
msgstr ""
|
||||
|
||||
msgid "Syntax: target_pattern http_parent[:port]"
|
||||
msgstr ""
|
||||
|
||||
msgid "Syntax: target_pattern socks_proxy[:port] http_parent[:port]"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"The actions file(s) to use. Multiple actionsfile lines are permitted, and "
|
||||
"are in fact recommended!"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"The address and TCP port on which Privoxy will listen for client requests."
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"The compression level that is passed to the zlib library when compressing "
|
||||
"buffered content."
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"The currently installed 'privoxy' package is not supported by LuCI "
|
||||
"application."
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"The directory where all logging takes place (i.e. where the logfile is "
|
||||
"located)."
|
||||
msgstr ""
|
||||
|
||||
msgid "The directory where the other configuration files are located."
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"The filter files contain content modification rules that use regular "
|
||||
"expressions."
|
||||
msgstr ""
|
||||
|
||||
msgid "The hostname shown on the CGI pages."
|
||||
msgstr ""
|
||||
|
||||
msgid "The log file to use. File name, relative to log directory."
|
||||
msgstr ""
|
||||
|
||||
msgid "The order in which client headers are sorted before forwarding them."
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"The status code Privoxy returns for pages blocked with +handle-as-empty-"
|
||||
"document."
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"The trust mechanism is an experimental feature for building white-lists and "
|
||||
"should be used with care."
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"The value of this option only matters if the experimental trust mechanism "
|
||||
"has been activated."
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"This option is only there for debugging purposes. It will drastically reduce "
|
||||
"performance."
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"This option will be removed in future releases as it has been obsoleted by "
|
||||
"the more general header taggers."
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"This tab controls the security-relevant aspects of Privoxy's configuration."
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Through which SOCKS proxy (and optionally to which parent HTTP proxy) "
|
||||
"specific requests should be routed."
|
||||
msgstr ""
|
||||
|
||||
msgid "To which parent HTTP proxy specific requests should be routed."
|
||||
msgstr ""
|
||||
|
||||
msgid "User customizations"
|
||||
msgstr ""
|
||||
|
||||
msgid "Value is not a number"
|
||||
msgstr ""
|
||||
|
||||
msgid "Value not between 0 and 9"
|
||||
msgstr ""
|
||||
|
||||
msgid "Value not between 1 and 4096"
|
||||
msgstr ""
|
||||
|
||||
msgid "Value not greater 0 or empty"
|
||||
msgstr ""
|
||||
|
||||
msgid "Value range 1 to 4096, no entry defaults to 4096"
|
||||
msgstr ""
|
||||
|
||||
msgid "Version Information"
|
||||
msgstr ""
|
||||
|
||||
msgid "Whether intercepted requests should be treated as valid."
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Whether or not Privoxy recognizes special HTTP headers to change its "
|
||||
"behaviour."
|
||||
msgstr ""
|
||||
|
||||
msgid "Whether or not buffered content is compressed before delivery."
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Whether or not outgoing connections that have been kept alive should be "
|
||||
"shared between different incoming connections."
|
||||
msgstr ""
|
||||
|
||||
msgid "Whether or not pipelined requests should be served."
|
||||
msgstr ""
|
||||
|
||||
msgid "Whether or not proxy authentication through Privoxy should work."
|
||||
msgstr ""
|
||||
|
||||
msgid "Whether or not the web-based actions file editor may be used."
|
||||
msgstr ""
|
||||
|
||||
msgid "Whether or not the web-based toggle feature may be used."
|
||||
msgstr ""
|
||||
|
||||
msgid "Whether requests to Privoxy's CGI pages can be blocked or redirected."
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Whether the CGI interface should stay compatible with broken HTTP clients."
|
||||
msgstr ""
|
||||
|
||||
msgid "Whether to run only one server thread."
|
||||
msgstr ""
|
||||
|
||||
msgid "Who can access what."
|
||||
msgstr ""
|
||||
|
||||
msgid "installed"
|
||||
msgstr ""
|
||||
|
||||
msgid "or greater"
|
||||
msgstr ""
|
||||
|
||||
msgid "or higher"
|
||||
msgstr ""
|
||||
|
||||
msgid "required"
|
||||
msgstr ""
|
Loading…
Reference in a new issue