From a9faabd203906c615d9dbb5d8b90f5779ce61f4a Mon Sep 17 00:00:00 2001 From: Thomas Reim Date: Thu, 1 Apr 2021 05:19:56 +0200 Subject: [PATCH 01/14] OpenSSL/libssl does only allow to disable TLS protocols Cherokee Admin suggests system administrators that they have to enable wanted SSL/TLS protocols for traffic encryption. In general, OpenSSL accepts all SSL/TLS protocols requested by clients that are supported if the provided cipher set and certificates fit. - Add a new checkbox widget type CheckCfgTextInv with following behaviour: ------------------------------------------ |Checkbox Status|Configuration File Value| ------------------------------------------ | Checked | 0 | ------------------------------------------ | Not Checked | 1 | ------------------------------------------ - Update Cherokee Admin Advanced page to use the new checkbox - Add a new style for Notice widgets: Slim boxes with 50% width compared to normal boxes Fixes: https://github.com/cherokee/webserver/issues/1254 Signed-off-by: Thomas Reim --- admin/CTK/CTK/Checkbox.py | 46 +++++++++++++++++++++++++++++--- admin/CTK/static/css/CTK.css | 24 +++++++++++++++++ admin/CTK/static/js/Submitter.js | 6 ++++- admin/PageAdvanced.py | 22 ++++++++------- 4 files changed, 84 insertions(+), 14 deletions(-) diff --git a/admin/CTK/CTK/Checkbox.py b/admin/CTK/CTK/Checkbox.py index 058b97504..ea7438946 100644 --- a/admin/CTK/CTK/Checkbox.py +++ b/admin/CTK/CTK/Checkbox.py @@ -88,6 +88,8 @@ class CheckCfg (Checkbox): checkbox with the value of the configuration tree given by key argument if it exists. It accepts properties to pass to the base Checkbox object. + As an option the checkbox setting can be inverted to show checked + for False instead of True. Arguments: key: key in the configuration tree. @@ -103,12 +105,16 @@ def __init__ (self, key, default, props=None): if not props: props = {} + self.invert = False + if props.has_key('mode') and props['mode'] == 'inverse': + self.invert = True + # Read the key value val = cfg.get_val(key) - if not val: - props['checked'] = "01"[bool(int(default))] + if not val or (props.has_key('disabled') and int(props['disabled'])): + props['checked'] = '01'[bool(int(default))] elif val.isdigit(): - props['checked'] = "01"[bool(int(val))] + props['checked'] = ['01', '10'][self.invert][bool(int(val))] else: assert False, "Could not handle value: %s"%(val) @@ -159,6 +165,40 @@ def __init__ (self, key, default, text='Enabled', props=None): assert type(props) in (dict, type(None)) CheckCfg.__init__ (self, key, default, props) + if not props: + props = {} + self.text = text + self.disabled = False + if props.has_key('disabled') and int(props['disabled']): + self.disabled = True + + def Render (self): + render = CheckCfg.Render (self) + render.html = '
%s
%s
' %(self.id, render.html, self.text) + if not self.disabled: + render.js += CLICK_CHANGE_JS %(self.id) + return render + + +class CheckCfgTextInv (CheckCfg): + """ + Configuration-Tree based CheckboxText widget. Populates the input + checkbox with the inverted value of the configuration tree given by key + argument if it exists. It accepts properties to pass to the base + CheckboxText object. + + Arguments: + key: key in the configuration tree. + default: default value to give to the checkbox. + text: text to show beside the checkbox (by default, 'Enabled') + props: additional properties for base CheckboxText. + """ + def __init__ (self, key, default, text='Enabled', props=None): + assert type(default) == bool + assert type(text) == str + assert type(props) in (dict, type(None)) + + CheckCfg.__init__ (self, key, default, props, True) self.text = text def Render (self): diff --git a/admin/CTK/static/css/CTK.css b/admin/CTK/static/css/CTK.css index 27dfd2380..5e79686d1 100644 --- a/admin/CTK/static/css/CTK.css +++ b/admin/CTK/static/css/CTK.css @@ -202,6 +202,14 @@ button:hover { cursor: pointer; } padding: 1em 1em 1em 40px; margin: 1em 0; } +.dialog-information-slim { + background: #f9fcff url(/CTK/images/dialog-information.png) 4px 4px no-repeat; + -moz-border-radius: 4px; -webkit-border-radius: 4px; + border: 1px solid #d4e1f1; + padding: 1em 1em 1em 40px; + margin: 1em 0; + width: 50% +} .dialog-important-information { background: #e9ffd4 url(/CTK/images/dialog-information.png) 4px 4px no-repeat; -moz-border-radius: 4px; -webkit-border-radius: 4px; @@ -216,6 +224,14 @@ button:hover { cursor: pointer; } padding: 1em 1em 1em 40px; margin: 1em 0; } +.dialog-warning-slim { + background: #fff2b3 url(/CTK/images/dialog-warning.png) 4px 4px no-repeat; + -moz-border-radius: 4px; -webkit-border-radius: 4px; + border: 1px solid #b90; + padding: 1em 1em 1em 40px; + margin: 1em 0; + width: 50% +} .dialog-error { background: #ffe7e7 url(/CTK/images/dialog-error.png) 4px 4px no-repeat; -moz-border-radius: 4px; -webkit-border-radius: 4px; @@ -223,6 +239,14 @@ button:hover { cursor: pointer; } padding: 1em 1em 1em 40px; margin: 1em 0; } +.dialog-error-slim { + background: #ffe7e7 url(/CTK/images/dialog-error.png) 4px 4px no-repeat; + -moz-border-radius: 4px; -webkit-border-radius: 4px; + border: 1px solid #c00; + padding: 1em 1em 1em 40px; + margin: 1em 0; + width: 50% +} .dialog-information h2, .dialog-warning h2, diff --git a/admin/CTK/static/js/Submitter.js b/admin/CTK/static/js/Submitter.js index 71e1c668b..9bd59fd68 100644 --- a/admin/CTK/static/js/Submitter.js +++ b/admin/CTK/static/js/Submitter.js @@ -125,7 +125,11 @@ if ((typeof submitter_loaded) == 'undefined') { } }); self.find ("input:checkbox").each(function(){ - info[this.name] = this.checked ? "1" : "0"; + if (this.hasAttribute('mode') && this.getAttribute('mode') == 'inverse') { + info[this.name] = this.checked ? "0" : "1"; + } else { + info[this.name] = this.checked ? "1" : "0"; + } }); self.find ("select").each(function(){ info[this.name] = $(this).val(); diff --git a/admin/PageAdvanced.py b/admin/PageAdvanced.py index 21a9d0c91..b1d2dea34 100644 --- a/admin/PageAdvanced.py +++ b/admin/PageAdvanced.py @@ -95,11 +95,11 @@ NOTE_DH2048 = N_('Path to a Diffie Hellman (DH) parameters PEM file: 2048 bits.') NOTE_DH4096 = N_('Path to a Diffie Hellman (DH) parameters PEM file: 4096 bits.') NOTE_TLS_TIMEOUT = N_('Timeout for the TLS/SSL handshake. Default: 15 seconds.') -NOTE_TLS_SSLv2 = N_('Allow clients to use SSL version 2 - Beware: it is vulnerable. (Default: No)') -NOTE_TLS_SSLv3 = N_('Allow clients to use SSL version 3 - Beware: it is vulnerable. (Default: No)') -NOTE_TLS_TLSv1 = N_('Allow clients to use TLS version 1 (Default: Yes)') -NOTE_TLS_TLSv1_1 = N_('Allow clients to use TLS version 1.1 (Default: Yes)') -NOTE_TLS_TLSv1_2 = N_('Allow clients to use TLS version 1.2 (Default: Yes)') +NOTE_TLS_SSLv2 = N_('Beware: it is vulnerable. You should disable SSLv2.') +NOTE_TLS_SSLv3 = N_('Beware: it is vulnerable. You should disable SSLv3.') +NOTE_TLS_TLSv1 = N_('TLSv1 is deprecated') +NOTE_TLS_TLSv1_1 = N_('TLSv1.1 is deprecated') +NOTE_TLS_TLSv1_2 = N_(' ') HELPS = [('config_advanced', N_('Advanced'))] @@ -179,12 +179,14 @@ class TLSWidget (CTK.Container): def __init__ (self): CTK.Container.__init__ (self) + props = {} + props = {'mode': 'inverse'} table = CTK.PropsAuto(URL_APPLY) - table.Add (_('SSL version 2'), CTK.CheckCfgText('server!tls!protocol!SSLv2', False, _("Allow")), _(NOTE_TLS_SSLv2)) - table.Add (_('SSL version 3'), CTK.CheckCfgText('server!tls!protocol!SSLv3', False, _("Allow")), _(NOTE_TLS_SSLv3)) - table.Add (_('TLS version 1'), CTK.CheckCfgText('server!tls!protocol!TLSv1', True, _("Allow")), _(NOTE_TLS_TLSv1)) - table.Add (_('TLS version 1.1'), CTK.CheckCfgText('server!tls!protocol!TLSv1_1', True, _("Allow")), _(NOTE_TLS_TLSv1_1)) - table.Add (_('TLS version 1.2'), CTK.CheckCfgText('server!tls!protocol!TLSv1_2', True, _("Allow")), _(NOTE_TLS_TLSv1_2)) + table.Add (_('SSL version 2'), CTK.CheckCfgText('server!tls!protocol!SSLv2', True, _("Disable"), props), _(NOTE_TLS_SSLv2)) + table.Add (_('SSL version 3'), CTK.CheckCfgText('server!tls!protocol!SSLv3', True, _("Disable"), props), _(NOTE_TLS_SSLv3)) + table.Add (_('TLS version 1'), CTK.CheckCfgText('server!tls!protocol!TLSv1', False, _("Disable"), props), _(NOTE_TLS_TLSv1)) + table.Add (_('TLS version 1.1'), CTK.CheckCfgText('server!tls!protocol!TLSv1_1', False, _("Disable"), props), _(NOTE_TLS_TLSv1_1)) + table.Add (_('TLS version 1.2'), CTK.CheckCfgText('server!tls!protocol!TLSv1_2', False, _("Disable"), props), _(NOTE_TLS_TLSv1_2)) table.Add (_('Handshake Timeout'), CTK.TextCfg('server!tls!timeout_handshake', True), _(NOTE_TLS_TIMEOUT)) table.Add (_('DH parameters: 512 bits'), CTK.TextCfg('server!tls!dh_param512', True), _(NOTE_DH512)) table.Add (_('DH parameters: 1024 bits'), CTK.TextCfg('server!tls!dh_param1024', True), _(NOTE_DH1024)) From a85ca09d09e325c4c3ce134e4220c96041d4637a Mon Sep 17 00:00:00 2001 From: Thomas Reim Date: Thu, 1 Apr 2021 03:48:05 +0200 Subject: [PATCH 02/14] Cherokee ignores SSL/TLS protocols supported by OpenSSL SSL/TLS protocols are hardcoded in Cherokee. Neither at build time nor at run- time SSL/TLS protocols that are supported by the OpenSSL back-end are being checked. This may lead to the dangerous situation that OpenSSL encrypts HTTPS traffic using an SSL/TLS encryption, which is not explicitly supported by Cherokee. Current Cherokee for example does not support TLS protocol version 1.3, which requires ciphersuites for encryption that cannot be configured by Cherokee. More and more OS distribution maintainers now control security of their OpenSSL packages by deactivating unsafe SSL/TLS protocols at build time. For system administrators it is very difficult to identify the root cause for rejected HTTPS communication requests due to suddenly unavailable SSL/TLS protocols. OpenSSL provides only pretty cryptic notifications. This patch implements following improvements: - Check SSL/TLS protocols supported by OpenSSL at build time - configure Displays and logs supported protocols - Abort build with error message if unsupported protocols are detected - Check SSL/TLS protocols supported by the actual OpenSSL back-end at runtime - Log an error message if unsupported protocols are detected - Command-line option -i provides more detailed information about OpenSSL + Build version and actually used version + Supported SSL/TLS protocols + Maintainer deactivated protocols - Make SSL/TLS protocol information available to Cherokee Admin scripts - Fix Cherokee Admin Advanced page to outline support of SSL/TLS protocols: + Mark deactivated protocols + Warn users if SSL/TLS protocols are detected that are not supported by Cherokee + Inform users if OpenSSL/libssl is not supported at all Fixes: https://github.com/cherokee/webserver/issues/1255 Signed-off-by: Thomas Reim --- admin/Makefile.am | 8 +- admin/PageAdvanced.py | 78 +++++++++-- admin/configured.py.pre | 1 + admin/server.py | 42 ++++-- cherokee/Makefile.am | 6 +- cherokee/cryptor.c | 16 +++ cherokee/cryptor.h | 7 + cherokee/cryptor_libssl.c | 134 ++++++++++++++++++ cherokee/error_list.py | 6 + cherokee/info.c | 41 +++++- cherokee/main_admin.c | 115 +++++++++++++++- cherokee/main_worker.c | 283 ++++++++++++++++++++++++++++++++++++++ configure.ac | 49 ++++++- 13 files changed, 748 insertions(+), 38 deletions(-) diff --git a/admin/Makefile.am b/admin/Makefile.am index 0269073cb..3109e7287 100644 --- a/admin/Makefile.am +++ b/admin/Makefile.am @@ -8,8 +8,14 @@ endif SUFFIXES = .py.pre .py +if USE_OPENSSL +tlsprotocols = @OPENSSL_TLS_PROTOCOLS@ +else +tlsprotocols = +endif + .py.pre.py: - sed -e "s|%sysconfdir%|${sysconfdir}|g; s|%sbindir%|${sbindir}|g; s|%docdir%|${docdir}|g; s|%prefix%|${prefix}|g; s|%localstatedir%|${localstatedir}|g; s|%libdir%|${libdir}|g; s|%wwwroot%|${WWW_ROOT}|g; s|%version%|${PACKAGE_VERSION}|g; s|%phpcgi%|${PHPCGI}|g; s|%datadir%|${datadir}|g; s|%localedir%|${localedir}|g" $< > $@ + sed -e "s|%sysconfdir%|${sysconfdir}|g; s|%sbindir%|${sbindir}|g; s|%docdir%|${docdir}|g; s|%prefix%|${prefix}|g; s|%localstatedir%|${localstatedir}|g; s|%libdir%|${libdir}|g; s|%wwwroot%|${WWW_ROOT}|g; s|%version%|${PACKAGE_VERSION}|g; s|%phpcgi%|${PHPCGI}|g; s|%datadir%|${datadir}|g; s|%localedir%|${localedir}|g; s|%tlsprotocols%|$(tlsprotocols)|g" $< > $@ PY_PRE = \ configured.py.pre diff --git a/admin/PageAdvanced.py b/admin/PageAdvanced.py index b1d2dea34..7b977e833 100644 --- a/admin/PageAdvanced.py +++ b/admin/PageAdvanced.py @@ -34,6 +34,29 @@ URL_BASE = '/advanced' URL_APPLY = '/advanced/apply' +KNOWN_TLS_PROTOCOLS = [ + ('SSLv2', 'SSL version 2'), + ('SSLv3', 'SSL version 3'), + ('TLSv1', 'TLS version 1'), + ('TLSv1.1', 'TLS version 1.1'), + ('TLSv1.2', 'TLS version 1.2') +] + +# Keep aligned with cherokee_cryptor_init_base() +TLS_PROTOCOL_CHECKBOX_DEFAULT = { + 'SSLv2': True, + 'SSLv3': True, + 'TLSv1': False, + 'TLSv1.1': False, + 'TLSv1.2': False +} + +TLS_WARNING = N_("""

WARNING: The SSL/TLS back-end supports more recent +versions of TLS protocols, which are not recognized by Cherokee. Please check +for latest Cherokee updates or report this issue. As a temporary workaround please +set 'Max. TLS protocol version' to the maximum TLS protocol version supported by +Cherokee.

Following unknown TLS protocols have been found:""") + VALIDATIONS = [ ("server!fdlimit", validations.is_positive_int), ("server!pid_file", validations.can_create_file), @@ -94,6 +117,7 @@ NOTE_DH1024 = N_('Path to a Diffie Hellman (DH) parameters PEM file: 1024 bits.') NOTE_DH2048 = N_('Path to a Diffie Hellman (DH) parameters PEM file: 2048 bits.') NOTE_DH4096 = N_('Path to a Diffie Hellman (DH) parameters PEM file: 4096 bits.') +NOTE_TLS_NA = N_('Your Cherokee Web Server does not support SSL/TLS encryption.') NOTE_TLS_TIMEOUT = N_('Timeout for the TLS/SSL handshake. Default: 15 seconds.') NOTE_TLS_SSLv2 = N_('Beware: it is vulnerable. You should disable SSLv2.') NOTE_TLS_SSLv3 = N_('Beware: it is vulnerable. You should disable SSLv3.') @@ -101,6 +125,14 @@ NOTE_TLS_TLSv1_1 = N_('TLSv1.1 is deprecated') NOTE_TLS_TLSv1_2 = N_(' ') +TLS_PROTOCOL_NOTES = { + 'SSLv2': NOTE_TLS_SSLv2, + 'SSLv3': NOTE_TLS_SSLv3, + 'TLSv1': NOTE_TLS_TLSv1, + 'TLSv1.1': NOTE_TLS_TLSv1_1, + 'TLSv1.2': NOTE_TLS_TLSv1_2 +} + HELPS = [('config_advanced', N_('Advanced'))] JS_SCROLL = """ @@ -176,25 +208,53 @@ def __init__ (self): self += CTK.Indenter(table) class TLSWidget (CTK.Container): + @staticmethod + def check_for_tls_protocol_versions (self): + available_tls_protocols = {} + unknown_tls_protocols = [] + tls_option_list = TLSPROTOCOLS.split(',') + if len(tls_option_list) > 1: + for protocol in tls_option_list: + for known_protocol in KNOWN_TLS_PROTOCOLS: + if known_protocol[0] == protocol: + available_tls_protocols[protocol] = known_protocol[1] + break + else: + unknown_tls_protocols.append(protocol) + return available_tls_protocols, unknown_tls_protocols + + @staticmethod + def add_tls_version_config (self, table): + props = {} + props = {'mode': 'inverse'} + props_disable = props.copy() + props_disable["disabled"] = 1 + for protocol in KNOWN_TLS_PROTOCOLS: + if self.available_tls_protocols.has_key(protocol[0]): + table.Add ('%s%s' % (_('Disable '), self.available_tls_protocols[protocol[0]]), CTK.CheckCfgText('server!tls!protocol!' + protocol[0].replace('.','_'), TLS_PROTOCOL_CHECKBOX_DEFAULT[protocol[0]], _("Disable"), props), TLS_PROTOCOL_NOTES[protocol[0]]) + else: + table.Add ('%s%s' % (_('Disable '), protocol[1]), CTK.CheckCfgText('server!tls!protocol!' + protocol[0].replace('.','_'), True, _("Protocol deacrivated") if protocol[0].startswith('SSLv') else _("Protocol not supported"), props_disable), TLS_PROTOCOL_NOTES[protocol[0]]) + def __init__ (self): CTK.Container.__init__ (self) + self.available_tls_protocols, self.unknown_tls_protocols = TLSWidget.check_for_tls_protocol_versions (self) - props = {} - props = {'mode': 'inverse'} table = CTK.PropsAuto(URL_APPLY) - table.Add (_('SSL version 2'), CTK.CheckCfgText('server!tls!protocol!SSLv2', True, _("Disable"), props), _(NOTE_TLS_SSLv2)) - table.Add (_('SSL version 3'), CTK.CheckCfgText('server!tls!protocol!SSLv3', True, _("Disable"), props), _(NOTE_TLS_SSLv3)) - table.Add (_('TLS version 1'), CTK.CheckCfgText('server!tls!protocol!TLSv1', False, _("Disable"), props), _(NOTE_TLS_TLSv1)) - table.Add (_('TLS version 1.1'), CTK.CheckCfgText('server!tls!protocol!TLSv1_1', False, _("Disable"), props), _(NOTE_TLS_TLSv1_1)) - table.Add (_('TLS version 1.2'), CTK.CheckCfgText('server!tls!protocol!TLSv1_2', False, _("Disable"), props), _(NOTE_TLS_TLSv1_2)) + TLSWidget.add_tls_version_config (self, table) table.Add (_('Handshake Timeout'), CTK.TextCfg('server!tls!timeout_handshake', True), _(NOTE_TLS_TIMEOUT)) table.Add (_('DH parameters: 512 bits'), CTK.TextCfg('server!tls!dh_param512', True), _(NOTE_DH512)) table.Add (_('DH parameters: 1024 bits'), CTK.TextCfg('server!tls!dh_param1024', True), _(NOTE_DH1024)) table.Add (_('DH parameters: 2048 bits'), CTK.TextCfg('server!tls!dh_param2048', True), _(NOTE_DH2048)) table.Add (_('DH parameters: 4096 bits'), CTK.TextCfg('server!tls!dh_param4096', True), _(NOTE_DH4096)) - self += CTK.RawHTML ("

%s

" %(_('TLS'))) - self += CTK.Indenter(table) + if len(self.unknown_tls_protocols) > 0: + tip = '%s %s

' % (_(TLS_WARNING), join(self.unknown_tls_protocols)) + props = {'class': 'dialog-error-slim'} + self += CTK.Notice ('error', CTK.RawHTML(tip), props) + if len(self.available_tls_protocols) == 0: + self += CTK.RawHTML ("

%s

" %(_(NOTE_TLS_NA))) + else: + self += CTK.Indenter(table) class Render: def __call__ (self): diff --git a/admin/configured.py.pre b/admin/configured.py.pre index 009f24a56..364c9031f 100644 --- a/admin/configured.py.pre +++ b/admin/configured.py.pre @@ -9,6 +9,7 @@ WWWROOT = "%wwwroot%" SYSCONFDIR = "%sysconfdir%" LOCALSTATE = "%localstatedir%" VERSION = "%version%" +TLSPROTOCOLS = "%tlsprotocols%" CHEROKEE_SERVER = join (PREFIX, "sbin/cherokee") CHEROKEE_WORKER = join (PREFIX, "sbin/cherokee-worker") diff --git a/admin/server.py b/admin/server.py index 26c09964f..596f572d3 100755 --- a/admin/server.py +++ b/admin/server.py @@ -36,6 +36,8 @@ import socket import signal import thread +import re +import argparse # Import CTK sys.path.append (os.path.abspath (os.path.realpath(__file__) + '/../CTK')) @@ -43,13 +45,13 @@ # Cherokee imports import config_version -from configured import * +import configured import PageError def init (scgi_port, cfg_file): # Translation support - CTK.i18n.install ('cherokee', LOCALEDIR, unicode=True) + CTK.i18n.install ('cherokee', configured.LOCALEDIR, unicode=True) # Ensure SIGCHLD is set. It needs to receive the signal in order # to detect when its child processes finish. @@ -61,7 +63,7 @@ def init (scgi_port, cfg_file): os.chdir(os.path.abspath(pathname)) # Let the user know what is going on - version = VERSION + version = configured.VERSION pid = os.getpid() if scgi_port.isdigit(): @@ -137,17 +139,39 @@ def trace_callback (sig, stack): if __name__ == "__main__": # Read the arguments + parser = argparse.ArgumentParser() + parser.add_argument("SCGI_SOCKET", help="Cherokee admin server SCGI socket (TCP port or socket path)") + parser.add_argument("CONFIG_FILE", help="path to Cherokee webserver configuration file to modify") + parser.add_argument("-x", "--debug", help="print server backend errors to the terminal", action="store_true") + parser.add_argument("-P", "--tls-protocols", + help="tells server which SSL/TLS protocol versions are supported by the TLS back-end (comma-separated list) " + "TLS_PROTOCOLS have to be specified in OpenSSL options format, e. g. tls1_3,tls1,ssl3") try: - scgi_port = sys.argv[1] - cfg_file = sys.argv[2] + args = parser.parse_args() except: - print _("Incorrect parameters: PORT CONFIG_FILE") + parser.print_help() raise SystemExit + scgi_port = args.SCGI_SOCKET + cfg_file = args.CONFIG_FILE # Debugging mode - if '-x' in sys.argv: + if args.debug == True: debug_set_up() + # SSL/TLS protocol version list from TLS back-end + if not args.tls_protocols == None: + configured.TLSPROTOCOLS = args.tls_protocols + + # Check and reformat SSL/TSL protocol list for module PageAdvanced + p = re.compile('([0-9]+)[_]([0-9]+)') + pp = re.compile('([0-9]+)') + tls_option_list = [] + for protocol in args.tls_protocols.split(','): + tls_option_list.append(pp.sub("v\\1", p.sub("\\1.\\2", protocol.strip()).upper(), 1)) + if len(tls_option_list) > 1: + configured.TLSPROTOCOLS = ',' + configured.TLSPROTOCOLS = configured.TLSPROTOCOLS.join(tls_option_list) + # Init init (scgi_port, cfg_file) @@ -192,9 +216,9 @@ def are_vsrvs_num(): CTK.unpublish (r'') - for path in (CHEROKEE_WORKER, CHEROKEE_SERVER, CHEROKEE_ICONSDIR): + for path in (configured.CHEROKEE_WORKER, configured.CHEROKEE_SERVER, configured.CHEROKEE_ICONSDIR): if not os.path.exists (path): - CTK.publish (r'', PageError.ResourceMissing, path=CHEROKEE_WORKER) + CTK.publish (r'', PageError.ResourceMissing, path=configured.CHEROKEE_WORKER) while not os.path.exists (path): CTK.step() diff --git a/cherokee/Makefile.am b/cherokee/Makefile.am index b4537216d..0cf0df0a9 100644 --- a/cherokee/Makefile.am +++ b/cherokee/Makefile.am @@ -1264,7 +1264,8 @@ $(static_validator_htpasswd_flags) \ $(static_validator_mysql_flags) \ $(static_cryptor_libssl_flags) \ $(static_handler_dbslayer_flags) \ -$(static_handler_streaming_flags) +$(static_handler_streaming_flags) \ +$(LIBSSL_CFLAGS) libcherokee_server_la_LIBADD = \ $(PTHREAD_LIBS) \ @@ -1731,7 +1732,8 @@ cherokee_worker_LDFLAGS = -export-dynamic cherokee_worker_LDADD = \ $(libcherokee_server_la_LIBADD) \ libcherokee-base.la \ -libcherokee-server.la +libcherokee-server.la \ +$(external_pcre_lib) # # Cherokee diff --git a/cherokee/cryptor.c b/cherokee/cryptor.c index 4ae92fddf..843589956 100644 --- a/cherokee/cryptor.c +++ b/cherokee/cryptor.c @@ -44,9 +44,11 @@ cherokee_cryptor_init_base (cherokee_cryptor_t *cryp, cryp->vserver_new = NULL; cryp->socket_new = NULL; cryp->configure = NULL; + cryp->tls_info = NULL; /* Properties */ + cryp->hardcoded_ssl_options = 0; cryp->timeout_handshake = TIMEOUT_DEFAULT; cryp->allow_SSLv2 = false; cryp->allow_SSLv3 = false; @@ -277,3 +279,17 @@ cherokee_cryptor_client_init (cherokee_cryptor_client_t *cryp, return CRYPTOR_SOCKET(cryp)->init_tls (cryp, host, socket, NULL, &foo); } + +ret_t +cherokee_cryptor_tls_backend_info (cherokee_cryptor_t *cryp, + cherokee_buffer_t *backend_info_buf, + cherokee_buffer_t *tls_protocols_buf, + cherokee_buffer_t *deactivated_protocols_buf) +{ + if (unlikely (cryp->tls_info == NULL)) + return ret_error; + + return cryp->tls_info (cryp, backend_info_buf, + tls_protocols_buf, + deactivated_protocols_buf); +} diff --git a/cherokee/cryptor.h b/cherokee/cryptor.h index 1adfa97e4..ca5c590f7 100644 --- a/cherokee/cryptor.h +++ b/cherokee/cryptor.h @@ -45,6 +45,7 @@ typedef ret_t (* cryptor_func_configure_t) (void *cryp, cherokee_config_node_ typedef ret_t (* cryptor_func_vserver_new_t) (void *cryp, void *vsrv, void **vserver_crypt); typedef ret_t (* cryptor_func_socket_new_t) (void *cryp, void **socket_crypt); typedef ret_t (* cryptor_func_client_new_t) (void *cryp, void **client_crypt); +typedef ret_t (* cryptor_func_tls_info_t) (void *cryp, cherokee_buffer_t *backend_info_buf, cherokee_buffer_t *tls_protocols_buf, cherokee_buffer_t *deactivated_protocols_buf); /* Cryptor: Virtual server */ typedef ret_t (* cryptor_vsrv_func_free_t) (void *cryp); @@ -65,6 +66,7 @@ typedef ret_t (* cryptor_client_func_init_t) (void *cryp, void *host, void * */ typedef struct { cherokee_module_t module; + long hardcoded_ssl_options; cint_t timeout_handshake; cherokee_boolean_t allow_SSLv2; cherokee_boolean_t allow_SSLv3; @@ -77,6 +79,7 @@ typedef struct { cryptor_func_vserver_new_t vserver_new; cryptor_func_socket_new_t socket_new; cryptor_func_client_new_t client_new; + cryptor_func_tls_info_t tls_info; } cherokee_cryptor_t; typedef struct { @@ -148,6 +151,10 @@ ret_t cherokee_cryptor_socket_new (cherokee_cryptor_t *cryp, ret_t cherokee_cryptor_client_new (cherokee_cryptor_t *cryp, cherokee_cryptor_client_t **cryp_client); +ret_t cherokee_cryptor_tls_backend_info (cherokee_cryptor_t *cryp, + cherokee_buffer_t *backend_info_buf, + cherokee_buffer_t *tls_protocols_buf, + cherokee_buffer_t *deactivated_protocols_buf); /* Cryptor: Virtual Server */ diff --git a/cherokee/cryptor_libssl.c b/cherokee/cryptor_libssl.c index 80a5c2ebc..16b03b468 100644 --- a/cherokee/cryptor_libssl.c +++ b/cherokee/cryptor_libssl.c @@ -68,6 +68,10 @@ static DH *dh_param_4096 = NULL; ERR_error_string(openssl_error, NULL)); \ } \ } while(0) +#define CRYPTOR_VSRV_SSL_OPTIONS(v) \ + VSERVER_SRV(v)->cryptor->hardcoded_ssl_options +#define PROTOCOL_SWITCHED_OFF(prot, opt, vsrv) \ + ((opt & prot) | (CRYPTOR_VSRV_SSL_OPTIONS(vsrv) & prot)) > 0 static ret_t @@ -1258,6 +1262,135 @@ _client_new (cherokee_cryptor_t *cryp, return ret_ok; } +static ret_t +_tls_backend_info (cherokee_cryptor_t *cryp, + cherokee_buffer_t *backend_info_buf, + cherokee_buffer_t *tls_protocols_buf, + cherokee_buffer_t *deactivated_protocols_buf) +{ + SSL_CTX *ctx; + SSL *session; + long options; + int version; + +#if OPENSSL_VERSION_NUMBER < 0x10100000L + cherokee_buffer_add_va (backend_info_buf, "%s", + SSLeay_version (SSLEAY_VERSION)); + + ctx = SSL_CTX_new (SSLv23_server_method()); +#else + cherokee_buffer_add_va (backend_info_buf, "%s", + OpenSSL_version (OPENSSL_VERSION)); + + ctx = SSL_CTX_new (TLS_server_method()); +#endif + if (ctx == NULL) { + goto error; + } + session = SSL_new (ctx); + if (session == NULL) { + goto error; + } + + SSL_set_accept_state (session); + + options = SSL_CTX_get_options (ctx); + +#if OPENSSL_VERSION_NUMBER >= 0x10100000L +# ifdef SSL_TXT_SSLV3 +# ifdef SSL_OP_NO_SSLv3 + if ((options & SSL_OP_NO_SSLv3) == 0) { + cherokee_buffer_add_str (tls_protocols_buf, SSL_TXT_SSLV3); + } +# else + cherokee_buffer_add_str (tls_protocols_buf, SSL_TXT_SSLV3); +# endif +# ifdef SSL_OP_NO_SSLv3 + if ((cryp->hardcoded_ssl_options & SSL_OP_NO_SSLv3) > 0) { + cherokee_buffer_add_str (deactivated_protocols_buf, SSL_TXT_SSLV3); + } +# endif +# endif +# ifdef SSL_TXT_TLSV1 +# ifdef SSL_OP_NO_TLSv1 + if ((options & SSL_OP_NO_TLSv1) == 0) { + if (! cherokee_buffer_is_empty(tls_protocols_buf)) { + cherokee_buffer_add_str (tls_protocols_buf, ", "); + } + cherokee_buffer_add_str (tls_protocols_buf, SSL_TXT_TLSV1); + } +# else + if (! cherokee_buffer_is_empty(tls_protocols_buf)) { + cherokee_buffer_add_str (tls_protocols_buf, ", "); + } + cherokee_buffer_add_str (tls_protocols_buf, SSL_TXT_TLSV1); +# endif +# ifdef SSL_OP_NO_TLSv1 + if ((cryp->hardcoded_ssl_options & SSL_OP_NO_TLSv1) > 0) { + if (! cherokee_buffer_is_empty(deactivated_protocols_buf)) { + cherokee_buffer_add_str (deactivated_protocols_buf, ", "); + } + cherokee_buffer_add_str (deactivated_protocols_buf, SSL_TXT_TLSV1); + } +# endif +# endif +# ifdef SSL_OP_NO_TLSv1_1 + if ((options & SSL_OP_NO_TLSv1_1) == 0) { + if (! cherokee_buffer_is_empty(tls_protocols_buf)) { + cherokee_buffer_add_str (tls_protocols_buf, ", "); + } + cherokee_buffer_add_str (tls_protocols_buf, SSL_TXT_TLSV1_1); + } +# else + if (! cherokee_buffer_is_empty(tls_protocols_buf)) { + cherokee_buffer_add_str (tls_protocols_buf, ", "); + } + cherokee_buffer_add_str (tls_protocols_buf, SSL_TXT_TLSV1_1); +# endif +# ifdef SSL_OP_NO_TLSv1_1 + if ((cryp->hardcoded_ssl_options & SSL_OP_NO_TLSv1_1) > 0) { + if (! cherokee_buffer_is_empty(deactivated_protocols_buf)) { + cherokee_buffer_add_str (deactivated_protocols_buf, ", "); + } + cherokee_buffer_add_str (deactivated_protocols_buf, SSL_TXT_TLSV1_1); + } +# endif +# ifdef SSL_OP_NO_TLSv1_2 + if ((options & SSL_OP_NO_TLSv1_2) == 0) { + if (! cherokee_buffer_is_empty(tls_protocols_buf)) { + cherokee_buffer_add_str (tls_protocols_buf, ", "); + } + cherokee_buffer_add_str (tls_protocols_buf, SSL_TXT_TLSV1_2); + } +# else + if (! cherokee_buffer_is_empty(tls_protocols_buf)) { + cherokee_buffer_add_str (tls_protocols_buf, ", "); + } + cherokee_buffer_add_str (tls_protocols_buf, SSL_TXT_TLSV1_2); +# endif +# ifdef SSL_OP_NO_TLSv1_2 + if ((cryp->hardcoded_ssl_options & SSL_OP_NO_TLSv1_2) > 0) { + if (! cherokee_buffer_is_empty(deactivated_protocols_buf)) { + cherokee_buffer_add_str (deactivated_protocols_buf, ", "); + } + cherokee_buffer_add_str (deactivated_protocols_buf, SSL_TXT_TLSV1_2); + } +# endif +#endif + + if (ctx != NULL) { + SSL_CTX_free (ctx); + } + return ret_ok; + +error: + + if (ctx != NULL) { + SSL_CTX_free (ctx); + } + return ret_error; +} + PLUGIN_INFO_INIT (libssl, cherokee_cryptor, @@ -1282,6 +1415,7 @@ cherokee_cryptor_libssl_new (cherokee_cryptor_libssl_t **cryp) CRYPTOR(n)->vserver_new = (cryptor_func_vserver_new_t) _vserver_new; CRYPTOR(n)->socket_new = (cryptor_func_socket_new_t) _socket_new; CRYPTOR(n)->client_new = (cryptor_func_client_new_t) _client_new; + CRYPTOR(n)->tls_info = (cryptor_func_tls_info_t) _tls_backend_info; *cryp = n; return ret_ok; diff --git a/cherokee/error_list.py b/cherokee/error_list.py index 146c6f90c..dd86cef6a 100644 --- a/cherokee/error_list.py +++ b/cherokee/error_list.py @@ -612,6 +612,12 @@ admin = "/general#Network-1", show_bt = False) +e('SERVER_UNKNOWN_TLS_PROTOCOL', + title = "Ignoring unknown SSL/TLS protocol %s", + desc = "OpenSSL/libssl supports an SSL/TLS protocol version that Cherokee is not capable of. This might impact security and accessability of your webserver. Please upgrade Cherokee webserver.", + admin = SYSTEM_ISSUE, + show_bt = False) + e('SERVER_TLS_DEFAULT', title = "TLS/SSL support required for 'default' Virtual Server.", desc = "TLS/SSL support must be set up in the 'default' Virtual Server. Its certificate will be used by the server in case TLS SNI information is not provided by the client.") diff --git a/cherokee/info.c b/cherokee/info.c index 8fff47e6d..02196feb3 100644 --- a/cherokee/info.c +++ b/cherokee/info.c @@ -26,11 +26,17 @@ #include "info.h" #include "plugin_loader.h" #include "server-protected.h" +#ifdef HAVE_OPENSSL +# include "cryptor_libssl.h" +#endif void cherokee_info_build_print (cherokee_server_t *srv) { - cherokee_buffer_t builtin = CHEROKEE_BUF_INIT; + cherokee_buffer_t tmp = CHEROKEE_BUF_INIT; + cherokee_buffer_t prot_buf = CHEROKEE_BUF_INIT; + cherokee_buffer_t deact_buf = CHEROKEE_BUF_INIT; + ret_t ret; /* Basic info */ @@ -38,6 +44,9 @@ cherokee_info_build_print (cherokee_server_t *srv) printf (" Version: " PACKAGE_VERSION "\n"); printf (" Compiled on: " __DATE__ " " __TIME__ "\n"); printf (" Arguments to configure: " CHEROKEE_CONFIG_ARGS "\n"); +#ifdef HAVE_OPENSSL + printf (" OpenSSL support: libssl (" OPENSSL_VERSION_TEXT ")\n"); +#endif printf ("\n"); /* Paths @@ -54,10 +63,10 @@ cherokee_info_build_print (cherokee_server_t *srv) /* Print plug-ins information */ printf ("Plug-ins\n"); - cherokee_plugin_loader_get_mods_info (&srv->loader, &builtin); - printf (" Built-in: %s\n", builtin.buf ? builtin.buf : ""); + cherokee_plugin_loader_get_mods_info (&srv->loader, &tmp); + printf (" Built-in: %s\n", tmp.buf ? tmp.buf : ""); printf ("\n"); - cherokee_buffer_mrproper (&builtin); + cherokee_buffer_clean(&tmp); /* Support */ @@ -107,7 +116,25 @@ cherokee_info_build_print (cherokee_server_t *srv) printf ("\n"); #ifdef HAVE_OPENSSL - printf (" SSL/TLS: libssl\n"); + cherokee_buffer_clean (&prot_buf); + cherokee_buffer_clean (&deact_buf); + if (srv->cryptor != NULL && srv->cryptor->tls_info != NULL) { + ret = srv->cryptor->tls_info (srv->cryptor, + &tmp, + &prot_buf, + &deact_buf); + if (ret == ret_ok) { + printf (" SSL/TLS: libssl (%s)\n", tmp.buf); + if (! cherokee_buffer_is_empty(&prot_buf)) { + printf (" supported protocols: %s\n", + prot_buf.buf); + } + if (! cherokee_buffer_is_empty(&deact_buf)) { + printf (" protocols deactivated by maintainer: %s\n", + deact_buf.buf); + } + } + } # ifndef OPENSSL_NO_TLSEXT printf (" TLS SNI: yes\n"); # else @@ -119,4 +146,8 @@ cherokee_info_build_print (cherokee_server_t *srv) #endif printf ("\n"); + + cherokee_buffer_mrproper (&tmp); + cherokee_buffer_mrproper (&prot_buf); + cherokee_buffer_mrproper (&deact_buf); } diff --git a/cherokee/main_admin.c b/cherokee/main_admin.c index eda501fd5..f2629b798 100644 --- a/cherokee/main_admin.c +++ b/cherokee/main_admin.c @@ -34,6 +34,11 @@ #include "server-protected.h" #include "util.h" +#ifdef HAVE_OPENSSL +# include +# include "pcre/pcre.h" +#endif + #ifdef HAVE_SYS_WAIT_H # include #endif @@ -64,6 +69,8 @@ #define DEFAULT_BIND "127.0.0.1" #define RULE_PRE "vserver!1!rule!" +#define ENTRIES "main" + static int port = DEFAULT_PORT; static char *document_root = NULL; static char *config_file = NULL; @@ -75,6 +82,7 @@ static int scgi_port = 4000; static int thread_num = -1; static cherokee_server_t *srv = NULL; static cherokee_buffer_t password = CHEROKEE_BUF_INIT; +static cherokee_buffer_t tls_protocols = CHEROKEE_BUF_INIT; static ret_t @@ -233,29 +241,34 @@ config_server (cherokee_server_t *srv) cherokee_buffer_add_str (&buf, "vserver!1!nick = default\n"); cherokee_buffer_add_va (&buf, "vserver!1!document_root = %s\n", document_root); + if (!cherokee_buffer_is_empty(&tls_protocols)) { + cherokee_buffer_prepend_str(&tls_protocols, "-P "); + } + if (scgi_port <= 0) { cherokee_buffer_add_va (&buf, "source!1!nick = app-logic\n" "source!1!type = interpreter\n" "source!1!timeout = " TIMEOUT "\n" "source!1!host = %s\n" - "source!1!interpreter = %s/server.py %s %s %s\n" + "source!1!interpreter = %s/server.py %s %s %s %s\n" "source!1!env_inherited = 1\n", DEFAULT_UNIX_SOCKET, document_root, DEFAULT_UNIX_SOCKET, config_file, - (debug) ? "-x" : ""); - + (debug) ? "-x" : "", + tls_protocols.buf); } else { cherokee_buffer_add_va (&buf, "source!1!nick = app-logic\n" "source!1!type = interpreter\n" "source!1!timeout = " TIMEOUT "\n" "source!1!host = localhost:%d\n" - "source!1!interpreter = %s/server.py %d %s %s\n" + "source!1!interpreter = %s/server.py %d %s %s %s\n" "source!1!env_inherited = 1\n", scgi_port, document_root, scgi_port, config_file, - (debug) ? "-x" : ""); + (debug) ? "-x" : "", + tls_protocols.buf); } if (debug) { @@ -550,6 +563,90 @@ process_parameters (int argc, char **argv) } } +#ifdef HAVE_OPENSSL +static int +check_for_tls_protocols() { + const char *regex = "-((ssl|tls)[[:digit:]]+_*[[:digit:]]*)"; + pcre *reCompiled; + const char *pcreErrorStr; + const char *psubStrMatchStr; + FILE *f; + char tmp[256]; + char *line; + int pcreErrorOffset; + int subStrVec[30]; + int match_count = 0; + int start_offset = 0; + int ret = 0; + + cherokee_buffer_t buf = CHEROKEE_BUF_INIT;; + +# ifdef PATH_OPENSSL_BIN + snprintf(tmp, sizeof (tmp), "%s s_server -help 2>&1", + PATH_OPENSSL_BIN); +# else + snprintf(tmp, sizeof (tmp), "openssl s_server -help 2>&1"); +# endif + f = popen(tmp, "r"); + if (f == NULL) { + PRINT_MSG("(critical) Cannot execute '%s'\n", tmp); + ret = ret_error; + goto out; + } + while (!feof(f)) { + line = fgets(tmp, sizeof (tmp), f); + if (line == NULL) + continue; + cherokee_buffer_add(&buf, line, strlen(line)); + } + pclose(f); + + reCompiled = pcre_compile(regex, 0, &pcreErrorStr, + &pcreErrorOffset, NULL); + if (reCompiled == NULL) { + TRACE(ENTRIES, "Regex error compiling '%s': %s\n", regex, pcreErrorStr); + ret = PCRE_ERROR_NULL; + goto out; + } + while (1) { + ret = pcre_exec(reCompiled, NULL, buf.buf, buf.len, + start_offset, 0, subStrVec, 30); + if (ret < 0) { + switch (ret) { + case PCRE_ERROR_NOMATCH: + ret = match_count; + break; + default: + TRACE(ENTRIES, "Regex matching failed with error code %d\n", ret); + } + goto out; + } + if (ret == 0) { + // Too many substrings were found to fit in subStrVec!"); + // Set rc to the max number of substring matches possible. + ret = 30 / 3; + } + pcre_get_substring(buf.buf, subStrVec, ret, 1, + &(psubStrMatchStr)); + if (!cherokee_buffer_is_empty(&tls_protocols)) { + cherokee_buffer_add_str(&tls_protocols, ","); + } + cherokee_buffer_add(&tls_protocols, + psubStrMatchStr, strlen(psubStrMatchStr)); + match_count++; + pcre_free_substring(psubStrMatchStr); + start_offset = subStrVec[1]; + } + +out: + if (reCompiled == NULL) { + pcre_free(reCompiled); + } + cherokee_buffer_mrproper(&buf); + return ret; +} +#endif + static ret_t check_for_python (void) { @@ -631,6 +728,14 @@ main (int argc, char **argv) exit (EXIT_ERROR); } +#ifdef HAVE_OPENSSL + /* OpenSSL supported TLS protocols */ + if (check_for_tls_protocols() <= 0) { + PRINT_MSG("ERROR: No TLS protocol options in 'openssl s_server -help' output. " + "Please issue a bug report.\n"); + } +#endif + /* Signal handling */ act.sa_handler = SIG_IGN; sigaction (SIGPIPE, &act, NULL); diff --git a/cherokee/main_worker.c b/cherokee/main_worker.c index 8af979781..f8610d73f 100644 --- a/cherokee/main_worker.c +++ b/cherokee/main_worker.c @@ -45,6 +45,11 @@ # include "getopt/getopt.h" #endif +#ifdef HAVE_OPENSSL +# include +# include "pcre/pcre.h" +#endif + /* Notices */ #define APP_NAME \ @@ -94,6 +99,215 @@ static int services_fd = -1; static ret_t common_server_initialization (cherokee_server_t *srv); +#ifdef HAVE_OPENSSL +static int +check_for_tls_protocols(cherokee_buffer_t *buf, const char *regex, int options, + cherokee_buffer_t *protocol_option_list) { + pcre *reCompiled; + const char *pcreErrorStr; + const char *psubStrMatchStr; + int pcreErrorOffset; + int subStrVec[30]; + int match_count = 0; + int start_offset = 0; + int j; + int ret = 0; + + if (!buf) + goto out; + reCompiled = pcre_compile(regex, options, &pcreErrorStr, + &pcreErrorOffset, NULL); + if (reCompiled == NULL) { + TRACE(ENTRIES, "Regex error compiling '%s': %s\n", regex, pcreErrorStr); + ret = PCRE_ERROR_NULL; + goto out; + } + while (1) { + ret = pcre_exec(reCompiled, NULL, buf->buf, buf->len, + start_offset, 0, subStrVec, 30); + if (ret < 0) { + switch (ret) { + case PCRE_ERROR_NOMATCH: + ret = match_count; + break; + default: + TRACE(ENTRIES, "Regex matching failed with error code %d\n", ret); + } + goto out; + } + if (ret == 0) { + // Too many substrings were found to fit in subStrVec!"); + // Set rc to the max number of substring matches possible. + ret = 30 / 3; + } + pcre_get_substring(buf->buf, subStrVec, ret, 1, + &(psubStrMatchStr)); + if (!cherokee_buffer_is_empty(protocol_option_list)) { + cherokee_buffer_add_str(protocol_option_list, ","); + } + cherokee_buffer_add(protocol_option_list, + psubStrMatchStr, strlen(psubStrMatchStr)); + match_count++; + pcre_free_substring(psubStrMatchStr); + start_offset = subStrVec[1]; + } + +out: + if (reCompiled == NULL) { + pcre_free(reCompiled); + } + return ret; +} + +/* + * More and more Linux distributions deactivate insecure SSL/TLS protocols + * at build time using configure options. OpenSSL 1.1.1 silently blocks the + * deactivated protocols, but they can still be configured using the libssl + * API. Build-time deactivation is documented in opensslconf.h, which in + * general requires libssl-dev package installation. Currently, the only + * feasible way to identify deactivated SSL/TLS protocols is to try to start + * an OpenSSL SSL/TLS server with the protocol that is subject to test. + * OpenSSL will terminate with an error if the protocol has been deactivated + * at build time, + */ +static ret_t +add_hardcoded_ssl_options (cherokee_server_t *srv) +{ + unsigned int tls_protocols[] = { +#ifdef SSL_OP_NO_SSLv2 + SSL_OP_NO_SSLv2, +#endif +#ifdef SSL_OP_NO_SSLv3 + SSL_OP_NO_SSLv3, +#endif +#ifdef SSL_OP_NO_TLSv1 + SSL_OP_NO_TLSv1, +#endif +#ifdef SSL_OP_NO_TLSv1_1 + SSL_OP_NO_TLSv1_1, +#endif +#ifdef SSL_OP_NO_TLSv1_2 + SSL_OP_NO_TLSv1_2, +#endif + 0, + }; + const char *openssl_tls_options[] = { +#ifdef SSL_OP_NO_SSLv2 + "-ssl2", +#endif +#ifdef SSL_OP_NO_SSLv3 + "-ssl3", +#endif +#ifdef SSL_OP_NO_TLSv1 + "-tls1", +#endif +#ifdef SSL_OP_NO_TLSv1_1 + "-tls1_1", +#endif +#ifdef SSL_OP_NO_TLSv1_2 + "-tls1_2", +#endif + NULL + }; + const char *pattern = "(-(ssl|tls)[[:digit:]]+_*[[:digit:]]*)"; + FILE *f; + char tmp[256]; + char *line; + int retVal, i; + long options = 0; + cherokee_boolean_t known_protocol; + cherokee_buffer_t protocol_option_list = CHEROKEE_BUF_INIT; + cherokee_buffer_t buf = CHEROKEE_BUF_INIT; + ret_t ret; + + for (i = 0; openssl_tls_options[i]; i++) { +#ifdef PATH_OPENSSL_BIN + snprintf(tmp, sizeof (tmp), "%s s_server %s 2>&1", + PATH_OPENSSL_BIN, + openssl_tls_options[i]); +#else + snprintf(tmp, sizeof (tmp), "openssl s_server -%s 2>&1", + openssl_tls_options[i]); +#endif + f = popen(tmp, "r"); + if (f == NULL) { + PRINT_MSG("(critical) Cannot execute '%s'\n", tmp); + ret = ret_error; + goto out; + } + while (!feof(f)) { + /* Skip line until it found the version entry + */ + line = fgets(tmp, sizeof (tmp), f); + if (line == NULL) + continue; + line = strstr(line, openssl_tls_options[i]); + if (line == NULL) + continue; + options |= tls_protocols[i]; + break; + } + pclose(f); + } + if (srv->cryptor != NULL) { + srv->cryptor->hardcoded_ssl_options = options; + } + +#ifdef PATH_OPENSSL_BIN + snprintf(tmp, sizeof (tmp), "%s s_server -help 2>&1", + PATH_OPENSSL_BIN); +#else + snprintf(tmp, sizeof (tmp), "openssl s_server -help 2>&1"); +#endif + snprintf(tmp, sizeof (tmp), "openssl s_server -help 2>&1"); + f = popen(tmp, "r"); + if (f == NULL) { + PRINT_MSG("(critical) Cannot execute '%s'\n", tmp); + ret = ret_error; + goto out; + } + while (!feof(f)) { + line = fgets(tmp, sizeof (tmp), f); + if (line == NULL) + continue; + cherokee_buffer_add(&buf, line, strlen(line)); + } + pclose(f); + retVal = check_for_tls_protocols(&buf, pattern, 0, &protocol_option_list); + if (retVal > 0) { + char *begin; + cherokee_buffer_clean(&buf); + while ((begin = (char *) strsep(&protocol_option_list.buf, ",")) != NULL) { + known_protocol = false; + for (i = 0; openssl_tls_options[i]; i++) { + if (strstr(openssl_tls_options[i], begin)) { + known_protocol = true; + break; + } + } + if (known_protocol == false) { + if (!cherokee_buffer_is_empty(&buf)) { + cherokee_buffer_add_str(&buf, ", "); + } + cherokee_buffer_add(&buf, (begin + 1), strlen(begin) - 1); + } + } + if (!cherokee_buffer_is_empty(&buf)) { + LOG_WARNING(CHEROKEE_ERROR_SERVER_UNKNOWN_TLS_PROTOCOL, buf.buf); + } + } else { + PRINT_MSG("ERROR: No TLS protocol options in 'openssl s_server -help' output. " + "Please issue a bug report.\n"); + } + ret = ret_ok; + +out: + cherokee_buffer_mrproper(&buf); + cherokee_buffer_mrproper(&protocol_option_list); + return ret; +} +#endif + static void wait_process (pid_t pid) { @@ -172,6 +386,55 @@ test_configuration_file (void) } +static ret_t +fake_tls_server_initialization (cherokee_server_t *srv) +{ + ret_t ret; + + cherokee_buffer_t tmp = CHEROKEE_BUF_INIT; + cherokee_buffer_t droot = CHEROKEE_BUF_INIT; + + /* Sanity checka + */ + if (port > 0xFFFF) { + PRINT_ERROR ("Port %d is out of limits\n", port); + return ret_error; + } + if (document_root == NULL) { + PRINT_ERROR ("Document root is not specified\n"); + return ret_error; + } + + /* Build the configuration string + */ + cherokee_buffer_add (&droot, document_root, strlen(document_root)); + cherokee_path_arg_eval (&droot); + + cherokee_buffer_add_va (&tmp, + "server!bind!1!port = %d\n" +#ifdef HAVE_OPENSSL + "server!tls = libssl\n" +#endif + "vserver!1!document_root = %s\n" + BASIC_CONFIG, port, droot.buf); + + /* Apply it + */ + ret = cherokee_server_read_config_string (srv, &tmp); + + cherokee_buffer_mrproper (&tmp); + cherokee_buffer_mrproper (&droot); + + if (ret != ret_ok) { + PRINT_MSG ("Couldn't initialize HTTPS test server\n"); + return ret_error; + } + srv->tls_enabled = true; + + return ret_ok; +} + + static ret_t common_server_initialization (cherokee_server_t *srv) { @@ -249,6 +512,11 @@ common_server_initialization (cherokee_server_t *srv) } } +#ifdef HAVE_OPENSSL + if (add_hardcoded_ssl_options (srv) != ret_ok) { + PRINT_MSG ("Couldn't identify deactivated SSL/TLS protocols\n"); + } +#endif if (daemon_mode) cherokee_server_daemonize (srv); @@ -378,6 +646,21 @@ main (int argc, char **argv) } if (print_modules) { + if (document_root == NULL) { + document_root = WWW_ROOT; + } + if (!port_set) { + port = 443; + } + ret = fake_tls_server_initialization (srv); + if (ret != ret_ok) { + exit (EXIT_ERROR); + } +#ifdef HAVE_OPENSSL + if (add_hardcoded_ssl_options (srv) != ret_ok) { + PRINT_MSG ("Couldn't identify deactivated SSL/TLS protocols\n"); + } +#endif cherokee_info_build_print (srv); exit (EXIT_OK_ONCE); } diff --git a/configure.ac b/configure.ac index d6298f27a..9501adb70 100644 --- a/configure.ac +++ b/configure.ac @@ -1095,14 +1095,48 @@ if test "$WITH_OPENSSL" != "no"; then AC_CHECK_LIB(ssl, SSL_accept, [have_openssl=yes], [have_openssl=no], $LIBSSL_LIBS) if test "$have_openssl" = "yes"; then - LIBSSL_LIBS="$LIBSSL_LIBS -lssl" - - AC_SUBST(LIBSSL_LIBS) - AC_SUBST(LIBSSL_CFLAGS) + TLS_BACK_END="OpenSSL/libssl" + OPENSSL_PATH="$OPENSSL_PATH$PATH_SEPARATOR$PATH" + LIBSSL_LIBS="$LIBSSL_LIBS -lssl -lcrypto" + + AC_SUBST(LIBSSL_LIBS) + AC_SUBST(LIBSSL_CFLAGS) + + AC_DEFINE(HAVE_OPENSSL, 1, [Have OpenSSL library]) + AC_CACHE_CHECK([for a suitable test server to verify $TLS_BACK_END TLS protocol support], [ac_cv_path_OPENSSL_BIN], + [AC_PATH_PROGS_FEATURE_CHECK([OPENSSL_BIN], [openssl], + [v=$($ac_path_OPENSSL_BIN s_server -help 2>&1) + if test $? -eq 0 || [[[ $v == unknown* ]]]; then + TLS_PROTOCOLS=$(echo $v | grep -Eoe '-(ssl|tls)[[0-9]]+[[_]]*[[0-9]]*' | tr '\n' ',' | sed 's/.$//' | sed 's/-//g') + ac_cv_path_OPENSSL_BIN="$ac_path_OPENSSL_BIN" ac_path_OPENSSL_BIN_found=: + fi],, + $OPENSSL_PATH)]) + AC_SUBST(OPENSSL_BIN, [$ac_cv_path_OPENSSL_BIN]) + + AC_SUBST(OPENSSL_TLS_PROTOCOLS, []) + if test -n "$ac_cv_path_OPENSSL_BIN"; then + AC_DEFINE_UNQUOTED(PATH_OPENSSL_BIN, ["$ac_cv_path_OPENSSL_BIN"], [Define path to OpenSSL command-line tool]) + AC_MSG_CHECKING([for $TLS_BACK_END supported SSL/TLS protocols]) + AC_DEFINE_UNQUOTED(TLS_BACK_END_PROTOCOL_VERSIONS, ["$TLS_PROTOCOLS"], [Define TLS protocols supported by OpenSSL/libssl]) + AC_SUBST(OPENSSL_TLS_PROTOCOLS, ["$TLS_PROTOCOLS"]) + AC_MSG_RESULT($TLS_PROTOCOLS) + fi - AC_DEFINE(HAVE_OPENSSL, 1, [Have OpenSSL library]) - AC_PATH_PROG([OPENSSL_BIN], [openssl]) - AC_SUBST(OPENSSL_BIN) + AC_MSG_CHECKING([if Cherokee supports all OpenSSL SSL/TLS protocol versions]) + AC_RUN_IFELSE([AC_LANG_PROGRAM([#include ], + [#ifdef TLS_MAX_VERSION + int max = TLS_MAX_VERSION; + #ifdef TLS1_2_VERSION + if (max > TLS1_2_VERSION) exit(1); + #else + if (max > 0x0303) exit(1); + #endif + #endif])], + [AC_MSG_RESULT(yes)], + [AC_MSG_RESULT(no) + AC_MSG_ERROR([ +*** OpenSSL supports more recent versions of SSL/TLS protocols, which are not recognized by Cherokee. +*** Please check for the latest Cherokee source or update Cherokee source code.])]) fi fi AC_MSG_CHECKING(for libssl) @@ -1274,6 +1308,7 @@ AC_ARG_WITH(wwwroot, AC_HELP_STRING([--with-wwwroot=DIR], [Set the WWW root dire WWW_ROOT="$localstatedir/www" fi ]) +AC_DEFINE_UNQUOTED(WWW_ROOT, "$WWW_ROOT", [WWW root directory]) AC_SUBST(WWW_ROOT) AC_ARG_WITH(cgiroot, AC_HELP_STRING([--with-cgiroot=DIR], [Set the CGI directory]), From 4a527ebc19b4eb8367acb76ad74d8e17e67e15f8 Mon Sep 17 00:00:00 2001 From: Thomas Reim Date: Thu, 1 Apr 2021 12:45:37 +0200 Subject: [PATCH 03/14] Default SSL/TLS cipher set is outdated When using modern and safer certificates, e. g. with ECDSA (Elliptic Curve Digital Signature Algorithm) keys, HTTPS connection setup may be rejected by OpenSSL/libssl due to outdated the cipher set configured by Cherokee webserver. Windows 7 clients for example cannot retrieve automatic proxy configuration via HTTPS anymore. Communication is aborted with typical strange error notifications, e. g.: - System - Provider [ Name] Schannel [ Guid] {1F678132-5938-4686-9FDC-C8FF68F15C85} EventID 36887 Version 0 Level 2 Task 0 Opcode 0 Keywords 0x8000000000000000 - TimeCreated [ SystemTime] 2021-02-03T00:36:24.530185900Z EventRecordID 319818 Correlation - Execution [ ProcessID] 716 [ ThreadID] 764 Channel System Computer local@local.domain - Security [ UserID] S-1-5-18 - EventData AlertDesc 40 Even recent OpenSSL clients may not be able to securely connect to Cherokee webserver. Also here error notifications are not too helpful: CONNECTED(00000003) 139835650114880:error:14094438:SSL routines:ssl3_read_bytes:tlsv1 alert internal error:../ssl/record/rec_layer_s3.c:1543:SSL alert number 80 --- admin/PageVServer.py | 2 +- cherokee/cryptor.h | 3 ++- cherokee/cryptor_libssl.c | 8 ++++++++ 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/admin/PageVServer.py b/admin/PageVServer.py index 14f6e676f..5c4246161 100644 --- a/admin/PageVServer.py +++ b/admin/PageVServer.py @@ -45,7 +45,7 @@ NOTE_CERT = N_('This directive points to the PEM-encoded Certificate file for the server (Full path to the file)') NOTE_CERT_KEY = N_('PEM-encoded Private Key file for the server (Full path to the file)') NOTE_CA_LIST = N_('File containing the trusted CA certificates, utilized for checking the client certificates (Full path to the file)') -NOTE_CIPHERS = N_('Ciphers that TLS/SSL is allowed to use. Reference. (Default enables Forward Secrecy).') +NOTE_CIPHERS = N_('Ciphers that TLSv1.2 and below is allowed to use.') NOTE_CIPHER_SERVER_PREFERENCE = N_('The cipher sequence that is specified by the server should have preference over the client preference. (Default: True).') NOTE_COMPRESSION = N_('Explicitly enable or disable serverside compression support. (Default: Disabled).') NOTE_DH_LENGTH = N_('Explicitely sets the Diffie-Hellman parameters length. (Default: Let openssl choose).') diff --git a/cherokee/cryptor.h b/cherokee/cryptor.h index ca5c590f7..c1cf0b71e 100644 --- a/cherokee/cryptor.h +++ b/cherokee/cryptor.h @@ -35,7 +35,8 @@ CHEROKEE_BEGIN_DECLS -#define CHEROKEE_CIPHERS_DEFAULT "ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA" +#define CHEROKEE_CIPHERS_DEFAULT "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384" +#define CHEROKEE_CIPHERS_OLD "ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA" /* Callback function prototipes */ diff --git a/cherokee/cryptor_libssl.c b/cherokee/cryptor_libssl.c index 16b03b468..fd9163787 100644 --- a/cherokee/cryptor_libssl.c +++ b/cherokee/cryptor_libssl.c @@ -391,6 +391,14 @@ _vserver_new (cherokee_cryptor_t *cryp, EC_KEY *ecdh; #endif +#if OPENSSL_VERSION_NUMBER < 0x10100000L + /* Old OpenSSL back-ends require Mozilla Old cipher configuration + * in order to support SSL/TLS encryption + */ + cherokee_buffer_clean (&vsrv->ciphers); + cherokee_buffer_add_str (&vsrv->ciphers, CHEROKEE_CIPHERS_OLD); +#endif + CHEROKEE_NEW_STRUCT (n, cryptor_vserver_libssl); UNUSED(cryp); From 9044f48fcec197b11146aafecce74ccd55d64731 Mon Sep 17 00:00:00 2001 From: Thomas Reim Date: Thu, 1 Apr 2021 16:11:20 +0200 Subject: [PATCH 04/14] Support of OpenSSL 1.1.1 and TLS v1.3 OpenSSL 1.1.1 was released on 11 September 2018. This is the latest LTS (Long Term Support) release, supported until September 2023. The headline new feature of OpenSSL 1.1.1 is TLSv1.3. This new version of the Transport Layer Security (formerly known as SSL) protocol was published by the IETF as RFC8446. This is a major rewrite of the standard and introduces significant changes, features and improvements which have been reflected in the new OpenSSL version. Main changes to be considered by Cherokee webserver: - Fully compliant implementation of TLSv1.3 (RFC8446) on by default - Support for all five new RFC8446 ciphersuites (TLS v1.3) - Full support of minimum and maximum available TLS protocol version configuration Recently OS distribution maintainers have started to improve OpenSSL security by hardcoded configuration of the min. available TLS protocol version for clients that want to connect to a server using TLS encryption. Cherokee command-line option cherokee -i now reports this hardcoded setting to users. Fixes: https://github.com/cherokee/webserver/issues/1256 Signed-off-by: Thomas Reim --- cherokee/cryptor.c | 16 ++- cherokee/cryptor.h | 4 + cherokee/cryptor_libssl.c | 271 +++++++++++++++++++++++++++++++++----- cherokee/error_list.py | 8 ++ cherokee/main_worker.c | 38 +++--- cherokee/virtual_server.c | 7 + cherokee/virtual_server.h | 1 + configure.ac | 34 +++-- 8 files changed, 319 insertions(+), 60 deletions(-) diff --git a/cherokee/cryptor.c b/cherokee/cryptor.c index 843589956..91e50a250 100644 --- a/cherokee/cryptor.c +++ b/cherokee/cryptor.c @@ -49,12 +49,15 @@ cherokee_cryptor_init_base (cherokee_cryptor_t *cryp, /* Properties */ cryp->hardcoded_ssl_options = 0; - cryp->timeout_handshake = TIMEOUT_DEFAULT; - cryp->allow_SSLv2 = false; - cryp->allow_SSLv3 = false; - cryp->allow_TLSv1 = true; - cryp->allow_TLSv1_1 = true; - cryp->allow_TLSv1_2 = true; + cryp->timeout_handshake = TIMEOUT_DEFAULT; + cryp->min_tls_protocol = 0; + cryp->max_tls_protocol = 0; + cryp->allow_SSLv2 = false; + cryp->allow_SSLv3 = false; + cryp->allow_TLSv1 = true; + cryp->allow_TLSv1_1 = true; + cryp->allow_TLSv1_2 = true; + cryp->allow_TLSv1_3 = true; return ret_ok; } @@ -93,6 +96,7 @@ cherokee_cryptor_configure (cherokee_cryptor_t *cryp, cherokee_config_node_read_bool (conf, "protocol!TLSv1", &cryp->allow_TLSv1); cherokee_config_node_read_bool (conf, "protocol!TLSv1_1", &cryp->allow_TLSv1_1); cherokee_config_node_read_bool (conf, "protocol!TLSv1_2", &cryp->allow_TLSv1_2); + cherokee_config_node_read_bool (conf, "protocol!TLSv1_3", &cryp->allow_TLSv1_3); /* Call the its virtual method */ diff --git a/cherokee/cryptor.h b/cherokee/cryptor.h index c1cf0b71e..efd5425e8 100644 --- a/cherokee/cryptor.h +++ b/cherokee/cryptor.h @@ -35,6 +35,7 @@ CHEROKEE_BEGIN_DECLS +#define CHEROKEE_CIPHERSUITES_DEFAULT "TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256" #define CHEROKEE_CIPHERS_DEFAULT "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384" #define CHEROKEE_CIPHERS_OLD "ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA" @@ -69,11 +70,14 @@ typedef struct { cherokee_module_t module; long hardcoded_ssl_options; cint_t timeout_handshake; + int min_tls_protocol; + int max_tls_protocol; cherokee_boolean_t allow_SSLv2; cherokee_boolean_t allow_SSLv3; cherokee_boolean_t allow_TLSv1; cherokee_boolean_t allow_TLSv1_1; cherokee_boolean_t allow_TLSv1_2; + cherokee_boolean_t allow_TLSv1_3; /* Methods */ cryptor_func_configure_t configure; diff --git a/cherokee/cryptor_libssl.c b/cherokee/cryptor_libssl.c index fd9163787..088cdd0e9 100644 --- a/cherokee/cryptor_libssl.c +++ b/cherokee/cryptor_libssl.c @@ -70,6 +70,10 @@ static DH *dh_param_4096 = NULL; } while(0) #define CRYPTOR_VSRV_SSL_OPTIONS(v) \ VSERVER_SRV(v)->cryptor->hardcoded_ssl_options +#define CRYPTOR_VSRV_MIN_TLS_PROTOCOL(v) \ + VSERVER_SRV(v)->cryptor->min_tls_protocol +#define CRYPTOR_VSRV_MAX_TLS_PROTOCOL(v) \ + VSERVER_SRV(v)->cryptor->max_tls_protocol #define PROTOCOL_SWITCHED_OFF(prot, opt, vsrv) \ ((opt & prot) | (CRYPTOR_VSRV_SSL_OPTIONS(vsrv) & prot)) > 0 @@ -111,6 +115,97 @@ _free (cherokee_cryptor_libssl_t *cryp) return ret_ok; } +static ret_t +_tls_protocol_version_to_text(int protocol_version, + cherokee_buffer_t *buf) +{ + switch (protocol_version) { +#ifdef SSL_TXT_SSLV3 + case SSL3_VERSION: + cherokee_buffer_add_str (buf, SSL_TXT_SSLV3); + break; +#endif +#ifdef SSL_TXT_TLSV1 + case TLS1_VERSION: + cherokee_buffer_add_str (buf, SSL_TXT_TLSV1); + break; +#endif +#ifdef SSL_TXT_TLSV1_1 + case TLS1_1_VERSION: + cherokee_buffer_add_str (buf, SSL_TXT_TLSV1_1); + break; +#endif +#ifdef SSL_TXT_TLSV1_2 + case TLS1_2_VERSION: + cherokee_buffer_add_str (buf, SSL_TXT_TLSV1_2); + break; +#endif +#ifdef TLS1_3_VERSION + case TLS1_3_VERSION: + cherokee_buffer_add_str (buf, "TLSv1.3"); + break; +#endif + default: + return ret_error; + } + return ret_ok; +} + +static ret_t +try_read_protocol_version(cherokee_config_node_t *conf, + const char *key, + int *protocol_version) { + ret_t ret; + cherokee_buffer_t *buf; + char *tmp; + + ret = cherokee_config_node_read(conf, key, &buf); + if (ret != ret_ok) { + ret = ret_ok; + goto out; + } +#ifdef SSL_TXT_SSLV3 + if (equal_buf_str(buf, "SSLv3")) { + *protocol_version = SSL3_VERSION; + goto out; + } +#endif +#ifdef SSL_TXT_TLSV1 + if (equal_buf_str(buf, "TLSv1")) { + *protocol_version = TLS1_VERSION; + goto out; + } +#endif +#ifdef SSL_TXT_TLSV1_1 + if (equal_buf_str(buf, "TLSv1.1")) { + *protocol_version = TLS1_1_VERSION; + goto out; + } +#endif +#ifdef SSL_TXT_TLSV1_2 + if (equal_buf_str(buf, "TLSv1.2")) { + *protocol_version = TLS1_2_VERSION; + goto out; + } +#endif +#ifdef TLS1_3_VERSION + if (equal_buf_str(buf, "TLSv1.3")) { + *protocol_version = TLS1_3_VERSION; + goto out; + } +#endif + tmp = strstr(buf->buf, "auto"); + if (tmp != NULL) { + *protocol_version = 0; + } else { + TRACE(ENTRIES, "Unknown TLS protocol version: %s\n", buf->buf); + ret = ret_error; + } + +out: + return ret; +} + static ret_t try_read_dh_param(cherokee_config_node_t *conf, DH **dh, @@ -172,6 +267,14 @@ _configure (cherokee_cryptor_t *cryp, UNUSED(cryp); UNUSED(srv); +#ifdef HAVE_SSL_CTX_GET_MIN_PROTO_VERSION + ret = try_read_protocol_version(conf, "protocol!min", &cryp->min_tls_protocol); + if (ret != ret_ok) + return ret; + ret = try_read_protocol_version(conf, "protocol!max", &cryp->max_tls_protocol); + if (ret != ret_ok) + return ret; +#endif ret = try_read_dh_param (conf, &dh_param_512, 512); if (ret != ret_ok) return ret; @@ -415,7 +518,11 @@ _vserver_new (cherokee_cryptor_t *cryp, /* Init the OpenSSL context */ +#if OPENSSL_VERSION_NUMBER < 0x10100000L n->context = SSL_CTX_new (SSLv23_server_method()); +#else + n->context = SSL_CTX_new (TLS_server_method()); +#endif if (n->context == NULL) { LOG_ERROR_S(CHEROKEE_ERROR_SSL_ALLOCATE_CTX); goto error; @@ -458,6 +565,42 @@ _vserver_new (cherokee_cryptor_t *cryp, } #endif + /* Set minimum and maximum supported TLS protocol version parameters + */ +#ifdef HAVE_SSL_CTX_GET_MIN_PROTO_VERSION + if (cryp->min_tls_protocol > 0) { + rc = SSL_CTX_set_min_proto_version (n->context, + cryp->min_tls_protocol); + if (rc != 1) { + cherokee_buffer_t tmp = CHEROKEE_BUF_INIT; + if (_tls_protocol_version_to_text(cryp->min_tls_protocol, &tmp) != ret_ok) { + cherokee_buffer_add_str (&tmp, "unknown protocol"); + } + cherokee_buffer_add_va (&tmp, " (%d)", cryp->min_tls_protocol); + OPENSSL_LAST_ERROR(error); + LOG_ERROR(CHEROKEE_ERROR_SSL_MIN_MAX_PROTOCOL, tmp.buf, error); + cherokee_buffer_mrproper(&tmp); + goto error; + } + } + if (cryp->max_tls_protocol > 0) { + rc = SSL_CTX_set_max_proto_version (n->context, cryp->max_tls_protocol); + if (rc != 1) { + cherokee_buffer_t tmp = CHEROKEE_BUF_INIT; + if (_tls_protocol_version_to_text(cryp->max_tls_protocol, &tmp) != ret_ok) { + cherokee_buffer_add_str (&tmp, "unknown protocol"); + } + cherokee_buffer_add_va (&tmp, " (%d)", cryp->max_tls_protocol); + OPENSSL_LAST_ERROR(error); + LOG_ERROR(CHEROKEE_ERROR_SSL_MIN_MAX_PROTOCOL, tmp.buf, error); + cherokee_buffer_mrproper(&tmp); + goto error; + } + } + + CLEAR_LIBSSL_ERRORS; +#endif + /* Set the SSL context options: */ options = SSL_OP_ALL; @@ -470,27 +613,36 @@ _vserver_new (cherokee_cryptor_t *cryp, options |= SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS; #endif +#ifdef SSL_OP_NO_SSLv2 if (! cryp->allow_SSLv2) { options |= SSL_OP_NO_SSLv2; } - +#endif +#ifdef SSL_OP_NO_SSLv3 if (! cryp->allow_SSLv3) { options |= SSL_OP_NO_SSLv3; } - +#endif +#ifdef SSL_OP_NO_TLSv1 if (! cryp->allow_TLSv1) { options |= SSL_OP_NO_TLSv1; } - -#if OPENSSL_VERSION_NUMBER >= 0x10001000L +#endif +#ifdef SSL_OP_NO_TLSv1_1 if (! cryp->allow_TLSv1_1) { options |= SSL_OP_NO_TLSv1_1; } - +#endif +#ifdef SSL_OP_NO_TLSv1_2 if (! cryp->allow_TLSv1_2) { options |= SSL_OP_NO_TLSv1_2; } #endif +#ifdef SSL_OP_NO_TLSv1_3 + if (! cryp->allow_TLSv1_3) { + options |= SSL_OP_NO_TLSv1_3; + } +#endif #ifdef SSL_OP_CIPHER_SERVER_PREFERENCE if (vsrv->cipher_server_preference) { @@ -522,6 +674,20 @@ _vserver_new (cherokee_cryptor_t *cryp, } } +#ifdef HAVE_SSL_CTX_SET_CIPHERSUITES + /* Set ciphersuites that vserver will accept. + */ + if (! cherokee_buffer_is_empty (&vsrv->ciphersuites)) { + rc = SSL_CTX_set_ciphersuites (n->context, vsrv->ciphersuites.buf); + if (rc != 1) { + OPENSSL_LAST_ERROR(error); + LOG_ERROR(CHEROKEE_ERROR_SSL_CIPHERSUITE, + vsrv->ciphersuites.buf, error); + goto error; + } + } +#endif + CLEAR_LIBSSL_ERRORS; /* Certificate @@ -1146,7 +1312,11 @@ _client_init_tls (cherokee_cryptor_client_libssl_t *cryp, /* New context */ +#if OPENSSL_VERSION_NUMBER < 0x10100000L cryp->ssl_ctx = SSL_CTX_new (SSLv23_client_method()); +#else + cryp->ssl_ctx = SSL_CTX_new (TLS_client_method()); +#endif if (cryp->ssl_ctx == NULL) { OPENSSL_LAST_ERROR(error); LOG_CRITICAL (CHEROKEE_ERROR_SSL_CREATE_CTX, error); @@ -1306,13 +1476,15 @@ _tls_backend_info (cherokee_cryptor_t *cryp, #if OPENSSL_VERSION_NUMBER >= 0x10100000L # ifdef SSL_TXT_SSLV3 + if (SSL_set_min_proto_version (session, SSL3_VERSION) == 1) { # ifdef SSL_OP_NO_SSLv3 - if ((options & SSL_OP_NO_SSLv3) == 0) { - cherokee_buffer_add_str (tls_protocols_buf, SSL_TXT_SSLV3); - } + if ((options & SSL_OP_NO_SSLv3) == 0) { + cherokee_buffer_add_str (tls_protocols_buf, SSL_TXT_SSLV3); + } # else - cherokee_buffer_add_str (tls_protocols_buf, SSL_TXT_SSLV3); + cherokee_buffer_add_str (tls_protocols_buf, SSL_TXT_SSLV3); # endif + } # ifdef SSL_OP_NO_SSLv3 if ((cryp->hardcoded_ssl_options & SSL_OP_NO_SSLv3) > 0) { cherokee_buffer_add_str (deactivated_protocols_buf, SSL_TXT_SSLV3); @@ -1320,19 +1492,21 @@ _tls_backend_info (cherokee_cryptor_t *cryp, # endif # endif # ifdef SSL_TXT_TLSV1 + if (SSL_set_min_proto_version (session, TLS1_VERSION) == 1) { # ifdef SSL_OP_NO_TLSv1 - if ((options & SSL_OP_NO_TLSv1) == 0) { + if ((options & SSL_OP_NO_TLSv1) == 0) { + if (! cherokee_buffer_is_empty(tls_protocols_buf)) { + cherokee_buffer_add_str (tls_protocols_buf, ", "); + } + cherokee_buffer_add_str (tls_protocols_buf, SSL_TXT_TLSV1); + } +# else if (! cherokee_buffer_is_empty(tls_protocols_buf)) { cherokee_buffer_add_str (tls_protocols_buf, ", "); } cherokee_buffer_add_str (tls_protocols_buf, SSL_TXT_TLSV1); - } -# else - if (! cherokee_buffer_is_empty(tls_protocols_buf)) { - cherokee_buffer_add_str (tls_protocols_buf, ", "); - } - cherokee_buffer_add_str (tls_protocols_buf, SSL_TXT_TLSV1); # endif + } # ifdef SSL_OP_NO_TLSv1 if ((cryp->hardcoded_ssl_options & SSL_OP_NO_TLSv1) > 0) { if (! cherokee_buffer_is_empty(deactivated_protocols_buf)) { @@ -1342,19 +1516,21 @@ _tls_backend_info (cherokee_cryptor_t *cryp, } # endif # endif + if (SSL_set_min_proto_version (session, TLS1_1_VERSION) == 1) { # ifdef SSL_OP_NO_TLSv1_1 - if ((options & SSL_OP_NO_TLSv1_1) == 0) { + if ((options & SSL_OP_NO_TLSv1_1) == 0) { + if (! cherokee_buffer_is_empty(tls_protocols_buf)) { + cherokee_buffer_add_str (tls_protocols_buf, ", "); + } + cherokee_buffer_add_str (tls_protocols_buf, SSL_TXT_TLSV1_1); + } +# else if (! cherokee_buffer_is_empty(tls_protocols_buf)) { cherokee_buffer_add_str (tls_protocols_buf, ", "); } cherokee_buffer_add_str (tls_protocols_buf, SSL_TXT_TLSV1_1); - } -# else - if (! cherokee_buffer_is_empty(tls_protocols_buf)) { - cherokee_buffer_add_str (tls_protocols_buf, ", "); - } - cherokee_buffer_add_str (tls_protocols_buf, SSL_TXT_TLSV1_1); # endif + } # ifdef SSL_OP_NO_TLSv1_1 if ((cryp->hardcoded_ssl_options & SSL_OP_NO_TLSv1_1) > 0) { if (! cherokee_buffer_is_empty(deactivated_protocols_buf)) { @@ -1363,19 +1539,21 @@ _tls_backend_info (cherokee_cryptor_t *cryp, cherokee_buffer_add_str (deactivated_protocols_buf, SSL_TXT_TLSV1_1); } # endif + if (SSL_set_min_proto_version (session, TLS1_2_VERSION) == 1) { # ifdef SSL_OP_NO_TLSv1_2 - if ((options & SSL_OP_NO_TLSv1_2) == 0) { + if ((options & SSL_OP_NO_TLSv1_2) == 0) { + if (! cherokee_buffer_is_empty(tls_protocols_buf)) { + cherokee_buffer_add_str (tls_protocols_buf, ", "); + } + cherokee_buffer_add_str (tls_protocols_buf, SSL_TXT_TLSV1_2); + } +# else if (! cherokee_buffer_is_empty(tls_protocols_buf)) { cherokee_buffer_add_str (tls_protocols_buf, ", "); } cherokee_buffer_add_str (tls_protocols_buf, SSL_TXT_TLSV1_2); - } -# else - if (! cherokee_buffer_is_empty(tls_protocols_buf)) { - cherokee_buffer_add_str (tls_protocols_buf, ", "); - } - cherokee_buffer_add_str (tls_protocols_buf, SSL_TXT_TLSV1_2); # endif + } # ifdef SSL_OP_NO_TLSv1_2 if ((cryp->hardcoded_ssl_options & SSL_OP_NO_TLSv1_2) > 0) { if (! cherokee_buffer_is_empty(deactivated_protocols_buf)) { @@ -1383,6 +1561,39 @@ _tls_backend_info (cherokee_cryptor_t *cryp, } cherokee_buffer_add_str (deactivated_protocols_buf, SSL_TXT_TLSV1_2); } +# endif + if (SSL_set_min_proto_version (session, TLS1_3_VERSION) == 1) { +# ifdef SSL_OP_NO_TLSv1_3 + if ((options & SSL_OP_NO_TLSv1_3) == 0) { + if (! cherokee_buffer_is_empty(tls_protocols_buf)) { + cherokee_buffer_add_str (tls_protocols_buf, ", "); + } + cherokee_buffer_add_str (tls_protocols_buf, "TLSv1.3"); + } +# else + if (! cherokee_buffer_is_empty(tls_protocols_buf)) { + cherokee_buffer_add_str (tls_protocols_buf, ", "); + } + cherokee_buffer_add_str (tls_protocols_buf, "TLSv1.3"); +# endif + } +# ifdef SSL_OP_NO_TLSv1_3 + if ((cryp->hardcoded_ssl_options & SSL_OP_NO_TLSv1_3) > 0) { + if (! cherokee_buffer_is_empty(deactivated_protocols_buf)) { + cherokee_buffer_add_str (deactivated_protocols_buf, ", "); + } + cherokee_buffer_add_str (deactivated_protocols_buf, "TLSv1.3"); + } +# endif +# ifdef HAVE_SSL_CTX_GET_MIN_PROTO_VERSION + version = SSL_CTX_get_min_proto_version (ctx); + if (version > 0) { + cherokee_buffer_add_str (tls_protocols_buf, " - default min. protocol: "); + if (_tls_protocol_version_to_text(version, tls_protocols_buf) != ret_ok) { + cherokee_buffer_add_va (tls_protocols_buf, + "unknown protocol (%04x)", version); + } + } # endif #endif diff --git a/cherokee/error_list.py b/cherokee/error_list.py index dd86cef6a..5f67c83da 100644 --- a/cherokee/error_list.py +++ b/cherokee/error_list.py @@ -1300,6 +1300,14 @@ title = "OpenSSL: cannot set cipher list '%s': %s", desc = SYSTEM_ISSUE) +e('SSL_CIPHERSUITE', + title = "OpenSSL: cannot set ciphersuite list '%s': %s", + desc = SYSTEM_ISSUE) + +e('SSL_MIN_MAX_PROTOCOL', + title = "OpenSSL: cannot set minimum and maximum supported TLS protocol version '%s': %s", + desc = SYSTEM_ISSUE) + e('SSL_CERTIFICATE', title = "OpenSSL: cannot use certificate file '%s': %s", desc = "An error occured while trying to load a certificate into the SSL context structure. Most likely the certificate file is wrong or has been corrupted.") diff --git a/cherokee/main_worker.c b/cherokee/main_worker.c index f8610d73f..cd82c2388 100644 --- a/cherokee/main_worker.c +++ b/cherokee/main_worker.c @@ -173,42 +173,48 @@ check_for_tls_protocols(cherokee_buffer_t *buf, const char *regex, int options, static ret_t add_hardcoded_ssl_options (cherokee_server_t *srv) { - unsigned int tls_protocols[] = { + unsigned int tls_protocols[] = { #ifdef SSL_OP_NO_SSLv2 - SSL_OP_NO_SSLv2, + SSL_OP_NO_SSLv2, #endif #ifdef SSL_OP_NO_SSLv3 - SSL_OP_NO_SSLv3, + SSL_OP_NO_SSLv3, #endif #ifdef SSL_OP_NO_TLSv1 - SSL_OP_NO_TLSv1, + SSL_OP_NO_TLSv1, #endif #ifdef SSL_OP_NO_TLSv1_1 - SSL_OP_NO_TLSv1_1, + SSL_OP_NO_TLSv1_1, #endif #ifdef SSL_OP_NO_TLSv1_2 - SSL_OP_NO_TLSv1_2, + SSL_OP_NO_TLSv1_2, #endif - 0, - }; - const char *openssl_tls_options[] = { +#ifdef SSL_OP_NO_TLSv1_3 + SSL_OP_NO_TLSv1_3, +#endif + 0, + }; + const char *openssl_tls_options[] = { #ifdef SSL_OP_NO_SSLv2 - "-ssl2", + "-ssl2", #endif #ifdef SSL_OP_NO_SSLv3 - "-ssl3", + "-ssl3", #endif #ifdef SSL_OP_NO_TLSv1 - "-tls1", + "-tls1", #endif #ifdef SSL_OP_NO_TLSv1_1 - "-tls1_1", + "-tls1_1", #endif #ifdef SSL_OP_NO_TLSv1_2 - "-tls1_2", + "-tls1_2", +#endif +#ifdef SSL_OP_NO_TLSv1_3 + "-tls1_3", #endif - NULL - }; + NULL + }; const char *pattern = "(-(ssl|tls)[[:digit:]]+_*[[:digit:]]*)"; FILE *f; char tmp[256]; diff --git a/cherokee/virtual_server.c b/cherokee/virtual_server.c index 18e48c767..2a43cd105 100644 --- a/cherokee/virtual_server.c +++ b/cherokee/virtual_server.c @@ -92,6 +92,8 @@ cherokee_virtual_server_new (cherokee_virtual_server_t **vserver, void *server) cherokee_buffer_init (&n->ciphers); cherokee_buffer_add_str (&n->ciphers, CHEROKEE_CIPHERS_DEFAULT); + cherokee_buffer_init (&n->ciphersuites); + cherokee_buffer_add_str (&n->ciphersuites, CHEROKEE_CIPHERSUITES_DEFAULT); ret = cherokee_buffer_init (&n->root); if (unlikely(ret < ret_ok)) @@ -119,6 +121,7 @@ cherokee_virtual_server_free (cherokee_virtual_server_t *vserver) cherokee_buffer_mrproper (&vserver->server_key); cherokee_buffer_mrproper (&vserver->certs_ca); cherokee_buffer_mrproper (&vserver->ciphers); + cherokee_buffer_mrproper (&vserver->ciphersuites); if (vserver->flcache != NULL) { cherokee_flcache_free (vserver->flcache); @@ -1156,6 +1159,10 @@ configure_virtual_server_property (cherokee_config_node_t *conf, void *data) return ret_error; } + } else if (equal_buf_str (&conf->key, "ssl_ciphersuites")) { + cherokee_buffer_clean (&vserver->ciphersuites); + cherokee_buffer_add_buffer (&vserver->ciphersuites, &conf->val); + } else if (equal_buf_str (&conf->key, "ssl_ciphers")) { cherokee_buffer_clean (&vserver->ciphers); cherokee_buffer_add_buffer (&vserver->ciphers, &conf->val); diff --git a/cherokee/virtual_server.h b/cherokee/virtual_server.h index b7eaacb41..8b989caeb 100644 --- a/cherokee/virtual_server.h +++ b/cherokee/virtual_server.h @@ -82,6 +82,7 @@ typedef struct { cherokee_buffer_t certs_ca; cherokee_req_client_cert_t req_client_certs; cherokee_buffer_t ciphers; + cherokee_buffer_t ciphersuites; cherokee_boolean_t cipher_server_preference; cherokee_boolean_t ssl_compression; cuint_t ssl_dh_length; diff --git a/configure.ac b/configure.ac index 9501adb70..96cdeec05 100644 --- a/configure.ac +++ b/configure.ac @@ -1090,17 +1090,19 @@ if test "$WITH_OPENSSL" != "no"; then LIBSSL_LIBS="-L$WITH_OPENSSL/lib" fi - AC_CHECK_LIB(crypto, BN_init) - AC_CHECK_HEADERS([openssl/engine.h]) - AC_CHECK_LIB(ssl, SSL_accept, [have_openssl=yes], [have_openssl=no], $LIBSSL_LIBS) + AC_CHECK_LIB(crypto, CRYPTO_new_ex_data, [], [AC_MSG_ERROR([library 'crypto' is required for OpenSSL])]) + have_openssl="no" + AC_CHECK_LIB(ssl, OPENSSL_init_ssl, [have_openssl="yes"]) + AC_CHECK_LIB(ssl, SSL_library_init, [have_openssl="yes"]) + AC_CHECK_LIB(ssl, SSL_accept, [have_openssl=yes]) if test "$have_openssl" = "yes"; then TLS_BACK_END="OpenSSL/libssl" OPENSSL_PATH="$OPENSSL_PATH$PATH_SEPARATOR$PATH" LIBSSL_LIBS="$LIBSSL_LIBS -lssl -lcrypto" - AC_SUBST(LIBSSL_LIBS) - AC_SUBST(LIBSSL_CFLAGS) + AC_SUBST(LIBSSL_LIBS) + AC_SUBST(LIBSSL_CFLAGS) AC_DEFINE(HAVE_OPENSSL, 1, [Have OpenSSL library]) AC_CACHE_CHECK([for a suitable test server to verify $TLS_BACK_END TLS protocol support], [ac_cv_path_OPENSSL_BIN], @@ -1126,10 +1128,10 @@ if test "$WITH_OPENSSL" != "no"; then AC_RUN_IFELSE([AC_LANG_PROGRAM([#include ], [#ifdef TLS_MAX_VERSION int max = TLS_MAX_VERSION; - #ifdef TLS1_2_VERSION - if (max > TLS1_2_VERSION) exit(1); + #ifdef TLS1_3_VERSION + if (max > TLS1_3_VERSION) exit(1); #else - if (max > 0x0303) exit(1); + if (max > 0x0304) exit(1); #endif #endif])], [AC_MSG_RESULT(yes)], @@ -1137,6 +1139,22 @@ if test "$WITH_OPENSSL" != "no"; then AC_MSG_ERROR([ *** OpenSSL supports more recent versions of SSL/TLS protocols, which are not recognized by Cherokee. *** Please check for the latest Cherokee source or update Cherokee source code.])]) + + AC_SUBST(USE_OPENSSL_MIN_MAX_PROTOCOL, [False]) + AC_MSG_CHECKING([for SSL_CTX_get_min_proto_version() in $TLS_BACK_END]) + AC_RUN_IFELSE([AC_LANG_PROGRAM([#include ], + [#ifndef SSL_CTRL_GET_MIN_PROTO_VERSION + exit(1); + #endif])], + [AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_SSL_CTX_GET_MIN_PROTO_VERSION, [1], [OpenSSL/libssl has SSL_CTX_get_min_proto_version() function]) + AC_SUBST(USE_OPENSSL_MIN_MAX_PROTOCOL, [True])], + [AC_MSG_RESULT(no)]) + + AC_CHECK_LIB(ssl, SSL_CTX_set_ciphersuites, [have_openssl_ciphersuites=yes], [have_openssl_ciphersuites=no]) + if test "$have_openssl_ciphersuites" = "yes"; then + AC_DEFINE(HAVE_SSL_CTX_SET_CIPHERSUITES, 1, [OpenSSL/libssl has SSL_CTX_set_ciphersuites() function]) + fi fi fi AC_MSG_CHECKING(for libssl) From 92d543d0468ca80837325be9575e3f1eb7a77f08 Mon Sep 17 00:00:00 2001 From: Thomas Reim Date: Thu, 1 Apr 2021 16:48:39 +0200 Subject: [PATCH 05/14] Cherokee Admin: Configuration of new OpenSSL 1.1.1 features The Advanced page has been restructured and is now displayed in two flavours: 1.) OpenSSL version 1.1.1 and later Configuration of SSL/TLS protocols is now focused on setting minimum and maximum available protocol versions. Since OpenSSL 1.1.1 disabling of selected has been deprecated. This section plus a warning has been moved to the page's bottom. 2.) OpenSSL version 1.1.0 and below System administrator still have to disable selected SSL/TLS protocol versions that Cherokee webserver should not offer to its clients. TLS v1.3 has been added to the page. On the Virtual Server page Ciphersuites have been added and the hint where to find suited and safe cipher sets has been adapted to recommend Mozilla Intermediate compatibility ciphers for OpenSSL 1.1.1 and later. Mozilla Old compatibility ciphers are recommended of using OpenSSL version 1.1.0 and below as TLS back-end. Fixes: https://github.com/cherokee/webserver/issues/1256 Signed-off-by: Thomas Reim --- admin/Makefile.am | 4 ++- admin/PageAdvanced.py | 67 +++++++++++++++++++++++++++++++++++------ admin/PageVServer.py | 11 ++++++- admin/configured.py.pre | 1 + 4 files changed, 72 insertions(+), 11 deletions(-) diff --git a/admin/Makefile.am b/admin/Makefile.am index 3109e7287..0a090e981 100644 --- a/admin/Makefile.am +++ b/admin/Makefile.am @@ -9,13 +9,15 @@ endif SUFFIXES = .py.pre .py if USE_OPENSSL +minmaxtls = @USE_OPENSSL_MIN_MAX_PROTOCOL@ tlsprotocols = @OPENSSL_TLS_PROTOCOLS@ else +minmaxtls = False tlsprotocols = endif .py.pre.py: - sed -e "s|%sysconfdir%|${sysconfdir}|g; s|%sbindir%|${sbindir}|g; s|%docdir%|${docdir}|g; s|%prefix%|${prefix}|g; s|%localstatedir%|${localstatedir}|g; s|%libdir%|${libdir}|g; s|%wwwroot%|${WWW_ROOT}|g; s|%version%|${PACKAGE_VERSION}|g; s|%phpcgi%|${PHPCGI}|g; s|%datadir%|${datadir}|g; s|%localedir%|${localedir}|g; s|%tlsprotocols%|$(tlsprotocols)|g" $< > $@ + sed -e "s|%sysconfdir%|${sysconfdir}|g; s|%sbindir%|${sbindir}|g; s|%docdir%|${docdir}|g; s|%prefix%|${prefix}|g; s|%localstatedir%|${localstatedir}|g; s|%libdir%|${libdir}|g; s|%wwwroot%|${WWW_ROOT}|g; s|%version%|${PACKAGE_VERSION}|g; s|%phpcgi%|${PHPCGI}|g; s|%datadir%|${datadir}|g; s|%localedir%|${localedir}|g; s|%minmaxtls%|$(minmaxtls)|g; s|%tlsprotocols%|$(tlsprotocols)|g" $< > $@ PY_PRE = \ configured.py.pre diff --git a/admin/PageAdvanced.py b/admin/PageAdvanced.py index 7b977e833..074b52105 100644 --- a/admin/PageAdvanced.py +++ b/admin/PageAdvanced.py @@ -39,7 +39,8 @@ ('SSLv3', 'SSL version 3'), ('TLSv1', 'TLS version 1'), ('TLSv1.1', 'TLS version 1.1'), - ('TLSv1.2', 'TLS version 1.2') + ('TLSv1.2', 'TLS version 1.2'), + ('TLSv1.3', 'TLS version 1.3') ] # Keep aligned with cherokee_cryptor_init_base() @@ -48,7 +49,8 @@ 'SSLv3': True, 'TLSv1': False, 'TLSv1.1': False, - 'TLSv1.2': False + 'TLSv1.2': False, + 'TLSv1.3': False } TLS_WARNING = N_("""

WARNING: The SSL/TLS back-end supports more recent @@ -81,6 +83,7 @@ ("server!tls!protocol!TLSv1", validations.is_boolean), ("server!tls!protocol!TLSv1_1", validations.is_boolean), ("server!tls!protocol!TLSv1_2", validations.is_boolean), + ("server!tls!protocol!TLSv1_3", validations.is_boolean), ("server!tls!timeout_handshake", validations.is_positive_int), ("server!tls!dh_param512", validations.is_local_file_exists), ("server!tls!dh_param1024", validations.is_local_file_exists), @@ -124,13 +127,19 @@ NOTE_TLS_TLSv1 = N_('TLSv1 is deprecated') NOTE_TLS_TLSv1_1 = N_('TLSv1.1 is deprecated') NOTE_TLS_TLSv1_2 = N_(' ') +NOTE_TLS_TLSv1_3 = N_(' ') +NOTE_TLS_DISABLE = N_('The following options work in combination with above min/max TLS protocol version settings. ' + 'They are deprecated, only set the minimum and maximum supported protocol versions instead.') +NOTE_TLS_MIN = N_('Minimum required TLS protocol version from clients (Default: auto-configured by libssl)') +NOTE_TLS_MAX = N_('Maximum supported TLS protocol version (Default: auto-configured by libssl)') TLS_PROTOCOL_NOTES = { 'SSLv2': NOTE_TLS_SSLv2, 'SSLv3': NOTE_TLS_SSLv3, 'TLSv1': NOTE_TLS_TLSv1, 'TLSv1.1': NOTE_TLS_TLSv1_1, - 'TLSv1.2': NOTE_TLS_TLSv1_2 + 'TLSv1.2': NOTE_TLS_TLSv1_2, + 'TLSv1.3': NOTE_TLS_TLSv1_3 } HELPS = [('config_advanced', N_('Advanced'))] @@ -235,17 +244,53 @@ def add_tls_version_config (self, table): else: table.Add ('%s%s' % (_('Disable '), protocol[1]), CTK.CheckCfgText('server!tls!protocol!' + protocol[0].replace('.','_'), True, _("Protocol deacrivated") if protocol[0].startswith('SSLv') else _("Protocol not supported"), props_disable), TLS_PROTOCOL_NOTES[protocol[0]]) + @staticmethod + def add_tls_version_disable_section (self): + props = {} + props = {'mode': 'inverse'} + props_disable = props.copy() + props_disable["disabled"] = 1 + table = CTK.PropsAuto(URL_APPLY) + for protocol in KNOWN_TLS_PROTOCOLS: + if self.available_tls_protocols.has_key(protocol[0]): + table.Add ('%s%s' % (_('Disable '), self.available_tls_protocols[protocol[0]]), CTK.CheckCfgText('server!tls!protocol!' + protocol[0].replace('.','_'), TLS_PROTOCOL_CHECKBOX_DEFAULT[protocol[0]], _("Disable"), props), "") + else: + table.Add ('%s%s' % (_('Disable '), protocol[1]), CTK.CheckCfgText('server!tls!protocol!' + protocol[0].replace('.','_'), True, _("Protocol deactivated"), props_disable), "") + + self += CTK.RawHTML ("

%s

" %(_('Turn off selected TLS Protocols (Deprecated)'))) + tip = '%s' %(_(NOTE_TLS_DISABLE)) + props = {'class': 'dialog-information-slim'} + self += CTK.Indenter (CTK.Notice ('information', CTK.RawHTML(tip), props)) + self += CTK.Indenter(table) + def __init__ (self): CTK.Container.__init__ (self) + tls_min_protocols = [('auto', N_('auto-configured'))] + tls_max_protocols = [('auto', N_('auto-configured'))] + + if MINMAXTLS == True and KNOWN_TLS_PROTOCOLS[0][0] == 'SSLv2': + # Staring with OpenSSL 1.1.1, i. e. MINMAXTLS = True SSLv2 has been removed + KNOWN_TLS_PROTOCOLS.pop(0) self.available_tls_protocols, self.unknown_tls_protocols = TLSWidget.check_for_tls_protocol_versions (self) table = CTK.PropsAuto(URL_APPLY) - TLSWidget.add_tls_version_config (self, table) - table.Add (_('Handshake Timeout'), CTK.TextCfg('server!tls!timeout_handshake', True), _(NOTE_TLS_TIMEOUT)) - table.Add (_('DH parameters: 512 bits'), CTK.TextCfg('server!tls!dh_param512', True), _(NOTE_DH512)) - table.Add (_('DH parameters: 1024 bits'), CTK.TextCfg('server!tls!dh_param1024', True), _(NOTE_DH1024)) - table.Add (_('DH parameters: 2048 bits'), CTK.TextCfg('server!tls!dh_param2048', True), _(NOTE_DH2048)) - table.Add (_('DH parameters: 4096 bits'), CTK.TextCfg('server!tls!dh_param4096', True), _(NOTE_DH4096)) + if MINMAXTLS == False: + TLSWidget.add_tls_version_config (self, table) + else: + for protocol in KNOWN_TLS_PROTOCOLS: + if self.available_tls_protocols.has_key(protocol[0]): + tls_min_protocols.append((protocol[0], N_(self.available_tls_protocols[protocol[0]]))) + table.Add (_('Min. TLS protocol version'), CTK.ComboCfg('server!tls!protocol!min', trans_options(tls_min_protocols)), _(NOTE_TLS_MIN)) + KNOWN_TLS_PROTOCOLS.reverse() + for protocol in KNOWN_TLS_PROTOCOLS: + if self.available_tls_protocols.has_key(protocol[0]): + tls_max_protocols.append((protocol[0], N_(self.available_tls_protocols[protocol[0]]))) + table.Add (_('Max. TLS protocol version'), CTK.ComboCfg('server!tls!protocol!max', trans_options(tls_max_protocols)), _(NOTE_TLS_MAX)) + table.Add (_('Handshake Timeout'), CTK.TextCfg('server!tls!timeout_handshake', True), _(NOTE_TLS_TIMEOUT)) + table.Add (_('DH parameters: 512 bits'), CTK.TextCfg('server!tls!dh_param512', True), _(NOTE_DH512)) + table.Add (_('DH parameters: 1024 bits'), CTK.TextCfg('server!tls!dh_param1024', True), _(NOTE_DH1024)) + table.Add (_('DH parameters: 2048 bits'), CTK.TextCfg('server!tls!dh_param2048', True), _(NOTE_DH2048)) + table.Add (_('DH parameters: 4096 bits'), CTK.TextCfg('server!tls!dh_param4096', True), _(NOTE_DH4096)) self += CTK.RawHTML ("

%s

" %(_('TLS'))) if len(self.unknown_tls_protocols) > 0: tip = '%s %s

' % (_(TLS_WARNING), join(self.unknown_tls_protocols)) @@ -256,6 +301,10 @@ def __init__ (self): else: self += CTK.Indenter(table) + if MINMAXTLS == True: + KNOWN_TLS_PROTOCOLS.reverse() + TLSWidget.add_tls_version_disable_section (self) + class Render: def __call__ (self): tabs = CTK.Tab() diff --git a/admin/PageVServer.py b/admin/PageVServer.py index 5c4246161..ab1be7f9c 100644 --- a/admin/PageVServer.py +++ b/admin/PageVServer.py @@ -41,11 +41,15 @@ URL_BASE = '/vserver/content' URL_APPLY = '/vserver/content/apply' +URL_OPENSSL_REFERENCE = '%s' % (_('Reference')) +URL_MOZILLA = 'Mozilla' + NOTE_NICKNAME = N_('Nickname for the virtual server.') NOTE_CERT = N_('This directive points to the PEM-encoded Certificate file for the server (Full path to the file)') NOTE_CERT_KEY = N_('PEM-encoded Private Key file for the server (Full path to the file)') NOTE_CA_LIST = N_('File containing the trusted CA certificates, utilized for checking the client certificates (Full path to the file)') NOTE_CIPHERS = N_('Ciphers that TLSv1.2 and below is allowed to use.') +NOTE_CIPHERSUITES = N_('Ciphersuites that TLSv1.3 is allowed to use.') NOTE_CIPHER_SERVER_PREFERENCE = N_('The cipher sequence that is specified by the server should have preference over the client preference. (Default: True).') NOTE_COMPRESSION = N_('Explicitly enable or disable serverside compression support. (Default: Disabled).') NOTE_DH_LENGTH = N_('Explicitely sets the Diffie-Hellman parameters length. (Default: Let openssl choose).') @@ -661,9 +665,14 @@ def __init__ (self, vsrv_num, refreshable): self += CTK.RawHTML ('

%s

' % (_('Required SSL/TLS Values'))) self += CTK.Indenter (submit) + CIPHER_COMP = 'Intermediate Compatibility' + if MINMAXTLS == False: + CIPHER_COMP = 'Old Compatibility' + # Advanced options table = CTK.PropsTable() - table.Add (_('Ciphers'), CTK.TextCfg ('%s!ssl_ciphers' %(pre), True), _(NOTE_CIPHERS)) + table.Add (_('Ciphersuites'), CTK.TextCfg ('%s!ssl_ciphersuites' %(pre), True), '%s %s. %s: %s Intermediate Compatibility %s.' % (_(NOTE_CIPHERSUITES), URL_OPENSSL_REFERENCE, _('Default'), URL_MOZILLA, _('Ciphersuites'))) + table.Add (_('Ciphers'), CTK.TextCfg ('%s!ssl_ciphers' %(pre), True), '%s %s. %s: %s %s %s' % (_(NOTE_CIPHERS), URL_OPENSSL_REFERENCE, _('Default'), URL_MOZILLA, CIPHER_COMP, _('Ciphers'))) table.Add (_('Server Preference'), CTK.CheckCfgText ('%s!ssl_cipher_server_preference' % (pre), True, _('Prefer')), _(NOTE_CIPHER_SERVER_PREFERENCE)) table.Add (_('Client Certs. Request'), CTK.ComboCfg('%s!ssl_client_certs' %(pre), trans_options(CLIENT_CERTS)), _(NOTE_CLIENT_CERTS)) table.Add (_('Compression'), CTK.CheckCfgText ('%s!ssl_compression' % (pre), False, _('Enable')), _(NOTE_COMPRESSION)) diff --git a/admin/configured.py.pre b/admin/configured.py.pre index 364c9031f..e3cc8e593 100644 --- a/admin/configured.py.pre +++ b/admin/configured.py.pre @@ -10,6 +10,7 @@ SYSCONFDIR = "%sysconfdir%" LOCALSTATE = "%localstatedir%" VERSION = "%version%" TLSPROTOCOLS = "%tlsprotocols%" +MINMAXTLS = %minmaxtls% CHEROKEE_SERVER = join (PREFIX, "sbin/cherokee") CHEROKEE_WORKER = join (PREFIX, "sbin/cherokee-worker") From dd1d6669aa055bf4a0a1badc09df434e5c9b396b Mon Sep 17 00:00:00 2001 From: Thomas Reim Date: Thu, 1 Apr 2021 17:11:00 +0200 Subject: [PATCH 06/14] Remove prohibited use of SSL protocols from configuration file Vulnerable and insecure SSL protocols SSLv2 and SSLv3 must not be used by applications (RFC7568 and RFC6176). Recent scans of the Internet at large show that more than 5.9 million Web servers, comprising 17 percent of all HTTPS-protected machines, directly support SSLv2. That's a troubling finding, given widely repeated advice that SSLv2 be disabled. More troubling still, even when a server doesn't allow SSLv2 connections, it may still be susceptible to attack if the underlying RSA key pair is reused on a separate server that does support the old protocol. A website, e. g., that forbids SSLv2 may still be vulnerable if its key is used on an e-mail server that allows SSLv2. Cherokee disables both protocols by default. Users can override this by explicitly enabling the protocols in the configuration file. On the other hand IETF does not allow to use both SSL protocols anymore due to their vulnerabilities, which also affect security of more recent TLS protocols. Remove SSLv2 and SSLv3 settings from existing (legacy) configuration files during installation to allow safe operation of Cherokee webserver. Users that for whatever reason still require use of SSLv2 or SSLv3 can enable the protocol again after installation using cherokee-admin. Note: Use of SSLv2 or SSLv3 also depends on OpenSSL. Recent versions of OpenSSL removed SSLv2 and most distribution now also disable SSLv3. This patch adds a new mechanism to Cherokee that allows for intermediate security updates of the configuration file when a regular update to a new Cherokee version is not (yet) available. Fixes: https://github.com/cherokee/webserver/issues/1253 Signed-off-by: Thomas Reim --- admin/config_version.py | 49 +++++++++++++++++++++++++++++++++++++++++ admin/upgrade_config.py | 11 ++++++++- 2 files changed, 59 insertions(+), 1 deletion(-) diff --git a/admin/config_version.py b/admin/config_version.py index 687348eaa..2f6346f2d 100644 --- a/admin/config_version.py +++ b/admin/config_version.py @@ -111,6 +111,37 @@ def upgrade_to_1_2_103 (cfg): cfg.get_val('vserver!%s!rule!%s!match!directory'%(v,r)) == "/icons": cfg['vserver!%s!rule!%s!match!directory'%(v,r)] = '/cherokee_icons' +PROHIBITED_TLS_PROTOCOLS = [('SSLv2', 'SSL version 2'), + ('SSLv3', 'SSL version 3') + ] +def update_tls_protocols (cfg): + # Vulnerable and insecure SSL protocols SSLv2 and SSLv3 must not be used + # by applications (RFC7568 and RFC6176). + # Cherokee now diables both protocols by default. Users can override this by + # explicitly enabling the protocols in the configuration file. On the other + # hand IETF does not allow to use both SSL protocols anymore due to their + # vulnerabilities, which also affects security of more recent TLS protocols. + # Search for SSLv2 and SSLv3 settings and remove them in order to apply + # Cherokee's safe default TLS protocol settings. + retVal = False + for protocol in PROHIBITED_TLS_PROTOCOLS: + v = cfg.pop('server!tls!protocol!%s' % protocol[0]) + if v is not None: + if v.isdigit() and bool(int(v) == True): + print "\n" " WARNING!! %s was enabled in the onfiguration file. This SSL/TLS protocol is " % protocol[1] + print " obsolete and must not be used anymore. Configuration entry removed." + print " In case of need you can temporarily enable %s again using cherokee-admin." % protocol[0] + retVal = True + return retVal + +# Converts to 1.2.104 or later (if any) +def upgrade_to_1_2_105 (cfg): + # Placeholder for required configuration file updates in a future version + # following 1.2.104: + # - Remove explicit use of insecure SSL/TLS protocols that are not allowed + # by IETF + update_tls_protocols(cfg) + def config_version_get_current(): ver = configured.VERSION.split ('b')[0] v1,v2,v3 = ver.split (".") @@ -151,6 +182,20 @@ def config_version_cfg_is_up_to_date (cfg): return False +def config_version_cfg_sanity_check (cfg): + # Critical corrections and updates of existing configuration files to be + # applied during Cherokee installation independent of a version change + # - Remove explicit use of insecure SSL/TLS protocols that are not allowed + # by IETF + + # Do not proceed if it's empty + if not cfg.has_tree(): + return False + + # Perform + return update_tls_protocols (cfg) + + def config_version_update_cfg (cfg): # Do not proceed if it's empty if not cfg.has_tree(): @@ -192,5 +237,9 @@ def config_version_update_cfg (cfg): if ver_config_i < 1002103: upgrade_to_1_2_103 (cfg) + # Update to.. post 1.2.104 + if ver_config_i < 1002105: + upgrade_to_1_2_105 (cfg) + cfg["config!version"] = ver_release_s return True diff --git a/admin/upgrade_config.py b/admin/upgrade_config.py index 2ea37e572..51c4f5162 100755 --- a/admin/upgrade_config.py +++ b/admin/upgrade_config.py @@ -30,7 +30,7 @@ def main(): # Parse the configuration file cfg = Config(cfg_file) - # Update the configuration file if needed + # Upgrade the configuration file if needed ver_config = int (cfg.get_val('config!version', '000099028')) ver_release = int (config_version_get_current()) @@ -40,6 +40,15 @@ def main(): updated = config_version_update_cfg (cfg) print ["Not upgraded.", "Upgraded."][updated] + # Critical corrections and updates of existing configuration files + # if required + if updated == False: + + print "Applying security updates to '%s'.." % (cfg_file), + + updated = config_version_cfg_sanity_check (cfg) + print ["No update required.", "Updated."][updated] + # Save it if updated: print "Saving new configuration..", From 687f5dc28ee1d2559bd36d59276aea648337902a Mon Sep 17 00:00:00 2001 From: Thomas Reim Date: Thu, 1 Apr 2021 17:25:35 +0200 Subject: [PATCH 07/14] Fix build with local installation of OpenSSL Compile and linker flags are not correctly set when building Cherokee webserver using a local (additional) installation of OpenSSL (e. g. in /usr/local/openssl). When users pass an OpenSSL path, with option, e. g., --with-libssl=/usr/local/openssl Cherokee checks for existence of: - libssl and libcrypto in /usr/local/openssl/lib - openssl in /usr/local/openssl/bin During further build process these paths are used to analyze, compile and link Cherokee against the correct TLS back-end. This patch also adds some further checks of OpenSSL header files. Fixes: https://github.com/cherokee/webserver/issues/1251 Signed-off-by: Thomas Reim --- configure.ac | 28 ++++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/configure.ac b/configure.ac index 96cdeec05..5844812a9 100644 --- a/configure.ac +++ b/configure.ac @@ -1085,17 +1085,35 @@ AC_ARG_WITH(libssl, have_openssl=no if test "$WITH_OPENSSL" != "no"; then + dnl backup the pre-ssl variables + CLEANLDFLAGS="$LDFLAGS" + CLEANCFLAGS="$CFLAGS" + CLEANLIBS="$LIBS" if test "$WITH_OPENSSL" != "yes"; then - LIBSSL_CFLAGS="-I$WITH_OPENSSL/include" + LIBSSL_CFLAGS="-I$WITH_OPENSSL/include -I$WITH_OPENSSL/include/openssl" LIBSSL_LIBS="-L$WITH_OPENSSL/lib" + LIBCRYPTO_LIBS="-L$WITH_OPENSSL/lib" + OPENSSL_PATH="$WITH_OPENSSL/bin" fi + CFLAGS="$CFLAGS $LIBSSL_CFLAGS" + LDFLAGS="$LDFLAGS $LIBSSL_LIBS" + AC_CHECK_LIB(crypto, CRYPTO_new_ex_data, [], [AC_MSG_ERROR([library 'crypto' is required for OpenSSL])]) have_openssl="no" AC_CHECK_LIB(ssl, OPENSSL_init_ssl, [have_openssl="yes"]) AC_CHECK_LIB(ssl, SSL_library_init, [have_openssl="yes"]) AC_CHECK_LIB(ssl, SSL_accept, [have_openssl=yes]) + if test "$have_openssl" = "yes"; then + AC_CHECK_HEADERS(openssl/dh.h openssl/rand.h openssl/crypto.h \ + openssl/lhash.h openssl/ssl.h openssl/err.h, + AC_DEFINE(HAVE_OPENSSL, 1, [Have OpenSSL/libssl library]), + have_openssl="no" + ) + fi + AS_IF([test "x$have_openssl" = xno], [AC_MSG_ERROR([library 'ssl' is required for OpenSSL])]) + if test "$have_openssl" = "yes"; then TLS_BACK_END="OpenSSL/libssl" OPENSSL_PATH="$OPENSSL_PATH$PATH_SEPARATOR$PATH" @@ -1104,7 +1122,6 @@ if test "$WITH_OPENSSL" != "no"; then AC_SUBST(LIBSSL_LIBS) AC_SUBST(LIBSSL_CFLAGS) - AC_DEFINE(HAVE_OPENSSL, 1, [Have OpenSSL library]) AC_CACHE_CHECK([for a suitable test server to verify $TLS_BACK_END TLS protocol support], [ac_cv_path_OPENSSL_BIN], [AC_PATH_PROGS_FEATURE_CHECK([OPENSSL_BIN], [openssl], [v=$($ac_path_OPENSSL_BIN s_server -help 2>&1) @@ -1155,10 +1172,13 @@ if test "$WITH_OPENSSL" != "no"; then if test "$have_openssl_ciphersuites" = "yes"; then AC_DEFINE(HAVE_SSL_CTX_SET_CIPHERSUITES, 1, [OpenSSL/libssl has SSL_CTX_set_ciphersuites() function]) fi + + AC_CHECK_HEADERS([openssl/engine.h]) fi + # restore CFLAGS and LDFLAGS + CFLAGS="${CLEANCFLAGS}" + LDFLAGS="${CLEANLDFLAGS}" fi -AC_MSG_CHECKING(for libssl) -AC_MSG_RESULT([$have_openssl]) AM_CONDITIONAL(USE_OPENSSL, test "x$have_openssl" = "xyes") From 9c4f0006cfc1a02fcdc3243baf25da64db8f61e8 Mon Sep 17 00:00:00 2001 From: Thomas Reim Date: Thu, 1 Apr 2021 17:48:52 +0200 Subject: [PATCH 08/14] Cherokee Trace function ignores SSL/TLS OpenSSL silently discards invalid ciphers that are provided within the configured cipher set list. The actually available SSL/TLS protocols and TLS v1.3 ciphersuites for a virtual server are important information for system administrators in case of Cherokee not accepting HTTPS connections. Without this information it is extremely difficult to investigate on the root cause of encrypt web traffic issues in the network. Trace information for each virtual server on the main SSL/TLS configuration settings. Fixes: https://github.com/cherokee/webserver/issues/1252 Signed-off-by: Thomas Reim --- cherokee/cryptor_libssl.c | 203 +++++++++++++++++++++++++++++++++++++- cherokee/error_list.py | 4 + 2 files changed, 206 insertions(+), 1 deletion(-) diff --git a/cherokee/cryptor_libssl.c b/cherokee/cryptor_libssl.c index 088cdd0e9..5ad567e1b 100644 --- a/cherokee/cryptor_libssl.c +++ b/cherokee/cryptor_libssl.c @@ -480,6 +480,168 @@ verify_tolerate_cb(int preverify_ok, X509_STORE_CTX *x509_store) return 1; } +#ifdef TRACE_ENABLED +static void +trace_libssl_tls_settings(SSL_CTX *ctx, cherokee_virtual_server_t *vsrv) +{ + long options; + int verify_mode = SSL_VERIFY_NONE; + int libssl_security_level; + int version; + const char *trace_str; + + cherokee_buffer_t tmp = CHEROKEE_BUF_INIT; +#if OPENSSL_VERSION_NUMBER >= 0x10100000L + cherokee_buffer_add_va (&tmp, "libssl security level for vserver %s: ", + vsrv->name.buf); + libssl_security_level = SSL_CTX_get_security_level (ctx); + switch (libssl_security_level) { + case 0: + cherokee_buffer_add_va (&tmp, + "%d (no SSL/TLS protocol restrictions)", + libssl_security_level); + break; + case 1: + cherokee_buffer_add_va (&tmp, + "%d (SSLv2 not allowed)", + libssl_security_level); + break; + case 2: + cherokee_buffer_add_va (&tmp, + "%d (%s and below not allowed)", + libssl_security_level, SSL_TXT_SSLV3); + break; + case 3: + cherokee_buffer_add_va (&tmp, + "%d (%s and below not allowed)", + libssl_security_level, SSL_TXT_TLSV1); + break; + case 4: + cherokee_buffer_add_va (&tmp, + "%d (%s and below not allowed)", + libssl_security_level, SSL_TXT_TLSV1_1); + break; + case 5: + cherokee_buffer_add_va (&tmp, + "%d (%s and below not allowed)", + libssl_security_level, SSL_TXT_TLSV1_1); + break; + default: + cherokee_buffer_add_str (&tmp, "unknown libssl security level"); + break; + } + TRACE(ENTRIES, "%s\n", tmp.buf); + + cherokee_buffer_clean(&tmp); + + CLEAR_LIBSSL_ERRORS; +#endif +#ifdef HAVE_SSL_CTX_GET_MIN_PROTO_VERSION + cherokee_buffer_add_va (&tmp, + "Minimum supported TLS/SSL protocol version for vserver %s: ", + vsrv->name.buf); + version = SSL_CTX_get_min_proto_version (ctx); + if (version > 0) { + if (_tls_protocol_version_to_text(version, &tmp) != ret_ok) { + cherokee_buffer_add_str (&tmp, "unknown protocol"); + } + } + if (CRYPTOR_VSRV_MIN_TLS_PROTOCOL(vsrv) == 0) { + if (version > 0) { + cherokee_buffer_add_str (&tmp, " ("); + } + cherokee_buffer_add_str (&tmp, "auto-configured by libssl"); + if (version > 0) { + cherokee_buffer_add_char (&tmp, ')'); + } + } + TRACE(ENTRIES, "%s\n", tmp.buf); + + cherokee_buffer_clean(&tmp); + + cherokee_buffer_add_va (&tmp, + "Maximum supported TLS/SSL protocol version for vserver %s: ", + vsrv->name.buf); + version = SSL_CTX_get_max_proto_version (ctx); + if (version > 0) { + if (_tls_protocol_version_to_text(version, &tmp) != ret_ok) { + cherokee_buffer_add_str (&tmp, "unknown protocol"); + } + } + if (CRYPTOR_VSRV_MAX_TLS_PROTOCOL(vsrv) == 0) { + if (version > 0) { + cherokee_buffer_add_str (&tmp, " ("); + } + cherokee_buffer_add_str (&tmp, "auto-configured by libssl"); + if (version > 0) { + cherokee_buffer_add_char (&tmp, ')'); + } + } + TRACE(ENTRIES, "%s\n", tmp.buf); + + cherokee_buffer_clean(&tmp); + + CLEAR_LIBSSL_ERRORS; +#endif + + options = SSL_CTX_get_options (ctx); + +#ifdef SSL_OP_NO_SSLv2 + if (options & SSL_OP_NO_SSLv2) { + if (! cherokee_buffer_is_empty(&tmp)) { + cherokee_buffer_add_str (&tmp, ", "); + } + cherokee_buffer_add_str (&tmp, "SSLv2"); + } +#endif +#ifdef SSL_OP_NO_SSLv3 + if (PROTOCOL_SWITCHED_OFF(SSL_OP_NO_SSLv3, options, vsrv)) { + if (! cherokee_buffer_is_empty(&tmp)) { + cherokee_buffer_add_str (&tmp, ", "); + } + cherokee_buffer_add_str (&tmp, SSL_TXT_SSLV3); + } +#endif +#ifdef SSL_OP_NO_TLSv1 + if (PROTOCOL_SWITCHED_OFF(SSL_OP_NO_TLSv1, options, vsrv)) { + if (! cherokee_buffer_is_empty(&tmp)) { + cherokee_buffer_add_str (&tmp, ", "); + } + cherokee_buffer_add_str (&tmp, SSL_TXT_TLSV1); + } +#endif +#ifdef SSL_OP_NO_TLSv1_1 + if (PROTOCOL_SWITCHED_OFF(SSL_OP_NO_TLSv1_1, options, vsrv)) { + if (! cherokee_buffer_is_empty(&tmp)) { + cherokee_buffer_add_str (&tmp, ", "); + } + cherokee_buffer_add_str (&tmp, SSL_TXT_TLSV1_1); + } +#endif +#ifdef SSL_OP_NO_TLSv1_2 + if (PROTOCOL_SWITCHED_OFF(SSL_OP_NO_TLSv1_2, options, vsrv)) { + if (! cherokee_buffer_is_empty(&tmp)) { + cherokee_buffer_add_str (&tmp, ", "); + } + cherokee_buffer_add_str (&tmp, SSL_TXT_TLSV1_2); + } +#endif +#ifdef SSL_OP_NO_TLSv1_3 + if (PROTOCOL_SWITCHED_OFF(SSL_OP_NO_TLSv1_3, options, vsrv)) { + if (! cherokee_buffer_is_empty(&tmp)) { + cherokee_buffer_add_str (&tmp, ", "); + } + cherokee_buffer_add_str (&tmp, "TLSv1.3"); + } +#endif + TRACE(ENTRIES, "TLS/SSL protocols switched off for vserver %s: %s\n", + vsrv->name.buf, tmp.buf); + cherokee_buffer_mrproper(&tmp); + + CLEAR_LIBSSL_ERRORS; +} +#endif + static ret_t _vserver_new (cherokee_cryptor_t *cryp, cherokee_virtual_server_t *vsrv, @@ -490,6 +652,7 @@ _vserver_new (cherokee_cryptor_t *cryp, const char *error; long options; int verify_mode = SSL_VERIFY_NONE; + STACK_OF(SSL_CIPHER) *libssl_ciphers = NULL; #if !defined(OPENSSL_NO_EC) && OPENSSL_VERSION_NUMBER >= 0x0090800L && OPENSSL_VERSION_NUMBER < 0x10002000L EC_KEY *ecdh; #endif @@ -662,6 +825,17 @@ _vserver_new (cherokee_cryptor_t *cryp, SSL_CTX_set_options (n->context, options); + CLEAR_LIBSSL_ERRORS; + + /* OpenSSL is significantly changing and improving communication + security and privacy. So do Linux distributions by enabling + or disabling OpenSSL capabilities. This is especially true + for support of TLS/SSL protocols. + */ +#ifdef TRACE_ENABLED + trace_libssl_tls_settings(n->context, vsrv); +#endif + /* Set cipher list that vserver will accept. */ if (! cherokee_buffer_is_empty (&vsrv->ciphers)) { @@ -669,7 +843,7 @@ _vserver_new (cherokee_cryptor_t *cryp, if (rc != 1) { OPENSSL_LAST_ERROR(error); LOG_ERROR(CHEROKEE_ERROR_SSL_CIPHER, - vsrv->ciphers.buf, error); + vsrv->ciphers.buf, error); goto error; } } @@ -688,6 +862,33 @@ _vserver_new (cherokee_cryptor_t *cryp, } #endif +#if OPENSSL_VERSION_NUMBER >= 0x10100000L + /* OpenSSL silently discards invalid ciphers within the provided + cipher list. This may lead to fatal handshake errors without + proper indication about the root cause to users. + */ + libssl_ciphers = SSL_CTX_get_ciphers(n->context); + if (libssl_ciphers == NULL) { + LOG_WARNING (CHEROKEE_ERROR_SSL_NOCIPHERS); +# ifdef TRACE_ENABLED + } else { + const char *cname; + cherokee_buffer_t tmp = CHEROKEE_BUF_INIT; + for(int i=0; iname.buf, tmp.buf); + + cherokee_buffer_mrproper(&tmp); +# endif + } +#endif + CLEAR_LIBSSL_ERRORS; /* Certificate diff --git a/cherokee/error_list.py b/cherokee/error_list.py index 5f67c83da..acad7f35a 100644 --- a/cherokee/error_list.py +++ b/cherokee/error_list.py @@ -1308,6 +1308,10 @@ title = "OpenSSL: cannot set minimum and maximum supported TLS protocol version '%s': %s", desc = SYSTEM_ISSUE) +e('SSL_NOCIPHERS', + title = "OpenSSL: no ciphers available for TLS/SSL encryption", + desc = "TLS/SSL cannot be used. Please check your cypher and cyphersuite configuration.") + e('SSL_CERTIFICATE', title = "OpenSSL: cannot use certificate file '%s': %s", desc = "An error occured while trying to load a certificate into the SSL context structure. Most likely the certificate file is wrong or has been corrupted.") From 4609a818490d106f9d92a265127cfb29f88911b5 Mon Sep 17 00:00:00 2001 From: Thomas Reim Date: Thu, 1 Apr 2021 18:18:44 +0200 Subject: [PATCH 09/14] Cherokee may use wrong Python interpreter On modern systems Python3 is now standard. Cherokee has been prepared for this change. Users can use option --with-python to specify the correct path to Python2 but some Makefiles ignore this directive (e. g. make test). Furthermore, Python byte code files that are created during build process are not removed by the clean target of some Makefiles. This patch configures Autoconf to detect the correct path to a Python2 interpreter. Autoconf will terminate the build process with error if a Python2 interpreter cannot be found. This is required as Python is also used to compile Cherokee's error header file. Python byte code files are no cleaned by make clean. Fixes: https://github.com/cherokee/webserver/issues/1250 Signed-off-by: Thomas Reim --- admin/Makefile.am | 5 ++++- cherokee/main_admin.c | 4 ++++ configure.ac | 30 +++++++++++++++++++----------- qa/Makefile.am | 11 +++++++---- qa/conf.py.pre | 2 +- qa/util.py | 2 +- 6 files changed, 36 insertions(+), 18 deletions(-) diff --git a/admin/Makefile.am b/admin/Makefile.am index 0a090e981..23bae8b0c 100644 --- a/admin/Makefile.am +++ b/admin/Makefile.am @@ -111,4 +111,7 @@ CLEANFILES = \ $(generated_DATA) test: - python -m compileall . + $(PYTHON) -m compileall . + +clean-local: + find . -type f -name "*.pyc" -exec rm -f {} \; diff --git a/cherokee/main_admin.c b/cherokee/main_admin.c index f2629b798..19b7530e8 100644 --- a/cherokee/main_admin.c +++ b/cherokee/main_admin.c @@ -653,7 +653,11 @@ check_for_python (void) int re; pid_t pid; int exitcode = -1; +#ifdef PATH_PYTHON2 + char const *args[] = {"env", PATH_PYTHON2, "-c", "raise SystemExit", NULL}; +#else char const *args[] = {"env", "python2", "-c", "raise SystemExit", NULL}; +#endif pid = fork(); if (pid == -1) { diff --git a/configure.ac b/configure.ac index 5844812a9..bdbbf5db0 100644 --- a/configure.ac +++ b/configure.ac @@ -1432,30 +1432,38 @@ have_python="yes" AC_ARG_WITH([python], AC_HELP_STRING([--with-python=/path/to/python],[Path to Python interpreter]), PYTHON="$withval", [ - AC_PATH_PROGS(PYTHON, python python2 python2.7 python2.6 python2.5 python2.4) -]) + AC_CACHE_VAL([ac_cv_path_PYTHON], + [AC_PATH_PROGS_FEATURE_CHECK([PYTHON], [python2.4 python2.5 python2.6 python2.7 python2 python], + [v=$($ac_path_PYTHON -c "import sys; print (sys.version_info[[0]])") + if test "x$v" == "x2"; then + ac_cv_path_PYTHON=$ac_path_PYTHON aac_path_PYTHON_found=: + fi])]) + if test "x$ac_cv_path_PYTHON" != "x"; then + AC_SUBST(PYTHON, [$ac_cv_path_PYTHON]) + fi +] +) if test "x$PYTHON" != "x"; then - AC_MSG_CHECKING([Python 2.x interpreter]) + AC_MSG_CHECKING([for Python 2.x interpreter]) v=`$PYTHON -c 'import sys; print (sys.version_info[[0]])'` if test "x$v" != "x2"; then have_python="no" wants_admin="no" AC_MSG_RESULT([no]) - AC_MSG_WARN([ -*** Cherokee-admin requires Python 2.x. Please, use the --with-python -*** parameter to specify a Python 2.4, 2.5, 2.6 or 2.7 interpreter. -*** BEWARE: Cherokee-admin support has been disabled.]) + AC_MSG_ERROR([ +*** Cherokee requires Python 2.x. Please, use the --with-python +*** parameter to specify a Python 2.4, 2.5, 2.6 or 2.7 interpreter.]) else - AC_MSG_RESULT([yes]) + AC_MSG_RESULT([$PYTHON]) + AC_DEFINE_UNQUOTED(PATH_PYTHON2, ["$PYTHON"], [Define path to Python 2.x interpreter]) fi else have_python="no" wants_admin="no" - AC_MSG_WARN([ + AC_MSG_ERROR([ *** Python must be installed on your system but python interpreter couldn't -*** be found in path. Please check that python is in path, or install it. -*** BEWARE: Cherokee-admin support has been disabled.]) +*** be found in path. Please check that python is in path, or install it.]) fi dnl diff --git a/qa/Makefile.am b/qa/Makefile.am index f7c9ed719..d274f5033 100644 --- a/qa/Makefile.am +++ b/qa/Makefile.am @@ -1,7 +1,7 @@ SUFFIXES = .py.pre .py .py.pre.py: - sed -e "s|%sysconfdir%|${sysconfdir}|g; s|%sbindir%|${sbindir}|g; s|%docdir%|${docdir}|g; s|%prefix%|${prefix}|g; s|%localstatedir%|${localstatedir}|g; s|%libdir%|${libdir}|g; s|%wwwroot%|${WWW_ROOT}|g; s|%cgiroot%|${CGI_ROOT}|g; s|%version%|${PACKAGE_VERSION}|g; s|%phpcgi%|${PHPCGI}|g; s|%datadir%|${datadir}|g; s|%localedir%|${localedir}|g" $< > $@ + sed -e "s|%sysconfdir%|${sysconfdir}|g; s|%sbindir%|${sbindir}|g; s|%docdir%|${docdir}|g; s|%prefix%|${prefix}|g; s|%localstatedir%|${localstatedir}|g; s|%libdir%|${libdir}|g; s|%wwwroot%|${WWW_ROOT}|g; s|%cgiroot%|${CGI_ROOT}|g; s|%version%|${PACKAGE_VERSION}|g; s|%pythonpath%|${PYTHON}|g; s|%phpcgi%|${PHPCGI}|g; s|%datadir%|${datadir}|g; s|%localedir%|${localedir}|g" $< > $@ PY_PRE = \ conf.py.pre @@ -340,7 +340,7 @@ ssl-keys/set-1.key: mkdir -p ssl-keys @OPENSSL_BIN@ genrsa -out ssl-keys/set-1.key 2048 test-ssl: ssl-keys/set-1.pem - ./run-tests.py -s + $(PYTHON) ./run-tests.py -s test: test-non-ssl test-ssl DISTCLEANFILES += ssl-keys/set-1.pem ssl-keys/set-1.key @@ -350,5 +350,8 @@ test: test-non-ssl endif test-non-ssl: - python -m compileall . - ./run-tests.py + $(PYTHON) -m compileall . + $(PYTHON) ./run-tests.py + +clean-local: + find . -type f -name "*.pyc" -exec rm -f {} \; diff --git a/qa/conf.py.pre b/qa/conf.py.pre index 977222366..7c0ed1193 100644 --- a/qa/conf.py.pre +++ b/qa/conf.py.pre @@ -24,7 +24,7 @@ SSL_CERT_KEY_FILE = "ssl-keys/set-1.key" SERVER_DELAY = 10 # Third party utilities -PYTHON_PATH = "auto" +PYTHON_PATH = "%pythonpath%" PHPCGI_PATH = "%phpcgi%" PHP_FCGI_PORT = 1980 diff --git a/qa/util.py b/qa/util.py index 7f055ef0f..974d77557 100644 --- a/qa/util.py +++ b/qa/util.py @@ -139,7 +139,7 @@ def look_for_python(): if __python_ref != None: return __python_ref - if PYTHON_PATH != "auto": + if PYTHON_PATH != "%pythonpath%": __python_ref = PYTHON_PATH return __python_ref From 19fa9f6ab9d04a5369f768be1202c330eaff3278 Mon Sep 17 00:00:00 2001 From: Thomas Reim Date: Thu, 1 Apr 2021 18:39:48 +0200 Subject: [PATCH 10/14] Fix Autoconf files Cherokee's Autoconf files are pretty outdated. Checking with autoscan results in several warnings. Fix autoscan warnings and correct deprecated syntax (e. g. AC_CONFIG_FILES, AC_OUTPUT). Fixes: https://github.com/cherokee/webserver/issues/1249 Signed-off-by: Thomas Reim --- configure.ac | 114 +++++++++++++++++++++++++++++---------------------- 1 file changed, 64 insertions(+), 50 deletions(-) diff --git a/configure.ac b/configure.ac index bdbbf5db0..1bbc2009a 100644 --- a/configure.ac +++ b/configure.ac @@ -29,7 +29,7 @@ m4_define([cherokee_micro_version], [104]) m4_define([cherokee_version], m4_format('%s.%s.%s', cherokee_major_version, cherokee_minor_version, cherokee_micro_version)) dnl Init autoconf and automake -AC_INIT([cherokee], [cherokee_version], [http://bugs.cherokee-project.com/], [cherokee]) +AC_INIT([cherokee], [cherokee_version], [https://github.com/cherokee/webserver/issues], [cherokee]) AC_CONFIG_SRCDIR([cherokee/server.c]) AC_CONFIG_MACRO_DIR([m4]) AM_INIT_AUTOMAKE([no-define]) @@ -209,8 +209,12 @@ m4_ifdef([LT_INIT], [LT_INIT([dlopen shared static])], [AC_LIBTOOL_DLOPEN]) dnl Paths AC_PROG_CC AC_PROG_CC_STDC +AC_PROG_CXX AC_PROG_INSTALL AC_PROG_MAKE_SET +AC_PROG_YACC +AC_PROG_LEX +AC_PROG_LN_S AM_PROG_LIBTOOL AC_PATH_PROG(cherokeepath, cherokee) @@ -240,16 +244,24 @@ AC_CHECK_HEADERS(sys/socket.h sys/un.h netinet/in.h arpa/inet.h netinet/tcp.h sy AC_CHECK_HEADERS(sys/resource.h resource.h unistd.h syslog.h stdint.h inttypes.h error.h pwd.h sys/uio.h) AC_CHECK_HEADERS(pthread.h netdb.h stdarg.h sys/filio.h sys/varargs.h sys/select.h sys/mman.h sys/uio.h grp.h) AC_CHECK_HEADERS(sched.h execinfo.h) +AC_CHECK_HEADERS(fenv.h float.h libintl.h limits.h locale.h stddef.h stdlib.h string.h strings.h sys/param.h wchar.h wctype.h) AC_SYS_LARGEFILE -AC_SIZE_T +AC_CHECK_HEADER_STDBOOL AC_TYPE_UID_T -AC_TYPE_MODE_T +AC_C_INLINE +AC_TYPE_INT16_T +AC_TYPE_INT32_T AC_TYPE_OFF_T AC_TYPE_SIZE_T AC_TYPE_PID_T -AC_STRUCT_ST_RDEV +AC_C_RESTRICT +AC_TYPE_SSIZE_T +AC_TYPE_UINT16_T +AC_TYPE_UINT32_T +AC_TYPE_UINT64_T +AC_TYPE_UINT8_T AC_CHECK_TYPE(ino_t, unsigned) AC_CHECK_TYPE(loff_t, off_t) AC_CHECK_TYPE(offset_t, loff_t) @@ -271,14 +283,17 @@ AC_TRY_RUN([#include main() { long long x = 1000000; x *= x; exit(((x/1000000) == 1000000)? 0: 1); }], samba_cv_have_longlong=yes,samba_cv_have_longlong=no,samba_cv_have_longlong=cross)]) if test x"$samba_cv_have_longlong" = x"yes"; then - AC_DEFINE(HAVE_LONGLONG,1,[Whether the host supports long long']) + AC_DEFINE(HAVE_LONGLONG,1,[Whether the host supports long long]) fi AC_FUNC_MEMCMP AC_FUNC_MMAP AC_FUNC_FORK +AC_FUNC_CHOWN +AC_FUNC_ERROR_AT_LINE +AC_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK -AC_CHECK_FUNCS(gmtime gmtime_r localtime localtime_r getrlimit getdtablesize readdir readdir_r flockfile funlockfile strnstr backtrace random srandom srandomdev) +AC_CHECK_FUNCS(dup2 ftruncate getcwd gettimeofday inet_ntoa gmtime gmtime_r localtime localtime_r getrlimit getdtablesize memset mkdir readdir readdir_r flockfile funlockfile backtrace munmap pathconf pstat_getdynamic realpath rmdir strchr strcspn strdup strncasecmp strpbrk strrchr strspn strnstr strstr strtol strtoul random srandom srandomdev) FW_CHECK_PWD FW_CHECK_GRP @@ -1197,7 +1212,6 @@ if test "x$USE_NLS" = "xyes"; then fi AM_CONDITIONAL(NLS_ENABLED, test "x$USE_NLS" = "xyes") -AC_CONFIG_FILES([po/admin/Makefile.in]) dnl dnl LDAP @@ -1613,49 +1627,49 @@ AM_CONDITIONAL(STATIC_RULE_NOT, grep _not_ $conf_h >/dev/ AM_CONDITIONAL(STATIC_RULE_AND, grep _and_ $conf_h >/dev/null) AM_CONDITIONAL(STATIC_RULE_OR, grep _or_ $conf_h >/dev/null) -AC_OUTPUT([ -Makefile -cget/Makefile -cherokee-config -cherokee.pc -cherokee.spec -org.cherokee.webserver.plist -cherokee/Makefile -contrib/Makefile -icons/Makefile -m4/Makefile -qa/Makefile -doc/Makefile -themes/Makefile -themes/default/Makefile -themes/firefox3/Makefile -themes/white/Makefile -themes/plain/Makefile -packages/Makefile -packages/osx/Makefile -packages/osx/Info.plist -packages/osx/Description.plist -www/Makefile -dbslayer/Makefile -admin/Makefile -admin/icons/Makefile -admin/plugins/Makefile -admin/wizards/Makefile -admin/static/Makefile -admin/static/js/Makefile -admin/static/css/Makefile -admin/static/images/Makefile -admin/static/images/flags/Makefile -admin/static/images/wizards/Makefile -admin/static/images/other/Makefile -admin/CTK/Makefile -admin/CTK/CTK/Makefile -admin/CTK/static/css/Makefile -admin/CTK/static/images/Makefile -admin/CTK/static/js/Makefile -admin/CTK/static/Makefile -po/Makefile -]) +AC_CONFIG_FILES([Makefile + admin/CTK/CTK/Makefile + admin/CTK/Makefile + admin/CTK/static/Makefile + admin/CTK/static/css/Makefile + admin/CTK/static/images/Makefile + admin/CTK/static/js/Makefile + admin/Makefile + admin/icons/Makefile + admin/plugins/Makefile + admin/static/Makefile + admin/static/css/Makefile + admin/static/images/Makefile + admin/static/images/flags/Makefile + admin/static/images/other/Makefile + admin/static/images/wizards/Makefile + admin/static/js/Makefile + admin/wizards/Makefile + cget/Makefile + cherokee-config + cherokee.pc + cherokee.spec + cherokee/Makefile + contrib/Makefile + dbslayer/Makefile + doc/Makefile + icons/Makefile + m4/Makefile + org.cherokee.webserver.plist + packages/Makefile + packages/osx/Description.plist + packages/osx/Info.plist + packages/osx/Makefile + po/Makefile + po/admin/Makefile.in + qa/Makefile + themes/Makefile + themes/default/Makefile + themes/firefox3/Makefile + themes/plain/Makefile + themes/white/Makefile + www/Makefile]) +AC_OUTPUT methods="" From b69ab56f673adf7727036ecf4f00652a8743fe70 Mon Sep 17 00:00:00 2001 From: Thomas Reim Date: Thu, 1 Apr 2021 18:52:43 +0200 Subject: [PATCH 11/14] Fix dead bug report link Fixes: https://github.com/cherokee/webserver/issues/1248 Signed-off-by: Thomas Reim --- admin/Makefile.am | 2 +- admin/PageException.py | 2 +- admin/PageIndex.py | 2 +- admin/configured.py.pre | 1 + cherokee/cherokee-panic | 2 +- cherokee/error_list.py | 4 ++-- po/admin/Makevars | 2 +- qa/128-ValidMethod-common.py | 2 +- qa/299-MethodsRequestBodyHandling.py | 2 +- qa/Makefile.am | 2 +- qa/conf.py.pre | 1 + qa/help.py | 2 +- 12 files changed, 13 insertions(+), 11 deletions(-) diff --git a/admin/Makefile.am b/admin/Makefile.am index 23bae8b0c..8f318e1b3 100644 --- a/admin/Makefile.am +++ b/admin/Makefile.am @@ -17,7 +17,7 @@ tlsprotocols = endif .py.pre.py: - sed -e "s|%sysconfdir%|${sysconfdir}|g; s|%sbindir%|${sbindir}|g; s|%docdir%|${docdir}|g; s|%prefix%|${prefix}|g; s|%localstatedir%|${localstatedir}|g; s|%libdir%|${libdir}|g; s|%wwwroot%|${WWW_ROOT}|g; s|%version%|${PACKAGE_VERSION}|g; s|%phpcgi%|${PHPCGI}|g; s|%datadir%|${datadir}|g; s|%localedir%|${localedir}|g; s|%minmaxtls%|$(minmaxtls)|g; s|%tlsprotocols%|$(tlsprotocols)|g" $< > $@ + sed -e "s|%sysconfdir%|${sysconfdir}|g; s|%sbindir%|${sbindir}|g; s|%docdir%|${docdir}|g; s|%prefix%|${prefix}|g; s|%localstatedir%|${localstatedir}|g; s|%libdir%|${libdir}|g; s|%wwwroot%|${WWW_ROOT}|g; s|%version%|${PACKAGE_VERSION}|g; s|%bugreportlink%|${PACKAGE_BUGREPORT}|g; s|%phpcgi%|${PHPCGI}|g; s|%datadir%|${datadir}|g; s|%localedir%|${localedir}|g; s|%minmaxtls%|$(minmaxtls)|g; s|%tlsprotocols%|$(tlsprotocols)|g" $< > $@ PY_PRE = \ configured.py.pre diff --git a/admin/PageException.py b/admin/PageException.py index 6ae43dbc2..15f513403 100644 --- a/admin/PageException.py +++ b/admin/PageException.py @@ -31,7 +31,7 @@ from urllib import quote, unquote, urlencode from httplib import HTTPConnection -URL_BTS = 'http://bugs.cherokee-project.com/new' +URL_BTS = configured.BUGREPORTLINK URL_REPORT_HOST = 'www.cherokee-project.com' URL_REPORT_URL = '/CTK_ok.html' diff --git a/admin/PageIndex.py b/admin/PageIndex.py index a1997538d..5f2ea0e94 100644 --- a/admin/PageIndex.py +++ b/admin/PageIndex.py @@ -42,7 +42,7 @@ from configured import * # Links -LINK_BUGTRACKER = 'http://bugs.cherokee-project.com/' +LINK_BUGTRACKER = BUGREPORTLINK LINK_TWITTER = 'http://twitter.com/webserver' LINK_FACEBOOK = 'http://www.facebook.com/cherokee.project' LINK_GOOGLEPLUS = 'https://plus.google.com/u/1/communities/109478817835447552345' diff --git a/admin/configured.py.pre b/admin/configured.py.pre index e3cc8e593..408bd177f 100644 --- a/admin/configured.py.pre +++ b/admin/configured.py.pre @@ -9,6 +9,7 @@ WWWROOT = "%wwwroot%" SYSCONFDIR = "%sysconfdir%" LOCALSTATE = "%localstatedir%" VERSION = "%version%" +BUGREPORTLINK = "%bugreportlink%" TLSPROTOCOLS = "%tlsprotocols%" MINMAXTLS = %minmaxtls% diff --git a/cherokee/cherokee-panic b/cherokee/cherokee-panic index ea5d7339c..caaad9bb4 100755 --- a/cherokee/cherokee-panic +++ b/cherokee/cherokee-panic @@ -90,7 +90,7 @@ exec 2>&1 echo "Below is a backtrace for this process generated with gdb, which shows" echo "the state of the program at the time the error occured. You are" echo "encouraged to submit this information as a bug report in the Cherokee" - echo "bug tracking system: http://bugs.cherokee-project.com" + echo "bug tracking system: https://github.com/cherokee/webserver/issues" echo echo "Operating System: `uname -a`" echo "Debugger: $debugger" diff --git a/cherokee/error_list.py b/cherokee/error_list.py index acad7f35a..892aed09b 100644 --- a/cherokee/error_list.py +++ b/cherokee/error_list.py @@ -1,12 +1,12 @@ # Macros # CODING_BUG = """It looks like you've hit a bug in the server. Please, \ -do not hesitate to report it at http://bugs.cherokee-project.com/ so \ +do not hesitate to report it at https://github.com/cherokee/webserver/issues so \ the developer team can fix it.""" UNKNOWN_CAUSE = """An unexpected error has just occurred in the \ server. The cause of the issue is unknown. Please, do not hesitate to \ -report it at http://bugs.cherokee-project.com/ so the developer team \ +report it at https://github.com/cherokee/webserver/issues so the developer team \ can fix it.""" SYSTEM_ISSUE = """The issue seems to be related to your system.""" diff --git a/po/admin/Makevars b/po/admin/Makevars index add37f4d7..ba3f6ac02 100644 --- a/po/admin/Makevars +++ b/po/admin/Makevars @@ -34,7 +34,7 @@ COPYRIGHT_HOLDER = Alvaro Lopez Ortega # It can be your email address, or a mailing list address where translators # can write to without being subscribed, or the URL of a web page through # which the translators can contact you. -MSGID_BUGS_ADDRESS = http://bugs.cherokee-project.com/ +MSGID_BUGS_ADDRESS = $(PACKAGE_BUGREPORT) # This is the list of locale categories, beyond LC_MESSAGES, for which the # message catalogs shall be used. It is usually empty. diff --git a/qa/128-ValidMethod-common.py b/qa/128-ValidMethod-common.py index effc054fc..9fc3d42a1 100644 --- a/qa/128-ValidMethod-common.py +++ b/qa/128-ValidMethod-common.py @@ -1,7 +1,7 @@ from base import * DIR = "common_valid_methods1" -MAGIC = "Report bugs to http://bugs.cherokee-project.com" +MAGIC = "Report bugs to " + BUG_REPORT_LINK CONF = """ vserver!1!rule!1280!match = directory diff --git a/qa/299-MethodsRequestBodyHandling.py b/qa/299-MethodsRequestBodyHandling.py index b6a7de5bf..04856c5ff 100644 --- a/qa/299-MethodsRequestBodyHandling.py +++ b/qa/299-MethodsRequestBodyHandling.py @@ -2,7 +2,7 @@ from base import * DIR = "/299-MethodsRequestBodyHandling/" -MAGIC = "Report bugs to http://bugs.cherokee-project.com" +MAGIC = "Report bugs to " + BUG_REPORT_LINK PORT = get_free_port() PYTHON = look_for_python() SOURCE = get_next_source() diff --git a/qa/Makefile.am b/qa/Makefile.am index d274f5033..fcbe9733b 100644 --- a/qa/Makefile.am +++ b/qa/Makefile.am @@ -1,7 +1,7 @@ SUFFIXES = .py.pre .py .py.pre.py: - sed -e "s|%sysconfdir%|${sysconfdir}|g; s|%sbindir%|${sbindir}|g; s|%docdir%|${docdir}|g; s|%prefix%|${prefix}|g; s|%localstatedir%|${localstatedir}|g; s|%libdir%|${libdir}|g; s|%wwwroot%|${WWW_ROOT}|g; s|%cgiroot%|${CGI_ROOT}|g; s|%version%|${PACKAGE_VERSION}|g; s|%pythonpath%|${PYTHON}|g; s|%phpcgi%|${PHPCGI}|g; s|%datadir%|${datadir}|g; s|%localedir%|${localedir}|g" $< > $@ + sed -e "s|%sysconfdir%|${sysconfdir}|g; s|%sbindir%|${sbindir}|g; s|%docdir%|${docdir}|g; s|%prefix%|${prefix}|g; s|%localstatedir%|${localstatedir}|g; s|%libdir%|${libdir}|g; s|%wwwroot%|${WWW_ROOT}|g; s|%cgiroot%|${CGI_ROOT}|g; s|%version%|${PACKAGE_VERSION}|g; s|%bugreportlink%|${PACKAGE_BUGREPORT}|g; s|%pythonpath%|${PYTHON}|g; s|%phpcgi%|${PHPCGI}|g; s|%datadir%|${datadir}|g; s|%localedir%|${localedir}|g" $< > $@ PY_PRE = \ conf.py.pre diff --git a/qa/conf.py.pre b/qa/conf.py.pre index 7c0ed1193..064641f69 100644 --- a/qa/conf.py.pre +++ b/qa/conf.py.pre @@ -22,6 +22,7 @@ SSL_CERT_KEY_FILE = "ssl-keys/set-1.key" # Misc options SERVER_DELAY = 10 +BUG_REPORT_LINK = "%bugreportlink%" # Third party utilities PYTHON_PATH = "%pythonpath%" diff --git a/qa/help.py b/qa/help.py index f4a659d82..34052604b 100644 --- a/qa/help.py +++ b/qa/help.py @@ -26,7 +26,7 @@ -v Run under Valgrind, string=['', 'hel', 'cac', 'cal'] -P Proxy address: host:ip[:public_ip] -Report bugs to http://bugs.cherokee-project.com/ +Report bugs to https://github.com/cherokee/webserver/issues """ def help_print_parameters(): From a16eb03600ad27170e36747a8f001240d33e7c8f Mon Sep 17 00:00:00 2001 From: Thomas Reim Date: Thu, 1 Apr 2021 21:04:25 +0200 Subject: [PATCH 12/14] Remove deprecated OpenSSL/libssl function calls Since OpenSSL version 1.1.0 the OpenSSL team has implemented a new strategy and has extended automatic configuration of the libssl back-end. This increases security and removes the burden from application developers to keep care of the many and various bits and pieces that are required to setup a safe and powerful TLS back-end. Several functions have no effect anymore and have been deprecated. Remove deprecated OpenSSL functions functions from the code if Cherokee is operated using OpenSSL/libssl version 1.1.0 or later. In addition, fix OpenSSL related traces. OpenSSL tries to load a PKCS11 engine for support of smartcard stored keys. This engine is not part of regular OpenSSL packages and has to be installed on top of OpenSSL. If libcrypto cannot find the PKCS11 engine library error notifications are issued, which are ignored by Cherokee, as the missing engine does not harm operation. But system administrators will find the error messages when operating Cherokee with traces enabled. This is confusing as the hidden OpenSSL internal errors are not immediately queried during libssl setup. The first OpenSSL error query is during virtual server setup. Fix this by immediately querying potential OpenSSL errors during engine setup and informing users about the requested OpenSSL task. Signed-off-by: Thomas Reim --- cherokee/cryptor_libssl.c | 44 ++++++++++++++++++++++++--------------- 1 file changed, 27 insertions(+), 17 deletions(-) diff --git a/cherokee/cryptor_libssl.c b/cherokee/cryptor_libssl.c index 5ad567e1b..a5b6067e3 100644 --- a/cherokee/cryptor_libssl.c +++ b/cherokee/cryptor_libssl.c @@ -107,9 +107,11 @@ _free (cherokee_cryptor_libssl_t *cryp) */ ERR_free_strings(); +#if OPENSSL_VERSION_NUMBER < 0x10100000L /* Free all ciphers and digests */ EVP_cleanup(); +#endif cherokee_cryptor_free_base (CRYPTOR(cryp)); return ret_ok; @@ -1887,15 +1889,14 @@ PLUGIN_INIT_NAME(libssl) (cherokee_plugin_loader_t *loader) PLUGIN_INIT_ONCE_CHECK (libssl); /* Init OpenSSL + * In OpenSSL version 1.1.0 and later only needed if non-default + * settings are required. */ #if OPENSSL_VERSION_NUMBER < 0x10100000L OPENSSL_config(NULL); SSL_library_init(); SSL_load_error_strings(); OpenSSL_add_all_algorithms(); -#else - OPENSSL_init_crypto(OPENSSL_INIT_LOAD_CRYPTO_STRINGS | OPENSSL_INIT_ADD_ALL_CIPHERS | OPENSSL_INIT_ADD_ALL_DIGESTS, NULL); - OPENSSL_init_ssl(OPENSSL_INIT_LOAD_SSL_STRINGS, NULL); #endif /* Ensure PRNG has been seeded with enough data @@ -1923,28 +1924,37 @@ PLUGIN_INIT_NAME(libssl) (cherokee_plugin_loader_t *loader) } -# if HAVE_OPENSSL_ENGINE_H +#if HAVE_OPENSSL_ENGINE_H # if OPENSSL_VERSION_NUMBER >= 0x00907000L ENGINE_load_builtin_engines(); +# if OPENSSL_VERSION_NUMBER < 0x10100000L OpenSSL_add_all_algorithms(); +# endif # endif + TRACE(ENTRIES, "Checking for pkcs11 engine ...\n"); e = ENGINE_by_id("pkcs11"); - while (e != NULL) { - if(! ENGINE_init(e)) { - ENGINE_free (e); - LOG_CRITICAL_S (CHEROKEE_ERROR_SSL_PKCS11); - break; - } + if (!e) { + CLEAR_LIBSSL_ERRORS; + TRACE(ENTRIES, "pkcs11 engine is not installed\n"); + } else { + while (e != NULL) { + TRACE(ENTRIES, "Loading pkcs11 engine ...\n"); + if(! ENGINE_init(e)) { + ENGINE_free (e); + LOG_CRITICAL_S (CHEROKEE_ERROR_SSL_PKCS11); + break; + } - if(! ENGINE_set_default(e, ENGINE_METHOD_ALL)) { - ENGINE_free (e); - LOG_CRITICAL_S (CHEROKEE_ERROR_SSL_DEFAULTS); + if(! ENGINE_set_default(e, ENGINE_METHOD_ALL)) { + ENGINE_free (e); + LOG_CRITICAL_S (CHEROKEE_ERROR_SSL_DEFAULTS); + break; + } + ENGINE_finish(e); + ENGINE_free(e); break; } - - ENGINE_finish(e); - ENGINE_free(e); - break; + CLEAR_LIBSSL_ERRORS; } #endif } From ce1f6fa9db50e0eee3c987099a79fe32d78d4b6e Mon Sep 17 00:00:00 2001 From: Thomas Reim Date: Thu, 1 Apr 2021 21:28:24 +0200 Subject: [PATCH 13/14] Update of Cherokee documentation Signed-off-by: Thomas Reim --- admin/PageGeneral.py | 2 +- doc/Makefile.am | 1 + doc/config_advanced.txt | 135 +++++++++++++++++- doc/config_virtual_servers.txt | 10 +- doc/cookbook_ssl.txt | 62 +++++--- doc/media/images/admin_advanced5.png | Bin 12941 -> 141955 bytes doc/media/images/admin_advanced6.png | Bin 0 -> 114010 bytes doc/media/images/admin_vserver_security.png | Bin 14877 -> 90676 bytes .../images/admin_vserver_security_ssl.png | Bin 34729 -> 103197 bytes 9 files changed, 183 insertions(+), 27 deletions(-) create mode 100644 doc/media/images/admin_advanced6.png diff --git a/admin/PageGeneral.py b/admin/PageGeneral.py index 9449aef44..6b416b2fa 100644 --- a/admin/PageGeneral.py +++ b/admin/PageGeneral.py @@ -55,7 +55,7 @@ NOTE_DELETE_DIALOG = N_('You are about to delete an binding. Are you sure you want to proceed?') HELPS = [('config_general', N_("General Configuration")), - ('config_quickstart', N_("Configuration Quickstart"))] + ('config_walkthrough', N_("Configuration Quickstart"))] VALIDATIONS = [ diff --git a/doc/Makefile.am b/doc/Makefile.am index 7e97bb8b5..aee61ea2f 100644 --- a/doc/Makefile.am +++ b/doc/Makefile.am @@ -149,6 +149,7 @@ media/images/admin_advanced2.png \ media/images/admin_advanced3.png \ media/images/admin_advanced4.png \ media/images/admin_advanced5.png \ +media/images/admin_advanced6.png \ media/images/admin_behavior.png \ media/images/admin_general.png \ media/images/admin_general_networking.png \ diff --git a/doc/config_advanced.txt b/doc/config_advanced.txt index 81536ad54..ec354a7e0 100644 --- a/doc/config_advanced.txt +++ b/doc/config_advanced.txt @@ -145,9 +145,138 @@ image::media/images/admin_advanced4.png[Cherokee Admin interface] [[tls]] TLS ~~~ -* DH parameters: - Here you can specify the paths to your Diffie Hellman parameters PEM - files for 512, 1024, 2048 and 4096 bits. + +[[tls-protocols]] +.TLS/SSL Protocols +* Support of TLS/SSL protocols for traffic encryption largely depends on the + capabilities of the underlying link:config_general.html[TLS/SSL engine] and + operating system policies. In addition, suited link:cookbook_ssl.html[cipher + suites] and link:cookbook_ssl.html[ciphers] are required for encryption. + Cherokee TLS/SSL default configuration is aligned to + link:https://wiki.mozilla.org/Security/Server_Side_TLS#[Mozilla] + recommended Server Side TLS configuration (Intermediate compatibility). + It supports encrypted communication with nearly every client released in the + last five (or more) years including, e. g. Windows 7 workstations. + +* Only TLS v1.2 and newer protocols are enabled and provided with valid + cipher suites by the Cherokee default configuration. + +* Availability of TLS v1.1 and below depends on the capabilities of your + link:config_general.html[SSL/TLS back-end]. You have to be aware of the fact + that support of deprecated or obsolete SSL/TLS protocols impose a security + risk on your webserver and operating system. Therefore, most distributions + have disabled or removed support of TLS v1.1 and below in the TLS back-end. .TLS image::media/images/admin_advanced5.png[Cherokee Admin interface] + +Min. TLS protocol version +^^^^^^^^^^^^^^^^^^^^^^^^^ +* Default option 'auto-configured' (recommended) enables protocol versions down + to the lowest version supported by the link:config_general.html[SSL/TLS back-end]. +* Note that a minimum allowed SSL/TLS protocol may have been hardcoded in the + link:config_general.html[SSL/TLS back-end] by your distribution. In this case, + option 'auto-configured' enables protocol versions down to the hardcoded minimum + TLS protocol version. +* Setting this parameter to a particular listed SSL/TLS protocol enables all + protocols down to the chosen protocol version that are supported by + link:config_general.html[SSL/TLS back-end]. + +Max. TLS protocol version +^^^^^^^^^^^^^^^^^^^^^^^^^ +* Default option 'auto-configured' (recommended) enables protocol versions up + to the highest version supported by the link:config_general.html[SSL/TLS back-end]. +* Setting this parameter to a particular listed SSL/TLS protocol enables all + protocols up the chosen protocol version that are supported by the + link:config_general.html[SSL/TLS back-end]. + +Handshake timeout +^^^^^^^^^^^^^^^^^ +* Specify a timeout period for the negotiation of ciphers for traffic + encryption between client and server. + +DH parameters +^^^^^^^^^^^^^ + Here you can specify the paths to your Diffie Hellman parameters PEM + files for 512, 1024, 2048 and 4096 bits. + +Disable SSL/TLS version (deprecated) +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +* These options may be used to disable selected SSL/TLS protocols in addition to + the min./max. settings above. If the link:config_general.html[SSL/TLS back-end] + does not support configuration of min./max. TLS protocols the TLS configuration + page starts with this section. +* This section also outlines SSL/TLS protocol versions that are not supported by + the link:config_general.html[SSL/TLS back-end] at all. + +[[tls-advanced]] +.Advanced TLS/SSL Configuration +* As outlined above Cherokee's default cipher configuration is following + link:https://wiki.mozilla.org/Security/Server_Side_TLS#[Mozilla] Intermediate + Server Side TLS configuration recommendations. This configuration does not + allow communication using TLS v1.1 or below. Therefore, Cherokee does not + provide any (insecure) ciphers for encrypted communication to such outdated + clients. If you really require offering web services to old clients, e. g. + Windows XP or OpenSSL 0.9.8 clients, you need to enable a suited TLS/SSL + protocol. This depends on the capabilities of your SSL/TLS back-end. You + have to be aware of the fact that support of deprecated or obsolete SSL/TLS + protocols impose a security risk for your webserver and system. Therefore, + most distributions have disabled or removed support of TLS v1.1 and below + in their TLS back-ends. Cherokee provides a command-line option to inspect + the capabilities of your TLS back-end: +---- + $ cherokee -i + + Compilation + Version: 1.2.104 + [...] + OpenSSL support: libssl (OpenSSL 1.1.1j 16 Feb 2021) + + [...] + + Support + [...] + SSL/TLS: libssl (OpenSSL 1.1.1j 16 Feb 2021) + supported protocols: SSLv3, TLSv1, TLSv1.1, TLSv1.2, TLSv1.3 - default min. protocol: TLSv1.2 + protocols deactivated by maintainer: SSLv3 + TLS SNI: yes +---- + +* The command's output first shows name and version of the SSL/TLS back-end, + which has been used to build Cherokee (section 'Compilation'). In section + 'Support' the actually installed back-end is shown. Cherokee also reports + SSL/TLS protocols supported by the used back-end. Protocols not listed there + have been removed from the back-end. Finally, protocols are listed that + cannot be used because your distribution has disabled (deactivated) them. + In addition, the command's output indicates if a minimum allowed + SSL/TLS protocol has been hardcoded in the back-end. Unsupported or + deactivated protocols cannot be used by Cherokee at all. Use of protocol + versions below a hardcoded minimum allowed SSL/TLS protocol depends on + Cherokee's TLS settings above: In mode 'auto-configured' only the specified + minimum protocol version and versions above are available for use. Setting option + 'Min. TLS protocol version' to one of the listed protocols will configure + the back-end to allow use of the selected protocol version and all versions + above if they are part of the supported protocols list and not shown in the + deactivated protocols list. +* After a suited TLS/SSL protocol has been enabled you have to configure an + extended set of link:cookbook_ssl.html[ciphers] for the affected virtual servers. + The set must include some insecure and outdated link:cookbook_ssl.html[ciphers] + that are supported by your old clients. +* Cherokee still can be built with previous versions of OpenSSL/libssl back-end, e. g. + OpenSSL version 0.9.8. On modern secure servers system administrators + are very likely not able to put a suited TLS protocol into operation that is + supported by old legacy clients. If this is the case you can build and locally + install an additional, insecure previous version of OpenSSL on your server + and build Cherokee using this back-end. Cherokee's default cipher configuration + is adapted to this legacy OpenSSL back-end and now supports the cipher suites + recommended by link:https://wiki.mozilla.org/Security/Server_Side_TLS#[Mozilla] Old + compatibility configuration. As previous versions of OpenSSL did not support + configuration of minimum or maximum allowed TLS protocols, the advanced TLS + configuration screen is also different: + +.TLS for back-ends without min./max. TLS protocol configuration +image::media/images/admin_advanced6.png[Cherokee Admin interface] + +* Hint: When starting Cherokee Admin with an empty configuration file (rename + the existing file to, e. g. cherokee.conf.sik, Cherokee will report its + default SSL/TLS protocol availability settings. diff --git a/doc/config_virtual_servers.txt b/doc/config_virtual_servers.txt index 19fdb7b80..ab04ed9bb 100644 --- a/doc/config_virtual_servers.txt +++ b/doc/config_virtual_servers.txt @@ -487,11 +487,11 @@ image::media/images/admin_vserver_security.png[Certificates] If you want HTTPS to work, you must remember this: . Providing the PEM-encoded files is mandatory for both `Certificate` - and `Certificate key` fields. Providing the `CA List` and the - `Client Certs` is optional. The trusted CA certificates file should - be a single file with all the certificates concatenated. The `Client - Certs`, also PEM-encoded, is used to check the client - certificates. You can read more about + and `Certificate key` fields. Providing `Client Certs` is optional. + The trusted server certificates file should be a single file with + the server certificate and the issuing CA chain certificates + concatenated. The `Client Certs`, also PEM-encoded, is used to + check the client certificates. You can read more about link:cookbook_ssl.html#ssl-support[enabling SSL support] on the SSL/TLS section of the documentation. diff --git a/doc/cookbook_ssl.txt b/doc/cookbook_ssl.txt index 882f01f1e..651c89102 100644 --- a/doc/cookbook_ssl.txt +++ b/doc/cookbook_ssl.txt @@ -143,7 +143,7 @@ straightforward actions is order to enable it: intermediate file which links such CA to a higher-level CA that works with all browsers and operating systems. You'll need a chained certificate file in order to instruct your visitors on how - to follow the chain of trust. You can reed more about + to follow the chain of trust. You can read more about link:#chained-certificates[chained certificates] later on this document. You will only have to concatenate the certificate files and put the combined text into a file used for the @@ -160,23 +160,49 @@ cat public.pem inter_ca_public.pem > chained.pem [[advanced]] .Advanced options -In order to make SSL more secure, Cherokee offers the following advanced -options: - - . The `Ciphers` field can be set up to to allow specific cipher suites, - making communication with the client bound to stronger ciphers. - We made the following the default: - `ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384: - ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-SHA256: - ECDHE-RSA-RC4-SHA:ECDHE-RSA-AES256-SHA: - DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-SHA256: - DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-SHA256: - DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:RC4-SHA: - AES256-GCM-SHA384:AES256-SHA256:CAMELLIA256-SHA: - ECDHE-RSA-AES128-SHA:AES128-GCM-SHA256:AES128-SHA256: - AES128-SHA:CAMELLIA128-SHA` - - . In normal SSL communication the clients cipher suite preference +In order to make TLS/SSL more secure, Cherokee aligns its default TLS encryption +configuration to link:https://wiki.mozilla.org/Security/Server_Side_TLS#[Mozilla] +recommended Server Side TLS configuration. Intermediate compatibility has been +chosen to allow services that don't need compatibility with legacy clients, such +as Windows XP or old versions of OpenSSL. This is the recommended configuration +for the vast majority of services, as it is highly secure and compatible with +nearly every client released in the last five (or more) years. +In order to customise TLS/SSL security settings Cherokee offers the following +advanced options: + + . The `Ciphersuites` field (TLS v1.3) + can be set up to offer a customer specific set of cipher suites to clients + for encryption of the communication with the clients. + The default configuration provides intermediate compatibility using the + following default cipher suites for encryption of TLS v1.3 traffic: + `TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256` + + . The `Ciphers` field (TLS v1.2 and below) + can be set up to offer a customer specific set of cipher suites to clients + for encryption of the communication with the clients. + The configuration provides intermediate compatibility using the following + default cipher suites for encryption of TLS v1.2 traffic: + `ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256: + ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384: + ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305: + DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384`. + Note that link:https://wiki.mozilla.org/Security/Server_Side_TLS#[Mozilla] + Intermediate configuration does not allow communication using TLS v1.1 or + below. Therefore, Cherokee default cipher configuration does not provide + any (insecure) ciphers for encrypted communication to such outdated clients. + If you really require offering web services to old clients first you need + to link:config_advanced.html[enable a suited TLS/SSL protocol]. This depends + on the capabilities of your SSL/TLS back-end. You have to be aware of the + fact that support of deprecated or obsolete SSL/TLS protocols impose a + security risk for your webserver and system. Therefore, most distributions + have disabled or removed support of TLS v1.1 and below in the TLS back-end. + After a suited TLS/SSL protocol has been enabled an extended set of ciphers + needs to be configured in the field. Enter the default ciphers above plus + some insecure and outdated ciphers that are supported by your legacy clients. + Please check link:https://wiki.mozilla.org/Security/Server_Side_TLS#[Mozilla] + Old compatibility configuration for further details. + + . In normal TLS/SSL communication the clients cipher suite preference is respected. You may understand that if a client prefers a weak cipher but supports a strong cipher, the strong cipher would never be used. We have introduced the option `Server Preference` to diff --git a/doc/media/images/admin_advanced5.png b/doc/media/images/admin_advanced5.png index d956e051b48c29648cba05539188f8811b932269..e3d29dc96459e58d3fff48db7232bda4355fc3d7 100644 GIT binary patch literal 141955 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 K4X)^K^!p!z-n$?G literal 12941 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 UOq!AX_owx8Qp(U0h)Ll80J2!V#Q*>R diff --git a/doc/media/images/admin_advanced6.png b/doc/media/images/admin_advanced6.png new file mode 100644 index 0000000000000000000000000000000000000000..693edd4c0591fe001e74aff02d3d51e302a86708 GIT binary patch literal 114010 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 z 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 literal 0 HcmV?d00001 diff --git a/doc/media/images/admin_vserver_security.png b/doc/media/images/admin_vserver_security.png index 4f24bb74b78386ae2f12ec0590bb5d704b368623..d595fa0d23c3ee20273d13aae8c6d87155823edc 100644 GIT binary patch literal 90676 zcmeFYbyS?qvo1RL0Kq~C?!kk*dvJ%~&fxCu1Pw01-QC@T2X}XOceo_qPriN6KKtCg z);<4i)|$1ZyPtZhy1J_S?RuGDS!odjI4n2-0DvGSDkKj8fRDX>n1JAKJ@fXRde!#PVbSYxF=&M*g{;R} zUNr5LzGoCV`UNJT_fdG23jbZ

d}$E#YH_Y;NmOTK2~YW2lt{c2U!LIlQhbgUw8 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 LEaxVeI*9%Qz^*J? literal 14877 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 Ly(p7;_3nQF-@ZB! diff --git a/doc/media/images/admin_vserver_security_ssl.png b/doc/media/images/admin_vserver_security_ssl.png index 3d339226d56710a191e9df64e2b5cf12c44d41f7..52e0c18bd412a91f7c7a500d6dfbbc2710109fda 100644 GIT binary patch literal 103197 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 omaf|g11;w2^o)!XCAwAn<-@ok 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 NDqU2}S1|SczW~=Y^~C@H literal 34729 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 Date: Thu, 1 Apr 2021 21:32:33 +0200 Subject: [PATCH 14/14] Update po translation files - Added new strings to be translated - Fixed German translation file (correct translation checked for about 50%) Signed-off-by: Thomas Reim --- po/admin/ca.po | 932 +++++++++++++++-------------- po/admin/de.po | 1438 ++++++++++++++++++++++----------------------- po/admin/en.po | 949 ++++++++++++++++-------------- po/admin/es.po | 949 ++++++++++++++++-------------- po/admin/fr.po | 903 +++++++++++++++------------- po/admin/gl.po | 948 ++++++++++++++++-------------- po/admin/it.po | 962 ++++++++++++++++-------------- po/admin/ja.po | 917 ++++++++++++++++------------- po/admin/nl.po | 952 ++++++++++++++++-------------- po/admin/pl.po | 944 +++++++++++++++-------------- po/admin/pt_BR.po | 909 +++++++++++++++------------- po/admin/sv_SE.po | 925 +++++++++++++++-------------- po/admin/zh_CN.po | 921 +++++++++++++++-------------- 13 files changed, 6736 insertions(+), 5913 deletions(-) diff --git a/po/admin/ca.po b/po/admin/ca.po index 12fb5111b..27d265526 100644 --- a/po/admin/ca.po +++ b/po/admin/ca.po @@ -1,18 +1,19 @@ -# Catalan translations for Cherokee package -# Traducciones al Catalan para el paquete Cherokee. -# Traducció al Català per al paquet Cherokee +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR Alvaro Lopez Ortega +# This file is distributed under the same license as the cherokee package. +# FIRST AUTHOR , YEAR. # # Author: # Sergi Gomis Gascó # msgid "" msgstr "" -"Project-Id-Version: cherokee 0.99.31b3906\n" -"Report-Msgid-Bugs-To: http://bugs.cherokee-project.com/\n" -"POT-Creation-Date: 2014-01-04 00:54+0100\n" +"Project-Id-Version: cherokee 1.2.104\n" +"Report-Msgid-Bugs-To: https://github.com/cherokee/webserver/issues\n" +"POT-Creation-Date: 2021-03-26 19:04+0100\n" "PO-Revision-Date: 2010-06-15 20:33+0100\n" "Last-Translator: Sergi Gomis Gascó \n" -"Language-Team: \n" +"Language-Team: ca\n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -108,7 +109,7 @@ msgstr "Informació d'Origen" msgid "Assign Information Sources" msgstr "Assignar l'origen d'informació" -#: admin/Balancer.py:136 admin/PageIndex.py:204 admin/PageRule.py:112 +#: admin/Balancer.py:136 admin/PageIndex.py:182 admin/PageRule.py:112 #: admin/plugins/bind.py:69 admin/plugins/bind.py:121 #: admin/plugins/custom_error.py:41 admin/plugins/method.py:31 msgid "Choose" @@ -143,17 +144,17 @@ msgstr "No es pot copiar la configuració a" #: admin/CTK/CTK/Druid.py:216 admin/CTK/CTK/Druid.py:224 #: admin/CTK/CTK/Druid.py:232 admin/CTK/CTK/Druid.py:238 admin/Icons.py:362 #: admin/Mime.py:110 admin/PageGeneral.py:289 admin/PageGeneral.py:317 -#: admin/PageIndex.py:232 admin/PageIndex.py:308 admin/PageRule.py:225 -#: admin/PageRule.py:276 admin/PageRule.py:302 admin/PageSource.py:225 -#: admin/PageSource.py:411 admin/PageSource.py:428 admin/PageSource.py:442 -#: admin/PageVServers.py:215 admin/PageVServers.py:252 -#: admin/PageVServers.py:281 admin/plugins/redir.py:120 +#: admin/PageIndex.py:246 admin/PageRule.py:225 admin/PageRule.py:276 +#: admin/PageRule.py:302 admin/PageSource.py:225 admin/PageSource.py:411 +#: admin/PageSource.py:428 admin/PageSource.py:442 admin/PageVServers.py:215 +#: admin/PageVServers.py:252 admin/PageVServers.py:281 +#: admin/plugins/redir.py:120 msgid "Cancel" msgstr "Cancelar" #: admin/CTK/CTK/Dialog.py:165 admin/CTK/CTK/Dialog.py:272 #: admin/CTK/CTK/Druid.py:243 admin/PageException.py:89 -#: admin/PageException.py:93 admin/PageGeneral.py:283 admin/PageIndex.py:277 +#: admin/PageException.py:93 admin/PageGeneral.py:283 admin/PageIndex.py:215 #: admin/PageSource.py:402 admin/plugins/error_redir.py:110 msgid "Close" msgstr "Tancaar" @@ -191,14 +192,14 @@ msgstr "Carregant" #: admin/CTK/CTK/Image.py:99 admin/CgiBase.py:69 admin/CgiBase.py:71 #: admin/CgiBase.py:124 admin/CgiBase.py:125 admin/CgiBase.py:126 #: admin/CgiBase.py:127 admin/CgiBase.py:128 admin/Graph.py:125 -#: admin/PageAdvanced.py:150 admin/PageEntry.py:150 admin/PageEntry.py:159 -#: admin/PageGeneral.py:193 admin/PageSource.py:296 -#: admin/plugins/dirlist.py:56 admin/plugins/exists.py:72 -#: admin/plugins/exists.py:77 admin/plugins/exists.py:78 -#: admin/plugins/exists.py:79 admin/plugins/exists.py:109 -#: admin/plugins/exists.py:115 admin/plugins/exists.py:116 -#: admin/plugins/exists.py:117 admin/plugins/file.py:40 -#: admin/plugins/ldap.py:53 admin/plugins/streaming.py:43 +#: admin/PageAdvanced.py:198 admin/PageEntry.py:150 admin/PageEntry.py:159 +#: admin/PageGeneral.py:193 admin/PageSource.py:296 admin/plugins/dirlist.py:59 +#: admin/plugins/exists.py:72 admin/plugins/exists.py:77 +#: admin/plugins/exists.py:78 admin/plugins/exists.py:79 +#: admin/plugins/exists.py:109 admin/plugins/exists.py:115 +#: admin/plugins/exists.py:116 admin/plugins/exists.py:117 +#: admin/plugins/file.py:42 admin/plugins/ldap.py:53 +#: admin/plugins/streaming.py:43 msgid "Enabled" msgstr " Actiu" @@ -217,11 +218,12 @@ msgstr "Anterior" msgid "Optional" msgstr "Opcional" -#: admin/CTK/CTK/ToggleButton.py:154 +#: admin/CTK/CTK/ToggleButton.py:154 admin/PageAdvanced.py:245 +#: admin/PageAdvanced.py:258 msgid "Disable" msgstr "Deshabilitat" -#: admin/CTK/CTK/ToggleButton.py:155 admin/PageVServer.py:669 +#: admin/CTK/CTK/ToggleButton.py:155 admin/PageVServer.py:678 #: admin/wizards/flcache.py:157 msgid "Enable" msgstr " Actiu" @@ -269,7 +271,7 @@ msgstr "" "Si el sistema de registre hauria de llegir i utilitzar la capçalera X-Reail-" "IP i utilitzar-la en REMOTE_ADDR." -#: admin/CgiBase.py:40 admin/PageVServer.py:70 +#: admin/CgiBase.py:40 admin/PageVServer.py:74 msgid "" "Accept all the X-Real-IP and X-Forwarded-For headers. WARNING: Turn it on " "only if you are centain of what you are doing." @@ -290,11 +292,11 @@ msgstr "" msgid "Read X-Real-IP" msgstr "Llegir X-Real-IP" -#: admin/CgiBase.py:71 admin/PageVServer.py:610 +#: admin/CgiBase.py:71 admin/PageVServer.py:614 msgid "Don't check origin" msgstr "No comprovar origen" -#: admin/CgiBase.py:73 admin/PageVServer.py:613 +#: admin/CgiBase.py:73 admin/PageVServer.py:617 msgid "Accept from Hosts" msgstr "Acceptar de Hosts" @@ -336,7 +338,7 @@ msgid "Allow X-Sendfile" msgstr "Permetre X-Sendfile" #: admin/CgiBase.py:128 admin/plugins/exists.py:77 admin/plugins/exists.py:115 -#: admin/plugins/file.py:40 +#: admin/plugins/file.py:42 msgid "Use I/O cache" msgstr "Utilitzar cache d'E/S" @@ -428,7 +430,7 @@ msgstr "" "virtual." #: admin/Graph.py:118 admin/PageEntry.py:538 admin/PageSource.py:257 -#: admin/PageStatus.py:70 admin/PageVServer.py:731 admin/PageVServers.py:210 +#: admin/PageStatus.py:70 admin/PageVServer.py:740 admin/PageVServers.py:210 msgid "Unknown" msgstr "Desconegut" @@ -440,7 +442,7 @@ msgstr "Estadístiques de tràfic" msgid "Allows to specify an alternative Document Root path." msgstr "Permet especificar la ruta d'una arrel de documents alternatius." -#: admin/Handler.py:43 admin/PageEntry.py:523 admin/PageVServer.py:462 +#: admin/Handler.py:43 admin/PageEntry.py:523 admin/PageVServer.py:466 #: admin/PageVServers.py:128 admin/wizards/django.py:191 #: admin/wizards/mono.py:199 admin/wizards/php.py:39 admin/wizards/php.py:342 #: admin/wizards/uwsgi.py:267 @@ -452,7 +454,7 @@ msgid "Extension List" msgstr "Llista d'Extensions" #: admin/Icons.py:129 admin/Icons.py:328 admin/Mime.py:96 admin/Mime.py:131 -#: admin/consts.py:188 admin/plugins/extensions.py:61 +#: admin/consts.py:187 admin/plugins/extensions.py:61 #: admin/wizards/flcache.py:141 msgid "Extensions" msgstr "Extensions" @@ -473,12 +475,13 @@ msgstr "Arxius" msgid "Add New File" msgstr "Afegir nou arxiu" -#: admin/Icons.py:197 admin/Icons.py:329 admin/Rule.py:174 admin/consts.py:42 -#: admin/consts.py:128 admin/consts.py:262 +#: admin/Icons.py:197 admin/Icons.py:329 admin/PageVServer.py:674 +#: admin/PageVServer.py:675 admin/Rule.py:174 admin/consts.py:42 +#: admin/consts.py:128 admin/consts.py:261 msgid "Default" msgstr "Defecte" -#: admin/Icons.py:198 admin/Icons.py:330 admin/consts.py:187 +#: admin/Icons.py:198 admin/Icons.py:330 admin/consts.py:186 #: admin/plugins/directory.py:31 msgid "Directory" msgstr "Directori" @@ -491,7 +494,7 @@ msgstr "Anar al pare" msgid "Modify" msgstr "Modificar" -#: admin/Icons.py:214 admin/PageAdvanced.py:168 admin/PageAdvanced.py:192 +#: admin/Icons.py:214 admin/PageAdvanced.py:216 admin/PageAdvanced.py:316 msgid "Special Files" msgstr "Arxius Especials" @@ -603,7 +606,7 @@ msgstr "Guardar" msgid "Home" msgstr "Casa" -#: admin/Page.py:155 admin/PageAdvanced.py:150 admin/PageIndex.py:84 +#: admin/Page.py:155 admin/PageAdvanced.py:198 admin/PageIndex.py:62 #: admin/PageStatus.py:40 admin/PageStatus.py:112 msgid "Status" msgstr "Estat" @@ -620,7 +623,7 @@ msgstr "Servidor v" msgid "Sources" msgstr "Recursos" -#: admin/Page.py:159 admin/PageAdvanced.py:97 admin/PageAdvanced.py:198 +#: admin/Page.py:159 admin/PageAdvanced.py:145 admin/PageAdvanced.py:322 msgid "Advanced" msgstr "Avançat" @@ -632,7 +635,19 @@ msgstr "Ajuda" msgid "Updating..." msgstr "Actualitzant..." -#: admin/PageAdvanced.py:64 +#: admin/PageAdvanced.py:56 +msgid "" +"

WARNING: The SSL/TLS back-end supports more recent\n" +"versions of TLS protocols, which are not recognized by Cherokee. Please " +"check\n" +"for latest Cherokee updates or report this issue. As a temporary workaround " +"please\n" +"set 'Max. TLS protocol version' to the maximum TLS protocol version " +"supported by\n" +"Cherokee.

Following unknown TLS protocols have been found:" +msgstr "" + +#: admin/PageAdvanced.py:94 msgid "" "

WARNING: This section contains advanced\n" "configuration parameters. Changing things is not recommended unless\n" @@ -642,16 +657,16 @@ msgstr "" "de configuració avançada. Canviar algo aquí no és recomanat a menys\n" "que es sàpiga realment el que s'està fent.

" -#: admin/PageAdvanced.py:68 +#: admin/PageAdvanced.py:98 msgid "Defines which thread policy the OS should apply to the server." msgstr "" "Definir quina política de fils d'execució ha d'aplicar al S.O. al servidor." -#: admin/PageAdvanced.py:69 +#: admin/PageAdvanced.py:99 msgid "If empty, Cherokee will calculate a default number." msgstr "Si està buit, Cherokee calcularà un valor per defecte." -#: admin/PageAdvanced.py:70 +#: admin/PageAdvanced.py:100 msgid "" "It defines how many file descriptors the server should handle. Default is " "the number showed by ulimit -n" @@ -659,21 +674,21 @@ msgstr "" "Defineix quants descriptors d'arxiu pot manipular el servidor. Per defecte " "és el número retornat per ulimit -n" -#: admin/PageAdvanced.py:71 +#: admin/PageAdvanced.py:101 msgid "Allows to choose the internal file descriptor polling method." msgstr "" "Permetre escollir el mètode intern de inspecció dels descriptors de arxiu." -#: admin/PageAdvanced.py:72 +#: admin/PageAdvanced.py:102 msgid "Minimum size of a file to use sendfile(). Default: 32768 Bytes." msgstr "" "Tamany mínim d'un arxiu per utilitzar sendfile(). Per defecte: 32768 bytes." -#: admin/PageAdvanced.py:73 +#: admin/PageAdvanced.py:103 msgid "Maximum size of a file to use sendfile(). Default: 2 GB." msgstr "Tamany màxim d'un arxiu per utilitzar sendfile(). Per defecte 2GB." -#: admin/PageAdvanced.py:74 +#: admin/PageAdvanced.py:104 msgid "" "Name a program that will be called if, by some reason, the server fails. " "Default: cherokee-panic." @@ -681,15 +696,15 @@ msgstr "" "Nom del programa que s'executarà si, per algun motiu falla el servidor. Per " "defecte cherokee-panic." -#: admin/PageAdvanced.py:75 +#: admin/PageAdvanced.py:105 msgid "Path of the PID file. If empty, the file will not be created." msgstr "Ruta del arxiu PID. Si està buit, el arxiu no es crearà." -#: admin/PageAdvanced.py:76 +#: admin/PageAdvanced.py:106 msgid "Max. length of the incoming connection queue." msgstr "Màxima longitud de la cua de connexions entrants." -#: admin/PageAdvanced.py:77 +#: admin/PageAdvanced.py:107 msgid "" "Set the number of how many internal connections can be held for reuse by " "each thread. Default: 20." @@ -697,17 +712,17 @@ msgstr "" "Número de connexions internes que es mantindran per re-utilitzar per cada " "fil. Per defecte: 20." -#: admin/PageAdvanced.py:78 +#: admin/PageAdvanced.py:108 msgid "" "Sets the number of seconds between log consolidations (flushes). Default: 10 " "seconds." msgstr "Número de segons entre volcat del registre. Per defecte: 10 segons." -#: admin/PageAdvanced.py:79 +#: admin/PageAdvanced.py:109 msgid "Time lapse (in seconds) between Nonce cache clean ups." msgstr "Temps (en segons) entre la neteja de la cache de Nonce's" -#: admin/PageAdvanced.py:80 +#: admin/PageAdvanced.py:110 msgid "" "Enables the server-wide keep-alive support. It increases the performance. It " "is usually set on." @@ -715,7 +730,7 @@ msgstr "" "Activa el suport de servidor a tot el manteniment de connexió. Augmenta el " "rendiment. En general s'estableix ON." -#: admin/PageAdvanced.py:81 +#: admin/PageAdvanced.py:111 msgid "" "Maximum number of HTTP requests that can be served by each keepalive " "connection." @@ -723,32 +738,32 @@ msgstr "" "Nombre màxim de peticions HTTP que poden ser servides per cada connexió " "KeepAlive." -#: admin/PageAdvanced.py:82 +#: admin/PageAdvanced.py:112 msgid "" "Allows the server to use Chunked encoding to try to keep Keep-Alive enabled." msgstr "" "Permet al servidor utilitzar codificació fragmentada per mantenir Keep-Alive " "activat." -#: admin/PageAdvanced.py:83 +#: admin/PageAdvanced.py:113 msgid "Activate or deactivate the I/O cache globally." msgstr "Activar o desactivar globalment la cache d'E/S" -#: admin/PageAdvanced.py:84 +#: admin/PageAdvanced.py:114 msgid "Number of pages that the cache should handle." msgstr "Número de pàgines que el cache ha de gestionar." -#: admin/PageAdvanced.py:85 +#: admin/PageAdvanced.py:115 #, fuzzy msgid "Files under this size (in bytes) will not be cached." msgstr "Tamany mínim d'arxiu que serà cachejat." -#: admin/PageAdvanced.py:86 +#: admin/PageAdvanced.py:116 #, fuzzy msgid "Files over this size (in bytes) will not be cached." msgstr "Tamany màxim d'arxiu que serà cachejat." -#: admin/PageAdvanced.py:87 +#: admin/PageAdvanced.py:117 msgid "" "How long (in seconds) the file information should last cached without " "refreshing it." @@ -756,167 +771,228 @@ msgstr "" "Quant de temps (en segons) s'ha de mantenir en cache la informació del arxiu " "sense refrescar-la." -#: admin/PageAdvanced.py:88 +#: admin/PageAdvanced.py:118 msgid "How long (in seconds) the file content should last cached." msgstr "Quant de temps (en segons) ha de mantenir l'últim cache." -#: admin/PageAdvanced.py:89 +#: admin/PageAdvanced.py:119 msgid "Path to a Diffie Hellman (DH) parameters PEM file: 512 bits." msgstr "Ruta al arxiu de paràmetres PEM Diffi Hellman (DH): 512 bits" -#: admin/PageAdvanced.py:90 +#: admin/PageAdvanced.py:120 msgid "Path to a Diffie Hellman (DH) parameters PEM file: 1024 bits." msgstr "Ruta al arxiu de paràmetres PEM Diffi Hellman (DH): 1024 bits" -#: admin/PageAdvanced.py:91 +#: admin/PageAdvanced.py:121 msgid "Path to a Diffie Hellman (DH) parameters PEM file: 2048 bits." msgstr "Ruta al arxiu de paràmetres PEM Diffi Hellman (DH): 2048 bits" -#: admin/PageAdvanced.py:92 +#: admin/PageAdvanced.py:122 msgid "Path to a Diffie Hellman (DH) parameters PEM file: 4096 bits." msgstr "Ruta al arxiu de paràmetres PEM Diffi Hellman (DH): 4096 bits" -#: admin/PageAdvanced.py:93 +#: admin/PageAdvanced.py:123 +msgid "Your Cherokee Web Server does not support SSL/TLS encryption." +msgstr "" + +#: admin/PageAdvanced.py:124 msgid "Timeout for the TLS/SSL handshake. Default: 15 seconds." msgstr "" -#: admin/PageAdvanced.py:94 +#: admin/PageAdvanced.py:125 +msgid "Beware: it is vulnerable. You should disable SSLv2." +msgstr "" + +#: admin/PageAdvanced.py:126 +msgid "Beware: it is vulnerable. You should disable SSLv3." +msgstr "" + +#: admin/PageAdvanced.py:127 +msgid "TLSv1 is deprecated" +msgstr "" + +#: admin/PageAdvanced.py:128 +msgid "TLSv1.1 is deprecated" +msgstr "" + +#: admin/PageAdvanced.py:129 admin/PageAdvanced.py:130 +msgid " " +msgstr "" + +#: admin/PageAdvanced.py:131 +msgid "" +"The following options work in combination with above min/max TLS protocol " +"version settings. They are deprecated, only set the minimum and maximum " +"supported protocol versions instead." +msgstr "" + +#: admin/PageAdvanced.py:133 +msgid "" +"Minimum required TLS protocol version from clients (Default: auto-configured " +"by libssl)" +msgstr "" + +#: admin/PageAdvanced.py:134 msgid "" -"Allow clients to use SSL version 2 - Beware: it is vulnerable. (Default: No)" +"Maximum supported TLS protocol version (Default: auto-configured by libssl)" msgstr "" -#: admin/PageAdvanced.py:119 admin/PageAdvanced.py:121 +#: admin/PageAdvanced.py:167 admin/PageAdvanced.py:169 msgid "Allowed" msgstr "Permès" -#: admin/PageAdvanced.py:119 +#: admin/PageAdvanced.py:167 msgid "Keep Alive" msgstr "Keep Alive" -#: admin/PageAdvanced.py:120 +#: admin/PageAdvanced.py:168 msgid "Max keepalive reqs" msgstr "Capacitat màxima de connexions obertes" -#: admin/PageAdvanced.py:121 +#: admin/PageAdvanced.py:169 msgid "Chunked Encoding" msgstr "Codificació fragmentada" -#: admin/PageAdvanced.py:122 +#: admin/PageAdvanced.py:170 msgid "Polling Method" msgstr "Mètode de Polling" -#: admin/PageAdvanced.py:123 +#: admin/PageAdvanced.py:171 msgid "Sendfile min size" msgstr "Mida mínima Sendfile" -#: admin/PageAdvanced.py:124 +#: admin/PageAdvanced.py:172 msgid "Sendfile max size" msgstr "Mida màxima Sendfile" -#: admin/PageAdvanced.py:126 admin/PageAdvanced.py:189 +#: admin/PageAdvanced.py:174 admin/PageAdvanced.py:313 msgid "Connections" msgstr "Connexions" -#: admin/PageAdvanced.py:134 +#: admin/PageAdvanced.py:182 msgid "Thread Number" msgstr "Política de números" -#: admin/PageAdvanced.py:135 +#: admin/PageAdvanced.py:183 msgid "Thread Policy" msgstr "Política de fils" -#: admin/PageAdvanced.py:136 +#: admin/PageAdvanced.py:184 msgid "File descriptors" msgstr "Descripció de arxius" -#: admin/PageAdvanced.py:137 +#: admin/PageAdvanced.py:185 msgid "Listening queue length" msgstr "Longitud de la cua de listen()" -#: admin/PageAdvanced.py:138 admin/plugins/proxy.py:239 +#: admin/PageAdvanced.py:186 admin/plugins/proxy.py:239 msgid "Reuse connections" msgstr "Refusar connexió" -#: admin/PageAdvanced.py:139 +#: admin/PageAdvanced.py:187 msgid "Log flush time" msgstr "Temps bolcar del registre" -#: admin/PageAdvanced.py:140 +#: admin/PageAdvanced.py:188 msgid "Nonces clean up time" msgstr "Temps de neteja de Nonce" -#: admin/PageAdvanced.py:142 admin/PageAdvanced.py:190 +#: admin/PageAdvanced.py:190 admin/PageAdvanced.py:314 msgid "Resources" msgstr "Recursos" -#: admin/PageAdvanced.py:151 +#: admin/PageAdvanced.py:199 msgid "Max pages" msgstr "Pàgines Max" -#: admin/PageAdvanced.py:152 +#: admin/PageAdvanced.py:200 msgid "File Min Size" msgstr "Mida mínima d'arxiu" -#: admin/PageAdvanced.py:153 +#: admin/PageAdvanced.py:201 msgid "File Max Size" msgstr "Mida màxima d'arxiu" -#: admin/PageAdvanced.py:154 +#: admin/PageAdvanced.py:202 msgid "Lasting: stat" msgstr "Duració: stat" -#: admin/PageAdvanced.py:155 +#: admin/PageAdvanced.py:203 msgid "Lasting: mmap" msgstr "Duració: mmpa" -#: admin/PageAdvanced.py:157 admin/PageAdvanced.py:191 +#: admin/PageAdvanced.py:205 admin/PageAdvanced.py:315 msgid "I/O cache" msgstr "Cache E/S" -#: admin/PageAdvanced.py:165 +#: admin/PageAdvanced.py:213 msgid "Panic action" msgstr "Acció de pànic" -#: admin/PageAdvanced.py:166 +#: admin/PageAdvanced.py:214 msgid "PID file" msgstr "Arxiu PID" -#: admin/PageAdvanced.py:176 admin/PageEntry.py:84 admin/PageVServer.py:476 -#: admin/plugins/common.py:42 admin/plugins/common.py:43 -#: admin/plugins/dirlist.py:55 admin/plugins/proxy.py:240 -msgid "Allow" -msgstr "Permetre" +#: admin/PageAdvanced.py:245 admin/PageAdvanced.py:247 +#: admin/PageAdvanced.py:258 admin/PageAdvanced.py:260 +#, fuzzy +msgid "Disable " +msgstr "Deshabilitat" + +#: admin/PageAdvanced.py:247 +msgid "Protocol deacrivated" +msgstr "" + +#: admin/PageAdvanced.py:247 +msgid "Protocol not supported" +msgstr "" + +#: admin/PageAdvanced.py:260 +msgid "Protocol deactivated" +msgstr "" -#: admin/PageAdvanced.py:176 -msgid "Allow SSL v2" +#: admin/PageAdvanced.py:262 +msgid "Turn off selected TLS Protocols (Deprecated)" msgstr "" -#: admin/PageAdvanced.py:177 +#: admin/PageAdvanced.py:270 admin/PageAdvanced.py:271 +msgid "auto-configured" +msgstr "" + +#: admin/PageAdvanced.py:285 +msgid "Min. TLS protocol version" +msgstr "" + +#: admin/PageAdvanced.py:290 +msgid "Max. TLS protocol version" +msgstr "" + +#: admin/PageAdvanced.py:291 msgid "Handshake Timeout" msgstr "Temps d'espera del Hadshake" -#: admin/PageAdvanced.py:178 +#: admin/PageAdvanced.py:292 msgid "DH parameters: 512 bits" msgstr "Paràmetres DH: 512 bits" -#: admin/PageAdvanced.py:179 +#: admin/PageAdvanced.py:293 msgid "DH parameters: 1024 bits" msgstr "Paràmetres DH: 1024 bits" -#: admin/PageAdvanced.py:180 +#: admin/PageAdvanced.py:294 msgid "DH parameters: 2048 bits" msgstr "Paràmetres DH: 2048 bits" -#: admin/PageAdvanced.py:181 +#: admin/PageAdvanced.py:295 msgid "DH parameters: 4096 bits" msgstr "Paràmetres DH: 4096 bits" -#: admin/PageAdvanced.py:183 admin/PageAdvanced.py:193 -#: admin/PageGeneral.py:239 admin/plugins/bind.py:92 +#: admin/PageAdvanced.py:296 admin/PageAdvanced.py:317 admin/PageGeneral.py:239 +#: admin/plugins/bind.py:92 msgid "TLS" msgstr "TLS" -#: admin/PageAdvanced.py:199 +#: admin/PageAdvanced.py:323 msgid "Advanced Configuration" msgstr "Configuració avançada" @@ -1017,7 +1093,7 @@ msgstr "Encoder GZip" msgid "Deflate encoder" msgstr "Desinflar" -#: admin/PageEntry.py:78 admin/PageEntry.py:173 admin/PageVServer.py:149 +#: admin/PageEntry.py:78 admin/PageEntry.py:173 admin/PageVServer.py:153 msgid "Authentication" msgstr "Autentificació" @@ -1029,6 +1105,12 @@ msgstr "Mòduls d'autentificació" msgid "Leave unset" msgstr "Deixar sense res." +#: admin/PageEntry.py:84 admin/PageVServer.py:480 admin/plugins/common.py:42 +#: admin/plugins/common.py:43 admin/plugins/dirlist.py:58 +#: admin/plugins/file.py:44 admin/plugins/proxy.py:240 +msgid "Allow" +msgstr "" + #: admin/PageEntry.py:85 msgid "Forbid" msgstr "Prohibit" @@ -1056,7 +1138,7 @@ msgstr "" msgid "Remove" msgstr "Esborrar" -#: admin/PageEntry.py:126 admin/PageVServer.py:155 +#: admin/PageEntry.py:126 admin/PageVServer.py:159 #: admin/plugins/secdownload.py:44 msgid "Timeout" msgstr "Temps d'espera" @@ -1069,7 +1151,7 @@ msgstr "Temps d'espera de les connexions" msgid "Limit traffic to" msgstr "Limitar trafic a" -#: admin/PageEntry.py:139 admin/PageVServer.py:156 +#: admin/PageEntry.py:139 admin/PageVServer.py:160 msgid "Traffic Shaping" msgstr "Gestió del trafic" @@ -1077,7 +1159,7 @@ msgstr "Gestió del trafic" msgid "Skip Logging" msgstr "Saltar registre" -#: admin/PageEntry.py:154 admin/PageVServer.py:720 +#: admin/PageEntry.py:154 admin/PageVServer.py:729 msgid "Logging" msgstr "Registre" @@ -1102,14 +1184,14 @@ msgstr "Mecanisme de Validació" msgid "Can not be empty" msgstr "No pot ser buit" -#: admin/PageEntry.py:216 admin/PageEntry.py:268 admin/consts.py:190 -#: admin/plugins/header.py:110 admin/plugins/header.py:151 -#: admin/plugins/header.py:156 admin/plugins/proxy.py:193 +#: admin/PageEntry.py:216 admin/PageEntry.py:268 admin/consts.py:189 +#: admin/plugins/header.py:112 admin/plugins/header.py:153 +#: admin/plugins/header.py:158 admin/plugins/proxy.py:193 msgid "Header" msgstr "Capçalera" #: admin/PageEntry.py:216 admin/PageSource.py:284 -#: admin/plugins/error_redir.py:105 admin/plugins/header.py:113 +#: admin/plugins/error_redir.py:105 admin/plugins/header.py:115 #: admin/plugins/redir.py:76 msgid "Type" msgstr "Tipus" @@ -1128,7 +1210,7 @@ msgstr "Actiu" msgid "Add New Header" msgstr "Afegir nova capçalera" -#: admin/PageEntry.py:326 admin/consts.py:204 admin/plugins/redir.py:39 +#: admin/PageEntry.py:326 admin/consts.py:203 admin/plugins/redir.py:39 #: admin/plugins/rehost.py:53 msgid "Regular Expressions" msgstr "Expressions regulars" @@ -1146,8 +1228,7 @@ msgstr "" msgid "Caching Policy" msgstr "" -#: admin/PageEntry.py:381 admin/plugins/rehost.py:68 -#: admin/plugins/rehost.py:92 +#: admin/PageEntry.py:381 admin/plugins/rehost.py:68 admin/plugins/rehost.py:92 msgid "New Regular Expression" msgstr "Nova expressió regular" @@ -1155,7 +1236,7 @@ msgstr "Nova expressió regular" msgid "Disregarded Cookies" msgstr "" -#: admin/PageEntry.py:402 admin/PageVServer.py:154 +#: admin/PageEntry.py:402 admin/PageVServer.py:158 msgid "Expiration" msgstr "Caducitat" @@ -1187,7 +1268,7 @@ msgstr "" msgid "Content Expiration" msgstr "Caducitat del contingut" -#: admin/PageEntry.py:433 admin/PageVServer.py:153 +#: admin/PageEntry.py:433 admin/PageVServer.py:157 msgid "Cache" msgstr "" @@ -1209,7 +1290,7 @@ msgid "Matching Rule" msgstr "Aplicar regles" #: admin/PageEntry.py:514 admin/PageEntry.py:528 admin/PageEntry.py:553 -#: admin/PageVServer.py:148 +#: admin/PageVServer.py:152 msgid "Handler" msgstr "Gestor" @@ -1227,7 +1308,7 @@ msgstr "Plataformes" msgid "Caching" msgstr "Aplicar regles" -#: admin/PageEntry.py:556 admin/PageVServer.py:721 +#: admin/PageEntry.py:556 admin/PageVServer.py:730 msgid "Security" msgstr "Seguretat" @@ -1471,7 +1552,7 @@ msgstr "IPv6" msgid "SSL/TLS back-end" msgstr "Motor SSL/TLS" -#: admin/PageGeneral.py:197 admin/PageIndex.py:252 +#: admin/PageGeneral.py:197 admin/PageIndex.py:198 msgid "Support" msgstr "Suport" @@ -1504,8 +1585,8 @@ msgid "Bind to" msgstr "Escoltar a" #: admin/PageGeneral.py:239 admin/PageGeneral.py:310 admin/plugins/bind.py:92 -#: admin/plugins/bind.py:155 admin/plugins/bind.py:157 -#: admin/plugins/ldap.py:48 admin/plugins/mysql.py:77 +#: admin/plugins/bind.py:155 admin/plugins/bind.py:157 admin/plugins/ldap.py:48 +#: admin/plugins/mysql.py:77 msgid "Port" msgstr "Port" @@ -1570,7 +1651,7 @@ msgstr "Grups" msgid "Chroot" msgstr "Chroot" -#: admin/PageGeneral.py:357 admin/PageVServer.py:479 +#: admin/PageGeneral.py:357 admin/PageVServer.py:483 msgid "Network" msgstr "Xarxa" @@ -1598,177 +1679,137 @@ msgstr "Taula de continguts" msgid "Documentation" msgstr "Documentació" -#: admin/PageIndex.py:67 -msgid "You will be sent an email requesting confirmation" -msgstr "Se li enviarà un correu electrònic demanant la confirmació" - -#: admin/PageIndex.py:68 -msgid "Optionally provide your name" -msgstr "Opcionalment proporcionar el seu nom" - -#: admin/PageIndex.py:70 -#, python-format -msgid "" -"There are a number of Community
Mailing Lists\n" -"available for you to subscribe. You can subscribe the General Discussion\n" -"mailing list from this interface. There is where most of the discussions\n" -"take place." -msgstr "" - -#: admin/PageIndex.py:77 +#: admin/PageIndex.py:58 #, fuzzy msgid "Server is Running" msgstr "Servidor en funcionament" -#: admin/PageIndex.py:78 +#: admin/PageIndex.py:59 #, fuzzy msgid "Server is not Running" msgstr "El servidor no està en funcionament" -#: admin/PageIndex.py:132 +#: admin/PageIndex.py:110 msgid "Stop Server" msgstr "Aturar Servidor" -#: admin/PageIndex.py:136 +#: admin/PageIndex.py:114 msgid "Start Server" msgstr "Iniciar Servidor" -#: admin/PageIndex.py:141 +#: admin/PageIndex.py:119 #, fuzzy msgid "Hostname" msgstr "Noms de servidor" -#: admin/PageIndex.py:143 +#: admin/PageIndex.py:121 msgid "Modified" msgstr "Modificat" -#: admin/PageIndex.py:145 +#: admin/PageIndex.py:123 msgid "Not found" msgstr "No trobat" -#: admin/PageIndex.py:146 +#: admin/PageIndex.py:124 msgid "Config File" msgstr "Arxiu de configuració" -#: admin/PageIndex.py:153 admin/plugins/server_info.py:32 +#: admin/PageIndex.py:131 admin/plugins/server_info.py:32 #: admin/plugins/server_info.py:35 msgid "Server Information" msgstr "Informació del servidor" -#: admin/PageIndex.py:165 +#: admin/PageIndex.py:143 msgid "Processors" msgstr "" -#: admin/PageIndex.py:177 +#: admin/PageIndex.py:155 msgid "Memory" msgstr "" -#: admin/PageIndex.py:211 admin/plugins/dbslayer.py:51 +#: admin/PageIndex.py:189 admin/plugins/dbslayer.py:51 msgid "Language" msgstr "Idioma" -#: admin/PageIndex.py:231 -#, fuzzy -msgid "Mailing List Subscription" -msgstr "Subscripció a la llista de correu" - -#: admin/PageIndex.py:233 -msgid "Subscribe" -msgstr "Subscriure" - -#: admin/PageIndex.py:236 -msgid "Your email address" -msgstr "La teva adreça e-mail" - -#: admin/PageIndex.py:237 -msgid "Your name" -msgstr "El teu nom" - -#: admin/PageIndex.py:256 +#: admin/PageIndex.py:202 #, fuzzy msgid "Getting started" msgstr "Duració: stat" -#: admin/PageIndex.py:260 -msgid "Subscribe to mailing lists" +#: admin/PageIndex.py:206 +msgid "Visit the mailing list" msgstr "" -#: admin/PageIndex.py:268 +#: admin/PageIndex.py:210 #, fuzzy msgid "Report a bug" msgstr "Reportar això" -#: admin/PageIndex.py:272 -#, fuzzy -msgid "Purchase commercial support" -msgstr "Suport Comercial" - -#: admin/PageIndex.py:276 admin/PageIndex.py:280 +#: admin/PageIndex.py:214 admin/PageIndex.py:218 #, fuzzy msgid "About Cherokee" msgstr "Usuaris Orgullosos de Cherokee" -#: admin/PageIndex.py:289 +#: admin/PageIndex.py:227 msgid "Join the Cherokee Community:" msgstr "" -#: admin/PageIndex.py:292 +#: admin/PageIndex.py:230 msgid "Visit the Cherokee Project Website" msgstr "" -#: admin/PageIndex.py:293 +#: admin/PageIndex.py:231 msgid "Follow us on Twitter" msgstr "" -#: admin/PageIndex.py:294 +#: admin/PageIndex.py:232 msgid "Join us on Facebook" msgstr "" -#: admin/PageIndex.py:295 +#: admin/PageIndex.py:233 msgid "Join us on Google+" msgstr "" -#: admin/PageIndex.py:296 +#: admin/PageIndex.py:234 msgid "Fork us on Github" msgstr "" -#: admin/PageIndex.py:297 +#: admin/PageIndex.py:235 msgid "Become a member of Cherokee group on LinkedIn" msgstr "" -#: admin/PageIndex.py:298 +#: admin/PageIndex.py:236 msgid "Chat with us at irc.freenode.net" msgstr "" -#: admin/PageIndex.py:307 +#: admin/PageIndex.py:245 #, fuzzy msgid "Shutdown Cherokee-admin" msgstr "Benvinguts al Administrador de Cherokee" -#: admin/PageIndex.py:309 +#: admin/PageIndex.py:247 msgid "Shut down" msgstr "" -#: admin/PageIndex.py:310 +#: admin/PageIndex.py:248 msgid "You are about to shut down this instance of Cherokee-admin" msgstr "" -#: admin/PageIndex.py:311 +#: admin/PageIndex.py:249 #, fuzzy msgid "Are you sure you want to proceed?" msgstr "Estàs segur que ho vols esborrar?" -#: admin/PageIndex.py:314 +#: admin/PageIndex.py:252 msgid "Cherokee-admin has been shut down" msgstr "" -#: admin/PageIndex.py:316 +#: admin/PageIndex.py:254 #, fuzzy msgid "Shut down Cherokee-Admin" msgstr "Benvinguts al Administrador de Cherokee" -#: admin/PageIndex.py:329 admin/PageIndex.py:350 +#: admin/PageIndex.py:267 admin/PageIndex.py:288 msgid "Welcome to Cherokee Admin" msgstr "Benvinguts al Administrador de Cherokee" @@ -1855,7 +1896,7 @@ msgstr "Manual" msgid "Manual configuration" msgstr "Configuració manual" -#: admin/PageRule.py:249 admin/PageVServer.py:158 +#: admin/PageRule.py:249 admin/PageVServer.py:162 msgid "Final" msgstr "Final" @@ -1883,7 +1924,7 @@ msgstr "Clonà" msgid "Clone Selected Behavior Rule" msgstr "Clonar les regles de comportament seleccionades" -#: admin/PageRule.py:314 admin/PageVServer.py:718 +#: admin/PageRule.py:314 admin/PageVServer.py:727 msgid "Behavior" msgstr "Funcionament" @@ -2030,7 +2071,7 @@ msgstr "Afegir nova variable" msgid "Source Usage" msgstr "Recursos" -#: admin/PageSource.py:253 admin/PageVServer.py:723 +#: admin/PageSource.py:253 admin/PageVServer.py:732 msgid "Virtual Server" msgstr "Servidor Virtual" @@ -2085,7 +2126,7 @@ msgstr "Clonar font d'informació seleccionada" msgid "Sources Filtering" msgstr "Filtrat de fonts" -#: admin/PageSources.py:35 admin/PageVServer.py:141 admin/PageVServers.py:48 +#: admin/PageSources.py:35 admin/PageVServer.py:145 admin/PageVServers.py:48 #: admin/PageVServers.py:294 msgid "Virtual Servers" msgstr "Servidors Virtuals" @@ -2107,10 +2148,14 @@ msgid "Virtual Server Filtering" msgstr "Filtrant Servidor Virtual" #: admin/PageVServer.py:44 +msgid "Reference" +msgstr "" + +#: admin/PageVServer.py:47 msgid "Nickname for the virtual server." msgstr "Nickname per el servidor virtual." -#: admin/PageVServer.py:45 +#: admin/PageVServer.py:48 msgid "" "This directive points to the PEM-encoded Certificate file for the server " "(Full path to the file)" @@ -2118,13 +2163,13 @@ msgstr "" "Ruta complerta al arxiu en format PEM que conté el certificat per al " "servidor." -#: admin/PageVServer.py:46 +#: admin/PageVServer.py:49 msgid "PEM-encoded Private Key file for the server (Full path to the file)" msgstr "" "Ruta complerta al arxiu en format PEM que conté la clau privada per al " "servidor." -#: admin/PageVServer.py:47 +#: admin/PageVServer.py:50 msgid "" "File containing the trusted CA certificates, utilized for checking the " "client certificates (Full path to the file)" @@ -2132,41 +2177,38 @@ msgstr "" "Arxiu que contè els certificats CA confiables, utilitzats per verificar els " "certificats dels clients (Ruta complerta del arxiu)." -#: admin/PageVServer.py:48 -#, fuzzy -msgid "" -"Ciphers that TLS/SSL is allowed to use. Reference. (Default enables " -"Forward Secrecy)." +#: admin/PageVServer.py:51 +msgid "Ciphers that TLSv1.2 and below is allowed to use." +msgstr "Tipus de xifratge permesos per TLS/SSL." + +#: admin/PageVServer.py:52 +msgid "Ciphersuites that TLSv1.3 is allowed to use." msgstr "" -"Tipus de xifratge permesos per TLS/SSL. Reference. (Per defecte: Tots " -"els suportats per la versió d'OpenSSL instal·lada)." -#: admin/PageVServer.py:49 +#: admin/PageVServer.py:53 msgid "" "The cipher sequence that is specified by the server should have preference " "over the client preference. (Default: True)." msgstr "" -#: admin/PageVServer.py:50 +#: admin/PageVServer.py:54 msgid "" "Explicitly enable or disable serverside compression support. (Default: " "Disabled)." msgstr "" -#: admin/PageVServer.py:51 +#: admin/PageVServer.py:55 msgid "" "Explicitely sets the Diffie-Hellman parameters length. (Default: Let openssl " "choose)." msgstr "" -#: admin/PageVServer.py:52 +#: admin/PageVServer.py:56 #, fuzzy msgid "Skip, Tolerate, Accept or Require client certificates." msgstr "Salta, acceptar o requerir certificats de clients." -#: admin/PageVServer.py:53 +#: admin/PageVServer.py:57 msgid "" "Limit up to which depth certificates in a chain are used during the " "verification procedure (Default: 1)" @@ -2174,11 +2216,11 @@ msgstr "" "Profunditat màxima de la cadena de certificats utilitzats durant el proces " "de verificació (Per defecte: 1)" -#: admin/PageVServer.py:54 +#: admin/PageVServer.py:58 msgid "Allows the selection of how to generate the error responses." msgstr "Permet seleccionar com generar les respostes de error." -#: admin/PageVServer.py:55 +#: admin/PageVServer.py:59 msgid "" "Directory inside the user home directory to use as root web directory. " "Disabled if empty." @@ -2186,19 +2228,19 @@ msgstr "" "Directori dintre del directori del usuari que s'utilitzarà com a directori " "arrel de la web. Desactivat si està buit." -#: admin/PageVServer.py:56 +#: admin/PageVServer.py:60 msgid "The personal web support is currently turned on." msgstr "El suport per webs personals està activat." -#: admin/PageVServer.py:57 +#: admin/PageVServer.py:61 msgid "Adds a new domain name. Wildcards are allowed in the domain name." msgstr "Afegir un nou nom de domini. Es permet comodins en el nom de domini." -#: admin/PageVServer.py:58 +#: admin/PageVServer.py:62 msgid "Virtual Server root directory." msgstr "Directori arrel del servidor virtual" -#: admin/PageVServer.py:59 +#: admin/PageVServer.py:63 msgid "" "List of name files that will be used as directory index. Eg: index.html," "index.php." @@ -2206,45 +2248,45 @@ msgstr "" "Llista de noms de arxius que s'utilitzaran com a índex de directoris. Ex " "index.html, index.php." -#: admin/PageVServer.py:60 +#: admin/PageVServer.py:64 msgid "The maximum size, in bytes, for POST uploads. (Default: unlimited)" msgstr "" "Tamany màxim, en bytes, de les pujades per POST. (Per defecte: Il·limitat)" -#: admin/PageVServer.py:61 +#: admin/PageVServer.py:65 msgid "Whether this virtual server is allowed to use Keep-alive (Default: yes)" msgstr "Si aquest servidor virtual por utilitzar Keep-alive (Per defecte: Si)" -#: admin/PageVServer.py:62 +#: admin/PageVServer.py:66 msgid "The Logging is currently enabled." msgstr "El registre està actualment habilitat." -#: admin/PageVServer.py:63 +#: admin/PageVServer.py:67 msgid "Logging format. Apache compatible is highly recommended here." msgstr "" "Format de registres. És altament recomanable la compatibilitat amb Apache." -#: admin/PageVServer.py:64 +#: admin/PageVServer.py:68 msgid "Back-end used to store the log accesses." msgstr "Destí dels registres d'accés." -#: admin/PageVServer.py:65 +#: admin/PageVServer.py:69 msgid "Back-end used to store the log errors." msgstr "Destí dels registres de errors." -#: admin/PageVServer.py:66 +#: admin/PageVServer.py:70 msgid "Back-end used to store the log accesses and errors." msgstr "Format de històrics per guardar els accessos i errors." -#: admin/PageVServer.py:67 +#: admin/PageVServer.py:71 msgid "Full path to the file where the information will be saved." msgstr "Ruta complerta al arxiu on es guardarà la informació." -#: admin/PageVServer.py:68 +#: admin/PageVServer.py:72 msgid "Path to the executable that will be invoked on each log entry." msgstr "Ruta al executable al que es cridarà per cada entrada de registre." -#: admin/PageVServer.py:69 +#: admin/PageVServer.py:73 msgid "" "Whether the logger should read and use the X-Real-IP and X-Forwarded-For " "headers (send by reverse proxies)." @@ -2252,7 +2294,7 @@ msgstr "" "Si el sistema de registres ha de llegir i utilitzar la capçalera X-Rail-IP " "(enviada pels proxys inversos)" -#: admin/PageVServer.py:71 +#: admin/PageVServer.py:75 msgid "" "List of IP addresses and subnets that are allowed to send X-Real-IP and X-" "Forwarded-For headers." @@ -2260,22 +2302,22 @@ msgstr "" "Llista de direccions IP i subxarxes a las que s'els permet enviar capçaleres " "X-Real-IP i X-Forwarded-For" -#: admin/PageVServer.py:72 +#: admin/PageVServer.py:76 msgid "" "How to support the \"Advanced Virtual Hosting\" mechanism. (Default: off)" msgstr "" "Com donar suport al mecanisme de \"Hospedatje Virtual Avançat\". (Per " "defecte: desactivat)" -#: admin/PageVServer.py:73 +#: admin/PageVServer.py:77 msgid "The following variables are accepted: " msgstr "" -#: admin/PageVServer.py:74 +#: admin/PageVServer.py:78 msgid "Allows the selection of domain matching method." msgstr "Permet seleccionar com avaluar els noms de domini." -#: admin/PageVServer.py:75 +#: admin/PageVServer.py:79 msgid "" "Whether or not it should collected statistics about the traffic of this " "virtual server." @@ -2283,463 +2325,467 @@ msgstr "" "Sigui o no s'han recopilant estadístiques sobre el trànsit d'aquest servidor " "virtual." -#: admin/PageVServer.py:76 +#: admin/PageVServer.py:80 msgid "Time standard to use in the log file entries." msgstr "" -#: admin/PageVServer.py:77 +#: admin/PageVServer.py:81 msgid "" "Remember that only \"File Exists\" rules and \"List & Send\" handlers use " "the Directory Indexes setting." msgstr "" -#: admin/PageVServer.py:78 +#: admin/PageVServer.py:82 msgid "" "Use this nickname as an additional host name for this virtual server " "(Default: yes)" msgstr "" -#: admin/PageVServer.py:79 +#: admin/PageVServer.py:83 msgid "Enforce HTTPS by using the HTTP Strict Transport Security." msgstr "" -#: admin/PageVServer.py:80 +#: admin/PageVServer.py:84 msgid "" "How long the client's browser should remember the forced HTTPS (in seconds)." msgstr "" -#: admin/PageVServer.py:81 +#: admin/PageVServer.py:85 msgid "" "Should HSTS be used in all the subdomains of this virtual server (Default: " "yes)." msgstr "" -#: admin/PageVServer.py:83 +#: admin/PageVServer.py:87 msgid "

The 'default' virtual server matches all the domain names.

" msgstr "

El servidor virtual 'default' accepta tots els noms de domini.

" -#: admin/PageVServer.py:86 +#: admin/PageVServer.py:90 #, fuzzy msgid "Remote IP address" msgstr "Adreça IP del servidor LDAP" -#: admin/PageVServer.py:87 +#: admin/PageVServer.py:91 #, fuzzy msgid "Local IP address" msgstr "La teva adreça e-mail" -#: admin/PageVServer.py:88 +#: admin/PageVServer.py:92 #, fuzzy msgid "Request Protocol" msgstr "Sol·licitud" -#: admin/PageVServer.py:89 +#: admin/PageVServer.py:93 msgid "Transport type: http or https" msgstr "" -#: admin/PageVServer.py:90 +#: admin/PageVServer.py:94 msgid "Port of the server serving the request" msgstr "" -#: admin/PageVServer.py:91 +#: admin/PageVServer.py:95 msgid "The query string, if exists" msgstr "" -#: admin/PageVServer.py:92 +#: admin/PageVServer.py:96 msgid "First line of HTTP request" msgstr "" -#: admin/PageVServer.py:93 +#: admin/PageVServer.py:97 msgid "Response status code" msgstr "" -#: admin/PageVServer.py:94 +#: admin/PageVServer.py:98 msgid "Time: in common log format time format" msgstr "" -#: admin/PageVServer.py:95 +#: admin/PageVServer.py:99 msgid "Time: seconds since Epoch" msgstr "" -#: admin/PageVServer.py:96 +#: admin/PageVServer.py:100 msgid "Time: milliseconds since Epoch" msgstr "" -#: admin/PageVServer.py:97 +#: admin/PageVServer.py:101 #, fuzzy msgid "Remote user (authentication)" msgstr "Domini base per les autentificacions del servidor web." -#: admin/PageVServer.py:98 +#: admin/PageVServer.py:102 msgid "URL path requested" msgstr "" -#: admin/PageVServer.py:99 +#: admin/PageVServer.py:103 msgid "URL path requested before any rewrite" msgstr "" -#: admin/PageVServer.py:100 +#: admin/PageVServer.py:104 #, fuzzy msgid "Virtual Server nick name" msgstr "Nickname del servidor virtual" -#: admin/PageVServer.py:101 +#: admin/PageVServer.py:105 msgid "Requested host (Host: header)" msgstr "" -#: admin/PageVServer.py:102 +#: admin/PageVServer.py:106 msgid "Size of the response in bytes" msgstr "" -#: admin/PageVServer.py:103 +#: admin/PageVServer.py:107 msgid "'Host:' header of the request" msgstr "" -#: admin/PageVServer.py:104 +#: admin/PageVServer.py:108 msgid "'Referrer:' header of the request" msgstr "" -#: admin/PageVServer.py:105 +#: admin/PageVServer.py:109 msgid "'User-Agent:' header of the request" msgstr "" -#: admin/PageVServer.py:106 +#: admin/PageVServer.py:110 msgid "'Cookie:' header of the request" msgstr "" -#: admin/PageVServer.py:142 +#: admin/PageVServer.py:146 msgid "Loggers" msgstr "Registradors" -#: admin/PageVServer.py:143 +#: admin/PageVServer.py:147 msgid "SSL cookbook" msgstr "Recepta sobre SSL" -#: admin/PageVServer.py:147 admin/PageVServer.py:184 +#: admin/PageVServer.py:151 admin/PageVServer.py:188 msgid "Match" msgstr "Coincidir" -#: admin/PageVServer.py:147 +#: admin/PageVServer.py:151 msgid "Rule Match" msgstr "Concordança de regles" -#: admin/PageVServer.py:148 +#: admin/PageVServer.py:152 msgid "Assigned Handler" msgstr "Controlador Assignat" -#: admin/PageVServer.py:149 +#: admin/PageVServer.py:153 msgid "Auth" msgstr "Auth" -#: admin/PageVServer.py:150 +#: admin/PageVServer.py:154 msgid "Custom Document Root" msgstr "Arrel de documents personalitzada" -#: admin/PageVServer.py:150 +#: admin/PageVServer.py:154 msgid "Root" msgstr "Root" -#: admin/PageVServer.py:151 +#: admin/PageVServer.py:155 msgid "Only HTTPS" msgstr "Només HTTPS" -#: admin/PageVServer.py:151 +#: admin/PageVServer.py:155 msgid "Secure" msgstr "Segur" -#: admin/PageVServer.py:152 +#: admin/PageVServer.py:156 msgid "Enc" msgstr "Enc" -#: admin/PageVServer.py:152 +#: admin/PageVServer.py:156 msgid "Encoders" msgstr "Codificació" -#: admin/PageVServer.py:153 +#: admin/PageVServer.py:157 #, fuzzy msgid "Cacheable" msgstr "Compatible amb Apache" -#: admin/PageVServer.py:154 +#: admin/PageVServer.py:158 msgid "Exp" msgstr "Exp" -#: admin/PageVServer.py:155 +#: admin/PageVServer.py:159 msgid "Connection Timeout" msgstr "Temps d'espera de les connexions" -#: admin/PageVServer.py:156 +#: admin/PageVServer.py:160 msgid "Shaping" msgstr "Conformació" -#: admin/PageVServer.py:157 +#: admin/PageVServer.py:161 msgid "Log" msgstr "Registre" -#: admin/PageVServer.py:157 +#: admin/PageVServer.py:161 msgid "Logging Enabled" msgstr "Registres habilitats" -#: admin/PageVServer.py:158 +#: admin/PageVServer.py:162 msgid "Rule is Final" msgstr "Regla Final" -#: admin/PageVServer.py:184 +#: admin/PageVServer.py:188 #, fuzzy msgid "Match nickname" msgstr "Coincidir Nickname" -#: admin/PageVServer.py:188 admin/PageVServer.py:717 +#: admin/PageVServer.py:192 admin/PageVServer.py:726 msgid "Host Match" msgstr "Host Match" -#: admin/PageVServer.py:218 admin/PageVServer.py:234 admin/PageVServer.py:258 -#: admin/PageVServer.py:485 admin/PageVServer.py:519 -#: admin/plugins/method.py:99 admin/plugins/method.py:109 +#: admin/PageVServer.py:222 admin/PageVServer.py:238 admin/PageVServer.py:262 +#: admin/PageVServer.py:489 admin/PageVServer.py:523 admin/plugins/method.py:99 +#: admin/plugins/method.py:109 msgid "Method" msgstr "Mètode" -#: admin/PageVServer.py:226 admin/PageVServer.py:242 +#: admin/PageVServer.py:230 admin/PageVServer.py:246 #, fuzzy msgid "Remove criteria" msgstr "Servidor Remot" -#: admin/PageVServer.py:260 +#: admin/PageVServer.py:264 #, fuzzy msgid "How to match this Virtual Server" msgstr "Nou Servidor Virtual" -#: admin/PageVServer.py:267 +#: admin/PageVServer.py:271 msgid "Add an additional matching criteria" msgstr "" -#: admin/PageVServer.py:358 +#: admin/PageVServer.py:362 msgid "Behavior Rules" msgstr "Regles de funcionament" -#: admin/PageVServer.py:367 +#: admin/PageVServer.py:371 msgid "Rule Management" msgstr "Gestor de regles" -#: admin/PageVServer.py:393 +#: admin/PageVServer.py:397 msgid "Only accept Secure Connections" msgstr "Acceptar només connexions segures" -#: admin/PageVServer.py:398 +#: admin/PageVServer.py:402 msgid "Encoding enabled" msgstr "Codificació habilitada" -#: admin/PageVServer.py:404 +#: admin/PageVServer.py:408 msgid "no" msgstr "no" -#: admin/PageVServer.py:415 +#: admin/PageVServer.py:419 msgid " seconds" msgstr "segons" -#: admin/PageVServer.py:420 +#: admin/PageVServer.py:424 msgid " bytes per second" msgstr "bytes per segon" -#: admin/PageVServer.py:425 +#: admin/PageVServer.py:429 msgid "Logging enabled for this rule" msgstr "Registre habilitat per a aquesta regla" -#: admin/PageVServer.py:430 +#: admin/PageVServer.py:434 msgid "Prevents further rule evaluation" msgstr "" -#: admin/PageVServer.py:435 +#: admin/PageVServer.py:439 msgid "Content can be cached" msgstr "" -#: admin/PageVServer.py:438 +#: admin/PageVServer.py:442 msgid "Forbids content caching" msgstr "" -#: admin/PageVServer.py:455 +#: admin/PageVServer.py:459 msgid "Virtual Server nickname" msgstr "Nickname del servidor virtual" -#: admin/PageVServer.py:457 +#: admin/PageVServer.py:461 msgid "Server ID" msgstr "ID del Servidor" -#: admin/PageVServer.py:463 +#: admin/PageVServer.py:467 msgid "Directory Indexes" msgstr "Índex de directoris" -#: admin/PageVServer.py:465 admin/plugins/fullpath.py:119 +#: admin/PageVServer.py:469 admin/plugins/fullpath.py:119 msgid "Paths" msgstr "Rutes" -#: admin/PageVServer.py:471 +#: admin/PageVServer.py:475 msgid "Neither are in use at the moment." msgstr "" -#: admin/PageVServer.py:476 +#: admin/PageVServer.py:480 msgid "Keep-alive" msgstr "Keep-alive" -#: admin/PageVServer.py:477 +#: admin/PageVServer.py:481 msgid "Max Upload Size" msgstr "Tamany màxim de pujada" -#: admin/PageVServer.py:487 admin/plugins/evhost.py:33 +#: admin/PageVServer.py:491 admin/plugins/evhost.py:33 msgid "Advanced Virtual Hosting" msgstr "Hospedatje Virtual Avançat" -#: admin/PageVServer.py:521 +#: admin/PageVServer.py:525 msgid "Error Handling hook" msgstr "Maneig d'errors" -#: admin/PageVServer.py:532 admin/consts.py:233 admin/consts.py:250 +#: admin/PageVServer.py:536 admin/consts.py:232 admin/consts.py:249 msgid "Disabled" msgstr "Deshabilitat" -#: admin/PageVServer.py:536 +#: admin/PageVServer.py:540 msgid "Write errors to" msgstr "Escriure errors a" -#: admin/PageVServer.py:540 admin/PageVServer.py:579 +#: admin/PageVServer.py:544 admin/PageVServer.py:583 msgid "Filename" msgstr "Nom de Arxiu" -#: admin/PageVServer.py:542 admin/PageVServer.py:582 +#: admin/PageVServer.py:546 admin/PageVServer.py:586 msgid "Command" msgstr "Comanda" -#: admin/PageVServer.py:548 +#: admin/PageVServer.py:552 msgid "Error Logging" msgstr "Registre de errors" -#: admin/PageVServer.py:559 +#: admin/PageVServer.py:563 msgid "Format" msgstr "Format" -#: admin/PageVServer.py:566 +#: admin/PageVServer.py:570 msgid "Write accesses to" msgstr "Escriure accessos a" -#: admin/PageVServer.py:589 +#: admin/PageVServer.py:593 #, fuzzy msgid "Hide" msgstr "Capçalera" -#: admin/PageVServer.py:589 +#: admin/PageVServer.py:593 #, fuzzy msgid "Show macros" msgstr "Mostrar Grup" -#: admin/PageVServer.py:598 +#: admin/PageVServer.py:602 msgid "Template: " msgstr "Plantilla:" -#: admin/PageVServer.py:600 +#: admin/PageVServer.py:604 msgid "Access Logging" msgstr "Registre d'accessos" -#: admin/PageVServer.py:606 +#: admin/PageVServer.py:610 msgid "Time standard" msgstr "Temps estàndard" -#: admin/PageVServer.py:607 admin/PageVServer.py:687 admin/consts.py:228 +#: admin/PageVServer.py:611 admin/PageVServer.py:696 admin/consts.py:227 msgid "Accept" msgstr "Acceptar" -#: admin/PageVServer.py:607 +#: admin/PageVServer.py:611 msgid "Accept Forwarded IPs" msgstr "Acceptar IPs redireccionades" -#: admin/PageVServer.py:610 +#: admin/PageVServer.py:614 msgid "Do not check" msgstr "No comprovar" -#: admin/PageVServer.py:619 +#: admin/PageVServer.py:623 msgid "Logging Options" msgstr "Opcions del registre" -#: admin/PageVServer.py:655 admin/wizards/ssl_test.py:136 +#: admin/PageVServer.py:659 admin/wizards/ssl_test.py:136 msgid "Certificate" msgstr "Certificat" -#: admin/PageVServer.py:656 +#: admin/PageVServer.py:660 msgid "Certificate key" msgstr "Clau del certificat" -#: admin/PageVServer.py:661 +#: admin/PageVServer.py:665 msgid "Required SSL/TLS Values" msgstr "Valors SSL/TLS requerits" -#: admin/PageVServer.py:666 +#: admin/PageVServer.py:674 +msgid "Ciphersuites" +msgstr "" + +#: admin/PageVServer.py:675 msgid "Ciphers" msgstr "Codificadors" -#: admin/PageVServer.py:667 +#: admin/PageVServer.py:676 #, fuzzy msgid "Prefer" msgstr "Prefix" -#: admin/PageVServer.py:667 +#: admin/PageVServer.py:676 #, fuzzy msgid "Server Preference" msgstr "Tràfic del Servidor" -#: admin/PageVServer.py:668 +#: admin/PageVServer.py:677 msgid "Client Certs. Request" msgstr "Sol·licitud de certificat de clients" -#: admin/PageVServer.py:669 +#: admin/PageVServer.py:678 msgid "Compression" msgstr "" -#: admin/PageVServer.py:670 +#: admin/PageVServer.py:679 msgid "DH length" msgstr "" -#: admin/PageVServer.py:673 +#: admin/PageVServer.py:682 msgid "CA List" msgstr "Llista de CA" -#: admin/PageVServer.py:676 +#: admin/PageVServer.py:685 msgid "Verify Depth" msgstr "Verificar profunditat" -#: admin/PageVServer.py:682 +#: admin/PageVServer.py:691 msgid "Advanced Options" msgstr "Opcions avançades" -#: admin/PageVServer.py:687 +#: admin/PageVServer.py:696 #, fuzzy msgid "Enable HSTS" msgstr " Actiu" -#: admin/PageVServer.py:690 +#: admin/PageVServer.py:699 msgid "HSTS Max-Age" msgstr "" -#: admin/PageVServer.py:690 +#: admin/PageVServer.py:699 msgid "One year" msgstr "" -#: admin/PageVServer.py:691 +#: admin/PageVServer.py:700 #, fuzzy msgid "Include Subdomains" msgstr "Enviar els teus Dominis" -#: admin/PageVServer.py:691 +#: admin/PageVServer.py:700 msgid "Include all" msgstr "" -#: admin/PageVServer.py:697 +#: admin/PageVServer.py:706 msgid "HTTP Strict Transport Security (HSTS)" msgstr "" -#: admin/PageVServer.py:716 +#: admin/PageVServer.py:725 msgid "Basics" msgstr "Bàsica" -#: admin/PageVServer.py:719 +#: admin/PageVServer.py:728 msgid "Error Handler" msgstr "Errors" @@ -3039,8 +3085,8 @@ msgstr "Producte + Plataforma" msgid "Full Server string" msgstr "Cadena complerta del servidor." -#: admin/consts.py:51 admin/consts.py:80 admin/consts.py:97 -#: admin/consts.py:111 admin/plugins/mysql.py:45 +#: admin/consts.py:51 admin/consts.py:80 admin/consts.py:97 admin/consts.py:111 +#: admin/plugins/mysql.py:45 msgid "None" msgstr "Ningún" @@ -3240,191 +3286,191 @@ msgstr "Dinàmic" msgid "Automatic" msgstr "Automàtic" -#: admin/consts.py:145 admin/plugins/error_redir.py:35 +#: admin/consts.py:144 admin/plugins/error_redir.py:35 msgid "External" msgstr "Extern" -#: admin/consts.py:146 admin/plugins/error_redir.py:34 +#: admin/consts.py:145 admin/plugins/error_redir.py:34 msgid "Internal" msgstr "Intern" -#: admin/consts.py:189 admin/plugins/header.py:116 admin/plugins/proxy.py:94 +#: admin/consts.py:188 admin/plugins/header.py:118 admin/plugins/proxy.py:94 #: admin/plugins/proxy.py:144 admin/plugins/redir.py:76 #: admin/plugins/redir.py:106 admin/plugins/request.py:31 #: admin/plugins/url_arg.py:76 admin/plugins/url_arg.py:95 msgid "Regular Expression" msgstr "Expressió regular." -#: admin/consts.py:191 +#: admin/consts.py:190 msgid "File Exists" msgstr "Arxiu existent" -#: admin/consts.py:192 +#: admin/consts.py:191 msgid "HTTP Method" msgstr "Mètode HTTP" -#: admin/consts.py:193 admin/plugins/bind.py:76 admin/plugins/bind.py:129 +#: admin/consts.py:192 admin/plugins/bind.py:76 admin/plugins/bind.py:129 msgid "Incoming IP/Port" msgstr "IP/Port entrant" -#: admin/consts.py:194 +#: admin/consts.py:193 msgid "SSL / TLS" msgstr "" -#: admin/consts.py:195 admin/plugins/fullpath.py:66 +#: admin/consts.py:194 admin/plugins/fullpath.py:66 #: admin/plugins/fullpath.py:101 msgid "Full Path" msgstr "Ruta complerta" -#: admin/consts.py:196 admin/plugins/from.py:71 +#: admin/consts.py:195 admin/plugins/from.py:71 msgid "Connected from" msgstr "Connectat des de" -#: admin/consts.py:197 +#: admin/consts.py:196 msgid "URL Argument" msgstr "Argument URL" -#: admin/consts.py:198 +#: admin/consts.py:197 msgid "GeoIP" msgstr "GeoIP" -#: admin/consts.py:202 +#: admin/consts.py:201 msgid "Match Nickname" msgstr "Coincidir Nickname" -#: admin/consts.py:203 +#: admin/consts.py:202 msgid "Wildcards" msgstr "Comodins" -#: admin/consts.py:205 +#: admin/consts.py:204 msgid "Server IP" msgstr "Servidor IP" -#: admin/consts.py:209 admin/consts.py:255 +#: admin/consts.py:208 admin/consts.py:254 msgid "Not set" msgstr "Sense configurar" -#: admin/consts.py:210 +#: admin/consts.py:209 msgid "Already expired on 1970" msgstr "Caducat el 1970" -#: admin/consts.py:211 +#: admin/consts.py:210 msgid "Do not expire until 2038" msgstr "No caduca fins el 2038" -#: admin/consts.py:212 +#: admin/consts.py:211 msgid "Custom value" msgstr "Valor Personalitzat" -#: admin/consts.py:216 +#: admin/consts.py:215 msgid "No TLS/SSL" msgstr "No TLS/SSL" -#: admin/consts.py:217 +#: admin/consts.py:216 msgid "OpenSSL / libssl" msgstr "OpenSSL / libssl" -#: admin/consts.py:221 admin/util.py:91 +#: admin/consts.py:220 admin/util.py:91 msgid "Off" msgstr "Desactivat" -#: admin/consts.py:222 +#: admin/consts.py:221 msgid "Enhanced Virtual Hosting" msgstr "Hospedatje Virtual Millorat" -#: admin/consts.py:226 +#: admin/consts.py:225 msgid "Skip" msgstr "Saltar" -#: admin/consts.py:227 +#: admin/consts.py:226 msgid "Tolerate" msgstr "" -#: admin/consts.py:229 +#: admin/consts.py:228 msgid "Require" msgstr "Requerit" -#: admin/consts.py:234 +#: admin/consts.py:233 msgid "RRDtool graphs" msgstr "Gràfiques RRDtool" -#: admin/consts.py:238 +#: admin/consts.py:237 msgid "Local time" msgstr "Temps local" -#: admin/consts.py:239 +#: admin/consts.py:238 msgid "UTC: Coordinated Universal Time" msgstr "UTC: Temps Universal Coordinat" -#: admin/consts.py:243 +#: admin/consts.py:242 msgid "JSON" msgstr "JSON" -#: admin/consts.py:244 +#: admin/consts.py:243 msgid "Python" msgstr "Python" -#: admin/consts.py:245 admin/wizards/List.py:91 +#: admin/consts.py:244 admin/wizards/List.py:91 msgid "PHP" msgstr "PHP" -#: admin/consts.py:246 +#: admin/consts.py:245 msgid "Ruby" msgstr "Ruby" -#: admin/consts.py:251 +#: admin/consts.py:250 msgid "POST tracker" msgstr "" -#: admin/consts.py:256 +#: admin/consts.py:255 msgid "Public" msgstr "" -#: admin/consts.py:257 +#: admin/consts.py:256 msgid "Private" msgstr "" -#: admin/consts.py:258 +#: admin/consts.py:257 msgid "No Cache" msgstr "" -#: admin/consts.py:263 +#: admin/consts.py:262 msgid "0 - No compression" msgstr "" -#: admin/consts.py:264 +#: admin/consts.py:263 msgid "1" msgstr "" -#: admin/consts.py:265 +#: admin/consts.py:264 msgid "2" msgstr "" -#: admin/consts.py:266 +#: admin/consts.py:265 msgid "3" msgstr "" -#: admin/consts.py:267 +#: admin/consts.py:266 msgid "4" msgstr "" -#: admin/consts.py:268 +#: admin/consts.py:267 msgid "5" msgstr "" -#: admin/consts.py:269 +#: admin/consts.py:268 msgid "6" msgstr "" -#: admin/consts.py:270 +#: admin/consts.py:269 msgid "7" msgstr "" -#: admin/consts.py:271 +#: admin/consts.py:270 msgid "8" msgstr "" -#: admin/consts.py:272 +#: admin/consts.py:271 msgid "9 - Max compression" msgstr "" @@ -3604,66 +3650,66 @@ msgstr "Llista de arxiu que no s'han de mostrar." msgid "Only listing" msgstr "Només mostrar" -#: admin/plugins/dirlist.py:49 admin/plugins/dirlist.py:50 #: admin/plugins/dirlist.py:51 admin/plugins/dirlist.py:52 #: admin/plugins/dirlist.py:53 admin/plugins/dirlist.py:54 +#: admin/plugins/dirlist.py:55 admin/plugins/dirlist.py:56 #: admin/plugins/redir.py:105 msgid "Show" msgstr "Mostrar" -#: admin/plugins/dirlist.py:49 +#: admin/plugins/dirlist.py:51 msgid "Show Size" msgstr "Mostrar Mida" -#: admin/plugins/dirlist.py:50 +#: admin/plugins/dirlist.py:52 msgid "Show Date" msgstr "Mostrar Data" -#: admin/plugins/dirlist.py:51 +#: admin/plugins/dirlist.py:53 msgid "Show User" msgstr "Mostrar Usuari" -#: admin/plugins/dirlist.py:52 +#: admin/plugins/dirlist.py:54 msgid "Show Group" msgstr "Mostrar Grup" -#: admin/plugins/dirlist.py:53 +#: admin/plugins/dirlist.py:55 msgid "Show Backup files" msgstr "Mostrar arxiu Backup" -#: admin/plugins/dirlist.py:54 +#: admin/plugins/dirlist.py:56 msgid "Show Hidden files" msgstr "Mostrar arxius ocults" -#: admin/plugins/dirlist.py:55 +#: admin/plugins/dirlist.py:58 admin/plugins/file.py:44 msgid "Allow symbolic links" msgstr "Permet enllaços simbòlics" -#: admin/plugins/dirlist.py:56 +#: admin/plugins/dirlist.py:59 msgid "Redirect symbolic links" msgstr "Re-dirigir enllaços simbòlics" -#: admin/plugins/dirlist.py:60 +#: admin/plugins/dirlist.py:63 msgid "Listing" msgstr "Llistà" -#: admin/plugins/dirlist.py:65 +#: admin/plugins/dirlist.py:68 msgid "Theme" msgstr "Tema" -#: admin/plugins/dirlist.py:66 +#: admin/plugins/dirlist.py:69 msgid "Icons dir" msgstr "Directori d'Icones" -#: admin/plugins/dirlist.py:67 +#: admin/plugins/dirlist.py:70 msgid "Notice files" msgstr "Arxius d'avís" -#: admin/plugins/dirlist.py:68 +#: admin/plugins/dirlist.py:71 msgid "Hidden files" msgstr "Arxius ocults" -#: admin/plugins/dirlist.py:72 +#: admin/plugins/dirlist.py:75 msgid "Theming" msgstr "Aparence" @@ -3804,7 +3850,7 @@ msgstr "Especific FastCGI" msgid "Enables an internal I/O cache that improves performance." msgstr "Activar el cache intern d'E/S que millora el rendiment." -#: admin/plugins/file.py:45 +#: admin/plugins/file.py:49 msgid "File Sending" msgstr "Envian Arxiu" @@ -3892,26 +3938,26 @@ msgid "" "header entry." msgstr "" -#: admin/plugins/header.py:65 +#: admin/plugins/header.py:67 #, fuzzy msgid "Matches a Regular Expression" msgstr "Nova expressió regular" -#: admin/plugins/header.py:66 +#: admin/plugins/header.py:68 msgid "Is Provided" msgstr "" -#: admin/plugins/header.py:104 +#: admin/plugins/header.py:106 #, fuzzy msgid "Full header" msgstr "Nom de Arxiu" -#: admin/plugins/header.py:107 +#: admin/plugins/header.py:109 #, fuzzy msgid "Complete Header" msgstr "Ocultar capçalera" -#: admin/plugins/header.py:154 +#: admin/plugins/header.py:156 #, python-format msgid "Header %(header)s is provided" msgstr "" @@ -4034,7 +4080,7 @@ msgid "Database name containing the user/password pair list." msgstr "Base de dades que contingui els parells d'usuari i contrasenya." #: admin/plugins/mysql.py:41 -#, fuzzy +#, fuzzy, python-brace-format msgid "" "SQL command to execute. ${user} is replaced with the user name, and " "${passwd} is replaced with the user supplied password." @@ -4474,20 +4520,16 @@ msgstr "" msgid "Accepted Domains" msgstr "Dominis acceptats" -#: admin/server.py:68 +#: admin/server.py:70 #, python-format msgid "Server %(version)s running.. PID=%(pid)d Port=%(scgi_port)s" msgstr "Servidor %(version)s executant-se.. PID=%(pid)d Port=%(scgi_port)s" -#: admin/server.py:70 +#: admin/server.py:72 #, python-format msgid "Server %(version)s running.. PID=%(pid)d Socket=%(scgi_port)s" msgstr "Servidor %(version)s executant-se.. PID=%(pid)d Socket=%(scgi_port)s" -#: admin/server.py:144 -msgid "Incorrect parameters: PORT CONFIG_FILE" -msgstr "Paràmetres incorrectes: PORT CONFIG_FILE" - #: admin/util.py:91 msgid "On" msgstr "On" @@ -4866,18 +4908,16 @@ msgstr "" #: admin/wizards/alfresco.py:45 admin/wizards/coldfusion.py:46 #: admin/wizards/concrete5.py:47 admin/wizards/django.py:44 #: admin/wizards/glassfish.py:45 admin/wizards/mailman.py:48 -#: admin/wizards/mono.py:46 admin/wizards/php.py:43 -#: admin/wizards/symfony.py:51 admin/wizards/uwsgi.py:61 -#: admin/wizards/zend.py:47 +#: admin/wizards/mono.py:46 admin/wizards/php.py:43 admin/wizards/symfony.py:51 +#: admin/wizards/uwsgi.py:61 admin/wizards/zend.py:47 msgid "Host name of the virtual server that is about to be created." msgstr "Nom de host de la màquina virtual que està a punt de ser creat." #: admin/wizards/alfresco.py:46 admin/wizards/coldfusion.py:45 #: admin/wizards/concrete5.py:46 admin/wizards/django.py:43 #: admin/wizards/glassfish.py:46 admin/wizards/mailman.py:47 -#: admin/wizards/mono.py:45 admin/wizards/php.py:42 -#: admin/wizards/symfony.py:50 admin/wizards/uwsgi.py:60 -#: admin/wizards/zend.py:46 +#: admin/wizards/mono.py:45 admin/wizards/php.py:42 admin/wizards/symfony.py:50 +#: admin/wizards/uwsgi.py:60 admin/wizards/zend.py:46 msgid "New Virtual Server Details" msgstr "Nou detalls de Servidor Virtual" @@ -5764,3 +5804,33 @@ msgstr "No sembla ser el directori de fonts de Zend." #: admin/wizards/zend.py:49 msgid "Web directory where you want Zend to be accessible. (Example: /zend)" msgstr "Directori web pel qual Zend serà accessible (Exemple: /zend)" + +#, fuzzy +#~ msgid "Disable %s" +#~ msgstr "Deshabilitat" + +#~ msgid "Incorrect parameters: PORT CONFIG_FILE" +#~ msgstr "Paràmetres incorrectes: PORT CONFIG_FILE" + +#, fuzzy +#~ msgid "Mailing List Subscription" +#~ msgstr "Subscripció a la llista de correu" + +#~ msgid "Optionally provide your name" +#~ msgstr "Opcionalment proporcionar el seu nom" + +#, fuzzy +#~ msgid "Purchase commercial support" +#~ msgstr "Suport Comercial" + +#~ msgid "Subscribe" +#~ msgstr "Subscriure" + +#~ msgid "You will be sent an email requesting confirmation" +#~ msgstr "Se li enviarà un correu electrònic demanant la confirmació" + +#~ msgid "Your email address" +#~ msgstr "La teva adreça e-mail" + +#~ msgid "Your name" +#~ msgstr "El teu nom" diff --git a/po/admin/de.po b/po/admin/de.po index 897d6ef0e..8d8cb3121 100644 --- a/po/admin/de.po +++ b/po/admin/de.po @@ -2,16 +2,16 @@ # Copyright (C) 2009-2014 Alvaro Lopez Ortega # This file is distributed under the same license as the cherokee package. # Authors. -# - unknown :( +# - Thomas Reim # - Daniel Niccoli # msgid "" msgstr "" "Project-Id-Version: cherokee 1.2.104\n" -"Report-Msgid-Bugs-To: http://bugs.cherokee-project.com/\n" -"POT-Creation-Date: 2014-01-04 00:54+0100\n" -"PO-Revision-Date: 2014-01-04 14:13+0100\n" -"Last-Translator: Daniel Niccoli \n" +"Report-Msgid-Bugs-To: https://github.com/cherokee/webserver/issues\n" +"POT-Creation-Date: 2021-03-26 19:04+0100\n" +"PO-Revision-Date: 2021-03-24 01:44+0100\n" +"Last-Translator: Thomas Reim \n" "Language-Team: \n" "Language: de\n" "MIME-Version: 1.0\n" @@ -32,7 +32,6 @@ msgid "Allowed HTTP Authentication methods." msgstr "Erlaubte HTTP-Authentifizierungsmethoden." #: admin/Auth.py:36 -#, fuzzy msgid "Name associated with the protected resource." msgstr "Name der geschützten Ressource." @@ -101,7 +100,7 @@ msgstr "Informationsquellen" msgid "Assign Information Sources" msgstr "Informationsquellen zuordnen" -#: admin/Balancer.py:136 admin/PageIndex.py:204 admin/PageRule.py:112 +#: admin/Balancer.py:136 admin/PageIndex.py:182 admin/PageRule.py:112 #: admin/plugins/bind.py:69 admin/plugins/bind.py:121 #: admin/plugins/custom_error.py:41 admin/plugins/method.py:31 msgid "Choose" @@ -126,7 +125,7 @@ msgstr "rechts" #: admin/CTK/CTK/Config.py:244 #, python-format msgid "ERROR: Couldn't unpack '%s'" -msgstr "Fehler: '%s' konnte nicht enpackt werden" +msgstr "Fehler: '%s' konnte nicht entpackt werden" #: admin/CTK/CTK/Config.py:392 msgid "Could not copy configuration to " @@ -136,17 +135,17 @@ msgstr "Konfiguration konnte nicht kopiert werden nach" #: admin/CTK/CTK/Druid.py:216 admin/CTK/CTK/Druid.py:224 #: admin/CTK/CTK/Druid.py:232 admin/CTK/CTK/Druid.py:238 admin/Icons.py:362 #: admin/Mime.py:110 admin/PageGeneral.py:289 admin/PageGeneral.py:317 -#: admin/PageIndex.py:232 admin/PageIndex.py:308 admin/PageRule.py:225 -#: admin/PageRule.py:276 admin/PageRule.py:302 admin/PageSource.py:225 -#: admin/PageSource.py:411 admin/PageSource.py:428 admin/PageSource.py:442 -#: admin/PageVServers.py:215 admin/PageVServers.py:252 -#: admin/PageVServers.py:281 admin/plugins/redir.py:120 +#: admin/PageIndex.py:246 admin/PageRule.py:225 admin/PageRule.py:276 +#: admin/PageRule.py:302 admin/PageSource.py:225 admin/PageSource.py:411 +#: admin/PageSource.py:428 admin/PageSource.py:442 admin/PageVServers.py:215 +#: admin/PageVServers.py:252 admin/PageVServers.py:281 +#: admin/plugins/redir.py:120 msgid "Cancel" msgstr "Abbrechen" #: admin/CTK/CTK/Dialog.py:165 admin/CTK/CTK/Dialog.py:272 #: admin/CTK/CTK/Druid.py:243 admin/PageException.py:89 -#: admin/PageException.py:93 admin/PageGeneral.py:283 admin/PageIndex.py:277 +#: admin/PageException.py:93 admin/PageGeneral.py:283 admin/PageIndex.py:215 #: admin/PageSource.py:402 admin/plugins/error_redir.py:110 msgid "Close" msgstr "Schließen" @@ -157,9 +156,8 @@ msgid "Next" msgstr "Weiter" #: admin/CTK/CTK/Druid.py:218 admin/CTK/CTK/Druid.py:226 -#, fuzzy msgid "Prev" -msgstr "Vorher" +msgstr "Zurück" #: admin/CTK/CTK/Druid.py:225 admin/CTK/CTK/Druid.py:233 #: admin/PageNewConfig.py:154 @@ -180,28 +178,27 @@ msgstr "Inaktiv" #: admin/CTK/CTK/Image.py:94 msgid "Loading" -msgstr "Ladend" +msgstr "Laden" #: admin/CTK/CTK/Image.py:99 admin/CgiBase.py:69 admin/CgiBase.py:71 #: admin/CgiBase.py:124 admin/CgiBase.py:125 admin/CgiBase.py:126 #: admin/CgiBase.py:127 admin/CgiBase.py:128 admin/Graph.py:125 -#: admin/PageAdvanced.py:150 admin/PageEntry.py:150 admin/PageEntry.py:159 -#: admin/PageGeneral.py:193 admin/PageSource.py:296 -#: admin/plugins/dirlist.py:56 admin/plugins/exists.py:72 -#: admin/plugins/exists.py:77 admin/plugins/exists.py:78 -#: admin/plugins/exists.py:79 admin/plugins/exists.py:109 -#: admin/plugins/exists.py:115 admin/plugins/exists.py:116 -#: admin/plugins/exists.py:117 admin/plugins/file.py:40 -#: admin/plugins/ldap.py:53 admin/plugins/streaming.py:43 +#: admin/PageAdvanced.py:198 admin/PageEntry.py:150 admin/PageEntry.py:159 +#: admin/PageGeneral.py:193 admin/PageSource.py:296 admin/plugins/dirlist.py:59 +#: admin/plugins/exists.py:72 admin/plugins/exists.py:77 +#: admin/plugins/exists.py:78 admin/plugins/exists.py:79 +#: admin/plugins/exists.py:109 admin/plugins/exists.py:115 +#: admin/plugins/exists.py:116 admin/plugins/exists.py:117 +#: admin/plugins/file.py:42 admin/plugins/ldap.py:53 +#: admin/plugins/streaming.py:43 msgid "Enabled" -msgstr "Aktiviert" +msgstr "Aktiv" #: admin/CTK/CTK/Image.py:104 msgid "Forbidden" -msgstr "Verboten" +msgstr "Unzulässig" #: admin/CTK/CTK/Paginator.py:63 -#, fuzzy msgid "Previous" msgstr "Vorher" @@ -210,24 +207,23 @@ msgstr "Vorher" msgid "Optional" msgstr "Optional" -#: admin/CTK/CTK/ToggleButton.py:154 +#: admin/CTK/CTK/ToggleButton.py:154 admin/PageAdvanced.py:245 +#: admin/PageAdvanced.py:258 msgid "Disable" -msgstr "Deaktivieren" +msgstr "Abschalten" -#: admin/CTK/CTK/ToggleButton.py:155 admin/PageVServer.py:669 +#: admin/CTK/CTK/ToggleButton.py:155 admin/PageVServer.py:678 #: admin/wizards/flcache.py:157 msgid "Enable" -msgstr "Aktivieren" +msgstr "Einschalten" #: admin/CgiBase.py:32 -#, fuzzy msgid "Path to an executable that will be run with the CGI as parameter." msgstr "" "Pfad zu einer ausführbaren Datei, welche mit CGI als Parameter ausgeführt " "wird." #: admin/CgiBase.py:33 -#, fuzzy msgid "Execute the CGI under its file owner user ID." msgstr "" "ID des Benutzers, mit dessen Rechten der CGI-Prozess ausgeführt werden soll." @@ -237,7 +233,6 @@ msgid "Send errors exactly as they are generated." msgstr "Sende Fehler genau so wie sie generiert werden." #: admin/CgiBase.py:35 -#, fuzzy msgid "Check whether the file is in place." msgstr "Prüfe, ob die Datei vorhanden ist." @@ -261,7 +256,7 @@ msgid "" "headers and use it in REMOTE_ADDR." msgstr "" -#: admin/CgiBase.py:40 admin/PageVServer.py:70 +#: admin/CgiBase.py:40 admin/PageVServer.py:74 msgid "" "Accept all the X-Real-IP and X-Forwarded-For headers. WARNING: Turn it on " "only if you are centain of what you are doing." @@ -274,16 +269,14 @@ msgid "" msgstr "" #: admin/CgiBase.py:69 -#, fuzzy msgid "Read X-Real-IP" msgstr "Lese X-Real-IP" -#: admin/CgiBase.py:71 admin/PageVServer.py:610 +#: admin/CgiBase.py:71 admin/PageVServer.py:614 msgid "Don't check origin" msgstr "Ursprung nicht prüfen" -#: admin/CgiBase.py:73 admin/PageVServer.py:613 -#, fuzzy +#: admin/CgiBase.py:73 admin/PageVServer.py:617 msgid "Accept from Hosts" msgstr "Von Hosts erlauben" @@ -298,7 +291,7 @@ msgstr "Wert" #: admin/CgiBase.py:120 msgid "Script Alias" -msgstr "Script Alias" +msgstr "Aliasname für Skripts" #: admin/CgiBase.py:122 msgid "Change" @@ -310,7 +303,7 @@ msgstr "UID ändern" #: admin/CgiBase.py:124 msgid "Error handler" -msgstr "Fehlerhandhabung" +msgstr "Fehlerroutine" #: admin/CgiBase.py:125 msgid "Check file" @@ -325,22 +318,19 @@ msgid "Allow X-Sendfile" msgstr "Erlaube X-Sendfile" #: admin/CgiBase.py:128 admin/plugins/exists.py:77 admin/plugins/exists.py:115 -#: admin/plugins/file.py:40 -#, fuzzy +#: admin/plugins/file.py:42 msgid "Use I/O cache" msgstr "I/O Puffer nutzen" #: admin/CgiBase.py:133 msgid "Common CGI Options" -msgstr "Allgemeine CGI Optionen" +msgstr "Allgemeine CGI-Optionen" #: admin/CgiBase.py:140 admin/plugins/authlist.py:87 -#, fuzzy msgid "Fixed Authentication List" msgstr "Authentifizierungsdetails" #: admin/CgiBase.py:147 -#, fuzzy msgid "Custom Environment Variables" msgstr "Benutzerdefinierte Umgebungsvariablen" @@ -357,13 +347,12 @@ msgid "Add" msgstr "Hinzufügen" #: admin/CgiBase.py:164 -#, fuzzy msgid "Add New Custom Environment Variable" msgstr "Neue Umgebungsvariable hinzufügen" #: admin/Cherokee.py:150 msgid "Could not access file descriptors: " -msgstr "Konnte auf Datei-Deskriptoren nicht zugreifen: " +msgstr "Tugriff auf Datei-Deskriptoren fehlgeschlagen: " #: admin/Flags.py:308 admin/Flags.py:326 msgid "Countries" @@ -374,18 +363,16 @@ msgid "Extras" msgstr "Extras" #: admin/Graph.py:40 -#, fuzzy msgid "Server Traffic" -msgstr "Server Datenverkehr" +msgstr "Datenverkehr Server" #: admin/Graph.py:41 msgid "Connections / Requests" msgstr "Verbindungen / Anfragen" #: admin/Graph.py:42 -#, fuzzy msgid "Connection Timeouts" -msgstr "Verbindungenstimeout" +msgstr "Zeitüberschreitung Verbindung" #: admin/Graph.py:44 msgid "1 Hour" @@ -423,7 +410,7 @@ msgid "" msgstr "" #: admin/Graph.py:118 admin/PageEntry.py:538 admin/PageSource.py:257 -#: admin/PageStatus.py:70 admin/PageVServer.py:731 admin/PageVServers.py:210 +#: admin/PageStatus.py:70 admin/PageVServer.py:740 admin/PageVServers.py:210 msgid "Unknown" msgstr "Unbekannt" @@ -435,7 +422,7 @@ msgstr "Statistiken erfassen" msgid "Allows to specify an alternative Document Root path." msgstr "" -#: admin/Handler.py:43 admin/PageEntry.py:523 admin/PageVServer.py:462 +#: admin/Handler.py:43 admin/PageEntry.py:523 admin/PageVServer.py:466 #: admin/PageVServers.py:128 admin/wizards/django.py:191 #: admin/wizards/mono.py:199 admin/wizards/php.py:39 admin/wizards/php.py:342 #: admin/wizards/uwsgi.py:267 @@ -447,7 +434,7 @@ msgid "Extension List" msgstr "Liste der Erweiterungen" #: admin/Icons.py:129 admin/Icons.py:328 admin/Mime.py:96 admin/Mime.py:131 -#: admin/consts.py:188 admin/plugins/extensions.py:61 +#: admin/consts.py:187 admin/plugins/extensions.py:61 #: admin/wizards/flcache.py:141 msgid "Extensions" msgstr "Erweiterungen" @@ -457,9 +444,8 @@ msgid "Add New Extension" msgstr "Neue Erweiterung hinzufügen" #: admin/Icons.py:157 -#, fuzzy msgid "File Matches" -msgstr "Datei Verknüpfungen" +msgstr "Dateiverknüpfungen" #: admin/Icons.py:168 admin/plugins/exists.py:75 admin/plugins/exists.py:114 msgid "Files" @@ -469,12 +455,13 @@ msgstr "Dateien" msgid "Add New File" msgstr "Neue Datei hinzufügen" -#: admin/Icons.py:197 admin/Icons.py:329 admin/Rule.py:174 admin/consts.py:42 -#: admin/consts.py:128 admin/consts.py:262 +#: admin/Icons.py:197 admin/Icons.py:329 admin/PageVServer.py:674 +#: admin/PageVServer.py:675 admin/Rule.py:174 admin/consts.py:42 +#: admin/consts.py:128 admin/consts.py:261 msgid "Default" msgstr "Standard" -#: admin/Icons.py:198 admin/Icons.py:330 admin/consts.py:187 +#: admin/Icons.py:198 admin/Icons.py:330 admin/consts.py:186 #: admin/plugins/directory.py:31 msgid "Directory" msgstr "Ordner" @@ -487,9 +474,9 @@ msgstr "Gehe zum übergeordneten Ordner" msgid "Modify" msgstr "Ändern" -#: admin/Icons.py:214 admin/PageAdvanced.py:168 admin/PageAdvanced.py:192 +#: admin/Icons.py:214 admin/PageAdvanced.py:216 admin/PageAdvanced.py:316 msgid "Special Files" -msgstr "Besondere Dateien" +msgstr "Dateien" #: admin/Icons.py:327 admin/consts.py:104 msgid "File" @@ -497,7 +484,7 @@ msgstr "Datei" #: admin/Mime.py:37 msgid "New MIME type to be added." -msgstr "Neuer MIME Typ, der hinzugefügt werden soll." +msgstr "Neuer Medientyp, der hinzugefügt werden soll." #: admin/Mime.py:38 msgid "Comma separated list of file extensions associated with the MIME type." @@ -517,7 +504,7 @@ msgstr "Maximales Alter" #: admin/Mime.py:109 msgid "Add New MIME-Type" -msgstr "Neuen MIME-Typ hinzufügen" +msgstr "Neuen Medientyp hinzufügen" #: admin/Mime.py:114 admin/plugins/error_redir.py:121 msgid "Add New" @@ -533,28 +520,24 @@ msgstr "Medientyp" #: admin/Mime.py:132 msgid "MaxAge (secs)" -msgstr "Max Alter (in Sekunden)" +msgstr "Max. Alter (in s)" #: admin/Page.py:34 -#, fuzzy msgid "Save Configuration" -msgstr "Erweiterte Konfiguration" +msgstr "Konfiguration speichern" #: admin/Page.py:35 -#, fuzzy msgid "Would you like to apply the changes to the running server now?" msgstr "" -"Änderungenen speichern und im laufenden Server die Änderungenen übernehmen" +"Änderungenen speichern und im laufenden Betrieb auf den Server einspielen?" #: admin/Page.py:36 -#, fuzzy msgid "The configuration file has been saved successfully." msgstr "Die Konfigurationsdatei wurde erfolgreich gespeichert." #: admin/Page.py:43 -#, fuzzy msgid "Sanity checks" -msgstr "Nicht prüfen" +msgstr "Plausibilitätsprüfung" #: admin/Page.py:44 msgid "" @@ -563,32 +546,29 @@ msgid "" msgstr "" #: admin/Page.py:45 -#, fuzzy msgid "Note that the configuration file was not saved." -msgstr "Die Konfigurationsdatei wurde erfolgreich gespeichert." +msgstr "" +"Bitte beachten Sie, dass die Konfigurationsdatei nicht gespeichert wurde." #: admin/Page.py:87 -#, fuzzy msgid "Solve" -msgstr "Speichern" +msgstr "Beheben" #: admin/Page.py:106 -#, fuzzy msgid "Configuration successfully saved" -msgstr "Konfigurationsdatei nicht gefunden" +msgstr "Konfigurationsdatei erfolgreich gespeichert" #: admin/Page.py:114 msgid "Do not restart" -msgstr "Nicht Neustarten" +msgstr "Kein Neustart" #: admin/Page.py:120 -#, fuzzy msgid "Graceful restart" -msgstr "Weicher Neustart" +msgstr "Ordnungsgemäßer Neustart" #: admin/Page.py:126 msgid "Hard restart" -msgstr "Harter Neustart" +msgstr "Erzwungener Neustart" #: admin/Page.py:153 msgid "Save" @@ -596,9 +576,9 @@ msgstr "Speichern" #: admin/Page.py:154 msgid "Home" -msgstr "Home" +msgstr "Übersicht" -#: admin/Page.py:155 admin/PageAdvanced.py:150 admin/PageIndex.py:84 +#: admin/Page.py:155 admin/PageAdvanced.py:198 admin/PageIndex.py:62 #: admin/PageStatus.py:40 admin/PageStatus.py:112 msgid "Status" msgstr "Status" @@ -612,11 +592,10 @@ msgid "vServers" msgstr "vServer" #: admin/Page.py:158 -#, fuzzy msgid "Sources" msgstr "Quellen" -#: admin/Page.py:159 admin/PageAdvanced.py:97 admin/PageAdvanced.py:198 +#: admin/Page.py:159 admin/PageAdvanced.py:145 admin/PageAdvanced.py:322 msgid "Advanced" msgstr "Erweitert" @@ -628,278 +607,363 @@ msgstr "Hilfe" msgid "Updating..." msgstr "Aktualisieren..." -#: admin/PageAdvanced.py:64 +#: admin/PageAdvanced.py:56 +msgid "" +"

WARNING: The SSL/TLS back-end supports more recent\n" +"versions of TLS protocols, which are not recognized by Cherokee. Please " +"check\n" +"for latest Cherokee updates or report this issue. As a temporary workaround " +"please\n" +"set 'Max. TLS protocol version' to the maximum TLS protocol version " +"supported by\n" +"Cherokee.

Following unknown TLS protocols have been found:" +msgstr "" +"

Achtung: Das SSL/TLS-Backend unterstützt aktuellere TLS-" +"Protokollversionen, die von Cherokee nicht erkannt werden. Bitte prüfen Sie " +"Cherokee auf Aktualisierungen oder melden Sie das Problem den Entwicklern. " +"Übergangsweise stellen Sie bitte die aktuellste von Cherokee unterstützte " +"TLS-Protokollversion in der Option 'Max. TLS-Protokollversion' ein.

Folgende TLS-Protokolle wurden nicht erkannt:" + +#: admin/PageAdvanced.py:94 msgid "" "

WARNING: This section contains advanced\n" "configuration parameters. Changing things is not recommended unless\n" "you really know what you are doing.

" msgstr "" "

Achtung: Dieser Bereich enthält erweiterte " -"Konfigurationsparameter. Parameter zu verändern ist nicht Empfehlenswert, " -"außer Sie wissen genau was Sie tun.

" +"Konfigurationsparameter. Eine Änderung der Parameter ist nicht " +"empfehlenswert, außer Sie wissen genau, was Sie tun.

" -#: admin/PageAdvanced.py:68 +#: admin/PageAdvanced.py:98 msgid "Defines which thread policy the OS should apply to the server." msgstr "" -#: admin/PageAdvanced.py:69 +#: admin/PageAdvanced.py:99 msgid "If empty, Cherokee will calculate a default number." -msgstr "Wenn das Feld leer ist, wird Cherokee eine Standardnummer berechnen" +msgstr "" -#: admin/PageAdvanced.py:70 +#: admin/PageAdvanced.py:100 msgid "" "It defines how many file descriptors the server should handle. Default is " "the number showed by ulimit -n" msgstr "" -#: admin/PageAdvanced.py:71 +#: admin/PageAdvanced.py:101 msgid "Allows to choose the internal file descriptor polling method." msgstr "" -#: admin/PageAdvanced.py:72 +#: admin/PageAdvanced.py:102 msgid "Minimum size of a file to use sendfile(). Default: 32768 Bytes." msgstr "" -"Minimale Größe einer Datei um sendfile() zu benutzen. Standard: 32768 Bytes." +"Minimale Größe einer Datei, um sendfile() zu benutzen. Standard: 32768 Bytes." -#: admin/PageAdvanced.py:73 +#: admin/PageAdvanced.py:103 msgid "Maximum size of a file to use sendfile(). Default: 2 GB." -msgstr "Maximale Größe einer Datei um sendfile() zu benutzen. Standard: 2 GB." +msgstr "Maximale Größe einer Datei, um sendfile() zu benutzen. Standard: 2 GB." -#: admin/PageAdvanced.py:74 +#: admin/PageAdvanced.py:104 msgid "" "Name a program that will be called if, by some reason, the server fails. " "Default: cherokee-panic." msgstr "" -"Ein Programm, welches aufgerufen wird, wenn der Server aus irgendeinem Grund " +"Name des Programms, das aufgerufen wird, wenn im Fehlerfall der Server " "abstürzt. Standard: cherokee-panic." -#: admin/PageAdvanced.py:75 +#: admin/PageAdvanced.py:105 msgid "Path of the PID file. If empty, the file will not be created." msgstr "Pfad der PID-Datei. Wenn das Feld leer ist, wird keine Datei erzeugt." -#: admin/PageAdvanced.py:76 +#: admin/PageAdvanced.py:106 msgid "Max. length of the incoming connection queue." msgstr "" -#: admin/PageAdvanced.py:77 +#: admin/PageAdvanced.py:107 msgid "" "Set the number of how many internal connections can be held for reuse by " "each thread. Default: 20." msgstr "" -#: admin/PageAdvanced.py:78 +#: admin/PageAdvanced.py:108 msgid "" "Sets the number of seconds between log consolidations (flushes). Default: 10 " "seconds." msgstr "" -#: admin/PageAdvanced.py:79 +#: admin/PageAdvanced.py:109 msgid "Time lapse (in seconds) between Nonce cache clean ups." msgstr "" -#: admin/PageAdvanced.py:80 +#: admin/PageAdvanced.py:110 msgid "" "Enables the server-wide keep-alive support. It increases the performance. It " "is usually set on." msgstr "" -#: admin/PageAdvanced.py:81 +#: admin/PageAdvanced.py:111 msgid "" "Maximum number of HTTP requests that can be served by each keepalive " "connection." msgstr "" -#: admin/PageAdvanced.py:82 +#: admin/PageAdvanced.py:112 msgid "" "Allows the server to use Chunked encoding to try to keep Keep-Alive enabled." msgstr "" -#: admin/PageAdvanced.py:83 +#: admin/PageAdvanced.py:113 msgid "Activate or deactivate the I/O cache globally." msgstr "Den I/O Puffer global aktivieren oder deaktivieren." -#: admin/PageAdvanced.py:84 +#: admin/PageAdvanced.py:114 msgid "Number of pages that the cache should handle." -msgstr "Anzahl der Seiten welche der Puffer verwalten soll." +msgstr "Anzahl der Seiten, die im Puffer verwaltet werden sollen." -#: admin/PageAdvanced.py:85 -#, fuzzy +#: admin/PageAdvanced.py:115 msgid "Files under this size (in bytes) will not be cached." -msgstr "Dateien die kleiner sind werden nicht gepuffert." +msgstr "Dateigröße (in Byte), unter der Dateien nicht gepuffert werden." -#: admin/PageAdvanced.py:86 -#, fuzzy +#: admin/PageAdvanced.py:116 msgid "Files over this size (in bytes) will not be cached." -msgstr "Dateien die größer sind werden nicht gepuffert." +msgstr "Dateigröße (in Byte), ab der Dateien nicht mehr gepuffert werden." -#: admin/PageAdvanced.py:87 +#: admin/PageAdvanced.py:117 msgid "" "How long (in seconds) the file information should last cached without " "refreshing it." msgstr "" -#: admin/PageAdvanced.py:88 +#: admin/PageAdvanced.py:118 msgid "How long (in seconds) the file content should last cached." msgstr "" -#: admin/PageAdvanced.py:89 +#: admin/PageAdvanced.py:119 msgid "Path to a Diffie Hellman (DH) parameters PEM file: 512 bits." -msgstr "" +msgstr "Pfad zu PEM-Datei mit Diffie-Hellmann-Parametern: DH 512 Bits" -#: admin/PageAdvanced.py:90 +#: admin/PageAdvanced.py:120 msgid "Path to a Diffie Hellman (DH) parameters PEM file: 1024 bits." -msgstr "" +msgstr "Pfad zu PEM-Datei mit Diffie-Hellmann-Parametern: DH 1024 Bits" -#: admin/PageAdvanced.py:91 +#: admin/PageAdvanced.py:121 msgid "Path to a Diffie Hellman (DH) parameters PEM file: 2048 bits." -msgstr "" +msgstr "Pfad zu PEM-Datei mit Diffie-Hellmann-Parametern: DH 2048 Bits" -#: admin/PageAdvanced.py:92 +#: admin/PageAdvanced.py:122 msgid "Path to a Diffie Hellman (DH) parameters PEM file: 4096 bits." -msgstr "" +msgstr "Pfad zu PEM-Datei mit Diifie-Hellmann-Parametern: DH 4096 Bits" -#: admin/PageAdvanced.py:93 +#: admin/PageAdvanced.py:123 +msgid "Your Cherokee Web Server does not support SSL/TLS encryption." +msgstr "Ihr Cherokee-Webserver unterstützt keine SSL/TLS-Verschlüsselung" + +#: admin/PageAdvanced.py:124 msgid "Timeout for the TLS/SSL handshake. Default: 15 seconds." +msgstr "Zeitlimit für das TLS/SSL-Handshaking. Standardwert: 15 s." + +#: admin/PageAdvanced.py:125 +msgid "Beware: it is vulnerable. You should disable SSLv2." msgstr "" +"Vorsicht: Verwendung ist nicht mehr zulässig. Bitte deaktivieren Sie SSLv2." -#: admin/PageAdvanced.py:94 +#: admin/PageAdvanced.py:126 +msgid "Beware: it is vulnerable. You should disable SSLv3." +msgstr "" +"Vorsicht: Verwendung ist nicht mehr zulässig. Bitte deaktivieren Sie SSLv3" + +#: admin/PageAdvanced.py:127 +msgid "TLSv1 is deprecated" +msgstr "TLSv1 ist veraltet. Die Unterstützung läuft aus." + +#: admin/PageAdvanced.py:128 +msgid "TLSv1.1 is deprecated" +msgstr "TLSv1.1 ist veraltet. Die Unterstützung läuft aus." + +#: admin/PageAdvanced.py:129 admin/PageAdvanced.py:130 +msgid " " +msgstr "" + +#: admin/PageAdvanced.py:131 +msgid "" +"The following options work in combination with above min/max TLS protocol " +"version settings. They are deprecated, only set the minimum and maximum " +"supported protocol versions instead." +msgstr "" +"Die folgenden SSL/TLS-Parameter steuern gemeinsam mit den obigen Min/Max-TLS-" +"Protokollversionseinstellungen das Verschlüsselungsverhalten des Servers. " +"Diese Parameter werden nicht mehr unterstützt. Bitte stellen Sie stattdessen " +"nur noch die minimal und maximal erlaubte TLS-Protokollversion ein." + +#: admin/PageAdvanced.py:133 +msgid "" +"Minimum required TLS protocol version from clients (Default: auto-configured " +"by libssl)" +msgstr "" +"Minimal benötigte TLS-Protokollversion für Clients (Standardwert: auto-" +"configured durch libssl" + +#: admin/PageAdvanced.py:134 msgid "" -"Allow clients to use SSL version 2 - Beware: it is vulnerable. (Default: No)" +"Maximum supported TLS protocol version (Default: auto-configured by libssl)" msgstr "" +"Maximal unterstützte TLS-Protokollversion (Standardwert: auto-configured " +"durch libssl" -#: admin/PageAdvanced.py:119 admin/PageAdvanced.py:121 +#: admin/PageAdvanced.py:167 admin/PageAdvanced.py:169 msgid "Allowed" msgstr "Erlaubt" -#: admin/PageAdvanced.py:119 +#: admin/PageAdvanced.py:167 msgid "Keep Alive" msgstr "" -#: admin/PageAdvanced.py:120 +#: admin/PageAdvanced.py:168 msgid "Max keepalive reqs" msgstr "" -#: admin/PageAdvanced.py:121 +#: admin/PageAdvanced.py:169 msgid "Chunked Encoding" msgstr "" -#: admin/PageAdvanced.py:122 +#: admin/PageAdvanced.py:170 msgid "Polling Method" msgstr "Abfragemethode" -#: admin/PageAdvanced.py:123 +#: admin/PageAdvanced.py:171 msgid "Sendfile min size" msgstr "" -#: admin/PageAdvanced.py:124 +#: admin/PageAdvanced.py:172 msgid "Sendfile max size" msgstr "" -#: admin/PageAdvanced.py:126 admin/PageAdvanced.py:189 +#: admin/PageAdvanced.py:174 admin/PageAdvanced.py:313 msgid "Connections" msgstr "Verbindungen" -#: admin/PageAdvanced.py:134 +#: admin/PageAdvanced.py:182 msgid "Thread Number" -msgstr "Prozessnummer" +msgstr "Thread-Nummer" -#: admin/PageAdvanced.py:135 +#: admin/PageAdvanced.py:183 msgid "Thread Policy" msgstr "" -#: admin/PageAdvanced.py:136 +#: admin/PageAdvanced.py:184 msgid "File descriptors" msgstr "" -#: admin/PageAdvanced.py:137 +#: admin/PageAdvanced.py:185 msgid "Listening queue length" msgstr "" -#: admin/PageAdvanced.py:138 admin/plugins/proxy.py:239 +#: admin/PageAdvanced.py:186 admin/plugins/proxy.py:239 msgid "Reuse connections" msgstr "" -#: admin/PageAdvanced.py:139 +#: admin/PageAdvanced.py:187 msgid "Log flush time" msgstr "" -#: admin/PageAdvanced.py:140 +#: admin/PageAdvanced.py:188 msgid "Nonces clean up time" msgstr "" -#: admin/PageAdvanced.py:142 admin/PageAdvanced.py:190 -#, fuzzy +#: admin/PageAdvanced.py:190 admin/PageAdvanced.py:314 msgid "Resources" -msgstr "Resourcen" +msgstr "Ressourcen" -#: admin/PageAdvanced.py:151 +#: admin/PageAdvanced.py:199 msgid "Max pages" -msgstr "Maximale Anzahl der Seiten" +msgstr "Maximale Anzahl an Seiten" -#: admin/PageAdvanced.py:152 +#: admin/PageAdvanced.py:200 msgid "File Min Size" msgstr "Mindestgröße der Datei" -#: admin/PageAdvanced.py:153 +#: admin/PageAdvanced.py:201 msgid "File Max Size" msgstr "Höchstgröße einer Datei" -#: admin/PageAdvanced.py:154 +#: admin/PageAdvanced.py:202 msgid "Lasting: stat" msgstr "" -#: admin/PageAdvanced.py:155 +#: admin/PageAdvanced.py:203 msgid "Lasting: mmap" msgstr "" -#: admin/PageAdvanced.py:157 admin/PageAdvanced.py:191 +#: admin/PageAdvanced.py:205 admin/PageAdvanced.py:315 msgid "I/O cache" msgstr "I/O Puffer" -#: admin/PageAdvanced.py:165 +#: admin/PageAdvanced.py:213 msgid "Panic action" msgstr "" -#: admin/PageAdvanced.py:166 +#: admin/PageAdvanced.py:214 msgid "PID file" msgstr "PID Datei" -#: admin/PageAdvanced.py:176 admin/PageEntry.py:84 admin/PageVServer.py:476 -#: admin/plugins/common.py:42 admin/plugins/common.py:43 -#: admin/plugins/dirlist.py:55 admin/plugins/proxy.py:240 -msgid "Allow" -msgstr "Erlauben" +#: admin/PageAdvanced.py:245 admin/PageAdvanced.py:247 +#: admin/PageAdvanced.py:258 admin/PageAdvanced.py:260 +msgid "Disable " +msgstr "Abschalten von " -#: admin/PageAdvanced.py:176 -msgid "Allow SSL v2" -msgstr "SSL v2 erlauben" +#: admin/PageAdvanced.py:247 +msgid "Protocol deacrivated" +msgstr "Protokoll deaktiviert" -#: admin/PageAdvanced.py:177 -msgid "Handshake Timeout" +#: admin/PageAdvanced.py:247 +msgid "Protocol not supported" +msgstr "Protokoll nicht unterstützt" + +#: admin/PageAdvanced.py:260 +msgid "Protocol deactivated" +msgstr "Protokoll deaktiviert" + +#: admin/PageAdvanced.py:262 +msgid "Turn off selected TLS Protocols (Deprecated)" +msgstr "Abschaltung ausgewählter TLS-Protokolle (abgekündigt)" + +#: admin/PageAdvanced.py:270 admin/PageAdvanced.py:271 +msgid "auto-configured" msgstr "" -#: admin/PageAdvanced.py:178 +#: admin/PageAdvanced.py:285 +msgid "Min. TLS protocol version" +msgstr "Min. TLS-Protokollversion" + +#: admin/PageAdvanced.py:290 +msgid "Max. TLS protocol version" +msgstr "Max. TLS-Protokollversion" + +#: admin/PageAdvanced.py:291 +msgid "Handshake Timeout" +msgstr "Zeitlimit für Handshaking" + +#: admin/PageAdvanced.py:292 msgid "DH parameters: 512 bits" -msgstr "DH Parameter: 512 bits" +msgstr "DH-Parameter: 512 bits" -#: admin/PageAdvanced.py:179 +#: admin/PageAdvanced.py:293 msgid "DH parameters: 1024 bits" -msgstr "DH Parameter: 1024 bits" +msgstr "DH-Parameter: 1024 bits" -#: admin/PageAdvanced.py:180 +#: admin/PageAdvanced.py:294 msgid "DH parameters: 2048 bits" -msgstr "DH Parameter: 2048 bits" +msgstr "DH-Parameter: 2048 bits" -#: admin/PageAdvanced.py:181 +#: admin/PageAdvanced.py:295 msgid "DH parameters: 4096 bits" -msgstr "DH Parameter: 4096 bits" +msgstr "DH-Parameter: 4096 bits" -#: admin/PageAdvanced.py:183 admin/PageAdvanced.py:193 -#: admin/PageGeneral.py:239 admin/plugins/bind.py:92 +#: admin/PageAdvanced.py:296 admin/PageAdvanced.py:317 admin/PageGeneral.py:239 +#: admin/plugins/bind.py:92 msgid "TLS" msgstr "TLS" -#: admin/PageAdvanced.py:199 +#: admin/PageAdvanced.py:323 msgid "Advanced Configuration" msgstr "Erweiterte Konfiguration" @@ -995,32 +1059,35 @@ msgstr "GZip Encoder" msgid "Deflate encoder" msgstr "Deflate Encoder" -#: admin/PageEntry.py:78 admin/PageEntry.py:173 admin/PageVServer.py:149 +#: admin/PageEntry.py:78 admin/PageEntry.py:173 admin/PageVServer.py:153 msgid "Authentication" msgstr "Authentifizierung" #: admin/PageEntry.py:79 -#, fuzzy msgid "Authentication modules" msgstr "Authentifizierungsmodule" #: admin/PageEntry.py:83 admin/PageEntry.py:89 msgid "Leave unset" -msgstr "unverändert lassen" +msgstr "" + +#: admin/PageEntry.py:84 admin/PageVServer.py:480 admin/plugins/common.py:42 +#: admin/plugins/common.py:43 admin/plugins/dirlist.py:58 +#: admin/plugins/file.py:44 admin/plugins/proxy.py:240 +msgid "Allow" +msgstr "Zulassen" #: admin/PageEntry.py:85 msgid "Forbid" -msgstr "Verbieten" +msgstr "Nicht zulassen" #: admin/PageEntry.py:90 -#, fuzzy msgid "Allow Caching" -msgstr "Pfad" +msgstr "Zulassen" #: admin/PageEntry.py:91 -#, fuzzy msgid "Forbid Caching" -msgstr "Verbieten" +msgstr "Nicht zulassen" #: admin/PageEntry.py:95 msgid "Only explicitly cacheable responses" @@ -1035,29 +1102,28 @@ msgstr "" msgid "Remove" msgstr "Löschen" -#: admin/PageEntry.py:126 admin/PageVServer.py:155 +#: admin/PageEntry.py:126 admin/PageVServer.py:159 #: admin/plugins/secdownload.py:44 msgid "Timeout" msgstr "" #: admin/PageEntry.py:130 -#, fuzzy msgid "Connections Timeout" -msgstr "Verbindungenstimeout" +msgstr "Zeitüberschreitung Verbindungen" #: admin/PageEntry.py:135 msgid "Limit traffic to" msgstr "Begrenze den Datenverkehr auf" -#: admin/PageEntry.py:139 admin/PageVServer.py:156 +#: admin/PageEntry.py:139 admin/PageVServer.py:160 msgid "Traffic Shaping" -msgstr "Traffic Shaping" +msgstr "Traffic-Shaping" #: admin/PageEntry.py:150 msgid "Skip Logging" -msgstr "Loggen auslassen" +msgstr "Keine Protokollierung" -#: admin/PageEntry.py:154 admin/PageVServer.py:720 +#: admin/PageEntry.py:154 admin/PageVServer.py:729 msgid "Logging" msgstr "Protokollierung" @@ -1078,20 +1144,18 @@ msgid "Validation Mechanism" msgstr "Validierungsmechanismus" #: admin/PageEntry.py:189 admin/PageEntry.py:192 admin/PageEntry.py:297 -#, fuzzy msgid "Can not be empty" msgstr "Kann nicht leer sein" # eingedeutscht Kopf; dann für Informatiker unverständlich? -#: admin/PageEntry.py:216 admin/PageEntry.py:268 admin/consts.py:190 -#: admin/plugins/header.py:110 admin/plugins/header.py:151 -#: admin/plugins/header.py:156 admin/plugins/proxy.py:193 -#, fuzzy +#: admin/PageEntry.py:216 admin/PageEntry.py:268 admin/consts.py:189 +#: admin/plugins/header.py:112 admin/plugins/header.py:153 +#: admin/plugins/header.py:158 admin/plugins/proxy.py:193 msgid "Header" msgstr "Header" #: admin/PageEntry.py:216 admin/PageSource.py:284 -#: admin/plugins/error_redir.py:105 admin/plugins/header.py:113 +#: admin/plugins/error_redir.py:105 admin/plugins/header.py:115 #: admin/plugins/redir.py:76 msgid "Type" msgstr "Typ" @@ -1107,11 +1171,10 @@ msgid "Action" msgstr "Aktiv" #: admin/PageEntry.py:279 -#, fuzzy msgid "Add New Header" -msgstr "Neuer Header hinzufügen" +msgstr "Neuen Header hinzufügen" -#: admin/PageEntry.py:326 admin/consts.py:204 admin/plugins/redir.py:39 +#: admin/PageEntry.py:326 admin/consts.py:203 admin/plugins/redir.py:39 #: admin/plugins/rehost.py:53 msgid "Regular Expressions" msgstr "Reguläre Ausdrücke" @@ -1128,8 +1191,7 @@ msgstr "" msgid "Caching Policy" msgstr "" -#: admin/PageEntry.py:381 admin/plugins/rehost.py:68 -#: admin/plugins/rehost.py:92 +#: admin/PageEntry.py:381 admin/plugins/rehost.py:68 admin/plugins/rehost.py:92 msgid "New Regular Expression" msgstr "" @@ -1137,7 +1199,7 @@ msgstr "" msgid "Disregarded Cookies" msgstr "" -#: admin/PageEntry.py:402 admin/PageVServer.py:154 +#: admin/PageEntry.py:402 admin/PageVServer.py:158 msgid "Expiration" msgstr "Ablaufdatum" @@ -1169,10 +1231,9 @@ msgstr "" msgid "Content Expiration" msgstr "" -#: admin/PageEntry.py:433 admin/PageVServer.py:153 -#, fuzzy +#: admin/PageEntry.py:433 admin/PageVServer.py:157 msgid "Cache" -msgstr "Kein Cache" +msgstr "Cache" #: admin/PageEntry.py:445 msgid "Information Encoders" @@ -1184,7 +1245,6 @@ msgid "Use the %s encoder whenever the client requests it." msgstr "" #: admin/PageEntry.py:455 -#, fuzzy msgid "support" msgstr "Unterstützung" @@ -1193,7 +1253,7 @@ msgid "Matching Rule" msgstr "" #: admin/PageEntry.py:514 admin/PageEntry.py:528 admin/PageEntry.py:553 -#: admin/PageVServer.py:148 +#: admin/PageVServer.py:152 msgid "Handler" msgstr "" @@ -1202,22 +1262,20 @@ msgid "Rule" msgstr "Regel" #: admin/PageEntry.py:554 -#, fuzzy msgid "Transforms" -msgstr "Plattformen" +msgstr "Umformen" #: admin/PageEntry.py:555 msgid "Caching" msgstr "" -#: admin/PageEntry.py:556 admin/PageVServer.py:721 +#: admin/PageEntry.py:556 admin/PageVServer.py:730 msgid "Security" msgstr "Sicherheit" #: admin/PageEntry.py:557 -#, fuzzy msgid "Restrictions" -msgstr "Zugriffsbeschränkungen" +msgstr "Einschränkungen" #: admin/PageError.py:31 #, python-format @@ -1227,7 +1285,6 @@ msgid "" msgstr "" #: admin/PageError.py:59 admin/PageError.py:85 -#, fuzzy msgid "Server Launch Error" msgstr "Fehler beim Serverstart" @@ -1236,9 +1293,9 @@ msgid "Something unexpected just happened." msgstr "" #: admin/PageError.py:91 -#, fuzzy, python-format +#, python-format msgid "The configuration file %s cannot be modified." -msgstr "Konfigurationsdatei konnte nicht verändert werden" +msgstr "Konfigurationsdatei %s kann nicht verändert werden." #: admin/PageError.py:92 msgid "" @@ -1248,12 +1305,12 @@ msgstr "" #: admin/PageError.py:93 msgid "or by launching cherokee-admin as root." -msgstr "oder durch Aufruf von cherokee-admin als root" +msgstr "" #: admin/PageError.py:95 -#, fuzzy, python-format +#, python-format msgid "The specified configuration file %s is a directory." -msgstr "Konfigurationsdatei konnte nicht verändert werden" +msgstr "Konfigurationsdatei %s ist ein Verzeichnis." #: admin/PageError.py:96 msgid "" @@ -1262,20 +1319,18 @@ msgid "" msgstr "" #: admin/PageError.py:97 -#, fuzzy msgid "" "or by launching cherokee-admin specifying a different configuration file." -msgstr "oder durch Aufruf von cherokee-admin als root" +msgstr "" +"oder durch Angabe einer Konfigurationsdatei beim Aufruf von cherokee-admin." #: admin/PageError.py:107 admin/PageError.py:114 -#, fuzzy msgid "Configuration file is not writable" -msgstr "Konfigurationsdatei konnte nicht verändert werden" +msgstr "Kein Schreibzugriff auf Konfigurationsdatei" #: admin/PageError.py:120 -#, fuzzy msgid "Incorrect configuration file specified" -msgstr "Alte Konfigurationsdatei" +msgstr "Unzulässige Konfigurationsdatei angegeben" #: admin/PageError.py:132 #, python-format @@ -1288,14 +1343,12 @@ msgid "" msgstr "" #: admin/PageError.py:143 -#, fuzzy msgid "Cherokee resource is missing" -msgstr "Stolzer Cherokee Benutzer" +msgstr "" #: admin/PageError.py:158 -#, fuzzy msgid "Cherokee-admin has detected a very old configuration file." -msgstr "Erzeuge eine neue Konfigurationsdatei" +msgstr "cherokee-admin hat eine uralte Konfigurationsdatei erkannt." #: admin/PageError.py:159 msgid "" @@ -1305,14 +1358,12 @@ msgid "" msgstr "" #: admin/PageError.py:169 -#, fuzzy msgid "Detected an Ancient Configuration File" -msgstr "Erzeuge eine neue Konfigurationsdatei" +msgstr "Veraltete Konfigurationsdatei erkannt" #: admin/PageError.py:175 -#, fuzzy msgid "Ancient Configuration File" -msgstr "Alte Konfigurationsdatei" +msgstr "Veraltete Konfigurationsdatei" #: admin/PageException.py:38 msgid "We apologize for any inconveniences that this may have caused." @@ -1341,30 +1392,27 @@ msgstr "" #: admin/PageException.py:80 msgid "Internal Error" -msgstr "interner Fehler" +msgstr "Interner Fehler" #: admin/PageException.py:87 msgid "Thank you!" -msgstr "Danke!" +msgstr "Vielen Dank!" #: admin/PageException.py:91 msgid "Could not report the issue" msgstr "Problem konnte nicht berichtet werden" #: admin/PageException.py:99 -#, fuzzy msgid "Unexpected Exception" msgstr "Unerwartete Ausnahme" #: admin/PageException.py:112 -#, fuzzy msgid "Report this" msgstr "Berichten" #: admin/PageGeneral.py:40 -#, fuzzy msgid "Defines the TCP port that the server will listen to." -msgstr "Definiert einen Port, auf welchem der Server horcht" +msgstr "Definiert einen TCP-Port, den der Server abhört." #: admin/PageGeneral.py:41 msgid "Optionally defines an interface to bind to. For instance: 127.0.0.1" @@ -1416,8 +1464,8 @@ msgid "" "Jail the server inside the directory. Don't use it as the only security " "measure." msgstr "" -"Sperrt den Server in einem Ordner ein. Nutzen Sie dies nicht als einzige " -"Sicherheitsmaßnahme." +"Virtuelles Root-Verzeichnis für den Server (Chroot-Gefängnis). Verwenden Sie " +"dieses keinesfalls als alleinige Sicherheitsmaßnahme." #: admin/PageGeneral.py:51 msgid "" @@ -1443,7 +1491,7 @@ msgstr "" #, fuzzy msgid "You are about to delete an binding. Are you sure you want to proceed?" msgstr "" -"Sie sind dabei einen virtuellen Server zu klonen. Möchten Sie fortfahren?" +"Sie sind dabei, einen virtuellen Server zu klonen. Möchten Sie fortfahren?" #: admin/PageGeneral.py:57 msgid "General Configuration" @@ -1451,7 +1499,7 @@ msgstr "Standardkonfiguration" #: admin/PageGeneral.py:58 msgid "Configuration Quickstart" -msgstr "Schnelle Konfiguration" +msgstr "Schnelleinstieg Konfiguration" #: admin/PageGeneral.py:100 msgid "Port/Interface combination already in use." @@ -1465,7 +1513,7 @@ msgstr "IPv6" msgid "SSL/TLS back-end" msgstr "SSL/TLS Back-End" -#: admin/PageGeneral.py:197 admin/PageIndex.py:252 +#: admin/PageGeneral.py:197 admin/PageIndex.py:198 msgid "Support" msgstr "Unterstützung" @@ -1491,15 +1539,15 @@ msgstr "Information Collector" #: admin/PageGeneral.py:217 admin/PageGeneral.py:218 msgid "Upload Tracking" -msgstr "Upload Protokollierung" +msgstr "Upload-Protokollierung" #: admin/PageGeneral.py:239 admin/plugins/bind.py:92 msgid "Bind to" msgstr "" #: admin/PageGeneral.py:239 admin/PageGeneral.py:310 admin/plugins/bind.py:92 -#: admin/plugins/bind.py:155 admin/plugins/bind.py:157 -#: admin/plugins/ldap.py:48 admin/plugins/mysql.py:77 +#: admin/plugins/bind.py:155 admin/plugins/bind.py:157 admin/plugins/ldap.py:48 +#: admin/plugins/mysql.py:77 msgid "Port" msgstr "Port" @@ -1509,7 +1557,7 @@ msgstr "TLS/SSL Port" #: admin/PageGeneral.py:254 msgid "TLS/SSL support disabled" -msgstr "TLS/SSL Unterstützung ist deaktiviert" +msgstr "TLS/SSL-Unterstützung ist deaktiviert" #: admin/PageGeneral.py:279 admin/PageSource.py:398 msgid "Deletion is forbidden" @@ -1535,7 +1583,6 @@ msgid "Interface" msgstr "" #: admin/PageGeneral.py:316 -#, fuzzy msgid "Add a new listening port" msgstr "Neuen Port hinzufügen" @@ -1545,7 +1592,7 @@ msgstr "Neuen Port hinzufügen" #: admin/PageGeneral.py:332 msgid "Listening to Ports" -msgstr "" +msgstr "Portanschlüsse" #: admin/PageGeneral.py:343 msgid "Execution Permissions" @@ -1564,13 +1611,13 @@ msgstr "Gruppe" msgid "Chroot" msgstr "Chroot" -#: admin/PageGeneral.py:357 admin/PageVServer.py:479 +#: admin/PageGeneral.py:357 admin/PageVServer.py:483 msgid "Network" msgstr "Netzwerk" #: admin/PageGeneral.py:358 msgid "Ports to listen" -msgstr "" +msgstr "Ports" #: admin/PageGeneral.py:359 msgid "Permissions" @@ -1586,180 +1633,134 @@ msgstr "Standardeinstellungen" #: admin/PageHelp.py:35 msgid "Table of Contents" -msgstr "Inhaltsübersicht" +msgstr "Inhaltsverzeichnis" #: admin/PageHelp.py:172 msgid "Documentation" msgstr "Dokumentation" -#: admin/PageIndex.py:67 -msgid "You will be sent an email requesting confirmation" -msgstr "" - -#: admin/PageIndex.py:68 -msgid "Optionally provide your name" -msgstr "" - -#: admin/PageIndex.py:70 -#, python-format -msgid "" -"There are a number of Community Mailing Lists\n" -"available for you to subscribe. You can subscribe the General Discussion\n" -"mailing list from this interface. There is where most of the discussions\n" -"take place." -msgstr "" - -#: admin/PageIndex.py:77 -#, fuzzy +#: admin/PageIndex.py:58 msgid "Server is Running" -msgstr "Server läuft" +msgstr "Server in Betrieb" -#: admin/PageIndex.py:78 -#, fuzzy +#: admin/PageIndex.py:59 msgid "Server is not Running" -msgstr "Server wurde gestoppt" +msgstr "Server angehalten" -#: admin/PageIndex.py:132 +#: admin/PageIndex.py:110 msgid "Stop Server" -msgstr "Server stoppen" +msgstr "Server anhalten" -#: admin/PageIndex.py:136 +#: admin/PageIndex.py:114 msgid "Start Server" msgstr "Server starten" -#: admin/PageIndex.py:141 -#, fuzzy +#: admin/PageIndex.py:119 msgid "Hostname" -msgstr "Hostnamen" +msgstr "Hostname" -#: admin/PageIndex.py:143 +#: admin/PageIndex.py:121 msgid "Modified" msgstr "Geändert am" -#: admin/PageIndex.py:145 +#: admin/PageIndex.py:123 msgid "Not found" msgstr "Nicht gefunden" -#: admin/PageIndex.py:146 +#: admin/PageIndex.py:124 msgid "Config File" msgstr "Konfigurationsdatei" -#: admin/PageIndex.py:153 admin/plugins/server_info.py:32 +#: admin/PageIndex.py:131 admin/plugins/server_info.py:32 #: admin/plugins/server_info.py:35 msgid "Server Information" -msgstr "Server Informationen" +msgstr "Serverinformationen" -#: admin/PageIndex.py:165 +#: admin/PageIndex.py:143 msgid "Processors" -msgstr "" +msgstr "Prozessoren" -#: admin/PageIndex.py:177 +#: admin/PageIndex.py:155 msgid "Memory" -msgstr "" +msgstr "Speicher" -#: admin/PageIndex.py:211 admin/plugins/dbslayer.py:51 +#: admin/PageIndex.py:189 admin/plugins/dbslayer.py:51 msgid "Language" msgstr "Sprache" -#: admin/PageIndex.py:231 -#, fuzzy -msgid "Mailing List Subscription" -msgstr "Mailing Liste" - -#: admin/PageIndex.py:233 -msgid "Subscribe" -msgstr "Abonnieren" - -#: admin/PageIndex.py:236 -msgid "Your email address" -msgstr "Ihre E-Mail-Adresse" - -#: admin/PageIndex.py:237 -msgid "Your name" -msgstr "Dein Name" - -#: admin/PageIndex.py:256 +#: admin/PageIndex.py:202 msgid "Getting started" -msgstr "" +msgstr "Erste Schritte" -#: admin/PageIndex.py:260 -msgid "Subscribe to mailing lists" -msgstr "" +#: admin/PageIndex.py:206 +msgid "Visit the mailing list" +msgstr "Besuch der Mailingliste" -#: admin/PageIndex.py:268 -#, fuzzy +#: admin/PageIndex.py:210 msgid "Report a bug" -msgstr "Berichten" +msgstr "Fehler melden" -#: admin/PageIndex.py:272 -#, fuzzy -msgid "Purchase commercial support" -msgstr "Kommerzieller Support" - -#: admin/PageIndex.py:276 admin/PageIndex.py:280 +#: admin/PageIndex.py:214 admin/PageIndex.py:218 msgid "About Cherokee" msgstr "Über Cherokee" -#: admin/PageIndex.py:289 +#: admin/PageIndex.py:227 msgid "Join the Cherokee Community:" msgstr "" -#: admin/PageIndex.py:292 +#: admin/PageIndex.py:230 msgid "Visit the Cherokee Project Website" msgstr "" -#: admin/PageIndex.py:293 +#: admin/PageIndex.py:231 msgid "Follow us on Twitter" msgstr "" -#: admin/PageIndex.py:294 +#: admin/PageIndex.py:232 msgid "Join us on Facebook" msgstr "" -#: admin/PageIndex.py:295 +#: admin/PageIndex.py:233 msgid "Join us on Google+" msgstr "" -#: admin/PageIndex.py:296 +#: admin/PageIndex.py:234 msgid "Fork us on Github" msgstr "" -#: admin/PageIndex.py:297 +#: admin/PageIndex.py:235 msgid "Become a member of Cherokee group on LinkedIn" msgstr "" -#: admin/PageIndex.py:298 +#: admin/PageIndex.py:236 msgid "Chat with us at irc.freenode.net" msgstr "" -#: admin/PageIndex.py:307 -#, fuzzy +#: admin/PageIndex.py:245 msgid "Shutdown Cherokee-admin" -msgstr "Willkommen bei Cherokee-Admin" +msgstr "Cherokee-Admin herunterfahren" -#: admin/PageIndex.py:309 +#: admin/PageIndex.py:247 msgid "Shut down" msgstr "" -#: admin/PageIndex.py:310 +#: admin/PageIndex.py:248 msgid "You are about to shut down this instance of Cherokee-admin" msgstr "" -#: admin/PageIndex.py:311 +#: admin/PageIndex.py:249 msgid "Are you sure you want to proceed?" msgstr "" -#: admin/PageIndex.py:314 +#: admin/PageIndex.py:252 msgid "Cherokee-admin has been shut down" msgstr "" -#: admin/PageIndex.py:316 -#, fuzzy +#: admin/PageIndex.py:254 msgid "Shut down Cherokee-Admin" -msgstr "Willkommen bei Cherokee-Admin" +msgstr "Cherokee-Admin herunterfahren" -#: admin/PageIndex.py:329 admin/PageIndex.py:350 +#: admin/PageIndex.py:267 admin/PageIndex.py:288 msgid "Welcome to Cherokee Admin" msgstr "Willkommen bei Cherokee-Admin" @@ -1768,24 +1769,23 @@ msgid "Index" msgstr "" #: admin/PageNewConfig.py:40 -#, fuzzy msgid "Loading new configuration file.." -msgstr "Erzeuge eine neue Konfigurationsdatei" +msgstr "Erzeuge eine neue Konfigurationsdatei..." #: admin/PageNewConfig.py:41 -#, fuzzy, python-format +#, python-format msgid "The configuration file %(conf_file)s was not found." -msgstr "Konfigurationsdatei konnte nicht verändert werden" +msgstr "Konfigurationsdatei %(conf_file)s nicht gefunden." #: admin/PageNewConfig.py:42 -#, fuzzy msgid "" "You can create a new configuration file and proceed to customize the web " "server." -msgstr "Zeige Informationen" +msgstr "" +"Erstellen Sie eine neue Konfigurationsdatei und setzen Sie die Einrichtung " +"des Web-Servers fort" #: admin/PageNewConfig.py:167 -#, fuzzy msgid "Create a new configuration file:" msgstr "Erzeuge eine neue Konfigurationsdatei" @@ -1807,7 +1807,7 @@ msgstr "" #: admin/PageNewConfig.py:180 msgid "Server Development" -msgstr "Server Entwicklung" +msgstr "Server-Entwicklung" #: admin/PageNewConfig.py:181 msgid "No standard port, No log files, No PID file, etc." @@ -1844,29 +1844,25 @@ msgstr "Manuell" msgid "Manual configuration" msgstr "Manuelle Konfiguration" -#: admin/PageRule.py:249 admin/PageVServer.py:158 +#: admin/PageRule.py:249 admin/PageVServer.py:162 msgid "Final" -msgstr "" +msgstr "Stop" #: admin/PageRule.py:250 -#, fuzzy msgid "Non Final" -msgstr "Icon Datei" +msgstr "Weiter" #: admin/PageRule.py:274 admin/PageRule.py:287 -#, fuzzy msgid "Add Behavior Rule" -msgstr "Verhaltensrole hinzufügen" +msgstr "Verhaltensregel hinzufügen" #: admin/PageRule.py:281 -#, fuzzy msgid "Configuration Assistant" msgstr "Konfigurationsassistent" #: admin/PageRule.py:301 -#, fuzzy msgid "Clone Behavior Rule" -msgstr "Dupliziere virtuellen Server" +msgstr "Dupliziere Verhaltensregel" #: admin/PageRule.py:303 admin/PageSource.py:443 admin/PageVServers.py:282 msgid "Clone" @@ -1876,14 +1872,13 @@ msgstr "Duplizieren" msgid "Clone Selected Behavior Rule" msgstr "" -#: admin/PageRule.py:314 admin/PageVServer.py:718 +#: admin/PageRule.py:314 admin/PageVServer.py:727 msgid "Behavior" msgstr "Verhalten" #: admin/PageRule.py:334 -#, fuzzy msgid "Rule Filtering" -msgstr "Liste der Regeln" +msgstr "Regeln filtern" #: admin/PageSource.py:45 msgid "" @@ -1967,52 +1962,44 @@ msgid "" msgstr "" #: admin/PageSource.py:61 -#, fuzzy msgid "Name of the environment variable" -msgstr "Name des virtuellen Servers" +msgstr "Name der Umgebungsvariable" #: admin/PageSource.py:62 -#, fuzzy msgid "Value of the environment variable" msgstr "Neue Umgebungsvariable hinzufügen" #: admin/PageSource.py:63 -#, fuzzy msgid "The selected Information Source is about to be cloned." -msgstr "Zeige Informationen" +msgstr "Die ausgewählte Informationsquelle wird dupliziert." #: admin/PageSource.py:189 admin/PageSource.py:217 msgid "Variable" msgstr "Variable" #: admin/PageSource.py:191 -#, fuzzy msgid "Environment Variables" msgstr "Umgebungsvariablen" #: admin/PageSource.py:224 -#, fuzzy msgid "Add new Environment variable" msgstr "Neue Umgebungsvariable hinzufügen" #: admin/PageSource.py:233 -#, fuzzy msgid "Add new variable" -msgstr "Neue Regel hinzufügen" +msgstr "Neue Variable hinzufügen" #: admin/PageSource.py:250 -#, fuzzy msgid "Source Usage" -msgstr "Quellen" +msgstr "Quellennutzung" -#: admin/PageSource.py:253 admin/PageVServer.py:723 +#: admin/PageSource.py:253 admin/PageVServer.py:732 msgid "Virtual Server" msgstr "Virtueller Server" #: admin/PageSource.py:279 -#, fuzzy msgid "Source" -msgstr "Quellen" +msgstr "Quelle" #: admin/PageSource.py:286 admin/PageSource.py:330 #: admin/wizards/rtorrent.py:100 @@ -2036,42 +2023,37 @@ msgid "Execute as Group" msgstr "Ausführen als Gruppe" #: admin/PageSource.py:295 -#, fuzzy msgid "Chroot Directory" -msgstr "Projekt Ordner" +msgstr "Projektverzeichnis" #: admin/PageSource.py:296 msgid "Inherit Environment" msgstr "" #: admin/PageSource.py:427 admin/PageSource.py:432 -#, fuzzy msgid "Add New Information Source" -msgstr "Zeige Informationen" +msgstr "Neue Informationsquelle hinzufügen" #: admin/PageSource.py:441 -#, fuzzy msgid "Clone Information Source" -msgstr "Zeige Informationen" +msgstr "Informationsquelle duplizieren" #: admin/PageSource.py:446 -#, fuzzy msgid "Clone Selected Information Source" -msgstr "Zeige Informationen" +msgstr "Ausgewählte Informationsquelle duplizieren" #: admin/PageSource.py:466 -#, fuzzy msgid "Sources Filtering" -msgstr "Ordner" +msgstr "Quellen filtern" -#: admin/PageSources.py:35 admin/PageVServer.py:141 admin/PageVServers.py:48 +#: admin/PageSources.py:35 admin/PageVServer.py:145 admin/PageVServers.py:48 #: admin/PageVServers.py:294 msgid "Virtual Servers" msgstr "Virtuelle Server" #: admin/PageStatus.py:66 msgid "Server Wide Monitoring" -msgstr "Server Überwachung" +msgstr "Server-Überwachung" #: admin/PageStatus.py:71 msgid "Virtual Server Monitoring" @@ -2082,646 +2064,627 @@ msgid "System wide status" msgstr "Systemweiter Status" #: admin/PageStatus.py:119 admin/PageVServers.py:310 -#, fuzzy msgid "Virtual Server Filtering" -msgstr "Virtueller Server" +msgstr "Virtuellen Server filtern" #: admin/PageVServer.py:44 +msgid "Reference" +msgstr "Referenz" + +#: admin/PageVServer.py:47 msgid "Nickname for the virtual server." -msgstr "Name des virtuellen Servers" +msgstr "Kurzname des virtuellen Servers" -#: admin/PageVServer.py:45 +#: admin/PageVServer.py:48 msgid "" "This directive points to the PEM-encoded Certificate file for the server " "(Full path to the file)" msgstr "" -#: admin/PageVServer.py:46 +#: admin/PageVServer.py:49 msgid "PEM-encoded Private Key file for the server (Full path to the file)" msgstr "" -#: admin/PageVServer.py:47 +#: admin/PageVServer.py:50 msgid "" "File containing the trusted CA certificates, utilized for checking the " "client certificates (Full path to the file)" msgstr "" -#: admin/PageVServer.py:48 -msgid "" -"Ciphers that TLS/SSL is allowed to use. Reference. (Default enables " -"Forward Secrecy)." -msgstr "" +#: admin/PageVServer.py:51 +msgid "Ciphers that TLSv1.2 and below is allowed to use." +msgstr "Verschlüsselungsverfahren für TLSv1.2 and frühere Protokolle." -#: admin/PageVServer.py:49 +#: admin/PageVServer.py:52 +msgid "Ciphersuites that TLSv1.3 is allowed to use." +msgstr "Standardisierte Sammlung an Verschlüsselungsverfahren für TLSv1.3." + +#: admin/PageVServer.py:53 msgid "" "The cipher sequence that is specified by the server should have preference " "over the client preference. (Default: True)." msgstr "" +"Die vom Server vorgeschlagenen Verschlüsselungsverfahren haben Vorrang " +"(Standard: True)" -#: admin/PageVServer.py:50 +#: admin/PageVServer.py:54 msgid "" "Explicitly enable or disable serverside compression support. (Default: " "Disabled)." msgstr "" -#: admin/PageVServer.py:51 +#: admin/PageVServer.py:55 msgid "" "Explicitely sets the Diffie-Hellman parameters length. (Default: Let openssl " "choose)." msgstr "" -#: admin/PageVServer.py:52 +#: admin/PageVServer.py:56 msgid "Skip, Tolerate, Accept or Require client certificates." -msgstr "" +msgstr "Client-Zertifikate Überspringen, Tolerieren, Annehmen oder Fordern" -#: admin/PageVServer.py:53 +#: admin/PageVServer.py:57 msgid "" "Limit up to which depth certificates in a chain are used during the " "verification procedure (Default: 1)" msgstr "" -#: admin/PageVServer.py:54 +#: admin/PageVServer.py:58 msgid "Allows the selection of how to generate the error responses." msgstr "" -#: admin/PageVServer.py:55 +#: admin/PageVServer.py:59 msgid "" "Directory inside the user home directory to use as root web directory. " "Disabled if empty." msgstr "" -#: admin/PageVServer.py:56 +#: admin/PageVServer.py:60 msgid "The personal web support is currently turned on." msgstr "" -#: admin/PageVServer.py:57 +#: admin/PageVServer.py:61 msgid "Adds a new domain name. Wildcards are allowed in the domain name." msgstr "" -"Fügt einen neuen Domainnamen hinzu. Platzhalter sind erlaubt im Domainnamen." +"Fügt einen neuen Domänenname hinzu. Platzhalter im Domänennamen sind möglich." -#: admin/PageVServer.py:58 +#: admin/PageVServer.py:62 msgid "Virtual Server root directory." msgstr "Hauptverzeichnis des virtuellen Servers" -#: admin/PageVServer.py:59 +#: admin/PageVServer.py:63 msgid "" "List of name files that will be used as directory index. Eg: index.html," "index.php." msgstr "" -#: admin/PageVServer.py:60 +#: admin/PageVServer.py:64 msgid "The maximum size, in bytes, for POST uploads. (Default: unlimited)" msgstr "" -#: admin/PageVServer.py:61 +#: admin/PageVServer.py:65 msgid "Whether this virtual server is allowed to use Keep-alive (Default: yes)" msgstr "" -#: admin/PageVServer.py:62 +#: admin/PageVServer.py:66 msgid "The Logging is currently enabled." -msgstr "Die Protokollierung ist zur Zeit aktiviert." +msgstr "Die Protokollierung ist momentan aktiviert." -#: admin/PageVServer.py:63 +#: admin/PageVServer.py:67 msgid "Logging format. Apache compatible is highly recommended here." -msgstr "Protokollierungsformat. Apache Kompatibilität ist hier sehr empfohlen." +msgstr "" +"Protokollierungsformat. Apache-kompatibles Format wird dringend empfohlen." -#: admin/PageVServer.py:64 +#: admin/PageVServer.py:68 msgid "Back-end used to store the log accesses." -msgstr "Back-End, welches verwendet wird um Zugriffe zu protokollieren." +msgstr "Back-End für die Zugriffsprotokollierung." -#: admin/PageVServer.py:65 +#: admin/PageVServer.py:69 msgid "Back-end used to store the log errors." -msgstr "Back-End, welches verwendet wird um Fehler zu protokolllieren." +msgstr "Back-End für die Fehlerprotokollierung." -#: admin/PageVServer.py:66 +#: admin/PageVServer.py:70 msgid "Back-end used to store the log accesses and errors." -msgstr "" -"Back-End, welches verwendet wird um Zugriffe und Fehler zu protokollieren." +msgstr "Back-End für die Zugriffs- und Fehlerprotokollierung." -#: admin/PageVServer.py:67 +#: admin/PageVServer.py:71 msgid "Full path to the file where the information will be saved." msgstr "" -"Kompletter Pfad zur Datei, in welcher die Informationen gespeichert werden." +"Vollständiger Pfad zur Datei, in der die Informationen gespeichert werden." -#: admin/PageVServer.py:68 +#: admin/PageVServer.py:72 msgid "Path to the executable that will be invoked on each log entry." msgstr "" -"Pfad zur ausführbaren Datei, welche bei jeden Protokoll-Eintrag aufgerufen " -"wird." +"Pfad zur ausführbaren Datei, die für jeden Protokoll-Eintrag aufgerufen wird." -#: admin/PageVServer.py:69 +#: admin/PageVServer.py:73 msgid "" "Whether the logger should read and use the X-Real-IP and X-Forwarded-For " "headers (send by reverse proxies)." msgstr "" -#: admin/PageVServer.py:71 +#: admin/PageVServer.py:75 msgid "" "List of IP addresses and subnets that are allowed to send X-Real-IP and X-" "Forwarded-For headers." msgstr "" -#: admin/PageVServer.py:72 +#: admin/PageVServer.py:76 msgid "" "How to support the \"Advanced Virtual Hosting\" mechanism. (Default: off)" msgstr "" -#: admin/PageVServer.py:73 +#: admin/PageVServer.py:77 msgid "The following variables are accepted: " msgstr "" -#: admin/PageVServer.py:74 +#: admin/PageVServer.py:78 msgid "Allows the selection of domain matching method." msgstr "" -#: admin/PageVServer.py:75 +#: admin/PageVServer.py:79 msgid "" "Whether or not it should collected statistics about the traffic of this " "virtual server." msgstr "" -#: admin/PageVServer.py:76 +#: admin/PageVServer.py:80 msgid "Time standard to use in the log file entries." -msgstr "Die Zeit, welche für die Protokoll-Einträge benutzt wird." +msgstr "Zeitzone für den Zeitstempel in Protokolleinträgen." -#: admin/PageVServer.py:77 +#: admin/PageVServer.py:81 msgid "" "Remember that only \"File Exists\" rules and \"List & Send\" handlers use " "the Directory Indexes setting." msgstr "" -#: admin/PageVServer.py:78 +#: admin/PageVServer.py:82 msgid "" "Use this nickname as an additional host name for this virtual server " "(Default: yes)" msgstr "" -#: admin/PageVServer.py:79 +#: admin/PageVServer.py:83 msgid "Enforce HTTPS by using the HTTP Strict Transport Security." msgstr "" -#: admin/PageVServer.py:80 +#: admin/PageVServer.py:84 msgid "" "How long the client's browser should remember the forced HTTPS (in seconds)." msgstr "" -#: admin/PageVServer.py:81 +#: admin/PageVServer.py:85 msgid "" "Should HSTS be used in all the subdomains of this virtual server (Default: " "yes)." msgstr "" -#: admin/PageVServer.py:83 +#: admin/PageVServer.py:87 msgid "

The 'default' virtual server matches all the domain names.

" msgstr "" -#: admin/PageVServer.py:86 -#, fuzzy +#: admin/PageVServer.py:90 msgid "Remote IP address" -msgstr "LDAP Server IP Adresse" +msgstr "Remote-IP-Adresse" -#: admin/PageVServer.py:87 -#, fuzzy +#: admin/PageVServer.py:91 msgid "Local IP address" -msgstr "Ihre E-Mail-Adresse" +msgstr "Lokale IP-Adresse" -#: admin/PageVServer.py:88 -#, fuzzy +#: admin/PageVServer.py:92 msgid "Request Protocol" -msgstr "Anfrage" +msgstr "Anfrageprotokollierung" -#: admin/PageVServer.py:89 +#: admin/PageVServer.py:93 msgid "Transport type: http or https" msgstr "" -#: admin/PageVServer.py:90 +#: admin/PageVServer.py:94 msgid "Port of the server serving the request" msgstr "" -#: admin/PageVServer.py:91 +#: admin/PageVServer.py:95 msgid "The query string, if exists" msgstr "" -#: admin/PageVServer.py:92 +#: admin/PageVServer.py:96 msgid "First line of HTTP request" msgstr "" -#: admin/PageVServer.py:93 +#: admin/PageVServer.py:97 msgid "Response status code" msgstr "" -#: admin/PageVServer.py:94 +#: admin/PageVServer.py:98 msgid "Time: in common log format time format" msgstr "" -#: admin/PageVServer.py:95 +#: admin/PageVServer.py:99 msgid "Time: seconds since Epoch" msgstr "" -#: admin/PageVServer.py:96 +#: admin/PageVServer.py:100 msgid "Time: milliseconds since Epoch" msgstr "" -#: admin/PageVServer.py:97 -#, fuzzy +#: admin/PageVServer.py:101 msgid "Remote user (authentication)" -msgstr "Authentifizierung" +msgstr "Authentifizierung (Remote User)" -#: admin/PageVServer.py:98 +#: admin/PageVServer.py:102 msgid "URL path requested" msgstr "" -#: admin/PageVServer.py:99 +#: admin/PageVServer.py:103 msgid "URL path requested before any rewrite" msgstr "" -#: admin/PageVServer.py:100 -#, fuzzy +#: admin/PageVServer.py:104 msgid "Virtual Server nick name" -msgstr "Virtueller Server Name" +msgstr "Kurzname Virtueller Server" -#: admin/PageVServer.py:101 +#: admin/PageVServer.py:105 msgid "Requested host (Host: header)" msgstr "" -#: admin/PageVServer.py:102 +#: admin/PageVServer.py:106 msgid "Size of the response in bytes" msgstr "" -#: admin/PageVServer.py:103 +#: admin/PageVServer.py:107 msgid "'Host:' header of the request" msgstr "" -#: admin/PageVServer.py:104 +#: admin/PageVServer.py:108 msgid "'Referrer:' header of the request" msgstr "" -#: admin/PageVServer.py:105 +#: admin/PageVServer.py:109 msgid "'User-Agent:' header of the request" msgstr "" -#: admin/PageVServer.py:106 +#: admin/PageVServer.py:110 msgid "'Cookie:' header of the request" msgstr "" -#: admin/PageVServer.py:142 +#: admin/PageVServer.py:146 msgid "Loggers" msgstr "" -#: admin/PageVServer.py:143 +#: admin/PageVServer.py:147 msgid "SSL cookbook" msgstr "" -#: admin/PageVServer.py:147 admin/PageVServer.py:184 +#: admin/PageVServer.py:151 admin/PageVServer.py:188 msgid "Match" msgstr "" -#: admin/PageVServer.py:147 -#, fuzzy +#: admin/PageVServer.py:151 msgid "Rule Match" -msgstr "Pfad" +msgstr "Regelübereinstimmung" -#: admin/PageVServer.py:148 +#: admin/PageVServer.py:152 msgid "Assigned Handler" msgstr "" -#: admin/PageVServer.py:149 +#: admin/PageVServer.py:153 msgid "Auth" msgstr "" -#: admin/PageVServer.py:150 -#, fuzzy +#: admin/PageVServer.py:154 msgid "Custom Document Root" msgstr "Benuterdefiniertes Hauptverzeichnis" -#: admin/PageVServer.py:150 +#: admin/PageVServer.py:154 msgid "Root" msgstr "Hauptverzeichnis" -#: admin/PageVServer.py:151 +#: admin/PageVServer.py:155 msgid "Only HTTPS" msgstr "Nur HTTPS" -#: admin/PageVServer.py:151 -#, fuzzy +#: admin/PageVServer.py:155 msgid "Secure" msgstr "Sicher" -#: admin/PageVServer.py:152 +#: admin/PageVServer.py:156 msgid "Enc" msgstr "" -#: admin/PageVServer.py:152 +#: admin/PageVServer.py:156 msgid "Encoders" msgstr "Encoder" -#: admin/PageVServer.py:153 -#, fuzzy +#: admin/PageVServer.py:157 msgid "Cacheable" -msgstr "Apache kompatibel" +msgstr "Im Puffer ablegbar" -#: admin/PageVServer.py:154 +#: admin/PageVServer.py:158 msgid "Exp" msgstr "" -#: admin/PageVServer.py:155 -#, fuzzy +#: admin/PageVServer.py:159 msgid "Connection Timeout" msgstr "Verbindungstimeout" -#: admin/PageVServer.py:156 -#, fuzzy +#: admin/PageVServer.py:160 msgid "Shaping" -msgstr "Change" +msgstr "Shaping" -#: admin/PageVServer.py:157 -#, fuzzy +#: admin/PageVServer.py:161 msgid "Log" msgstr "Protokoll" -#: admin/PageVServer.py:157 -#, fuzzy +#: admin/PageVServer.py:161 msgid "Logging Enabled" msgstr "Protokollierung aktiviert" -#: admin/PageVServer.py:158 -#, fuzzy +#: admin/PageVServer.py:162 msgid "Rule is Final" -msgstr "Regel ist final" +msgstr "Regel ist abschließend" -#: admin/PageVServer.py:184 -#, fuzzy +#: admin/PageVServer.py:188 msgid "Match nickname" -msgstr "Name des Servers" +msgstr "Abgleich Kurzname" -#: admin/PageVServer.py:188 admin/PageVServer.py:717 -#, fuzzy +#: admin/PageVServer.py:192 admin/PageVServer.py:726 msgid "Host Match" -msgstr "Hostnamen" +msgstr "Abgleich Host" -#: admin/PageVServer.py:218 admin/PageVServer.py:234 admin/PageVServer.py:258 -#: admin/PageVServer.py:485 admin/PageVServer.py:519 -#: admin/plugins/method.py:99 admin/plugins/method.py:109 +#: admin/PageVServer.py:222 admin/PageVServer.py:238 admin/PageVServer.py:262 +#: admin/PageVServer.py:489 admin/PageVServer.py:523 admin/plugins/method.py:99 +#: admin/plugins/method.py:109 msgid "Method" msgstr "Methode" -#: admin/PageVServer.py:226 admin/PageVServer.py:242 +#: admin/PageVServer.py:230 admin/PageVServer.py:246 msgid "Remove criteria" msgstr "" -#: admin/PageVServer.py:260 -#, fuzzy +#: admin/PageVServer.py:264 msgid "How to match this Virtual Server" -msgstr "Neuer virtueller Server" +msgstr "Abgleich des virtuellen Servers" -#: admin/PageVServer.py:267 +#: admin/PageVServer.py:271 msgid "Add an additional matching criteria" msgstr "" -#: admin/PageVServer.py:358 -#, fuzzy +#: admin/PageVServer.py:362 msgid "Behavior Rules" msgstr "Verhaltensregeln" -#: admin/PageVServer.py:367 -#, fuzzy +#: admin/PageVServer.py:371 msgid "Rule Management" -msgstr "Verhaltensmanagement" +msgstr "Regelverwaltung" -#: admin/PageVServer.py:393 -#, fuzzy +#: admin/PageVServer.py:397 msgid "Only accept Secure Connections" msgstr "Erlaube nur sichere Verbindungen" -#: admin/PageVServer.py:398 -#, fuzzy +#: admin/PageVServer.py:402 msgid "Encoding enabled" msgstr "Verschlüsselung aktiviert" -#: admin/PageVServer.py:404 +#: admin/PageVServer.py:408 msgid "no" msgstr "nein" -#: admin/PageVServer.py:415 +#: admin/PageVServer.py:419 msgid " seconds" -msgstr "Sekunden" +msgstr " Sekunden" -#: admin/PageVServer.py:420 +#: admin/PageVServer.py:424 msgid " bytes per second" msgstr "Bytes pro Sekunde" -#: admin/PageVServer.py:425 +#: admin/PageVServer.py:429 msgid "Logging enabled for this rule" msgstr "Protokollierung für diese Regel aktiviert" -#: admin/PageVServer.py:430 +#: admin/PageVServer.py:434 msgid "Prevents further rule evaluation" msgstr "" -#: admin/PageVServer.py:435 +#: admin/PageVServer.py:439 msgid "Content can be cached" msgstr "" -#: admin/PageVServer.py:438 +#: admin/PageVServer.py:442 msgid "Forbids content caching" msgstr "" -#: admin/PageVServer.py:455 +#: admin/PageVServer.py:459 msgid "Virtual Server nickname" -msgstr "Virtueller Server Name" +msgstr "Kurzname Virtueller Server" -#: admin/PageVServer.py:457 +#: admin/PageVServer.py:461 msgid "Server ID" -msgstr "Server ID" +msgstr "Server-ID" -#: admin/PageVServer.py:463 +#: admin/PageVServer.py:467 msgid "Directory Indexes" msgstr "" -#: admin/PageVServer.py:465 admin/plugins/fullpath.py:119 +#: admin/PageVServer.py:469 admin/plugins/fullpath.py:119 msgid "Paths" msgstr "Pfade" -#: admin/PageVServer.py:471 +#: admin/PageVServer.py:475 msgid "Neither are in use at the moment." msgstr "" -#: admin/PageVServer.py:476 +#: admin/PageVServer.py:480 msgid "Keep-alive" msgstr "" -#: admin/PageVServer.py:477 +#: admin/PageVServer.py:481 msgid "Max Upload Size" -msgstr "Maximale Upload Größe" +msgstr "Maximale Upload-Größe" -#: admin/PageVServer.py:487 admin/plugins/evhost.py:33 +#: admin/PageVServer.py:491 admin/plugins/evhost.py:33 msgid "Advanced Virtual Hosting" msgstr "Erweitertes virtuelles Hosting" -#: admin/PageVServer.py:521 +#: admin/PageVServer.py:525 msgid "Error Handling hook" msgstr "" -#: admin/PageVServer.py:532 admin/consts.py:233 admin/consts.py:250 +#: admin/PageVServer.py:536 admin/consts.py:232 admin/consts.py:249 msgid "Disabled" msgstr "Deaktiviert" -#: admin/PageVServer.py:536 +#: admin/PageVServer.py:540 msgid "Write errors to" msgstr "Schreibe Fehler in" -#: admin/PageVServer.py:540 admin/PageVServer.py:579 +#: admin/PageVServer.py:544 admin/PageVServer.py:583 msgid "Filename" msgstr "Dateiname" -#: admin/PageVServer.py:542 admin/PageVServer.py:582 +#: admin/PageVServer.py:546 admin/PageVServer.py:586 msgid "Command" msgstr "Befehl" -#: admin/PageVServer.py:548 +#: admin/PageVServer.py:552 msgid "Error Logging" msgstr "Fehler Protokollierung" -#: admin/PageVServer.py:559 +#: admin/PageVServer.py:563 msgid "Format" msgstr "Format" -#: admin/PageVServer.py:566 +#: admin/PageVServer.py:570 msgid "Write accesses to" msgstr "Schreibe Zugriffe in" -# eingedeutscht Kopf; dann für Informatiker unverständlich? -#: admin/PageVServer.py:589 -#, fuzzy +#: admin/PageVServer.py:593 msgid "Hide" -msgstr "Header" +msgstr "Ausblenden" -#: admin/PageVServer.py:589 -#, fuzzy +#: admin/PageVServer.py:593 msgid "Show macros" msgstr "Zeige die Gruppe an" -#: admin/PageVServer.py:598 +#: admin/PageVServer.py:602 msgid "Template: " msgstr "" -#: admin/PageVServer.py:600 +#: admin/PageVServer.py:604 msgid "Access Logging" msgstr "Zugriffs Protokollierung" -#: admin/PageVServer.py:606 +#: admin/PageVServer.py:610 msgid "Time standard" msgstr "Standard Zeit" -#: admin/PageVServer.py:607 admin/PageVServer.py:687 admin/consts.py:228 +#: admin/PageVServer.py:611 admin/PageVServer.py:696 admin/consts.py:227 msgid "Accept" msgstr "Annehmen" -#: admin/PageVServer.py:607 +#: admin/PageVServer.py:611 msgid "Accept Forwarded IPs" msgstr "" -#: admin/PageVServer.py:610 -#, fuzzy +#: admin/PageVServer.py:614 msgid "Do not check" msgstr "Nicht prüfen" -#: admin/PageVServer.py:619 +#: admin/PageVServer.py:623 msgid "Logging Options" msgstr "Protokollierungsoptionen" -#: admin/PageVServer.py:655 admin/wizards/ssl_test.py:136 +#: admin/PageVServer.py:659 admin/wizards/ssl_test.py:136 msgid "Certificate" msgstr "Zertifikat" -#: admin/PageVServer.py:656 +#: admin/PageVServer.py:660 msgid "Certificate key" msgstr "Zertifikat-Schlüssel" -#: admin/PageVServer.py:661 +#: admin/PageVServer.py:665 msgid "Required SSL/TLS Values" -msgstr "Benötigte SSL/TLS Werte" +msgstr "SSL/TLS-Einstellungen" + +#: admin/PageVServer.py:674 +msgid "Ciphersuites" +msgstr "Verschlüsselungssuite" -#: admin/PageVServer.py:666 +#: admin/PageVServer.py:675 msgid "Ciphers" -msgstr "" +msgstr "Verschlüsselungsverfahren" -#: admin/PageVServer.py:667 -#, fuzzy +#: admin/PageVServer.py:676 msgid "Prefer" -msgstr "Prefix" +msgstr "Vorziehen" -#: admin/PageVServer.py:667 -#, fuzzy +#: admin/PageVServer.py:676 msgid "Server Preference" -msgstr "Server Datenverkehr" +msgstr "Verschlüsselungsverf. Server" -#: admin/PageVServer.py:668 +#: admin/PageVServer.py:677 msgid "Client Certs. Request" msgstr "" -#: admin/PageVServer.py:669 +#: admin/PageVServer.py:678 msgid "Compression" msgstr "" -#: admin/PageVServer.py:670 +#: admin/PageVServer.py:679 msgid "DH length" msgstr "" -#: admin/PageVServer.py:673 +#: admin/PageVServer.py:682 msgid "CA List" msgstr "CA Liste" -#: admin/PageVServer.py:676 +#: admin/PageVServer.py:685 msgid "Verify Depth" msgstr "" -#: admin/PageVServer.py:682 +#: admin/PageVServer.py:691 msgid "Advanced Options" msgstr "Erweiterte Optionen" -#: admin/PageVServer.py:687 -#, fuzzy +#: admin/PageVServer.py:696 msgid "Enable HSTS" msgstr "Aktivieren" -#: admin/PageVServer.py:690 +#: admin/PageVServer.py:699 msgid "HSTS Max-Age" msgstr "" -#: admin/PageVServer.py:690 +#: admin/PageVServer.py:699 msgid "One year" msgstr "" -#: admin/PageVServer.py:691 -#, fuzzy +#: admin/PageVServer.py:700 msgid "Include Subdomains" msgstr "Veröffentliche deine Domains" -#: admin/PageVServer.py:691 +#: admin/PageVServer.py:700 msgid "Include all" msgstr "" -#: admin/PageVServer.py:697 +#: admin/PageVServer.py:706 msgid "HTTP Strict Transport Security (HSTS)" msgstr "" -#: admin/PageVServer.py:716 +#: admin/PageVServer.py:725 msgid "Basics" -msgstr "Grundlagen" +msgstr "Allgemein" -#: admin/PageVServer.py:719 +#: admin/PageVServer.py:728 msgid "Error Handler" -msgstr "Fehlerhandhabung" +msgstr "Fehler" #: admin/PageVServers.py:50 -#, fuzzy, python-format +#, python-format msgid "" "

You are about to delete the %(nick_esc)s Virtual Server.

Are " "you sure you want to proceed?

" msgstr "" -"Sie sind dabei einen virtuellen Server zu klonen. Möchten Sie fortfahren?" +"

Sie sind dabei, den virtuellen Server %(nick_esc)s zu löschen.

Möchten Sie fortfahren?

" #: admin/PageVServers.py:51 msgid "You are about to clone a Virtual Server. Would you like to proceed?" @@ -2789,16 +2752,14 @@ msgid "Chroot folder is not an absolute path" msgstr "" #: admin/SavingChecks.py:73 -#, fuzzy msgid "Chroot folder does not exist" -msgstr "Pfad existiert nicht" +msgstr "Chroot-Pfad existiert nicht" #: admin/SavingChecks.py:77 msgid "Interpreter does not exist inside chroot" msgstr "" #: admin/SavingChecks.py:81 -#, fuzzy msgid "Interpreter does not exist" msgstr "Pfad existiert nicht" @@ -2904,31 +2865,30 @@ msgstr "" #: admin/SystemStatsWidgets.py:134 #, python-format msgid "%s Logical Processors" -msgstr "" +msgstr "%s logische Prozessoren" #: admin/SystemStatsWidgets.py:136 -#, fuzzy, python-format +#, python-format msgid "%s Logical Processor" -msgstr "Ihre E-Mail-Adresse" +msgstr "%s logischer Prozessor" #: admin/SystemStatsWidgets.py:140 #, python-format msgid "%s Cores" -msgstr "" +msgstr "%s CPU-Kerne" #: admin/SystemStatsWidgets.py:142 #, python-format msgid "%s Core" -msgstr "" +msgstr "%s CPU-Kern" #: admin/SystemStatsWidgets.py:147 msgid "Unknown Processor" msgstr "Unbekannter Prozessor" #: admin/SystemStatsWidgets.py:176 -#, fuzzy msgid "Unknown RAM" -msgstr "Unbekannt" +msgstr "Unbekannter Speicher" #: admin/Wizard.py:43 msgid "Check the cookbook for more details." @@ -2939,7 +2899,6 @@ msgid "Use the same logging configuration as one of the other virtual servers." msgstr "" #: admin/Wizard.py:212 -#, fuzzy msgid "Do not configure" msgstr "Nicht konfigurieren" @@ -2961,11 +2920,11 @@ msgstr "Französisch" #: admin/consts.py:30 msgid "Italian" -msgstr "" +msgstr "Italienisch" #: admin/consts.py:31 msgid "Japanese" -msgstr "" +msgstr "Japanisch" #: admin/consts.py:32 msgid "Dutch" @@ -2981,7 +2940,7 @@ msgstr "Schwedisch" #: admin/consts.py:35 msgid "Brazilian Portuguese" -msgstr "Brasilianisches Portugiesisch" +msgstr "Portugiesisch (Bras.)" #: admin/consts.py:36 msgid "Chinese Simplified" @@ -3015,8 +2974,8 @@ msgstr "Produkt + Plattform" msgid "Full Server string" msgstr "" -#: admin/consts.py:51 admin/consts.py:80 admin/consts.py:97 -#: admin/consts.py:111 admin/plugins/mysql.py:45 +#: admin/consts.py:51 admin/consts.py:80 admin/consts.py:97 admin/consts.py:111 +#: admin/plugins/mysql.py:45 msgid "None" msgstr "Nichts" @@ -3086,9 +3045,8 @@ msgid "HTTP Error" msgstr "HTTP Fehler" #: admin/consts.py:68 admin/plugins/admin.py:29 -#, fuzzy msgid "Remote Administration" -msgstr "Entfernte Administration" +msgstr "Entfernte Verwaltung" #: admin/consts.py:69 admin/wizards/hotlinking.py:88 msgid "1x1 Transparent GIF" @@ -3223,196 +3181,194 @@ msgstr "Dynamisch" msgid "Automatic" msgstr "Automatisch" -#: admin/consts.py:145 admin/plugins/error_redir.py:35 +#: admin/consts.py:144 admin/plugins/error_redir.py:35 msgid "External" msgstr "Extern" -#: admin/consts.py:146 admin/plugins/error_redir.py:34 +#: admin/consts.py:145 admin/plugins/error_redir.py:34 msgid "Internal" msgstr "Intern" -#: admin/consts.py:189 admin/plugins/header.py:116 admin/plugins/proxy.py:94 +#: admin/consts.py:188 admin/plugins/header.py:118 admin/plugins/proxy.py:94 #: admin/plugins/proxy.py:144 admin/plugins/redir.py:76 #: admin/plugins/redir.py:106 admin/plugins/request.py:31 #: admin/plugins/url_arg.py:76 admin/plugins/url_arg.py:95 msgid "Regular Expression" msgstr "Regulärer Ausdruck" -#: admin/consts.py:191 +#: admin/consts.py:190 msgid "File Exists" msgstr "Datei existiert" -#: admin/consts.py:192 +#: admin/consts.py:191 msgid "HTTP Method" msgstr "HTTP Methode" -#: admin/consts.py:193 admin/plugins/bind.py:76 admin/plugins/bind.py:129 -#, fuzzy +#: admin/consts.py:192 admin/plugins/bind.py:76 admin/plugins/bind.py:129 msgid "Incoming IP/Port" msgstr "Eingehender Port" -#: admin/consts.py:194 +#: admin/consts.py:193 msgid "SSL / TLS" msgstr "SSL / TLS" -#: admin/consts.py:195 admin/plugins/fullpath.py:66 +#: admin/consts.py:194 admin/plugins/fullpath.py:66 #: admin/plugins/fullpath.py:101 msgid "Full Path" msgstr "Kompletter Pfad" -#: admin/consts.py:196 admin/plugins/from.py:71 -#, fuzzy +#: admin/consts.py:195 admin/plugins/from.py:71 msgid "Connected from" msgstr "Verbindung von" -#: admin/consts.py:197 +#: admin/consts.py:196 msgid "URL Argument" msgstr "URL Argument" -#: admin/consts.py:198 +#: admin/consts.py:197 msgid "GeoIP" msgstr "GeoIP" -#: admin/consts.py:202 +#: admin/consts.py:201 #, fuzzy msgid "Match Nickname" msgstr "Name des Servers" -#: admin/consts.py:203 +#: admin/consts.py:202 #, fuzzy msgid "Wildcards" msgstr "Wildcards" -#: admin/consts.py:205 +#: admin/consts.py:204 msgid "Server IP" msgstr "Server IP" -#: admin/consts.py:209 admin/consts.py:255 +#: admin/consts.py:208 admin/consts.py:254 msgid "Not set" msgstr "Nicht gesetzt" -#: admin/consts.py:210 +#: admin/consts.py:209 msgid "Already expired on 1970" msgstr "Lief bereits 1970 aus" -#: admin/consts.py:211 +#: admin/consts.py:210 msgid "Do not expire until 2038" msgstr "Laufe bis 2038 nicht aus" -#: admin/consts.py:212 +#: admin/consts.py:211 msgid "Custom value" msgstr "Benutzerdefinierter Wert" -#: admin/consts.py:216 +#: admin/consts.py:215 msgid "No TLS/SSL" msgstr "Kein TLS/SSL" -#: admin/consts.py:217 +#: admin/consts.py:216 msgid "OpenSSL / libssl" msgstr "OpenSSL / libssl" -#: admin/consts.py:221 admin/util.py:91 +#: admin/consts.py:220 admin/util.py:91 msgid "Off" msgstr "Aus" -#: admin/consts.py:222 +#: admin/consts.py:221 msgid "Enhanced Virtual Hosting" msgstr "Erweitertes virtuelles Hosting" -#: admin/consts.py:226 +#: admin/consts.py:225 msgid "Skip" msgstr "Überspringen" -#: admin/consts.py:227 +#: admin/consts.py:226 msgid "Tolerate" -msgstr "" +msgstr "Tolerieren" -#: admin/consts.py:229 +#: admin/consts.py:228 msgid "Require" -msgstr "Benötigt" +msgstr "Fordern" -#: admin/consts.py:234 +#: admin/consts.py:233 msgid "RRDtool graphs" msgstr "RRDtool Grafiken" -#: admin/consts.py:238 +#: admin/consts.py:237 msgid "Local time" msgstr "Lokale Zeit" -#: admin/consts.py:239 +#: admin/consts.py:238 msgid "UTC: Coordinated Universal Time" msgstr "UTC: Koordinierte Weltzeit" -#: admin/consts.py:243 +#: admin/consts.py:242 msgid "JSON" msgstr "JSON" -#: admin/consts.py:244 +#: admin/consts.py:243 msgid "Python" msgstr "Python" -#: admin/consts.py:245 admin/wizards/List.py:91 +#: admin/consts.py:244 admin/wizards/List.py:91 msgid "PHP" msgstr "PHP" -#: admin/consts.py:246 +#: admin/consts.py:245 msgid "Ruby" msgstr "Ruby" -#: admin/consts.py:251 +#: admin/consts.py:250 #, fuzzy msgid "POST tracker" msgstr "POST Tracker" -#: admin/consts.py:256 +#: admin/consts.py:255 msgid "Public" msgstr "Öffentlich" -#: admin/consts.py:257 +#: admin/consts.py:256 msgid "Private" msgstr "Privat" -#: admin/consts.py:258 +#: admin/consts.py:257 msgid "No Cache" msgstr "Kein Cache" -#: admin/consts.py:263 +#: admin/consts.py:262 msgid "0 - No compression" msgstr "" -#: admin/consts.py:264 +#: admin/consts.py:263 msgid "1" msgstr "" -#: admin/consts.py:265 +#: admin/consts.py:264 msgid "2" msgstr "" -#: admin/consts.py:266 +#: admin/consts.py:265 msgid "3" msgstr "" -#: admin/consts.py:267 +#: admin/consts.py:266 msgid "4" msgstr "" -#: admin/consts.py:268 +#: admin/consts.py:267 msgid "5" msgstr "" -#: admin/consts.py:269 +#: admin/consts.py:268 msgid "6" msgstr "" -#: admin/consts.py:270 +#: admin/consts.py:269 msgid "7" msgstr "" -#: admin/consts.py:271 +#: admin/consts.py:270 msgid "8" msgstr "" -#: admin/consts.py:272 +#: admin/consts.py:271 msgid "9 - Max compression" msgstr "" @@ -3421,7 +3377,6 @@ msgid "At least one user/password pair should be configured." msgstr "Mindestens ein Benutzer/Password Paar sollte konfiguriert werden." #: admin/plugins/authlist.py:60 -#, fuzzy msgid "Authentication list" msgstr "Authentifizierungliste" @@ -3455,12 +3410,10 @@ msgid "Selected Ports" msgstr "Ausgewählte Ports" #: admin/plugins/bind.py:131 -#, fuzzy msgid "Assign new IP/Port" msgstr "Einen neuen Port zuweisen" #: admin/plugins/bind.py:159 -#, fuzzy msgid "Ports" msgstr "Ports" @@ -3491,7 +3444,6 @@ msgid "HTTP Error that you be used to reply the request." msgstr "" #: admin/plugins/custom_error.py:32 -#, fuzzy msgid "HTTP Custom Error" msgstr "HTTP Fehler" @@ -3500,7 +3452,6 @@ msgid "Custom Error" msgstr "" #: admin/plugins/dbslayer.py:34 -#, fuzzy msgid "MySQL balancing" msgstr "MySQL Ausgleich" @@ -3597,69 +3548,68 @@ msgstr "" msgid "Only listing" msgstr "Nur anzeigen" -#: admin/plugins/dirlist.py:49 admin/plugins/dirlist.py:50 #: admin/plugins/dirlist.py:51 admin/plugins/dirlist.py:52 #: admin/plugins/dirlist.py:53 admin/plugins/dirlist.py:54 +#: admin/plugins/dirlist.py:55 admin/plugins/dirlist.py:56 #: admin/plugins/redir.py:105 msgid "Show" msgstr "Anzeigen" -#: admin/plugins/dirlist.py:49 +#: admin/plugins/dirlist.py:51 msgid "Show Size" msgstr "Zeige die Größe an" -#: admin/plugins/dirlist.py:50 +#: admin/plugins/dirlist.py:52 msgid "Show Date" msgstr "Zeige das Datum an" -#: admin/plugins/dirlist.py:51 +#: admin/plugins/dirlist.py:53 msgid "Show User" msgstr "Zeige den Benutzer an" -#: admin/plugins/dirlist.py:52 +#: admin/plugins/dirlist.py:54 msgid "Show Group" msgstr "Zeige die Gruppe an" -#: admin/plugins/dirlist.py:53 +#: admin/plugins/dirlist.py:55 msgid "Show Backup files" msgstr "Backup Dateien anzeigen" -#: admin/plugins/dirlist.py:54 +#: admin/plugins/dirlist.py:56 msgid "Show Hidden files" msgstr "Versteckte Dateien anzeigen" -#: admin/plugins/dirlist.py:55 +#: admin/plugins/dirlist.py:58 admin/plugins/file.py:44 msgid "Allow symbolic links" msgstr "Erlaube symbolische Verknüpfungen" -#: admin/plugins/dirlist.py:56 +#: admin/plugins/dirlist.py:59 #, fuzzy msgid "Redirect symbolic links" msgstr "Erlaube symbolische Verknüpfungen" -#: admin/plugins/dirlist.py:60 +#: admin/plugins/dirlist.py:63 msgid "Listing" msgstr "" -#: admin/plugins/dirlist.py:65 +#: admin/plugins/dirlist.py:68 msgid "Theme" msgstr "Design" -#: admin/plugins/dirlist.py:66 -#, fuzzy +#: admin/plugins/dirlist.py:69 msgid "Icons dir" msgstr "Iconsverzeichnis" -#: admin/plugins/dirlist.py:67 +#: admin/plugins/dirlist.py:70 #, fuzzy msgid "Notice files" msgstr "Versteckte Dateien" -#: admin/plugins/dirlist.py:68 +#: admin/plugins/dirlist.py:71 msgid "Hidden files" msgstr "Versteckte Dateien" -#: admin/plugins/dirlist.py:72 +#: admin/plugins/dirlist.py:75 #, fuzzy msgid "Theming" msgstr "Design" @@ -3682,7 +3632,6 @@ msgid "Whether the redirection should be Internal or External." msgstr "" #: admin/plugins/error_redir.py:99 -#, fuzzy msgid "Default Error" msgstr "Standardfehler" @@ -3783,12 +3732,10 @@ msgid "Ensure that the matched extension if part of a local file name." msgstr "" #: admin/plugins/extensions.py:62 -#, fuzzy msgid "Check local file" msgstr "Datei prüfen" #: admin/plugins/fcgi.py:51 -#, fuzzy msgid "FastCGI Specific" msgstr "FastCGI spezifisch" @@ -3796,7 +3743,7 @@ msgstr "FastCGI spezifisch" msgid "Enables an internal I/O cache that improves performance." msgstr "" -#: admin/plugins/file.py:45 +#: admin/plugins/file.py:49 msgid "File Sending" msgstr "" @@ -3813,7 +3760,6 @@ msgid "New IP or Subnet" msgstr "" #: admin/plugins/from.py:107 -#, fuzzy msgid "Add another entry" msgstr "Neuen Port hinzufügen" @@ -3838,7 +3784,6 @@ msgid "Add another path" msgstr "Neuen Port hinzufügen" #: admin/plugins/fullpath.py:117 admin/plugins/fullpath.py:124 -#, fuzzy msgid "Path" msgstr "Pfad" @@ -3862,7 +3807,6 @@ msgid "Select all" msgstr "alle auswählen" #: admin/plugins/geoip.py:79 -#, fuzzy msgid "Select none" msgstr "keine auswählen" @@ -3884,26 +3828,26 @@ msgid "" "header entry." msgstr "" -#: admin/plugins/header.py:65 +#: admin/plugins/header.py:67 #, fuzzy msgid "Matches a Regular Expression" msgstr "Neue Regel hinzufügen" -#: admin/plugins/header.py:66 +#: admin/plugins/header.py:68 msgid "Is Provided" msgstr "" -#: admin/plugins/header.py:104 +#: admin/plugins/header.py:106 #, fuzzy msgid "Full header" msgstr "Dateiname" -#: admin/plugins/header.py:107 +#: admin/plugins/header.py:109 #, fuzzy msgid "Complete Header" msgstr "Neuer Header hinzufügen" -#: admin/plugins/header.py:154 +#: admin/plugins/header.py:156 #, python-format msgid "Header %(header)s is provided" msgstr "" @@ -3940,9 +3884,8 @@ msgid "LDAP server IP address." msgstr "LDAP Server IP Adresse" #: admin/plugins/ldap.py:33 -#, fuzzy msgid "LDAP server port to connect to. Default: 389" -msgstr "Server-Port zu welchem verbunden wird" +msgstr "Server-Port, zu dem verbunden wird. Standardwert: 386" #: admin/plugins/ldap.py:34 msgid "Domain sent during the LDAP authentication operation. Optional." @@ -4002,18 +3945,16 @@ msgid "CA File" msgstr "CA Datei" #: admin/plugins/ldap.py:59 -#, fuzzy msgid "LDAP Connection" -msgstr "LDAP Verbindung" +msgstr "LDAP-Verbindung" #: admin/plugins/method.py:67 msgid "The HTTP method that should match this rule." msgstr "" #: admin/plugins/mysql.py:35 -#, fuzzy msgid "MySQL server IP address." -msgstr "MySQL Server IP Adresse" +msgstr "MySQL Server IP-Adresse" #: admin/plugins/mysql.py:36 msgid "Server port to connect to." @@ -4024,20 +3965,19 @@ msgid "Full path of Unix socket to communicate with the data base." msgstr "" #: admin/plugins/mysql.py:38 -#, fuzzy msgid "User name for connecting to the database." -msgstr "User mit welchem auf die Datenbank zugegriffen wird" +msgstr "UserID, mit der auf die Datenbank zugegriffen wird" #: admin/plugins/mysql.py:39 -#, fuzzy msgid "Password for connecting to the database." -msgstr "Passwort mit welchem auf die Datenbank zugeriffen wird" +msgstr "Passwort, mit dem auf die Datenbank zugeriffen wird" #: admin/plugins/mysql.py:40 msgid "Database name containing the user/password pair list." msgstr "" #: admin/plugins/mysql.py:41 +#, python-brace-format msgid "" "SQL command to execute. ${user} is replaced with the user name, and " "${passwd} is replaced with the user supplied password." @@ -4079,9 +4019,8 @@ msgid "Password Hash" msgstr "Passwort" #: admin/plugins/mysql.py:88 -#, fuzzy msgid "MySQL Connection" -msgstr "MySQL Verbindung" +msgstr "MySQL-Verbindung" #: admin/plugins/plain.py:30 msgid "Plain text" @@ -4215,7 +4154,6 @@ msgid "Header Addition" msgstr "" #: admin/plugins/proxy.py:260 admin/plugins/proxy.py:272 -#, fuzzy msgid "Hide Headers" msgstr "Header verstecken" @@ -4246,12 +4184,10 @@ msgid "At least one Regular Expression should be defined." msgstr "" #: admin/plugins/redir.py:38 -#, fuzzy msgid "Redirections" msgstr "Weiterleitungen" #: admin/plugins/redir.py:71 -#, fuzzy msgid "Rule list" msgstr "Liste der Regeln" @@ -4275,7 +4211,6 @@ msgid "At least one Regular Expression string must be defined." msgstr "" #: admin/plugins/rehost.py:71 -#, fuzzy msgid "Add New Entry" msgstr "Neuen Eintrag hinzufügen" @@ -4402,9 +4337,8 @@ msgid "Add new entry" msgstr "Neue Regel hinzufügen" #: admin/plugins/target_ip.py:88 -#, fuzzy msgid "Add new IP/Subnet…" -msgstr "Neue IP/Subnetz" +msgstr "Neues IP/Subnetz hinzufügen…" #: admin/plugins/target_ip.py:100 msgid "Accepted Server IP Addresses and Subnets" @@ -4468,24 +4402,19 @@ msgid "Add new wildcard…" msgstr "" #: admin/plugins/wildcard.py:91 -#, fuzzy msgid "Accepted Domains" -msgstr "Erlaubte Domains" +msgstr "Erlaubte Domänen" -#: admin/server.py:68 +#: admin/server.py:70 #, python-format msgid "Server %(version)s running.. PID=%(pid)d Port=%(scgi_port)s" msgstr "Server %(version)s läuft.. PID=%(pid)d Port=%(scgi_port)s" -#: admin/server.py:70 +#: admin/server.py:72 #, python-format msgid "Server %(version)s running.. PID=%(pid)d Socket=%(scgi_port)s" msgstr "Server %(version)s läuft.. PID=%(pid)d Socket=%(scgi_port)s" -#: admin/server.py:144 -msgid "Incorrect parameters: PORT CONFIG_FILE" -msgstr "" - #: admin/util.py:91 msgid "On" msgstr "An" @@ -4555,9 +4484,8 @@ msgid "Path is not a directory" msgstr "Pfad ist kein Ordner" #: admin/validations.py:207 -#, fuzzy msgid "Path is a directory" -msgstr "Pfad ist kein Ordner" +msgstr "Pfad ist ein Ordner" #: admin/validations.py:216 msgid "Invalid char. Accepts: letters, digits, _, - and ." @@ -4871,9 +4799,8 @@ msgstr "" #: admin/wizards/alfresco.py:45 admin/wizards/coldfusion.py:46 #: admin/wizards/concrete5.py:47 admin/wizards/django.py:44 #: admin/wizards/glassfish.py:45 admin/wizards/mailman.py:48 -#: admin/wizards/mono.py:46 admin/wizards/php.py:43 -#: admin/wizards/symfony.py:51 admin/wizards/uwsgi.py:61 -#: admin/wizards/zend.py:47 +#: admin/wizards/mono.py:46 admin/wizards/php.py:43 admin/wizards/symfony.py:51 +#: admin/wizards/uwsgi.py:61 admin/wizards/zend.py:47 #, fuzzy msgid "Host name of the virtual server that is about to be created." msgstr "Name des virtuellen Servers" @@ -4881,9 +4808,8 @@ msgstr "Name des virtuellen Servers" #: admin/wizards/alfresco.py:46 admin/wizards/coldfusion.py:45 #: admin/wizards/concrete5.py:46 admin/wizards/django.py:43 #: admin/wizards/glassfish.py:46 admin/wizards/mailman.py:47 -#: admin/wizards/mono.py:45 admin/wizards/php.py:42 -#: admin/wizards/symfony.py:50 admin/wizards/uwsgi.py:60 -#: admin/wizards/zend.py:46 +#: admin/wizards/mono.py:45 admin/wizards/php.py:42 admin/wizards/symfony.py:50 +#: admin/wizards/uwsgi.py:60 admin/wizards/zend.py:46 #, fuzzy msgid "New Virtual Server Details" msgstr "Virtueller Server" @@ -4907,7 +4833,6 @@ msgstr "Öffentlicher Web Ordner" #: admin/wizards/mono.py:198 admin/wizards/php.py:321 #: admin/wizards/rails.py:324 admin/wizards/symfony.py:231 #: admin/wizards/uwsgi.py:266 admin/wizards/zend.py:201 -#, fuzzy msgid "New Host Name" msgstr "Neuer Hostname" @@ -5185,9 +5110,8 @@ msgid "Redirect" msgstr "Weiterleitung" #: admin/wizards/hotlinking.py:174 -#, fuzzy msgid "Domain Name" -msgstr "Domains" +msgstr "Domänenname" #: admin/wizards/hotlinking.py:175 #, fuzzy @@ -5785,3 +5709,23 @@ msgstr "Erzeuge eine neue Konfigurationsdatei" #: admin/wizards/zend.py:49 msgid "Web directory where you want Zend to be accessible. (Example: /zend)" msgstr "" + +#~ msgid "Allow SSL v2" +#~ msgstr "SSL v2 erlauben" + +#, fuzzy +#~ msgid "Mailing List Subscription" +#~ msgstr "Mailing Liste" + +#, fuzzy +#~ msgid "Purchase commercial support" +#~ msgstr "Kommerzieller Support" + +#~ msgid "Subscribe" +#~ msgstr "Abonnieren" + +#~ msgid "Your email address" +#~ msgstr "Ihre E-Mail-Adresse" + +#~ msgid "Your name" +#~ msgstr "Dein Name" diff --git a/po/admin/en.po b/po/admin/en.po index 4c226c60c..7ac327951 100644 --- a/po/admin/en.po +++ b/po/admin/en.po @@ -1,5 +1,5 @@ -# Automatic default english translation. -# Copyright (C) 2009-2014 Alvaro Lopez Ortega +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR Alvaro Lopez Ortega # This file is distributed under the same license as the cherokee package. # Authors. # - Daniel Niccoli @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: cherokee 1.2.104\n" -"Report-Msgid-Bugs-To: http://bugs.cherokee-project.com/\n" -"POT-Creation-Date: 2014-01-04 00:54+0100\n" +"Report-Msgid-Bugs-To: https://github.com/cherokee/webserver/issues\n" +"POT-Creation-Date: 2021-03-26 19:04+0100\n" "PO-Revision-Date: 2014-01-04 14:08+0100\n" "Last-Translator: Daniel Niccoli \n" "Language-Team: \n" @@ -104,7 +104,7 @@ msgstr "Information Sources" msgid "Assign Information Sources" msgstr "Assign Information Sources" -#: admin/Balancer.py:136 admin/PageIndex.py:204 admin/PageRule.py:112 +#: admin/Balancer.py:136 admin/PageIndex.py:182 admin/PageRule.py:112 #: admin/plugins/bind.py:69 admin/plugins/bind.py:121 #: admin/plugins/custom_error.py:41 admin/plugins/method.py:31 msgid "Choose" @@ -139,17 +139,17 @@ msgstr "Could not copy configuration to " #: admin/CTK/CTK/Druid.py:216 admin/CTK/CTK/Druid.py:224 #: admin/CTK/CTK/Druid.py:232 admin/CTK/CTK/Druid.py:238 admin/Icons.py:362 #: admin/Mime.py:110 admin/PageGeneral.py:289 admin/PageGeneral.py:317 -#: admin/PageIndex.py:232 admin/PageIndex.py:308 admin/PageRule.py:225 -#: admin/PageRule.py:276 admin/PageRule.py:302 admin/PageSource.py:225 -#: admin/PageSource.py:411 admin/PageSource.py:428 admin/PageSource.py:442 -#: admin/PageVServers.py:215 admin/PageVServers.py:252 -#: admin/PageVServers.py:281 admin/plugins/redir.py:120 +#: admin/PageIndex.py:246 admin/PageRule.py:225 admin/PageRule.py:276 +#: admin/PageRule.py:302 admin/PageSource.py:225 admin/PageSource.py:411 +#: admin/PageSource.py:428 admin/PageSource.py:442 admin/PageVServers.py:215 +#: admin/PageVServers.py:252 admin/PageVServers.py:281 +#: admin/plugins/redir.py:120 msgid "Cancel" msgstr "Cancel" #: admin/CTK/CTK/Dialog.py:165 admin/CTK/CTK/Dialog.py:272 #: admin/CTK/CTK/Druid.py:243 admin/PageException.py:89 -#: admin/PageException.py:93 admin/PageGeneral.py:283 admin/PageIndex.py:277 +#: admin/PageException.py:93 admin/PageGeneral.py:283 admin/PageIndex.py:215 #: admin/PageSource.py:402 admin/plugins/error_redir.py:110 msgid "Close" msgstr "Close" @@ -187,14 +187,14 @@ msgstr "Loading" #: admin/CTK/CTK/Image.py:99 admin/CgiBase.py:69 admin/CgiBase.py:71 #: admin/CgiBase.py:124 admin/CgiBase.py:125 admin/CgiBase.py:126 #: admin/CgiBase.py:127 admin/CgiBase.py:128 admin/Graph.py:125 -#: admin/PageAdvanced.py:150 admin/PageEntry.py:150 admin/PageEntry.py:159 -#: admin/PageGeneral.py:193 admin/PageSource.py:296 -#: admin/plugins/dirlist.py:56 admin/plugins/exists.py:72 -#: admin/plugins/exists.py:77 admin/plugins/exists.py:78 -#: admin/plugins/exists.py:79 admin/plugins/exists.py:109 -#: admin/plugins/exists.py:115 admin/plugins/exists.py:116 -#: admin/plugins/exists.py:117 admin/plugins/file.py:40 -#: admin/plugins/ldap.py:53 admin/plugins/streaming.py:43 +#: admin/PageAdvanced.py:198 admin/PageEntry.py:150 admin/PageEntry.py:159 +#: admin/PageGeneral.py:193 admin/PageSource.py:296 admin/plugins/dirlist.py:59 +#: admin/plugins/exists.py:72 admin/plugins/exists.py:77 +#: admin/plugins/exists.py:78 admin/plugins/exists.py:79 +#: admin/plugins/exists.py:109 admin/plugins/exists.py:115 +#: admin/plugins/exists.py:116 admin/plugins/exists.py:117 +#: admin/plugins/file.py:42 admin/plugins/ldap.py:53 +#: admin/plugins/streaming.py:43 msgid "Enabled" msgstr "Enabled" @@ -211,11 +211,12 @@ msgstr "Previous" msgid "Optional" msgstr "Optional" -#: admin/CTK/CTK/ToggleButton.py:154 +#: admin/CTK/CTK/ToggleButton.py:154 admin/PageAdvanced.py:245 +#: admin/PageAdvanced.py:258 msgid "Disable" msgstr "Disable" -#: admin/CTK/CTK/ToggleButton.py:155 admin/PageVServer.py:669 +#: admin/CTK/CTK/ToggleButton.py:155 admin/PageVServer.py:678 #: admin/wizards/flcache.py:157 msgid "Enable" msgstr "Enable" @@ -260,7 +261,7 @@ msgstr "" "Whether the handler should read and use the X-Real-IP and X-Forwarded-For " "headers and use it in REMOTE_ADDR." -#: admin/CgiBase.py:40 admin/PageVServer.py:70 +#: admin/CgiBase.py:40 admin/PageVServer.py:74 msgid "" "Accept all the X-Real-IP and X-Forwarded-For headers. WARNING: Turn it on " "only if you are centain of what you are doing." @@ -280,11 +281,11 @@ msgstr "" msgid "Read X-Real-IP" msgstr "Read X-Real-IP" -#: admin/CgiBase.py:71 admin/PageVServer.py:610 +#: admin/CgiBase.py:71 admin/PageVServer.py:614 msgid "Don't check origin" msgstr "Don't check origin" -#: admin/CgiBase.py:73 admin/PageVServer.py:613 +#: admin/CgiBase.py:73 admin/PageVServer.py:617 msgid "Accept from Hosts" msgstr "Accept from Hosts" @@ -326,7 +327,7 @@ msgid "Allow X-Sendfile" msgstr "Allow X-Sendfile" #: admin/CgiBase.py:128 admin/plugins/exists.py:77 admin/plugins/exists.py:115 -#: admin/plugins/file.py:40 +#: admin/plugins/file.py:42 msgid "Use I/O cache" msgstr "Use I/O cache" @@ -420,7 +421,7 @@ msgstr "" "virtual server." #: admin/Graph.py:118 admin/PageEntry.py:538 admin/PageSource.py:257 -#: admin/PageStatus.py:70 admin/PageVServer.py:731 admin/PageVServers.py:210 +#: admin/PageStatus.py:70 admin/PageVServer.py:740 admin/PageVServers.py:210 msgid "Unknown" msgstr "Unknown" @@ -432,7 +433,7 @@ msgstr "Collect Statistics" msgid "Allows to specify an alternative Document Root path." msgstr "Allows to specify an alternative Document Root path." -#: admin/Handler.py:43 admin/PageEntry.py:523 admin/PageVServer.py:462 +#: admin/Handler.py:43 admin/PageEntry.py:523 admin/PageVServer.py:466 #: admin/PageVServers.py:128 admin/wizards/django.py:191 #: admin/wizards/mono.py:199 admin/wizards/php.py:39 admin/wizards/php.py:342 #: admin/wizards/uwsgi.py:267 @@ -444,7 +445,7 @@ msgid "Extension List" msgstr "Extension List" #: admin/Icons.py:129 admin/Icons.py:328 admin/Mime.py:96 admin/Mime.py:131 -#: admin/consts.py:188 admin/plugins/extensions.py:61 +#: admin/consts.py:187 admin/plugins/extensions.py:61 #: admin/wizards/flcache.py:141 msgid "Extensions" msgstr "Extensions" @@ -465,12 +466,13 @@ msgstr "Files" msgid "Add New File" msgstr "Add New File" -#: admin/Icons.py:197 admin/Icons.py:329 admin/Rule.py:174 admin/consts.py:42 -#: admin/consts.py:128 admin/consts.py:262 +#: admin/Icons.py:197 admin/Icons.py:329 admin/PageVServer.py:674 +#: admin/PageVServer.py:675 admin/Rule.py:174 admin/consts.py:42 +#: admin/consts.py:128 admin/consts.py:261 msgid "Default" msgstr "Default" -#: admin/Icons.py:198 admin/Icons.py:330 admin/consts.py:187 +#: admin/Icons.py:198 admin/Icons.py:330 admin/consts.py:186 #: admin/plugins/directory.py:31 msgid "Directory" msgstr "Directory" @@ -483,7 +485,7 @@ msgstr "Go to Parent" msgid "Modify" msgstr "Modify" -#: admin/Icons.py:214 admin/PageAdvanced.py:168 admin/PageAdvanced.py:192 +#: admin/Icons.py:214 admin/PageAdvanced.py:216 admin/PageAdvanced.py:316 msgid "Special Files" msgstr "Special Files" @@ -587,7 +589,7 @@ msgstr "Save" msgid "Home" msgstr "Home" -#: admin/Page.py:155 admin/PageAdvanced.py:150 admin/PageIndex.py:84 +#: admin/Page.py:155 admin/PageAdvanced.py:198 admin/PageIndex.py:62 #: admin/PageStatus.py:40 admin/PageStatus.py:112 msgid "Status" msgstr "Status" @@ -604,7 +606,7 @@ msgstr "vServers" msgid "Sources" msgstr "Sources" -#: admin/Page.py:159 admin/PageAdvanced.py:97 admin/PageAdvanced.py:198 +#: admin/Page.py:159 admin/PageAdvanced.py:145 admin/PageAdvanced.py:322 msgid "Advanced" msgstr "Advanced" @@ -616,7 +618,19 @@ msgstr "Help" msgid "Updating..." msgstr "Updating..." -#: admin/PageAdvanced.py:64 +#: admin/PageAdvanced.py:56 +msgid "" +"

WARNING: The SSL/TLS back-end supports more recent\n" +"versions of TLS protocols, which are not recognized by Cherokee. Please " +"check\n" +"for latest Cherokee updates or report this issue. As a temporary workaround " +"please\n" +"set 'Max. TLS protocol version' to the maximum TLS protocol version " +"supported by\n" +"Cherokee.

Following unknown TLS protocols have been found:" +msgstr "" + +#: admin/PageAdvanced.py:94 msgid "" "

WARNING: This section contains advanced\n" "configuration parameters. Changing things is not recommended unless\n" @@ -626,15 +640,15 @@ msgstr "" "configuration parameters. Changing things is not recommended unless\n" "you really know what you are doing.

" -#: admin/PageAdvanced.py:68 +#: admin/PageAdvanced.py:98 msgid "Defines which thread policy the OS should apply to the server." msgstr "Defines which thread policy the OS should apply to the server." -#: admin/PageAdvanced.py:69 +#: admin/PageAdvanced.py:99 msgid "If empty, Cherokee will calculate a default number." msgstr "If empty, Cherokee will calculate a default number." -#: admin/PageAdvanced.py:70 +#: admin/PageAdvanced.py:100 msgid "" "It defines how many file descriptors the server should handle. Default is " "the number showed by ulimit -n" @@ -642,19 +656,19 @@ msgstr "" "It defines how many file descriptors the server should handle. Default is " "the number showed by ulimit -n" -#: admin/PageAdvanced.py:71 +#: admin/PageAdvanced.py:101 msgid "Allows to choose the internal file descriptor polling method." msgstr "Allows to choose the internal file descriptor polling method." -#: admin/PageAdvanced.py:72 +#: admin/PageAdvanced.py:102 msgid "Minimum size of a file to use sendfile(). Default: 32768 Bytes." msgstr "Minimum size of a file to use sendfile(). Default: 32768 Bytes." -#: admin/PageAdvanced.py:73 +#: admin/PageAdvanced.py:103 msgid "Maximum size of a file to use sendfile(). Default: 2 GB." msgstr "Maximum size of a file to use sendfile(). Default: 2 GB." -#: admin/PageAdvanced.py:74 +#: admin/PageAdvanced.py:104 msgid "" "Name a program that will be called if, by some reason, the server fails. " "Default: cherokee-panic." @@ -662,15 +676,15 @@ msgstr "" "Name a program that will be called if, by some reason, the server fails. " "Default: cherokee-panic." -#: admin/PageAdvanced.py:75 +#: admin/PageAdvanced.py:105 msgid "Path of the PID file. If empty, the file will not be created." msgstr "Path of the PID file. If empty, the file will not be created." -#: admin/PageAdvanced.py:76 +#: admin/PageAdvanced.py:106 msgid "Max. length of the incoming connection queue." msgstr "Max. length of the incoming connection queue." -#: admin/PageAdvanced.py:77 +#: admin/PageAdvanced.py:107 msgid "" "Set the number of how many internal connections can be held for reuse by " "each thread. Default: 20." @@ -678,7 +692,7 @@ msgstr "" "Set the number of how many internal connections can be held for reuse by " "each thread. Default: 20." -#: admin/PageAdvanced.py:78 +#: admin/PageAdvanced.py:108 msgid "" "Sets the number of seconds between log consolidations (flushes). Default: 10 " "seconds." @@ -686,11 +700,11 @@ msgstr "" "Sets the number of seconds between log consolidations (flushes). Default: 10 " "seconds." -#: admin/PageAdvanced.py:79 +#: admin/PageAdvanced.py:109 msgid "Time lapse (in seconds) between Nonce cache clean ups." msgstr "Time lapse (in seconds) between Nonce cache clean ups." -#: admin/PageAdvanced.py:80 +#: admin/PageAdvanced.py:110 msgid "" "Enables the server-wide keep-alive support. It increases the performance. It " "is usually set on." @@ -698,7 +712,7 @@ msgstr "" "Enables the server-wide keep-alive support. It increases the performance. It " "is usually set on." -#: admin/PageAdvanced.py:81 +#: admin/PageAdvanced.py:111 msgid "" "Maximum number of HTTP requests that can be served by each keepalive " "connection." @@ -706,29 +720,29 @@ msgstr "" "Maximum number of HTTP requests that can be served by each keepalive " "connection." -#: admin/PageAdvanced.py:82 +#: admin/PageAdvanced.py:112 msgid "" "Allows the server to use Chunked encoding to try to keep Keep-Alive enabled." msgstr "" "Allows the server to use Chunked encoding to try to keep Keep-Alive enabled." -#: admin/PageAdvanced.py:83 +#: admin/PageAdvanced.py:113 msgid "Activate or deactivate the I/O cache globally." msgstr "Activate or deactivate the I/O cache globally." -#: admin/PageAdvanced.py:84 +#: admin/PageAdvanced.py:114 msgid "Number of pages that the cache should handle." msgstr "Number of pages that the cache should handle." -#: admin/PageAdvanced.py:85 +#: admin/PageAdvanced.py:115 msgid "Files under this size (in bytes) will not be cached." msgstr "Files under this size (in bytes) will not be cached." -#: admin/PageAdvanced.py:86 +#: admin/PageAdvanced.py:116 msgid "Files over this size (in bytes) will not be cached." msgstr "Files over this size (in bytes) will not be cached." -#: admin/PageAdvanced.py:87 +#: admin/PageAdvanced.py:117 msgid "" "How long (in seconds) the file information should last cached without " "refreshing it." @@ -736,168 +750,229 @@ msgstr "" "How long (in seconds) the file information should last cached without " "refreshing it." -#: admin/PageAdvanced.py:88 +#: admin/PageAdvanced.py:118 msgid "How long (in seconds) the file content should last cached." msgstr "How long (in seconds) the file content should last cached." -#: admin/PageAdvanced.py:89 +#: admin/PageAdvanced.py:119 msgid "Path to a Diffie Hellman (DH) parameters PEM file: 512 bits." msgstr "Path to a Diffie Hellman (DH) parameters PEM file: 512 bits." -#: admin/PageAdvanced.py:90 +#: admin/PageAdvanced.py:120 msgid "Path to a Diffie Hellman (DH) parameters PEM file: 1024 bits." msgstr "Path to a Diffie Hellman (DH) parameters PEM file: 1024 bits." -#: admin/PageAdvanced.py:91 +#: admin/PageAdvanced.py:121 msgid "Path to a Diffie Hellman (DH) parameters PEM file: 2048 bits." msgstr "Path to a Diffie Hellman (DH) parameters PEM file: 2048 bits." -#: admin/PageAdvanced.py:92 +#: admin/PageAdvanced.py:122 msgid "Path to a Diffie Hellman (DH) parameters PEM file: 4096 bits." msgstr "Path to a Diffie Hellman (DH) parameters PEM file: 4096 bits." -#: admin/PageAdvanced.py:93 +#: admin/PageAdvanced.py:123 +msgid "Your Cherokee Web Server does not support SSL/TLS encryption." +msgstr "" + +#: admin/PageAdvanced.py:124 msgid "Timeout for the TLS/SSL handshake. Default: 15 seconds." msgstr "Timeout for the TLS/SSL handshake. Default: 15 seconds." -#: admin/PageAdvanced.py:94 +#: admin/PageAdvanced.py:125 +msgid "Beware: it is vulnerable. You should disable SSLv2." +msgstr "" + +#: admin/PageAdvanced.py:126 +msgid "Beware: it is vulnerable. You should disable SSLv3." +msgstr "" + +#: admin/PageAdvanced.py:127 +msgid "TLSv1 is deprecated" +msgstr "" + +#: admin/PageAdvanced.py:128 +msgid "TLSv1.1 is deprecated" +msgstr "" + +#: admin/PageAdvanced.py:129 admin/PageAdvanced.py:130 +msgid " " +msgstr "" + +#: admin/PageAdvanced.py:131 +msgid "" +"The following options work in combination with above min/max TLS protocol " +"version settings. They are deprecated, only set the minimum and maximum " +"supported protocol versions instead." +msgstr "" + +#: admin/PageAdvanced.py:133 +msgid "" +"Minimum required TLS protocol version from clients (Default: auto-configured " +"by libssl)" +msgstr "" + +#: admin/PageAdvanced.py:134 msgid "" -"Allow clients to use SSL version 2 - Beware: it is vulnerable. (Default: No)" +"Maximum supported TLS protocol version (Default: auto-configured by libssl)" msgstr "" -"Allow clients to use SSL version 2 - Beware: it is vulnerable. (Default: No)" -#: admin/PageAdvanced.py:119 admin/PageAdvanced.py:121 +#: admin/PageAdvanced.py:167 admin/PageAdvanced.py:169 msgid "Allowed" msgstr "Allowed" -#: admin/PageAdvanced.py:119 +#: admin/PageAdvanced.py:167 msgid "Keep Alive" msgstr "Keep Alive" -#: admin/PageAdvanced.py:120 +#: admin/PageAdvanced.py:168 msgid "Max keepalive reqs" msgstr "Max keepalive reqs" -#: admin/PageAdvanced.py:121 +#: admin/PageAdvanced.py:169 msgid "Chunked Encoding" msgstr "Chunked Encoding" -#: admin/PageAdvanced.py:122 +#: admin/PageAdvanced.py:170 msgid "Polling Method" msgstr "Polling Method" -#: admin/PageAdvanced.py:123 +#: admin/PageAdvanced.py:171 msgid "Sendfile min size" msgstr "Sendfile min size" -#: admin/PageAdvanced.py:124 +#: admin/PageAdvanced.py:172 msgid "Sendfile max size" msgstr "Sendfile max size" -#: admin/PageAdvanced.py:126 admin/PageAdvanced.py:189 +#: admin/PageAdvanced.py:174 admin/PageAdvanced.py:313 msgid "Connections" msgstr "Connections" -#: admin/PageAdvanced.py:134 +#: admin/PageAdvanced.py:182 msgid "Thread Number" msgstr "Thread Number" -#: admin/PageAdvanced.py:135 +#: admin/PageAdvanced.py:183 msgid "Thread Policy" msgstr "Thread Policy" -#: admin/PageAdvanced.py:136 +#: admin/PageAdvanced.py:184 msgid "File descriptors" msgstr "File descriptors" -#: admin/PageAdvanced.py:137 +#: admin/PageAdvanced.py:185 msgid "Listening queue length" msgstr "Listening queue length" -#: admin/PageAdvanced.py:138 admin/plugins/proxy.py:239 +#: admin/PageAdvanced.py:186 admin/plugins/proxy.py:239 msgid "Reuse connections" msgstr "Reuse connections" -#: admin/PageAdvanced.py:139 +#: admin/PageAdvanced.py:187 msgid "Log flush time" msgstr "Log flush time" -#: admin/PageAdvanced.py:140 +#: admin/PageAdvanced.py:188 msgid "Nonces clean up time" msgstr "Nonces clean up time" -#: admin/PageAdvanced.py:142 admin/PageAdvanced.py:190 +#: admin/PageAdvanced.py:190 admin/PageAdvanced.py:314 msgid "Resources" msgstr "Resources" -#: admin/PageAdvanced.py:151 +#: admin/PageAdvanced.py:199 msgid "Max pages" msgstr "Max pages" -#: admin/PageAdvanced.py:152 +#: admin/PageAdvanced.py:200 msgid "File Min Size" msgstr "File Min Size" -#: admin/PageAdvanced.py:153 +#: admin/PageAdvanced.py:201 msgid "File Max Size" msgstr "File Max Size" -#: admin/PageAdvanced.py:154 +#: admin/PageAdvanced.py:202 msgid "Lasting: stat" msgstr "Lasting: stat" -#: admin/PageAdvanced.py:155 +#: admin/PageAdvanced.py:203 msgid "Lasting: mmap" msgstr "Lasting: mmap" -#: admin/PageAdvanced.py:157 admin/PageAdvanced.py:191 +#: admin/PageAdvanced.py:205 admin/PageAdvanced.py:315 msgid "I/O cache" msgstr "I/O cache" -#: admin/PageAdvanced.py:165 +#: admin/PageAdvanced.py:213 msgid "Panic action" msgstr "Panic action" -#: admin/PageAdvanced.py:166 +#: admin/PageAdvanced.py:214 msgid "PID file" msgstr "PID file" -#: admin/PageAdvanced.py:176 admin/PageEntry.py:84 admin/PageVServer.py:476 -#: admin/plugins/common.py:42 admin/plugins/common.py:43 -#: admin/plugins/dirlist.py:55 admin/plugins/proxy.py:240 -msgid "Allow" -msgstr "Allow" +#: admin/PageAdvanced.py:245 admin/PageAdvanced.py:247 +#: admin/PageAdvanced.py:258 admin/PageAdvanced.py:260 +#, fuzzy +msgid "Disable " +msgstr "Disable" + +#: admin/PageAdvanced.py:247 +msgid "Protocol deacrivated" +msgstr "" + +#: admin/PageAdvanced.py:247 +msgid "Protocol not supported" +msgstr "" + +#: admin/PageAdvanced.py:260 +msgid "Protocol deactivated" +msgstr "" -#: admin/PageAdvanced.py:176 -msgid "Allow SSL v2" -msgstr "Allow SSL v2" +#: admin/PageAdvanced.py:262 +msgid "Turn off selected TLS Protocols (Deprecated)" +msgstr "" + +#: admin/PageAdvanced.py:270 admin/PageAdvanced.py:271 +#, fuzzy +msgid "auto-configured" +msgstr "Do not configure" + +#: admin/PageAdvanced.py:285 +msgid "Min. TLS protocol version" +msgstr "" -#: admin/PageAdvanced.py:177 +#: admin/PageAdvanced.py:290 +msgid "Max. TLS protocol version" +msgstr "" + +#: admin/PageAdvanced.py:291 msgid "Handshake Timeout" msgstr "Handshake Timeout" -#: admin/PageAdvanced.py:178 +#: admin/PageAdvanced.py:292 msgid "DH parameters: 512 bits" msgstr "DH parameters: 512 bits" -#: admin/PageAdvanced.py:179 +#: admin/PageAdvanced.py:293 msgid "DH parameters: 1024 bits" msgstr "DH parameters: 1024 bits" -#: admin/PageAdvanced.py:180 +#: admin/PageAdvanced.py:294 msgid "DH parameters: 2048 bits" msgstr "DH parameters: 2048 bits" -#: admin/PageAdvanced.py:181 +#: admin/PageAdvanced.py:295 msgid "DH parameters: 4096 bits" msgstr "DH parameters: 4096 bits" -#: admin/PageAdvanced.py:183 admin/PageAdvanced.py:193 -#: admin/PageGeneral.py:239 admin/plugins/bind.py:92 +#: admin/PageAdvanced.py:296 admin/PageAdvanced.py:317 admin/PageGeneral.py:239 +#: admin/plugins/bind.py:92 msgid "TLS" msgstr "TLS" -#: admin/PageAdvanced.py:199 +#: admin/PageAdvanced.py:323 msgid "Advanced Configuration" msgstr "Advanced Configuration" @@ -1002,7 +1077,7 @@ msgstr "GZip encoder" msgid "Deflate encoder" msgstr "Deflate encoder" -#: admin/PageEntry.py:78 admin/PageEntry.py:173 admin/PageVServer.py:149 +#: admin/PageEntry.py:78 admin/PageEntry.py:173 admin/PageVServer.py:153 msgid "Authentication" msgstr "Authentication" @@ -1012,7 +1087,13 @@ msgstr "Authentication modules" #: admin/PageEntry.py:83 admin/PageEntry.py:89 msgid "Leave unset" -msgstr "Leave unset" +msgstr "" + +#: admin/PageEntry.py:84 admin/PageVServer.py:480 admin/plugins/common.py:42 +#: admin/plugins/common.py:43 admin/plugins/dirlist.py:58 +#: admin/plugins/file.py:44 admin/plugins/proxy.py:240 +msgid "Allow" +msgstr "" #: admin/PageEntry.py:85 msgid "Forbid" @@ -1039,7 +1120,7 @@ msgstr "All except explicitly forbidden responses" msgid "Remove" msgstr "Remove" -#: admin/PageEntry.py:126 admin/PageVServer.py:155 +#: admin/PageEntry.py:126 admin/PageVServer.py:159 #: admin/plugins/secdownload.py:44 msgid "Timeout" msgstr "Timeout" @@ -1052,7 +1133,7 @@ msgstr "Connections Timeout" msgid "Limit traffic to" msgstr "Limit traffic to" -#: admin/PageEntry.py:139 admin/PageVServer.py:156 +#: admin/PageEntry.py:139 admin/PageVServer.py:160 msgid "Traffic Shaping" msgstr "Traffic Shaping" @@ -1060,7 +1141,7 @@ msgstr "Traffic Shaping" msgid "Skip Logging" msgstr "Skip Logging" -#: admin/PageEntry.py:154 admin/PageVServer.py:720 +#: admin/PageEntry.py:154 admin/PageVServer.py:729 msgid "Logging" msgstr "Logging" @@ -1084,14 +1165,14 @@ msgstr "Validation Mechanism" msgid "Can not be empty" msgstr "Can not be empty" -#: admin/PageEntry.py:216 admin/PageEntry.py:268 admin/consts.py:190 -#: admin/plugins/header.py:110 admin/plugins/header.py:151 -#: admin/plugins/header.py:156 admin/plugins/proxy.py:193 +#: admin/PageEntry.py:216 admin/PageEntry.py:268 admin/consts.py:189 +#: admin/plugins/header.py:112 admin/plugins/header.py:153 +#: admin/plugins/header.py:158 admin/plugins/proxy.py:193 msgid "Header" msgstr "Header" #: admin/PageEntry.py:216 admin/PageSource.py:284 -#: admin/plugins/error_redir.py:105 admin/plugins/header.py:113 +#: admin/plugins/error_redir.py:105 admin/plugins/header.py:115 #: admin/plugins/redir.py:76 msgid "Type" msgstr "Type" @@ -1108,7 +1189,7 @@ msgstr "Action" msgid "Add New Header" msgstr "Add New Header" -#: admin/PageEntry.py:326 admin/consts.py:204 admin/plugins/redir.py:39 +#: admin/PageEntry.py:326 admin/consts.py:203 admin/plugins/redir.py:39 #: admin/plugins/rehost.py:53 msgid "Regular Expressions" msgstr "Regular Expressions" @@ -1125,8 +1206,7 @@ msgstr "Responses to cache" msgid "Caching Policy" msgstr "Caching Policy" -#: admin/PageEntry.py:381 admin/plugins/rehost.py:68 -#: admin/plugins/rehost.py:92 +#: admin/PageEntry.py:381 admin/plugins/rehost.py:68 admin/plugins/rehost.py:92 msgid "New Regular Expression" msgstr "New Regular Expression" @@ -1134,7 +1214,7 @@ msgstr "New Regular Expression" msgid "Disregarded Cookies" msgstr "Disregarded Cookies" -#: admin/PageEntry.py:402 admin/PageVServer.py:154 +#: admin/PageEntry.py:402 admin/PageVServer.py:158 msgid "Expiration" msgstr "Expiration" @@ -1166,7 +1246,7 @@ msgstr "Proxies Revalidate" msgid "Content Expiration" msgstr "Content Expiration" -#: admin/PageEntry.py:433 admin/PageVServer.py:153 +#: admin/PageEntry.py:433 admin/PageVServer.py:157 msgid "Cache" msgstr "Cache" @@ -1188,7 +1268,7 @@ msgid "Matching Rule" msgstr "Matching Rule" #: admin/PageEntry.py:514 admin/PageEntry.py:528 admin/PageEntry.py:553 -#: admin/PageVServer.py:148 +#: admin/PageVServer.py:152 msgid "Handler" msgstr "Handler" @@ -1204,7 +1284,7 @@ msgstr "Transforms" msgid "Caching" msgstr "Caching" -#: admin/PageEntry.py:556 admin/PageVServer.py:721 +#: admin/PageEntry.py:556 admin/PageVServer.py:730 msgid "Security" msgstr "Security" @@ -1462,7 +1542,7 @@ msgstr "IPv6" msgid "SSL/TLS back-end" msgstr "SSL/TLS back-end" -#: admin/PageGeneral.py:197 admin/PageIndex.py:252 +#: admin/PageGeneral.py:197 admin/PageIndex.py:198 msgid "Support" msgstr "Support" @@ -1495,8 +1575,8 @@ msgid "Bind to" msgstr "Bind to" #: admin/PageGeneral.py:239 admin/PageGeneral.py:310 admin/plugins/bind.py:92 -#: admin/plugins/bind.py:155 admin/plugins/bind.py:157 -#: admin/plugins/ldap.py:48 admin/plugins/mysql.py:77 +#: admin/plugins/bind.py:155 admin/plugins/bind.py:157 admin/plugins/ldap.py:48 +#: admin/plugins/mysql.py:77 msgid "Port" msgstr "Port" @@ -1559,7 +1639,7 @@ msgstr "Group" msgid "Chroot" msgstr "Chroot" -#: admin/PageGeneral.py:357 admin/PageVServer.py:479 +#: admin/PageGeneral.py:357 admin/PageVServer.py:483 msgid "Network" msgstr "Network" @@ -1587,171 +1667,129 @@ msgstr "Table of Contents" msgid "Documentation" msgstr "Documentation" -#: admin/PageIndex.py:67 -msgid "You will be sent an email requesting confirmation" -msgstr "You will be sent an email requesting confirmation" - -#: admin/PageIndex.py:68 -msgid "Optionally provide your name" -msgstr "Optionally provide your name" - -#: admin/PageIndex.py:70 -#, python-format -msgid "" -"There are a number of Community Mailing Lists\n" -"available for you to subscribe. You can subscribe the General Discussion\n" -"mailing list from this interface. There is where most of the discussions\n" -"take place." -msgstr "" -"There are a number of Community Mailing Lists\n" -"available for you to subscribe. You can subscribe the General Discussion\n" -"mailing list from this interface. There is where most of the discussions\n" -"take place." - -#: admin/PageIndex.py:77 +#: admin/PageIndex.py:58 msgid "Server is Running" msgstr "Server is Running" -#: admin/PageIndex.py:78 +#: admin/PageIndex.py:59 msgid "Server is not Running" msgstr "Server is not Running" -#: admin/PageIndex.py:132 +#: admin/PageIndex.py:110 msgid "Stop Server" msgstr "Stop Server" -#: admin/PageIndex.py:136 +#: admin/PageIndex.py:114 msgid "Start Server" msgstr "Start Server" -#: admin/PageIndex.py:141 +#: admin/PageIndex.py:119 msgid "Hostname" msgstr "Hostname" -#: admin/PageIndex.py:143 +#: admin/PageIndex.py:121 msgid "Modified" msgstr "Modified" -#: admin/PageIndex.py:145 +#: admin/PageIndex.py:123 msgid "Not found" msgstr "Not found" -#: admin/PageIndex.py:146 +#: admin/PageIndex.py:124 msgid "Config File" msgstr "Config File" -#: admin/PageIndex.py:153 admin/plugins/server_info.py:32 +#: admin/PageIndex.py:131 admin/plugins/server_info.py:32 #: admin/plugins/server_info.py:35 msgid "Server Information" msgstr "Server Information" -#: admin/PageIndex.py:165 +#: admin/PageIndex.py:143 msgid "Processors" msgstr "Processors" -#: admin/PageIndex.py:177 +#: admin/PageIndex.py:155 msgid "Memory" msgstr "Memory" -#: admin/PageIndex.py:211 admin/plugins/dbslayer.py:51 +#: admin/PageIndex.py:189 admin/plugins/dbslayer.py:51 msgid "Language" msgstr "Language" -#: admin/PageIndex.py:231 -msgid "Mailing List Subscription" -msgstr "Mailing List Subscription" - -#: admin/PageIndex.py:233 -msgid "Subscribe" -msgstr "Subscribe" - -#: admin/PageIndex.py:236 -msgid "Your email address" -msgstr "Your email address" - -#: admin/PageIndex.py:237 -msgid "Your name" -msgstr "Your name" - -#: admin/PageIndex.py:256 +#: admin/PageIndex.py:202 msgid "Getting started" msgstr "Getting started" -#: admin/PageIndex.py:260 -msgid "Subscribe to mailing lists" +#: admin/PageIndex.py:206 +#, fuzzy +msgid "Visit the mailing list" msgstr "Subscribe to mailing lists" -#: admin/PageIndex.py:268 +#: admin/PageIndex.py:210 msgid "Report a bug" msgstr "Report a bug" -#: admin/PageIndex.py:272 -msgid "Purchase commercial support" -msgstr "Purchase commercial support" - -#: admin/PageIndex.py:276 admin/PageIndex.py:280 +#: admin/PageIndex.py:214 admin/PageIndex.py:218 msgid "About Cherokee" msgstr "About Cherokee" -#: admin/PageIndex.py:289 +#: admin/PageIndex.py:227 msgid "Join the Cherokee Community:" msgstr "Join the Cherokee Community:" -#: admin/PageIndex.py:292 +#: admin/PageIndex.py:230 msgid "Visit the Cherokee Project Website" msgstr "Visit the Cherokee Project Website" -#: admin/PageIndex.py:293 +#: admin/PageIndex.py:231 msgid "Follow us on Twitter" msgstr "Follow us on Twitter" -#: admin/PageIndex.py:294 +#: admin/PageIndex.py:232 msgid "Join us on Facebook" msgstr "Join us on Facebook" -#: admin/PageIndex.py:295 +#: admin/PageIndex.py:233 msgid "Join us on Google+" msgstr "Join us on Google+" -#: admin/PageIndex.py:296 +#: admin/PageIndex.py:234 msgid "Fork us on Github" msgstr "Fork us on Github" -#: admin/PageIndex.py:297 +#: admin/PageIndex.py:235 msgid "Become a member of Cherokee group on LinkedIn" msgstr "Become a member of Cherokee group on LinkedIn" -#: admin/PageIndex.py:298 +#: admin/PageIndex.py:236 msgid "Chat with us at irc.freenode.net" msgstr "Chat with us at irc.freenode.net" -#: admin/PageIndex.py:307 +#: admin/PageIndex.py:245 msgid "Shutdown Cherokee-admin" msgstr "Shutdown Cherokee-admin" -#: admin/PageIndex.py:309 +#: admin/PageIndex.py:247 msgid "Shut down" msgstr "Shut down" -#: admin/PageIndex.py:310 +#: admin/PageIndex.py:248 msgid "You are about to shut down this instance of Cherokee-admin" msgstr "You are about to shut down this instance of Cherokee-admin" -#: admin/PageIndex.py:311 +#: admin/PageIndex.py:249 msgid "Are you sure you want to proceed?" msgstr "Are you sure you want to proceed?" -#: admin/PageIndex.py:314 +#: admin/PageIndex.py:252 msgid "Cherokee-admin has been shut down" msgstr "Cherokee-admin has been shut down" -#: admin/PageIndex.py:316 +#: admin/PageIndex.py:254 msgid "Shut down Cherokee-Admin" msgstr "Shut down Cherokee-Admin" -#: admin/PageIndex.py:329 admin/PageIndex.py:350 +#: admin/PageIndex.py:267 admin/PageIndex.py:288 msgid "Welcome to Cherokee Admin" msgstr "Welcome to Cherokee Admin" @@ -1837,7 +1875,7 @@ msgstr "Manual" msgid "Manual configuration" msgstr "Manual configuration" -#: admin/PageRule.py:249 admin/PageVServer.py:158 +#: admin/PageRule.py:249 admin/PageVServer.py:162 msgid "Final" msgstr "Final" @@ -1865,7 +1903,7 @@ msgstr "Clone" msgid "Clone Selected Behavior Rule" msgstr "Clone Selected Behavior Rule" -#: admin/PageRule.py:314 admin/PageVServer.py:718 +#: admin/PageRule.py:314 admin/PageVServer.py:727 msgid "Behavior" msgstr "Behavior" @@ -2007,7 +2045,7 @@ msgstr "Add new variable" msgid "Source Usage" msgstr "Source Usage" -#: admin/PageSource.py:253 admin/PageVServer.py:723 +#: admin/PageSource.py:253 admin/PageVServer.py:732 msgid "Virtual Server" msgstr "Virtual Server" @@ -2060,7 +2098,7 @@ msgstr "Clone Selected Information Source" msgid "Sources Filtering" msgstr "Sources Filtering" -#: admin/PageSources.py:35 admin/PageVServer.py:141 admin/PageVServers.py:48 +#: admin/PageSources.py:35 admin/PageVServer.py:145 admin/PageVServers.py:48 #: admin/PageVServers.py:294 msgid "Virtual Servers" msgstr "Virtual Servers" @@ -2082,10 +2120,14 @@ msgid "Virtual Server Filtering" msgstr "Virtual Server Filtering" #: admin/PageVServer.py:44 +msgid "Reference" +msgstr "" + +#: admin/PageVServer.py:47 msgid "Nickname for the virtual server." msgstr "Nickname for the virtual server." -#: admin/PageVServer.py:45 +#: admin/PageVServer.py:48 msgid "" "This directive points to the PEM-encoded Certificate file for the server " "(Full path to the file)" @@ -2093,11 +2135,11 @@ msgstr "" "This directive points to the PEM-encoded Certificate file for the server " "(Full path to the file)" -#: admin/PageVServer.py:46 +#: admin/PageVServer.py:49 msgid "PEM-encoded Private Key file for the server (Full path to the file)" msgstr "PEM-encoded Private Key file for the server (Full path to the file)" -#: admin/PageVServer.py:47 +#: admin/PageVServer.py:50 msgid "" "File containing the trusted CA certificates, utilized for checking the " "client certificates (Full path to the file)" @@ -2105,17 +2147,15 @@ msgstr "" "File containing the trusted CA certificates, utilized for checking the " "client certificates (Full path to the file)" -#: admin/PageVServer.py:48 -msgid "" -"Ciphers that TLS/SSL is allowed to use. Reference. (Default enables " -"Forward Secrecy)." -msgstr "" -"Ciphers that TLS/SSL is allowed to use. Reference. (Default enables " -"Forward Secrecy)." +#: admin/PageVServer.py:51 +msgid "Ciphers that TLSv1.2 and below is allowed to use." +msgstr "Ciphers that TLS/SSL is allowed to use." -#: admin/PageVServer.py:49 +#: admin/PageVServer.py:52 +msgid "Ciphersuites that TLSv1.3 is allowed to use." +msgstr "Ciphersuites that TLSv1.3 is allowed to use." + +#: admin/PageVServer.py:53 msgid "" "The cipher sequence that is specified by the server should have preference " "over the client preference. (Default: True)." @@ -2123,7 +2163,7 @@ msgstr "" "The cipher sequence that is specified by the server should have preference " "over the client preference. (Default: True)." -#: admin/PageVServer.py:50 +#: admin/PageVServer.py:54 msgid "" "Explicitly enable or disable serverside compression support. (Default: " "Disabled)." @@ -2131,7 +2171,7 @@ msgstr "" "Explicitly enable or disable serverside compression support. (Default: " "Disabled)." -#: admin/PageVServer.py:51 +#: admin/PageVServer.py:55 msgid "" "Explicitely sets the Diffie-Hellman parameters length. (Default: Let openssl " "choose)." @@ -2139,11 +2179,11 @@ msgstr "" "Explicitely sets the Diffie-Hellman parameters length. (Default: Let openssl " "choose)." -#: admin/PageVServer.py:52 +#: admin/PageVServer.py:56 msgid "Skip, Tolerate, Accept or Require client certificates." msgstr "Skip, Tolerate, Accept or Require client certificates." -#: admin/PageVServer.py:53 +#: admin/PageVServer.py:57 msgid "" "Limit up to which depth certificates in a chain are used during the " "verification procedure (Default: 1)" @@ -2151,11 +2191,11 @@ msgstr "" "Limit up to which depth certificates in a chain are used during the " "verification procedure (Default: 1)" -#: admin/PageVServer.py:54 +#: admin/PageVServer.py:58 msgid "Allows the selection of how to generate the error responses." msgstr "Allows the selection of how to generate the error responses." -#: admin/PageVServer.py:55 +#: admin/PageVServer.py:59 msgid "" "Directory inside the user home directory to use as root web directory. " "Disabled if empty." @@ -2163,19 +2203,19 @@ msgstr "" "Directory inside the user home directory to use as root web directory. " "Disabled if empty." -#: admin/PageVServer.py:56 +#: admin/PageVServer.py:60 msgid "The personal web support is currently turned on." msgstr "The personal web support is currently turned on." -#: admin/PageVServer.py:57 +#: admin/PageVServer.py:61 msgid "Adds a new domain name. Wildcards are allowed in the domain name." msgstr "Adds a new domain name. Wildcards are allowed in the domain name." -#: admin/PageVServer.py:58 +#: admin/PageVServer.py:62 msgid "Virtual Server root directory." msgstr "Virtual Server root directory." -#: admin/PageVServer.py:59 +#: admin/PageVServer.py:63 msgid "" "List of name files that will be used as directory index. Eg: index.html," "index.php." @@ -2183,44 +2223,44 @@ msgstr "" "List of name files that will be used as directory index. Eg: index.html," "index.php." -#: admin/PageVServer.py:60 +#: admin/PageVServer.py:64 msgid "The maximum size, in bytes, for POST uploads. (Default: unlimited)" msgstr "The maximum size, in bytes, for POST uploads. (Default: unlimited)" -#: admin/PageVServer.py:61 +#: admin/PageVServer.py:65 msgid "Whether this virtual server is allowed to use Keep-alive (Default: yes)" msgstr "" "Whether this virtual server is allowed to use Keep-alive (Default: yes)" -#: admin/PageVServer.py:62 +#: admin/PageVServer.py:66 msgid "The Logging is currently enabled." msgstr "The Logging is currently enabled." -#: admin/PageVServer.py:63 +#: admin/PageVServer.py:67 msgid "Logging format. Apache compatible is highly recommended here." msgstr "Logging format. Apache compatible is highly recommended here." -#: admin/PageVServer.py:64 +#: admin/PageVServer.py:68 msgid "Back-end used to store the log accesses." msgstr "Back-end used to store the log accesses." -#: admin/PageVServer.py:65 +#: admin/PageVServer.py:69 msgid "Back-end used to store the log errors." msgstr "Back-end used to store the log errors." -#: admin/PageVServer.py:66 +#: admin/PageVServer.py:70 msgid "Back-end used to store the log accesses and errors." msgstr "Back-end used to store the log accesses and errors." -#: admin/PageVServer.py:67 +#: admin/PageVServer.py:71 msgid "Full path to the file where the information will be saved." msgstr "Full path to the file where the information will be saved." -#: admin/PageVServer.py:68 +#: admin/PageVServer.py:72 msgid "Path to the executable that will be invoked on each log entry." msgstr "Path to the executable that will be invoked on each log entry." -#: admin/PageVServer.py:69 +#: admin/PageVServer.py:73 msgid "" "Whether the logger should read and use the X-Real-IP and X-Forwarded-For " "headers (send by reverse proxies)." @@ -2228,7 +2268,7 @@ msgstr "" "Whether the logger should read and use the X-Real-IP and X-Forwarded-For " "headers (send by reverse proxies)." -#: admin/PageVServer.py:71 +#: admin/PageVServer.py:75 msgid "" "List of IP addresses and subnets that are allowed to send X-Real-IP and X-" "Forwarded-For headers." @@ -2236,21 +2276,21 @@ msgstr "" "List of IP addresses and subnets that are allowed to send X-Real-IP and X-" "Forwarded-For headers." -#: admin/PageVServer.py:72 +#: admin/PageVServer.py:76 msgid "" "How to support the \"Advanced Virtual Hosting\" mechanism. (Default: off)" msgstr "" "How to support the \"Advanced Virtual Hosting\" mechanism. (Default: off)" -#: admin/PageVServer.py:73 +#: admin/PageVServer.py:77 msgid "The following variables are accepted: " msgstr "The following variables are accepted: " -#: admin/PageVServer.py:74 +#: admin/PageVServer.py:78 msgid "Allows the selection of domain matching method." msgstr "Allows the selection of domain matching method." -#: admin/PageVServer.py:75 +#: admin/PageVServer.py:79 msgid "" "Whether or not it should collected statistics about the traffic of this " "virtual server." @@ -2258,11 +2298,11 @@ msgstr "" "Whether or not it should collected statistics about the traffic of this " "virtual server." -#: admin/PageVServer.py:76 +#: admin/PageVServer.py:80 msgid "Time standard to use in the log file entries." msgstr "Time standard to use in the log file entries." -#: admin/PageVServer.py:77 +#: admin/PageVServer.py:81 msgid "" "Remember that only \"File Exists\" rules and \"List & Send\" handlers use " "the Directory Indexes setting." @@ -2270,7 +2310,7 @@ msgstr "" "Remember that only \"File Exists\" rules and \"List & Send\" handlers use " "the Directory Indexes setting." -#: admin/PageVServer.py:78 +#: admin/PageVServer.py:82 msgid "" "Use this nickname as an additional host name for this virtual server " "(Default: yes)" @@ -2278,17 +2318,17 @@ msgstr "" "Use this nickname as an additional host name for this virtual server " "(Default: yes)" -#: admin/PageVServer.py:79 +#: admin/PageVServer.py:83 msgid "Enforce HTTPS by using the HTTP Strict Transport Security." msgstr "Enforce HTTPS by using the HTTP Strict Transport Security." -#: admin/PageVServer.py:80 +#: admin/PageVServer.py:84 msgid "" "How long the client's browser should remember the forced HTTPS (in seconds)." msgstr "" "How long the client's browser should remember the forced HTTPS (in seconds)." -#: admin/PageVServer.py:81 +#: admin/PageVServer.py:85 msgid "" "Should HSTS be used in all the subdomains of this virtual server (Default: " "yes)." @@ -2296,417 +2336,421 @@ msgstr "" "Should HSTS be used in all the subdomains of this virtual server (Default: " "yes)." -#: admin/PageVServer.py:83 +#: admin/PageVServer.py:87 msgid "

The 'default' virtual server matches all the domain names.

" msgstr "

The 'default' virtual server matches all the domain names.

" -#: admin/PageVServer.py:86 +#: admin/PageVServer.py:90 msgid "Remote IP address" msgstr "Remote IP address" -#: admin/PageVServer.py:87 +#: admin/PageVServer.py:91 msgid "Local IP address" msgstr "Local IP address" -#: admin/PageVServer.py:88 +#: admin/PageVServer.py:92 msgid "Request Protocol" msgstr "Request Protocol" -#: admin/PageVServer.py:89 +#: admin/PageVServer.py:93 msgid "Transport type: http or https" msgstr "Transport type: http or https" -#: admin/PageVServer.py:90 +#: admin/PageVServer.py:94 msgid "Port of the server serving the request" msgstr "Port of the server serving the request" -#: admin/PageVServer.py:91 +#: admin/PageVServer.py:95 msgid "The query string, if exists" msgstr "The query string, if exists" -#: admin/PageVServer.py:92 +#: admin/PageVServer.py:96 msgid "First line of HTTP request" msgstr "First line of HTTP request" -#: admin/PageVServer.py:93 +#: admin/PageVServer.py:97 msgid "Response status code" msgstr "Response status code" -#: admin/PageVServer.py:94 +#: admin/PageVServer.py:98 msgid "Time: in common log format time format" msgstr "Time: in common log format time format" -#: admin/PageVServer.py:95 +#: admin/PageVServer.py:99 msgid "Time: seconds since Epoch" msgstr "Time: seconds since Epoch" -#: admin/PageVServer.py:96 +#: admin/PageVServer.py:100 msgid "Time: milliseconds since Epoch" msgstr "Time: milliseconds since Epoch" -#: admin/PageVServer.py:97 +#: admin/PageVServer.py:101 msgid "Remote user (authentication)" msgstr "Remote user (authentication)" -#: admin/PageVServer.py:98 +#: admin/PageVServer.py:102 msgid "URL path requested" msgstr "URL path requested" -#: admin/PageVServer.py:99 +#: admin/PageVServer.py:103 msgid "URL path requested before any rewrite" msgstr "URL path requested before any rewrite" -#: admin/PageVServer.py:100 +#: admin/PageVServer.py:104 msgid "Virtual Server nick name" msgstr "Virtual Server nick name" -#: admin/PageVServer.py:101 +#: admin/PageVServer.py:105 msgid "Requested host (Host: header)" msgstr "Requested host (Host: header)" -#: admin/PageVServer.py:102 +#: admin/PageVServer.py:106 msgid "Size of the response in bytes" msgstr "Size of the response in bytes" -#: admin/PageVServer.py:103 +#: admin/PageVServer.py:107 msgid "'Host:' header of the request" msgstr "'Host:' header of the request" -#: admin/PageVServer.py:104 +#: admin/PageVServer.py:108 msgid "'Referrer:' header of the request" msgstr "'Referrer:' header of the request" -#: admin/PageVServer.py:105 +#: admin/PageVServer.py:109 msgid "'User-Agent:' header of the request" msgstr "'User-Agent:' header of the request" -#: admin/PageVServer.py:106 +#: admin/PageVServer.py:110 msgid "'Cookie:' header of the request" msgstr "'Cookie:' header of the request" -#: admin/PageVServer.py:142 +#: admin/PageVServer.py:146 msgid "Loggers" msgstr "Loggers" -#: admin/PageVServer.py:143 +#: admin/PageVServer.py:147 msgid "SSL cookbook" msgstr "SSL cookbook" -#: admin/PageVServer.py:147 admin/PageVServer.py:184 +#: admin/PageVServer.py:151 admin/PageVServer.py:188 msgid "Match" msgstr "Match" -#: admin/PageVServer.py:147 +#: admin/PageVServer.py:151 msgid "Rule Match" msgstr "Rule Match" -#: admin/PageVServer.py:148 +#: admin/PageVServer.py:152 msgid "Assigned Handler" msgstr "Assigned Handler" -#: admin/PageVServer.py:149 +#: admin/PageVServer.py:153 msgid "Auth" msgstr "Auth" -#: admin/PageVServer.py:150 +#: admin/PageVServer.py:154 msgid "Custom Document Root" msgstr "Custom Document Root" -#: admin/PageVServer.py:150 +#: admin/PageVServer.py:154 msgid "Root" msgstr "Root" -#: admin/PageVServer.py:151 +#: admin/PageVServer.py:155 msgid "Only HTTPS" msgstr "Only HTTPS" -#: admin/PageVServer.py:151 +#: admin/PageVServer.py:155 msgid "Secure" msgstr "Secure" -#: admin/PageVServer.py:152 +#: admin/PageVServer.py:156 msgid "Enc" msgstr "Enc" -#: admin/PageVServer.py:152 +#: admin/PageVServer.py:156 msgid "Encoders" msgstr "Encoders" -#: admin/PageVServer.py:153 +#: admin/PageVServer.py:157 msgid "Cacheable" msgstr "Cacheable" -#: admin/PageVServer.py:154 +#: admin/PageVServer.py:158 msgid "Exp" msgstr "Exp" -#: admin/PageVServer.py:155 +#: admin/PageVServer.py:159 msgid "Connection Timeout" msgstr "Connection Timeout" -#: admin/PageVServer.py:156 +#: admin/PageVServer.py:160 msgid "Shaping" msgstr "Shaping" -#: admin/PageVServer.py:157 +#: admin/PageVServer.py:161 msgid "Log" msgstr "Log" -#: admin/PageVServer.py:157 +#: admin/PageVServer.py:161 msgid "Logging Enabled" msgstr "Logging Enabled" -#: admin/PageVServer.py:158 +#: admin/PageVServer.py:162 msgid "Rule is Final" msgstr "Rule is Final" -#: admin/PageVServer.py:184 +#: admin/PageVServer.py:188 msgid "Match nickname" msgstr "Match nickname" -#: admin/PageVServer.py:188 admin/PageVServer.py:717 +#: admin/PageVServer.py:192 admin/PageVServer.py:726 msgid "Host Match" msgstr "Host Match" -#: admin/PageVServer.py:218 admin/PageVServer.py:234 admin/PageVServer.py:258 -#: admin/PageVServer.py:485 admin/PageVServer.py:519 -#: admin/plugins/method.py:99 admin/plugins/method.py:109 +#: admin/PageVServer.py:222 admin/PageVServer.py:238 admin/PageVServer.py:262 +#: admin/PageVServer.py:489 admin/PageVServer.py:523 admin/plugins/method.py:99 +#: admin/plugins/method.py:109 msgid "Method" msgstr "Method" -#: admin/PageVServer.py:226 admin/PageVServer.py:242 +#: admin/PageVServer.py:230 admin/PageVServer.py:246 msgid "Remove criteria" msgstr "Remove criteria" -#: admin/PageVServer.py:260 +#: admin/PageVServer.py:264 msgid "How to match this Virtual Server" msgstr "How to match this Virtual Server" -#: admin/PageVServer.py:267 +#: admin/PageVServer.py:271 msgid "Add an additional matching criteria" msgstr "Add an additional matching criteria" -#: admin/PageVServer.py:358 +#: admin/PageVServer.py:362 msgid "Behavior Rules" msgstr "Behavior Rules" -#: admin/PageVServer.py:367 +#: admin/PageVServer.py:371 msgid "Rule Management" msgstr "Rule Management" -#: admin/PageVServer.py:393 +#: admin/PageVServer.py:397 msgid "Only accept Secure Connections" msgstr "Only accept Secure Connections" -#: admin/PageVServer.py:398 +#: admin/PageVServer.py:402 msgid "Encoding enabled" msgstr "Encoding enabled" -#: admin/PageVServer.py:404 +#: admin/PageVServer.py:408 msgid "no" msgstr "no" -#: admin/PageVServer.py:415 +#: admin/PageVServer.py:419 msgid " seconds" msgstr " seconds" -#: admin/PageVServer.py:420 +#: admin/PageVServer.py:424 msgid " bytes per second" msgstr " bytes per second" -#: admin/PageVServer.py:425 +#: admin/PageVServer.py:429 msgid "Logging enabled for this rule" msgstr "Logging enabled for this rule" -#: admin/PageVServer.py:430 +#: admin/PageVServer.py:434 msgid "Prevents further rule evaluation" msgstr "Prevents further rule evaluation" -#: admin/PageVServer.py:435 +#: admin/PageVServer.py:439 msgid "Content can be cached" msgstr "Content can be cached" -#: admin/PageVServer.py:438 +#: admin/PageVServer.py:442 msgid "Forbids content caching" msgstr "Forbids content caching" -#: admin/PageVServer.py:455 +#: admin/PageVServer.py:459 msgid "Virtual Server nickname" msgstr "Virtual Server nickname" -#: admin/PageVServer.py:457 +#: admin/PageVServer.py:461 msgid "Server ID" msgstr "Server ID" -#: admin/PageVServer.py:463 +#: admin/PageVServer.py:467 msgid "Directory Indexes" msgstr "Directory Indexes" -#: admin/PageVServer.py:465 admin/plugins/fullpath.py:119 +#: admin/PageVServer.py:469 admin/plugins/fullpath.py:119 msgid "Paths" msgstr "Paths" -#: admin/PageVServer.py:471 +#: admin/PageVServer.py:475 msgid "Neither are in use at the moment." msgstr "Neither are in use at the moment." -#: admin/PageVServer.py:476 +#: admin/PageVServer.py:480 msgid "Keep-alive" msgstr "Keep-alive" -#: admin/PageVServer.py:477 +#: admin/PageVServer.py:481 msgid "Max Upload Size" msgstr "Max Upload Size" -#: admin/PageVServer.py:487 admin/plugins/evhost.py:33 +#: admin/PageVServer.py:491 admin/plugins/evhost.py:33 msgid "Advanced Virtual Hosting" msgstr "Advanced Virtual Hosting" -#: admin/PageVServer.py:521 +#: admin/PageVServer.py:525 msgid "Error Handling hook" msgstr "Error Handling hook" -#: admin/PageVServer.py:532 admin/consts.py:233 admin/consts.py:250 +#: admin/PageVServer.py:536 admin/consts.py:232 admin/consts.py:249 msgid "Disabled" msgstr "Disabled" -#: admin/PageVServer.py:536 +#: admin/PageVServer.py:540 msgid "Write errors to" msgstr "Write errors to" -#: admin/PageVServer.py:540 admin/PageVServer.py:579 +#: admin/PageVServer.py:544 admin/PageVServer.py:583 msgid "Filename" msgstr "Filename" -#: admin/PageVServer.py:542 admin/PageVServer.py:582 +#: admin/PageVServer.py:546 admin/PageVServer.py:586 msgid "Command" msgstr "Command" -#: admin/PageVServer.py:548 +#: admin/PageVServer.py:552 msgid "Error Logging" msgstr "Error Logging" -#: admin/PageVServer.py:559 +#: admin/PageVServer.py:563 msgid "Format" msgstr "Format" -#: admin/PageVServer.py:566 +#: admin/PageVServer.py:570 msgid "Write accesses to" msgstr "Write accesses to" -#: admin/PageVServer.py:589 +#: admin/PageVServer.py:593 msgid "Hide" msgstr "Hide" -#: admin/PageVServer.py:589 +#: admin/PageVServer.py:593 msgid "Show macros" msgstr "Show macros" -#: admin/PageVServer.py:598 +#: admin/PageVServer.py:602 msgid "Template: " msgstr "Template: " -#: admin/PageVServer.py:600 +#: admin/PageVServer.py:604 msgid "Access Logging" msgstr "Access Logging" -#: admin/PageVServer.py:606 +#: admin/PageVServer.py:610 msgid "Time standard" msgstr "Time standard" -#: admin/PageVServer.py:607 admin/PageVServer.py:687 admin/consts.py:228 +#: admin/PageVServer.py:611 admin/PageVServer.py:696 admin/consts.py:227 msgid "Accept" msgstr "Accept" -#: admin/PageVServer.py:607 +#: admin/PageVServer.py:611 msgid "Accept Forwarded IPs" msgstr "Accept Forwarded IPs" -#: admin/PageVServer.py:610 +#: admin/PageVServer.py:614 msgid "Do not check" msgstr "Do not check" -#: admin/PageVServer.py:619 +#: admin/PageVServer.py:623 msgid "Logging Options" msgstr "Logging Options" -#: admin/PageVServer.py:655 admin/wizards/ssl_test.py:136 +#: admin/PageVServer.py:659 admin/wizards/ssl_test.py:136 msgid "Certificate" msgstr "Certificate" -#: admin/PageVServer.py:656 +#: admin/PageVServer.py:660 msgid "Certificate key" msgstr "Certificate key" -#: admin/PageVServer.py:661 +#: admin/PageVServer.py:665 msgid "Required SSL/TLS Values" msgstr "Required SSL/TLS Values" -#: admin/PageVServer.py:666 +#: admin/PageVServer.py:674 +msgid "Ciphersuites" +msgstr "" + +#: admin/PageVServer.py:675 msgid "Ciphers" msgstr "Ciphers" -#: admin/PageVServer.py:667 +#: admin/PageVServer.py:676 msgid "Prefer" msgstr "Prefer" -#: admin/PageVServer.py:667 +#: admin/PageVServer.py:676 msgid "Server Preference" msgstr "Server Preference" -#: admin/PageVServer.py:668 +#: admin/PageVServer.py:677 msgid "Client Certs. Request" msgstr "Client Certs. Request" -#: admin/PageVServer.py:669 +#: admin/PageVServer.py:678 msgid "Compression" msgstr "Compression" -#: admin/PageVServer.py:670 +#: admin/PageVServer.py:679 msgid "DH length" msgstr "DH length" -#: admin/PageVServer.py:673 +#: admin/PageVServer.py:682 msgid "CA List" msgstr "CA List" -#: admin/PageVServer.py:676 +#: admin/PageVServer.py:685 msgid "Verify Depth" msgstr "Verify Depth" -#: admin/PageVServer.py:682 +#: admin/PageVServer.py:691 msgid "Advanced Options" msgstr "Advanced Options" -#: admin/PageVServer.py:687 +#: admin/PageVServer.py:696 msgid "Enable HSTS" msgstr "Enable HSTS" -#: admin/PageVServer.py:690 +#: admin/PageVServer.py:699 msgid "HSTS Max-Age" msgstr "HSTS Max-Age" -#: admin/PageVServer.py:690 +#: admin/PageVServer.py:699 msgid "One year" msgstr "One year" -#: admin/PageVServer.py:691 +#: admin/PageVServer.py:700 msgid "Include Subdomains" msgstr "Include Subdomains" -#: admin/PageVServer.py:691 +#: admin/PageVServer.py:700 msgid "Include all" msgstr "Include all" -#: admin/PageVServer.py:697 +#: admin/PageVServer.py:706 msgid "HTTP Strict Transport Security (HSTS)" msgstr "HTTP Strict Transport Security (HSTS)" -#: admin/PageVServer.py:716 +#: admin/PageVServer.py:725 msgid "Basics" msgstr "Basics" -#: admin/PageVServer.py:719 +#: admin/PageVServer.py:728 msgid "Error Handler" msgstr "Error Handler" @@ -2994,8 +3038,8 @@ msgstr "Product + Platform" msgid "Full Server string" msgstr "Full Server string" -#: admin/consts.py:51 admin/consts.py:80 admin/consts.py:97 -#: admin/consts.py:111 admin/plugins/mysql.py:45 +#: admin/consts.py:51 admin/consts.py:80 admin/consts.py:97 admin/consts.py:111 +#: admin/plugins/mysql.py:45 msgid "None" msgstr "None" @@ -3193,191 +3237,191 @@ msgstr "Dynamic" msgid "Automatic" msgstr "Automatic" -#: admin/consts.py:145 admin/plugins/error_redir.py:35 +#: admin/consts.py:144 admin/plugins/error_redir.py:35 msgid "External" msgstr "External" -#: admin/consts.py:146 admin/plugins/error_redir.py:34 +#: admin/consts.py:145 admin/plugins/error_redir.py:34 msgid "Internal" msgstr "Internal" -#: admin/consts.py:189 admin/plugins/header.py:116 admin/plugins/proxy.py:94 +#: admin/consts.py:188 admin/plugins/header.py:118 admin/plugins/proxy.py:94 #: admin/plugins/proxy.py:144 admin/plugins/redir.py:76 #: admin/plugins/redir.py:106 admin/plugins/request.py:31 #: admin/plugins/url_arg.py:76 admin/plugins/url_arg.py:95 msgid "Regular Expression" msgstr "Regular Expression" -#: admin/consts.py:191 +#: admin/consts.py:190 msgid "File Exists" msgstr "File Exists" -#: admin/consts.py:192 +#: admin/consts.py:191 msgid "HTTP Method" msgstr "HTTP Method" -#: admin/consts.py:193 admin/plugins/bind.py:76 admin/plugins/bind.py:129 +#: admin/consts.py:192 admin/plugins/bind.py:76 admin/plugins/bind.py:129 msgid "Incoming IP/Port" msgstr "Incoming IP/Port" -#: admin/consts.py:194 +#: admin/consts.py:193 msgid "SSL / TLS" msgstr "SSL / TLS" -#: admin/consts.py:195 admin/plugins/fullpath.py:66 +#: admin/consts.py:194 admin/plugins/fullpath.py:66 #: admin/plugins/fullpath.py:101 msgid "Full Path" msgstr "Full Path" -#: admin/consts.py:196 admin/plugins/from.py:71 +#: admin/consts.py:195 admin/plugins/from.py:71 msgid "Connected from" msgstr "Connected from" -#: admin/consts.py:197 +#: admin/consts.py:196 msgid "URL Argument" msgstr "URL Argument" -#: admin/consts.py:198 +#: admin/consts.py:197 msgid "GeoIP" msgstr "GeoIP" -#: admin/consts.py:202 +#: admin/consts.py:201 msgid "Match Nickname" msgstr "Match Nickname" -#: admin/consts.py:203 +#: admin/consts.py:202 msgid "Wildcards" msgstr "Wildcards" -#: admin/consts.py:205 +#: admin/consts.py:204 msgid "Server IP" msgstr "Server IP" -#: admin/consts.py:209 admin/consts.py:255 +#: admin/consts.py:208 admin/consts.py:254 msgid "Not set" msgstr "Not set" -#: admin/consts.py:210 +#: admin/consts.py:209 msgid "Already expired on 1970" msgstr "Already expired on 1970" -#: admin/consts.py:211 +#: admin/consts.py:210 msgid "Do not expire until 2038" msgstr "Do not expire until 2038" -#: admin/consts.py:212 +#: admin/consts.py:211 msgid "Custom value" msgstr "Custom value" -#: admin/consts.py:216 +#: admin/consts.py:215 msgid "No TLS/SSL" msgstr "No TLS/SSL" -#: admin/consts.py:217 +#: admin/consts.py:216 msgid "OpenSSL / libssl" msgstr "OpenSSL / libssl" -#: admin/consts.py:221 admin/util.py:91 +#: admin/consts.py:220 admin/util.py:91 msgid "Off" msgstr "Off" -#: admin/consts.py:222 +#: admin/consts.py:221 msgid "Enhanced Virtual Hosting" msgstr "Enhanced Virtual Hosting" -#: admin/consts.py:226 +#: admin/consts.py:225 msgid "Skip" msgstr "Skip" -#: admin/consts.py:227 +#: admin/consts.py:226 msgid "Tolerate" msgstr "Tolerate" -#: admin/consts.py:229 +#: admin/consts.py:228 msgid "Require" msgstr "Require" -#: admin/consts.py:234 +#: admin/consts.py:233 msgid "RRDtool graphs" msgstr "RRDtool graphs" -#: admin/consts.py:238 +#: admin/consts.py:237 msgid "Local time" msgstr "Local time" -#: admin/consts.py:239 +#: admin/consts.py:238 msgid "UTC: Coordinated Universal Time" msgstr "UTC: Coordinated Universal Time" -#: admin/consts.py:243 +#: admin/consts.py:242 msgid "JSON" msgstr "JSON" -#: admin/consts.py:244 +#: admin/consts.py:243 msgid "Python" msgstr "Python" -#: admin/consts.py:245 admin/wizards/List.py:91 +#: admin/consts.py:244 admin/wizards/List.py:91 msgid "PHP" msgstr "PHP" -#: admin/consts.py:246 +#: admin/consts.py:245 msgid "Ruby" msgstr "Ruby" -#: admin/consts.py:251 +#: admin/consts.py:250 msgid "POST tracker" msgstr "POST tracker" -#: admin/consts.py:256 +#: admin/consts.py:255 msgid "Public" msgstr "Public" -#: admin/consts.py:257 +#: admin/consts.py:256 msgid "Private" msgstr "Private" -#: admin/consts.py:258 +#: admin/consts.py:257 msgid "No Cache" msgstr "No Cache" -#: admin/consts.py:263 +#: admin/consts.py:262 msgid "0 - No compression" msgstr "0 - No compression" -#: admin/consts.py:264 +#: admin/consts.py:263 msgid "1" msgstr "1" -#: admin/consts.py:265 +#: admin/consts.py:264 msgid "2" msgstr "2" -#: admin/consts.py:266 +#: admin/consts.py:265 msgid "3" msgstr "3" -#: admin/consts.py:267 +#: admin/consts.py:266 msgid "4" msgstr "4" -#: admin/consts.py:268 +#: admin/consts.py:267 msgid "5" msgstr "5" -#: admin/consts.py:269 +#: admin/consts.py:268 msgid "6" msgstr "6" -#: admin/consts.py:270 +#: admin/consts.py:269 msgid "7" msgstr "7" -#: admin/consts.py:271 +#: admin/consts.py:270 msgid "8" msgstr "8" -#: admin/consts.py:272 +#: admin/consts.py:271 msgid "9 - Max compression" msgstr "9 - Max compression" @@ -3559,66 +3603,66 @@ msgstr "List of files that should not be listed." msgid "Only listing" msgstr "Only listing" -#: admin/plugins/dirlist.py:49 admin/plugins/dirlist.py:50 #: admin/plugins/dirlist.py:51 admin/plugins/dirlist.py:52 #: admin/plugins/dirlist.py:53 admin/plugins/dirlist.py:54 +#: admin/plugins/dirlist.py:55 admin/plugins/dirlist.py:56 #: admin/plugins/redir.py:105 msgid "Show" msgstr "Show" -#: admin/plugins/dirlist.py:49 +#: admin/plugins/dirlist.py:51 msgid "Show Size" msgstr "Show Size" -#: admin/plugins/dirlist.py:50 +#: admin/plugins/dirlist.py:52 msgid "Show Date" msgstr "Show Date" -#: admin/plugins/dirlist.py:51 +#: admin/plugins/dirlist.py:53 msgid "Show User" msgstr "Show User" -#: admin/plugins/dirlist.py:52 +#: admin/plugins/dirlist.py:54 msgid "Show Group" msgstr "Show Group" -#: admin/plugins/dirlist.py:53 +#: admin/plugins/dirlist.py:55 msgid "Show Backup files" msgstr "Show Backup files" -#: admin/plugins/dirlist.py:54 +#: admin/plugins/dirlist.py:56 msgid "Show Hidden files" msgstr "Show Hidden files" -#: admin/plugins/dirlist.py:55 +#: admin/plugins/dirlist.py:58 admin/plugins/file.py:44 msgid "Allow symbolic links" msgstr "Allow symbolic links" -#: admin/plugins/dirlist.py:56 +#: admin/plugins/dirlist.py:59 msgid "Redirect symbolic links" msgstr "Redirect symbolic links" -#: admin/plugins/dirlist.py:60 +#: admin/plugins/dirlist.py:63 msgid "Listing" msgstr "Listing" -#: admin/plugins/dirlist.py:65 +#: admin/plugins/dirlist.py:68 msgid "Theme" msgstr "Theme" -#: admin/plugins/dirlist.py:66 +#: admin/plugins/dirlist.py:69 msgid "Icons dir" msgstr "Icons dir" -#: admin/plugins/dirlist.py:67 +#: admin/plugins/dirlist.py:70 msgid "Notice files" msgstr "Notice files" -#: admin/plugins/dirlist.py:68 +#: admin/plugins/dirlist.py:71 msgid "Hidden files" msgstr "Hidden files" -#: admin/plugins/dirlist.py:72 +#: admin/plugins/dirlist.py:75 msgid "Theming" msgstr "Theming" @@ -3754,7 +3798,7 @@ msgstr "FastCGI Specific" msgid "Enables an internal I/O cache that improves performance." msgstr "Enables an internal I/O cache that improves performance." -#: admin/plugins/file.py:45 +#: admin/plugins/file.py:49 msgid "File Sending" msgstr "File Sending" @@ -3843,23 +3887,23 @@ msgstr "" "Match against the complete header block, rather than against a concrete " "header entry." -#: admin/plugins/header.py:65 +#: admin/plugins/header.py:67 msgid "Matches a Regular Expression" msgstr "Matches a Regular Expression" -#: admin/plugins/header.py:66 +#: admin/plugins/header.py:68 msgid "Is Provided" msgstr "Is Provided" -#: admin/plugins/header.py:104 +#: admin/plugins/header.py:106 msgid "Full header" msgstr "Full header" -#: admin/plugins/header.py:107 +#: admin/plugins/header.py:109 msgid "Complete Header" msgstr "Complete Header" -#: admin/plugins/header.py:154 +#: admin/plugins/header.py:156 #, python-format msgid "Header %(header)s is provided" msgstr "Header %(header)s is provided" @@ -3982,6 +4026,7 @@ msgid "Database name containing the user/password pair list." msgstr "Database name containing the user/password pair list." #: admin/plugins/mysql.py:41 +#, python-brace-format msgid "" "SQL command to execute. ${user} is replaced with the user name, and " "${passwd} is replaced with the user supplied password." @@ -4410,20 +4455,16 @@ msgstr "Add new wildcard…" msgid "Accepted Domains" msgstr "Accepted Domains" -#: admin/server.py:68 +#: admin/server.py:70 #, python-format msgid "Server %(version)s running.. PID=%(pid)d Port=%(scgi_port)s" msgstr "Server %(version)s running.. PID=%(pid)d Port=%(scgi_port)s" -#: admin/server.py:70 +#: admin/server.py:72 #, python-format msgid "Server %(version)s running.. PID=%(pid)d Socket=%(scgi_port)s" msgstr "Server %(version)s running.. PID=%(pid)d Socket=%(scgi_port)s" -#: admin/server.py:144 -msgid "Incorrect parameters: PORT CONFIG_FILE" -msgstr "Incorrect parameters: PORT CONFIG_FILE" - #: admin/util.py:91 msgid "On" msgstr "On" @@ -4816,18 +4857,16 @@ msgstr "Port running the service in said host. (Example: 8080)" #: admin/wizards/alfresco.py:45 admin/wizards/coldfusion.py:46 #: admin/wizards/concrete5.py:47 admin/wizards/django.py:44 #: admin/wizards/glassfish.py:45 admin/wizards/mailman.py:48 -#: admin/wizards/mono.py:46 admin/wizards/php.py:43 -#: admin/wizards/symfony.py:51 admin/wizards/uwsgi.py:61 -#: admin/wizards/zend.py:47 +#: admin/wizards/mono.py:46 admin/wizards/php.py:43 admin/wizards/symfony.py:51 +#: admin/wizards/uwsgi.py:61 admin/wizards/zend.py:47 msgid "Host name of the virtual server that is about to be created." msgstr "Host name of the virtual server that is about to be created." #: admin/wizards/alfresco.py:46 admin/wizards/coldfusion.py:45 #: admin/wizards/concrete5.py:46 admin/wizards/django.py:43 #: admin/wizards/glassfish.py:46 admin/wizards/mailman.py:47 -#: admin/wizards/mono.py:45 admin/wizards/php.py:42 -#: admin/wizards/symfony.py:50 admin/wizards/uwsgi.py:60 -#: admin/wizards/zend.py:46 +#: admin/wizards/mono.py:45 admin/wizards/php.py:42 admin/wizards/symfony.py:50 +#: admin/wizards/uwsgi.py:60 admin/wizards/zend.py:46 msgid "New Virtual Server Details" msgstr "New Virtual Server Details" @@ -5776,3 +5815,47 @@ msgstr "Does not look like a Zend source directory." #: admin/wizards/zend.py:49 msgid "Web directory where you want Zend to be accessible. (Example: /zend)" msgstr "Web directory where you want Zend to be accessible. (Example: /zend)" + +#~ msgid "Allow SSL v2" +#~ msgstr "Allow SSL v2" + +#, fuzzy +#~ msgid "Disable %s" +#~ msgstr "Disable" + +#~ msgid "Incorrect parameters: PORT CONFIG_FILE" +#~ msgstr "Incorrect parameters: PORT CONFIG_FILE" + +#~ msgid "Mailing List Subscription" +#~ msgstr "Mailing List Subscription" + +#~ msgid "Optionally provide your name" +#~ msgstr "Optionally provide your name" + +#~ msgid "Purchase commercial support" +#~ msgstr "Purchase commercial support" + +#~ msgid "Subscribe" +#~ msgstr "Subscribe" + +#~ msgid "" +#~ "There are a number of Community Mailing Lists\n" +#~ "available for you to subscribe. You can subscribe the General Discussion\n" +#~ "mailing list from this interface. There is where most of the discussions\n" +#~ "take place." +#~ msgstr "" +#~ "There are a number of Community Mailing Lists\n" +#~ "available for you to subscribe. You can subscribe the General Discussion\n" +#~ "mailing list from this interface. There is where most of the discussions\n" +#~ "take place." + +#~ msgid "You will be sent an email requesting confirmation" +#~ msgstr "You will be sent an email requesting confirmation" + +#~ msgid "Your email address" +#~ msgstr "Your email address" + +#~ msgid "Your name" +#~ msgstr "Your name" diff --git a/po/admin/es.po b/po/admin/es.po index 7691e5387..6e83d756a 100644 --- a/po/admin/es.po +++ b/po/admin/es.po @@ -10,9 +10,9 @@ # Taher Shihadeh , 2011. msgid "" msgstr "" -"Project-Id-Version: cherokee '1.0.8'\n" -"Report-Msgid-Bugs-To: http://bugs.cherokee-project.com/\n" -"POT-Creation-Date: 2014-01-04 00:54+0100\n" +"Project-Id-Version: cherokee 1.2.104\n" +"Report-Msgid-Bugs-To: https://github.com/cherokee/webserver/issues\n" +"POT-Creation-Date: 2021-03-26 19:04+0100\n" "PO-Revision-Date: 2011-02-11 17:34+0100\n" "Last-Translator: Taher Shihadeh \n" "Language-Team: Spanish <>\n" @@ -112,7 +112,7 @@ msgstr "Orígenes de datos" msgid "Assign Information Sources" msgstr "Asignar orígenes de datos" -#: admin/Balancer.py:136 admin/PageIndex.py:204 admin/PageRule.py:112 +#: admin/Balancer.py:136 admin/PageIndex.py:182 admin/PageRule.py:112 #: admin/plugins/bind.py:69 admin/plugins/bind.py:121 #: admin/plugins/custom_error.py:41 admin/plugins/method.py:31 msgid "Choose" @@ -147,17 +147,17 @@ msgstr "No se pudo copiar la configuración a" #: admin/CTK/CTK/Druid.py:216 admin/CTK/CTK/Druid.py:224 #: admin/CTK/CTK/Druid.py:232 admin/CTK/CTK/Druid.py:238 admin/Icons.py:362 #: admin/Mime.py:110 admin/PageGeneral.py:289 admin/PageGeneral.py:317 -#: admin/PageIndex.py:232 admin/PageIndex.py:308 admin/PageRule.py:225 -#: admin/PageRule.py:276 admin/PageRule.py:302 admin/PageSource.py:225 -#: admin/PageSource.py:411 admin/PageSource.py:428 admin/PageSource.py:442 -#: admin/PageVServers.py:215 admin/PageVServers.py:252 -#: admin/PageVServers.py:281 admin/plugins/redir.py:120 +#: admin/PageIndex.py:246 admin/PageRule.py:225 admin/PageRule.py:276 +#: admin/PageRule.py:302 admin/PageSource.py:225 admin/PageSource.py:411 +#: admin/PageSource.py:428 admin/PageSource.py:442 admin/PageVServers.py:215 +#: admin/PageVServers.py:252 admin/PageVServers.py:281 +#: admin/plugins/redir.py:120 msgid "Cancel" msgstr "Cancelar" #: admin/CTK/CTK/Dialog.py:165 admin/CTK/CTK/Dialog.py:272 #: admin/CTK/CTK/Druid.py:243 admin/PageException.py:89 -#: admin/PageException.py:93 admin/PageGeneral.py:283 admin/PageIndex.py:277 +#: admin/PageException.py:93 admin/PageGeneral.py:283 admin/PageIndex.py:215 #: admin/PageSource.py:402 admin/plugins/error_redir.py:110 msgid "Close" msgstr "Cerrar" @@ -195,14 +195,14 @@ msgstr "Cargando" #: admin/CTK/CTK/Image.py:99 admin/CgiBase.py:69 admin/CgiBase.py:71 #: admin/CgiBase.py:124 admin/CgiBase.py:125 admin/CgiBase.py:126 #: admin/CgiBase.py:127 admin/CgiBase.py:128 admin/Graph.py:125 -#: admin/PageAdvanced.py:150 admin/PageEntry.py:150 admin/PageEntry.py:159 -#: admin/PageGeneral.py:193 admin/PageSource.py:296 -#: admin/plugins/dirlist.py:56 admin/plugins/exists.py:72 -#: admin/plugins/exists.py:77 admin/plugins/exists.py:78 -#: admin/plugins/exists.py:79 admin/plugins/exists.py:109 -#: admin/plugins/exists.py:115 admin/plugins/exists.py:116 -#: admin/plugins/exists.py:117 admin/plugins/file.py:40 -#: admin/plugins/ldap.py:53 admin/plugins/streaming.py:43 +#: admin/PageAdvanced.py:198 admin/PageEntry.py:150 admin/PageEntry.py:159 +#: admin/PageGeneral.py:193 admin/PageSource.py:296 admin/plugins/dirlist.py:59 +#: admin/plugins/exists.py:72 admin/plugins/exists.py:77 +#: admin/plugins/exists.py:78 admin/plugins/exists.py:79 +#: admin/plugins/exists.py:109 admin/plugins/exists.py:115 +#: admin/plugins/exists.py:116 admin/plugins/exists.py:117 +#: admin/plugins/file.py:42 admin/plugins/ldap.py:53 +#: admin/plugins/streaming.py:43 msgid "Enabled" msgstr "Activo" @@ -220,11 +220,12 @@ msgstr "Anterior" msgid "Optional" msgstr "Opcional" -#: admin/CTK/CTK/ToggleButton.py:154 +#: admin/CTK/CTK/ToggleButton.py:154 admin/PageAdvanced.py:245 +#: admin/PageAdvanced.py:258 msgid "Disable" msgstr "Desactivar" -#: admin/CTK/CTK/ToggleButton.py:155 admin/PageVServer.py:669 +#: admin/CTK/CTK/ToggleButton.py:155 admin/PageVServer.py:678 #: admin/wizards/flcache.py:157 msgid "Enable" msgstr "Activar" @@ -272,7 +273,7 @@ msgstr "" "Si el sistema de registro debería leer y usar la cabecera X-Real-IP y usarla " "en REMOTE_ADDR." -#: admin/CgiBase.py:40 admin/PageVServer.py:70 +#: admin/CgiBase.py:40 admin/PageVServer.py:74 msgid "" "Accept all the X-Real-IP and X-Forwarded-For headers. WARNING: Turn it on " "only if you are centain of what you are doing." @@ -293,11 +294,11 @@ msgstr "" msgid "Read X-Real-IP" msgstr "Aceptar X-Real-IP" -#: admin/CgiBase.py:71 admin/PageVServer.py:610 +#: admin/CgiBase.py:71 admin/PageVServer.py:614 msgid "Don't check origin" msgstr "No comprobar origen" -#: admin/CgiBase.py:73 admin/PageVServer.py:613 +#: admin/CgiBase.py:73 admin/PageVServer.py:617 msgid "Accept from Hosts" msgstr "Aceptar de Hosts" @@ -339,7 +340,7 @@ msgid "Allow X-Sendfile" msgstr "Permitir X-Sendfile" #: admin/CgiBase.py:128 admin/plugins/exists.py:77 admin/plugins/exists.py:115 -#: admin/plugins/file.py:40 +#: admin/plugins/file.py:42 msgid "Use I/O cache" msgstr "Usar caché E/S" @@ -432,7 +433,7 @@ msgstr "" "Si debería recolectar estadísticas sobre el tráfico de este servidor virtual." #: admin/Graph.py:118 admin/PageEntry.py:538 admin/PageSource.py:257 -#: admin/PageStatus.py:70 admin/PageVServer.py:731 admin/PageVServers.py:210 +#: admin/PageStatus.py:70 admin/PageVServer.py:740 admin/PageVServers.py:210 msgid "Unknown" msgstr "Desconocido" @@ -444,7 +445,7 @@ msgstr "Estadísticas de Tráfico" msgid "Allows to specify an alternative Document Root path." msgstr "Permite especificar la ruta de una raíz de doucmentos alternativa." -#: admin/Handler.py:43 admin/PageEntry.py:523 admin/PageVServer.py:462 +#: admin/Handler.py:43 admin/PageEntry.py:523 admin/PageVServer.py:466 #: admin/PageVServers.py:128 admin/wizards/django.py:191 #: admin/wizards/mono.py:199 admin/wizards/php.py:39 admin/wizards/php.py:342 #: admin/wizards/uwsgi.py:267 @@ -456,7 +457,7 @@ msgid "Extension List" msgstr "Lista de extensiones" #: admin/Icons.py:129 admin/Icons.py:328 admin/Mime.py:96 admin/Mime.py:131 -#: admin/consts.py:188 admin/plugins/extensions.py:61 +#: admin/consts.py:187 admin/plugins/extensions.py:61 #: admin/wizards/flcache.py:141 msgid "Extensions" msgstr "Extensiones" @@ -477,12 +478,13 @@ msgstr "Ficheros" msgid "Add New File" msgstr "Añadir nuevo archivo" -#: admin/Icons.py:197 admin/Icons.py:329 admin/Rule.py:174 admin/consts.py:42 -#: admin/consts.py:128 admin/consts.py:262 +#: admin/Icons.py:197 admin/Icons.py:329 admin/PageVServer.py:674 +#: admin/PageVServer.py:675 admin/Rule.py:174 admin/consts.py:42 +#: admin/consts.py:128 admin/consts.py:261 msgid "Default" msgstr "Por defecto" -#: admin/Icons.py:198 admin/Icons.py:330 admin/consts.py:187 +#: admin/Icons.py:198 admin/Icons.py:330 admin/consts.py:186 #: admin/plugins/directory.py:31 msgid "Directory" msgstr "Directorio" @@ -495,7 +497,7 @@ msgstr "Ir al padre" msgid "Modify" msgstr "Modificar" -#: admin/Icons.py:214 admin/PageAdvanced.py:168 admin/PageAdvanced.py:192 +#: admin/Icons.py:214 admin/PageAdvanced.py:216 admin/PageAdvanced.py:316 msgid "Special Files" msgstr "Ficheros especiales" @@ -605,7 +607,7 @@ msgstr "Guardar" msgid "Home" msgstr "Inicio" -#: admin/Page.py:155 admin/PageAdvanced.py:150 admin/PageIndex.py:84 +#: admin/Page.py:155 admin/PageAdvanced.py:198 admin/PageIndex.py:62 #: admin/PageStatus.py:40 admin/PageStatus.py:112 msgid "Status" msgstr "Estado" @@ -622,7 +624,7 @@ msgstr "vServers" msgid "Sources" msgstr "Orígenes" -#: admin/Page.py:159 admin/PageAdvanced.py:97 admin/PageAdvanced.py:198 +#: admin/Page.py:159 admin/PageAdvanced.py:145 admin/PageAdvanced.py:322 msgid "Advanced" msgstr "Avanzado" @@ -634,7 +636,19 @@ msgstr "Ayuda" msgid "Updating..." msgstr "Actualizando..." -#: admin/PageAdvanced.py:64 +#: admin/PageAdvanced.py:56 +msgid "" +"

WARNING: The SSL/TLS back-end supports more recent\n" +"versions of TLS protocols, which are not recognized by Cherokee. Please " +"check\n" +"for latest Cherokee updates or report this issue. As a temporary workaround " +"please\n" +"set 'Max. TLS protocol version' to the maximum TLS protocol version " +"supported by\n" +"Cherokee.

Following unknown TLS protocols have been found:" +msgstr "" + +#: admin/PageAdvanced.py:94 msgid "" "

WARNING: This section contains advanced\n" "configuration parameters. Changing things is not recommended unless\n" @@ -644,17 +658,17 @@ msgstr "" "avanzada. Cambiar algo aquí no está recomendado a menos que sepas realmente " "qué estás haciendo.

" -#: admin/PageAdvanced.py:68 +#: admin/PageAdvanced.py:98 msgid "Defines which thread policy the OS should apply to the server." msgstr "" "Define qué política de hilos de ejecución le debe aplicar el S.O. al " "servidor." -#: admin/PageAdvanced.py:69 +#: admin/PageAdvanced.py:99 msgid "If empty, Cherokee will calculate a default number." msgstr "Si está vacío, Cherokee calculará un valor por defecto." -#: admin/PageAdvanced.py:70 +#: admin/PageAdvanced.py:100 msgid "" "It defines how many file descriptors the server should handle. Default is " "the number showed by ulimit -n" @@ -662,21 +676,21 @@ msgstr "" "Define cuantos descriptores de fichero puede manejar el servidor. Por " "defecto es el número devuelto por ulimit -n" -#: admin/PageAdvanced.py:71 +#: admin/PageAdvanced.py:101 msgid "Allows to choose the internal file descriptor polling method." msgstr "" "Permite elegir el método interno de inspección de descriptores de fichero." -#: admin/PageAdvanced.py:72 +#: admin/PageAdvanced.py:102 msgid "Minimum size of a file to use sendfile(). Default: 32768 Bytes." msgstr "" "Tamaño mínimo de un fichero para usar sendfile(). Por defecto: 32768 bytes." -#: admin/PageAdvanced.py:73 +#: admin/PageAdvanced.py:103 msgid "Maximum size of a file to use sendfile(). Default: 2 GB." msgstr "Tamaño máximo de un fichero para usar sendfile(). Por defecto: 2 GB." -#: admin/PageAdvanced.py:74 +#: admin/PageAdvanced.py:104 msgid "" "Name a program that will be called if, by some reason, the server fails. " "Default: cherokee-panic." @@ -684,15 +698,15 @@ msgstr "" "Nombre del programa que se ejecutará si, por alguna razón, falla el " "servidor. Por defecto: cherokee-panic." -#: admin/PageAdvanced.py:75 +#: admin/PageAdvanced.py:105 msgid "Path of the PID file. If empty, the file will not be created." msgstr "Ruta del fichero PID. Vacío, el fichero no se creará." -#: admin/PageAdvanced.py:76 +#: admin/PageAdvanced.py:106 msgid "Max. length of the incoming connection queue." msgstr "Máxima longitud de la cola de conexiones entrantes." -#: admin/PageAdvanced.py:77 +#: admin/PageAdvanced.py:107 msgid "" "Set the number of how many internal connections can be held for reuse by " "each thread. Default: 20." @@ -700,18 +714,18 @@ msgstr "" "Número de conexiones internas que se mantendrán para reutilizar por cada " "hilo. Por defecto: 20." -#: admin/PageAdvanced.py:78 +#: admin/PageAdvanced.py:108 msgid "" "Sets the number of seconds between log consolidations (flushes). Default: 10 " "seconds." msgstr "" "Número de segundos entre volcados del registro. Por defecto: 10 segundos." -#: admin/PageAdvanced.py:79 +#: admin/PageAdvanced.py:109 msgid "Time lapse (in seconds) between Nonce cache clean ups." msgstr "Tiempo (en segundos) entre limpiezas de la cache de 'Nonce's" -#: admin/PageAdvanced.py:80 +#: admin/PageAdvanced.py:110 msgid "" "Enables the server-wide keep-alive support. It increases the performance. It " "is usually set on." @@ -719,38 +733,38 @@ msgstr "" "Habilita el soporte global de keep-alive. Mejora el rendimiento. Normalmente " "habilitado." -#: admin/PageAdvanced.py:81 +#: admin/PageAdvanced.py:111 msgid "" "Maximum number of HTTP requests that can be served by each keepalive " "connection." msgstr "" "Número máximo de solicitudes HTTP que se pueden por cada conexión keepalive." -#: admin/PageAdvanced.py:82 +#: admin/PageAdvanced.py:112 msgid "" "Allows the server to use Chunked encoding to try to keep Keep-Alive enabled." msgstr "" "Permite al servidor usar Chunked encoding para mantener Keep-Alive activado." -#: admin/PageAdvanced.py:83 +#: admin/PageAdvanced.py:113 msgid "Activate or deactivate the I/O cache globally." msgstr "Activa o desactiva globalmente la caché de E/S." -#: admin/PageAdvanced.py:84 +#: admin/PageAdvanced.py:114 msgid "Number of pages that the cache should handle." msgstr "Número de páginas que el caché debe gestionar." -#: admin/PageAdvanced.py:85 +#: admin/PageAdvanced.py:115 #, fuzzy msgid "Files under this size (in bytes) will not be cached." msgstr "Mínimo tamaño de fichero que será cacheado." -#: admin/PageAdvanced.py:86 +#: admin/PageAdvanced.py:116 #, fuzzy msgid "Files over this size (in bytes) will not be cached." msgstr "Máximo tamaño de fichero que será cacheado." -#: admin/PageAdvanced.py:87 +#: admin/PageAdvanced.py:117 msgid "" "How long (in seconds) the file information should last cached without " "refreshing it." @@ -758,172 +772,231 @@ msgstr "" "Cuánto tiempo debe mantenerse cacheada la información de fichero antes de " "refrescarla." -#: admin/PageAdvanced.py:88 +#: admin/PageAdvanced.py:118 msgid "How long (in seconds) the file content should last cached." msgstr "" "Cuánto tiempo (en segundos) debe mantenerse cacheado el contenido de un " "fichero." -#: admin/PageAdvanced.py:89 +#: admin/PageAdvanced.py:119 msgid "Path to a Diffie Hellman (DH) parameters PEM file: 512 bits." msgstr "Ruta al fichero de parámetros PEM Diffie Hellman (DH): 512 bits" -#: admin/PageAdvanced.py:90 +#: admin/PageAdvanced.py:120 msgid "Path to a Diffie Hellman (DH) parameters PEM file: 1024 bits." msgstr "Ruta al fichero de parámetros PEM Diffie Hellman (DH): 1024 bits" -#: admin/PageAdvanced.py:91 +#: admin/PageAdvanced.py:121 msgid "Path to a Diffie Hellman (DH) parameters PEM file: 2048 bits." msgstr "Ruta al fichero de parámetros PEM Diffie Hellman (DH): 2048 bits" -#: admin/PageAdvanced.py:92 +#: admin/PageAdvanced.py:122 msgid "Path to a Diffie Hellman (DH) parameters PEM file: 4096 bits." msgstr "Ruta al fichero de parámetros PEM Diffie Hellman (DH): 4096 bits" -#: admin/PageAdvanced.py:93 +#: admin/PageAdvanced.py:123 +msgid "Your Cherokee Web Server does not support SSL/TLS encryption." +msgstr "" + +#: admin/PageAdvanced.py:124 msgid "Timeout for the TLS/SSL handshake. Default: 15 seconds." msgstr "" "Tiempo de espera para la negociación TLS/SSL. Por defecto: 15 segundos." -#: admin/PageAdvanced.py:94 +#: admin/PageAdvanced.py:125 +msgid "Beware: it is vulnerable. You should disable SSLv2." +msgstr "" + +#: admin/PageAdvanced.py:126 +msgid "Beware: it is vulnerable. You should disable SSLv3." +msgstr "" + +#: admin/PageAdvanced.py:127 +msgid "TLSv1 is deprecated" +msgstr "" + +#: admin/PageAdvanced.py:128 +msgid "TLSv1.1 is deprecated" +msgstr "" + +#: admin/PageAdvanced.py:129 admin/PageAdvanced.py:130 +msgid " " +msgstr "" + +#: admin/PageAdvanced.py:131 +msgid "" +"The following options work in combination with above min/max TLS protocol " +"version settings. They are deprecated, only set the minimum and maximum " +"supported protocol versions instead." +msgstr "" + +#: admin/PageAdvanced.py:133 +msgid "" +"Minimum required TLS protocol version from clients (Default: auto-configured " +"by libssl)" +msgstr "" + +#: admin/PageAdvanced.py:134 msgid "" -"Allow clients to use SSL version 2 - Beware: it is vulnerable. (Default: No)" +"Maximum supported TLS protocol version (Default: auto-configured by libssl)" msgstr "" -"Permitir que los clientes utilizen SSL version 2 - Cuidado: es vulnerable. " -"(Por defecto: No)" -#: admin/PageAdvanced.py:119 admin/PageAdvanced.py:121 +#: admin/PageAdvanced.py:167 admin/PageAdvanced.py:169 msgid "Allowed" msgstr "Permitir" -#: admin/PageAdvanced.py:119 +#: admin/PageAdvanced.py:167 msgid "Keep Alive" msgstr "Keep Alive" -#: admin/PageAdvanced.py:120 +#: admin/PageAdvanced.py:168 msgid "Max keepalive reqs" msgstr "Máx. solict. keepalive" -#: admin/PageAdvanced.py:121 +#: admin/PageAdvanced.py:169 msgid "Chunked Encoding" msgstr "Chunked Encoding" -#: admin/PageAdvanced.py:122 +#: admin/PageAdvanced.py:170 msgid "Polling Method" msgstr "Método de inspección" -#: admin/PageAdvanced.py:123 +#: admin/PageAdvanced.py:171 msgid "Sendfile min size" msgstr "Tam. Mín. Sendfile" -#: admin/PageAdvanced.py:124 +#: admin/PageAdvanced.py:172 msgid "Sendfile max size" msgstr "Tam. Máx. Sendfile" -#: admin/PageAdvanced.py:126 admin/PageAdvanced.py:189 +#: admin/PageAdvanced.py:174 admin/PageAdvanced.py:313 msgid "Connections" msgstr "Conexiones" -#: admin/PageAdvanced.py:134 +#: admin/PageAdvanced.py:182 msgid "Thread Number" msgstr "Número de hilos" -#: admin/PageAdvanced.py:135 +#: admin/PageAdvanced.py:183 msgid "Thread Policy" msgstr "Política de hilos" -#: admin/PageAdvanced.py:136 +#: admin/PageAdvanced.py:184 msgid "File descriptors" msgstr "Descriptores de fichero" -#: admin/PageAdvanced.py:137 +#: admin/PageAdvanced.py:185 msgid "Listening queue length" msgstr "Longitud de la cola de listen()" -#: admin/PageAdvanced.py:138 admin/plugins/proxy.py:239 +#: admin/PageAdvanced.py:186 admin/plugins/proxy.py:239 msgid "Reuse connections" msgstr "Reusar conexiones" -#: admin/PageAdvanced.py:139 +#: admin/PageAdvanced.py:187 msgid "Log flush time" msgstr "Tiempo volcado del registro" -#: admin/PageAdvanced.py:140 +#: admin/PageAdvanced.py:188 msgid "Nonces clean up time" msgstr "Tiempo de limpieza de Nonces" -#: admin/PageAdvanced.py:142 admin/PageAdvanced.py:190 +#: admin/PageAdvanced.py:190 admin/PageAdvanced.py:314 msgid "Resources" msgstr "Recursos" -#: admin/PageAdvanced.py:151 +#: admin/PageAdvanced.py:199 msgid "Max pages" msgstr "Máx. num. pág." -#: admin/PageAdvanced.py:152 +#: admin/PageAdvanced.py:200 msgid "File Min Size" msgstr "Mín. Tam. Fichero" -#: admin/PageAdvanced.py:153 +#: admin/PageAdvanced.py:201 msgid "File Max Size" msgstr "Máx. Tam. Fichero" -#: admin/PageAdvanced.py:154 +#: admin/PageAdvanced.py:202 msgid "Lasting: stat" msgstr "Duración: stat" -#: admin/PageAdvanced.py:155 +#: admin/PageAdvanced.py:203 msgid "Lasting: mmap" msgstr "Duración: mmap" -#: admin/PageAdvanced.py:157 admin/PageAdvanced.py:191 +#: admin/PageAdvanced.py:205 admin/PageAdvanced.py:315 msgid "I/O cache" msgstr "Caché E/S" -#: admin/PageAdvanced.py:165 +#: admin/PageAdvanced.py:213 msgid "Panic action" msgstr "Acción de pánico" -#: admin/PageAdvanced.py:166 +#: admin/PageAdvanced.py:214 msgid "PID file" msgstr "Fichero PID" -#: admin/PageAdvanced.py:176 admin/PageEntry.py:84 admin/PageVServer.py:476 -#: admin/plugins/common.py:42 admin/plugins/common.py:43 -#: admin/plugins/dirlist.py:55 admin/plugins/proxy.py:240 -msgid "Allow" -msgstr "Permitir" +#: admin/PageAdvanced.py:245 admin/PageAdvanced.py:247 +#: admin/PageAdvanced.py:258 admin/PageAdvanced.py:260 +#, fuzzy +msgid "Disable " +msgstr "Desactivar" -#: admin/PageAdvanced.py:176 -msgid "Allow SSL v2" -msgstr "Permitir SSL v2" +#: admin/PageAdvanced.py:247 +msgid "Protocol deacrivated" +msgstr "" + +#: admin/PageAdvanced.py:247 +msgid "Protocol not supported" +msgstr "" + +#: admin/PageAdvanced.py:260 +msgid "Protocol deactivated" +msgstr "" -#: admin/PageAdvanced.py:177 +#: admin/PageAdvanced.py:262 +msgid "Turn off selected TLS Protocols (Deprecated)" +msgstr "" + +#: admin/PageAdvanced.py:270 admin/PageAdvanced.py:271 +msgid "auto-configured" +msgstr "" + +#: admin/PageAdvanced.py:285 +msgid "Min. TLS protocol version" +msgstr "" + +#: admin/PageAdvanced.py:290 +msgid "Max. TLS protocol version" +msgstr "" + +#: admin/PageAdvanced.py:291 msgid "Handshake Timeout" msgstr "Tiempo de espera de la negociación" -#: admin/PageAdvanced.py:178 +#: admin/PageAdvanced.py:292 msgid "DH parameters: 512 bits" msgstr "Parámetros DH: 512 bits" -#: admin/PageAdvanced.py:179 +#: admin/PageAdvanced.py:293 msgid "DH parameters: 1024 bits" msgstr "Parámetros DH: 1024 bits" -#: admin/PageAdvanced.py:180 +#: admin/PageAdvanced.py:294 msgid "DH parameters: 2048 bits" msgstr "Parámetros DH: 2048 bits" -#: admin/PageAdvanced.py:181 +#: admin/PageAdvanced.py:295 msgid "DH parameters: 4096 bits" msgstr "Parámetros DH: 4096 bits" -#: admin/PageAdvanced.py:183 admin/PageAdvanced.py:193 -#: admin/PageGeneral.py:239 admin/plugins/bind.py:92 +#: admin/PageAdvanced.py:296 admin/PageAdvanced.py:317 admin/PageGeneral.py:239 +#: admin/plugins/bind.py:92 msgid "TLS" msgstr "TLS" -#: admin/PageAdvanced.py:199 +#: admin/PageAdvanced.py:323 msgid "Advanced Configuration" msgstr "Configuración avanzada" @@ -1028,7 +1101,7 @@ msgstr "Codificador GZip" msgid "Deflate encoder" msgstr "Deflate" -#: admin/PageEntry.py:78 admin/PageEntry.py:173 admin/PageVServer.py:149 +#: admin/PageEntry.py:78 admin/PageEntry.py:173 admin/PageVServer.py:153 msgid "Authentication" msgstr "Autenticación" @@ -1038,7 +1111,13 @@ msgstr "Lista de autenticación" #: admin/PageEntry.py:83 admin/PageEntry.py:89 msgid "Leave unset" -msgstr "Dejar sin especificar" +msgstr "" + +#: admin/PageEntry.py:84 admin/PageVServer.py:480 admin/plugins/common.py:42 +#: admin/plugins/common.py:43 admin/plugins/dirlist.py:58 +#: admin/plugins/file.py:44 admin/plugins/proxy.py:240 +msgid "Allow" +msgstr "" #: admin/PageEntry.py:85 msgid "Forbid" @@ -1067,7 +1146,7 @@ msgstr "" msgid "Remove" msgstr "Eliminar" -#: admin/PageEntry.py:126 admin/PageVServer.py:155 +#: admin/PageEntry.py:126 admin/PageVServer.py:159 #: admin/plugins/secdownload.py:44 msgid "Timeout" msgstr "Tiempo de Espera" @@ -1080,7 +1159,7 @@ msgstr "Tiempo de espera de las conexiones" msgid "Limit traffic to" msgstr "Limitar tráfico a" -#: admin/PageEntry.py:139 admin/PageVServer.py:156 +#: admin/PageEntry.py:139 admin/PageVServer.py:160 msgid "Traffic Shaping" msgstr "Gestión de tráfico" @@ -1088,7 +1167,7 @@ msgstr "Gestión de tráfico" msgid "Skip Logging" msgstr "No guardar registro" -#: admin/PageEntry.py:154 admin/PageVServer.py:720 +#: admin/PageEntry.py:154 admin/PageVServer.py:729 msgid "Logging" msgstr "Registro" @@ -1112,14 +1191,14 @@ msgstr "Mecanismo de validación" msgid "Can not be empty" msgstr "No puede estar vacío " -#: admin/PageEntry.py:216 admin/PageEntry.py:268 admin/consts.py:190 -#: admin/plugins/header.py:110 admin/plugins/header.py:151 -#: admin/plugins/header.py:156 admin/plugins/proxy.py:193 +#: admin/PageEntry.py:216 admin/PageEntry.py:268 admin/consts.py:189 +#: admin/plugins/header.py:112 admin/plugins/header.py:153 +#: admin/plugins/header.py:158 admin/plugins/proxy.py:193 msgid "Header" msgstr "Cabecera" #: admin/PageEntry.py:216 admin/PageSource.py:284 -#: admin/plugins/error_redir.py:105 admin/plugins/header.py:113 +#: admin/plugins/error_redir.py:105 admin/plugins/header.py:115 #: admin/plugins/redir.py:76 msgid "Type" msgstr "Tipo" @@ -1136,7 +1215,7 @@ msgstr "Acción" msgid "Add New Header" msgstr "Añadir nueva cabecera" -#: admin/PageEntry.py:326 admin/consts.py:204 admin/plugins/redir.py:39 +#: admin/PageEntry.py:326 admin/consts.py:203 admin/plugins/redir.py:39 #: admin/plugins/rehost.py:53 msgid "Regular Expressions" msgstr "Expresiones Regulares" @@ -1154,8 +1233,7 @@ msgstr "" msgid "Caching Policy" msgstr "" -#: admin/PageEntry.py:381 admin/plugins/rehost.py:68 -#: admin/plugins/rehost.py:92 +#: admin/PageEntry.py:381 admin/plugins/rehost.py:68 admin/plugins/rehost.py:92 msgid "New Regular Expression" msgstr "Nueva expresión regular" @@ -1163,7 +1241,7 @@ msgstr "Nueva expresión regular" msgid "Disregarded Cookies" msgstr "" -#: admin/PageEntry.py:402 admin/PageVServer.py:154 +#: admin/PageEntry.py:402 admin/PageVServer.py:158 msgid "Expiration" msgstr "Caducidad" @@ -1195,7 +1273,7 @@ msgstr "Proxis revalidan" msgid "Content Expiration" msgstr "Caducidad del contenido" -#: admin/PageEntry.py:433 admin/PageVServer.py:153 +#: admin/PageEntry.py:433 admin/PageVServer.py:157 #, fuzzy msgid "Cache" msgstr "Sin Caché" @@ -1218,7 +1296,7 @@ msgid "Matching Rule" msgstr "Aplicar regla" #: admin/PageEntry.py:514 admin/PageEntry.py:528 admin/PageEntry.py:553 -#: admin/PageVServer.py:148 +#: admin/PageVServer.py:152 msgid "Handler" msgstr "Gestor" @@ -1236,7 +1314,7 @@ msgstr "No transformar" msgid "Caching" msgstr "Aplicar regla" -#: admin/PageEntry.py:556 admin/PageVServer.py:721 +#: admin/PageEntry.py:556 admin/PageVServer.py:730 msgid "Security" msgstr "Seguridad" @@ -1501,7 +1579,7 @@ msgstr "IPv6" msgid "SSL/TLS back-end" msgstr "Motor SSL/TLS" -#: admin/PageGeneral.py:197 admin/PageIndex.py:252 +#: admin/PageGeneral.py:197 admin/PageIndex.py:198 msgid "Support" msgstr "Soporte" @@ -1534,8 +1612,8 @@ msgid "Bind to" msgstr "Escuchar en" #: admin/PageGeneral.py:239 admin/PageGeneral.py:310 admin/plugins/bind.py:92 -#: admin/plugins/bind.py:155 admin/plugins/bind.py:157 -#: admin/plugins/ldap.py:48 admin/plugins/mysql.py:77 +#: admin/plugins/bind.py:155 admin/plugins/bind.py:157 admin/plugins/ldap.py:48 +#: admin/plugins/mysql.py:77 msgid "Port" msgstr "Puerto" @@ -1599,7 +1677,7 @@ msgstr "Grupo" msgid "Chroot" msgstr "Chroot" -#: admin/PageGeneral.py:357 admin/PageVServer.py:479 +#: admin/PageGeneral.py:357 admin/PageVServer.py:483 msgid "Network" msgstr "Red" @@ -1627,173 +1705,131 @@ msgstr "Índice de contenidos" msgid "Documentation" msgstr "Documentación" -#: admin/PageIndex.py:67 -msgid "You will be sent an email requesting confirmation" -msgstr "Recibirá un correo solicitando confirmación" - -#: admin/PageIndex.py:68 -msgid "Optionally provide your name" -msgstr "Opcionalmente proporcione su nombre" - -#: admin/PageIndex.py:70 -#, fuzzy, python-format -msgid "" -"There are a number of Community Mailing Lists\n" -"available for you to subscribe. You can subscribe the General Discussion\n" -"mailing list from this interface. There is where most of the discussions\n" -"take place." -msgstr "" -"Puede suscribirse a una serie de listas\n" -"de correo de la comunidad de Cherokee. Se puede suscribir a la lista\n" -"de discusión general desde esta interface. Es donde se poduce la ayor parte\n" -"de las conversaciones." - -#: admin/PageIndex.py:77 +#: admin/PageIndex.py:58 msgid "Server is Running" msgstr "Servidor en ejecución." -#: admin/PageIndex.py:78 +#: admin/PageIndex.py:59 msgid "Server is not Running" msgstr "El servidor no está en ejecución." -#: admin/PageIndex.py:132 +#: admin/PageIndex.py:110 msgid "Stop Server" msgstr "Parar el servidor" -#: admin/PageIndex.py:136 +#: admin/PageIndex.py:114 msgid "Start Server" msgstr "Lanzar el servidor" -#: admin/PageIndex.py:141 +#: admin/PageIndex.py:119 msgid "Hostname" msgstr "Nombre de servidor" -#: admin/PageIndex.py:143 +#: admin/PageIndex.py:121 msgid "Modified" msgstr "Modificado" -#: admin/PageIndex.py:145 +#: admin/PageIndex.py:123 msgid "Not found" msgstr "No encontrado" -#: admin/PageIndex.py:146 +#: admin/PageIndex.py:124 msgid "Config File" msgstr "Fichero de configuración" -#: admin/PageIndex.py:153 admin/plugins/server_info.py:32 +#: admin/PageIndex.py:131 admin/plugins/server_info.py:32 #: admin/plugins/server_info.py:35 msgid "Server Information" msgstr "Información del servidor" -#: admin/PageIndex.py:165 +#: admin/PageIndex.py:143 msgid "Processors" msgstr "Procesadores" -#: admin/PageIndex.py:177 +#: admin/PageIndex.py:155 msgid "Memory" msgstr "Memoria" -#: admin/PageIndex.py:211 admin/plugins/dbslayer.py:51 +#: admin/PageIndex.py:189 admin/plugins/dbslayer.py:51 msgid "Language" msgstr "Lenguaje" -#: admin/PageIndex.py:231 -msgid "Mailing List Subscription" -msgstr "Suscripción a la lista de correo" - -#: admin/PageIndex.py:233 -msgid "Subscribe" -msgstr "Suscribirse" - -#: admin/PageIndex.py:236 -msgid "Your email address" -msgstr "Su dirección de correo" - -#: admin/PageIndex.py:237 -msgid "Your name" -msgstr "Su nombre" - -#: admin/PageIndex.py:256 +#: admin/PageIndex.py:202 msgid "Getting started" msgstr "Introducción" -#: admin/PageIndex.py:260 -msgid "Subscribe to mailing lists" +#: admin/PageIndex.py:206 +#, fuzzy +msgid "Visit the mailing list" msgstr "Suscripción a listas de correo" -#: admin/PageIndex.py:268 +#: admin/PageIndex.py:210 msgid "Report a bug" msgstr "Informar de un problema" -#: admin/PageIndex.py:272 -msgid "Purchase commercial support" -msgstr "Soporte comercial" - -#: admin/PageIndex.py:276 admin/PageIndex.py:280 +#: admin/PageIndex.py:214 admin/PageIndex.py:218 msgid "About Cherokee" msgstr "Acerca de Cherokee" -#: admin/PageIndex.py:289 +#: admin/PageIndex.py:227 msgid "Join the Cherokee Community:" msgstr "Únete a la comudidad de Cherokee" -#: admin/PageIndex.py:292 +#: admin/PageIndex.py:230 msgid "Visit the Cherokee Project Website" msgstr "Visita el sitio web de Cherokee" -#: admin/PageIndex.py:293 +#: admin/PageIndex.py:231 msgid "Follow us on Twitter" msgstr "Síguenos en Twitter" -#: admin/PageIndex.py:294 +#: admin/PageIndex.py:232 msgid "Join us on Facebook" msgstr "Síguenos en Twitter" -#: admin/PageIndex.py:295 +#: admin/PageIndex.py:233 #, fuzzy msgid "Join us on Google+" msgstr "Síguenos en Twitter" -#: admin/PageIndex.py:296 +#: admin/PageIndex.py:234 msgid "Fork us on Github" msgstr "" -#: admin/PageIndex.py:297 +#: admin/PageIndex.py:235 msgid "Become a member of Cherokee group on LinkedIn" msgstr "Únete al grupo de Cherokee de LinkedIn" -#: admin/PageIndex.py:298 +#: admin/PageIndex.py:236 msgid "Chat with us at irc.freenode.net" msgstr "Charla con nosotros en irc.freenode.net" -#: admin/PageIndex.py:307 +#: admin/PageIndex.py:245 msgid "Shutdown Cherokee-admin" msgstr "Cerrar Cherokee-Admin" -#: admin/PageIndex.py:309 +#: admin/PageIndex.py:247 msgid "Shut down" msgstr "Apagar" -#: admin/PageIndex.py:310 +#: admin/PageIndex.py:248 msgid "You are about to shut down this instance of Cherokee-admin" msgstr "Está a punto de terminar esta instancia de Cherokee-admin" -#: admin/PageIndex.py:311 +#: admin/PageIndex.py:249 #, fuzzy msgid "Are you sure you want to proceed?" msgstr "¿Está seguro de querer continuar?" -#: admin/PageIndex.py:314 +#: admin/PageIndex.py:252 msgid "Cherokee-admin has been shut down" msgstr "Se ha cerrado Cherokee-admin" -#: admin/PageIndex.py:316 +#: admin/PageIndex.py:254 msgid "Shut down Cherokee-Admin" msgstr "Cerrar Cherokee-Admin" -#: admin/PageIndex.py:329 admin/PageIndex.py:350 +#: admin/PageIndex.py:267 admin/PageIndex.py:288 msgid "Welcome to Cherokee Admin" msgstr "Bienvenido a Cherokee-Admin" @@ -1881,7 +1917,7 @@ msgstr "Manual" msgid "Manual configuration" msgstr "Configuración manual" -#: admin/PageRule.py:249 admin/PageVServer.py:158 +#: admin/PageRule.py:249 admin/PageVServer.py:162 msgid "Final" msgstr "Final" @@ -1909,7 +1945,7 @@ msgstr "Clonar" msgid "Clone Selected Behavior Rule" msgstr "Clonar la regla seleccionada" -#: admin/PageRule.py:314 admin/PageVServer.py:718 +#: admin/PageRule.py:314 admin/PageVServer.py:727 msgid "Behavior" msgstr "Comportamiento" @@ -2056,7 +2092,7 @@ msgstr "Añadir nueva variable" msgid "Source Usage" msgstr "Orígenes" -#: admin/PageSource.py:253 admin/PageVServer.py:723 +#: admin/PageSource.py:253 admin/PageVServer.py:732 msgid "Virtual Server" msgstr "Servidor Virtual" @@ -2111,7 +2147,7 @@ msgstr "Clonar el orígen de datos seleccionado" msgid "Sources Filtering" msgstr "Filtrado de orígenes de datos" -#: admin/PageSources.py:35 admin/PageVServer.py:141 admin/PageVServers.py:48 +#: admin/PageSources.py:35 admin/PageVServer.py:145 admin/PageVServers.py:48 #: admin/PageVServers.py:294 msgid "Virtual Servers" msgstr "Servidores virtuales" @@ -2133,10 +2169,14 @@ msgid "Virtual Server Filtering" msgstr "Filtrado de servidores virtuales" #: admin/PageVServer.py:44 +msgid "Reference" +msgstr "" + +#: admin/PageVServer.py:47 msgid "Nickname for the virtual server." msgstr "Nombre para el servidor virtual." -#: admin/PageVServer.py:45 +#: admin/PageVServer.py:48 msgid "" "This directive points to the PEM-encoded Certificate file for the server " "(Full path to the file)" @@ -2144,13 +2184,13 @@ msgstr "" "Ruta completa al fichero en formato PEM que contiene el Certificado para el " "servidor" -#: admin/PageVServer.py:46 +#: admin/PageVServer.py:49 msgid "PEM-encoded Private Key file for the server (Full path to the file)" msgstr "" "Ruta completa al fichero en formato PEM que contiene el Clave Privada para " "el servidor" -#: admin/PageVServer.py:47 +#: admin/PageVServer.py:50 msgid "" "File containing the trusted CA certificates, utilized for checking the " "client certificates (Full path to the file)" @@ -2158,41 +2198,38 @@ msgstr "" "Fichero que contiene los certificados de CA confiables, usadas para " "verificar los certificados de los clientes (Ruta completa al fichero)" -#: admin/PageVServer.py:48 -#, fuzzy -msgid "" -"Ciphers that TLS/SSL is allowed to use. Reference. (Default enables " -"Forward Secrecy)." +#: admin/PageVServer.py:51 +msgid "Ciphers that TLSv1.2 and below is allowed to use." +msgstr "Tipos de cifrado permitidos para TLS/SSL." + +#: admin/PageVServer.py:52 +msgid "Ciphersuites that TLSv1.3 is allowed to use." msgstr "" -"Tipos de cifrado permitidos para TLS/SSL. Referencia. (Predeterminado: " -"todos los soportados por la versión de OpenSSL instalada)." -#: admin/PageVServer.py:49 +#: admin/PageVServer.py:53 msgid "" "The cipher sequence that is specified by the server should have preference " "over the client preference. (Default: True)." msgstr "" -#: admin/PageVServer.py:50 +#: admin/PageVServer.py:54 msgid "" "Explicitly enable or disable serverside compression support. (Default: " "Disabled)." msgstr "" -#: admin/PageVServer.py:51 +#: admin/PageVServer.py:55 msgid "" "Explicitely sets the Diffie-Hellman parameters length. (Default: Let openssl " "choose)." msgstr "" -#: admin/PageVServer.py:52 +#: admin/PageVServer.py:56 #, fuzzy msgid "Skip, Tolerate, Accept or Require client certificates." msgstr "Saltar, Aceptar o Requerir certificados de clientes." -#: admin/PageVServer.py:53 +#: admin/PageVServer.py:57 msgid "" "Limit up to which depth certificates in a chain are used during the " "verification procedure (Default: 1)" @@ -2200,11 +2237,11 @@ msgstr "" "Profundidad máxima de la cadena de certificados usados durante el proceso de " "verificación (Predeterminado: 1)" -#: admin/PageVServer.py:54 +#: admin/PageVServer.py:58 msgid "Allows the selection of how to generate the error responses." msgstr "Permite seleccionar cómo generar las repuestas de error." -#: admin/PageVServer.py:55 +#: admin/PageVServer.py:59 msgid "" "Directory inside the user home directory to use as root web directory. " "Disabled if empty." @@ -2212,21 +2249,21 @@ msgstr "" "Directorio dentro del directorio del usuario que se usará como directorio " "raíz de la web. Desactivado si está vacío." -#: admin/PageVServer.py:56 +#: admin/PageVServer.py:60 msgid "The personal web support is currently turned on." msgstr "El soporte para webs personales está activado." -#: admin/PageVServer.py:57 +#: admin/PageVServer.py:61 msgid "Adds a new domain name. Wildcards are allowed in the domain name." msgstr "" "Añade un nuevo nombre de dominio. Se permiten comodines en el nombre de " "dominio." -#: admin/PageVServer.py:58 +#: admin/PageVServer.py:62 msgid "Virtual Server root directory." msgstr "Directorio raíz del servidor virtual." -#: admin/PageVServer.py:59 +#: admin/PageVServer.py:63 msgid "" "List of name files that will be used as directory index. Eg: index.html," "index.php." @@ -2234,45 +2271,45 @@ msgstr "" "Lista de nombres de ficheros que se usarán como índice de directorio. Ej.: " "index.html, index.php." -#: admin/PageVServer.py:60 +#: admin/PageVServer.py:64 msgid "The maximum size, in bytes, for POST uploads. (Default: unlimited)" msgstr "" "Tamaño máximo, en bytes, de los subidas por POST. (Predeterminado: ilimitado)" -#: admin/PageVServer.py:61 +#: admin/PageVServer.py:65 msgid "Whether this virtual server is allowed to use Keep-alive (Default: yes)" msgstr "Si este servidor virtual puede usar Keep-alive (Predeterminado: sí)" -#: admin/PageVServer.py:62 +#: admin/PageVServer.py:66 msgid "The Logging is currently enabled." msgstr "Los registros están activos." -#: admin/PageVServer.py:63 +#: admin/PageVServer.py:67 msgid "Logging format. Apache compatible is highly recommended here." msgstr "" "Formato de registros. Es altamente recomendable el compatible con Apache." -#: admin/PageVServer.py:64 +#: admin/PageVServer.py:68 msgid "Back-end used to store the log accesses." msgstr "Destino de los registros de accesos" -#: admin/PageVServer.py:65 +#: admin/PageVServer.py:69 msgid "Back-end used to store the log errors." msgstr "Destino de los registros de errores" -#: admin/PageVServer.py:66 +#: admin/PageVServer.py:70 msgid "Back-end used to store the log accesses and errors." msgstr "Formato de historicos para guardar los accesos y errores." -#: admin/PageVServer.py:67 +#: admin/PageVServer.py:71 msgid "Full path to the file where the information will be saved." msgstr "Ruta completa al fichero donde se guardará la información." -#: admin/PageVServer.py:68 +#: admin/PageVServer.py:72 msgid "Path to the executable that will be invoked on each log entry." msgstr "Ruta al ejecutable al que se llamará por cada entrada del registro." -#: admin/PageVServer.py:69 +#: admin/PageVServer.py:73 msgid "" "Whether the logger should read and use the X-Real-IP and X-Forwarded-For " "headers (send by reverse proxies)." @@ -2280,7 +2317,7 @@ msgstr "" "Si el sistema de registros debería leer y usar la cabecera X-Real-IP " "(enviada por los proxies inversos)." -#: admin/PageVServer.py:71 +#: admin/PageVServer.py:75 msgid "" "List of IP addresses and subnets that are allowed to send X-Real-IP and X-" "Forwarded-For headers." @@ -2288,33 +2325,33 @@ msgstr "" "Lista de direcciones IP y subredes a las que se les permite enviar cabeceras " "X-Real-IP (normalmente sus servidores proxy)." -#: admin/PageVServer.py:72 +#: admin/PageVServer.py:76 msgid "" "How to support the \"Advanced Virtual Hosting\" mechanism. (Default: off)" msgstr "" "Cómo darle soporte al mecanismo de \"Hospedaje Virtual Avanzado\". " "(Predeterminado: desactivado)" -#: admin/PageVServer.py:73 +#: admin/PageVServer.py:77 msgid "The following variables are accepted: " msgstr "" -#: admin/PageVServer.py:74 +#: admin/PageVServer.py:78 msgid "Allows the selection of domain matching method." msgstr "Permite seleccionar cómo evaluar los nombres de domínio." -#: admin/PageVServer.py:75 +#: admin/PageVServer.py:79 msgid "" "Whether or not it should collected statistics about the traffic of this " "virtual server." msgstr "" "Si debería recolectar estadísticas sobre el tráfico de este servidor virtual." -#: admin/PageVServer.py:76 +#: admin/PageVServer.py:80 msgid "Time standard to use in the log file entries." msgstr "Estándar de tiempo a utilizar en las entradas del archivo de registro." -#: admin/PageVServer.py:77 +#: admin/PageVServer.py:81 msgid "" "Remember that only \"File Exists\" rules and \"List & Send\" handlers use " "the Directory Indexes setting." @@ -2322,452 +2359,456 @@ msgstr "" "Recuerde que solamente las reglas de tipo \"Existe Fichero\" y los gestores " "\"Listar y Enviar\" utilizan el ajuste de \"Índices de directorio\"." -#: admin/PageVServer.py:78 +#: admin/PageVServer.py:82 msgid "" "Use this nickname as an additional host name for this virtual server " "(Default: yes)" msgstr "" -#: admin/PageVServer.py:79 +#: admin/PageVServer.py:83 msgid "Enforce HTTPS by using the HTTP Strict Transport Security." msgstr "" -#: admin/PageVServer.py:80 +#: admin/PageVServer.py:84 msgid "" "How long the client's browser should remember the forced HTTPS (in seconds)." msgstr "" -#: admin/PageVServer.py:81 +#: admin/PageVServer.py:85 msgid "" "Should HSTS be used in all the subdomains of this virtual server (Default: " "yes)." msgstr "" -#: admin/PageVServer.py:83 +#: admin/PageVServer.py:87 msgid "

The 'default' virtual server matches all the domain names.

" msgstr "" "

El servidor virtual 'default' acepta todos los nombres de dominio.

" -#: admin/PageVServer.py:86 +#: admin/PageVServer.py:90 #, fuzzy msgid "Remote IP address" msgstr "Dirección IP del servidor LDAP." -#: admin/PageVServer.py:87 +#: admin/PageVServer.py:91 #, fuzzy msgid "Local IP address" msgstr "Dirección de correo" -#: admin/PageVServer.py:88 +#: admin/PageVServer.py:92 #, fuzzy msgid "Request Protocol" msgstr "Solicitud" -#: admin/PageVServer.py:89 +#: admin/PageVServer.py:93 msgid "Transport type: http or https" msgstr "" -#: admin/PageVServer.py:90 +#: admin/PageVServer.py:94 msgid "Port of the server serving the request" msgstr "" -#: admin/PageVServer.py:91 +#: admin/PageVServer.py:95 msgid "The query string, if exists" msgstr "" -#: admin/PageVServer.py:92 +#: admin/PageVServer.py:96 msgid "First line of HTTP request" msgstr "" -#: admin/PageVServer.py:93 +#: admin/PageVServer.py:97 msgid "Response status code" msgstr "" -#: admin/PageVServer.py:94 +#: admin/PageVServer.py:98 msgid "Time: in common log format time format" msgstr "" -#: admin/PageVServer.py:95 +#: admin/PageVServer.py:99 msgid "Time: seconds since Epoch" msgstr "" -#: admin/PageVServer.py:96 +#: admin/PageVServer.py:100 msgid "Time: milliseconds since Epoch" msgstr "" -#: admin/PageVServer.py:97 +#: admin/PageVServer.py:101 #, fuzzy msgid "Remote user (authentication)" msgstr "Dominio base para las autenticaciones del servidor web." -#: admin/PageVServer.py:98 +#: admin/PageVServer.py:102 msgid "URL path requested" msgstr "" -#: admin/PageVServer.py:99 +#: admin/PageVServer.py:103 msgid "URL path requested before any rewrite" msgstr "" -#: admin/PageVServer.py:100 +#: admin/PageVServer.py:104 #, fuzzy msgid "Virtual Server nick name" msgstr "Nombre del servidor virtual" -#: admin/PageVServer.py:101 +#: admin/PageVServer.py:105 msgid "Requested host (Host: header)" msgstr "" -#: admin/PageVServer.py:102 +#: admin/PageVServer.py:106 msgid "Size of the response in bytes" msgstr "" -#: admin/PageVServer.py:103 +#: admin/PageVServer.py:107 msgid "'Host:' header of the request" msgstr "" -#: admin/PageVServer.py:104 +#: admin/PageVServer.py:108 msgid "'Referrer:' header of the request" msgstr "" -#: admin/PageVServer.py:105 +#: admin/PageVServer.py:109 msgid "'User-Agent:' header of the request" msgstr "" -#: admin/PageVServer.py:106 +#: admin/PageVServer.py:110 msgid "'Cookie:' header of the request" msgstr "" -#: admin/PageVServer.py:142 +#: admin/PageVServer.py:146 msgid "Loggers" msgstr "Registradores" -#: admin/PageVServer.py:143 +#: admin/PageVServer.py:147 msgid "SSL cookbook" msgstr "Receta sobre SSL" -#: admin/PageVServer.py:147 admin/PageVServer.py:184 +#: admin/PageVServer.py:151 admin/PageVServer.py:188 msgid "Match" msgstr "Concordancia" -#: admin/PageVServer.py:147 +#: admin/PageVServer.py:151 msgid "Rule Match" msgstr "Concordancia de la regla" -#: admin/PageVServer.py:148 +#: admin/PageVServer.py:152 msgid "Assigned Handler" msgstr "Manejador" -#: admin/PageVServer.py:149 +#: admin/PageVServer.py:153 msgid "Auth" msgstr "Aut" -#: admin/PageVServer.py:150 +#: admin/PageVServer.py:154 msgid "Custom Document Root" msgstr "Raíz de documentos" -#: admin/PageVServer.py:150 +#: admin/PageVServer.py:154 msgid "Root" msgstr "Raíz" -#: admin/PageVServer.py:151 +#: admin/PageVServer.py:155 msgid "Only HTTPS" msgstr "Sólo HTTPS" -#: admin/PageVServer.py:151 +#: admin/PageVServer.py:155 msgid "Secure" msgstr "Seguro" -#: admin/PageVServer.py:152 +#: admin/PageVServer.py:156 msgid "Enc" msgstr "Cod" -#: admin/PageVServer.py:152 +#: admin/PageVServer.py:156 msgid "Encoders" msgstr "Codificadores" -#: admin/PageVServer.py:153 +#: admin/PageVServer.py:157 #, fuzzy msgid "Cacheable" msgstr "Compatible con Apache" -#: admin/PageVServer.py:154 +#: admin/PageVServer.py:158 msgid "Exp" msgstr "Cad" -#: admin/PageVServer.py:155 +#: admin/PageVServer.py:159 msgid "Connection Timeout" msgstr "Tiempo de espera de las conexiones" -#: admin/PageVServer.py:156 +#: admin/PageVServer.py:160 msgid "Shaping" msgstr "Gestión de tráfico" -#: admin/PageVServer.py:157 +#: admin/PageVServer.py:161 msgid "Log" msgstr "Reg" -#: admin/PageVServer.py:157 +#: admin/PageVServer.py:161 msgid "Logging Enabled" msgstr "Registro activado" -#: admin/PageVServer.py:158 +#: admin/PageVServer.py:162 msgid "Rule is Final" msgstr "La regla es Final" -#: admin/PageVServer.py:184 +#: admin/PageVServer.py:188 #, fuzzy msgid "Match nickname" msgstr "Nombre" -#: admin/PageVServer.py:188 admin/PageVServer.py:717 +#: admin/PageVServer.py:192 admin/PageVServer.py:726 msgid "Host Match" msgstr "Evaluación de Host" -#: admin/PageVServer.py:218 admin/PageVServer.py:234 admin/PageVServer.py:258 -#: admin/PageVServer.py:485 admin/PageVServer.py:519 -#: admin/plugins/method.py:99 admin/plugins/method.py:109 +#: admin/PageVServer.py:222 admin/PageVServer.py:238 admin/PageVServer.py:262 +#: admin/PageVServer.py:489 admin/PageVServer.py:523 admin/plugins/method.py:99 +#: admin/plugins/method.py:109 msgid "Method" msgstr "Método" -#: admin/PageVServer.py:226 admin/PageVServer.py:242 +#: admin/PageVServer.py:230 admin/PageVServer.py:246 msgid "Remove criteria" msgstr "Borrar criterio" -#: admin/PageVServer.py:260 +#: admin/PageVServer.py:264 #, fuzzy msgid "How to match this Virtual Server" msgstr "Nuevo servidor virtual" -#: admin/PageVServer.py:267 +#: admin/PageVServer.py:271 msgid "Add an additional matching criteria" msgstr "Añadir nuevo criterio" -#: admin/PageVServer.py:358 +#: admin/PageVServer.py:362 msgid "Behavior Rules" msgstr "Reglas de funcionamiento" -#: admin/PageVServer.py:367 +#: admin/PageVServer.py:371 msgid "Rule Management" msgstr "Gestión de reglas" -#: admin/PageVServer.py:393 +#: admin/PageVServer.py:397 msgid "Only accept Secure Connections" msgstr "Aceptar conexiones seguras únicamente" -#: admin/PageVServer.py:398 +#: admin/PageVServer.py:402 msgid "Encoding enabled" msgstr "Codificación activa" -#: admin/PageVServer.py:404 +#: admin/PageVServer.py:408 msgid "no" msgstr "no" -#: admin/PageVServer.py:415 +#: admin/PageVServer.py:419 msgid " seconds" msgstr " segundos" -#: admin/PageVServer.py:420 +#: admin/PageVServer.py:424 msgid " bytes per second" msgstr " bytes por segundo" -#: admin/PageVServer.py:425 +#: admin/PageVServer.py:429 msgid "Logging enabled for this rule" msgstr "Registros habilitados para esta regla" -#: admin/PageVServer.py:430 +#: admin/PageVServer.py:434 msgid "Prevents further rule evaluation" msgstr "Impide seguir evaluando reglas" -#: admin/PageVServer.py:435 +#: admin/PageVServer.py:439 msgid "Content can be cached" msgstr "" -#: admin/PageVServer.py:438 +#: admin/PageVServer.py:442 msgid "Forbids content caching" msgstr "" -#: admin/PageVServer.py:455 +#: admin/PageVServer.py:459 msgid "Virtual Server nickname" msgstr "Nombre del servidor virtual" -#: admin/PageVServer.py:457 +#: admin/PageVServer.py:461 msgid "Server ID" msgstr "ID del servidor" -#: admin/PageVServer.py:463 +#: admin/PageVServer.py:467 msgid "Directory Indexes" msgstr "Índices de directorio" -#: admin/PageVServer.py:465 admin/plugins/fullpath.py:119 +#: admin/PageVServer.py:469 admin/plugins/fullpath.py:119 msgid "Paths" msgstr "Rutas" -#: admin/PageVServer.py:471 +#: admin/PageVServer.py:475 msgid "Neither are in use at the moment." msgstr "Ninguno de ellos está en uso actualmente." -#: admin/PageVServer.py:476 +#: admin/PageVServer.py:480 msgid "Keep-alive" msgstr "keep-alive" -#: admin/PageVServer.py:477 +#: admin/PageVServer.py:481 msgid "Max Upload Size" msgstr "Tam. Máx. Subida" -#: admin/PageVServer.py:487 admin/plugins/evhost.py:33 +#: admin/PageVServer.py:491 admin/plugins/evhost.py:33 msgid "Advanced Virtual Hosting" msgstr "Hospedaje Virtual Avanzado" -#: admin/PageVServer.py:521 +#: admin/PageVServer.py:525 msgid "Error Handling hook" msgstr "Manejo de errores" -#: admin/PageVServer.py:532 admin/consts.py:233 admin/consts.py:250 +#: admin/PageVServer.py:536 admin/consts.py:232 admin/consts.py:249 msgid "Disabled" msgstr "Desactivado" -#: admin/PageVServer.py:536 +#: admin/PageVServer.py:540 msgid "Write errors to" msgstr "Escribir errores en" -#: admin/PageVServer.py:540 admin/PageVServer.py:579 +#: admin/PageVServer.py:544 admin/PageVServer.py:583 msgid "Filename" msgstr "Nombre del fichero" -#: admin/PageVServer.py:542 admin/PageVServer.py:582 +#: admin/PageVServer.py:546 admin/PageVServer.py:586 msgid "Command" msgstr "Comando" -#: admin/PageVServer.py:548 +#: admin/PageVServer.py:552 msgid "Error Logging" msgstr "Registro de errores" -#: admin/PageVServer.py:559 +#: admin/PageVServer.py:563 msgid "Format" msgstr "Formato" -#: admin/PageVServer.py:566 +#: admin/PageVServer.py:570 msgid "Write accesses to" msgstr "Escribir accesos en" -#: admin/PageVServer.py:589 +#: admin/PageVServer.py:593 msgid "Hide" msgstr "" -#: admin/PageVServer.py:589 +#: admin/PageVServer.py:593 #, fuzzy msgid "Show macros" msgstr "Mostrar grupo" -#: admin/PageVServer.py:598 +#: admin/PageVServer.py:602 msgid "Template: " msgstr "Plantilla:" -#: admin/PageVServer.py:600 +#: admin/PageVServer.py:604 msgid "Access Logging" msgstr "Registro de accesos" -#: admin/PageVServer.py:606 +#: admin/PageVServer.py:610 msgid "Time standard" msgstr "Estándar de tiempo" -#: admin/PageVServer.py:607 admin/PageVServer.py:687 admin/consts.py:228 +#: admin/PageVServer.py:611 admin/PageVServer.py:696 admin/consts.py:227 msgid "Accept" msgstr "Aceptar" -#: admin/PageVServer.py:607 +#: admin/PageVServer.py:611 msgid "Accept Forwarded IPs" msgstr "Acceptar IPs redireccionadas" -#: admin/PageVServer.py:610 +#: admin/PageVServer.py:614 msgid "Do not check" msgstr "No comprobar" -#: admin/PageVServer.py:619 +#: admin/PageVServer.py:623 msgid "Logging Options" msgstr "Opciones del histórico" -#: admin/PageVServer.py:655 admin/wizards/ssl_test.py:136 +#: admin/PageVServer.py:659 admin/wizards/ssl_test.py:136 msgid "Certificate" msgstr "Certificado" -#: admin/PageVServer.py:656 +#: admin/PageVServer.py:660 msgid "Certificate key" msgstr "Clave del Certificado" -#: admin/PageVServer.py:661 +#: admin/PageVServer.py:665 msgid "Required SSL/TLS Values" msgstr "Valores SSL/TLS obligatorios" -#: admin/PageVServer.py:666 +#: admin/PageVServer.py:674 +msgid "Ciphersuites" +msgstr "" + +#: admin/PageVServer.py:675 msgid "Ciphers" msgstr "Codificadores" -#: admin/PageVServer.py:667 +#: admin/PageVServer.py:676 #, fuzzy msgid "Prefer" msgstr "Prefijo" -#: admin/PageVServer.py:667 +#: admin/PageVServer.py:676 #, fuzzy msgid "Server Preference" msgstr "Tráfico del servidor" -#: admin/PageVServer.py:668 +#: admin/PageVServer.py:677 msgid "Client Certs. Request" msgstr "Solicitud de Certif. de Clientes" -#: admin/PageVServer.py:669 +#: admin/PageVServer.py:678 msgid "Compression" msgstr "" -#: admin/PageVServer.py:670 +#: admin/PageVServer.py:679 msgid "DH length" msgstr "" -#: admin/PageVServer.py:673 +#: admin/PageVServer.py:682 msgid "CA List" msgstr "Lista de CA" -#: admin/PageVServer.py:676 +#: admin/PageVServer.py:685 msgid "Verify Depth" msgstr "Profundidad de verificación" -#: admin/PageVServer.py:682 +#: admin/PageVServer.py:691 msgid "Advanced Options" msgstr "Opciones avanzadas" -#: admin/PageVServer.py:687 +#: admin/PageVServer.py:696 #, fuzzy msgid "Enable HSTS" msgstr "Activar" -#: admin/PageVServer.py:690 +#: admin/PageVServer.py:699 msgid "HSTS Max-Age" msgstr "" -#: admin/PageVServer.py:690 +#: admin/PageVServer.py:699 msgid "One year" msgstr "" -#: admin/PageVServer.py:691 +#: admin/PageVServer.py:700 #, fuzzy msgid "Include Subdomains" msgstr "Enviar dominios" -#: admin/PageVServer.py:691 +#: admin/PageVServer.py:700 msgid "Include all" msgstr "" -#: admin/PageVServer.py:697 +#: admin/PageVServer.py:706 msgid "HTTP Strict Transport Security (HSTS)" msgstr "" -#: admin/PageVServer.py:716 +#: admin/PageVServer.py:725 msgid "Basics" msgstr "Básica" -#: admin/PageVServer.py:719 +#: admin/PageVServer.py:728 msgid "Error Handler" msgstr "Errores" @@ -3063,8 +3104,8 @@ msgstr "Producto + Plataforma" msgid "Full Server string" msgstr "Cadena completa del servidor" -#: admin/consts.py:51 admin/consts.py:80 admin/consts.py:97 -#: admin/consts.py:111 admin/plugins/mysql.py:45 +#: admin/consts.py:51 admin/consts.py:80 admin/consts.py:97 admin/consts.py:111 +#: admin/plugins/mysql.py:45 msgid "None" msgstr "Ninguno" @@ -3263,191 +3304,191 @@ msgstr "Dinámico" msgid "Automatic" msgstr "Automático" -#: admin/consts.py:145 admin/plugins/error_redir.py:35 +#: admin/consts.py:144 admin/plugins/error_redir.py:35 msgid "External" msgstr "Externa" -#: admin/consts.py:146 admin/plugins/error_redir.py:34 +#: admin/consts.py:145 admin/plugins/error_redir.py:34 msgid "Internal" msgstr "Interna" -#: admin/consts.py:189 admin/plugins/header.py:116 admin/plugins/proxy.py:94 +#: admin/consts.py:188 admin/plugins/header.py:118 admin/plugins/proxy.py:94 #: admin/plugins/proxy.py:144 admin/plugins/redir.py:76 #: admin/plugins/redir.py:106 admin/plugins/request.py:31 #: admin/plugins/url_arg.py:76 admin/plugins/url_arg.py:95 msgid "Regular Expression" msgstr "Expresión regular" -#: admin/consts.py:191 +#: admin/consts.py:190 msgid "File Exists" msgstr "Existe fichero" -#: admin/consts.py:192 +#: admin/consts.py:191 msgid "HTTP Method" msgstr "Método HTTP" -#: admin/consts.py:193 admin/plugins/bind.py:76 admin/plugins/bind.py:129 +#: admin/consts.py:192 admin/plugins/bind.py:76 admin/plugins/bind.py:129 msgid "Incoming IP/Port" msgstr "IP/Puerto de entrada" -#: admin/consts.py:194 +#: admin/consts.py:193 msgid "SSL / TLS" msgstr "SSL / TLS" -#: admin/consts.py:195 admin/plugins/fullpath.py:66 +#: admin/consts.py:194 admin/plugins/fullpath.py:66 #: admin/plugins/fullpath.py:101 msgid "Full Path" msgstr "Ruta completa" -#: admin/consts.py:196 admin/plugins/from.py:71 +#: admin/consts.py:195 admin/plugins/from.py:71 msgid "Connected from" msgstr "Conectado desde" -#: admin/consts.py:197 +#: admin/consts.py:196 msgid "URL Argument" msgstr "Argumento URL" -#: admin/consts.py:198 +#: admin/consts.py:197 msgid "GeoIP" msgstr "GeoIP" -#: admin/consts.py:202 +#: admin/consts.py:201 msgid "Match Nickname" msgstr "Nombre" -#: admin/consts.py:203 +#: admin/consts.py:202 msgid "Wildcards" msgstr "Comodines" -#: admin/consts.py:205 +#: admin/consts.py:204 msgid "Server IP" msgstr "IP del Servidor" -#: admin/consts.py:209 admin/consts.py:255 +#: admin/consts.py:208 admin/consts.py:254 msgid "Not set" msgstr "Sin configurar" -#: admin/consts.py:210 +#: admin/consts.py:209 msgid "Already expired on 1970" msgstr "Caducado en 1970" -#: admin/consts.py:211 +#: admin/consts.py:210 msgid "Do not expire until 2038" msgstr "No caduca hasta 2038" -#: admin/consts.py:212 +#: admin/consts.py:211 msgid "Custom value" msgstr "Valor personalizado" -#: admin/consts.py:216 +#: admin/consts.py:215 msgid "No TLS/SSL" msgstr "Sin TLS/SSL" -#: admin/consts.py:217 +#: admin/consts.py:216 msgid "OpenSSL / libssl" msgstr "OpenSSL / libssl" -#: admin/consts.py:221 admin/util.py:91 +#: admin/consts.py:220 admin/util.py:91 msgid "Off" msgstr "Desactivado" -#: admin/consts.py:222 +#: admin/consts.py:221 msgid "Enhanced Virtual Hosting" msgstr "Hospedaje Virtual Mejorado" -#: admin/consts.py:226 +#: admin/consts.py:225 msgid "Skip" msgstr "Saltar" -#: admin/consts.py:227 +#: admin/consts.py:226 msgid "Tolerate" msgstr "" -#: admin/consts.py:229 +#: admin/consts.py:228 msgid "Require" msgstr "Requerir" -#: admin/consts.py:234 +#: admin/consts.py:233 msgid "RRDtool graphs" msgstr "Gráficas RRDTool" -#: admin/consts.py:238 +#: admin/consts.py:237 msgid "Local time" msgstr "Hora local" -#: admin/consts.py:239 +#: admin/consts.py:238 msgid "UTC: Coordinated Universal Time" msgstr "UTC: Tiempo Universal Coordinado" -#: admin/consts.py:243 +#: admin/consts.py:242 msgid "JSON" msgstr "JSON" -#: admin/consts.py:244 +#: admin/consts.py:243 msgid "Python" msgstr "Python" -#: admin/consts.py:245 admin/wizards/List.py:91 +#: admin/consts.py:244 admin/wizards/List.py:91 msgid "PHP" msgstr "PHP" -#: admin/consts.py:246 +#: admin/consts.py:245 msgid "Ruby" msgstr "Ruby" -#: admin/consts.py:251 +#: admin/consts.py:250 msgid "POST tracker" msgstr "Seguimiento POST" -#: admin/consts.py:256 +#: admin/consts.py:255 msgid "Public" msgstr "Público" -#: admin/consts.py:257 +#: admin/consts.py:256 msgid "Private" msgstr "Privado" -#: admin/consts.py:258 +#: admin/consts.py:257 msgid "No Cache" msgstr "Sin Caché" -#: admin/consts.py:263 +#: admin/consts.py:262 msgid "0 - No compression" msgstr "" -#: admin/consts.py:264 +#: admin/consts.py:263 msgid "1" msgstr "" -#: admin/consts.py:265 +#: admin/consts.py:264 msgid "2" msgstr "" -#: admin/consts.py:266 +#: admin/consts.py:265 msgid "3" msgstr "" -#: admin/consts.py:267 +#: admin/consts.py:266 msgid "4" msgstr "" -#: admin/consts.py:268 +#: admin/consts.py:267 msgid "5" msgstr "" -#: admin/consts.py:269 +#: admin/consts.py:268 msgid "6" msgstr "" -#: admin/consts.py:270 +#: admin/consts.py:269 msgid "7" msgstr "" -#: admin/consts.py:271 +#: admin/consts.py:270 msgid "8" msgstr "" -#: admin/consts.py:272 +#: admin/consts.py:271 msgid "9 - Max compression" msgstr "" @@ -3627,66 +3668,66 @@ msgstr "Lista de ficheros que no deben mostrarse." msgid "Only listing" msgstr "Sólo mostrar" -#: admin/plugins/dirlist.py:49 admin/plugins/dirlist.py:50 #: admin/plugins/dirlist.py:51 admin/plugins/dirlist.py:52 #: admin/plugins/dirlist.py:53 admin/plugins/dirlist.py:54 +#: admin/plugins/dirlist.py:55 admin/plugins/dirlist.py:56 #: admin/plugins/redir.py:105 msgid "Show" msgstr "Mostrar" -#: admin/plugins/dirlist.py:49 +#: admin/plugins/dirlist.py:51 msgid "Show Size" msgstr "Mostrar tamaño" -#: admin/plugins/dirlist.py:50 +#: admin/plugins/dirlist.py:52 msgid "Show Date" msgstr "Mostrar fecha" -#: admin/plugins/dirlist.py:51 +#: admin/plugins/dirlist.py:53 msgid "Show User" msgstr "Mostrar usuario" -#: admin/plugins/dirlist.py:52 +#: admin/plugins/dirlist.py:54 msgid "Show Group" msgstr "Mostrar grupo" -#: admin/plugins/dirlist.py:53 +#: admin/plugins/dirlist.py:55 msgid "Show Backup files" msgstr "Mostrar ficheros de backup" -#: admin/plugins/dirlist.py:54 +#: admin/plugins/dirlist.py:56 msgid "Show Hidden files" msgstr "Ficheros ocultos" -#: admin/plugins/dirlist.py:55 +#: admin/plugins/dirlist.py:58 admin/plugins/file.py:44 msgid "Allow symbolic links" msgstr "Permitir enlaces simbólicos" -#: admin/plugins/dirlist.py:56 +#: admin/plugins/dirlist.py:59 msgid "Redirect symbolic links" msgstr "Redirigir enlaces simbólicos" -#: admin/plugins/dirlist.py:60 +#: admin/plugins/dirlist.py:63 msgid "Listing" msgstr "Mostrar" -#: admin/plugins/dirlist.py:65 +#: admin/plugins/dirlist.py:68 msgid "Theme" msgstr "Tema" -#: admin/plugins/dirlist.py:66 +#: admin/plugins/dirlist.py:69 msgid "Icons dir" msgstr "Dir. de iconos" -#: admin/plugins/dirlist.py:67 +#: admin/plugins/dirlist.py:70 msgid "Notice files" msgstr "Ficheros de aviso" -#: admin/plugins/dirlist.py:68 +#: admin/plugins/dirlist.py:71 msgid "Hidden files" msgstr "Ficheros ocultos" -#: admin/plugins/dirlist.py:72 +#: admin/plugins/dirlist.py:75 msgid "Theming" msgstr "Apariencia" @@ -3825,7 +3866,7 @@ msgstr "Específico de FastCGI" msgid "Enables an internal I/O cache that improves performance." msgstr "Activa una caché interna de E/S que mejora el rendimiento." -#: admin/plugins/file.py:45 +#: admin/plugins/file.py:49 msgid "File Sending" msgstr "Envío de fichero" @@ -3912,25 +3953,25 @@ msgid "" "header entry." msgstr "" -#: admin/plugins/header.py:65 +#: admin/plugins/header.py:67 msgid "Matches a Regular Expression" msgstr "Coincide con una expresión regular" -#: admin/plugins/header.py:66 +#: admin/plugins/header.py:68 msgid "Is Provided" msgstr "Se proporciona" -#: admin/plugins/header.py:104 +#: admin/plugins/header.py:106 #, fuzzy msgid "Full header" msgstr "Ruta completa" -#: admin/plugins/header.py:107 +#: admin/plugins/header.py:109 #, fuzzy msgid "Complete Header" msgstr "Ocultar cabecera" -#: admin/plugins/header.py:154 +#: admin/plugins/header.py:156 #, fuzzy, python-format msgid "Header %(header)s is provided" msgstr "Se proporciona la cabecera %s" @@ -4053,7 +4094,7 @@ msgid "Database name containing the user/password pair list." msgstr "Base de datos que contenga los pares de usuario y contraseña." #: admin/plugins/mysql.py:41 -#, fuzzy +#, fuzzy, python-brace-format msgid "" "SQL command to execute. ${user} is replaced with the user name, and " "${passwd} is replaced with the user supplied password." @@ -4492,20 +4533,16 @@ msgstr "Añadir nuevo comodín…" msgid "Accepted Domains" msgstr "Dominios aceptados" -#: admin/server.py:68 +#: admin/server.py:70 #, python-format msgid "Server %(version)s running.. PID=%(pid)d Port=%(scgi_port)s" msgstr "Servidor %(version)s ejecutandose.. PID=%(pid)d Puerto=%(scgi_port)s" -#: admin/server.py:70 +#: admin/server.py:72 #, python-format msgid "Server %(version)s running.. PID=%(pid)d Socket=%(scgi_port)s" msgstr "Servidor %(version)s ejecutandose.. PID=%(pid)d Puerto=%(scgi_port)s" -#: admin/server.py:144 -msgid "Incorrect parameters: PORT CONFIG_FILE" -msgstr "Parámetros incorrectos: PORT CONFIG_FILE" - #: admin/util.py:91 msgid "On" msgstr "On" @@ -4907,18 +4944,16 @@ msgstr "Puerto en el que corre el servicio en dicho host. (Ejemplo: 8080)" #: admin/wizards/alfresco.py:45 admin/wizards/coldfusion.py:46 #: admin/wizards/concrete5.py:47 admin/wizards/django.py:44 #: admin/wizards/glassfish.py:45 admin/wizards/mailman.py:48 -#: admin/wizards/mono.py:46 admin/wizards/php.py:43 -#: admin/wizards/symfony.py:51 admin/wizards/uwsgi.py:61 -#: admin/wizards/zend.py:47 +#: admin/wizards/mono.py:46 admin/wizards/php.py:43 admin/wizards/symfony.py:51 +#: admin/wizards/uwsgi.py:61 admin/wizards/zend.py:47 msgid "Host name of the virtual server that is about to be created." msgstr "Nombre del servidor virtual que será creado." #: admin/wizards/alfresco.py:46 admin/wizards/coldfusion.py:45 #: admin/wizards/concrete5.py:46 admin/wizards/django.py:43 #: admin/wizards/glassfish.py:46 admin/wizards/mailman.py:47 -#: admin/wizards/mono.py:45 admin/wizards/php.py:42 -#: admin/wizards/symfony.py:50 admin/wizards/uwsgi.py:60 -#: admin/wizards/zend.py:46 +#: admin/wizards/mono.py:45 admin/wizards/php.py:42 admin/wizards/symfony.py:50 +#: admin/wizards/uwsgi.py:60 admin/wizards/zend.py:46 msgid "New Virtual Server Details" msgstr "Detalles del nuevo Servidor Virtual" @@ -5882,3 +5917,49 @@ msgstr "No parece ser un directorio de fuentes de Zend." #: admin/wizards/zend.py:49 msgid "Web directory where you want Zend to be accessible. (Example: /zend)" msgstr "Directorio web por el cual Zend será accedido. (Ejemplo: /zend)" + +#~ msgid "Allow SSL v2" +#~ msgstr "Permitir SSL v2" + +#, fuzzy +#~ msgid "Disable %s" +#~ msgstr "Desactivar" + +#~ msgid "Incorrect parameters: PORT CONFIG_FILE" +#~ msgstr "Parámetros incorrectos: PORT CONFIG_FILE" + +#~ msgid "Mailing List Subscription" +#~ msgstr "Suscripción a la lista de correo" + +#~ msgid "Optionally provide your name" +#~ msgstr "Opcionalmente proporcione su nombre" + +#~ msgid "Purchase commercial support" +#~ msgstr "Soporte comercial" + +#~ msgid "Subscribe" +#~ msgstr "Suscribirse" + +#, fuzzy +#~ msgid "" +#~ "There are a number of Community Mailing Lists\n" +#~ "available for you to subscribe. You can subscribe the General Discussion\n" +#~ "mailing list from this interface. There is where most of the discussions\n" +#~ "take place." +#~ msgstr "" +#~ "Puede suscribirse a una serie de listas\n" +#~ "de correo de la comunidad de Cherokee. Se puede suscribir a la lista\n" +#~ "de discusión general desde esta interface. Es donde se poduce la ayor " +#~ "parte\n" +#~ "de las conversaciones." + +#~ msgid "You will be sent an email requesting confirmation" +#~ msgstr "Recibirá un correo solicitando confirmación" + +#~ msgid "Your email address" +#~ msgstr "Su dirección de correo" + +#~ msgid "Your name" +#~ msgstr "Su nombre" diff --git a/po/admin/fr.po b/po/admin/fr.po index 91427da1a..563e9bd38 100644 --- a/po/admin/fr.po +++ b/po/admin/fr.po @@ -5,13 +5,13 @@ # msgid "" msgstr "" -"Project-Id-Version: cherokee 0.99.33\n" -"Report-Msgid-Bugs-To: http://bugs.cherokee-project.com/\n" -"POT-Creation-Date: 2014-01-04 00:54+0100\n" +"Project-Id-Version: cherokee 1.2.104\n" +"Report-Msgid-Bugs-To: https://github.com/cherokee/webserver/issues\n" +"POT-Creation-Date: 2021-03-26 19:04+0100\n" "PO-Revision-Date: 2009-12-13 19:40+0100\n" "Last-Translator: Vincent Knecht \n" "Language-Team: none\n" -"Language: \n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -104,7 +104,7 @@ msgstr "Sources d'Information" msgid "Assign Information Sources" msgstr "Affectation des Sources d'Information" -#: admin/Balancer.py:136 admin/PageIndex.py:204 admin/PageRule.py:112 +#: admin/Balancer.py:136 admin/PageIndex.py:182 admin/PageRule.py:112 #: admin/plugins/bind.py:69 admin/plugins/bind.py:121 #: admin/plugins/custom_error.py:41 admin/plugins/method.py:31 msgid "Choose" @@ -140,17 +140,17 @@ msgstr "Configuration des icônes" #: admin/CTK/CTK/Druid.py:216 admin/CTK/CTK/Druid.py:224 #: admin/CTK/CTK/Druid.py:232 admin/CTK/CTK/Druid.py:238 admin/Icons.py:362 #: admin/Mime.py:110 admin/PageGeneral.py:289 admin/PageGeneral.py:317 -#: admin/PageIndex.py:232 admin/PageIndex.py:308 admin/PageRule.py:225 -#: admin/PageRule.py:276 admin/PageRule.py:302 admin/PageSource.py:225 -#: admin/PageSource.py:411 admin/PageSource.py:428 admin/PageSource.py:442 -#: admin/PageVServers.py:215 admin/PageVServers.py:252 -#: admin/PageVServers.py:281 admin/plugins/redir.py:120 +#: admin/PageIndex.py:246 admin/PageRule.py:225 admin/PageRule.py:276 +#: admin/PageRule.py:302 admin/PageSource.py:225 admin/PageSource.py:411 +#: admin/PageSource.py:428 admin/PageSource.py:442 admin/PageVServers.py:215 +#: admin/PageVServers.py:252 admin/PageVServers.py:281 +#: admin/plugins/redir.py:120 msgid "Cancel" msgstr "Annuler" #: admin/CTK/CTK/Dialog.py:165 admin/CTK/CTK/Dialog.py:272 #: admin/CTK/CTK/Druid.py:243 admin/PageException.py:89 -#: admin/PageException.py:93 admin/PageGeneral.py:283 admin/PageIndex.py:277 +#: admin/PageException.py:93 admin/PageGeneral.py:283 admin/PageIndex.py:215 #: admin/PageSource.py:402 admin/plugins/error_redir.py:110 #, fuzzy msgid "Close" @@ -191,14 +191,14 @@ msgstr "Journalisation" #: admin/CTK/CTK/Image.py:99 admin/CgiBase.py:69 admin/CgiBase.py:71 #: admin/CgiBase.py:124 admin/CgiBase.py:125 admin/CgiBase.py:126 #: admin/CgiBase.py:127 admin/CgiBase.py:128 admin/Graph.py:125 -#: admin/PageAdvanced.py:150 admin/PageEntry.py:150 admin/PageEntry.py:159 -#: admin/PageGeneral.py:193 admin/PageSource.py:296 -#: admin/plugins/dirlist.py:56 admin/plugins/exists.py:72 -#: admin/plugins/exists.py:77 admin/plugins/exists.py:78 -#: admin/plugins/exists.py:79 admin/plugins/exists.py:109 -#: admin/plugins/exists.py:115 admin/plugins/exists.py:116 -#: admin/plugins/exists.py:117 admin/plugins/file.py:40 -#: admin/plugins/ldap.py:53 admin/plugins/streaming.py:43 +#: admin/PageAdvanced.py:198 admin/PageEntry.py:150 admin/PageEntry.py:159 +#: admin/PageGeneral.py:193 admin/PageSource.py:296 admin/plugins/dirlist.py:59 +#: admin/plugins/exists.py:72 admin/plugins/exists.py:77 +#: admin/plugins/exists.py:78 admin/plugins/exists.py:79 +#: admin/plugins/exists.py:109 admin/plugins/exists.py:115 +#: admin/plugins/exists.py:116 admin/plugins/exists.py:117 +#: admin/plugins/file.py:42 admin/plugins/ldap.py:53 +#: admin/plugins/streaming.py:43 #, fuzzy msgid "Enabled" msgstr " Activé" @@ -217,12 +217,13 @@ msgstr "Serveur LDAP" msgid "Optional" msgstr "Optionel" -#: admin/CTK/CTK/ToggleButton.py:154 +#: admin/CTK/CTK/ToggleButton.py:154 admin/PageAdvanced.py:245 +#: admin/PageAdvanced.py:258 #, fuzzy msgid "Disable" msgstr "Désactivé" -#: admin/CTK/CTK/ToggleButton.py:155 admin/PageVServer.py:669 +#: admin/CTK/CTK/ToggleButton.py:155 admin/PageVServer.py:678 #: admin/wizards/flcache.py:157 #, fuzzy msgid "Enable" @@ -268,7 +269,7 @@ msgstr "" "Le gestionnaire doit il lire et utiliser l'en-tête X-Real-IP et l'utiliser " "dans REMOTE_ADDR." -#: admin/CgiBase.py:40 admin/PageVServer.py:70 +#: admin/CgiBase.py:40 admin/PageVServer.py:74 msgid "" "Accept all the X-Real-IP and X-Forwarded-For headers. WARNING: Turn it on " "only if you are centain of what you are doing." @@ -289,11 +290,11 @@ msgstr "" msgid "Read X-Real-IP" msgstr "Lire X-Real-IP" -#: admin/CgiBase.py:71 admin/PageVServer.py:610 +#: admin/CgiBase.py:71 admin/PageVServer.py:614 msgid "Don't check origin" msgstr "Ne pas vérifier l'origine" -#: admin/CgiBase.py:73 admin/PageVServer.py:613 +#: admin/CgiBase.py:73 admin/PageVServer.py:617 msgid "Accept from Hosts" msgstr "" @@ -336,7 +337,7 @@ msgid "Allow X-Sendfile" msgstr "Autoriser X-Sendfile" #: admin/CgiBase.py:128 admin/plugins/exists.py:77 admin/plugins/exists.py:115 -#: admin/plugins/file.py:40 +#: admin/plugins/file.py:42 msgid "Use I/O cache" msgstr "Utiliser le cache I/O." @@ -437,7 +438,7 @@ msgid "" msgstr "" #: admin/Graph.py:118 admin/PageEntry.py:538 admin/PageSource.py:257 -#: admin/PageStatus.py:70 admin/PageVServer.py:731 admin/PageVServers.py:210 +#: admin/PageStatus.py:70 admin/PageVServer.py:740 admin/PageVServers.py:210 msgid "Unknown" msgstr "Inconnu" @@ -449,7 +450,7 @@ msgstr "Collecter les Statistiques" msgid "Allows to specify an alternative Document Root path." msgstr "" -#: admin/Handler.py:43 admin/PageEntry.py:523 admin/PageVServer.py:462 +#: admin/Handler.py:43 admin/PageEntry.py:523 admin/PageVServer.py:466 #: admin/PageVServers.py:128 admin/wizards/django.py:191 #: admin/wizards/mono.py:199 admin/wizards/php.py:39 admin/wizards/php.py:342 #: admin/wizards/uwsgi.py:267 @@ -462,7 +463,7 @@ msgid "Extension List" msgstr "Liste des extensions" #: admin/Icons.py:129 admin/Icons.py:328 admin/Mime.py:96 admin/Mime.py:131 -#: admin/consts.py:188 admin/plugins/extensions.py:61 +#: admin/consts.py:187 admin/plugins/extensions.py:61 #: admin/wizards/flcache.py:141 msgid "Extensions" msgstr "Extensions" @@ -485,12 +486,13 @@ msgstr "Fichiers" msgid "Add New File" msgstr "Ajouter nouvelle règle" -#: admin/Icons.py:197 admin/Icons.py:329 admin/Rule.py:174 admin/consts.py:42 -#: admin/consts.py:128 admin/consts.py:262 +#: admin/Icons.py:197 admin/Icons.py:329 admin/PageVServer.py:674 +#: admin/PageVServer.py:675 admin/Rule.py:174 admin/consts.py:42 +#: admin/consts.py:128 admin/consts.py:261 msgid "Default" msgstr "Par défaut" -#: admin/Icons.py:198 admin/Icons.py:330 admin/consts.py:187 +#: admin/Icons.py:198 admin/Icons.py:330 admin/consts.py:186 #: admin/plugins/directory.py:31 msgid "Directory" msgstr "Répertoire" @@ -504,7 +506,7 @@ msgstr "" msgid "Modify" msgstr "Modifié" -#: admin/Icons.py:214 admin/PageAdvanced.py:168 admin/PageAdvanced.py:192 +#: admin/Icons.py:214 admin/PageAdvanced.py:216 admin/PageAdvanced.py:316 msgid "Special Files" msgstr "Fichiers Spéciaux" @@ -616,7 +618,7 @@ msgstr "Sauvegarder" msgid "Home" msgstr "" -#: admin/Page.py:155 admin/PageAdvanced.py:150 admin/PageIndex.py:84 +#: admin/Page.py:155 admin/PageAdvanced.py:198 admin/PageIndex.py:62 #: admin/PageStatus.py:40 admin/PageStatus.py:112 msgid "Status" msgstr "Etat" @@ -635,7 +637,7 @@ msgstr "ID Serveur" msgid "Sources" msgstr "Source" -#: admin/Page.py:159 admin/PageAdvanced.py:97 admin/PageAdvanced.py:198 +#: admin/Page.py:159 admin/PageAdvanced.py:145 admin/PageAdvanced.py:322 msgid "Advanced" msgstr "Avancé" @@ -647,105 +649,117 @@ msgstr "Aide" msgid "Updating..." msgstr "" -#: admin/PageAdvanced.py:64 +#: admin/PageAdvanced.py:56 +msgid "" +"

WARNING: The SSL/TLS back-end supports more recent\n" +"versions of TLS protocols, which are not recognized by Cherokee. Please " +"check\n" +"for latest Cherokee updates or report this issue. As a temporary workaround " +"please\n" +"set 'Max. TLS protocol version' to the maximum TLS protocol version " +"supported by\n" +"Cherokee.

Following unknown TLS protocols have been found:" +msgstr "" + +#: admin/PageAdvanced.py:94 msgid "" "

WARNING: This section contains advanced\n" "configuration parameters. Changing things is not recommended unless\n" "you really know what you are doing.

" msgstr "" -#: admin/PageAdvanced.py:68 +#: admin/PageAdvanced.py:98 msgid "Defines which thread policy the OS should apply to the server." msgstr "" -#: admin/PageAdvanced.py:69 +#: admin/PageAdvanced.py:99 msgid "If empty, Cherokee will calculate a default number." msgstr "" -#: admin/PageAdvanced.py:70 +#: admin/PageAdvanced.py:100 msgid "" "It defines how many file descriptors the server should handle. Default is " "the number showed by ulimit -n" msgstr "" -#: admin/PageAdvanced.py:71 +#: admin/PageAdvanced.py:101 msgid "Allows to choose the internal file descriptor polling method." msgstr "" -#: admin/PageAdvanced.py:72 +#: admin/PageAdvanced.py:102 msgid "Minimum size of a file to use sendfile(). Default: 32768 Bytes." msgstr "" -#: admin/PageAdvanced.py:73 +#: admin/PageAdvanced.py:103 msgid "Maximum size of a file to use sendfile(). Default: 2 GB." msgstr "" -#: admin/PageAdvanced.py:74 +#: admin/PageAdvanced.py:104 msgid "" "Name a program that will be called if, by some reason, the server fails. " "Default: cherokee-panic." msgstr "" -#: admin/PageAdvanced.py:75 +#: admin/PageAdvanced.py:105 msgid "Path of the PID file. If empty, the file will not be created." msgstr "" -#: admin/PageAdvanced.py:76 +#: admin/PageAdvanced.py:106 msgid "Max. length of the incoming connection queue." msgstr "" -#: admin/PageAdvanced.py:77 +#: admin/PageAdvanced.py:107 msgid "" "Set the number of how many internal connections can be held for reuse by " "each thread. Default: 20." msgstr "" -#: admin/PageAdvanced.py:78 +#: admin/PageAdvanced.py:108 msgid "" "Sets the number of seconds between log consolidations (flushes). Default: 10 " "seconds." msgstr "" -#: admin/PageAdvanced.py:79 +#: admin/PageAdvanced.py:109 msgid "Time lapse (in seconds) between Nonce cache clean ups." msgstr "" -#: admin/PageAdvanced.py:80 +#: admin/PageAdvanced.py:110 msgid "" "Enables the server-wide keep-alive support. It increases the performance. It " "is usually set on." msgstr "" -#: admin/PageAdvanced.py:81 +#: admin/PageAdvanced.py:111 msgid "" "Maximum number of HTTP requests that can be served by each keepalive " "connection." msgstr "" -#: admin/PageAdvanced.py:82 +#: admin/PageAdvanced.py:112 msgid "" "Allows the server to use Chunked encoding to try to keep Keep-Alive enabled." msgstr "" -#: admin/PageAdvanced.py:83 +#: admin/PageAdvanced.py:113 msgid "Activate or deactivate the I/O cache globally." msgstr "Activer ou désactiver globalement le cache I/O." -#: admin/PageAdvanced.py:84 +#: admin/PageAdvanced.py:114 msgid "Number of pages that the cache should handle." msgstr "" -#: admin/PageAdvanced.py:85 +#: admin/PageAdvanced.py:115 #, fuzzy msgid "Files under this size (in bytes) will not be cached." msgstr "Les fichiers inférieurs à cette taille ne seront pas mis en cache." -#: admin/PageAdvanced.py:86 +#: admin/PageAdvanced.py:116 #, fuzzy msgid "Files over this size (in bytes) will not be cached." msgstr "Les fichiers supérieurs à cette taille ne seront pas mis en cache." -#: admin/PageAdvanced.py:87 +#: admin/PageAdvanced.py:117 #, fuzzy msgid "" "How long (in seconds) the file information should last cached without " @@ -754,169 +768,229 @@ msgstr "" "Combien de temps l'information sur le fichier devra rester en cache sans " "être rafraîchie." -#: admin/PageAdvanced.py:88 +#: admin/PageAdvanced.py:118 #, fuzzy msgid "How long (in seconds) the file content should last cached." msgstr "Combien de temps le contenu du fichier devra rester en cache." -#: admin/PageAdvanced.py:89 +#: admin/PageAdvanced.py:119 msgid "Path to a Diffie Hellman (DH) parameters PEM file: 512 bits." msgstr "" -#: admin/PageAdvanced.py:90 +#: admin/PageAdvanced.py:120 msgid "Path to a Diffie Hellman (DH) parameters PEM file: 1024 bits." msgstr "" -#: admin/PageAdvanced.py:91 +#: admin/PageAdvanced.py:121 msgid "Path to a Diffie Hellman (DH) parameters PEM file: 2048 bits." msgstr "" -#: admin/PageAdvanced.py:92 +#: admin/PageAdvanced.py:122 msgid "Path to a Diffie Hellman (DH) parameters PEM file: 4096 bits." msgstr "" -#: admin/PageAdvanced.py:93 +#: admin/PageAdvanced.py:123 +msgid "Your Cherokee Web Server does not support SSL/TLS encryption." +msgstr "" + +#: admin/PageAdvanced.py:124 msgid "Timeout for the TLS/SSL handshake. Default: 15 seconds." msgstr "" -#: admin/PageAdvanced.py:94 +#: admin/PageAdvanced.py:125 +msgid "Beware: it is vulnerable. You should disable SSLv2." +msgstr "" + +#: admin/PageAdvanced.py:126 +msgid "Beware: it is vulnerable. You should disable SSLv3." +msgstr "" + +#: admin/PageAdvanced.py:127 +msgid "TLSv1 is deprecated" +msgstr "" + +#: admin/PageAdvanced.py:128 +msgid "TLSv1.1 is deprecated" +msgstr "" + +#: admin/PageAdvanced.py:129 admin/PageAdvanced.py:130 +msgid " " +msgstr "" + +#: admin/PageAdvanced.py:131 msgid "" -"Allow clients to use SSL version 2 - Beware: it is vulnerable. (Default: No)" +"The following options work in combination with above min/max TLS protocol " +"version settings. They are deprecated, only set the minimum and maximum " +"supported protocol versions instead." msgstr "" -#: admin/PageAdvanced.py:119 admin/PageAdvanced.py:121 -#, fuzzy +#: admin/PageAdvanced.py:133 +msgid "" +"Minimum required TLS protocol version from clients (Default: auto-configured " +"by libssl)" +msgstr "" + +#: admin/PageAdvanced.py:134 +msgid "" +"Maximum supported TLS protocol version (Default: auto-configured by libssl)" +msgstr "" + +#: admin/PageAdvanced.py:167 admin/PageAdvanced.py:169 msgid "Allowed" msgstr "Autoriser" -#: admin/PageAdvanced.py:119 +#: admin/PageAdvanced.py:167 msgid "Keep Alive" msgstr "" -#: admin/PageAdvanced.py:120 +#: admin/PageAdvanced.py:168 msgid "Max keepalive reqs" msgstr "" -#: admin/PageAdvanced.py:121 +#: admin/PageAdvanced.py:169 msgid "Chunked Encoding" msgstr "" -#: admin/PageAdvanced.py:122 +#: admin/PageAdvanced.py:170 msgid "Polling Method" msgstr "" -#: admin/PageAdvanced.py:123 +#: admin/PageAdvanced.py:171 msgid "Sendfile min size" msgstr "" -#: admin/PageAdvanced.py:124 +#: admin/PageAdvanced.py:172 msgid "Sendfile max size" msgstr "" -#: admin/PageAdvanced.py:126 admin/PageAdvanced.py:189 +#: admin/PageAdvanced.py:174 admin/PageAdvanced.py:313 msgid "Connections" msgstr "Connections" -#: admin/PageAdvanced.py:134 +#: admin/PageAdvanced.py:182 msgid "Thread Number" msgstr "" -#: admin/PageAdvanced.py:135 +#: admin/PageAdvanced.py:183 msgid "Thread Policy" msgstr "" -#: admin/PageAdvanced.py:136 +#: admin/PageAdvanced.py:184 msgid "File descriptors" msgstr "Descripteurs de fichiers" -#: admin/PageAdvanced.py:137 +#: admin/PageAdvanced.py:185 msgid "Listening queue length" msgstr "" -#: admin/PageAdvanced.py:138 admin/plugins/proxy.py:239 +#: admin/PageAdvanced.py:186 admin/plugins/proxy.py:239 msgid "Reuse connections" msgstr "Réutiliser les connections" -#: admin/PageAdvanced.py:139 +#: admin/PageAdvanced.py:187 msgid "Log flush time" msgstr "" -#: admin/PageAdvanced.py:140 +#: admin/PageAdvanced.py:188 msgid "Nonces clean up time" msgstr "" -#: admin/PageAdvanced.py:142 admin/PageAdvanced.py:190 +#: admin/PageAdvanced.py:190 admin/PageAdvanced.py:314 msgid "Resources" msgstr "Ressources" -#: admin/PageAdvanced.py:151 +#: admin/PageAdvanced.py:199 msgid "Max pages" msgstr "" -#: admin/PageAdvanced.py:152 +#: admin/PageAdvanced.py:200 msgid "File Min Size" msgstr "" -#: admin/PageAdvanced.py:153 +#: admin/PageAdvanced.py:201 msgid "File Max Size" msgstr "" -#: admin/PageAdvanced.py:154 +#: admin/PageAdvanced.py:202 msgid "Lasting: stat" msgstr "" -#: admin/PageAdvanced.py:155 +#: admin/PageAdvanced.py:203 msgid "Lasting: mmap" msgstr "" -#: admin/PageAdvanced.py:157 admin/PageAdvanced.py:191 +#: admin/PageAdvanced.py:205 admin/PageAdvanced.py:315 msgid "I/O cache" msgstr "Cache I/O" -#: admin/PageAdvanced.py:165 +#: admin/PageAdvanced.py:213 msgid "Panic action" msgstr "" -#: admin/PageAdvanced.py:166 +#: admin/PageAdvanced.py:214 msgid "PID file" msgstr "Fichier PID" -#: admin/PageAdvanced.py:176 admin/PageEntry.py:84 admin/PageVServer.py:476 -#: admin/plugins/common.py:42 admin/plugins/common.py:43 -#: admin/plugins/dirlist.py:55 admin/plugins/proxy.py:240 -msgid "Allow" -msgstr "Autoriser" +#: admin/PageAdvanced.py:245 admin/PageAdvanced.py:247 +#: admin/PageAdvanced.py:258 admin/PageAdvanced.py:260 +#, fuzzy +msgid "Disable " +msgstr "Désactivé" -#: admin/PageAdvanced.py:176 -msgid "Allow SSL v2" +#: admin/PageAdvanced.py:247 +msgid "Protocol deacrivated" msgstr "" -#: admin/PageAdvanced.py:177 +#: admin/PageAdvanced.py:247 +msgid "Protocol not supported" +msgstr "" + +#: admin/PageAdvanced.py:260 +msgid "Protocol deactivated" +msgstr "" + +#: admin/PageAdvanced.py:262 +msgid "Turn off selected TLS Protocols (Deprecated)" +msgstr "" + +#: admin/PageAdvanced.py:270 admin/PageAdvanced.py:271 +msgid "auto-configured" +msgstr "" + +#: admin/PageAdvanced.py:285 +msgid "Min. TLS protocol version" +msgstr "" + +#: admin/PageAdvanced.py:290 +msgid "Max. TLS protocol version" +msgstr "" + +#: admin/PageAdvanced.py:291 msgid "Handshake Timeout" msgstr "" -#: admin/PageAdvanced.py:178 +#: admin/PageAdvanced.py:292 msgid "DH parameters: 512 bits" msgstr "" -#: admin/PageAdvanced.py:179 +#: admin/PageAdvanced.py:293 msgid "DH parameters: 1024 bits" msgstr "" -#: admin/PageAdvanced.py:180 +#: admin/PageAdvanced.py:294 msgid "DH parameters: 2048 bits" msgstr "" -#: admin/PageAdvanced.py:181 +#: admin/PageAdvanced.py:295 msgid "DH parameters: 4096 bits" msgstr "" -#: admin/PageAdvanced.py:183 admin/PageAdvanced.py:193 -#: admin/PageGeneral.py:239 admin/plugins/bind.py:92 +#: admin/PageAdvanced.py:296 admin/PageAdvanced.py:317 admin/PageGeneral.py:239 +#: admin/plugins/bind.py:92 msgid "TLS" msgstr "TLS" -#: admin/PageAdvanced.py:199 +#: admin/PageAdvanced.py:323 #, fuzzy msgid "Advanced Configuration" msgstr "Configuration avancée" @@ -1015,7 +1089,7 @@ msgstr "" msgid "Deflate encoder" msgstr "" -#: admin/PageEntry.py:78 admin/PageEntry.py:173 admin/PageVServer.py:149 +#: admin/PageEntry.py:78 admin/PageEntry.py:173 admin/PageVServer.py:153 msgid "Authentication" msgstr "Authentification" @@ -1028,6 +1102,12 @@ msgstr "Liste d'authentification" msgid "Leave unset" msgstr "" +#: admin/PageEntry.py:84 admin/PageVServer.py:480 admin/plugins/common.py:42 +#: admin/plugins/common.py:43 admin/plugins/dirlist.py:58 +#: admin/plugins/file.py:44 admin/plugins/proxy.py:240 +msgid "Allow" +msgstr "" + #: admin/PageEntry.py:85 msgid "Forbid" msgstr "" @@ -1054,7 +1134,7 @@ msgstr "" msgid "Remove" msgstr "Retirer" -#: admin/PageEntry.py:126 admin/PageVServer.py:155 +#: admin/PageEntry.py:126 admin/PageVServer.py:159 #: admin/plugins/secdownload.py:44 msgid "Timeout" msgstr "" @@ -1067,7 +1147,7 @@ msgstr "" msgid "Limit traffic to" msgstr "Limiter le trafic à" -#: admin/PageEntry.py:139 admin/PageVServer.py:156 +#: admin/PageEntry.py:139 admin/PageVServer.py:160 msgid "Traffic Shaping" msgstr "Mise en forme de Trafic" @@ -1075,7 +1155,7 @@ msgstr "Mise en forme de Trafic" msgid "Skip Logging" msgstr "" -#: admin/PageEntry.py:154 admin/PageVServer.py:720 +#: admin/PageEntry.py:154 admin/PageVServer.py:729 msgid "Logging" msgstr "Journalisation" @@ -1100,14 +1180,14 @@ msgstr "Mécanisme de Validation" msgid "Can not be empty" msgstr "Ne peut pas être vide" -#: admin/PageEntry.py:216 admin/PageEntry.py:268 admin/consts.py:190 -#: admin/plugins/header.py:110 admin/plugins/header.py:151 -#: admin/plugins/header.py:156 admin/plugins/proxy.py:193 +#: admin/PageEntry.py:216 admin/PageEntry.py:268 admin/consts.py:189 +#: admin/plugins/header.py:112 admin/plugins/header.py:153 +#: admin/plugins/header.py:158 admin/plugins/proxy.py:193 msgid "Header" msgstr "En-tête" #: admin/PageEntry.py:216 admin/PageSource.py:284 -#: admin/plugins/error_redir.py:105 admin/plugins/header.py:113 +#: admin/plugins/error_redir.py:105 admin/plugins/header.py:115 #: admin/plugins/redir.py:76 msgid "Type" msgstr "Type" @@ -1126,7 +1206,7 @@ msgstr "Produit seulement" msgid "Add New Header" msgstr "Ajouter nouvel en-tête" -#: admin/PageEntry.py:326 admin/consts.py:204 admin/plugins/redir.py:39 +#: admin/PageEntry.py:326 admin/consts.py:203 admin/plugins/redir.py:39 #: admin/plugins/rehost.py:53 msgid "Regular Expressions" msgstr "Expression Régulières" @@ -1143,8 +1223,7 @@ msgstr "" msgid "Caching Policy" msgstr "" -#: admin/PageEntry.py:381 admin/plugins/rehost.py:68 -#: admin/plugins/rehost.py:92 +#: admin/PageEntry.py:381 admin/plugins/rehost.py:68 admin/plugins/rehost.py:92 msgid "New Regular Expression" msgstr "Nouvelle Expression Régulière" @@ -1152,7 +1231,7 @@ msgstr "Nouvelle Expression Régulière" msgid "Disregarded Cookies" msgstr "" -#: admin/PageEntry.py:402 admin/PageVServer.py:154 +#: admin/PageEntry.py:402 admin/PageVServer.py:158 msgid "Expiration" msgstr "" @@ -1184,7 +1263,7 @@ msgstr "" msgid "Content Expiration" msgstr "" -#: admin/PageEntry.py:433 admin/PageVServer.py:153 +#: admin/PageEntry.py:433 admin/PageVServer.py:157 msgid "Cache" msgstr "" @@ -1207,7 +1286,7 @@ msgid "Matching Rule" msgstr "" #: admin/PageEntry.py:514 admin/PageEntry.py:528 admin/PageEntry.py:553 -#: admin/PageVServer.py:148 +#: admin/PageVServer.py:152 msgid "Handler" msgstr "Gestionnaire" @@ -1224,7 +1303,7 @@ msgstr "Plate-formes" msgid "Caching" msgstr "" -#: admin/PageEntry.py:556 admin/PageVServer.py:721 +#: admin/PageEntry.py:556 admin/PageVServer.py:730 msgid "Security" msgstr "Sécurité" @@ -1475,7 +1554,7 @@ msgstr "" msgid "SSL/TLS back-end" msgstr "" -#: admin/PageGeneral.py:197 admin/PageIndex.py:252 +#: admin/PageGeneral.py:197 admin/PageIndex.py:198 msgid "Support" msgstr "Fonctionnalités" @@ -1509,8 +1588,8 @@ msgid "Bind to" msgstr "Lier à" #: admin/PageGeneral.py:239 admin/PageGeneral.py:310 admin/plugins/bind.py:92 -#: admin/plugins/bind.py:155 admin/plugins/bind.py:157 -#: admin/plugins/ldap.py:48 admin/plugins/mysql.py:77 +#: admin/plugins/bind.py:155 admin/plugins/bind.py:157 admin/plugins/ldap.py:48 +#: admin/plugins/mysql.py:77 msgid "Port" msgstr "Port" @@ -1579,7 +1658,7 @@ msgstr "Groupe" msgid "Chroot" msgstr "" -#: admin/PageGeneral.py:357 admin/PageVServer.py:479 +#: admin/PageGeneral.py:357 admin/PageVServer.py:483 msgid "Network" msgstr "Réseau" @@ -1609,179 +1688,139 @@ msgstr "" msgid "Documentation" msgstr "Racine des Documents" -#: admin/PageIndex.py:67 -msgid "You will be sent an email requesting confirmation" -msgstr "" - -#: admin/PageIndex.py:68 -msgid "Optionally provide your name" -msgstr "" - -#: admin/PageIndex.py:70 -#, python-format -msgid "" -"There are a number of Community Mailing Lists\n" -"available for you to subscribe. You can subscribe the General Discussion\n" -"mailing list from this interface. There is where most of the discussions\n" -"take place." -msgstr "" - -#: admin/PageIndex.py:77 +#: admin/PageIndex.py:58 #, fuzzy msgid "Server is Running" msgstr "Le serveur est lancé." -#: admin/PageIndex.py:78 +#: admin/PageIndex.py:59 #, fuzzy msgid "Server is not Running" msgstr "Le serveur n'est pas lancé." -#: admin/PageIndex.py:132 +#: admin/PageIndex.py:110 #, fuzzy msgid "Stop Server" msgstr "Serveur" -#: admin/PageIndex.py:136 +#: admin/PageIndex.py:114 #, fuzzy msgid "Start Server" msgstr "Serveur Virtuel" -#: admin/PageIndex.py:141 +#: admin/PageIndex.py:119 #, fuzzy msgid "Hostname" msgstr "Nom d'hôtes" -#: admin/PageIndex.py:143 +#: admin/PageIndex.py:121 msgid "Modified" msgstr "Modifié" -#: admin/PageIndex.py:145 +#: admin/PageIndex.py:123 #, fuzzy msgid "Not found" msgstr "Non Trouvé" -#: admin/PageIndex.py:146 +#: admin/PageIndex.py:124 #, fuzzy msgid "Config File" msgstr "Fichier de Configuration" -#: admin/PageIndex.py:153 admin/plugins/server_info.py:32 +#: admin/PageIndex.py:131 admin/plugins/server_info.py:32 #: admin/plugins/server_info.py:35 msgid "Server Information" msgstr "Information Serveur" -#: admin/PageIndex.py:165 +#: admin/PageIndex.py:143 msgid "Processors" msgstr "" -#: admin/PageIndex.py:177 +#: admin/PageIndex.py:155 msgid "Memory" msgstr "" -#: admin/PageIndex.py:211 admin/plugins/dbslayer.py:51 +#: admin/PageIndex.py:189 admin/plugins/dbslayer.py:51 msgid "Language" msgstr "Langue" -#: admin/PageIndex.py:231 -msgid "Mailing List Subscription" -msgstr "" - -#: admin/PageIndex.py:233 -msgid "Subscribe" -msgstr "" - -#: admin/PageIndex.py:236 -msgid "Your email address" -msgstr "" - -#: admin/PageIndex.py:237 -#, fuzzy -msgid "Your name" -msgstr "Nom d'hôtes" - -#: admin/PageIndex.py:256 +#: admin/PageIndex.py:202 msgid "Getting started" msgstr "" -#: admin/PageIndex.py:260 -msgid "Subscribe to mailing lists" +#: admin/PageIndex.py:206 +msgid "Visit the mailing list" msgstr "" -#: admin/PageIndex.py:268 +#: admin/PageIndex.py:210 #, fuzzy msgid "Report a bug" msgstr "Rapport envoyé" -#: admin/PageIndex.py:272 -#, fuzzy -msgid "Purchase commercial support" -msgstr "Fonctionnalités" - -#: admin/PageIndex.py:276 admin/PageIndex.py:280 +#: admin/PageIndex.py:214 admin/PageIndex.py:218 msgid "About Cherokee" msgstr "" -#: admin/PageIndex.py:289 +#: admin/PageIndex.py:227 msgid "Join the Cherokee Community:" msgstr "" -#: admin/PageIndex.py:292 +#: admin/PageIndex.py:230 msgid "Visit the Cherokee Project Website" msgstr "" -#: admin/PageIndex.py:293 +#: admin/PageIndex.py:231 msgid "Follow us on Twitter" msgstr "" -#: admin/PageIndex.py:294 +#: admin/PageIndex.py:232 msgid "Join us on Facebook" msgstr "" -#: admin/PageIndex.py:295 +#: admin/PageIndex.py:233 msgid "Join us on Google+" msgstr "" -#: admin/PageIndex.py:296 +#: admin/PageIndex.py:234 msgid "Fork us on Github" msgstr "" -#: admin/PageIndex.py:297 +#: admin/PageIndex.py:235 msgid "Become a member of Cherokee group on LinkedIn" msgstr "" -#: admin/PageIndex.py:298 +#: admin/PageIndex.py:236 msgid "Chat with us at irc.freenode.net" msgstr "" -#: admin/PageIndex.py:307 +#: admin/PageIndex.py:245 #, fuzzy msgid "Shutdown Cherokee-admin" msgstr "Bienvenue sur Cherokee Admin" -#: admin/PageIndex.py:309 +#: admin/PageIndex.py:247 msgid "Shut down" msgstr "" -#: admin/PageIndex.py:310 +#: admin/PageIndex.py:248 msgid "You are about to shut down this instance of Cherokee-admin" msgstr "" -#: admin/PageIndex.py:311 +#: admin/PageIndex.py:249 #, fuzzy msgid "Are you sure you want to proceed?" msgstr "Voulez vous vraiment le retirer ?" -#: admin/PageIndex.py:314 +#: admin/PageIndex.py:252 msgid "Cherokee-admin has been shut down" msgstr "" -#: admin/PageIndex.py:316 +#: admin/PageIndex.py:254 #, fuzzy msgid "Shut down Cherokee-Admin" msgstr "Bienvenue sur Cherokee Admin" -#: admin/PageIndex.py:329 admin/PageIndex.py:350 +#: admin/PageIndex.py:267 admin/PageIndex.py:288 msgid "Welcome to Cherokee Admin" msgstr "Bienvenue sur Cherokee Admin" @@ -1866,7 +1905,7 @@ msgstr "Manuel" msgid "Manual configuration" msgstr "Configuration manuelle" -#: admin/PageRule.py:249 admin/PageVServer.py:158 +#: admin/PageRule.py:249 admin/PageVServer.py:162 msgid "Final" msgstr "" @@ -1897,7 +1936,7 @@ msgstr "Cloner" msgid "Clone Selected Behavior Rule" msgstr "" -#: admin/PageRule.py:314 admin/PageVServer.py:718 +#: admin/PageRule.py:314 admin/PageVServer.py:727 msgid "Behavior" msgstr "" @@ -2035,7 +2074,7 @@ msgstr "Ajouter une nouvelle variable d'environnement" msgid "Source Usage" msgstr "Utilisation de la source" -#: admin/PageSource.py:253 admin/PageVServer.py:723 +#: admin/PageSource.py:253 admin/PageVServer.py:732 msgid "Virtual Server" msgstr "Serveur Virtuel" @@ -2092,7 +2131,7 @@ msgstr "Sources d'Information" msgid "Sources Filtering" msgstr "" -#: admin/PageSources.py:35 admin/PageVServer.py:141 admin/PageVServers.py:48 +#: admin/PageSources.py:35 admin/PageVServer.py:145 admin/PageVServers.py:48 #: admin/PageVServers.py:294 msgid "Virtual Servers" msgstr "Serveurs Virtuels" @@ -2117,134 +2156,139 @@ msgid "Virtual Server Filtering" msgstr "Serveur Virtuel" #: admin/PageVServer.py:44 +msgid "Reference" +msgstr "" + +#: admin/PageVServer.py:47 msgid "Nickname for the virtual server." msgstr "Surnom pour le serveur virtuel." -#: admin/PageVServer.py:45 +#: admin/PageVServer.py:48 msgid "" "This directive points to the PEM-encoded Certificate file for the server " "(Full path to the file)" msgstr "" -#: admin/PageVServer.py:46 +#: admin/PageVServer.py:49 msgid "PEM-encoded Private Key file for the server (Full path to the file)" msgstr "" -#: admin/PageVServer.py:47 +#: admin/PageVServer.py:50 msgid "" "File containing the trusted CA certificates, utilized for checking the " "client certificates (Full path to the file)" msgstr "" -#: admin/PageVServer.py:48 -msgid "" -"Ciphers that TLS/SSL is allowed to use. Reference. (Default enables " -"Forward Secrecy)." +#: admin/PageVServer.py:51 +msgid "Ciphers that TLSv1.2 and below is allowed to use." msgstr "" -#: admin/PageVServer.py:49 +#: admin/PageVServer.py:52 +msgid "Ciphersuites that TLSv1.3 is allowed to use." +msgstr "" + +#: admin/PageVServer.py:53 msgid "" "The cipher sequence that is specified by the server should have preference " "over the client preference. (Default: True)." msgstr "" -#: admin/PageVServer.py:50 +#: admin/PageVServer.py:54 msgid "" "Explicitly enable or disable serverside compression support. (Default: " "Disabled)." msgstr "" -#: admin/PageVServer.py:51 +#: admin/PageVServer.py:55 msgid "" "Explicitely sets the Diffie-Hellman parameters length. (Default: Let openssl " "choose)." msgstr "" -#: admin/PageVServer.py:52 +#: admin/PageVServer.py:56 #, fuzzy msgid "Skip, Tolerate, Accept or Require client certificates." msgstr "Ignorer, Accepter ou Requérir des certificats client." -#: admin/PageVServer.py:53 +#: admin/PageVServer.py:57 msgid "" "Limit up to which depth certificates in a chain are used during the " "verification procedure (Default: 1)" msgstr "" -#: admin/PageVServer.py:54 +#: admin/PageVServer.py:58 msgid "Allows the selection of how to generate the error responses." msgstr "" -#: admin/PageVServer.py:55 +#: admin/PageVServer.py:59 msgid "" "Directory inside the user home directory to use as root web directory. " "Disabled if empty." msgstr "" -#: admin/PageVServer.py:56 +#: admin/PageVServer.py:60 msgid "The personal web support is currently turned on." msgstr "" -#: admin/PageVServer.py:57 +#: admin/PageVServer.py:61 msgid "Adds a new domain name. Wildcards are allowed in the domain name." msgstr "" -#: admin/PageVServer.py:58 +#: admin/PageVServer.py:62 msgid "Virtual Server root directory." msgstr "Répertoire racine du serveur virtuel." -#: admin/PageVServer.py:59 +#: admin/PageVServer.py:63 msgid "" "List of name files that will be used as directory index. Eg: index.html," "index.php." msgstr "" -#: admin/PageVServer.py:60 +#: admin/PageVServer.py:64 msgid "The maximum size, in bytes, for POST uploads. (Default: unlimited)" msgstr "" "La taille maximale, en octets, pour les envois POST. (Par défaut: illimitée)." -#: admin/PageVServer.py:61 +#: admin/PageVServer.py:65 msgid "Whether this virtual server is allowed to use Keep-alive (Default: yes)" msgstr "" -#: admin/PageVServer.py:62 +#: admin/PageVServer.py:66 msgid "The Logging is currently enabled." msgstr "" -#: admin/PageVServer.py:63 +#: admin/PageVServer.py:67 msgid "Logging format. Apache compatible is highly recommended here." msgstr "" -#: admin/PageVServer.py:64 +#: admin/PageVServer.py:68 msgid "Back-end used to store the log accesses." msgstr "" -#: admin/PageVServer.py:65 +#: admin/PageVServer.py:69 msgid "Back-end used to store the log errors." msgstr "" -#: admin/PageVServer.py:66 +#: admin/PageVServer.py:70 msgid "Back-end used to store the log accesses and errors." msgstr "" -#: admin/PageVServer.py:67 +#: admin/PageVServer.py:71 msgid "Full path to the file where the information will be saved." msgstr "Chemin complet du fichier vers lequel l'information sera sauvegardée." -#: admin/PageVServer.py:68 +#: admin/PageVServer.py:72 msgid "Path to the executable that will be invoked on each log entry." msgstr "" "Chemin vers l'éxécutable qui sera appelé pour chaque entrée du journal." -#: admin/PageVServer.py:69 +#: admin/PageVServer.py:73 msgid "" "Whether the logger should read and use the X-Real-IP and X-Forwarded-For " "headers (send by reverse proxies)." msgstr "" -#: admin/PageVServer.py:71 +#: admin/PageVServer.py:75 msgid "" "List of IP addresses and subnets that are allowed to send X-Real-IP and X-" "Forwarded-For headers." @@ -2252,500 +2296,504 @@ msgstr "" "Liste d'adresses IP et de sous-réseaux qui sont autorisés à envoyer des en-" "têtes X-Real-IP et X-Forwarded-For." -#: admin/PageVServer.py:72 +#: admin/PageVServer.py:76 msgid "" "How to support the \"Advanced Virtual Hosting\" mechanism. (Default: off)" msgstr "" -#: admin/PageVServer.py:73 +#: admin/PageVServer.py:77 msgid "The following variables are accepted: " msgstr "" -#: admin/PageVServer.py:74 +#: admin/PageVServer.py:78 msgid "Allows the selection of domain matching method." msgstr "" -#: admin/PageVServer.py:75 +#: admin/PageVServer.py:79 msgid "" "Whether or not it should collected statistics about the traffic of this " "virtual server." msgstr "" -#: admin/PageVServer.py:76 +#: admin/PageVServer.py:80 msgid "Time standard to use in the log file entries." msgstr "" -#: admin/PageVServer.py:77 +#: admin/PageVServer.py:81 msgid "" "Remember that only \"File Exists\" rules and \"List & Send\" handlers use " "the Directory Indexes setting." msgstr "" -#: admin/PageVServer.py:78 +#: admin/PageVServer.py:82 msgid "" "Use this nickname as an additional host name for this virtual server " "(Default: yes)" msgstr "" -#: admin/PageVServer.py:79 +#: admin/PageVServer.py:83 msgid "Enforce HTTPS by using the HTTP Strict Transport Security." msgstr "" -#: admin/PageVServer.py:80 +#: admin/PageVServer.py:84 msgid "" "How long the client's browser should remember the forced HTTPS (in seconds)." msgstr "" -#: admin/PageVServer.py:81 +#: admin/PageVServer.py:85 msgid "" "Should HSTS be used in all the subdomains of this virtual server (Default: " "yes)." msgstr "" -#: admin/PageVServer.py:83 +#: admin/PageVServer.py:87 msgid "

The 'default' virtual server matches all the domain names.

" msgstr "" -#: admin/PageVServer.py:86 +#: admin/PageVServer.py:90 #, fuzzy msgid "Remote IP address" msgstr "Adresse IP du serveur LDAP." -#: admin/PageVServer.py:87 +#: admin/PageVServer.py:91 #, fuzzy msgid "Local IP address" msgstr "Adresse IP du serveur LDAP." -#: admin/PageVServer.py:88 +#: admin/PageVServer.py:92 #, fuzzy msgid "Request Protocol" msgstr "Requête" -#: admin/PageVServer.py:89 +#: admin/PageVServer.py:93 msgid "Transport type: http or https" msgstr "" -#: admin/PageVServer.py:90 +#: admin/PageVServer.py:94 msgid "Port of the server serving the request" msgstr "" -#: admin/PageVServer.py:91 +#: admin/PageVServer.py:95 msgid "The query string, if exists" msgstr "" -#: admin/PageVServer.py:92 +#: admin/PageVServer.py:96 msgid "First line of HTTP request" msgstr "" -#: admin/PageVServer.py:93 +#: admin/PageVServer.py:97 msgid "Response status code" msgstr "" -#: admin/PageVServer.py:94 +#: admin/PageVServer.py:98 msgid "Time: in common log format time format" msgstr "" -#: admin/PageVServer.py:95 +#: admin/PageVServer.py:99 msgid "Time: seconds since Epoch" msgstr "" -#: admin/PageVServer.py:96 +#: admin/PageVServer.py:100 msgid "Time: milliseconds since Epoch" msgstr "" -#: admin/PageVServer.py:97 +#: admin/PageVServer.py:101 #, fuzzy msgid "Remote user (authentication)" msgstr "Authentification" -#: admin/PageVServer.py:98 +#: admin/PageVServer.py:102 msgid "URL path requested" msgstr "" -#: admin/PageVServer.py:99 +#: admin/PageVServer.py:103 msgid "URL path requested before any rewrite" msgstr "" -#: admin/PageVServer.py:100 +#: admin/PageVServer.py:104 #, fuzzy msgid "Virtual Server nick name" msgstr "Surnom du Serveur Virtuel" -#: admin/PageVServer.py:101 +#: admin/PageVServer.py:105 msgid "Requested host (Host: header)" msgstr "" -#: admin/PageVServer.py:102 +#: admin/PageVServer.py:106 msgid "Size of the response in bytes" msgstr "" -#: admin/PageVServer.py:103 +#: admin/PageVServer.py:107 msgid "'Host:' header of the request" msgstr "" -#: admin/PageVServer.py:104 +#: admin/PageVServer.py:108 msgid "'Referrer:' header of the request" msgstr "" -#: admin/PageVServer.py:105 +#: admin/PageVServer.py:109 msgid "'User-Agent:' header of the request" msgstr "" -#: admin/PageVServer.py:106 +#: admin/PageVServer.py:110 msgid "'Cookie:' header of the request" msgstr "" -#: admin/PageVServer.py:142 +#: admin/PageVServer.py:146 msgid "Loggers" msgstr "" -#: admin/PageVServer.py:143 +#: admin/PageVServer.py:147 msgid "SSL cookbook" msgstr "" -#: admin/PageVServer.py:147 admin/PageVServer.py:184 +#: admin/PageVServer.py:151 admin/PageVServer.py:188 msgid "Match" msgstr "" -#: admin/PageVServer.py:147 +#: admin/PageVServer.py:151 #, fuzzy msgid "Rule Match" msgstr "Chemin complet" -#: admin/PageVServer.py:148 +#: admin/PageVServer.py:152 #, fuzzy msgid "Assigned Handler" msgstr "Gestionnaire" -#: admin/PageVServer.py:149 +#: admin/PageVServer.py:153 msgid "Auth" msgstr "" -#: admin/PageVServer.py:150 +#: admin/PageVServer.py:154 #, fuzzy msgid "Custom Document Root" msgstr "Racine des Documents" -#: admin/PageVServer.py:150 +#: admin/PageVServer.py:154 msgid "Root" msgstr "Racine" -#: admin/PageVServer.py:151 +#: admin/PageVServer.py:155 msgid "Only HTTPS" msgstr "" -#: admin/PageVServer.py:151 +#: admin/PageVServer.py:155 #, fuzzy msgid "Secure" msgstr "Sécurité" -#: admin/PageVServer.py:152 +#: admin/PageVServer.py:156 msgid "Enc" msgstr "" -#: admin/PageVServer.py:152 +#: admin/PageVServer.py:156 #, fuzzy msgid "Encoders" msgstr "Encodage" -#: admin/PageVServer.py:153 +#: admin/PageVServer.py:157 #, fuzzy msgid "Cacheable" msgstr "Compatible Apache" -#: admin/PageVServer.py:154 +#: admin/PageVServer.py:158 msgid "Exp" msgstr "" -#: admin/PageVServer.py:155 +#: admin/PageVServer.py:159 #, fuzzy msgid "Connection Timeout" msgstr "Connections / Requêtes" -#: admin/PageVServer.py:156 +#: admin/PageVServer.py:160 #, fuzzy msgid "Shaping" msgstr "Mise en forme de Trafic" -#: admin/PageVServer.py:157 +#: admin/PageVServer.py:161 #, fuzzy msgid "Log" msgstr "Journalisation" -#: admin/PageVServer.py:157 +#: admin/PageVServer.py:161 #, fuzzy msgid "Logging Enabled" msgstr " Activé" -#: admin/PageVServer.py:158 +#: admin/PageVServer.py:162 #, fuzzy msgid "Rule is Final" msgstr "Liste de règles" -#: admin/PageVServer.py:184 +#: admin/PageVServer.py:188 #, fuzzy msgid "Match nickname" msgstr "Surnom" -#: admin/PageVServer.py:188 admin/PageVServer.py:717 +#: admin/PageVServer.py:192 admin/PageVServer.py:726 #, fuzzy msgid "Host Match" msgstr "Nom d'hôtes" -#: admin/PageVServer.py:218 admin/PageVServer.py:234 admin/PageVServer.py:258 -#: admin/PageVServer.py:485 admin/PageVServer.py:519 -#: admin/plugins/method.py:99 admin/plugins/method.py:109 +#: admin/PageVServer.py:222 admin/PageVServer.py:238 admin/PageVServer.py:262 +#: admin/PageVServer.py:489 admin/PageVServer.py:523 admin/plugins/method.py:99 +#: admin/plugins/method.py:109 msgid "Method" msgstr "Méthode" -#: admin/PageVServer.py:226 admin/PageVServer.py:242 +#: admin/PageVServer.py:230 admin/PageVServer.py:246 #, fuzzy msgid "Remove criteria" msgstr "Hôte distant" -#: admin/PageVServer.py:260 +#: admin/PageVServer.py:264 #, fuzzy msgid "How to match this Virtual Server" msgstr "Nouveau Serveur Virtuel" -#: admin/PageVServer.py:267 +#: admin/PageVServer.py:271 msgid "Add an additional matching criteria" msgstr "" -#: admin/PageVServer.py:358 +#: admin/PageVServer.py:362 msgid "Behavior Rules" msgstr "" -#: admin/PageVServer.py:367 +#: admin/PageVServer.py:371 #, fuzzy msgid "Rule Management" msgstr "Gestion" -#: admin/PageVServer.py:393 +#: admin/PageVServer.py:397 msgid "Only accept Secure Connections" msgstr "" -#: admin/PageVServer.py:398 +#: admin/PageVServer.py:402 #, fuzzy msgid "Encoding enabled" msgstr "Encodage" -#: admin/PageVServer.py:404 +#: admin/PageVServer.py:408 msgid "no" msgstr "" -#: admin/PageVServer.py:415 +#: admin/PageVServer.py:419 #, fuzzy msgid " seconds" msgstr "Icônes" -#: admin/PageVServer.py:420 +#: admin/PageVServer.py:424 msgid " bytes per second" msgstr "" -#: admin/PageVServer.py:425 +#: admin/PageVServer.py:429 msgid "Logging enabled for this rule" msgstr "" -#: admin/PageVServer.py:430 +#: admin/PageVServer.py:434 msgid "Prevents further rule evaluation" msgstr "" -#: admin/PageVServer.py:435 +#: admin/PageVServer.py:439 msgid "Content can be cached" msgstr "" -#: admin/PageVServer.py:438 +#: admin/PageVServer.py:442 msgid "Forbids content caching" msgstr "" -#: admin/PageVServer.py:455 +#: admin/PageVServer.py:459 msgid "Virtual Server nickname" msgstr "Surnom du Serveur Virtuel" -#: admin/PageVServer.py:457 +#: admin/PageVServer.py:461 msgid "Server ID" msgstr "ID Serveur" -#: admin/PageVServer.py:463 +#: admin/PageVServer.py:467 msgid "Directory Indexes" msgstr "" -#: admin/PageVServer.py:465 admin/plugins/fullpath.py:119 +#: admin/PageVServer.py:469 admin/plugins/fullpath.py:119 msgid "Paths" msgstr "Chemins" -#: admin/PageVServer.py:471 +#: admin/PageVServer.py:475 msgid "Neither are in use at the moment." msgstr "" -#: admin/PageVServer.py:476 +#: admin/PageVServer.py:480 msgid "Keep-alive" msgstr "" -#: admin/PageVServer.py:477 +#: admin/PageVServer.py:481 msgid "Max Upload Size" msgstr "" -#: admin/PageVServer.py:487 admin/plugins/evhost.py:33 +#: admin/PageVServer.py:491 admin/plugins/evhost.py:33 msgid "Advanced Virtual Hosting" msgstr "Hébergement Virtuel Avancé" -#: admin/PageVServer.py:521 +#: admin/PageVServer.py:525 msgid "Error Handling hook" msgstr "" -#: admin/PageVServer.py:532 admin/consts.py:233 admin/consts.py:250 +#: admin/PageVServer.py:536 admin/consts.py:232 admin/consts.py:249 msgid "Disabled" msgstr "Désactivé" -#: admin/PageVServer.py:536 +#: admin/PageVServer.py:540 msgid "Write errors to" msgstr "" -#: admin/PageVServer.py:540 admin/PageVServer.py:579 +#: admin/PageVServer.py:544 admin/PageVServer.py:583 msgid "Filename" msgstr "Nom de fichier" -#: admin/PageVServer.py:542 admin/PageVServer.py:582 +#: admin/PageVServer.py:546 admin/PageVServer.py:586 msgid "Command" msgstr "Commande" -#: admin/PageVServer.py:548 +#: admin/PageVServer.py:552 #, fuzzy msgid "Error Logging" msgstr "Journalisation" -#: admin/PageVServer.py:559 +#: admin/PageVServer.py:563 msgid "Format" msgstr "" -#: admin/PageVServer.py:566 +#: admin/PageVServer.py:570 msgid "Write accesses to" msgstr "" -#: admin/PageVServer.py:589 +#: admin/PageVServer.py:593 #, fuzzy msgid "Hide" msgstr "En-tête" -#: admin/PageVServer.py:589 +#: admin/PageVServer.py:593 #, fuzzy msgid "Show macros" msgstr "Groupe" -#: admin/PageVServer.py:598 +#: admin/PageVServer.py:602 msgid "Template: " msgstr "Modèle:" -#: admin/PageVServer.py:600 +#: admin/PageVServer.py:604 #, fuzzy msgid "Access Logging" msgstr "Journalisation" -#: admin/PageVServer.py:606 +#: admin/PageVServer.py:610 msgid "Time standard" msgstr "" -#: admin/PageVServer.py:607 admin/PageVServer.py:687 admin/consts.py:228 +#: admin/PageVServer.py:611 admin/PageVServer.py:696 admin/consts.py:227 msgid "Accept" msgstr "Accepter" -#: admin/PageVServer.py:607 +#: admin/PageVServer.py:611 msgid "Accept Forwarded IPs" msgstr "" -#: admin/PageVServer.py:610 +#: admin/PageVServer.py:614 #, fuzzy msgid "Do not check" msgstr "Ne pas vérifier l'origine" -#: admin/PageVServer.py:619 +#: admin/PageVServer.py:623 #, fuzzy msgid "Logging Options" msgstr "Options CGI communes" -#: admin/PageVServer.py:655 admin/wizards/ssl_test.py:136 +#: admin/PageVServer.py:659 admin/wizards/ssl_test.py:136 msgid "Certificate" msgstr "Certificat" -#: admin/PageVServer.py:656 +#: admin/PageVServer.py:660 msgid "Certificate key" msgstr "Clé du certificat" -#: admin/PageVServer.py:661 +#: admin/PageVServer.py:665 msgid "Required SSL/TLS Values" msgstr "" -#: admin/PageVServer.py:666 +#: admin/PageVServer.py:674 +msgid "Ciphersuites" +msgstr "" + +#: admin/PageVServer.py:675 msgid "Ciphers" msgstr "" -#: admin/PageVServer.py:667 +#: admin/PageVServer.py:676 #, fuzzy msgid "Prefer" msgstr "Préfixe" -#: admin/PageVServer.py:667 +#: admin/PageVServer.py:676 #, fuzzy msgid "Server Preference" msgstr "Trafic Serveur" -#: admin/PageVServer.py:668 +#: admin/PageVServer.py:677 msgid "Client Certs. Request" msgstr "" -#: admin/PageVServer.py:669 +#: admin/PageVServer.py:678 msgid "Compression" msgstr "" -#: admin/PageVServer.py:670 +#: admin/PageVServer.py:679 msgid "DH length" msgstr "" -#: admin/PageVServer.py:673 +#: admin/PageVServer.py:682 msgid "CA List" msgstr "" -#: admin/PageVServer.py:676 +#: admin/PageVServer.py:685 msgid "Verify Depth" msgstr "" -#: admin/PageVServer.py:682 +#: admin/PageVServer.py:691 #, fuzzy msgid "Advanced Options" msgstr "Options avancées" -#: admin/PageVServer.py:687 +#: admin/PageVServer.py:696 #, fuzzy msgid "Enable HSTS" msgstr " Activé" -#: admin/PageVServer.py:690 +#: admin/PageVServer.py:699 msgid "HSTS Max-Age" msgstr "" -#: admin/PageVServer.py:690 +#: admin/PageVServer.py:699 msgid "One year" msgstr "" -#: admin/PageVServer.py:691 +#: admin/PageVServer.py:700 msgid "Include Subdomains" msgstr "" -#: admin/PageVServer.py:691 +#: admin/PageVServer.py:700 msgid "Include all" msgstr "" -#: admin/PageVServer.py:697 +#: admin/PageVServer.py:706 msgid "HTTP Strict Transport Security (HSTS)" msgstr "" -#: admin/PageVServer.py:716 +#: admin/PageVServer.py:725 msgid "Basics" msgstr "" -#: admin/PageVServer.py:719 +#: admin/PageVServer.py:728 msgid "Error Handler" msgstr "" @@ -3051,8 +3099,8 @@ msgstr "Produit + Plate-forme" msgid "Full Server string" msgstr "Chaine serveur complête" -#: admin/consts.py:51 admin/consts.py:80 admin/consts.py:97 -#: admin/consts.py:111 admin/plugins/mysql.py:45 +#: admin/consts.py:51 admin/consts.py:80 admin/consts.py:97 admin/consts.py:111 +#: admin/plugins/mysql.py:45 msgid "None" msgstr "Aucun" @@ -3254,192 +3302,192 @@ msgstr "Dynamique" msgid "Automatic" msgstr "Automatique" -#: admin/consts.py:145 admin/plugins/error_redir.py:35 +#: admin/consts.py:144 admin/plugins/error_redir.py:35 msgid "External" msgstr "Externe" -#: admin/consts.py:146 admin/plugins/error_redir.py:34 +#: admin/consts.py:145 admin/plugins/error_redir.py:34 msgid "Internal" msgstr "Interne" -#: admin/consts.py:189 admin/plugins/header.py:116 admin/plugins/proxy.py:94 +#: admin/consts.py:188 admin/plugins/header.py:118 admin/plugins/proxy.py:94 #: admin/plugins/proxy.py:144 admin/plugins/redir.py:76 #: admin/plugins/redir.py:106 admin/plugins/request.py:31 #: admin/plugins/url_arg.py:76 admin/plugins/url_arg.py:95 msgid "Regular Expression" msgstr "Expression Régulière" -#: admin/consts.py:191 +#: admin/consts.py:190 msgid "File Exists" msgstr "Le fichier existe" -#: admin/consts.py:192 +#: admin/consts.py:191 msgid "HTTP Method" msgstr "Méthode HTTP" -#: admin/consts.py:193 admin/plugins/bind.py:76 admin/plugins/bind.py:129 +#: admin/consts.py:192 admin/plugins/bind.py:76 admin/plugins/bind.py:129 msgid "Incoming IP/Port" msgstr "IP/Port Entrant" -#: admin/consts.py:194 +#: admin/consts.py:193 msgid "SSL / TLS" msgstr "" -#: admin/consts.py:195 admin/plugins/fullpath.py:66 +#: admin/consts.py:194 admin/plugins/fullpath.py:66 #: admin/plugins/fullpath.py:101 msgid "Full Path" msgstr "Chemin complet" -#: admin/consts.py:196 admin/plugins/from.py:71 +#: admin/consts.py:195 admin/plugins/from.py:71 msgid "Connected from" msgstr "Connecté depuis" -#: admin/consts.py:197 +#: admin/consts.py:196 msgid "URL Argument" msgstr "" -#: admin/consts.py:198 +#: admin/consts.py:197 msgid "GeoIP" msgstr "" -#: admin/consts.py:202 +#: admin/consts.py:201 #, fuzzy msgid "Match Nickname" msgstr "Surnom" -#: admin/consts.py:203 +#: admin/consts.py:202 msgid "Wildcards" msgstr "" -#: admin/consts.py:205 +#: admin/consts.py:204 msgid "Server IP" msgstr "IP Serveur" -#: admin/consts.py:209 admin/consts.py:255 +#: admin/consts.py:208 admin/consts.py:254 msgid "Not set" msgstr "" -#: admin/consts.py:210 +#: admin/consts.py:209 msgid "Already expired on 1970" msgstr "" -#: admin/consts.py:211 +#: admin/consts.py:210 msgid "Do not expire until 2038" msgstr "" -#: admin/consts.py:212 +#: admin/consts.py:211 msgid "Custom value" msgstr "" -#: admin/consts.py:216 +#: admin/consts.py:215 msgid "No TLS/SSL" msgstr "" -#: admin/consts.py:217 +#: admin/consts.py:216 msgid "OpenSSL / libssl" msgstr "" -#: admin/consts.py:221 admin/util.py:91 +#: admin/consts.py:220 admin/util.py:91 msgid "Off" msgstr "" -#: admin/consts.py:222 +#: admin/consts.py:221 msgid "Enhanced Virtual Hosting" msgstr "Hébergement Virtuel Amélioré" -#: admin/consts.py:226 +#: admin/consts.py:225 msgid "Skip" msgstr "Passer" -#: admin/consts.py:227 +#: admin/consts.py:226 msgid "Tolerate" msgstr "" -#: admin/consts.py:229 +#: admin/consts.py:228 msgid "Require" msgstr "" -#: admin/consts.py:234 +#: admin/consts.py:233 msgid "RRDtool graphs" msgstr "Graphes RRDtool" -#: admin/consts.py:238 +#: admin/consts.py:237 msgid "Local time" msgstr "Heure locale" -#: admin/consts.py:239 +#: admin/consts.py:238 msgid "UTC: Coordinated Universal Time" msgstr "" -#: admin/consts.py:243 +#: admin/consts.py:242 msgid "JSON" msgstr "" -#: admin/consts.py:244 +#: admin/consts.py:243 msgid "Python" msgstr "" -#: admin/consts.py:245 admin/wizards/List.py:91 +#: admin/consts.py:244 admin/wizards/List.py:91 msgid "PHP" msgstr "" -#: admin/consts.py:246 +#: admin/consts.py:245 msgid "Ruby" msgstr "" -#: admin/consts.py:251 +#: admin/consts.py:250 msgid "POST tracker" msgstr "" -#: admin/consts.py:256 +#: admin/consts.py:255 msgid "Public" msgstr "" -#: admin/consts.py:257 +#: admin/consts.py:256 msgid "Private" msgstr "" -#: admin/consts.py:258 +#: admin/consts.py:257 msgid "No Cache" msgstr "" -#: admin/consts.py:263 +#: admin/consts.py:262 msgid "0 - No compression" msgstr "" -#: admin/consts.py:264 +#: admin/consts.py:263 msgid "1" msgstr "" -#: admin/consts.py:265 +#: admin/consts.py:264 msgid "2" msgstr "" -#: admin/consts.py:266 +#: admin/consts.py:265 msgid "3" msgstr "" -#: admin/consts.py:267 +#: admin/consts.py:266 msgid "4" msgstr "" -#: admin/consts.py:268 +#: admin/consts.py:267 msgid "5" msgstr "" -#: admin/consts.py:269 +#: admin/consts.py:268 msgid "6" msgstr "" -#: admin/consts.py:270 +#: admin/consts.py:269 msgid "7" msgstr "" -#: admin/consts.py:271 +#: admin/consts.py:270 msgid "8" msgstr "" -#: admin/consts.py:272 +#: admin/consts.py:271 msgid "9 - Max compression" msgstr "" @@ -3623,70 +3671,70 @@ msgstr "" msgid "Only listing" msgstr "" -#: admin/plugins/dirlist.py:49 admin/plugins/dirlist.py:50 #: admin/plugins/dirlist.py:51 admin/plugins/dirlist.py:52 #: admin/plugins/dirlist.py:53 admin/plugins/dirlist.py:54 +#: admin/plugins/dirlist.py:55 admin/plugins/dirlist.py:56 #: admin/plugins/redir.py:105 msgid "Show" msgstr "Afficher" -#: admin/plugins/dirlist.py:49 +#: admin/plugins/dirlist.py:51 #, fuzzy msgid "Show Size" msgstr "Afficher" -#: admin/plugins/dirlist.py:50 +#: admin/plugins/dirlist.py:52 #, fuzzy msgid "Show Date" msgstr "Afficher" -#: admin/plugins/dirlist.py:51 +#: admin/plugins/dirlist.py:53 #, fuzzy msgid "Show User" msgstr "Utilisateur" -#: admin/plugins/dirlist.py:52 +#: admin/plugins/dirlist.py:54 #, fuzzy msgid "Show Group" msgstr "Groupe" -#: admin/plugins/dirlist.py:53 +#: admin/plugins/dirlist.py:55 msgid "Show Backup files" msgstr "Montrer les fichiers backup" -#: admin/plugins/dirlist.py:54 +#: admin/plugins/dirlist.py:56 msgid "Show Hidden files" msgstr "Montrer les fichiers cachés" -#: admin/plugins/dirlist.py:55 +#: admin/plugins/dirlist.py:58 admin/plugins/file.py:44 msgid "Allow symbolic links" msgstr "Permettre les liens symboliques" -#: admin/plugins/dirlist.py:56 +#: admin/plugins/dirlist.py:59 msgid "Redirect symbolic links" msgstr "Rediriger les liens symboliques" -#: admin/plugins/dirlist.py:60 +#: admin/plugins/dirlist.py:63 msgid "Listing" msgstr "" -#: admin/plugins/dirlist.py:65 +#: admin/plugins/dirlist.py:68 msgid "Theme" msgstr "Thème" -#: admin/plugins/dirlist.py:66 +#: admin/plugins/dirlist.py:69 msgid "Icons dir" msgstr "Répertoire Icônes" -#: admin/plugins/dirlist.py:67 +#: admin/plugins/dirlist.py:70 msgid "Notice files" msgstr "Fichiers notices" -#: admin/plugins/dirlist.py:68 +#: admin/plugins/dirlist.py:71 msgid "Hidden files" msgstr "Fichiers cachés" -#: admin/plugins/dirlist.py:72 +#: admin/plugins/dirlist.py:75 #, fuzzy msgid "Theming" msgstr "Thème" @@ -3829,7 +3877,7 @@ msgstr "FastCGI" msgid "Enables an internal I/O cache that improves performance." msgstr "" -#: admin/plugins/file.py:45 +#: admin/plugins/file.py:49 msgid "File Sending" msgstr "Envoi de Fichier" @@ -3918,26 +3966,26 @@ msgid "" "header entry." msgstr "" -#: admin/plugins/header.py:65 +#: admin/plugins/header.py:67 #, fuzzy msgid "Matches a Regular Expression" msgstr "Nouvelle Expression Régulière" -#: admin/plugins/header.py:66 +#: admin/plugins/header.py:68 msgid "Is Provided" msgstr "" -#: admin/plugins/header.py:104 +#: admin/plugins/header.py:106 #, fuzzy msgid "Full header" msgstr "Nom de fichier" -#: admin/plugins/header.py:107 +#: admin/plugins/header.py:109 #, fuzzy msgid "Complete Header" msgstr "Cacher l'en-tête" -#: admin/plugins/header.py:154 +#: admin/plugins/header.py:156 #, python-format msgid "Header %(header)s is provided" msgstr "" @@ -4072,6 +4120,7 @@ msgid "Database name containing the user/password pair list." msgstr "" #: admin/plugins/mysql.py:41 +#, python-brace-format msgid "" "SQL command to execute. ${user} is replaced with the user name, and " "${passwd} is replaced with the user supplied password." @@ -4509,20 +4558,16 @@ msgstr "Ajouter nouveau" msgid "Accepted Domains" msgstr "Domaine Cible" -#: admin/server.py:68 +#: admin/server.py:70 #, python-format msgid "Server %(version)s running.. PID=%(pid)d Port=%(scgi_port)s" msgstr "" -#: admin/server.py:70 +#: admin/server.py:72 #, python-format msgid "Server %(version)s running.. PID=%(pid)d Socket=%(scgi_port)s" msgstr "" -#: admin/server.py:144 -msgid "Incorrect parameters: PORT CONFIG_FILE" -msgstr "" - #: admin/util.py:91 msgid "On" msgstr "" @@ -4920,9 +4965,8 @@ msgstr "Port du service sur l'hôte en question. (Exemple: 8080)" #: admin/wizards/alfresco.py:45 admin/wizards/coldfusion.py:46 #: admin/wizards/concrete5.py:47 admin/wizards/django.py:44 #: admin/wizards/glassfish.py:45 admin/wizards/mailman.py:48 -#: admin/wizards/mono.py:46 admin/wizards/php.py:43 -#: admin/wizards/symfony.py:51 admin/wizards/uwsgi.py:61 -#: admin/wizards/zend.py:47 +#: admin/wizards/mono.py:46 admin/wizards/php.py:43 admin/wizards/symfony.py:51 +#: admin/wizards/uwsgi.py:61 admin/wizards/zend.py:47 #, fuzzy msgid "Host name of the virtual server that is about to be created." msgstr "Surnom pour le serveur virtuel." @@ -4930,9 +4974,8 @@ msgstr "Surnom pour le serveur virtuel." #: admin/wizards/alfresco.py:46 admin/wizards/coldfusion.py:45 #: admin/wizards/concrete5.py:46 admin/wizards/django.py:43 #: admin/wizards/glassfish.py:46 admin/wizards/mailman.py:47 -#: admin/wizards/mono.py:45 admin/wizards/php.py:42 -#: admin/wizards/symfony.py:50 admin/wizards/uwsgi.py:60 -#: admin/wizards/zend.py:46 +#: admin/wizards/mono.py:45 admin/wizards/php.py:42 admin/wizards/symfony.py:50 +#: admin/wizards/uwsgi.py:60 admin/wizards/zend.py:46 #, fuzzy msgid "New Virtual Server Details" msgstr "Nouveau Serveur Virtuel" @@ -5840,3 +5883,15 @@ msgstr "" #: admin/wizards/zend.py:49 msgid "Web directory where you want Zend to be accessible. (Example: /zend)" msgstr "" + +#, fuzzy +#~ msgid "Disable %s" +#~ msgstr "Désactivé" + +#, fuzzy +#~ msgid "Purchase commercial support" +#~ msgstr "Fonctionnalités" + +#, fuzzy +#~ msgid "Your name" +#~ msgstr "Nom d'hôtes" diff --git a/po/admin/gl.po b/po/admin/gl.po index c583e3416..816096114 100644 --- a/po/admin/gl.po +++ b/po/admin/gl.po @@ -4,13 +4,13 @@ # msgid "" msgstr "" -"Project-Id-Version: cherokee 1.0\n" -"Report-Msgid-Bugs-To: http://bugs.cherokee-project.com/\n" -"POT-Creation-Date: 2014-01-04 00:54+0100\n" +"Project-Id-Version: cherokee 1.2.104\n" +"Report-Msgid-Bugs-To: https://github.com/cherokee/webserver/issues\n" +"POT-Creation-Date: 2021-03-26 19:04+0100\n" "PO-Revision-Date: 2010-10-29 07:27+0100\n" "Last-Translator: Xose M. \n" "Language-Team: Trasno \n" -"Language: \n" +"Language: gl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -103,7 +103,7 @@ msgstr "Orixes de Datos" msgid "Assign Information Sources" msgstr "Asignar Orixes de Datos" -#: admin/Balancer.py:136 admin/PageIndex.py:204 admin/PageRule.py:112 +#: admin/Balancer.py:136 admin/PageIndex.py:182 admin/PageRule.py:112 #: admin/plugins/bind.py:69 admin/plugins/bind.py:121 #: admin/plugins/custom_error.py:41 admin/plugins/method.py:31 msgid "Choose" @@ -138,17 +138,17 @@ msgstr "Non puido copiar a configuración a " #: admin/CTK/CTK/Druid.py:216 admin/CTK/CTK/Druid.py:224 #: admin/CTK/CTK/Druid.py:232 admin/CTK/CTK/Druid.py:238 admin/Icons.py:362 #: admin/Mime.py:110 admin/PageGeneral.py:289 admin/PageGeneral.py:317 -#: admin/PageIndex.py:232 admin/PageIndex.py:308 admin/PageRule.py:225 -#: admin/PageRule.py:276 admin/PageRule.py:302 admin/PageSource.py:225 -#: admin/PageSource.py:411 admin/PageSource.py:428 admin/PageSource.py:442 -#: admin/PageVServers.py:215 admin/PageVServers.py:252 -#: admin/PageVServers.py:281 admin/plugins/redir.py:120 +#: admin/PageIndex.py:246 admin/PageRule.py:225 admin/PageRule.py:276 +#: admin/PageRule.py:302 admin/PageSource.py:225 admin/PageSource.py:411 +#: admin/PageSource.py:428 admin/PageSource.py:442 admin/PageVServers.py:215 +#: admin/PageVServers.py:252 admin/PageVServers.py:281 +#: admin/plugins/redir.py:120 msgid "Cancel" msgstr "Cancelar" #: admin/CTK/CTK/Dialog.py:165 admin/CTK/CTK/Dialog.py:272 #: admin/CTK/CTK/Druid.py:243 admin/PageException.py:89 -#: admin/PageException.py:93 admin/PageGeneral.py:283 admin/PageIndex.py:277 +#: admin/PageException.py:93 admin/PageGeneral.py:283 admin/PageIndex.py:215 #: admin/PageSource.py:402 admin/plugins/error_redir.py:110 msgid "Close" msgstr "Pechar" @@ -186,14 +186,14 @@ msgstr "Cargando" #: admin/CTK/CTK/Image.py:99 admin/CgiBase.py:69 admin/CgiBase.py:71 #: admin/CgiBase.py:124 admin/CgiBase.py:125 admin/CgiBase.py:126 #: admin/CgiBase.py:127 admin/CgiBase.py:128 admin/Graph.py:125 -#: admin/PageAdvanced.py:150 admin/PageEntry.py:150 admin/PageEntry.py:159 -#: admin/PageGeneral.py:193 admin/PageSource.py:296 -#: admin/plugins/dirlist.py:56 admin/plugins/exists.py:72 -#: admin/plugins/exists.py:77 admin/plugins/exists.py:78 -#: admin/plugins/exists.py:79 admin/plugins/exists.py:109 -#: admin/plugins/exists.py:115 admin/plugins/exists.py:116 -#: admin/plugins/exists.py:117 admin/plugins/file.py:40 -#: admin/plugins/ldap.py:53 admin/plugins/streaming.py:43 +#: admin/PageAdvanced.py:198 admin/PageEntry.py:150 admin/PageEntry.py:159 +#: admin/PageGeneral.py:193 admin/PageSource.py:296 admin/plugins/dirlist.py:59 +#: admin/plugins/exists.py:72 admin/plugins/exists.py:77 +#: admin/plugins/exists.py:78 admin/plugins/exists.py:79 +#: admin/plugins/exists.py:109 admin/plugins/exists.py:115 +#: admin/plugins/exists.py:116 admin/plugins/exists.py:117 +#: admin/plugins/file.py:42 admin/plugins/ldap.py:53 +#: admin/plugins/streaming.py:43 msgid "Enabled" msgstr "Habilitado" @@ -211,11 +211,12 @@ msgstr "Anterior" msgid "Optional" msgstr "Opcional" -#: admin/CTK/CTK/ToggleButton.py:154 +#: admin/CTK/CTK/ToggleButton.py:154 admin/PageAdvanced.py:245 +#: admin/PageAdvanced.py:258 msgid "Disable" msgstr "Deshabilitar" -#: admin/CTK/CTK/ToggleButton.py:155 admin/PageVServer.py:669 +#: admin/CTK/CTK/ToggleButton.py:155 admin/PageVServer.py:678 #: admin/wizards/flcache.py:157 msgid "Enable" msgstr "Habilitar" @@ -262,7 +263,7 @@ msgid "" msgstr "" "Cando o xestor debe ler e usar o cabezallo X-Real-IP e usalo no REMOTE_ADDR." -#: admin/CgiBase.py:40 admin/PageVServer.py:70 +#: admin/CgiBase.py:40 admin/PageVServer.py:74 msgid "" "Accept all the X-Real-IP and X-Forwarded-For headers. WARNING: Turn it on " "only if you are centain of what you are doing." @@ -283,11 +284,11 @@ msgstr "" msgid "Read X-Real-IP" msgstr "Ler X-Real-IP" -#: admin/CgiBase.py:71 admin/PageVServer.py:610 +#: admin/CgiBase.py:71 admin/PageVServer.py:614 msgid "Don't check origin" msgstr "Non verificar orixe" -#: admin/CgiBase.py:73 admin/PageVServer.py:613 +#: admin/CgiBase.py:73 admin/PageVServer.py:617 msgid "Accept from Hosts" msgstr "Aceptar dende Hosts" @@ -329,7 +330,7 @@ msgid "Allow X-Sendfile" msgstr "Permitir X-Sendfile" #: admin/CgiBase.py:128 admin/plugins/exists.py:77 admin/plugins/exists.py:115 -#: admin/plugins/file.py:40 +#: admin/plugins/file.py:42 msgid "Use I/O cache" msgstr "Usar caché I/O" @@ -423,7 +424,7 @@ msgstr "" "servidor virtual." #: admin/Graph.py:118 admin/PageEntry.py:538 admin/PageSource.py:257 -#: admin/PageStatus.py:70 admin/PageVServer.py:731 admin/PageVServers.py:210 +#: admin/PageStatus.py:70 admin/PageVServer.py:740 admin/PageVServers.py:210 msgid "Unknown" msgstr "Descoñecido" @@ -435,7 +436,7 @@ msgstr "Recoller estatísticas" msgid "Allows to specify an alternative Document Root path." msgstr "Permite indicar unha ruta alternativa para o Documento Raíz." -#: admin/Handler.py:43 admin/PageEntry.py:523 admin/PageVServer.py:462 +#: admin/Handler.py:43 admin/PageEntry.py:523 admin/PageVServer.py:466 #: admin/PageVServers.py:128 admin/wizards/django.py:191 #: admin/wizards/mono.py:199 admin/wizards/php.py:39 admin/wizards/php.py:342 #: admin/wizards/uwsgi.py:267 @@ -447,7 +448,7 @@ msgid "Extension List" msgstr "Lista de extensións" #: admin/Icons.py:129 admin/Icons.py:328 admin/Mime.py:96 admin/Mime.py:131 -#: admin/consts.py:188 admin/plugins/extensions.py:61 +#: admin/consts.py:187 admin/plugins/extensions.py:61 #: admin/wizards/flcache.py:141 msgid "Extensions" msgstr "Extensións" @@ -468,12 +469,13 @@ msgstr "Ficheiros" msgid "Add New File" msgstr "Engadir novo ficheiro" -#: admin/Icons.py:197 admin/Icons.py:329 admin/Rule.py:174 admin/consts.py:42 -#: admin/consts.py:128 admin/consts.py:262 +#: admin/Icons.py:197 admin/Icons.py:329 admin/PageVServer.py:674 +#: admin/PageVServer.py:675 admin/Rule.py:174 admin/consts.py:42 +#: admin/consts.py:128 admin/consts.py:261 msgid "Default" msgstr "Por defecto" -#: admin/Icons.py:198 admin/Icons.py:330 admin/consts.py:187 +#: admin/Icons.py:198 admin/Icons.py:330 admin/consts.py:186 #: admin/plugins/directory.py:31 msgid "Directory" msgstr "Directorio" @@ -486,7 +488,7 @@ msgstr "Ir ó superior" msgid "Modify" msgstr "Modificar" -#: admin/Icons.py:214 admin/PageAdvanced.py:168 admin/PageAdvanced.py:192 +#: admin/Icons.py:214 admin/PageAdvanced.py:216 admin/PageAdvanced.py:316 msgid "Special Files" msgstr "Ficheiros Especiais" @@ -595,7 +597,7 @@ msgstr "Gardar" msgid "Home" msgstr "Inicio" -#: admin/Page.py:155 admin/PageAdvanced.py:150 admin/PageIndex.py:84 +#: admin/Page.py:155 admin/PageAdvanced.py:198 admin/PageIndex.py:62 #: admin/PageStatus.py:40 admin/PageStatus.py:112 msgid "Status" msgstr "Situación" @@ -612,7 +614,7 @@ msgstr "vServers" msgid "Sources" msgstr "Orixes" -#: admin/Page.py:159 admin/PageAdvanced.py:97 admin/PageAdvanced.py:198 +#: admin/Page.py:159 admin/PageAdvanced.py:145 admin/PageAdvanced.py:322 msgid "Advanced" msgstr "Avanzado" @@ -624,7 +626,19 @@ msgstr "Axuda" msgid "Updating..." msgstr "Subindo..." -#: admin/PageAdvanced.py:64 +#: admin/PageAdvanced.py:56 +msgid "" +"

WARNING: The SSL/TLS back-end supports more recent\n" +"versions of TLS protocols, which are not recognized by Cherokee. Please " +"check\n" +"for latest Cherokee updates or report this issue. As a temporary workaround " +"please\n" +"set 'Max. TLS protocol version' to the maximum TLS protocol version " +"supported by\n" +"Cherokee.

Following unknown TLS protocols have been found:" +msgstr "" + +#: admin/PageAdvanced.py:94 msgid "" "

WARNING: This section contains advanced\n" "configuration parameters. Changing things is not recommended unless\n" @@ -634,15 +648,15 @@ msgstr "" "configuración avanzada. Non se recomenda cambiar nada a menos\n" "que realmente sepas o que fas.

" -#: admin/PageAdvanced.py:68 +#: admin/PageAdvanced.py:98 msgid "Defines which thread policy the OS should apply to the server." msgstr "Define que política do SO o servidor debe aplicar." -#: admin/PageAdvanced.py:69 +#: admin/PageAdvanced.py:99 msgid "If empty, Cherokee will calculate a default number." msgstr "Se está baldeiro, Cherokee calculará o valor por omisión." -#: admin/PageAdvanced.py:70 +#: admin/PageAdvanced.py:100 msgid "" "It defines how many file descriptors the server should handle. Default is " "the number showed by ulimit -n" @@ -650,21 +664,21 @@ msgstr "" "Define cantos descriptores de ficheiros o servidor debe manexar. O valor por " "omisión é o amosado por ulimit -n" -#: admin/PageAdvanced.py:71 +#: admin/PageAdvanced.py:101 msgid "Allows to choose the internal file descriptor polling method." msgstr "" "Permite escoller o método interno de inspección de descriptores de ficheiro" -#: admin/PageAdvanced.py:72 +#: admin/PageAdvanced.py:102 msgid "Minimum size of a file to use sendfile(). Default: 32768 Bytes." msgstr "" "Tamaño mínimo do ficheiro para usar sendfile(). Por omisión 32768 Bytes." -#: admin/PageAdvanced.py:73 +#: admin/PageAdvanced.py:103 msgid "Maximum size of a file to use sendfile(). Default: 2 GB." msgstr "Tamaño máximo do ficheiro para usar sendfile(). Por omisión: 2 GB." -#: admin/PageAdvanced.py:74 +#: admin/PageAdvanced.py:104 msgid "" "Name a program that will be called if, by some reason, the server fails. " "Default: cherokee-panic." @@ -672,15 +686,15 @@ msgstr "" "Nome do programa que se executará se, por algúnha razón, o servidor falla. " "Por omisión: cherokee-panic" -#: admin/PageAdvanced.py:75 +#: admin/PageAdvanced.py:105 msgid "Path of the PID file. If empty, the file will not be created." msgstr "Ruta do ficheiro PID. Se está baldeiro, o ficheiro non se creará." -#: admin/PageAdvanced.py:76 +#: admin/PageAdvanced.py:106 msgid "Max. length of the incoming connection queue." msgstr "Lonxitude Max. da cola de conexións entrantes." -#: admin/PageAdvanced.py:77 +#: admin/PageAdvanced.py:107 msgid "" "Set the number of how many internal connections can be held for reuse by " "each thread. Default: 20." @@ -688,7 +702,7 @@ msgstr "" "Establecer o número de cantas conexións internas se poden manter para " "reutilizar en cada tarefa. Por omisión: 20." -#: admin/PageAdvanced.py:78 +#: admin/PageAdvanced.py:108 msgid "" "Sets the number of seconds between log consolidations (flushes). Default: 10 " "seconds." @@ -696,11 +710,11 @@ msgstr "" "Establece o número de segundo entre consolidacións do log (flushes). Por " "omisión: 10 seg." -#: admin/PageAdvanced.py:79 +#: admin/PageAdvanced.py:109 msgid "Time lapse (in seconds) between Nonce cache clean ups." msgstr "Intervalo (en segundos) entre limpeza da caché Nonce." -#: admin/PageAdvanced.py:80 +#: admin/PageAdvanced.py:110 msgid "" "Enables the server-wide keep-alive support. It increases the performance. It " "is usually set on." @@ -708,7 +722,7 @@ msgstr "" "Habilita o soporte Keep-Alive en todo o servidor. Incrementa o rendemento. " "Normalmente habilítase." -#: admin/PageAdvanced.py:81 +#: admin/PageAdvanced.py:111 msgid "" "Maximum number of HTTP requests that can be served by each keepalive " "connection." @@ -716,32 +730,32 @@ msgstr "" "Número máximo de peticións HTTP que poden ser servidas en cada conexión tipo " "keepalive" -#: admin/PageAdvanced.py:82 +#: admin/PageAdvanced.py:112 msgid "" "Allows the server to use Chunked encoding to try to keep Keep-Alive enabled." msgstr "" "Permite ó servidor usar codificación Chunked para tentar manter Keep-Alive " "habilitado." -#: admin/PageAdvanced.py:83 +#: admin/PageAdvanced.py:113 msgid "Activate or deactivate the I/O cache globally." msgstr "Activar ou desactivar globalmente a cache I/O." -#: admin/PageAdvanced.py:84 +#: admin/PageAdvanced.py:114 msgid "Number of pages that the cache should handle." msgstr "Número de páxinas que a cache debería manexar." -#: admin/PageAdvanced.py:85 +#: admin/PageAdvanced.py:115 #, fuzzy msgid "Files under this size (in bytes) will not be cached." msgstr "Ficheiros de menor tamaño non será almacenados." -#: admin/PageAdvanced.py:86 +#: admin/PageAdvanced.py:116 #, fuzzy msgid "Files over this size (in bytes) will not be cached." msgstr "Ficheiros de tamaño maior non serán almacenados." -#: admin/PageAdvanced.py:87 +#: admin/PageAdvanced.py:117 msgid "" "How long (in seconds) the file information should last cached without " "refreshing it." @@ -749,171 +763,230 @@ msgstr "" "Durante canto tempo (en seg.) a información se debe almacenar sen " "actualizala." -#: admin/PageAdvanced.py:88 +#: admin/PageAdvanced.py:118 msgid "How long (in seconds) the file content should last cached." msgstr "" "Durante canto tempo (en seg.) o contido do ficheiro debe permanecer " "almacenado." -#: admin/PageAdvanced.py:89 +#: admin/PageAdvanced.py:119 msgid "Path to a Diffie Hellman (DH) parameters PEM file: 512 bits." msgstr "Ruta ó ficheiro PEM de parámetros Diffie Hellman (DH): 512 bits." -#: admin/PageAdvanced.py:90 +#: admin/PageAdvanced.py:120 msgid "Path to a Diffie Hellman (DH) parameters PEM file: 1024 bits." msgstr "Ruta ó ficheiro PEM de parámetros Diffie Hellman (DH): 1024 bits." -#: admin/PageAdvanced.py:91 +#: admin/PageAdvanced.py:121 msgid "Path to a Diffie Hellman (DH) parameters PEM file: 2048 bits." msgstr "Ruta ó ficheiro PEM de parámetros Diffie Hellman (DH): 2048 bits." -#: admin/PageAdvanced.py:92 +#: admin/PageAdvanced.py:122 msgid "Path to a Diffie Hellman (DH) parameters PEM file: 4096 bits." msgstr "Ruta ó ficheiro PEM de parámetros Diffie Hellman (DH): 4096 bits." -#: admin/PageAdvanced.py:93 +#: admin/PageAdvanced.py:123 +msgid "Your Cherokee Web Server does not support SSL/TLS encryption." +msgstr "" + +#: admin/PageAdvanced.py:124 msgid "Timeout for the TLS/SSL handshake. Default: 15 seconds." msgstr "Caducidade para o hankshake TLS/SSL. Por omisión: 15 seg." -#: admin/PageAdvanced.py:94 +#: admin/PageAdvanced.py:125 +msgid "Beware: it is vulnerable. You should disable SSLv2." +msgstr "" + +#: admin/PageAdvanced.py:126 +msgid "Beware: it is vulnerable. You should disable SSLv3." +msgstr "" + +#: admin/PageAdvanced.py:127 +msgid "TLSv1 is deprecated" +msgstr "" + +#: admin/PageAdvanced.py:128 +msgid "TLSv1.1 is deprecated" +msgstr "" + +#: admin/PageAdvanced.py:129 admin/PageAdvanced.py:130 +msgid " " +msgstr "" + +#: admin/PageAdvanced.py:131 +msgid "" +"The following options work in combination with above min/max TLS protocol " +"version settings. They are deprecated, only set the minimum and maximum " +"supported protocol versions instead." +msgstr "" + +#: admin/PageAdvanced.py:133 +msgid "" +"Minimum required TLS protocol version from clients (Default: auto-configured " +"by libssl)" +msgstr "" + +#: admin/PageAdvanced.py:134 msgid "" -"Allow clients to use SSL version 2 - Beware: it is vulnerable. (Default: No)" +"Maximum supported TLS protocol version (Default: auto-configured by libssl)" msgstr "" -"Permitir ós clientes usar SSL ver.2 - Coidado: é vulnerable. (Por omisión: " -"NON)" -#: admin/PageAdvanced.py:119 admin/PageAdvanced.py:121 +#: admin/PageAdvanced.py:167 admin/PageAdvanced.py:169 msgid "Allowed" msgstr "Permitir" -#: admin/PageAdvanced.py:119 +#: admin/PageAdvanced.py:167 msgid "Keep Alive" msgstr "Keep Alive" -#: admin/PageAdvanced.py:120 +#: admin/PageAdvanced.py:168 msgid "Max keepalive reqs" msgstr "Max peticións KeepAlive" -#: admin/PageAdvanced.py:121 +#: admin/PageAdvanced.py:169 msgid "Chunked Encoding" msgstr "Codificación Chunked" -#: admin/PageAdvanced.py:122 +#: admin/PageAdvanced.py:170 msgid "Polling Method" msgstr "Método de inspección" -#: admin/PageAdvanced.py:123 +#: admin/PageAdvanced.py:171 msgid "Sendfile min size" msgstr "Tamaño min. EnviarFicheiro" -#: admin/PageAdvanced.py:124 +#: admin/PageAdvanced.py:172 msgid "Sendfile max size" msgstr "Tamaño Max. EnviarFicheiro" -#: admin/PageAdvanced.py:126 admin/PageAdvanced.py:189 +#: admin/PageAdvanced.py:174 admin/PageAdvanced.py:313 msgid "Connections" msgstr "Conexións" -#: admin/PageAdvanced.py:134 +#: admin/PageAdvanced.py:182 msgid "Thread Number" msgstr "Número de tarefa" -#: admin/PageAdvanced.py:135 +#: admin/PageAdvanced.py:183 msgid "Thread Policy" msgstr "Política da tarefa" -#: admin/PageAdvanced.py:136 +#: admin/PageAdvanced.py:184 msgid "File descriptors" msgstr "Descriptores de Ficheiro" -#: admin/PageAdvanced.py:137 +#: admin/PageAdvanced.py:185 msgid "Listening queue length" msgstr "Lonxitude da cola de espera" -#: admin/PageAdvanced.py:138 admin/plugins/proxy.py:239 +#: admin/PageAdvanced.py:186 admin/plugins/proxy.py:239 msgid "Reuse connections" msgstr "Reutilizar conexións" -#: admin/PageAdvanced.py:139 +#: admin/PageAdvanced.py:187 msgid "Log flush time" msgstr "Tempo do rexistro Flush" -#: admin/PageAdvanced.py:140 +#: admin/PageAdvanced.py:188 msgid "Nonces clean up time" msgstr "Tempo de limpeza Nonces" -#: admin/PageAdvanced.py:142 admin/PageAdvanced.py:190 +#: admin/PageAdvanced.py:190 admin/PageAdvanced.py:314 msgid "Resources" msgstr "Recursos" -#: admin/PageAdvanced.py:151 +#: admin/PageAdvanced.py:199 msgid "Max pages" msgstr "Max páxinas" -#: admin/PageAdvanced.py:152 +#: admin/PageAdvanced.py:200 msgid "File Min Size" msgstr "Tamaño Min Ficheiro" -#: admin/PageAdvanced.py:153 +#: admin/PageAdvanced.py:201 msgid "File Max Size" msgstr "Tamaño Max Ficheiro" -#: admin/PageAdvanced.py:154 +#: admin/PageAdvanced.py:202 msgid "Lasting: stat" msgstr "Duración: stat" -#: admin/PageAdvanced.py:155 +#: admin/PageAdvanced.py:203 msgid "Lasting: mmap" msgstr "Duración: mmap" -#: admin/PageAdvanced.py:157 admin/PageAdvanced.py:191 +#: admin/PageAdvanced.py:205 admin/PageAdvanced.py:315 msgid "I/O cache" msgstr "caché I/O" -#: admin/PageAdvanced.py:165 +#: admin/PageAdvanced.py:213 msgid "Panic action" msgstr "Acción Panic" -#: admin/PageAdvanced.py:166 +#: admin/PageAdvanced.py:214 msgid "PID file" msgstr "Ficheiro PID" -#: admin/PageAdvanced.py:176 admin/PageEntry.py:84 admin/PageVServer.py:476 -#: admin/plugins/common.py:42 admin/plugins/common.py:43 -#: admin/plugins/dirlist.py:55 admin/plugins/proxy.py:240 -msgid "Allow" -msgstr "Permitir" +#: admin/PageAdvanced.py:245 admin/PageAdvanced.py:247 +#: admin/PageAdvanced.py:258 admin/PageAdvanced.py:260 +#, fuzzy +msgid "Disable " +msgstr "Deshabilitar" -#: admin/PageAdvanced.py:176 -msgid "Allow SSL v2" -msgstr "Permitir SSL v2" +#: admin/PageAdvanced.py:247 +msgid "Protocol deacrivated" +msgstr "" + +#: admin/PageAdvanced.py:247 +msgid "Protocol not supported" +msgstr "" + +#: admin/PageAdvanced.py:260 +msgid "Protocol deactivated" +msgstr "" -#: admin/PageAdvanced.py:177 +#: admin/PageAdvanced.py:262 +msgid "Turn off selected TLS Protocols (Deprecated)" +msgstr "" + +#: admin/PageAdvanced.py:270 admin/PageAdvanced.py:271 +msgid "auto-configured" +msgstr "" + +#: admin/PageAdvanced.py:285 +msgid "Min. TLS protocol version" +msgstr "" + +#: admin/PageAdvanced.py:290 +msgid "Max. TLS protocol version" +msgstr "" + +#: admin/PageAdvanced.py:291 msgid "Handshake Timeout" msgstr "Caducidade do Handshake" -#: admin/PageAdvanced.py:178 +#: admin/PageAdvanced.py:292 msgid "DH parameters: 512 bits" msgstr "Parámetros DH: 512 bits" -#: admin/PageAdvanced.py:179 +#: admin/PageAdvanced.py:293 msgid "DH parameters: 1024 bits" msgstr "Parámetros DH: 1024 bits" -#: admin/PageAdvanced.py:180 +#: admin/PageAdvanced.py:294 msgid "DH parameters: 2048 bits" msgstr "Parámetros DH: 2048 bits" -#: admin/PageAdvanced.py:181 +#: admin/PageAdvanced.py:295 msgid "DH parameters: 4096 bits" msgstr "Parámetros DH: 4096 bits" -#: admin/PageAdvanced.py:183 admin/PageAdvanced.py:193 -#: admin/PageGeneral.py:239 admin/plugins/bind.py:92 +#: admin/PageAdvanced.py:296 admin/PageAdvanced.py:317 admin/PageGeneral.py:239 +#: admin/plugins/bind.py:92 msgid "TLS" msgstr "TLS" -#: admin/PageAdvanced.py:199 +#: admin/PageAdvanced.py:323 msgid "Advanced Configuration" msgstr "Configuración Avanzada" @@ -1016,7 +1089,7 @@ msgstr "Codificador GZip" msgid "Deflate encoder" msgstr "" -#: admin/PageEntry.py:78 admin/PageEntry.py:173 admin/PageVServer.py:149 +#: admin/PageEntry.py:78 admin/PageEntry.py:173 admin/PageVServer.py:153 msgid "Authentication" msgstr "Autenticación" @@ -1026,7 +1099,13 @@ msgstr "Módulos de Autenticación." #: admin/PageEntry.py:83 admin/PageEntry.py:89 msgid "Leave unset" -msgstr "Deixar sen establecer" +msgstr "" + +#: admin/PageEntry.py:84 admin/PageVServer.py:480 admin/plugins/common.py:42 +#: admin/plugins/common.py:43 admin/plugins/dirlist.py:58 +#: admin/plugins/file.py:44 admin/plugins/proxy.py:240 +msgid "Allow" +msgstr "" #: admin/PageEntry.py:85 msgid "Forbid" @@ -1055,7 +1134,7 @@ msgstr "" msgid "Remove" msgstr "Borrar" -#: admin/PageEntry.py:126 admin/PageVServer.py:155 +#: admin/PageEntry.py:126 admin/PageVServer.py:159 #: admin/plugins/secdownload.py:44 msgid "Timeout" msgstr "Caducidade" @@ -1068,7 +1147,7 @@ msgstr "Caduciade das conexións" msgid "Limit traffic to" msgstr "Limitar o tráfico a" -#: admin/PageEntry.py:139 admin/PageVServer.py:156 +#: admin/PageEntry.py:139 admin/PageVServer.py:160 msgid "Traffic Shaping" msgstr "Modulando o tráfico" @@ -1076,7 +1155,7 @@ msgstr "Modulando o tráfico" msgid "Skip Logging" msgstr "Non rexistrar" -#: admin/PageEntry.py:154 admin/PageVServer.py:720 +#: admin/PageEntry.py:154 admin/PageVServer.py:729 msgid "Logging" msgstr "Rexistrar" @@ -1100,14 +1179,14 @@ msgstr "Mecanismo de validación" msgid "Can not be empty" msgstr "Non pode estar baldeiro" -#: admin/PageEntry.py:216 admin/PageEntry.py:268 admin/consts.py:190 -#: admin/plugins/header.py:110 admin/plugins/header.py:151 -#: admin/plugins/header.py:156 admin/plugins/proxy.py:193 +#: admin/PageEntry.py:216 admin/PageEntry.py:268 admin/consts.py:189 +#: admin/plugins/header.py:112 admin/plugins/header.py:153 +#: admin/plugins/header.py:158 admin/plugins/proxy.py:193 msgid "Header" msgstr "Cabezallo" #: admin/PageEntry.py:216 admin/PageSource.py:284 -#: admin/plugins/error_redir.py:105 admin/plugins/header.py:113 +#: admin/plugins/error_redir.py:105 admin/plugins/header.py:115 #: admin/plugins/redir.py:76 msgid "Type" msgstr "Tipo" @@ -1124,7 +1203,7 @@ msgstr "Acción" msgid "Add New Header" msgstr "Engadir novo Cabezallo" -#: admin/PageEntry.py:326 admin/consts.py:204 admin/plugins/redir.py:39 +#: admin/PageEntry.py:326 admin/consts.py:203 admin/plugins/redir.py:39 #: admin/plugins/rehost.py:53 msgid "Regular Expressions" msgstr "Expresións Regulares" @@ -1142,8 +1221,7 @@ msgstr "" msgid "Caching Policy" msgstr "" -#: admin/PageEntry.py:381 admin/plugins/rehost.py:68 -#: admin/plugins/rehost.py:92 +#: admin/PageEntry.py:381 admin/plugins/rehost.py:68 admin/plugins/rehost.py:92 msgid "New Regular Expression" msgstr "Nova Expresión Regular" @@ -1151,7 +1229,7 @@ msgstr "Nova Expresión Regular" msgid "Disregarded Cookies" msgstr "" -#: admin/PageEntry.py:402 admin/PageVServer.py:154 +#: admin/PageEntry.py:402 admin/PageVServer.py:158 msgid "Expiration" msgstr "Caducidade" @@ -1183,7 +1261,7 @@ msgstr "Os Proxy revalidan" msgid "Content Expiration" msgstr "Caducidade do contido" -#: admin/PageEntry.py:433 admin/PageVServer.py:153 +#: admin/PageEntry.py:433 admin/PageVServer.py:157 #, fuzzy msgid "Cache" msgstr "Sen caché" @@ -1206,7 +1284,7 @@ msgid "Matching Rule" msgstr "Regla coincidente" #: admin/PageEntry.py:514 admin/PageEntry.py:528 admin/PageEntry.py:553 -#: admin/PageVServer.py:148 +#: admin/PageVServer.py:152 msgid "Handler" msgstr "Xestor" @@ -1224,7 +1302,7 @@ msgstr "Non transformar" msgid "Caching" msgstr "Regla coincidente" -#: admin/PageEntry.py:556 admin/PageVServer.py:721 +#: admin/PageEntry.py:556 admin/PageVServer.py:730 msgid "Security" msgstr "Seguridade" @@ -1492,7 +1570,7 @@ msgstr "IPv6" msgid "SSL/TLS back-end" msgstr "motor SSL/TLS" -#: admin/PageGeneral.py:197 admin/PageIndex.py:252 +#: admin/PageGeneral.py:197 admin/PageIndex.py:198 msgid "Support" msgstr "Axuda" @@ -1525,8 +1603,8 @@ msgid "Bind to" msgstr "Ligar a" #: admin/PageGeneral.py:239 admin/PageGeneral.py:310 admin/plugins/bind.py:92 -#: admin/plugins/bind.py:155 admin/plugins/bind.py:157 -#: admin/plugins/ldap.py:48 admin/plugins/mysql.py:77 +#: admin/plugins/bind.py:155 admin/plugins/bind.py:157 admin/plugins/ldap.py:48 +#: admin/plugins/mysql.py:77 msgid "Port" msgstr "Porto" @@ -1591,7 +1669,7 @@ msgstr "Grupo" msgid "Chroot" msgstr "Chroot" -#: admin/PageGeneral.py:357 admin/PageVServer.py:479 +#: admin/PageGeneral.py:357 admin/PageVServer.py:483 msgid "Network" msgstr "Rede" @@ -1619,175 +1697,134 @@ msgstr "Táboa de contidos" msgid "Documentation" msgstr "Documentación" -#: admin/PageIndex.py:67 -msgid "You will be sent an email requesting confirmation" -msgstr "Pediráseche confirmación vía correo electrónico" - -#: admin/PageIndex.py:68 -msgid "Optionally provide your name" -msgstr "Opcionalmente escriba o seu nome" - -#: admin/PageIndex.py:70 -#, fuzzy, python-format -msgid "" -"There are a number of Community Mailing Lists\n" -"available for you to subscribe. You can subscribe the General Discussion\n" -"mailing list from this interface. There is where most of the discussions\n" -"take place." -msgstr "" -"Hai un número de Listas de Correo da " -"Comunidade\n" -"ás que te podes suscribir. Podeste suscribir a lista de Discusión Xeral\n" -"dende esta interface. É onde teñen lugar a maioría dos debates." - -#: admin/PageIndex.py:77 +#: admin/PageIndex.py:58 msgid "Server is Running" msgstr "O Servidor está a funcionar" -#: admin/PageIndex.py:78 +#: admin/PageIndex.py:59 msgid "Server is not Running" msgstr "O Servidor non está a funcionar" -#: admin/PageIndex.py:132 +#: admin/PageIndex.py:110 msgid "Stop Server" msgstr "Para o Servidor" -#: admin/PageIndex.py:136 +#: admin/PageIndex.py:114 msgid "Start Server" msgstr "Inicia o Servidor" -#: admin/PageIndex.py:141 +#: admin/PageIndex.py:119 msgid "Hostname" msgstr "Nome de Servidor" -#: admin/PageIndex.py:143 +#: admin/PageIndex.py:121 msgid "Modified" msgstr "Modificado" -#: admin/PageIndex.py:145 +#: admin/PageIndex.py:123 msgid "Not found" msgstr "Non atopado" -#: admin/PageIndex.py:146 +#: admin/PageIndex.py:124 msgid "Config File" msgstr "Ficheiro de Configuración" -#: admin/PageIndex.py:153 admin/plugins/server_info.py:32 +#: admin/PageIndex.py:131 admin/plugins/server_info.py:32 #: admin/plugins/server_info.py:35 msgid "Server Information" msgstr "Información do Servidor" -#: admin/PageIndex.py:165 +#: admin/PageIndex.py:143 msgid "Processors" msgstr "Procesadores" -#: admin/PageIndex.py:177 +#: admin/PageIndex.py:155 msgid "Memory" msgstr "Memoria" -#: admin/PageIndex.py:211 admin/plugins/dbslayer.py:51 +#: admin/PageIndex.py:189 admin/plugins/dbslayer.py:51 msgid "Language" msgstr "Lingua" -#: admin/PageIndex.py:231 -msgid "Mailing List Subscription" -msgstr "Suscripción á Lista de Correo" - -#: admin/PageIndex.py:233 -msgid "Subscribe" -msgstr "Suscribir" - -#: admin/PageIndex.py:236 -msgid "Your email address" -msgstr "O teu correo electrónico" - -#: admin/PageIndex.py:237 -msgid "Your name" -msgstr "O teu nome" - -#: admin/PageIndex.py:256 +#: admin/PageIndex.py:202 msgid "Getting started" msgstr "Por onde comezar" -#: admin/PageIndex.py:260 -msgid "Subscribe to mailing lists" +#: admin/PageIndex.py:206 +#, fuzzy +msgid "Visit the mailing list" msgstr "Suscribase a listas de correo" -#: admin/PageIndex.py:268 +#: admin/PageIndex.py:210 msgid "Report a bug" msgstr "Informe dun erro" -#: admin/PageIndex.py:272 -msgid "Purchase commercial support" -msgstr "Conseguir axuda profesional" - -#: admin/PageIndex.py:276 admin/PageIndex.py:280 +#: admin/PageIndex.py:214 admin/PageIndex.py:218 msgid "About Cherokee" msgstr "A cerca de Cherokee" -#: admin/PageIndex.py:289 +#: admin/PageIndex.py:227 msgid "Join the Cherokee Community:" msgstr "Líguese á Comunidade Cherokee" -#: admin/PageIndex.py:292 +#: admin/PageIndex.py:230 msgid "Visit the Cherokee Project Website" msgstr "Visite o sitio web do Cherokee Project" -#: admin/PageIndex.py:293 +#: admin/PageIndex.py:231 msgid "Follow us on Twitter" msgstr "Síganos en Twitter" -#: admin/PageIndex.py:294 +#: admin/PageIndex.py:232 msgid "Join us on Facebook" msgstr "Líguese a nos en Facebook" -#: admin/PageIndex.py:295 +#: admin/PageIndex.py:233 #, fuzzy msgid "Join us on Google+" msgstr "Líguese a nos en Facebook" -#: admin/PageIndex.py:296 +#: admin/PageIndex.py:234 msgid "Fork us on Github" msgstr "" -#: admin/PageIndex.py:297 +#: admin/PageIndex.py:235 msgid "Become a member of Cherokee group on LinkedIn" msgstr "Fágase membro do grupo Cherokee en LinkedIn" -#: admin/PageIndex.py:298 +#: admin/PageIndex.py:236 msgid "Chat with us at irc.freenode.net" msgstr "Fale con nos no irc.freenode.net" -#: admin/PageIndex.py:307 +#: admin/PageIndex.py:245 #, fuzzy msgid "Shutdown Cherokee-admin" msgstr "Ben vid@ ó Admin de Cherokee" -#: admin/PageIndex.py:309 +#: admin/PageIndex.py:247 #, fuzzy msgid "Shut down" msgstr "Amosar" -#: admin/PageIndex.py:310 +#: admin/PageIndex.py:248 msgid "You are about to shut down this instance of Cherokee-admin" msgstr "" -#: admin/PageIndex.py:311 +#: admin/PageIndex.py:249 #, fuzzy msgid "Are you sure you want to proceed?" msgstr "Realmente queres borralo?" -#: admin/PageIndex.py:314 +#: admin/PageIndex.py:252 msgid "Cherokee-admin has been shut down" msgstr "" -#: admin/PageIndex.py:316 +#: admin/PageIndex.py:254 #, fuzzy msgid "Shut down Cherokee-Admin" msgstr "Ben vid@ ó Admin de Cherokee" -#: admin/PageIndex.py:329 admin/PageIndex.py:350 +#: admin/PageIndex.py:267 admin/PageIndex.py:288 msgid "Welcome to Cherokee Admin" msgstr "Ben vid@ ó Admin de Cherokee" @@ -1875,7 +1912,7 @@ msgstr "Manual" msgid "Manual configuration" msgstr "Configuración Manual" -#: admin/PageRule.py:249 admin/PageVServer.py:158 +#: admin/PageRule.py:249 admin/PageVServer.py:162 msgid "Final" msgstr "Remate" @@ -1903,7 +1940,7 @@ msgstr "Clonar" msgid "Clone Selected Behavior Rule" msgstr "Clonar norma de comportamento seleccionada" -#: admin/PageRule.py:314 admin/PageVServer.py:718 +#: admin/PageRule.py:314 admin/PageVServer.py:727 msgid "Behavior" msgstr "Comportamento" @@ -2047,7 +2084,7 @@ msgstr "Engadir unha nova variable" msgid "Source Usage" msgstr "Orixes" -#: admin/PageSource.py:253 admin/PageVServer.py:723 +#: admin/PageSource.py:253 admin/PageVServer.py:732 msgid "Virtual Server" msgstr "Servidor Virtual" @@ -2102,7 +2139,7 @@ msgstr "Clonar a Orixe de Datos escollida" msgid "Sources Filtering" msgstr "Filtraxe de Orixes" -#: admin/PageSources.py:35 admin/PageVServer.py:141 admin/PageVServers.py:48 +#: admin/PageSources.py:35 admin/PageVServer.py:145 admin/PageVServers.py:48 #: admin/PageVServers.py:294 msgid "Virtual Servers" msgstr "Servidores Virtuais" @@ -2124,10 +2161,14 @@ msgid "Virtual Server Filtering" msgstr "Filtrado do Servidor Virtual" #: admin/PageVServer.py:44 +msgid "Reference" +msgstr "" + +#: admin/PageVServer.py:47 msgid "Nickname for the virtual server." msgstr "Alcume para o servidor virtual." -#: admin/PageVServer.py:45 +#: admin/PageVServer.py:48 msgid "" "This directive points to the PEM-encoded Certificate file for the server " "(Full path to the file)" @@ -2135,12 +2176,12 @@ msgstr "" "Esta directiva apunta ó ficheiro de Certificado PEM para o servidor (Ruta " "completa)" -#: admin/PageVServer.py:46 +#: admin/PageVServer.py:49 msgid "PEM-encoded Private Key file for the server (Full path to the file)" msgstr "" "Ficheiro de Chave Privada PEM para o servidor (Ruta completa ó ficheiro)" -#: admin/PageVServer.py:47 +#: admin/PageVServer.py:50 msgid "" "File containing the trusted CA certificates, utilized for checking the " "client certificates (Full path to the file)" @@ -2148,41 +2189,38 @@ msgstr "" "Ficheiro que contén os certificados CA de confianza, utilizado para verficar " "os certificados dos clientes (Ruta completa ó ficheiro)" -#: admin/PageVServer.py:48 -#, fuzzy -msgid "" -"Ciphers that TLS/SSL is allowed to use. Reference. (Default enables " -"Forward Secrecy)." +#: admin/PageVServer.py:51 +msgid "Ciphers that TLSv1.2 and below is allowed to use." +msgstr "Cifrados que se lle permite usar a TLS/SSL." + +#: admin/PageVServer.py:52 +msgid "Ciphersuites that TLSv1.3 is allowed to use." msgstr "" -"Cifrados que se lle permite usar a TLS/SSL. Referencia. (Por " -"omisión: todolos cifrados soportados pola versión de OpenSSL utilizada)." -#: admin/PageVServer.py:49 +#: admin/PageVServer.py:53 msgid "" "The cipher sequence that is specified by the server should have preference " "over the client preference. (Default: True)." msgstr "" -#: admin/PageVServer.py:50 +#: admin/PageVServer.py:54 msgid "" "Explicitly enable or disable serverside compression support. (Default: " "Disabled)." msgstr "" -#: admin/PageVServer.py:51 +#: admin/PageVServer.py:55 msgid "" "Explicitely sets the Diffie-Hellman parameters length. (Default: Let openssl " "choose)." msgstr "" -#: admin/PageVServer.py:52 +#: admin/PageVServer.py:56 #, fuzzy msgid "Skip, Tolerate, Accept or Require client certificates." msgstr "Rexeitar, Aceptar ou Solicitar os certificados do cliente." -#: admin/PageVServer.py:53 +#: admin/PageVServer.py:57 msgid "" "Limit up to which depth certificates in a chain are used during the " "verification procedure (Default: 1)" @@ -2190,11 +2228,11 @@ msgstr "" "Limitar ate onde chegar na cadea de certificados durante o procedemento de " "verificación (Por omisión:1)" -#: admin/PageVServer.py:54 +#: admin/PageVServer.py:58 msgid "Allows the selection of how to generate the error responses." msgstr "Permite a selección de cómo xerar respostas ós erros." -#: admin/PageVServer.py:55 +#: admin/PageVServer.py:59 msgid "" "Directory inside the user home directory to use as root web directory. " "Disabled if empty." @@ -2202,20 +2240,20 @@ msgstr "" "Directorio dentro do Home do usuario para usar como directorio raiz da web. " "Deshabilitado se baldeiro." -#: admin/PageVServer.py:56 +#: admin/PageVServer.py:60 msgid "The personal web support is currently turned on." msgstr "O soporte para web personal está habilitado." -#: admin/PageVServer.py:57 +#: admin/PageVServer.py:61 msgid "Adds a new domain name. Wildcards are allowed in the domain name." msgstr "" "Engade un novo nome de dominio. Permítense comodíns no nome de dominio." -#: admin/PageVServer.py:58 +#: admin/PageVServer.py:62 msgid "Virtual Server root directory." msgstr "Directorio raíz do Servidor Vitual." -#: admin/PageVServer.py:59 +#: admin/PageVServer.py:63 msgid "" "List of name files that will be used as directory index. Eg: index.html," "index.php." @@ -2223,44 +2261,44 @@ msgstr "" "Lista dos nomes de ficheiro que se usarán coma índices nos directorios. Ex.: " "index.html,index.php" -#: admin/PageVServer.py:60 +#: admin/PageVServer.py:64 msgid "The maximum size, in bytes, for POST uploads. (Default: unlimited)" msgstr "" "Tamaño máximo, en bytes, para as subidas POST. (Por omisión: sen límite)" -#: admin/PageVServer.py:61 +#: admin/PageVServer.py:65 msgid "Whether this virtual server is allowed to use Keep-alive (Default: yes)" msgstr "Se este servidor pode usar o Keep-alive (Por omisión: si)" -#: admin/PageVServer.py:62 +#: admin/PageVServer.py:66 msgid "The Logging is currently enabled." msgstr "O Rexistro está actualmente habilitado." -#: admin/PageVServer.py:63 +#: admin/PageVServer.py:67 msgid "Logging format. Apache compatible is highly recommended here." msgstr "Formato do rexistro. Recoméndase Compatible con Apache." -#: admin/PageVServer.py:64 +#: admin/PageVServer.py:68 msgid "Back-end used to store the log accesses." msgstr "Onde gardar os ficheiros de rexistro." -#: admin/PageVServer.py:65 +#: admin/PageVServer.py:69 msgid "Back-end used to store the log errors." msgstr "Onde gardar os rexistros de erros." -#: admin/PageVServer.py:66 +#: admin/PageVServer.py:70 msgid "Back-end used to store the log accesses and errors." msgstr "Onde gardar os rexistros de erros de acceso." -#: admin/PageVServer.py:67 +#: admin/PageVServer.py:71 msgid "Full path to the file where the information will be saved." msgstr "Ruta completa ó ficheiro onde se gardará a información." -#: admin/PageVServer.py:68 +#: admin/PageVServer.py:72 msgid "Path to the executable that will be invoked on each log entry." msgstr "Ruta ó executable que se chamará en cada entrada do rexistro." -#: admin/PageVServer.py:69 +#: admin/PageVServer.py:73 msgid "" "Whether the logger should read and use the X-Real-IP and X-Forwarded-For " "headers (send by reverse proxies)." @@ -2268,7 +2306,7 @@ msgstr "" "Cando debe o rexistrador ler e usar os cabezallos X-Real-IP e X-Forwared-For " "(enviar por proxys inversos)." -#: admin/PageVServer.py:71 +#: admin/PageVServer.py:75 msgid "" "List of IP addresses and subnets that are allowed to send X-Real-IP and X-" "Forwarded-For headers." @@ -2276,21 +2314,21 @@ msgstr "" "Lista de tódalas IP e subredes que se lles permite enviar cabezallos X-Real-" "IP e X-Forwarded-For." -#: admin/PageVServer.py:72 +#: admin/PageVServer.py:76 msgid "" "How to support the \"Advanced Virtual Hosting\" mechanism. (Default: off)" msgstr "" "Xestionar o mecanismo \"Advanced Virtual Hosting\". (por omisión: apagado)" -#: admin/PageVServer.py:73 +#: admin/PageVServer.py:77 msgid "The following variables are accepted: " msgstr "" -#: admin/PageVServer.py:74 +#: admin/PageVServer.py:78 msgid "Allows the selection of domain matching method." msgstr "Permite a selección do método de concordancia de dominios." -#: admin/PageVServer.py:75 +#: admin/PageVServer.py:79 msgid "" "Whether or not it should collected statistics about the traffic of this " "virtual server." @@ -2298,462 +2336,466 @@ msgstr "" "Debe, ou non, recoller estatísticas a cerca do tráfico neste servidor " "virtual." -#: admin/PageVServer.py:76 +#: admin/PageVServer.py:80 msgid "Time standard to use in the log file entries." msgstr "Tempo normalizado a usar nas entradas do ficheiro de rexistro." -#: admin/PageVServer.py:77 +#: admin/PageVServer.py:81 msgid "" "Remember that only \"File Exists\" rules and \"List & Send\" handlers use " "the Directory Indexes setting." msgstr "" -#: admin/PageVServer.py:78 +#: admin/PageVServer.py:82 msgid "" "Use this nickname as an additional host name for this virtual server " "(Default: yes)" msgstr "" -#: admin/PageVServer.py:79 +#: admin/PageVServer.py:83 msgid "Enforce HTTPS by using the HTTP Strict Transport Security." msgstr "" -#: admin/PageVServer.py:80 +#: admin/PageVServer.py:84 msgid "" "How long the client's browser should remember the forced HTTPS (in seconds)." msgstr "" -#: admin/PageVServer.py:81 +#: admin/PageVServer.py:85 msgid "" "Should HSTS be used in all the subdomains of this virtual server (Default: " "yes)." msgstr "" -#: admin/PageVServer.py:83 +#: admin/PageVServer.py:87 msgid "

The 'default' virtual server matches all the domain names.

" msgstr "

O servidor virtual 'por omisión' suplanta tódolos nomes de dominio." -#: admin/PageVServer.py:86 +#: admin/PageVServer.py:90 #, fuzzy msgid "Remote IP address" msgstr "Enderezo IP do servidor LDAP" -#: admin/PageVServer.py:87 +#: admin/PageVServer.py:91 #, fuzzy msgid "Local IP address" msgstr "Dirección de correo electrónico" -#: admin/PageVServer.py:88 +#: admin/PageVServer.py:92 #, fuzzy msgid "Request Protocol" msgstr "Solicitar" -#: admin/PageVServer.py:89 +#: admin/PageVServer.py:93 msgid "Transport type: http or https" msgstr "" -#: admin/PageVServer.py:90 +#: admin/PageVServer.py:94 msgid "Port of the server serving the request" msgstr "" -#: admin/PageVServer.py:91 +#: admin/PageVServer.py:95 msgid "The query string, if exists" msgstr "" -#: admin/PageVServer.py:92 +#: admin/PageVServer.py:96 msgid "First line of HTTP request" msgstr "" -#: admin/PageVServer.py:93 +#: admin/PageVServer.py:97 msgid "Response status code" msgstr "" -#: admin/PageVServer.py:94 +#: admin/PageVServer.py:98 msgid "Time: in common log format time format" msgstr "" -#: admin/PageVServer.py:95 +#: admin/PageVServer.py:99 msgid "Time: seconds since Epoch" msgstr "" -#: admin/PageVServer.py:96 +#: admin/PageVServer.py:100 msgid "Time: milliseconds since Epoch" msgstr "" -#: admin/PageVServer.py:97 +#: admin/PageVServer.py:101 #, fuzzy msgid "Remote user (authentication)" msgstr "Dominio base para as autenticacións no servidor web." -#: admin/PageVServer.py:98 +#: admin/PageVServer.py:102 msgid "URL path requested" msgstr "" -#: admin/PageVServer.py:99 +#: admin/PageVServer.py:103 msgid "URL path requested before any rewrite" msgstr "" -#: admin/PageVServer.py:100 +#: admin/PageVServer.py:104 #, fuzzy msgid "Virtual Server nick name" msgstr "Alcume do servidor virtual" -#: admin/PageVServer.py:101 +#: admin/PageVServer.py:105 msgid "Requested host (Host: header)" msgstr "" -#: admin/PageVServer.py:102 +#: admin/PageVServer.py:106 msgid "Size of the response in bytes" msgstr "" -#: admin/PageVServer.py:103 +#: admin/PageVServer.py:107 msgid "'Host:' header of the request" msgstr "" -#: admin/PageVServer.py:104 +#: admin/PageVServer.py:108 msgid "'Referrer:' header of the request" msgstr "" -#: admin/PageVServer.py:105 +#: admin/PageVServer.py:109 msgid "'User-Agent:' header of the request" msgstr "" -#: admin/PageVServer.py:106 +#: admin/PageVServer.py:110 msgid "'Cookie:' header of the request" msgstr "" -#: admin/PageVServer.py:142 +#: admin/PageVServer.py:146 msgid "Loggers" msgstr "Rexistradores" -#: admin/PageVServer.py:143 +#: admin/PageVServer.py:147 msgid "SSL cookbook" msgstr "receitario SSL" -#: admin/PageVServer.py:147 admin/PageVServer.py:184 +#: admin/PageVServer.py:151 admin/PageVServer.py:188 msgid "Match" msgstr "Concordancia" -#: admin/PageVServer.py:147 +#: admin/PageVServer.py:151 msgid "Rule Match" msgstr "Concordancia na norma" -#: admin/PageVServer.py:148 +#: admin/PageVServer.py:152 msgid "Assigned Handler" msgstr "Xestor asignado" -#: admin/PageVServer.py:149 +#: admin/PageVServer.py:153 msgid "Auth" msgstr "Auth" -#: admin/PageVServer.py:150 +#: admin/PageVServer.py:154 msgid "Custom Document Root" msgstr "Documento Raíz personalizado" -#: admin/PageVServer.py:150 +#: admin/PageVServer.py:154 msgid "Root" msgstr "Raíz" -#: admin/PageVServer.py:151 +#: admin/PageVServer.py:155 msgid "Only HTTPS" msgstr "Só HTTPS" -#: admin/PageVServer.py:151 +#: admin/PageVServer.py:155 msgid "Secure" msgstr "Asegurar" -#: admin/PageVServer.py:152 +#: admin/PageVServer.py:156 msgid "Enc" msgstr "Cod" -#: admin/PageVServer.py:152 +#: admin/PageVServer.py:156 msgid "Encoders" msgstr "Codificadores" -#: admin/PageVServer.py:153 +#: admin/PageVServer.py:157 #, fuzzy msgid "Cacheable" msgstr "Compatible con Apache" -#: admin/PageVServer.py:154 +#: admin/PageVServer.py:158 msgid "Exp" msgstr "Exp" -#: admin/PageVServer.py:155 +#: admin/PageVServer.py:159 msgid "Connection Timeout" msgstr "Caducidade da conexión" -#: admin/PageVServer.py:156 +#: admin/PageVServer.py:160 msgid "Shaping" msgstr "Formando" -#: admin/PageVServer.py:157 +#: admin/PageVServer.py:161 msgid "Log" msgstr "Rex" -#: admin/PageVServer.py:157 +#: admin/PageVServer.py:161 msgid "Logging Enabled" msgstr "Rexistro habilitado" -#: admin/PageVServer.py:158 +#: admin/PageVServer.py:162 msgid "Rule is Final" msgstr "" -#: admin/PageVServer.py:184 +#: admin/PageVServer.py:188 #, fuzzy msgid "Match nickname" msgstr "Concordar Alcume" -#: admin/PageVServer.py:188 admin/PageVServer.py:717 +#: admin/PageVServer.py:192 admin/PageVServer.py:726 msgid "Host Match" msgstr "Concordancia Servidores" -#: admin/PageVServer.py:218 admin/PageVServer.py:234 admin/PageVServer.py:258 -#: admin/PageVServer.py:485 admin/PageVServer.py:519 -#: admin/plugins/method.py:99 admin/plugins/method.py:109 +#: admin/PageVServer.py:222 admin/PageVServer.py:238 admin/PageVServer.py:262 +#: admin/PageVServer.py:489 admin/PageVServer.py:523 admin/plugins/method.py:99 +#: admin/plugins/method.py:109 msgid "Method" msgstr "Método" -#: admin/PageVServer.py:226 admin/PageVServer.py:242 +#: admin/PageVServer.py:230 admin/PageVServer.py:246 #, fuzzy msgid "Remove criteria" msgstr "Servizos Remotos" -#: admin/PageVServer.py:260 +#: admin/PageVServer.py:264 #, fuzzy msgid "How to match this Virtual Server" msgstr "Novo servidor virtual" -#: admin/PageVServer.py:267 +#: admin/PageVServer.py:271 msgid "Add an additional matching criteria" msgstr "" -#: admin/PageVServer.py:358 +#: admin/PageVServer.py:362 msgid "Behavior Rules" msgstr "Regla de comportamento" -#: admin/PageVServer.py:367 +#: admin/PageVServer.py:371 msgid "Rule Management" msgstr "Regla de xestión" -#: admin/PageVServer.py:393 +#: admin/PageVServer.py:397 msgid "Only accept Secure Connections" msgstr "Permitir só Conexións Seguras" -#: admin/PageVServer.py:398 +#: admin/PageVServer.py:402 msgid "Encoding enabled" msgstr "Codificación habilitada" -#: admin/PageVServer.py:404 +#: admin/PageVServer.py:408 msgid "no" msgstr "non" -#: admin/PageVServer.py:415 +#: admin/PageVServer.py:419 msgid " seconds" msgstr " segundos" -#: admin/PageVServer.py:420 +#: admin/PageVServer.py:424 msgid " bytes per second" msgstr " bytes por segundo" -#: admin/PageVServer.py:425 +#: admin/PageVServer.py:429 msgid "Logging enabled for this rule" msgstr "Rexistro habilitado para esta regla" -#: admin/PageVServer.py:430 +#: admin/PageVServer.py:434 msgid "Prevents further rule evaluation" msgstr "Evitar futuras evaluacións da regla" -#: admin/PageVServer.py:435 +#: admin/PageVServer.py:439 msgid "Content can be cached" msgstr "" -#: admin/PageVServer.py:438 +#: admin/PageVServer.py:442 msgid "Forbids content caching" msgstr "" -#: admin/PageVServer.py:455 +#: admin/PageVServer.py:459 msgid "Virtual Server nickname" msgstr "Alcume do servidor virtual" -#: admin/PageVServer.py:457 +#: admin/PageVServer.py:461 msgid "Server ID" msgstr "ID do servidor" -#: admin/PageVServer.py:463 +#: admin/PageVServer.py:467 msgid "Directory Indexes" msgstr "Índice de Directorios" -#: admin/PageVServer.py:465 admin/plugins/fullpath.py:119 +#: admin/PageVServer.py:469 admin/plugins/fullpath.py:119 msgid "Paths" msgstr "Rutas" -#: admin/PageVServer.py:471 +#: admin/PageVServer.py:475 msgid "Neither are in use at the moment." msgstr "" -#: admin/PageVServer.py:476 +#: admin/PageVServer.py:480 msgid "Keep-alive" msgstr "Keep-alive" -#: admin/PageVServer.py:477 +#: admin/PageVServer.py:481 msgid "Max Upload Size" msgstr "Tamaño máximo de subida" -#: admin/PageVServer.py:487 admin/plugins/evhost.py:33 +#: admin/PageVServer.py:491 admin/plugins/evhost.py:33 msgid "Advanced Virtual Hosting" msgstr "Hosting Virtual avanzado" -#: admin/PageVServer.py:521 +#: admin/PageVServer.py:525 msgid "Error Handling hook" msgstr "Erro xestionando conexión" -#: admin/PageVServer.py:532 admin/consts.py:233 admin/consts.py:250 +#: admin/PageVServer.py:536 admin/consts.py:232 admin/consts.py:249 msgid "Disabled" msgstr "Deshabilitado" -#: admin/PageVServer.py:536 +#: admin/PageVServer.py:540 msgid "Write errors to" msgstr "Escribir os erros en" -#: admin/PageVServer.py:540 admin/PageVServer.py:579 +#: admin/PageVServer.py:544 admin/PageVServer.py:583 msgid "Filename" msgstr "nome de ficheiro" -#: admin/PageVServer.py:542 admin/PageVServer.py:582 +#: admin/PageVServer.py:546 admin/PageVServer.py:586 msgid "Command" msgstr "Comando" -#: admin/PageVServer.py:548 +#: admin/PageVServer.py:552 msgid "Error Logging" msgstr "Rexistrando erros" -#: admin/PageVServer.py:559 +#: admin/PageVServer.py:563 msgid "Format" msgstr "Formato" -#: admin/PageVServer.py:566 +#: admin/PageVServer.py:570 msgid "Write accesses to" msgstr "Escribir accesos en" -#: admin/PageVServer.py:589 +#: admin/PageVServer.py:593 #, fuzzy msgid "Hide" msgstr "Cabezallo" -#: admin/PageVServer.py:589 +#: admin/PageVServer.py:593 #, fuzzy msgid "Show macros" msgstr "Amosar Grupo" -#: admin/PageVServer.py:598 +#: admin/PageVServer.py:602 msgid "Template: " msgstr "Plantilla: " -#: admin/PageVServer.py:600 +#: admin/PageVServer.py:604 msgid "Access Logging" msgstr "Rexistro de acceso" -#: admin/PageVServer.py:606 +#: admin/PageVServer.py:610 msgid "Time standard" msgstr "Tempo normalizado" -#: admin/PageVServer.py:607 admin/PageVServer.py:687 admin/consts.py:228 +#: admin/PageVServer.py:611 admin/PageVServer.py:696 admin/consts.py:227 msgid "Accept" msgstr "Aceptar" -#: admin/PageVServer.py:607 +#: admin/PageVServer.py:611 msgid "Accept Forwarded IPs" msgstr "Aceptar IPs reenviadas" -#: admin/PageVServer.py:610 +#: admin/PageVServer.py:614 msgid "Do not check" msgstr "Non verificar" -#: admin/PageVServer.py:619 +#: admin/PageVServer.py:623 msgid "Logging Options" msgstr "Opcións de rexistro" -#: admin/PageVServer.py:655 admin/wizards/ssl_test.py:136 +#: admin/PageVServer.py:659 admin/wizards/ssl_test.py:136 msgid "Certificate" msgstr "Certificado" -#: admin/PageVServer.py:656 +#: admin/PageVServer.py:660 msgid "Certificate key" msgstr "Chave do certificado" -#: admin/PageVServer.py:661 +#: admin/PageVServer.py:665 msgid "Required SSL/TLS Values" msgstr "Valores SSL/TLS requeridos" -#: admin/PageVServer.py:666 +#: admin/PageVServer.py:674 +msgid "Ciphersuites" +msgstr "" + +#: admin/PageVServer.py:675 msgid "Ciphers" msgstr "Codificadores" -#: admin/PageVServer.py:667 +#: admin/PageVServer.py:676 msgid "Prefer" msgstr "" -#: admin/PageVServer.py:667 +#: admin/PageVServer.py:676 #, fuzzy msgid "Server Preference" msgstr "Tráfico do servidor" -#: admin/PageVServer.py:668 +#: admin/PageVServer.py:677 msgid "Client Certs. Request" msgstr "Petición de Certf Clientes" -#: admin/PageVServer.py:669 +#: admin/PageVServer.py:678 msgid "Compression" msgstr "" -#: admin/PageVServer.py:670 +#: admin/PageVServer.py:679 msgid "DH length" msgstr "" -#: admin/PageVServer.py:673 +#: admin/PageVServer.py:682 msgid "CA List" msgstr "Lista CA" -#: admin/PageVServer.py:676 +#: admin/PageVServer.py:685 msgid "Verify Depth" msgstr "Profundida da verificación" -#: admin/PageVServer.py:682 +#: admin/PageVServer.py:691 msgid "Advanced Options" msgstr "Opcións avanzadas" -#: admin/PageVServer.py:687 +#: admin/PageVServer.py:696 #, fuzzy msgid "Enable HSTS" msgstr "Habilitar" -#: admin/PageVServer.py:690 +#: admin/PageVServer.py:699 msgid "HSTS Max-Age" msgstr "" -#: admin/PageVServer.py:690 +#: admin/PageVServer.py:699 msgid "One year" msgstr "" -#: admin/PageVServer.py:691 +#: admin/PageVServer.py:700 #, fuzzy msgid "Include Subdomains" msgstr "Envía os teu dominios" -#: admin/PageVServer.py:691 +#: admin/PageVServer.py:700 msgid "Include all" msgstr "" -#: admin/PageVServer.py:697 +#: admin/PageVServer.py:706 msgid "HTTP Strict Transport Security (HSTS)" msgstr "" -#: admin/PageVServer.py:716 +#: admin/PageVServer.py:725 msgid "Basics" msgstr "Básicas" -#: admin/PageVServer.py:719 +#: admin/PageVServer.py:728 msgid "Error Handler" msgstr "Xestor de erros" @@ -3055,8 +3097,8 @@ msgstr "Producto + Plataforma" msgid "Full Server string" msgstr "Cadea completa do servidor" -#: admin/consts.py:51 admin/consts.py:80 admin/consts.py:97 -#: admin/consts.py:111 admin/plugins/mysql.py:45 +#: admin/consts.py:51 admin/consts.py:80 admin/consts.py:97 admin/consts.py:111 +#: admin/plugins/mysql.py:45 msgid "None" msgstr "Nada" @@ -3259,191 +3301,191 @@ msgstr "Dinámico" msgid "Automatic" msgstr "Automático" -#: admin/consts.py:145 admin/plugins/error_redir.py:35 +#: admin/consts.py:144 admin/plugins/error_redir.py:35 msgid "External" msgstr "Externo" -#: admin/consts.py:146 admin/plugins/error_redir.py:34 +#: admin/consts.py:145 admin/plugins/error_redir.py:34 msgid "Internal" msgstr "Interno" -#: admin/consts.py:189 admin/plugins/header.py:116 admin/plugins/proxy.py:94 +#: admin/consts.py:188 admin/plugins/header.py:118 admin/plugins/proxy.py:94 #: admin/plugins/proxy.py:144 admin/plugins/redir.py:76 #: admin/plugins/redir.py:106 admin/plugins/request.py:31 #: admin/plugins/url_arg.py:76 admin/plugins/url_arg.py:95 msgid "Regular Expression" msgstr "Expresión Regular" -#: admin/consts.py:191 +#: admin/consts.py:190 msgid "File Exists" msgstr "O ficheiro xa existe" -#: admin/consts.py:192 +#: admin/consts.py:191 msgid "HTTP Method" msgstr "HTTP Method" -#: admin/consts.py:193 admin/plugins/bind.py:76 admin/plugins/bind.py:129 +#: admin/consts.py:192 admin/plugins/bind.py:76 admin/plugins/bind.py:129 msgid "Incoming IP/Port" msgstr "Entrada IP/Porto" -#: admin/consts.py:194 +#: admin/consts.py:193 msgid "SSL / TLS" msgstr "SSL / TLS" -#: admin/consts.py:195 admin/plugins/fullpath.py:66 +#: admin/consts.py:194 admin/plugins/fullpath.py:66 #: admin/plugins/fullpath.py:101 msgid "Full Path" msgstr "Ruta completa" -#: admin/consts.py:196 admin/plugins/from.py:71 +#: admin/consts.py:195 admin/plugins/from.py:71 msgid "Connected from" msgstr "Conectado dende" -#: admin/consts.py:197 +#: admin/consts.py:196 msgid "URL Argument" msgstr "Argumento URL" -#: admin/consts.py:198 +#: admin/consts.py:197 msgid "GeoIP" msgstr "GeoIP" -#: admin/consts.py:202 +#: admin/consts.py:201 msgid "Match Nickname" msgstr "Concordar Alcume" -#: admin/consts.py:203 +#: admin/consts.py:202 msgid "Wildcards" msgstr "Comodín" -#: admin/consts.py:205 +#: admin/consts.py:204 msgid "Server IP" msgstr "IP do servidor" -#: admin/consts.py:209 admin/consts.py:255 +#: admin/consts.py:208 admin/consts.py:254 msgid "Not set" msgstr "Non establecida" -#: admin/consts.py:210 +#: admin/consts.py:209 msgid "Already expired on 1970" msgstr "Xa caducou no 1970" -#: admin/consts.py:211 +#: admin/consts.py:210 msgid "Do not expire until 2038" msgstr "Non caduca ate 2038" -#: admin/consts.py:212 +#: admin/consts.py:211 msgid "Custom value" msgstr "Valor personalizado" -#: admin/consts.py:216 +#: admin/consts.py:215 msgid "No TLS/SSL" msgstr "Non TLS/SSL" -#: admin/consts.py:217 +#: admin/consts.py:216 msgid "OpenSSL / libssl" msgstr "OpenSSL / libssl" -#: admin/consts.py:221 admin/util.py:91 +#: admin/consts.py:220 admin/util.py:91 msgid "Off" msgstr "Apagado" -#: admin/consts.py:222 +#: admin/consts.py:221 msgid "Enhanced Virtual Hosting" msgstr "Hosting Virtual Mellorado" -#: admin/consts.py:226 +#: admin/consts.py:225 msgid "Skip" msgstr "Saltar" -#: admin/consts.py:227 +#: admin/consts.py:226 msgid "Tolerate" msgstr "" -#: admin/consts.py:229 +#: admin/consts.py:228 msgid "Require" msgstr "Solicitar" -#: admin/consts.py:234 +#: admin/consts.py:233 msgid "RRDtool graphs" msgstr "gráficos RRDtool" -#: admin/consts.py:238 +#: admin/consts.py:237 msgid "Local time" msgstr "Hora local" -#: admin/consts.py:239 +#: admin/consts.py:238 msgid "UTC: Coordinated Universal Time" msgstr "UTC: tempo universal" -#: admin/consts.py:243 +#: admin/consts.py:242 msgid "JSON" msgstr "JSON" -#: admin/consts.py:244 +#: admin/consts.py:243 msgid "Python" msgstr "Python" -#: admin/consts.py:245 admin/wizards/List.py:91 +#: admin/consts.py:244 admin/wizards/List.py:91 msgid "PHP" msgstr "PHP" -#: admin/consts.py:246 +#: admin/consts.py:245 msgid "Ruby" msgstr "Ruby" -#: admin/consts.py:251 +#: admin/consts.py:250 msgid "POST tracker" msgstr "Olleador POST" -#: admin/consts.py:256 +#: admin/consts.py:255 msgid "Public" msgstr "Público" -#: admin/consts.py:257 +#: admin/consts.py:256 msgid "Private" msgstr "Privado" -#: admin/consts.py:258 +#: admin/consts.py:257 msgid "No Cache" msgstr "Sen caché" -#: admin/consts.py:263 +#: admin/consts.py:262 msgid "0 - No compression" msgstr "" -#: admin/consts.py:264 +#: admin/consts.py:263 msgid "1" msgstr "" -#: admin/consts.py:265 +#: admin/consts.py:264 msgid "2" msgstr "" -#: admin/consts.py:266 +#: admin/consts.py:265 msgid "3" msgstr "" -#: admin/consts.py:267 +#: admin/consts.py:266 msgid "4" msgstr "" -#: admin/consts.py:268 +#: admin/consts.py:267 msgid "5" msgstr "" -#: admin/consts.py:269 +#: admin/consts.py:268 msgid "6" msgstr "" -#: admin/consts.py:270 +#: admin/consts.py:269 msgid "7" msgstr "" -#: admin/consts.py:271 +#: admin/consts.py:270 msgid "8" msgstr "" -#: admin/consts.py:272 +#: admin/consts.py:271 msgid "9 - Max compression" msgstr "" @@ -3623,66 +3665,66 @@ msgstr "Lista de ficheiros que non deben ser listados." msgid "Only listing" msgstr "Só listar" -#: admin/plugins/dirlist.py:49 admin/plugins/dirlist.py:50 #: admin/plugins/dirlist.py:51 admin/plugins/dirlist.py:52 #: admin/plugins/dirlist.py:53 admin/plugins/dirlist.py:54 +#: admin/plugins/dirlist.py:55 admin/plugins/dirlist.py:56 #: admin/plugins/redir.py:105 msgid "Show" msgstr "Amosar" -#: admin/plugins/dirlist.py:49 +#: admin/plugins/dirlist.py:51 msgid "Show Size" msgstr "Amosa tamaño" -#: admin/plugins/dirlist.py:50 +#: admin/plugins/dirlist.py:52 msgid "Show Date" msgstr "Amosar data" -#: admin/plugins/dirlist.py:51 +#: admin/plugins/dirlist.py:53 msgid "Show User" msgstr "Amosar Usuario" -#: admin/plugins/dirlist.py:52 +#: admin/plugins/dirlist.py:54 msgid "Show Group" msgstr "Amosar Grupo" -#: admin/plugins/dirlist.py:53 +#: admin/plugins/dirlist.py:55 msgid "Show Backup files" msgstr "Amosar ficheiros de respaldo" -#: admin/plugins/dirlist.py:54 +#: admin/plugins/dirlist.py:56 msgid "Show Hidden files" msgstr "Amosar ficheiros ocultos" -#: admin/plugins/dirlist.py:55 +#: admin/plugins/dirlist.py:58 admin/plugins/file.py:44 msgid "Allow symbolic links" msgstr "Permitir enlaces simbólicos" -#: admin/plugins/dirlist.py:56 +#: admin/plugins/dirlist.py:59 msgid "Redirect symbolic links" msgstr "Redireccionar enlaces simbólicos" -#: admin/plugins/dirlist.py:60 +#: admin/plugins/dirlist.py:63 msgid "Listing" msgstr "Listando" -#: admin/plugins/dirlist.py:65 +#: admin/plugins/dirlist.py:68 msgid "Theme" msgstr "Decorado" -#: admin/plugins/dirlist.py:66 +#: admin/plugins/dirlist.py:69 msgid "Icons dir" msgstr "Directorio iconas" -#: admin/plugins/dirlist.py:67 +#: admin/plugins/dirlist.py:70 msgid "Notice files" msgstr "Ficheiros de aviso" -#: admin/plugins/dirlist.py:68 +#: admin/plugins/dirlist.py:71 msgid "Hidden files" msgstr "Ficheiros ocultos" -#: admin/plugins/dirlist.py:72 +#: admin/plugins/dirlist.py:75 msgid "Theming" msgstr "Decorando" @@ -3822,7 +3864,7 @@ msgstr "Específico de FastCGI" msgid "Enables an internal I/O cache that improves performance." msgstr "Habilita a caché interna I/O que aumenta o rendimento." -#: admin/plugins/file.py:45 +#: admin/plugins/file.py:49 msgid "File Sending" msgstr "Envio de ficheiros" @@ -3909,25 +3951,25 @@ msgid "" "header entry." msgstr "" -#: admin/plugins/header.py:65 +#: admin/plugins/header.py:67 msgid "Matches a Regular Expression" msgstr "Concorda coa Expresión Regular" -#: admin/plugins/header.py:66 +#: admin/plugins/header.py:68 msgid "Is Provided" msgstr "É Proporcionado" -#: admin/plugins/header.py:104 +#: admin/plugins/header.py:106 #, fuzzy msgid "Full header" msgstr "nome de ficheiro" -#: admin/plugins/header.py:107 +#: admin/plugins/header.py:109 #, fuzzy msgid "Complete Header" msgstr "Ocultar Cabezallo" -#: admin/plugins/header.py:154 +#: admin/plugins/header.py:156 #, fuzzy, python-format msgid "Header %(header)s is provided" msgstr "Cabezallo %s é proporcionado" @@ -4051,7 +4093,7 @@ msgid "Database name containing the user/password pair list." msgstr "Nome da BD que contén a lista de usuarios/contrasinais." #: admin/plugins/mysql.py:41 -#, fuzzy +#, fuzzy, python-brace-format msgid "" "SQL command to execute. ${user} is replaced with the user name, and " "${passwd} is replaced with the user supplied password." @@ -4484,20 +4526,16 @@ msgstr "" msgid "Accepted Domains" msgstr "Dominios permitidos" -#: admin/server.py:68 +#: admin/server.py:70 #, python-format msgid "Server %(version)s running.. PID=%(pid)d Port=%(scgi_port)s" msgstr "Servidor %(version)s traballando.. PID=%(pid)d Porto=%(scgi_port)s" -#: admin/server.py:70 +#: admin/server.py:72 #, python-format msgid "Server %(version)s running.. PID=%(pid)d Socket=%(scgi_port)s" msgstr "Servidor %(version)s traballando.. PID=%(pid)d Socket=%(scgi_port)s" -#: admin/server.py:144 -msgid "Incorrect parameters: PORT CONFIG_FILE" -msgstr "Parámetros incorrectos: PORT CONFIG_FILE" - #: admin/util.py:91 msgid "On" msgstr "Acendido" @@ -4895,18 +4933,16 @@ msgstr "Porto onde se executa o servicio en dito servidor. (Ex.: 8080)" #: admin/wizards/alfresco.py:45 admin/wizards/coldfusion.py:46 #: admin/wizards/concrete5.py:47 admin/wizards/django.py:44 #: admin/wizards/glassfish.py:45 admin/wizards/mailman.py:48 -#: admin/wizards/mono.py:46 admin/wizards/php.py:43 -#: admin/wizards/symfony.py:51 admin/wizards/uwsgi.py:61 -#: admin/wizards/zend.py:47 +#: admin/wizards/mono.py:46 admin/wizards/php.py:43 admin/wizards/symfony.py:51 +#: admin/wizards/uwsgi.py:61 admin/wizards/zend.py:47 msgid "Host name of the virtual server that is about to be created." msgstr "Nome do Host do servidor vistual que vas crear." #: admin/wizards/alfresco.py:46 admin/wizards/coldfusion.py:45 #: admin/wizards/concrete5.py:46 admin/wizards/django.py:43 #: admin/wizards/glassfish.py:46 admin/wizards/mailman.py:47 -#: admin/wizards/mono.py:45 admin/wizards/php.py:42 -#: admin/wizards/symfony.py:50 admin/wizards/uwsgi.py:60 -#: admin/wizards/zend.py:46 +#: admin/wizards/mono.py:45 admin/wizards/php.py:42 admin/wizards/symfony.py:50 +#: admin/wizards/uwsgi.py:60 admin/wizards/zend.py:46 msgid "New Virtual Server Details" msgstr "Detalles do novo Servidor Virtual" @@ -5881,3 +5917,47 @@ msgstr "Non semella o directorio de Zend." #: admin/wizards/zend.py:49 msgid "Web directory where you want Zend to be accessible. (Example: /zend)" msgstr "Directorio web onde queres que Zend se publique. (Exempl: /zend)" + +#~ msgid "Allow SSL v2" +#~ msgstr "Permitir SSL v2" + +#, fuzzy +#~ msgid "Disable %s" +#~ msgstr "Deshabilitar" + +#~ msgid "Incorrect parameters: PORT CONFIG_FILE" +#~ msgstr "Parámetros incorrectos: PORT CONFIG_FILE" + +#~ msgid "Mailing List Subscription" +#~ msgstr "Suscripción á Lista de Correo" + +#~ msgid "Optionally provide your name" +#~ msgstr "Opcionalmente escriba o seu nome" + +#~ msgid "Purchase commercial support" +#~ msgstr "Conseguir axuda profesional" + +#~ msgid "Subscribe" +#~ msgstr "Suscribir" + +#, fuzzy +#~ msgid "" +#~ "There are a number of Community Mailing Lists\n" +#~ "available for you to subscribe. You can subscribe the General Discussion\n" +#~ "mailing list from this interface. There is where most of the discussions\n" +#~ "take place." +#~ msgstr "" +#~ "Hai un número de Listas de Correo " +#~ "da Comunidade\n" +#~ "ás que te podes suscribir. Podeste suscribir a lista de Discusión Xeral\n" +#~ "dende esta interface. É onde teñen lugar a maioría dos debates." + +#~ msgid "You will be sent an email requesting confirmation" +#~ msgstr "Pediráseche confirmación vía correo electrónico" + +#~ msgid "Your email address" +#~ msgstr "O teu correo electrónico" + +#~ msgid "Your name" +#~ msgstr "O teu nome" diff --git a/po/admin/it.po b/po/admin/it.po index 282cc60b9..fc81910d4 100644 --- a/po/admin/it.po +++ b/po/admin/it.po @@ -6,13 +6,13 @@ # msgid "" msgstr "" -"Project-Id-Version: Cherokee 1.0\n" -"Report-Msgid-Bugs-To: http://bugs.cherokee-project.com/\n" -"POT-Creation-Date: 2014-01-04 00:54+0100\n" +"Project-Id-Version: cherokee 1.2.104\n" +"Report-Msgid-Bugs-To: https://github.com/cherokee/webserver/issues\n" +"POT-Creation-Date: 2021-03-26 19:04+0100\n" "PO-Revision-Date: 2010-09-11 01:22+0100\n" "Last-Translator: Claudio Tancioni \n" "Language-Team: Italian <>\n" -"Language: \n" +"Language: it\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -105,7 +105,7 @@ msgstr "Information Sources" msgid "Assign Information Sources" msgstr "Assegna Information Sources" -#: admin/Balancer.py:136 admin/PageIndex.py:204 admin/PageRule.py:112 +#: admin/Balancer.py:136 admin/PageIndex.py:182 admin/PageRule.py:112 #: admin/plugins/bind.py:69 admin/plugins/bind.py:121 #: admin/plugins/custom_error.py:41 admin/plugins/method.py:31 msgid "Choose" @@ -140,17 +140,17 @@ msgstr "Impossibile copiare la configurazione in" #: admin/CTK/CTK/Druid.py:216 admin/CTK/CTK/Druid.py:224 #: admin/CTK/CTK/Druid.py:232 admin/CTK/CTK/Druid.py:238 admin/Icons.py:362 #: admin/Mime.py:110 admin/PageGeneral.py:289 admin/PageGeneral.py:317 -#: admin/PageIndex.py:232 admin/PageIndex.py:308 admin/PageRule.py:225 -#: admin/PageRule.py:276 admin/PageRule.py:302 admin/PageSource.py:225 -#: admin/PageSource.py:411 admin/PageSource.py:428 admin/PageSource.py:442 -#: admin/PageVServers.py:215 admin/PageVServers.py:252 -#: admin/PageVServers.py:281 admin/plugins/redir.py:120 +#: admin/PageIndex.py:246 admin/PageRule.py:225 admin/PageRule.py:276 +#: admin/PageRule.py:302 admin/PageSource.py:225 admin/PageSource.py:411 +#: admin/PageSource.py:428 admin/PageSource.py:442 admin/PageVServers.py:215 +#: admin/PageVServers.py:252 admin/PageVServers.py:281 +#: admin/plugins/redir.py:120 msgid "Cancel" msgstr "Annulla" #: admin/CTK/CTK/Dialog.py:165 admin/CTK/CTK/Dialog.py:272 #: admin/CTK/CTK/Druid.py:243 admin/PageException.py:89 -#: admin/PageException.py:93 admin/PageGeneral.py:283 admin/PageIndex.py:277 +#: admin/PageException.py:93 admin/PageGeneral.py:283 admin/PageIndex.py:215 #: admin/PageSource.py:402 admin/plugins/error_redir.py:110 msgid "Close" msgstr "Chiudi" @@ -188,14 +188,14 @@ msgstr "Caricamento" #: admin/CTK/CTK/Image.py:99 admin/CgiBase.py:69 admin/CgiBase.py:71 #: admin/CgiBase.py:124 admin/CgiBase.py:125 admin/CgiBase.py:126 #: admin/CgiBase.py:127 admin/CgiBase.py:128 admin/Graph.py:125 -#: admin/PageAdvanced.py:150 admin/PageEntry.py:150 admin/PageEntry.py:159 -#: admin/PageGeneral.py:193 admin/PageSource.py:296 -#: admin/plugins/dirlist.py:56 admin/plugins/exists.py:72 -#: admin/plugins/exists.py:77 admin/plugins/exists.py:78 -#: admin/plugins/exists.py:79 admin/plugins/exists.py:109 -#: admin/plugins/exists.py:115 admin/plugins/exists.py:116 -#: admin/plugins/exists.py:117 admin/plugins/file.py:40 -#: admin/plugins/ldap.py:53 admin/plugins/streaming.py:43 +#: admin/PageAdvanced.py:198 admin/PageEntry.py:150 admin/PageEntry.py:159 +#: admin/PageGeneral.py:193 admin/PageSource.py:296 admin/plugins/dirlist.py:59 +#: admin/plugins/exists.py:72 admin/plugins/exists.py:77 +#: admin/plugins/exists.py:78 admin/plugins/exists.py:79 +#: admin/plugins/exists.py:109 admin/plugins/exists.py:115 +#: admin/plugins/exists.py:116 admin/plugins/exists.py:117 +#: admin/plugins/file.py:42 admin/plugins/ldap.py:53 +#: admin/plugins/streaming.py:43 msgid "Enabled" msgstr "Abilitato" @@ -214,11 +214,12 @@ msgstr "Indietro" msgid "Optional" msgstr "Opzionale" -#: admin/CTK/CTK/ToggleButton.py:154 +#: admin/CTK/CTK/ToggleButton.py:154 admin/PageAdvanced.py:245 +#: admin/PageAdvanced.py:258 msgid "Disable" msgstr "Disabilita" -#: admin/CTK/CTK/ToggleButton.py:155 admin/PageVServer.py:669 +#: admin/CTK/CTK/ToggleButton.py:155 admin/PageVServer.py:678 #: admin/wizards/flcache.py:157 msgid "Enable" msgstr "Attiva" @@ -267,7 +268,7 @@ msgstr "" "Se il gestore dovrebbe leggere e utilizzare l'intestazione X-Real-IP e di " "usarle inREMOTE_ADDR." -#: admin/CgiBase.py:40 admin/PageVServer.py:70 +#: admin/CgiBase.py:40 admin/PageVServer.py:74 msgid "" "Accept all the X-Real-IP and X-Forwarded-For headers. WARNING: Turn it on " "only if you are centain of what you are doing." @@ -288,11 +289,11 @@ msgstr "" msgid "Read X-Real-IP" msgstr "Leggi X-Real-IP" -#: admin/CgiBase.py:71 admin/PageVServer.py:610 +#: admin/CgiBase.py:71 admin/PageVServer.py:614 msgid "Don't check origin" msgstr "Non controllare l'origine" -#: admin/CgiBase.py:73 admin/PageVServer.py:613 +#: admin/CgiBase.py:73 admin/PageVServer.py:617 msgid "Accept from Hosts" msgstr "Accetta dagli Host" @@ -334,7 +335,7 @@ msgid "Allow X-Sendfile" msgstr "Consenti X-Sendfile" #: admin/CgiBase.py:128 admin/plugins/exists.py:77 admin/plugins/exists.py:115 -#: admin/plugins/file.py:40 +#: admin/plugins/file.py:42 msgid "Use I/O cache" msgstr "Usa I/O cache" @@ -428,7 +429,7 @@ msgstr "" "questoServer virtuale." #: admin/Graph.py:118 admin/PageEntry.py:538 admin/PageSource.py:257 -#: admin/PageStatus.py:70 admin/PageVServer.py:731 admin/PageVServers.py:210 +#: admin/PageStatus.py:70 admin/PageVServer.py:740 admin/PageVServers.py:210 msgid "Unknown" msgstr "Sconosciuto" @@ -440,7 +441,7 @@ msgstr "Collezionamento Statistiche" msgid "Allows to specify an alternative Document Root path." msgstr "Permette di specificare un percorso alternativo Document Root." -#: admin/Handler.py:43 admin/PageEntry.py:523 admin/PageVServer.py:462 +#: admin/Handler.py:43 admin/PageEntry.py:523 admin/PageVServer.py:466 #: admin/PageVServers.py:128 admin/wizards/django.py:191 #: admin/wizards/mono.py:199 admin/wizards/php.py:39 admin/wizards/php.py:342 #: admin/wizards/uwsgi.py:267 @@ -452,7 +453,7 @@ msgid "Extension List" msgstr "Lista Estensioni" #: admin/Icons.py:129 admin/Icons.py:328 admin/Mime.py:96 admin/Mime.py:131 -#: admin/consts.py:188 admin/plugins/extensions.py:61 +#: admin/consts.py:187 admin/plugins/extensions.py:61 #: admin/wizards/flcache.py:141 msgid "Extensions" msgstr "Estensioni" @@ -473,12 +474,13 @@ msgstr "File" msgid "Add New File" msgstr "Aggiungi nuovo file" -#: admin/Icons.py:197 admin/Icons.py:329 admin/Rule.py:174 admin/consts.py:42 -#: admin/consts.py:128 admin/consts.py:262 +#: admin/Icons.py:197 admin/Icons.py:329 admin/PageVServer.py:674 +#: admin/PageVServer.py:675 admin/Rule.py:174 admin/consts.py:42 +#: admin/consts.py:128 admin/consts.py:261 msgid "Default" msgstr "Default" -#: admin/Icons.py:198 admin/Icons.py:330 admin/consts.py:187 +#: admin/Icons.py:198 admin/Icons.py:330 admin/consts.py:186 #: admin/plugins/directory.py:31 msgid "Directory" msgstr "Directory" @@ -491,7 +493,7 @@ msgstr "Vai al predecessore" msgid "Modify" msgstr "Modifica" -#: admin/Icons.py:214 admin/PageAdvanced.py:168 admin/PageAdvanced.py:192 +#: admin/Icons.py:214 admin/PageAdvanced.py:216 admin/PageAdvanced.py:316 msgid "Special Files" msgstr "File Speciali" @@ -602,7 +604,7 @@ msgstr "Salva" msgid "Home" msgstr "Home" -#: admin/Page.py:155 admin/PageAdvanced.py:150 admin/PageIndex.py:84 +#: admin/Page.py:155 admin/PageAdvanced.py:198 admin/PageIndex.py:62 #: admin/PageStatus.py:40 admin/PageStatus.py:112 msgid "Status" msgstr "Stato" @@ -619,7 +621,7 @@ msgstr "vServers" msgid "Sources" msgstr "Sorgenti" -#: admin/Page.py:159 admin/PageAdvanced.py:97 admin/PageAdvanced.py:198 +#: admin/Page.py:159 admin/PageAdvanced.py:145 admin/PageAdvanced.py:322 msgid "Advanced" msgstr "Avanzate" @@ -631,7 +633,19 @@ msgstr "Aiuto" msgid "Updating..." msgstr "Aggiornamento ..." -#: admin/PageAdvanced.py:64 +#: admin/PageAdvanced.py:56 +msgid "" +"

WARNING: The SSL/TLS back-end supports more recent\n" +"versions of TLS protocols, which are not recognized by Cherokee. Please " +"check\n" +"for latest Cherokee updates or report this issue. As a temporary workaround " +"please\n" +"set 'Max. TLS protocol version' to the maximum TLS protocol version " +"supported by\n" +"Cherokee.

Following unknown TLS protocols have been found:" +msgstr "" + +#: admin/PageAdvanced.py:94 msgid "" "

WARNING: This section contains advanced\n" "configuration parameters. Changing things is not recommended unless\n" @@ -641,17 +655,17 @@ msgstr "" "di Configurazione avanzati. Cambiare le cose non è raccomandato a meno che \n" "sai davvero cosa stai facendo.

" -#: admin/PageAdvanced.py:68 +#: admin/PageAdvanced.py:98 msgid "Defines which thread policy the OS should apply to the server." msgstr "" "Definisce quale la politica di gestione thread il sistema operativo dovrebbe " "applicare al server." -#: admin/PageAdvanced.py:69 +#: admin/PageAdvanced.py:99 msgid "If empty, Cherokee will calculate a default number." msgstr "Se vuoto, Cherokee calcolerà  un numero di default." -#: admin/PageAdvanced.py:70 +#: admin/PageAdvanced.py:100 msgid "" "It defines how many file descriptors the server should handle. Default is " "the number showed by ulimit -n" @@ -659,23 +673,23 @@ msgstr "" "Definisce quanti file descriptor il server dovrebbe gestire. Il " "valorepredefinito è il numero mostrato da ulimit-n" -#: admin/PageAdvanced.py:71 +#: admin/PageAdvanced.py:101 msgid "Allows to choose the internal file descriptor polling method." msgstr "" "Permette di scegliere il metodo interno di polling del file descriptor." -#: admin/PageAdvanced.py:72 +#: admin/PageAdvanced.py:102 msgid "Minimum size of a file to use sendfile(). Default: 32768 Bytes." msgstr "" "Dimensione minima di un file da utilizzare per sendfile(). Default: 32768 " "Byte." -#: admin/PageAdvanced.py:73 +#: admin/PageAdvanced.py:103 msgid "Maximum size of a file to use sendfile(). Default: 2 GB." msgstr "" "Dimensione massima di un file da utilizzare per sendfile(). Default: 2 GB." -#: admin/PageAdvanced.py:74 +#: admin/PageAdvanced.py:104 msgid "" "Name a program that will be called if, by some reason, the server fails. " "Default: cherokee-panic." @@ -683,15 +697,15 @@ msgstr "" "Nome di un programma che verrà invocato se, per qualche ragione, il server " "va in crash o fallisce.Default: cherokee-panic." -#: admin/PageAdvanced.py:75 +#: admin/PageAdvanced.py:105 msgid "Path of the PID file. If empty, the file will not be created." msgstr "Percorso del file PID. Se vuoto, il file non verrà  creato." -#: admin/PageAdvanced.py:76 +#: admin/PageAdvanced.py:106 msgid "Max. length of the incoming connection queue." msgstr "Max. lunghezza della coda di connessione in entrata." -#: admin/PageAdvanced.py:77 +#: admin/PageAdvanced.py:107 msgid "" "Set the number of how many internal connections can be held for reuse by " "each thread. Default: 20." @@ -699,7 +713,7 @@ msgstr "" "Impostare il numero di quante connessioni interne possono essere detenute " "per il riutilizzoda ciascun thread. Default: 20." -#: admin/PageAdvanced.py:78 +#: admin/PageAdvanced.py:108 msgid "" "Sets the number of seconds between log consolidations (flushes). Default: 10 " "seconds." @@ -707,11 +721,11 @@ msgstr "" "Imposta il numero di secondi tra i consolidamenti dei log. Default: " "10secondi." -#: admin/PageAdvanced.py:79 +#: admin/PageAdvanced.py:109 msgid "Time lapse (in seconds) between Nonce cache clean ups." msgstr "Lasso di tempo (in secondi) tra le ripuliture della cache Nonce." -#: admin/PageAdvanced.py:80 +#: admin/PageAdvanced.py:110 msgid "" "Enables the server-wide keep-alive support. It increases the performance. It " "is usually set on." @@ -719,7 +733,7 @@ msgstr "" "Abilita il supporto a livello di server keep-alive. Aumenta il rendimento. " "Generalmente è impostato." -#: admin/PageAdvanced.py:81 +#: admin/PageAdvanced.py:111 msgid "" "Maximum number of HTTP requests that can be served by each keepalive " "connection." @@ -727,32 +741,32 @@ msgstr "" "Numero massimo di richieste HTTP che possono essere servite da ciascun " "connessionekeepalive." -#: admin/PageAdvanced.py:82 +#: admin/PageAdvanced.py:112 msgid "" "Allows the server to use Chunked encoding to try to keep Keep-Alive enabled." msgstr "" "Permette al server di utilizzare la codifica Chunked per cercare di " "mantenere Keep-Alive abilitato." -#: admin/PageAdvanced.py:83 +#: admin/PageAdvanced.py:113 msgid "Activate or deactivate the I/O cache globally." msgstr "Attiva o disattiva l'I/O cache di livello globale." -#: admin/PageAdvanced.py:84 +#: admin/PageAdvanced.py:114 msgid "Number of pages that the cache should handle." msgstr "Numero di pagine che la cache dovrebbe gestire." -#: admin/PageAdvanced.py:85 +#: admin/PageAdvanced.py:115 #, fuzzy msgid "Files under this size (in bytes) will not be cached." msgstr "I file sotto questa dimensione non vengono memorizzati nella cache." -#: admin/PageAdvanced.py:86 +#: admin/PageAdvanced.py:116 #, fuzzy msgid "Files over this size (in bytes) will not be cached." msgstr "I file oltre questa dimensione non vengono memorizzati nella cache." -#: admin/PageAdvanced.py:87 +#: admin/PageAdvanced.py:117 msgid "" "How long (in seconds) the file information should last cached without " "refreshing it." @@ -760,171 +774,230 @@ msgstr "" "Quanto tempo (in secondi) le informazioni dei file nella cache dovrebbeeo " "durare senzafarne il refresh." -#: admin/PageAdvanced.py:88 +#: admin/PageAdvanced.py:118 msgid "How long (in seconds) the file content should last cached." msgstr "" "Per quanto tempo (in secondi) il contenuto del file nella cache dovrebbe " "durare." -#: admin/PageAdvanced.py:89 +#: admin/PageAdvanced.py:119 msgid "Path to a Diffie Hellman (DH) parameters PEM file: 512 bits." msgstr "Percorso verso il file parametrico Diffie Hellman (DH) PEM: 512 bit." -#: admin/PageAdvanced.py:90 +#: admin/PageAdvanced.py:120 msgid "Path to a Diffie Hellman (DH) parameters PEM file: 1024 bits." msgstr "Percorso verso il file parametrico Diffie Hellman (DH) PEM: 1024 bit." -#: admin/PageAdvanced.py:91 +#: admin/PageAdvanced.py:121 msgid "Path to a Diffie Hellman (DH) parameters PEM file: 2048 bits." msgstr "Percorso verso il file parametrico Diffie Hellman (DH) PEM: 2048 bit." -#: admin/PageAdvanced.py:92 +#: admin/PageAdvanced.py:122 msgid "Path to a Diffie Hellman (DH) parameters PEM file: 4096 bits." msgstr "Percorso verso il file parametrico Diffie Hellman (DH) PEM: 4096 bit." -#: admin/PageAdvanced.py:93 +#: admin/PageAdvanced.py:123 +msgid "Your Cherokee Web Server does not support SSL/TLS encryption." +msgstr "" + +#: admin/PageAdvanced.py:124 msgid "Timeout for the TLS/SSL handshake. Default: 15 seconds." msgstr "Timeout per il TLS/SSL handshake. Default: 15 secondi." -#: admin/PageAdvanced.py:94 +#: admin/PageAdvanced.py:125 +msgid "Beware: it is vulnerable. You should disable SSLv2." +msgstr "" + +#: admin/PageAdvanced.py:126 +msgid "Beware: it is vulnerable. You should disable SSLv3." +msgstr "" + +#: admin/PageAdvanced.py:127 +msgid "TLSv1 is deprecated" +msgstr "" + +#: admin/PageAdvanced.py:128 +msgid "TLSv1.1 is deprecated" +msgstr "" + +#: admin/PageAdvanced.py:129 admin/PageAdvanced.py:130 +msgid " " +msgstr "" + +#: admin/PageAdvanced.py:131 msgid "" -"Allow clients to use SSL version 2 - Beware: it is vulnerable. (Default: No)" +"The following options work in combination with above min/max TLS protocol " +"version settings. They are deprecated, only set the minimum and maximum " +"supported protocol versions instead." msgstr "" -"Permette di utilizzare i client SSL versione 2 - Attenzione: è vulnerabile. " -"(Predefinito: No)" -#: admin/PageAdvanced.py:119 admin/PageAdvanced.py:121 +#: admin/PageAdvanced.py:133 +msgid "" +"Minimum required TLS protocol version from clients (Default: auto-configured " +"by libssl)" +msgstr "" + +#: admin/PageAdvanced.py:134 +msgid "" +"Maximum supported TLS protocol version (Default: auto-configured by libssl)" +msgstr "" + +#: admin/PageAdvanced.py:167 admin/PageAdvanced.py:169 msgid "Allowed" msgstr "Ammesso" -#: admin/PageAdvanced.py:119 +#: admin/PageAdvanced.py:167 msgid "Keep Alive" msgstr "Keep Alive" -#: admin/PageAdvanced.py:120 +#: admin/PageAdvanced.py:168 msgid "Max keepalive reqs" msgstr "Max richieste keepalive" -#: admin/PageAdvanced.py:121 +#: admin/PageAdvanced.py:169 msgid "Chunked Encoding" msgstr "Codifica Chunked" -#: admin/PageAdvanced.py:122 +#: admin/PageAdvanced.py:170 msgid "Polling Method" msgstr "Metodo di Polling" -#: admin/PageAdvanced.py:123 +#: admin/PageAdvanced.py:171 msgid "Sendfile min size" msgstr "Dimensione min Sendfile" -#: admin/PageAdvanced.py:124 +#: admin/PageAdvanced.py:172 msgid "Sendfile max size" msgstr "Dimensione massima Sendfile" -#: admin/PageAdvanced.py:126 admin/PageAdvanced.py:189 +#: admin/PageAdvanced.py:174 admin/PageAdvanced.py:313 msgid "Connections" msgstr "Connessioni" -#: admin/PageAdvanced.py:134 +#: admin/PageAdvanced.py:182 msgid "Thread Number" msgstr "Numero Thread" -#: admin/PageAdvanced.py:135 +#: admin/PageAdvanced.py:183 msgid "Thread Policy" msgstr "Thread Policy" -#: admin/PageAdvanced.py:136 +#: admin/PageAdvanced.py:184 msgid "File descriptors" msgstr "descrittori di file" -#: admin/PageAdvanced.py:137 +#: admin/PageAdvanced.py:185 msgid "Listening queue length" msgstr "Lunghezza coda di ascolto" -#: admin/PageAdvanced.py:138 admin/plugins/proxy.py:239 +#: admin/PageAdvanced.py:186 admin/plugins/proxy.py:239 msgid "Reuse connections" msgstr "Riutilizzo connessioni" -#: admin/PageAdvanced.py:139 +#: admin/PageAdvanced.py:187 msgid "Log flush time" msgstr "Tempo di flush del log" -#: admin/PageAdvanced.py:140 +#: admin/PageAdvanced.py:188 msgid "Nonces clean up time" msgstr "Nounces tempo di ripulitura" -#: admin/PageAdvanced.py:142 admin/PageAdvanced.py:190 +#: admin/PageAdvanced.py:190 admin/PageAdvanced.py:314 msgid "Resources" msgstr "Risorse" -#: admin/PageAdvanced.py:151 +#: admin/PageAdvanced.py:199 msgid "Max pages" msgstr "Max pagine" -#: admin/PageAdvanced.py:152 +#: admin/PageAdvanced.py:200 msgid "File Min Size" msgstr "File formato minimo" -#: admin/PageAdvanced.py:153 +#: admin/PageAdvanced.py:201 msgid "File Max Size" msgstr "File fformato massimo" -#: admin/PageAdvanced.py:154 +#: admin/PageAdvanced.py:202 msgid "Lasting: stat" msgstr "Durata: stat" -#: admin/PageAdvanced.py:155 +#: admin/PageAdvanced.py:203 msgid "Lasting: mmap" msgstr "Durata: mmap" -#: admin/PageAdvanced.py:157 admin/PageAdvanced.py:191 +#: admin/PageAdvanced.py:205 admin/PageAdvanced.py:315 msgid "I/O cache" msgstr "I/O cache" -#: admin/PageAdvanced.py:165 +#: admin/PageAdvanced.py:213 msgid "Panic action" msgstr "Panic action" -#: admin/PageAdvanced.py:166 +#: admin/PageAdvanced.py:214 msgid "PID file" msgstr "PID file" -#: admin/PageAdvanced.py:176 admin/PageEntry.py:84 admin/PageVServer.py:476 -#: admin/plugins/common.py:42 admin/plugins/common.py:43 -#: admin/plugins/dirlist.py:55 admin/plugins/proxy.py:240 -msgid "Allow" -msgstr "Consenti" +#: admin/PageAdvanced.py:245 admin/PageAdvanced.py:247 +#: admin/PageAdvanced.py:258 admin/PageAdvanced.py:260 +#, fuzzy +msgid "Disable " +msgstr "Disabilita" + +#: admin/PageAdvanced.py:247 +msgid "Protocol deacrivated" +msgstr "" -#: admin/PageAdvanced.py:176 -msgid "Allow SSL v2" -msgstr "Consenti SSL v2" +#: admin/PageAdvanced.py:247 +msgid "Protocol not supported" +msgstr "" -#: admin/PageAdvanced.py:177 +#: admin/PageAdvanced.py:260 +msgid "Protocol deactivated" +msgstr "" + +#: admin/PageAdvanced.py:262 +msgid "Turn off selected TLS Protocols (Deprecated)" +msgstr "" + +#: admin/PageAdvanced.py:270 admin/PageAdvanced.py:271 +msgid "auto-configured" +msgstr "" + +#: admin/PageAdvanced.py:285 +msgid "Min. TLS protocol version" +msgstr "" + +#: admin/PageAdvanced.py:290 +msgid "Max. TLS protocol version" +msgstr "" + +#: admin/PageAdvanced.py:291 msgid "Handshake Timeout" msgstr "Handshake Timeout" -#: admin/PageAdvanced.py:178 +#: admin/PageAdvanced.py:292 msgid "DH parameters: 512 bits" msgstr "parametri DH: 512 bit" -#: admin/PageAdvanced.py:179 +#: admin/PageAdvanced.py:293 msgid "DH parameters: 1024 bits" msgstr "parametri DH: 1024 bit" -#: admin/PageAdvanced.py:180 +#: admin/PageAdvanced.py:294 msgid "DH parameters: 2048 bits" msgstr "parametri DH: 2048 bit" -#: admin/PageAdvanced.py:181 +#: admin/PageAdvanced.py:295 msgid "DH parameters: 4096 bits" msgstr "parametri DH: 4096 bit" -#: admin/PageAdvanced.py:183 admin/PageAdvanced.py:193 -#: admin/PageGeneral.py:239 admin/plugins/bind.py:92 +#: admin/PageAdvanced.py:296 admin/PageAdvanced.py:317 admin/PageGeneral.py:239 +#: admin/plugins/bind.py:92 msgid "TLS" msgstr "TLS" -#: admin/PageAdvanced.py:199 +#: admin/PageAdvanced.py:323 msgid "Advanced Configuration" msgstr "Configurazione Avanzata" @@ -1032,7 +1105,7 @@ msgstr "Codificatore GZip" msgid "Deflate encoder" msgstr "Decodificatore decopressore" -#: admin/PageEntry.py:78 admin/PageEntry.py:173 admin/PageVServer.py:149 +#: admin/PageEntry.py:78 admin/PageEntry.py:173 admin/PageVServer.py:153 msgid "Authentication" msgstr "Autenticazione" @@ -1042,7 +1115,13 @@ msgstr "Modili Autenticazione" #: admin/PageEntry.py:83 admin/PageEntry.py:89 msgid "Leave unset" -msgstr "Lascia non impostata" +msgstr "" + +#: admin/PageEntry.py:84 admin/PageVServer.py:480 admin/plugins/common.py:42 +#: admin/plugins/common.py:43 admin/plugins/dirlist.py:58 +#: admin/plugins/file.py:44 admin/plugins/proxy.py:240 +msgid "Allow" +msgstr "" #: admin/PageEntry.py:85 msgid "Forbid" @@ -1071,7 +1150,7 @@ msgstr "" msgid "Remove" msgstr "Rimuovi" -#: admin/PageEntry.py:126 admin/PageVServer.py:155 +#: admin/PageEntry.py:126 admin/PageVServer.py:159 #: admin/plugins/secdownload.py:44 msgid "Timeout" msgstr "Timeout" @@ -1084,7 +1163,7 @@ msgstr "Timeout Connessioni" msgid "Limit traffic to" msgstr "Limita traffico a" -#: admin/PageEntry.py:139 admin/PageVServer.py:156 +#: admin/PageEntry.py:139 admin/PageVServer.py:160 msgid "Traffic Shaping" msgstr "Forma di traffico" @@ -1092,7 +1171,7 @@ msgstr "Forma di traffico" msgid "Skip Logging" msgstr "Salta Logging" -#: admin/PageEntry.py:154 admin/PageVServer.py:720 +#: admin/PageEntry.py:154 admin/PageVServer.py:729 msgid "Logging" msgstr "Logging" @@ -1117,14 +1196,14 @@ msgstr "Meccanismo Validazione" msgid "Can not be empty" msgstr "Non può essere vuoto" -#: admin/PageEntry.py:216 admin/PageEntry.py:268 admin/consts.py:190 -#: admin/plugins/header.py:110 admin/plugins/header.py:151 -#: admin/plugins/header.py:156 admin/plugins/proxy.py:193 +#: admin/PageEntry.py:216 admin/PageEntry.py:268 admin/consts.py:189 +#: admin/plugins/header.py:112 admin/plugins/header.py:153 +#: admin/plugins/header.py:158 admin/plugins/proxy.py:193 msgid "Header" msgstr "Intestazione" #: admin/PageEntry.py:216 admin/PageSource.py:284 -#: admin/plugins/error_redir.py:105 admin/plugins/header.py:113 +#: admin/plugins/error_redir.py:105 admin/plugins/header.py:115 #: admin/plugins/redir.py:76 msgid "Type" msgstr "Tipo" @@ -1144,7 +1223,7 @@ msgstr "Attivo" msgid "Add New Header" msgstr "Aggiungi Nuova Coppia" -#: admin/PageEntry.py:326 admin/consts.py:204 admin/plugins/redir.py:39 +#: admin/PageEntry.py:326 admin/consts.py:203 admin/plugins/redir.py:39 #: admin/plugins/rehost.py:53 msgid "Regular Expressions" msgstr "Espressioni regolari" @@ -1162,8 +1241,7 @@ msgstr "" msgid "Caching Policy" msgstr "" -#: admin/PageEntry.py:381 admin/plugins/rehost.py:68 -#: admin/plugins/rehost.py:92 +#: admin/PageEntry.py:381 admin/plugins/rehost.py:68 admin/plugins/rehost.py:92 msgid "New Regular Expression" msgstr "Nuova Espressione Regolare" @@ -1171,7 +1249,7 @@ msgstr "Nuova Espressione Regolare" msgid "Disregarded Cookies" msgstr "" -#: admin/PageEntry.py:402 admin/PageVServer.py:154 +#: admin/PageEntry.py:402 admin/PageVServer.py:158 msgid "Expiration" msgstr "Scadenza" @@ -1203,7 +1281,7 @@ msgstr "I Proxy Rivalidano" msgid "Content Expiration" msgstr "Scadenza Contenuto" -#: admin/PageEntry.py:433 admin/PageVServer.py:153 +#: admin/PageEntry.py:433 admin/PageVServer.py:157 #, fuzzy msgid "Cache" msgstr "Nessuna Cache" @@ -1226,7 +1304,7 @@ msgid "Matching Rule" msgstr "Regola che soddisfa" #: admin/PageEntry.py:514 admin/PageEntry.py:528 admin/PageEntry.py:553 -#: admin/PageVServer.py:148 +#: admin/PageVServer.py:152 msgid "Handler" msgstr "Gestore" @@ -1244,7 +1322,7 @@ msgstr "Non Trasformare" msgid "Caching" msgstr "Regola che soddisfa" -#: admin/PageEntry.py:556 admin/PageVServer.py:721 +#: admin/PageEntry.py:556 admin/PageVServer.py:730 msgid "Security" msgstr "Sicurezza" @@ -1517,7 +1595,7 @@ msgstr "IPv6" msgid "SSL/TLS back-end" msgstr "SSL/TLS back-end" -#: admin/PageGeneral.py:197 admin/PageIndex.py:252 +#: admin/PageGeneral.py:197 admin/PageIndex.py:198 msgid "Support" msgstr "Supprto" @@ -1550,8 +1628,8 @@ msgid "Bind to" msgstr "Bind a" #: admin/PageGeneral.py:239 admin/PageGeneral.py:310 admin/plugins/bind.py:92 -#: admin/plugins/bind.py:155 admin/plugins/bind.py:157 -#: admin/plugins/ldap.py:48 admin/plugins/mysql.py:77 +#: admin/plugins/bind.py:155 admin/plugins/bind.py:157 admin/plugins/ldap.py:48 +#: admin/plugins/mysql.py:77 msgid "Port" msgstr "Porta" @@ -1616,7 +1694,7 @@ msgstr "Gruppo" msgid "Chroot" msgstr "chroot" -#: admin/PageGeneral.py:357 admin/PageVServer.py:479 +#: admin/PageGeneral.py:357 admin/PageVServer.py:483 msgid "Network" msgstr "Rete" @@ -1644,177 +1722,133 @@ msgstr "Indice" msgid "Documentation" msgstr "Documentazione" -#: admin/PageIndex.py:67 -msgid "You will be sent an email requesting confirmation" -msgstr "Ti verrà inviata una mail con richiesta di conferma" - -#: admin/PageIndex.py:68 -msgid "Optionally provide your name" -msgstr "Opzionalmente fornisci il tuo nome" - -#: admin/PageIndex.py:70 -#, fuzzy, python-format -msgid "" -"There are a number of Community Mailing Lists\n" -"available for you to subscribe. You can subscribe the General Discussion\n" -"mailing list from this interface. There is where most of the discussions\n" -"take place." -msgstr "" -"C'è un certo numero di Comunità Mailing " -"Lists\n" -"a vostra disposizione per iscriverti. Puoi iscriverti alla mailing list\n" -"Discussione Generale da questa interfaccia. È dove la maggior parte delle " -"discussioni\n" -"hanno luogo." - -#: admin/PageIndex.py:77 +#: admin/PageIndex.py:58 msgid "Server is Running" msgstr "Server in Esecuzione." -#: admin/PageIndex.py:78 +#: admin/PageIndex.py:59 msgid "Server is not Running" msgstr "Server NON in Esecuzione." -#: admin/PageIndex.py:132 +#: admin/PageIndex.py:110 msgid "Stop Server" msgstr "Stop Server" -#: admin/PageIndex.py:136 +#: admin/PageIndex.py:114 msgid "Start Server" msgstr "Start Server" -#: admin/PageIndex.py:141 +#: admin/PageIndex.py:119 msgid "Hostname" msgstr "Nome Host" -#: admin/PageIndex.py:143 +#: admin/PageIndex.py:121 msgid "Modified" msgstr "Modificato" -#: admin/PageIndex.py:145 +#: admin/PageIndex.py:123 msgid "Not found" msgstr "Non trovato" -#: admin/PageIndex.py:146 +#: admin/PageIndex.py:124 msgid "Config File" msgstr "File di configurazione" -#: admin/PageIndex.py:153 admin/plugins/server_info.py:32 +#: admin/PageIndex.py:131 admin/plugins/server_info.py:32 #: admin/plugins/server_info.py:35 msgid "Server Information" msgstr "Informazioni sul server" -#: admin/PageIndex.py:165 +#: admin/PageIndex.py:143 msgid "Processors" msgstr "Processori" -#: admin/PageIndex.py:177 +#: admin/PageIndex.py:155 msgid "Memory" msgstr "Memoria" -#: admin/PageIndex.py:211 admin/plugins/dbslayer.py:51 +#: admin/PageIndex.py:189 admin/plugins/dbslayer.py:51 msgid "Language" msgstr "Lingua" -#: admin/PageIndex.py:231 -#, fuzzy -msgid "Mailing List Subscription" -msgstr "Iscrizione alla mailing list" - -#: admin/PageIndex.py:233 -msgid "Subscribe" -msgstr "Iscriviti" - -#: admin/PageIndex.py:236 -msgid "Your email address" -msgstr "Il tuo indirizzo e-mail" - -#: admin/PageIndex.py:237 -msgid "Your name" -msgstr "Il tuo nome" - -#: admin/PageIndex.py:256 +#: admin/PageIndex.py:202 msgid "Getting started" msgstr "Comincia" -#: admin/PageIndex.py:260 -msgid "Subscribe to mailing lists" +#: admin/PageIndex.py:206 +#, fuzzy +msgid "Visit the mailing list" msgstr "Iscriviti alle mailing list" -#: admin/PageIndex.py:268 +#: admin/PageIndex.py:210 msgid "Report a bug" msgstr "Segnala un bug" -#: admin/PageIndex.py:272 -msgid "Purchase commercial support" -msgstr "Acquista supporto commerciale" - -#: admin/PageIndex.py:276 admin/PageIndex.py:280 +#: admin/PageIndex.py:214 admin/PageIndex.py:218 msgid "About Cherokee" msgstr "A proposito di Cherokee" -#: admin/PageIndex.py:289 +#: admin/PageIndex.py:227 msgid "Join the Cherokee Community:" msgstr "Unisciti alla Comunità Cherokee:" -#: admin/PageIndex.py:292 +#: admin/PageIndex.py:230 msgid "Visit the Cherokee Project Website" msgstr "Visita il sito web Cherokee Project" -#: admin/PageIndex.py:293 +#: admin/PageIndex.py:231 msgid "Follow us on Twitter" msgstr "Seguici su Twitter" -#: admin/PageIndex.py:294 +#: admin/PageIndex.py:232 msgid "Join us on Facebook" msgstr "Unisciti a noi su Facebook" -#: admin/PageIndex.py:295 +#: admin/PageIndex.py:233 #, fuzzy msgid "Join us on Google+" msgstr "Unisciti a noi su Facebook" -#: admin/PageIndex.py:296 +#: admin/PageIndex.py:234 msgid "Fork us on Github" msgstr "" -#: admin/PageIndex.py:297 +#: admin/PageIndex.py:235 msgid "Become a member of Cherokee group on LinkedIn" msgstr "Diventa membro del gruppo di Cherokee su LinkedIn" -#: admin/PageIndex.py:298 +#: admin/PageIndex.py:236 msgid "Chat with us at irc.freenode.net" msgstr "Chatta con noi su irc.freenode.net" -#: admin/PageIndex.py:307 +#: admin/PageIndex.py:245 #, fuzzy msgid "Shutdown Cherokee-admin" msgstr "Benvenuti in Cherokee Admin" -#: admin/PageIndex.py:309 +#: admin/PageIndex.py:247 msgid "Shut down" msgstr "" -#: admin/PageIndex.py:310 +#: admin/PageIndex.py:248 msgid "You are about to shut down this instance of Cherokee-admin" msgstr "" -#: admin/PageIndex.py:311 +#: admin/PageIndex.py:249 #, fuzzy msgid "Are you sure you want to proceed?" msgstr "Vuoi davvero eliminare?" -#: admin/PageIndex.py:314 +#: admin/PageIndex.py:252 msgid "Cherokee-admin has been shut down" msgstr "" -#: admin/PageIndex.py:316 +#: admin/PageIndex.py:254 #, fuzzy msgid "Shut down Cherokee-Admin" msgstr "Benvenuti in Cherokee Admin" -#: admin/PageIndex.py:329 admin/PageIndex.py:350 +#: admin/PageIndex.py:267 admin/PageIndex.py:288 msgid "Welcome to Cherokee Admin" msgstr "Benvenuti in Cherokee Admin" @@ -1903,7 +1937,7 @@ msgstr "Manuale" msgid "Manual configuration" msgstr "Configurazione manuale" -#: admin/PageRule.py:249 admin/PageVServer.py:158 +#: admin/PageRule.py:249 admin/PageVServer.py:162 msgid "Final" msgstr "Finale" @@ -1931,7 +1965,7 @@ msgstr "Clona" msgid "Clone Selected Behavior Rule" msgstr "Clona Regola di Condotta Selezionata" -#: admin/PageRule.py:314 admin/PageVServer.py:718 +#: admin/PageRule.py:314 admin/PageVServer.py:727 msgid "Behavior" msgstr "Comportamento" @@ -2080,7 +2114,7 @@ msgstr "Aggiungi nuova variabile" msgid "Source Usage" msgstr "Sorgenti" -#: admin/PageSource.py:253 admin/PageVServer.py:723 +#: admin/PageSource.py:253 admin/PageVServer.py:732 msgid "Virtual Server" msgstr "Server Virtuale" @@ -2135,7 +2169,7 @@ msgstr "clone selezionato Information Source" msgid "Sources Filtering" msgstr "Filtro Fonti" -#: admin/PageSources.py:35 admin/PageVServer.py:141 admin/PageVServers.py:48 +#: admin/PageSources.py:35 admin/PageVServer.py:145 admin/PageVServers.py:48 #: admin/PageVServers.py:294 msgid "Virtual Servers" msgstr "Server Virtuali" @@ -2157,24 +2191,28 @@ msgid "Virtual Server Filtering" msgstr "Filtro Server Virtuale" #: admin/PageVServer.py:44 +msgid "Reference" +msgstr "" + +#: admin/PageVServer.py:47 msgid "Nickname for the virtual server." msgstr "Nickname per il server virtuale." -#: admin/PageVServer.py:45 +#: admin/PageVServer.py:48 msgid "" "This directive points to the PEM-encoded Certificate file for the server " "(Full path to the file)" msgstr "" -"Questa direttiva punta al file Certificato codificato-PEM per il server" -"(percorso assoluto del file)" +"Questa direttiva punta al file Certificato codificato-PEM per il " +"server(percorso assoluto del file)" -#: admin/PageVServer.py:46 +#: admin/PageVServer.py:49 msgid "PEM-encoded Private Key file for the server (Full path to the file)" msgstr "" "File codificato-PEM con la chiave privata per il server (percorso assoluto " "del file)" -#: admin/PageVServer.py:47 +#: admin/PageVServer.py:50 msgid "" "File containing the trusted CA certificates, utilized for checking the " "client certificates (Full path to the file)" @@ -2182,41 +2220,38 @@ msgstr "" "Il file contenente i certificati attendibili CA, utilizzato per la verifica " "deicertificati client (percorso assoluto del file)" -#: admin/PageVServer.py:48 -#, fuzzy -msgid "" -"Ciphers that TLS/SSL is allowed to use. Reference. (Default enables " -"Forward Secrecy)." +#: admin/PageVServer.py:51 +msgid "Ciphers that TLSv1.2 and below is allowed to use." +msgstr "Cifrature che il TLS/SSL è abilitato ad usare." + +#: admin/PageVServer.py:52 +msgid "Ciphersuites that TLSv1.3 is allowed to use." msgstr "" -"Cifrature che il TLS/SSL è abilitato ad usare. Riferimenti. (Default: " -"tutti cifrature supportate dalla versione OpenSSL usata)." -#: admin/PageVServer.py:49 +#: admin/PageVServer.py:53 msgid "" "The cipher sequence that is specified by the server should have preference " "over the client preference. (Default: True)." msgstr "" -#: admin/PageVServer.py:50 +#: admin/PageVServer.py:54 msgid "" "Explicitly enable or disable serverside compression support. (Default: " "Disabled)." msgstr "" -#: admin/PageVServer.py:51 +#: admin/PageVServer.py:55 msgid "" "Explicitely sets the Diffie-Hellman parameters length. (Default: Let openssl " "choose)." msgstr "" -#: admin/PageVServer.py:52 +#: admin/PageVServer.py:56 #, fuzzy msgid "Skip, Tolerate, Accept or Require client certificates." msgstr "Salta, accetta o richiede i certificati client." -#: admin/PageVServer.py:53 +#: admin/PageVServer.py:57 msgid "" "Limit up to which depth certificates in a chain are used during the " "verification procedure (Default: 1)" @@ -2224,11 +2259,11 @@ msgstr "" "Limita entro quale profondità i certificati concatenati sono utilizzati " "durante laprocedura di verifica (Default: 1)" -#: admin/PageVServer.py:54 +#: admin/PageVServer.py:58 msgid "Allows the selection of how to generate the error responses." msgstr "Permette di selezionare come generare le risposte di errore." -#: admin/PageVServer.py:55 +#: admin/PageVServer.py:59 msgid "" "Directory inside the user home directory to use as root web directory. " "Disabled if empty." @@ -2236,21 +2271,21 @@ msgstr "" "Directory all'interno della directory home dell'utente da utilizzare come " "directory principale del web.Disabilitato se vuoto." -#: admin/PageVServer.py:56 +#: admin/PageVServer.py:60 msgid "The personal web support is currently turned on." msgstr "Il supporto web personale è attualmente attivato." -#: admin/PageVServer.py:57 +#: admin/PageVServer.py:61 msgid "Adds a new domain name. Wildcards are allowed in the domain name." msgstr "" "Aggiunge un nuovo nome di dominio. I caratteri jolly sono consentiti nel " "nome di dominio." -#: admin/PageVServer.py:58 +#: admin/PageVServer.py:62 msgid "Virtual Server root directory." msgstr "Directory principale del server virtuale." -#: admin/PageVServer.py:59 +#: admin/PageVServer.py:63 msgid "" "List of name files that will be used as directory index. Eg: index.html," "index.php." @@ -2258,48 +2293,48 @@ msgstr "" "Elenco dei file il cui nome che verrà utilizzato come indice di directory. " "Es.: index.html,index.php." -#: admin/PageVServer.py:60 +#: admin/PageVServer.py:64 msgid "The maximum size, in bytes, for POST uploads. (Default: unlimited)" msgstr "" "La dimensione massima, in byte, per upload di tipo POST. (Predefinito: " "illimitato)" -#: admin/PageVServer.py:61 +#: admin/PageVServer.py:65 msgid "Whether this virtual server is allowed to use Keep-alive (Default: yes)" msgstr "" "Se questo a server virtuale è consentito l'uso del keep-alive (Predefinito: " "si)" -#: admin/PageVServer.py:62 +#: admin/PageVServer.py:66 msgid "The Logging is currently enabled." msgstr "Il Logging è attualmente abilitato." -#: admin/PageVServer.py:63 +#: admin/PageVServer.py:67 msgid "Logging format. Apache compatible is highly recommended here." msgstr "Formato di log. Apache compatibile è altamente raccomandato qui." -#: admin/PageVServer.py:64 +#: admin/PageVServer.py:68 msgid "Back-end used to store the log accesses." msgstr "Back-end utilizzata per memorizzare gli accessi di log." -#: admin/PageVServer.py:65 +#: admin/PageVServer.py:69 msgid "Back-end used to store the log errors." msgstr "Back-end utilizzata per memorizzare gli errori di log." -#: admin/PageVServer.py:66 +#: admin/PageVServer.py:70 msgid "Back-end used to store the log accesses and errors." msgstr "Back-end utilizzata per memorizzare gli accessi di log e di errori." -#: admin/PageVServer.py:67 +#: admin/PageVServer.py:71 msgid "Full path to the file where the information will be saved." msgstr "Percorso assoluto del file in cui le informazioni verranno salvate." -#: admin/PageVServer.py:68 +#: admin/PageVServer.py:72 msgid "Path to the executable that will be invoked on each log entry." msgstr "" "Percorso del file eseguibile che viene richiamato per ogni voce di log." -#: admin/PageVServer.py:69 +#: admin/PageVServer.py:73 msgid "" "Whether the logger should read and use the X-Real-IP and X-Forwarded-For " "headers (send by reverse proxies)." @@ -2307,7 +2342,7 @@ msgstr "" "Se il logger deve leggere e utilizzare l'X-Real-IP e X-Forwarded-ForHeaders " "(inviare via proxy inverso)." -#: admin/PageVServer.py:71 +#: admin/PageVServer.py:75 msgid "" "List of IP addresses and subnets that are allowed to send X-Real-IP and X-" "Forwarded-For headers." @@ -2315,22 +2350,22 @@ msgstr "" "Lista degli indirizzi IP e sottoreti a cui è consentito inviare " "intestazioniX-Real-IP e X-Forwarded-For." -#: admin/PageVServer.py:72 +#: admin/PageVServer.py:76 msgid "" "How to support the \"Advanced Virtual Hosting\" mechanism. (Default: off)" msgstr "" "Come supportare il meccanismo \"Host Virtuale Avanzato\". (Predefinito: " "spento)" -#: admin/PageVServer.py:73 +#: admin/PageVServer.py:77 msgid "The following variables are accepted: " msgstr "" -#: admin/PageVServer.py:74 +#: admin/PageVServer.py:78 msgid "Allows the selection of domain matching method." msgstr "Permette la selezione del corrispondente metodo di dominio." -#: admin/PageVServer.py:75 +#: admin/PageVServer.py:79 msgid "" "Whether or not it should collected statistics about the traffic of this " "virtual server." @@ -2338,465 +2373,469 @@ msgstr "" "Se deve o meno raccogliere le statistiche sul traffico di questoserver " "virtuale." -#: admin/PageVServer.py:76 +#: admin/PageVServer.py:80 msgid "Time standard to use in the log file entries." msgstr "Tempo standard da utilizzare per le voci presenti nel file di log." -#: admin/PageVServer.py:77 +#: admin/PageVServer.py:81 msgid "" "Remember that only \"File Exists\" rules and \"List & Send\" handlers use " "the Directory Indexes setting." msgstr "" -#: admin/PageVServer.py:78 +#: admin/PageVServer.py:82 msgid "" "Use this nickname as an additional host name for this virtual server " "(Default: yes)" msgstr "" -#: admin/PageVServer.py:79 +#: admin/PageVServer.py:83 msgid "Enforce HTTPS by using the HTTP Strict Transport Security." msgstr "" -#: admin/PageVServer.py:80 +#: admin/PageVServer.py:84 msgid "" "How long the client's browser should remember the forced HTTPS (in seconds)." msgstr "" -#: admin/PageVServer.py:81 +#: admin/PageVServer.py:85 msgid "" "Should HSTS be used in all the subdomains of this virtual server (Default: " "yes)." msgstr "" -#: admin/PageVServer.py:83 +#: admin/PageVServer.py:87 msgid "

The 'default' virtual server matches all the domain names.

" msgstr "" "

Il server virtuale predefinito 'default' corrisponde per tutti i nomi di " "dominio.

" -#: admin/PageVServer.py:86 +#: admin/PageVServer.py:90 #, fuzzy msgid "Remote IP address" msgstr "Indirizzo IP del server LDAP." -#: admin/PageVServer.py:87 +#: admin/PageVServer.py:91 #, fuzzy msgid "Local IP address" msgstr "Il tuo indirizzo e-mail" -#: admin/PageVServer.py:88 +#: admin/PageVServer.py:92 #, fuzzy msgid "Request Protocol" msgstr "Richiesta" -#: admin/PageVServer.py:89 +#: admin/PageVServer.py:93 msgid "Transport type: http or https" msgstr "" -#: admin/PageVServer.py:90 +#: admin/PageVServer.py:94 msgid "Port of the server serving the request" msgstr "" -#: admin/PageVServer.py:91 +#: admin/PageVServer.py:95 msgid "The query string, if exists" msgstr "" -#: admin/PageVServer.py:92 +#: admin/PageVServer.py:96 msgid "First line of HTTP request" msgstr "" -#: admin/PageVServer.py:93 +#: admin/PageVServer.py:97 msgid "Response status code" msgstr "" -#: admin/PageVServer.py:94 +#: admin/PageVServer.py:98 msgid "Time: in common log format time format" msgstr "" -#: admin/PageVServer.py:95 +#: admin/PageVServer.py:99 msgid "Time: seconds since Epoch" msgstr "" -#: admin/PageVServer.py:96 +#: admin/PageVServer.py:100 msgid "Time: milliseconds since Epoch" msgstr "" -#: admin/PageVServer.py:97 +#: admin/PageVServer.py:101 #, fuzzy msgid "Remote user (authentication)" msgstr "Dominio Base per le autenticazioni del server web." -#: admin/PageVServer.py:98 +#: admin/PageVServer.py:102 msgid "URL path requested" msgstr "" -#: admin/PageVServer.py:99 +#: admin/PageVServer.py:103 msgid "URL path requested before any rewrite" msgstr "" -#: admin/PageVServer.py:100 +#: admin/PageVServer.py:104 #, fuzzy msgid "Virtual Server nick name" msgstr "Nickname del server virtuale" -#: admin/PageVServer.py:101 +#: admin/PageVServer.py:105 msgid "Requested host (Host: header)" msgstr "" -#: admin/PageVServer.py:102 +#: admin/PageVServer.py:106 msgid "Size of the response in bytes" msgstr "" -#: admin/PageVServer.py:103 +#: admin/PageVServer.py:107 msgid "'Host:' header of the request" msgstr "" -#: admin/PageVServer.py:104 +#: admin/PageVServer.py:108 msgid "'Referrer:' header of the request" msgstr "" -#: admin/PageVServer.py:105 +#: admin/PageVServer.py:109 msgid "'User-Agent:' header of the request" msgstr "" -#: admin/PageVServer.py:106 +#: admin/PageVServer.py:110 msgid "'Cookie:' header of the request" msgstr "" -#: admin/PageVServer.py:142 +#: admin/PageVServer.py:146 msgid "Loggers" msgstr "Logger" -#: admin/PageVServer.py:143 +#: admin/PageVServer.py:147 msgid "SSL cookbook" msgstr "Ricette per SSL" -#: admin/PageVServer.py:147 admin/PageVServer.py:184 +#: admin/PageVServer.py:151 admin/PageVServer.py:188 msgid "Match" msgstr "Corrisponde" -#: admin/PageVServer.py:147 +#: admin/PageVServer.py:151 msgid "Rule Match" msgstr "Regola Corrispondente" -#: admin/PageVServer.py:148 +#: admin/PageVServer.py:152 msgid "Assigned Handler" msgstr "Gestore assegnato" -#: admin/PageVServer.py:149 +#: admin/PageVServer.py:153 msgid "Auth" msgstr "Autorizza" -#: admin/PageVServer.py:150 +#: admin/PageVServer.py:154 msgid "Custom Document Root" msgstr "Documento principale personalizzato" -#: admin/PageVServer.py:150 +#: admin/PageVServer.py:154 msgid "Root" msgstr "Principale" -#: admin/PageVServer.py:151 +#: admin/PageVServer.py:155 msgid "Only HTTPS" msgstr "Solo HTTPS" -#: admin/PageVServer.py:151 +#: admin/PageVServer.py:155 msgid "Secure" msgstr "Securo" -#: admin/PageVServer.py:152 +#: admin/PageVServer.py:156 msgid "Enc" msgstr "Cod" -#: admin/PageVServer.py:152 +#: admin/PageVServer.py:156 msgid "Encoders" msgstr "Codificatori" -#: admin/PageVServer.py:153 +#: admin/PageVServer.py:157 #, fuzzy msgid "Cacheable" msgstr "Compatibile Apache" -#: admin/PageVServer.py:154 +#: admin/PageVServer.py:158 msgid "Exp" msgstr "Esp" -#: admin/PageVServer.py:155 +#: admin/PageVServer.py:159 msgid "Connection Timeout" msgstr "Timeout di connessione" -#: admin/PageVServer.py:156 +#: admin/PageVServer.py:160 msgid "Shaping" msgstr "Shaping" -#: admin/PageVServer.py:157 +#: admin/PageVServer.py:161 msgid "Log" msgstr "Log" -#: admin/PageVServer.py:157 +#: admin/PageVServer.py:161 msgid "Logging Enabled" msgstr "Logging abilitato" -#: admin/PageVServer.py:158 +#: admin/PageVServer.py:162 msgid "Rule is Final" msgstr "La regola è definitiva" -#: admin/PageVServer.py:184 +#: admin/PageVServer.py:188 #, fuzzy msgid "Match nickname" msgstr "Nickname Corrispondente" -#: admin/PageVServer.py:188 admin/PageVServer.py:717 +#: admin/PageVServer.py:192 admin/PageVServer.py:726 msgid "Host Match" msgstr "Host Corrisponde" -#: admin/PageVServer.py:218 admin/PageVServer.py:234 admin/PageVServer.py:258 -#: admin/PageVServer.py:485 admin/PageVServer.py:519 -#: admin/plugins/method.py:99 admin/plugins/method.py:109 +#: admin/PageVServer.py:222 admin/PageVServer.py:238 admin/PageVServer.py:262 +#: admin/PageVServer.py:489 admin/PageVServer.py:523 admin/plugins/method.py:99 +#: admin/plugins/method.py:109 msgid "Method" msgstr "Metodo" -#: admin/PageVServer.py:226 admin/PageVServer.py:242 +#: admin/PageVServer.py:230 admin/PageVServer.py:246 #, fuzzy msgid "Remove criteria" msgstr "Servizi Remoti" -#: admin/PageVServer.py:260 +#: admin/PageVServer.py:264 #, fuzzy msgid "How to match this Virtual Server" msgstr "Nuovo Server Virtuale" -#: admin/PageVServer.py:267 +#: admin/PageVServer.py:271 msgid "Add an additional matching criteria" msgstr "" -#: admin/PageVServer.py:358 +#: admin/PageVServer.py:362 msgid "Behavior Rules" msgstr "Regole di comportamento" -#: admin/PageVServer.py:367 +#: admin/PageVServer.py:371 msgid "Rule Management" msgstr "Gestione Regola" -#: admin/PageVServer.py:393 +#: admin/PageVServer.py:397 msgid "Only accept Secure Connections" msgstr "Accetts solo connessioni sicure" -#: admin/PageVServer.py:398 +#: admin/PageVServer.py:402 msgid "Encoding enabled" msgstr "Codifica abilitata" -#: admin/PageVServer.py:404 +#: admin/PageVServer.py:408 msgid "no" msgstr "no" -#: admin/PageVServer.py:415 +#: admin/PageVServer.py:419 msgid " seconds" msgstr " secondi" -#: admin/PageVServer.py:420 +#: admin/PageVServer.py:424 msgid " bytes per second" msgstr " byte al secondo" -#: admin/PageVServer.py:425 +#: admin/PageVServer.py:429 msgid "Logging enabled for this rule" msgstr "Accesso consentito per questa regola" -#: admin/PageVServer.py:430 +#: admin/PageVServer.py:434 msgid "Prevents further rule evaluation" msgstr "Impedisce ulteriori valutazioni per la regola" -#: admin/PageVServer.py:435 +#: admin/PageVServer.py:439 msgid "Content can be cached" msgstr "" -#: admin/PageVServer.py:438 +#: admin/PageVServer.py:442 msgid "Forbids content caching" msgstr "" -#: admin/PageVServer.py:455 +#: admin/PageVServer.py:459 msgid "Virtual Server nickname" msgstr "Nickname del server virtuale" -#: admin/PageVServer.py:457 +#: admin/PageVServer.py:461 msgid "Server ID" msgstr "Server ID" -#: admin/PageVServer.py:463 +#: admin/PageVServer.py:467 msgid "Directory Indexes" msgstr "Directory Indici" -#: admin/PageVServer.py:465 admin/plugins/fullpath.py:119 +#: admin/PageVServer.py:469 admin/plugins/fullpath.py:119 msgid "Paths" msgstr "Percorsi" -#: admin/PageVServer.py:471 +#: admin/PageVServer.py:475 msgid "Neither are in use at the moment." msgstr "" -#: admin/PageVServer.py:476 +#: admin/PageVServer.py:480 msgid "Keep-alive" msgstr "Keep-alive" -#: admin/PageVServer.py:477 +#: admin/PageVServer.py:481 msgid "Max Upload Size" msgstr "Massima Dimensione Upload" -#: admin/PageVServer.py:487 admin/plugins/evhost.py:33 +#: admin/PageVServer.py:491 admin/plugins/evhost.py:33 msgid "Advanced Virtual Hosting" msgstr "Hosting Virtuale Avanzato" -#: admin/PageVServer.py:521 +#: admin/PageVServer.py:525 msgid "Error Handling hook" msgstr "Innesco gestione degli errori" -#: admin/PageVServer.py:532 admin/consts.py:233 admin/consts.py:250 +#: admin/PageVServer.py:536 admin/consts.py:232 admin/consts.py:249 msgid "Disabled" msgstr "Disattivato" -#: admin/PageVServer.py:536 +#: admin/PageVServer.py:540 msgid "Write errors to" msgstr "Scrivi errori in" -#: admin/PageVServer.py:540 admin/PageVServer.py:579 +#: admin/PageVServer.py:544 admin/PageVServer.py:583 msgid "Filename" msgstr "NomeFile" -#: admin/PageVServer.py:542 admin/PageVServer.py:582 +#: admin/PageVServer.py:546 admin/PageVServer.py:586 msgid "Command" msgstr "Comando" -#: admin/PageVServer.py:548 +#: admin/PageVServer.py:552 msgid "Error Logging" msgstr "Errore di Logging" -#: admin/PageVServer.py:559 +#: admin/PageVServer.py:563 msgid "Format" msgstr "Formato" -#: admin/PageVServer.py:566 +#: admin/PageVServer.py:570 msgid "Write accesses to" msgstr "Scrivi accessi in" -#: admin/PageVServer.py:589 +#: admin/PageVServer.py:593 #, fuzzy msgid "Hide" msgstr "Intestazione" -#: admin/PageVServer.py:589 +#: admin/PageVServer.py:593 #, fuzzy msgid "Show macros" msgstr "Mostra Gruppo" -#: admin/PageVServer.py:598 +#: admin/PageVServer.py:602 msgid "Template: " msgstr "Modello: " -#: admin/PageVServer.py:600 +#: admin/PageVServer.py:604 msgid "Access Logging" msgstr "Registra Accessi" -#: admin/PageVServer.py:606 +#: admin/PageVServer.py:610 msgid "Time standard" msgstr "Tempo standard" -#: admin/PageVServer.py:607 admin/PageVServer.py:687 admin/consts.py:228 +#: admin/PageVServer.py:611 admin/PageVServer.py:696 admin/consts.py:227 msgid "Accept" msgstr "Accetta" -#: admin/PageVServer.py:607 +#: admin/PageVServer.py:611 msgid "Accept Forwarded IPs" msgstr "Accetta IP Inoltrati" -#: admin/PageVServer.py:610 +#: admin/PageVServer.py:614 msgid "Do not check" msgstr "Non controllare" -#: admin/PageVServer.py:619 +#: admin/PageVServer.py:623 msgid "Logging Options" msgstr "Opzioni di Logging" -#: admin/PageVServer.py:655 admin/wizards/ssl_test.py:136 +#: admin/PageVServer.py:659 admin/wizards/ssl_test.py:136 msgid "Certificate" msgstr "Certificato" -#: admin/PageVServer.py:656 +#: admin/PageVServer.py:660 msgid "Certificate key" msgstr "Chiave Certificato" -#: admin/PageVServer.py:661 +#: admin/PageVServer.py:665 msgid "Required SSL/TLS Values" msgstr "Valori SSL/TLS Richiesti " -#: admin/PageVServer.py:666 +#: admin/PageVServer.py:674 +msgid "Ciphersuites" +msgstr "" + +#: admin/PageVServer.py:675 msgid "Ciphers" msgstr "Cifrature" -#: admin/PageVServer.py:667 +#: admin/PageVServer.py:676 #, fuzzy msgid "Prefer" msgstr "Prefisso" -#: admin/PageVServer.py:667 +#: admin/PageVServer.py:676 #, fuzzy msgid "Server Preference" msgstr "Traffico Server" -#: admin/PageVServer.py:668 +#: admin/PageVServer.py:677 msgid "Client Certs. Request" msgstr "Richiesta Cert. Client" -#: admin/PageVServer.py:669 +#: admin/PageVServer.py:678 msgid "Compression" msgstr "" -#: admin/PageVServer.py:670 +#: admin/PageVServer.py:679 msgid "DH length" msgstr "" -#: admin/PageVServer.py:673 +#: admin/PageVServer.py:682 msgid "CA List" msgstr "Lista CA" -#: admin/PageVServer.py:676 +#: admin/PageVServer.py:685 msgid "Verify Depth" msgstr "Verifica profondità" -#: admin/PageVServer.py:682 +#: admin/PageVServer.py:691 msgid "Advanced Options" msgstr "Opzioni Avanzate" -#: admin/PageVServer.py:687 +#: admin/PageVServer.py:696 #, fuzzy msgid "Enable HSTS" msgstr "Attiva" -#: admin/PageVServer.py:690 +#: admin/PageVServer.py:699 msgid "HSTS Max-Age" msgstr "" -#: admin/PageVServer.py:690 +#: admin/PageVServer.py:699 msgid "One year" msgstr "" -#: admin/PageVServer.py:691 +#: admin/PageVServer.py:700 #, fuzzy msgid "Include Subdomains" msgstr "Invia i tuoi domini" -#: admin/PageVServer.py:691 +#: admin/PageVServer.py:700 msgid "Include all" msgstr "" -#: admin/PageVServer.py:697 +#: admin/PageVServer.py:706 msgid "HTTP Strict Transport Security (HSTS)" msgstr "" -#: admin/PageVServer.py:716 +#: admin/PageVServer.py:725 msgid "Basics" msgstr "Base" -#: admin/PageVServer.py:719 +#: admin/PageVServer.py:728 msgid "Error Handler" msgstr "Gestore Errore" @@ -3100,8 +3139,8 @@ msgstr "Prodotto + Piattaforma" msgid "Full Server string" msgstr "Stringa intera Server" -#: admin/consts.py:51 admin/consts.py:80 admin/consts.py:97 -#: admin/consts.py:111 admin/plugins/mysql.py:45 +#: admin/consts.py:51 admin/consts.py:80 admin/consts.py:97 admin/consts.py:111 +#: admin/plugins/mysql.py:45 msgid "None" msgstr "Nessuno" @@ -3301,191 +3340,191 @@ msgstr "Dinamico" msgid "Automatic" msgstr "Automatico" -#: admin/consts.py:145 admin/plugins/error_redir.py:35 +#: admin/consts.py:144 admin/plugins/error_redir.py:35 msgid "External" msgstr "Esterno" -#: admin/consts.py:146 admin/plugins/error_redir.py:34 +#: admin/consts.py:145 admin/plugins/error_redir.py:34 msgid "Internal" msgstr "Interno" -#: admin/consts.py:189 admin/plugins/header.py:116 admin/plugins/proxy.py:94 +#: admin/consts.py:188 admin/plugins/header.py:118 admin/plugins/proxy.py:94 #: admin/plugins/proxy.py:144 admin/plugins/redir.py:76 #: admin/plugins/redir.py:106 admin/plugins/request.py:31 #: admin/plugins/url_arg.py:76 admin/plugins/url_arg.py:95 msgid "Regular Expression" msgstr "Espressione regolare" -#: admin/consts.py:191 +#: admin/consts.py:190 msgid "File Exists" msgstr "Il file esiste" -#: admin/consts.py:192 +#: admin/consts.py:191 msgid "HTTP Method" msgstr "Metodo HTTP" -#: admin/consts.py:193 admin/plugins/bind.py:76 admin/plugins/bind.py:129 +#: admin/consts.py:192 admin/plugins/bind.py:76 admin/plugins/bind.py:129 msgid "Incoming IP/Port" msgstr "IP/Porta entrante" -#: admin/consts.py:194 +#: admin/consts.py:193 msgid "SSL / TLS" msgstr "SSL / TLS" -#: admin/consts.py:195 admin/plugins/fullpath.py:66 +#: admin/consts.py:194 admin/plugins/fullpath.py:66 #: admin/plugins/fullpath.py:101 msgid "Full Path" msgstr "Path Completo" -#: admin/consts.py:196 admin/plugins/from.py:71 +#: admin/consts.py:195 admin/plugins/from.py:71 msgid "Connected from" msgstr "Connesso da" -#: admin/consts.py:197 +#: admin/consts.py:196 msgid "URL Argument" msgstr "Argomento per URL" -#: admin/consts.py:198 +#: admin/consts.py:197 msgid "GeoIP" msgstr "GeoIP" -#: admin/consts.py:202 +#: admin/consts.py:201 msgid "Match Nickname" msgstr "Nickname Corrispondente" -#: admin/consts.py:203 +#: admin/consts.py:202 msgid "Wildcards" msgstr "Jolly" -#: admin/consts.py:205 +#: admin/consts.py:204 msgid "Server IP" msgstr "IP del Server" -#: admin/consts.py:209 admin/consts.py:255 +#: admin/consts.py:208 admin/consts.py:254 msgid "Not set" msgstr "Non impostato" -#: admin/consts.py:210 +#: admin/consts.py:209 msgid "Already expired on 1970" msgstr "Già scaduto nel 1970" -#: admin/consts.py:211 +#: admin/consts.py:210 msgid "Do not expire until 2038" msgstr "Non scadono fino al 2038" -#: admin/consts.py:212 +#: admin/consts.py:211 msgid "Custom value" msgstr "Valore personalizzato" -#: admin/consts.py:216 +#: admin/consts.py:215 msgid "No TLS/SSL" msgstr "Nessun TLS/SSL" -#: admin/consts.py:217 +#: admin/consts.py:216 msgid "OpenSSL / libssl" msgstr "OpenSSL / libssl" -#: admin/consts.py:221 admin/util.py:91 +#: admin/consts.py:220 admin/util.py:91 msgid "Off" msgstr "Off" -#: admin/consts.py:222 +#: admin/consts.py:221 msgid "Enhanced Virtual Hosting" msgstr "Hostin Virtuale Migliorato" -#: admin/consts.py:226 +#: admin/consts.py:225 msgid "Skip" msgstr "Salta" -#: admin/consts.py:227 +#: admin/consts.py:226 msgid "Tolerate" msgstr "" -#: admin/consts.py:229 +#: admin/consts.py:228 msgid "Require" msgstr "Richiedi" -#: admin/consts.py:234 +#: admin/consts.py:233 msgid "RRDtool graphs" msgstr "Grafici RRDtool" -#: admin/consts.py:238 +#: admin/consts.py:237 msgid "Local time" msgstr "Ora locale" -#: admin/consts.py:239 +#: admin/consts.py:238 msgid "UTC: Coordinated Universal Time" msgstr "UTC: Coordinated Universal Time" -#: admin/consts.py:243 +#: admin/consts.py:242 msgid "JSON" msgstr "JSON" -#: admin/consts.py:244 +#: admin/consts.py:243 msgid "Python" msgstr "Python" -#: admin/consts.py:245 admin/wizards/List.py:91 +#: admin/consts.py:244 admin/wizards/List.py:91 msgid "PHP" msgstr "PHP" -#: admin/consts.py:246 +#: admin/consts.py:245 msgid "Ruby" msgstr "Ruby" -#: admin/consts.py:251 +#: admin/consts.py:250 msgid "POST tracker" msgstr "Rintraccia POST" -#: admin/consts.py:256 +#: admin/consts.py:255 msgid "Public" msgstr "Pubblico" -#: admin/consts.py:257 +#: admin/consts.py:256 msgid "Private" msgstr "Privato" -#: admin/consts.py:258 +#: admin/consts.py:257 msgid "No Cache" msgstr "Nessuna Cache" -#: admin/consts.py:263 +#: admin/consts.py:262 msgid "0 - No compression" msgstr "" -#: admin/consts.py:264 +#: admin/consts.py:263 msgid "1" msgstr "" -#: admin/consts.py:265 +#: admin/consts.py:264 msgid "2" msgstr "" -#: admin/consts.py:266 +#: admin/consts.py:265 msgid "3" msgstr "" -#: admin/consts.py:267 +#: admin/consts.py:266 msgid "4" msgstr "" -#: admin/consts.py:268 +#: admin/consts.py:267 msgid "5" msgstr "" -#: admin/consts.py:269 +#: admin/consts.py:268 msgid "6" msgstr "" -#: admin/consts.py:270 +#: admin/consts.py:269 msgid "7" msgstr "" -#: admin/consts.py:271 +#: admin/consts.py:270 msgid "8" msgstr "" -#: admin/consts.py:272 +#: admin/consts.py:271 msgid "9 - Max compression" msgstr "" @@ -3665,66 +3704,66 @@ msgstr "Lista dei file che non devono essere elencati." msgid "Only listing" msgstr "Solo lista" -#: admin/plugins/dirlist.py:49 admin/plugins/dirlist.py:50 #: admin/plugins/dirlist.py:51 admin/plugins/dirlist.py:52 #: admin/plugins/dirlist.py:53 admin/plugins/dirlist.py:54 +#: admin/plugins/dirlist.py:55 admin/plugins/dirlist.py:56 #: admin/plugins/redir.py:105 msgid "Show" msgstr "Mostra" -#: admin/plugins/dirlist.py:49 +#: admin/plugins/dirlist.py:51 msgid "Show Size" msgstr "Mostra Formato" -#: admin/plugins/dirlist.py:50 +#: admin/plugins/dirlist.py:52 msgid "Show Date" msgstr "Visualizza Data" -#: admin/plugins/dirlist.py:51 +#: admin/plugins/dirlist.py:53 msgid "Show User" msgstr "Mostra Utente" -#: admin/plugins/dirlist.py:52 +#: admin/plugins/dirlist.py:54 msgid "Show Group" msgstr "Mostra Gruppo" -#: admin/plugins/dirlist.py:53 +#: admin/plugins/dirlist.py:55 msgid "Show Backup files" msgstr "Mostra i file di backup" -#: admin/plugins/dirlist.py:54 +#: admin/plugins/dirlist.py:56 msgid "Show Hidden files" msgstr "Visualizza File nascosti" -#: admin/plugins/dirlist.py:55 +#: admin/plugins/dirlist.py:58 admin/plugins/file.py:44 msgid "Allow symbolic links" msgstr "Consenti collegamenti simbolici" -#: admin/plugins/dirlist.py:56 +#: admin/plugins/dirlist.py:59 msgid "Redirect symbolic links" msgstr "Ridireziona collegamenti simbolici" -#: admin/plugins/dirlist.py:60 +#: admin/plugins/dirlist.py:63 msgid "Listing" msgstr "Lista" -#: admin/plugins/dirlist.py:65 +#: admin/plugins/dirlist.py:68 msgid "Theme" msgstr "Tema" -#: admin/plugins/dirlist.py:66 +#: admin/plugins/dirlist.py:69 msgid "Icons dir" msgstr "Directory Icone" -#: admin/plugins/dirlist.py:67 +#: admin/plugins/dirlist.py:70 msgid "Notice files" msgstr "File di Avviso" -#: admin/plugins/dirlist.py:68 +#: admin/plugins/dirlist.py:71 msgid "Hidden files" msgstr "File nascosti" -#: admin/plugins/dirlist.py:72 +#: admin/plugins/dirlist.py:75 msgid "Theming" msgstr "Temi" @@ -3866,7 +3905,7 @@ msgstr "FastCGI specifico" msgid "Enables an internal I/O cache that improves performance." msgstr "Abilita una cache di I/O interno che migliora le prestazioni." -#: admin/plugins/file.py:45 +#: admin/plugins/file.py:49 msgid "File Sending" msgstr "Invio File" @@ -3953,25 +3992,25 @@ msgid "" "header entry." msgstr "" -#: admin/plugins/header.py:65 +#: admin/plugins/header.py:67 msgid "Matches a Regular Expression" msgstr "Corrisponde una Espressione Regolare" -#: admin/plugins/header.py:66 +#: admin/plugins/header.py:68 msgid "Is Provided" msgstr "È fornito" -#: admin/plugins/header.py:104 +#: admin/plugins/header.py:106 #, fuzzy msgid "Full header" msgstr "NomeFile" -#: admin/plugins/header.py:107 +#: admin/plugins/header.py:109 #, fuzzy msgid "Complete Header" msgstr "Nascondi intestazione" -#: admin/plugins/header.py:154 +#: admin/plugins/header.py:156 #, fuzzy, python-format msgid "Header %(header)s is provided" msgstr "L'intestazione %s viene fornita" @@ -4096,7 +4135,7 @@ msgid "Database name containing the user/password pair list." msgstr "Nome del database contenente la lista di coppie utente/password." #: admin/plugins/mysql.py:41 -#, fuzzy +#, fuzzy, python-brace-format msgid "" "SQL command to execute. ${user} is replaced with the user name, and " "${passwd} is replaced with the user supplied password." @@ -4538,21 +4577,17 @@ msgstr "" msgid "Accepted Domains" msgstr "Domini accettati" -#: admin/server.py:68 +#: admin/server.py:70 #, python-format msgid "Server %(version)s running.. PID=%(pid)d Port=%(scgi_port)s" msgstr "Il server %(version)s è in esecuzione.. PID=%(pid)d Port=%(scgi_port)s" -#: admin/server.py:70 +#: admin/server.py:72 #, python-format msgid "Server %(version)s running.. PID=%(pid)d Socket=%(scgi_port)s" msgstr "" "Il server %(version)s è in esecuzione.. PID=%(pid)d Socket=%(scgi_port)s" -#: admin/server.py:144 -msgid "Incorrect parameters: PORT CONFIG_FILE" -msgstr "Parametri errati: PORT CONFIG_FILE" - #: admin/util.py:91 msgid "On" msgstr "Acceso" @@ -4951,18 +4986,16 @@ msgstr "Porta che esegue il servizio in detto host. (Esempio: 8080)" #: admin/wizards/alfresco.py:45 admin/wizards/coldfusion.py:46 #: admin/wizards/concrete5.py:47 admin/wizards/django.py:44 #: admin/wizards/glassfish.py:45 admin/wizards/mailman.py:48 -#: admin/wizards/mono.py:46 admin/wizards/php.py:43 -#: admin/wizards/symfony.py:51 admin/wizards/uwsgi.py:61 -#: admin/wizards/zend.py:47 +#: admin/wizards/mono.py:46 admin/wizards/php.py:43 admin/wizards/symfony.py:51 +#: admin/wizards/uwsgi.py:61 admin/wizards/zend.py:47 msgid "Host name of the virtual server that is about to be created." msgstr "Nome host del server virtuale che sta per essere creato." #: admin/wizards/alfresco.py:46 admin/wizards/coldfusion.py:45 #: admin/wizards/concrete5.py:46 admin/wizards/django.py:43 #: admin/wizards/glassfish.py:46 admin/wizards/mailman.py:47 -#: admin/wizards/mono.py:45 admin/wizards/php.py:42 -#: admin/wizards/symfony.py:50 admin/wizards/uwsgi.py:60 -#: admin/wizards/zend.py:46 +#: admin/wizards/mono.py:45 admin/wizards/php.py:42 admin/wizards/symfony.py:50 +#: admin/wizards/uwsgi.py:60 admin/wizards/zend.py:46 msgid "New Virtual Server Details" msgstr "Dettagli del Nuovo Server Virtuale" @@ -5716,8 +5749,8 @@ msgstr "" #, fuzzy msgid "Full path to the PEM-encoded Certificate file for the server." msgstr "" -"Questa direttiva punta al file Certificato codificato-PEM per il server" -"(percorso assoluto del file)" +"Questa direttiva punta al file Certificato codificato-PEM per il " +"server(percorso assoluto del file)" #: admin/wizards/ssl_test.py:39 #, fuzzy @@ -5954,3 +5987,50 @@ msgstr "Non sembra una directory sorgente Zend." msgid "Web directory where you want Zend to be accessible. (Example: /zend)" msgstr "" "Directory Web in cui si desidera Zend sia accessibile. (Esempio: /zend)" + +#~ msgid "Allow SSL v2" +#~ msgstr "Consenti SSL v2" + +#, fuzzy +#~ msgid "Disable %s" +#~ msgstr "Disabilita" + +#~ msgid "Incorrect parameters: PORT CONFIG_FILE" +#~ msgstr "Parametri errati: PORT CONFIG_FILE" + +#, fuzzy +#~ msgid "Mailing List Subscription" +#~ msgstr "Iscrizione alla mailing list" + +#~ msgid "Optionally provide your name" +#~ msgstr "Opzionalmente fornisci il tuo nome" + +#~ msgid "Purchase commercial support" +#~ msgstr "Acquista supporto commerciale" + +#~ msgid "Subscribe" +#~ msgstr "Iscriviti" + +#, fuzzy +#~ msgid "" +#~ "There are a number of Community Mailing Lists\n" +#~ "available for you to subscribe. You can subscribe the General Discussion\n" +#~ "mailing list from this interface. There is where most of the discussions\n" +#~ "take place." +#~ msgstr "" +#~ "C'è un certo numero di Comunità Mailing " +#~ "Lists\n" +#~ "a vostra disposizione per iscriverti. Puoi iscriverti alla mailing list\n" +#~ "Discussione Generale da questa interfaccia. È dove la maggior parte delle " +#~ "discussioni\n" +#~ "hanno luogo." + +#~ msgid "You will be sent an email requesting confirmation" +#~ msgstr "Ti verrà inviata una mail con richiesta di conferma" + +#~ msgid "Your email address" +#~ msgstr "Il tuo indirizzo e-mail" + +#~ msgid "Your name" +#~ msgstr "Il tuo nome" diff --git a/po/admin/ja.po b/po/admin/ja.po index b1226a9e6..a63cd1d89 100644 --- a/po/admin/ja.po +++ b/po/admin/ja.po @@ -5,13 +5,13 @@ # msgid "" msgstr "" -"Project-Id-Version: cherokee 1.0\n" -"Report-Msgid-Bugs-To: http://bugs.cherokee-project.com/\n" -"POT-Creation-Date: 2014-01-04 00:54+0100\n" +"Project-Id-Version: cherokee 1.2.104\n" +"Report-Msgid-Bugs-To: https://github.com/cherokee/webserver/issues\n" +"POT-Creation-Date: 2021-03-26 19:04+0100\n" "PO-Revision-Date: 2011-10-13 22:31+0900\n" "Last-Translator: Logue \n" "Language-Team: Logue \n" -"Language: \n" +"Language: ja\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -103,7 +103,7 @@ msgstr "ソース情報" msgid "Assign Information Sources" msgstr "ソース情報" -#: admin/Balancer.py:136 admin/PageIndex.py:204 admin/PageRule.py:112 +#: admin/Balancer.py:136 admin/PageIndex.py:182 admin/PageRule.py:112 #: admin/plugins/bind.py:69 admin/plugins/bind.py:121 #: admin/plugins/custom_error.py:41 admin/plugins/method.py:31 msgid "Choose" @@ -138,17 +138,17 @@ msgstr "以下へ設定をコピーすることができませんでした:" #: admin/CTK/CTK/Druid.py:216 admin/CTK/CTK/Druid.py:224 #: admin/CTK/CTK/Druid.py:232 admin/CTK/CTK/Druid.py:238 admin/Icons.py:362 #: admin/Mime.py:110 admin/PageGeneral.py:289 admin/PageGeneral.py:317 -#: admin/PageIndex.py:232 admin/PageIndex.py:308 admin/PageRule.py:225 -#: admin/PageRule.py:276 admin/PageRule.py:302 admin/PageSource.py:225 -#: admin/PageSource.py:411 admin/PageSource.py:428 admin/PageSource.py:442 -#: admin/PageVServers.py:215 admin/PageVServers.py:252 -#: admin/PageVServers.py:281 admin/plugins/redir.py:120 +#: admin/PageIndex.py:246 admin/PageRule.py:225 admin/PageRule.py:276 +#: admin/PageRule.py:302 admin/PageSource.py:225 admin/PageSource.py:411 +#: admin/PageSource.py:428 admin/PageSource.py:442 admin/PageVServers.py:215 +#: admin/PageVServers.py:252 admin/PageVServers.py:281 +#: admin/plugins/redir.py:120 msgid "Cancel" msgstr "キャンセル" #: admin/CTK/CTK/Dialog.py:165 admin/CTK/CTK/Dialog.py:272 #: admin/CTK/CTK/Druid.py:243 admin/PageException.py:89 -#: admin/PageException.py:93 admin/PageGeneral.py:283 admin/PageIndex.py:277 +#: admin/PageException.py:93 admin/PageGeneral.py:283 admin/PageIndex.py:215 #: admin/PageSource.py:402 admin/plugins/error_redir.py:110 msgid "Close" msgstr "閉じる" @@ -186,14 +186,14 @@ msgstr "読込中" #: admin/CTK/CTK/Image.py:99 admin/CgiBase.py:69 admin/CgiBase.py:71 #: admin/CgiBase.py:124 admin/CgiBase.py:125 admin/CgiBase.py:126 #: admin/CgiBase.py:127 admin/CgiBase.py:128 admin/Graph.py:125 -#: admin/PageAdvanced.py:150 admin/PageEntry.py:150 admin/PageEntry.py:159 -#: admin/PageGeneral.py:193 admin/PageSource.py:296 -#: admin/plugins/dirlist.py:56 admin/plugins/exists.py:72 -#: admin/plugins/exists.py:77 admin/plugins/exists.py:78 -#: admin/plugins/exists.py:79 admin/plugins/exists.py:109 -#: admin/plugins/exists.py:115 admin/plugins/exists.py:116 -#: admin/plugins/exists.py:117 admin/plugins/file.py:40 -#: admin/plugins/ldap.py:53 admin/plugins/streaming.py:43 +#: admin/PageAdvanced.py:198 admin/PageEntry.py:150 admin/PageEntry.py:159 +#: admin/PageGeneral.py:193 admin/PageSource.py:296 admin/plugins/dirlist.py:59 +#: admin/plugins/exists.py:72 admin/plugins/exists.py:77 +#: admin/plugins/exists.py:78 admin/plugins/exists.py:79 +#: admin/plugins/exists.py:109 admin/plugins/exists.py:115 +#: admin/plugins/exists.py:116 admin/plugins/exists.py:117 +#: admin/plugins/file.py:42 admin/plugins/ldap.py:53 +#: admin/plugins/streaming.py:43 msgid "Enabled" msgstr "有効" @@ -210,11 +210,12 @@ msgstr "前へ" msgid "Optional" msgstr "オプション" -#: admin/CTK/CTK/ToggleButton.py:154 +#: admin/CTK/CTK/ToggleButton.py:154 admin/PageAdvanced.py:245 +#: admin/PageAdvanced.py:258 msgid "Disable" msgstr "無効" -#: admin/CTK/CTK/ToggleButton.py:155 admin/PageVServer.py:669 +#: admin/CTK/CTK/ToggleButton.py:155 admin/PageVServer.py:678 #: admin/wizards/flcache.py:157 msgid "Enable" msgstr "有効" @@ -255,7 +256,7 @@ msgid "" "headers and use it in REMOTE_ADDR." msgstr "" -#: admin/CgiBase.py:40 admin/PageVServer.py:70 +#: admin/CgiBase.py:40 admin/PageVServer.py:74 msgid "" "Accept all the X-Real-IP and X-Forwarded-For headers. WARNING: Turn it on " "only if you are centain of what you are doing." @@ -271,11 +272,11 @@ msgstr "" msgid "Read X-Real-IP" msgstr "X-Real-IPヘッダを読む" -#: admin/CgiBase.py:71 admin/PageVServer.py:610 +#: admin/CgiBase.py:71 admin/PageVServer.py:614 msgid "Don't check origin" msgstr "参照元をチェックしない" -#: admin/CgiBase.py:73 admin/PageVServer.py:613 +#: admin/CgiBase.py:73 admin/PageVServer.py:617 msgid "Accept from Hosts" msgstr "ホストから許可" @@ -317,7 +318,7 @@ msgid "Allow X-Sendfile" msgstr "X-Sendfileヘッダを許可" #: admin/CgiBase.py:128 admin/plugins/exists.py:77 admin/plugins/exists.py:115 -#: admin/plugins/file.py:40 +#: admin/plugins/file.py:42 msgid "Use I/O cache" msgstr "I/Oキャッシュを使用" @@ -408,7 +409,7 @@ msgid "" msgstr "" #: admin/Graph.py:118 admin/PageEntry.py:538 admin/PageSource.py:257 -#: admin/PageStatus.py:70 admin/PageVServer.py:731 admin/PageVServers.py:210 +#: admin/PageStatus.py:70 admin/PageVServer.py:740 admin/PageVServers.py:210 msgid "Unknown" msgstr "不明" @@ -420,7 +421,7 @@ msgstr "" msgid "Allows to specify an alternative Document Root path." msgstr "" -#: admin/Handler.py:43 admin/PageEntry.py:523 admin/PageVServer.py:462 +#: admin/Handler.py:43 admin/PageEntry.py:523 admin/PageVServer.py:466 #: admin/PageVServers.py:128 admin/wizards/django.py:191 #: admin/wizards/mono.py:199 admin/wizards/php.py:39 admin/wizards/php.py:342 #: admin/wizards/uwsgi.py:267 @@ -432,7 +433,7 @@ msgid "Extension List" msgstr "拡張子一覧" #: admin/Icons.py:129 admin/Icons.py:328 admin/Mime.py:96 admin/Mime.py:131 -#: admin/consts.py:188 admin/plugins/extensions.py:61 +#: admin/consts.py:187 admin/plugins/extensions.py:61 #: admin/wizards/flcache.py:141 msgid "Extensions" msgstr "拡張子" @@ -453,12 +454,13 @@ msgstr "ファイル" msgid "Add New File" msgstr "新しいファイルを追加" -#: admin/Icons.py:197 admin/Icons.py:329 admin/Rule.py:174 admin/consts.py:42 -#: admin/consts.py:128 admin/consts.py:262 +#: admin/Icons.py:197 admin/Icons.py:329 admin/PageVServer.py:674 +#: admin/PageVServer.py:675 admin/Rule.py:174 admin/consts.py:42 +#: admin/consts.py:128 admin/consts.py:261 msgid "Default" msgstr "デフォルト" -#: admin/Icons.py:198 admin/Icons.py:330 admin/consts.py:187 +#: admin/Icons.py:198 admin/Icons.py:330 admin/consts.py:186 #: admin/plugins/directory.py:31 msgid "Directory" msgstr "ディレクトリ" @@ -471,7 +473,7 @@ msgstr "" msgid "Modify" msgstr "修正" -#: admin/Icons.py:214 admin/PageAdvanced.py:168 admin/PageAdvanced.py:192 +#: admin/Icons.py:214 admin/PageAdvanced.py:216 admin/PageAdvanced.py:316 msgid "Special Files" msgstr "特別なファイル" @@ -578,7 +580,7 @@ msgstr "保存" msgid "Home" msgstr "ホーム" -#: admin/Page.py:155 admin/PageAdvanced.py:150 admin/PageIndex.py:84 +#: admin/Page.py:155 admin/PageAdvanced.py:198 admin/PageIndex.py:62 #: admin/PageStatus.py:40 admin/PageStatus.py:112 msgid "Status" msgstr "ステータス" @@ -595,7 +597,7 @@ msgstr "仮想サーバー" msgid "Sources" msgstr "ソース" -#: admin/Page.py:159 admin/PageAdvanced.py:97 admin/PageAdvanced.py:198 +#: admin/Page.py:159 admin/PageAdvanced.py:145 admin/PageAdvanced.py:322 msgid "Advanced" msgstr "拡張" @@ -607,7 +609,19 @@ msgstr "ヘルプ" msgid "Updating..." msgstr "更新中…" -#: admin/PageAdvanced.py:64 +#: admin/PageAdvanced.py:56 +msgid "" +"

WARNING: The SSL/TLS back-end supports more recent\n" +"versions of TLS protocols, which are not recognized by Cherokee. Please " +"check\n" +"for latest Cherokee updates or report this issue. As a temporary workaround " +"please\n" +"set 'Max. TLS protocol version' to the maximum TLS protocol version " +"supported by\n" +"Cherokee.

Following unknown TLS protocols have been found:" +msgstr "" + +#: admin/PageAdvanced.py:94 msgid "" "

WARNING: This section contains advanced\n" "configuration parameters. Changing things is not recommended unless\n" @@ -617,267 +631,328 @@ msgstr "" "もしも、どういうことをするのかわからない場合は、絶対にいじらないで\n" "ください。

" -#: admin/PageAdvanced.py:68 +#: admin/PageAdvanced.py:98 msgid "Defines which thread policy the OS should apply to the server." msgstr "" -#: admin/PageAdvanced.py:69 +#: admin/PageAdvanced.py:99 msgid "If empty, Cherokee will calculate a default number." msgstr "" -#: admin/PageAdvanced.py:70 +#: admin/PageAdvanced.py:100 msgid "" "It defines how many file descriptors the server should handle. Default is " "the number showed by ulimit -n" msgstr "" -#: admin/PageAdvanced.py:71 +#: admin/PageAdvanced.py:101 msgid "Allows to choose the internal file descriptor polling method." msgstr "" -#: admin/PageAdvanced.py:72 +#: admin/PageAdvanced.py:102 msgid "Minimum size of a file to use sendfile(). Default: 32768 Bytes." msgstr "" -#: admin/PageAdvanced.py:73 +#: admin/PageAdvanced.py:103 msgid "Maximum size of a file to use sendfile(). Default: 2 GB." msgstr "" -#: admin/PageAdvanced.py:74 +#: admin/PageAdvanced.py:104 msgid "" "Name a program that will be called if, by some reason, the server fails. " "Default: cherokee-panic." msgstr "" -#: admin/PageAdvanced.py:75 +#: admin/PageAdvanced.py:105 msgid "Path of the PID file. If empty, the file will not be created." msgstr "" -#: admin/PageAdvanced.py:76 +#: admin/PageAdvanced.py:106 msgid "Max. length of the incoming connection queue." msgstr "" -#: admin/PageAdvanced.py:77 +#: admin/PageAdvanced.py:107 msgid "" "Set the number of how many internal connections can be held for reuse by " "each thread. Default: 20." msgstr "" -#: admin/PageAdvanced.py:78 +#: admin/PageAdvanced.py:108 msgid "" "Sets the number of seconds between log consolidations (flushes). Default: 10 " "seconds." msgstr "" -#: admin/PageAdvanced.py:79 +#: admin/PageAdvanced.py:109 msgid "Time lapse (in seconds) between Nonce cache clean ups." msgstr "" -#: admin/PageAdvanced.py:80 +#: admin/PageAdvanced.py:110 msgid "" "Enables the server-wide keep-alive support. It increases the performance. It " "is usually set on." msgstr "" -#: admin/PageAdvanced.py:81 +#: admin/PageAdvanced.py:111 msgid "" "Maximum number of HTTP requests that can be served by each keepalive " "connection." msgstr "" -#: admin/PageAdvanced.py:82 +#: admin/PageAdvanced.py:112 msgid "" "Allows the server to use Chunked encoding to try to keep Keep-Alive enabled." msgstr "" -#: admin/PageAdvanced.py:83 +#: admin/PageAdvanced.py:113 msgid "Activate or deactivate the I/O cache globally." msgstr "" -#: admin/PageAdvanced.py:84 +#: admin/PageAdvanced.py:114 msgid "Number of pages that the cache should handle." msgstr "" -#: admin/PageAdvanced.py:85 +#: admin/PageAdvanced.py:115 msgid "Files under this size (in bytes) will not be cached." msgstr "" -#: admin/PageAdvanced.py:86 +#: admin/PageAdvanced.py:116 msgid "Files over this size (in bytes) will not be cached." msgstr "" -#: admin/PageAdvanced.py:87 +#: admin/PageAdvanced.py:117 msgid "" "How long (in seconds) the file information should last cached without " "refreshing it." msgstr "" -#: admin/PageAdvanced.py:88 +#: admin/PageAdvanced.py:118 msgid "How long (in seconds) the file content should last cached." msgstr "" -#: admin/PageAdvanced.py:89 +#: admin/PageAdvanced.py:119 msgid "Path to a Diffie Hellman (DH) parameters PEM file: 512 bits." msgstr "" -#: admin/PageAdvanced.py:90 +#: admin/PageAdvanced.py:120 msgid "Path to a Diffie Hellman (DH) parameters PEM file: 1024 bits." msgstr "" -#: admin/PageAdvanced.py:91 +#: admin/PageAdvanced.py:121 msgid "Path to a Diffie Hellman (DH) parameters PEM file: 2048 bits." msgstr "" -#: admin/PageAdvanced.py:92 +#: admin/PageAdvanced.py:122 msgid "Path to a Diffie Hellman (DH) parameters PEM file: 4096 bits." msgstr "" -#: admin/PageAdvanced.py:93 +#: admin/PageAdvanced.py:123 +msgid "Your Cherokee Web Server does not support SSL/TLS encryption." +msgstr "" + +#: admin/PageAdvanced.py:124 msgid "Timeout for the TLS/SSL handshake. Default: 15 seconds." msgstr "" -#: admin/PageAdvanced.py:94 +#: admin/PageAdvanced.py:125 +msgid "Beware: it is vulnerable. You should disable SSLv2." +msgstr "" + +#: admin/PageAdvanced.py:126 +msgid "Beware: it is vulnerable. You should disable SSLv3." +msgstr "" + +#: admin/PageAdvanced.py:127 +msgid "TLSv1 is deprecated" +msgstr "" + +#: admin/PageAdvanced.py:128 +msgid "TLSv1.1 is deprecated" +msgstr "" + +#: admin/PageAdvanced.py:129 admin/PageAdvanced.py:130 +msgid " " +msgstr "" + +#: admin/PageAdvanced.py:131 +msgid "" +"The following options work in combination with above min/max TLS protocol " +"version settings. They are deprecated, only set the minimum and maximum " +"supported protocol versions instead." +msgstr "" + +#: admin/PageAdvanced.py:133 +msgid "" +"Minimum required TLS protocol version from clients (Default: auto-configured " +"by libssl)" +msgstr "" + +#: admin/PageAdvanced.py:134 msgid "" -"Allow clients to use SSL version 2 - Beware: it is vulnerable. (Default: No)" +"Maximum supported TLS protocol version (Default: auto-configured by libssl)" msgstr "" -#: admin/PageAdvanced.py:119 admin/PageAdvanced.py:121 +#: admin/PageAdvanced.py:167 admin/PageAdvanced.py:169 msgid "Allowed" msgstr "許可" -#: admin/PageAdvanced.py:119 +#: admin/PageAdvanced.py:167 #, fuzzy msgid "Keep Alive" msgstr "KeepAliveを許可" -#: admin/PageAdvanced.py:120 +#: admin/PageAdvanced.py:168 msgid "Max keepalive reqs" msgstr "" -#: admin/PageAdvanced.py:121 +#: admin/PageAdvanced.py:169 msgid "Chunked Encoding" msgstr "エンコードの区別" -#: admin/PageAdvanced.py:122 +#: admin/PageAdvanced.py:170 msgid "Polling Method" msgstr "ポーリング方法" -#: admin/PageAdvanced.py:123 +#: admin/PageAdvanced.py:171 msgid "Sendfile min size" msgstr "Sendfileの最小サイズ" -#: admin/PageAdvanced.py:124 +#: admin/PageAdvanced.py:172 msgid "Sendfile max size" msgstr "Sendfileの最大サイズ" -#: admin/PageAdvanced.py:126 admin/PageAdvanced.py:189 +#: admin/PageAdvanced.py:174 admin/PageAdvanced.py:313 msgid "Connections" msgstr "接続数" -#: admin/PageAdvanced.py:134 +#: admin/PageAdvanced.py:182 msgid "Thread Number" msgstr "スレッド番号" -#: admin/PageAdvanced.py:135 +#: admin/PageAdvanced.py:183 msgid "Thread Policy" msgstr "スレッドポリシー" -#: admin/PageAdvanced.py:136 +#: admin/PageAdvanced.py:184 msgid "File descriptors" msgstr "ファイルの概要" -#: admin/PageAdvanced.py:137 +#: admin/PageAdvanced.py:185 #, fuzzy msgid "Listening queue length" msgstr "待ち受けポート" -#: admin/PageAdvanced.py:138 admin/plugins/proxy.py:239 +#: admin/PageAdvanced.py:186 admin/plugins/proxy.py:239 msgid "Reuse connections" msgstr "再接続" -#: admin/PageAdvanced.py:139 +#: admin/PageAdvanced.py:187 msgid "Log flush time" msgstr "ログをフラッシュするまでの時間" -#: admin/PageAdvanced.py:140 +#: admin/PageAdvanced.py:188 msgid "Nonces clean up time" msgstr "臨時のクリーンアップ時間" -#: admin/PageAdvanced.py:142 admin/PageAdvanced.py:190 +#: admin/PageAdvanced.py:190 admin/PageAdvanced.py:314 msgid "Resources" msgstr "リソース" -#: admin/PageAdvanced.py:151 +#: admin/PageAdvanced.py:199 msgid "Max pages" msgstr "最大ページ数" -#: admin/PageAdvanced.py:152 +#: admin/PageAdvanced.py:200 msgid "File Min Size" msgstr "最小ファイルサイズ" -#: admin/PageAdvanced.py:153 +#: admin/PageAdvanced.py:201 msgid "File Max Size" msgstr "最大ファイルサイズ" -#: admin/PageAdvanced.py:154 +#: admin/PageAdvanced.py:202 #, fuzzy msgid "Lasting: stat" msgstr "はじめに" -#: admin/PageAdvanced.py:155 +#: admin/PageAdvanced.py:203 #, fuzzy msgid "Lasting: mmap" msgstr "一欄" -#: admin/PageAdvanced.py:157 admin/PageAdvanced.py:191 +#: admin/PageAdvanced.py:205 admin/PageAdvanced.py:315 msgid "I/O cache" msgstr "I/Oキャッシュ" -#: admin/PageAdvanced.py:165 +#: admin/PageAdvanced.py:213 msgid "Panic action" msgstr "パニック時のアクション" -#: admin/PageAdvanced.py:166 +#: admin/PageAdvanced.py:214 msgid "PID file" msgstr "PIDファイル" -#: admin/PageAdvanced.py:176 admin/PageEntry.py:84 admin/PageVServer.py:476 -#: admin/plugins/common.py:42 admin/plugins/common.py:43 -#: admin/plugins/dirlist.py:55 admin/plugins/proxy.py:240 -msgid "Allow" -msgstr "許可" +#: admin/PageAdvanced.py:245 admin/PageAdvanced.py:247 +#: admin/PageAdvanced.py:258 admin/PageAdvanced.py:260 +#, fuzzy +msgid "Disable " +msgstr "無効" -#: admin/PageAdvanced.py:176 -msgid "Allow SSL v2" -msgstr "SSL v2を許可" +#: admin/PageAdvanced.py:247 +msgid "Protocol deacrivated" +msgstr "" + +#: admin/PageAdvanced.py:247 +msgid "Protocol not supported" +msgstr "" + +#: admin/PageAdvanced.py:260 +msgid "Protocol deactivated" +msgstr "" -#: admin/PageAdvanced.py:177 +#: admin/PageAdvanced.py:262 +msgid "Turn off selected TLS Protocols (Deprecated)" +msgstr "" + +#: admin/PageAdvanced.py:270 admin/PageAdvanced.py:271 +msgid "auto-configured" +msgstr "" + +#: admin/PageAdvanced.py:285 +msgid "Min. TLS protocol version" +msgstr "" + +#: admin/PageAdvanced.py:290 +msgid "Max. TLS protocol version" +msgstr "" + +#: admin/PageAdvanced.py:291 msgid "Handshake Timeout" msgstr "ハンドシェイクのタイムアウト" -#: admin/PageAdvanced.py:178 +#: admin/PageAdvanced.py:292 msgid "DH parameters: 512 bits" msgstr "DHパラメーター:512ビット" -#: admin/PageAdvanced.py:179 +#: admin/PageAdvanced.py:293 msgid "DH parameters: 1024 bits" msgstr "DHパラメーター:1024ビット" -#: admin/PageAdvanced.py:180 +#: admin/PageAdvanced.py:294 msgid "DH parameters: 2048 bits" msgstr "DHパラメーター:2048ビット" -#: admin/PageAdvanced.py:181 +#: admin/PageAdvanced.py:295 msgid "DH parameters: 4096 bits" msgstr "DHパラメーター:4096ビット" -#: admin/PageAdvanced.py:183 admin/PageAdvanced.py:193 -#: admin/PageGeneral.py:239 admin/plugins/bind.py:92 +#: admin/PageAdvanced.py:296 admin/PageAdvanced.py:317 admin/PageGeneral.py:239 +#: admin/plugins/bind.py:92 #, fuzzy msgid "TLS" msgstr "TLSを使用" -#: admin/PageAdvanced.py:199 +#: admin/PageAdvanced.py:323 msgid "Advanced Configuration" msgstr "拡張設定" @@ -973,7 +1048,7 @@ msgstr "GZipエンコーダー" msgid "Deflate encoder" msgstr "Deflateエンコーダー" -#: admin/PageEntry.py:78 admin/PageEntry.py:173 admin/PageVServer.py:149 +#: admin/PageEntry.py:78 admin/PageEntry.py:173 admin/PageVServer.py:153 #, fuzzy msgid "Authentication" msgstr "認証リスト" @@ -987,6 +1062,12 @@ msgstr "認証リスト" msgid "Leave unset" msgstr "" +#: admin/PageEntry.py:84 admin/PageVServer.py:480 admin/plugins/common.py:42 +#: admin/plugins/common.py:43 admin/plugins/dirlist.py:58 +#: admin/plugins/file.py:44 admin/plugins/proxy.py:240 +msgid "Allow" +msgstr "" + #: admin/PageEntry.py:85 #, fuzzy msgid "Forbid" @@ -1015,7 +1096,7 @@ msgstr "" msgid "Remove" msgstr "削除" -#: admin/PageEntry.py:126 admin/PageVServer.py:155 +#: admin/PageEntry.py:126 admin/PageVServer.py:159 #: admin/plugins/secdownload.py:44 msgid "Timeout" msgstr "タイムアウト" @@ -1029,7 +1110,7 @@ msgstr "接続タイムアウト" msgid "Limit traffic to" msgstr "" -#: admin/PageEntry.py:139 admin/PageVServer.py:156 +#: admin/PageEntry.py:139 admin/PageVServer.py:160 msgid "Traffic Shaping" msgstr "" @@ -1038,7 +1119,7 @@ msgstr "" msgid "Skip Logging" msgstr "エラーのロギング" -#: admin/PageEntry.py:154 admin/PageVServer.py:720 +#: admin/PageEntry.py:154 admin/PageVServer.py:729 #, fuzzy msgid "Logging" msgstr "エラーのロギング" @@ -1065,14 +1146,14 @@ msgstr "" msgid "Can not be empty" msgstr "" -#: admin/PageEntry.py:216 admin/PageEntry.py:268 admin/consts.py:190 -#: admin/plugins/header.py:110 admin/plugins/header.py:151 -#: admin/plugins/header.py:156 admin/plugins/proxy.py:193 +#: admin/PageEntry.py:216 admin/PageEntry.py:268 admin/consts.py:189 +#: admin/plugins/header.py:112 admin/plugins/header.py:153 +#: admin/plugins/header.py:158 admin/plugins/proxy.py:193 msgid "Header" msgstr "ヘッダー" #: admin/PageEntry.py:216 admin/PageSource.py:284 -#: admin/plugins/error_redir.py:105 admin/plugins/header.py:113 +#: admin/plugins/error_redir.py:105 admin/plugins/header.py:115 #: admin/plugins/redir.py:76 msgid "Type" msgstr "種類" @@ -1092,7 +1173,7 @@ msgstr "アプリケーション" msgid "Add New Header" msgstr "新しいペアを追加" -#: admin/PageEntry.py:326 admin/consts.py:204 admin/plugins/redir.py:39 +#: admin/PageEntry.py:326 admin/consts.py:203 admin/plugins/redir.py:39 #: admin/plugins/rehost.py:53 msgid "Regular Expressions" msgstr "正規表現" @@ -1109,8 +1190,7 @@ msgstr "" msgid "Caching Policy" msgstr "" -#: admin/PageEntry.py:381 admin/plugins/rehost.py:68 -#: admin/plugins/rehost.py:92 +#: admin/PageEntry.py:381 admin/plugins/rehost.py:68 admin/plugins/rehost.py:92 msgid "New Regular Expression" msgstr "新規正規表現" @@ -1118,7 +1198,7 @@ msgstr "新規正規表現" msgid "Disregarded Cookies" msgstr "" -#: admin/PageEntry.py:402 admin/PageVServer.py:154 +#: admin/PageEntry.py:402 admin/PageVServer.py:158 #, fuzzy msgid "Expiration" msgstr "アプリケーション" @@ -1152,7 +1232,7 @@ msgstr "" msgid "Content Expiration" msgstr "" -#: admin/PageEntry.py:433 admin/PageVServer.py:153 +#: admin/PageEntry.py:433 admin/PageVServer.py:157 #, fuzzy msgid "Cache" msgstr "キャッシュなし" @@ -1176,7 +1256,7 @@ msgid "Matching Rule" msgstr "一致条件" #: admin/PageEntry.py:514 admin/PageEntry.py:528 admin/PageEntry.py:553 -#: admin/PageVServer.py:148 +#: admin/PageVServer.py:152 msgid "Handler" msgstr "ハンドラ" @@ -1194,7 +1274,7 @@ msgstr "プラットフォーム" msgid "Caching" msgstr "一致条件" -#: admin/PageEntry.py:556 admin/PageVServer.py:721 +#: admin/PageEntry.py:556 admin/PageVServer.py:730 msgid "Security" msgstr "セキュリティ" @@ -1439,7 +1519,7 @@ msgstr "" msgid "SSL/TLS back-end" msgstr "" -#: admin/PageGeneral.py:197 admin/PageIndex.py:252 +#: admin/PageGeneral.py:197 admin/PageIndex.py:198 msgid "Support" msgstr "サポート" @@ -1473,8 +1553,8 @@ msgid "Bind to" msgstr "" #: admin/PageGeneral.py:239 admin/PageGeneral.py:310 admin/plugins/bind.py:92 -#: admin/plugins/bind.py:155 admin/plugins/bind.py:157 -#: admin/plugins/ldap.py:48 admin/plugins/mysql.py:77 +#: admin/plugins/bind.py:155 admin/plugins/bind.py:157 admin/plugins/ldap.py:48 +#: admin/plugins/mysql.py:77 msgid "Port" msgstr "ポート" @@ -1537,7 +1617,7 @@ msgstr "グループ" msgid "Chroot" msgstr "" -#: admin/PageGeneral.py:357 admin/PageVServer.py:479 +#: admin/PageGeneral.py:357 admin/PageVServer.py:483 msgid "Network" msgstr "ネットワーク" @@ -1565,167 +1645,130 @@ msgstr "目次" msgid "Documentation" msgstr "説明書" -#: admin/PageIndex.py:67 -msgid "You will be sent an email requesting confirmation" -msgstr "" - -#: admin/PageIndex.py:68 -msgid "Optionally provide your name" -msgstr "必要に応じて自分の名前を提供する" - -#: admin/PageIndex.py:70 -#, python-format -msgid "" -"There are a number of Community Mailing Lists\n" -"available for you to subscribe. You can subscribe the General Discussion\n" -"mailing list from this interface. There is where most of the discussions\n" -"take place." -msgstr "" - -#: admin/PageIndex.py:77 +#: admin/PageIndex.py:58 msgid "Server is Running" msgstr "サーバーは起動中です" -#: admin/PageIndex.py:78 +#: admin/PageIndex.py:59 msgid "Server is not Running" msgstr "サーバーは起動していません" -#: admin/PageIndex.py:132 +#: admin/PageIndex.py:110 msgid "Stop Server" msgstr "サーバー停止" -#: admin/PageIndex.py:136 +#: admin/PageIndex.py:114 msgid "Start Server" msgstr "サーバー起動" -#: admin/PageIndex.py:141 +#: admin/PageIndex.py:119 msgid "Hostname" msgstr "ホスト名" -#: admin/PageIndex.py:143 +#: admin/PageIndex.py:121 msgid "Modified" msgstr "修正日" -#: admin/PageIndex.py:145 +#: admin/PageIndex.py:123 msgid "Not found" msgstr "見つかりません" -#: admin/PageIndex.py:146 +#: admin/PageIndex.py:124 msgid "Config File" msgstr "設定ファイル" -#: admin/PageIndex.py:153 admin/plugins/server_info.py:32 +#: admin/PageIndex.py:131 admin/plugins/server_info.py:32 #: admin/plugins/server_info.py:35 msgid "Server Information" msgstr "サーバー情報" -#: admin/PageIndex.py:165 +#: admin/PageIndex.py:143 msgid "Processors" msgstr "プロセス数" -#: admin/PageIndex.py:177 +#: admin/PageIndex.py:155 msgid "Memory" msgstr "メモリ" -#: admin/PageIndex.py:211 admin/plugins/dbslayer.py:51 +#: admin/PageIndex.py:189 admin/plugins/dbslayer.py:51 msgid "Language" msgstr "言語" -#: admin/PageIndex.py:231 -msgid "Mailing List Subscription" -msgstr "メーリングリストの申し込み" - -#: admin/PageIndex.py:233 -msgid "Subscribe" -msgstr "通知" - -#: admin/PageIndex.py:236 -msgid "Your email address" -msgstr "あなたのメールアドレス" - -#: admin/PageIndex.py:237 -msgid "Your name" -msgstr "あなたの名前" - -#: admin/PageIndex.py:256 +#: admin/PageIndex.py:202 msgid "Getting started" msgstr "はじめに" -#: admin/PageIndex.py:260 -msgid "Subscribe to mailing lists" +#: admin/PageIndex.py:206 +#, fuzzy +msgid "Visit the mailing list" msgstr "メーリングリストを購読" -#: admin/PageIndex.py:268 +#: admin/PageIndex.py:210 msgid "Report a bug" msgstr "バグを報告" -#: admin/PageIndex.py:272 -msgid "Purchase commercial support" -msgstr "有償サポートを受ける" - -#: admin/PageIndex.py:276 admin/PageIndex.py:280 +#: admin/PageIndex.py:214 admin/PageIndex.py:218 msgid "About Cherokee" msgstr "Cherokeeについて" -#: admin/PageIndex.py:289 +#: admin/PageIndex.py:227 msgid "Join the Cherokee Community:" msgstr "Cherokeeのコミュニティに参加:" -#: admin/PageIndex.py:292 +#: admin/PageIndex.py:230 msgid "Visit the Cherokee Project Website" msgstr "Cherokeeプロジェクトサイトに行く" -#: admin/PageIndex.py:293 +#: admin/PageIndex.py:231 msgid "Follow us on Twitter" msgstr "Twitterでフォロー" -#: admin/PageIndex.py:294 +#: admin/PageIndex.py:232 msgid "Join us on Facebook" msgstr "Facebookに参加" -#: admin/PageIndex.py:295 +#: admin/PageIndex.py:233 #, fuzzy msgid "Join us on Google+" msgstr "Facebookに参加" -#: admin/PageIndex.py:296 +#: admin/PageIndex.py:234 msgid "Fork us on Github" msgstr "" -#: admin/PageIndex.py:297 +#: admin/PageIndex.py:235 msgid "Become a member of Cherokee group on LinkedIn" msgstr "LinkedInのCherokeeグループのメンバーになる" -#: admin/PageIndex.py:298 +#: admin/PageIndex.py:236 msgid "Chat with us at irc.freenode.net" msgstr "irc.freenode.netで、チャットする" -#: admin/PageIndex.py:307 +#: admin/PageIndex.py:245 msgid "Shutdown Cherokee-admin" msgstr "Cherokee-adminをシャットダウン" -#: admin/PageIndex.py:309 +#: admin/PageIndex.py:247 msgid "Shut down" msgstr "シャットダウン" -#: admin/PageIndex.py:310 +#: admin/PageIndex.py:248 msgid "You are about to shut down this instance of Cherokee-admin" msgstr "" -#: admin/PageIndex.py:311 +#: admin/PageIndex.py:249 msgid "Are you sure you want to proceed?" msgstr "続けてもよろしいですか?" -#: admin/PageIndex.py:314 +#: admin/PageIndex.py:252 msgid "Cherokee-admin has been shut down" msgstr "Cherokee-adminは、シャットダウンされました" -#: admin/PageIndex.py:316 +#: admin/PageIndex.py:254 msgid "Shut down Cherokee-Admin" msgstr "Cherokee-adminをシャットダウン" -#: admin/PageIndex.py:329 admin/PageIndex.py:350 +#: admin/PageIndex.py:267 admin/PageIndex.py:288 msgid "Welcome to Cherokee Admin" msgstr "Cherokee管理人室へようこそ" @@ -1817,7 +1860,7 @@ msgstr "手動" msgid "Manual configuration" msgstr "手動設定" -#: admin/PageRule.py:249 admin/PageVServer.py:158 +#: admin/PageRule.py:249 admin/PageVServer.py:162 msgid "Final" msgstr "" @@ -1847,7 +1890,7 @@ msgstr "複製" msgid "Clone Selected Behavior Rule" msgstr "選択した仮想サーバーを複製" -#: admin/PageRule.py:314 admin/PageVServer.py:718 +#: admin/PageRule.py:314 admin/PageVServer.py:727 msgid "Behavior" msgstr "" @@ -1973,7 +2016,7 @@ msgstr "変数を追加" msgid "Source Usage" msgstr "ソースの使用率" -#: admin/PageSource.py:253 admin/PageVServer.py:723 +#: admin/PageSource.py:253 admin/PageVServer.py:732 msgid "Virtual Server" msgstr "仮想サーバー" @@ -2027,7 +2070,7 @@ msgstr "選択されたソース情報を複製" msgid "Sources Filtering" msgstr "ソースのフィルタリング" -#: admin/PageSources.py:35 admin/PageVServer.py:141 admin/PageVServers.py:48 +#: admin/PageSources.py:35 admin/PageVServer.py:145 admin/PageVServers.py:48 #: admin/PageVServers.py:294 msgid "Virtual Servers" msgstr "仮想サーバー" @@ -2050,626 +2093,634 @@ msgid "Virtual Server Filtering" msgstr "仮想サーバーのフィルタリング" #: admin/PageVServer.py:44 -#, fuzzy +msgid "Reference" +msgstr "" + +#: admin/PageVServer.py:47 msgid "Nickname for the virtual server." msgstr "管理人ユーザのユーザ名" -#: admin/PageVServer.py:45 +#: admin/PageVServer.py:48 msgid "" "This directive points to the PEM-encoded Certificate file for the server " "(Full path to the file)" msgstr "" -#: admin/PageVServer.py:46 +#: admin/PageVServer.py:49 msgid "PEM-encoded Private Key file for the server (Full path to the file)" msgstr "" -#: admin/PageVServer.py:47 +#: admin/PageVServer.py:50 msgid "" "File containing the trusted CA certificates, utilized for checking the " "client certificates (Full path to the file)" msgstr "" -#: admin/PageVServer.py:48 -msgid "" -"Ciphers that TLS/SSL is allowed to use. Reference. (Default enables " -"Forward Secrecy)." +#: admin/PageVServer.py:51 +msgid "Ciphers that TLSv1.2 and below is allowed to use." msgstr "" -#: admin/PageVServer.py:49 +#: admin/PageVServer.py:52 +msgid "Ciphersuites that TLSv1.3 is allowed to use." +msgstr "" + +#: admin/PageVServer.py:53 msgid "" "The cipher sequence that is specified by the server should have preference " "over the client preference. (Default: True)." msgstr "" -#: admin/PageVServer.py:50 +#: admin/PageVServer.py:54 msgid "" "Explicitly enable or disable serverside compression support. (Default: " "Disabled)." msgstr "" -#: admin/PageVServer.py:51 +#: admin/PageVServer.py:55 msgid "" "Explicitely sets the Diffie-Hellman parameters length. (Default: Let openssl " "choose)." msgstr "" -#: admin/PageVServer.py:52 +#: admin/PageVServer.py:56 msgid "Skip, Tolerate, Accept or Require client certificates." msgstr "" -#: admin/PageVServer.py:53 +#: admin/PageVServer.py:57 msgid "" "Limit up to which depth certificates in a chain are used during the " "verification procedure (Default: 1)" msgstr "" -#: admin/PageVServer.py:54 +#: admin/PageVServer.py:58 msgid "Allows the selection of how to generate the error responses." msgstr "" -#: admin/PageVServer.py:55 +#: admin/PageVServer.py:59 msgid "" "Directory inside the user home directory to use as root web directory. " "Disabled if empty." msgstr "" -#: admin/PageVServer.py:56 +#: admin/PageVServer.py:60 msgid "The personal web support is currently turned on." msgstr "" -#: admin/PageVServer.py:57 +#: admin/PageVServer.py:61 msgid "Adds a new domain name. Wildcards are allowed in the domain name." msgstr "" -#: admin/PageVServer.py:58 +#: admin/PageVServer.py:62 msgid "Virtual Server root directory." msgstr "仮想サーバーのルートディレクトリ" -#: admin/PageVServer.py:59 +#: admin/PageVServer.py:63 msgid "" "List of name files that will be used as directory index. Eg: index.html," "index.php." msgstr "" -#: admin/PageVServer.py:60 +#: admin/PageVServer.py:64 msgid "The maximum size, in bytes, for POST uploads. (Default: unlimited)" msgstr "" -#: admin/PageVServer.py:61 +#: admin/PageVServer.py:65 msgid "Whether this virtual server is allowed to use Keep-alive (Default: yes)" msgstr "" -#: admin/PageVServer.py:62 +#: admin/PageVServer.py:66 msgid "The Logging is currently enabled." msgstr "" -#: admin/PageVServer.py:63 +#: admin/PageVServer.py:67 msgid "Logging format. Apache compatible is highly recommended here." msgstr "" -#: admin/PageVServer.py:64 +#: admin/PageVServer.py:68 msgid "Back-end used to store the log accesses." msgstr "" -#: admin/PageVServer.py:65 +#: admin/PageVServer.py:69 msgid "Back-end used to store the log errors." msgstr "" -#: admin/PageVServer.py:66 +#: admin/PageVServer.py:70 msgid "Back-end used to store the log accesses and errors." msgstr "" -#: admin/PageVServer.py:67 +#: admin/PageVServer.py:71 msgid "Full path to the file where the information will be saved." msgstr "" -#: admin/PageVServer.py:68 +#: admin/PageVServer.py:72 msgid "Path to the executable that will be invoked on each log entry." msgstr "" -#: admin/PageVServer.py:69 +#: admin/PageVServer.py:73 msgid "" "Whether the logger should read and use the X-Real-IP and X-Forwarded-For " "headers (send by reverse proxies)." msgstr "" -#: admin/PageVServer.py:71 +#: admin/PageVServer.py:75 msgid "" "List of IP addresses and subnets that are allowed to send X-Real-IP and X-" "Forwarded-For headers." msgstr "" -#: admin/PageVServer.py:72 +#: admin/PageVServer.py:76 msgid "" "How to support the \"Advanced Virtual Hosting\" mechanism. (Default: off)" msgstr "" -#: admin/PageVServer.py:73 +#: admin/PageVServer.py:77 msgid "The following variables are accepted: " msgstr "" -#: admin/PageVServer.py:74 +#: admin/PageVServer.py:78 msgid "Allows the selection of domain matching method." msgstr "" -#: admin/PageVServer.py:75 +#: admin/PageVServer.py:79 msgid "" "Whether or not it should collected statistics about the traffic of this " "virtual server." msgstr "" -#: admin/PageVServer.py:76 +#: admin/PageVServer.py:80 msgid "Time standard to use in the log file entries." msgstr "" -#: admin/PageVServer.py:77 +#: admin/PageVServer.py:81 msgid "" "Remember that only \"File Exists\" rules and \"List & Send\" handlers use " "the Directory Indexes setting." msgstr "" -#: admin/PageVServer.py:78 +#: admin/PageVServer.py:82 msgid "" "Use this nickname as an additional host name for this virtual server " "(Default: yes)" msgstr "" -#: admin/PageVServer.py:79 +#: admin/PageVServer.py:83 msgid "Enforce HTTPS by using the HTTP Strict Transport Security." msgstr "" -#: admin/PageVServer.py:80 +#: admin/PageVServer.py:84 msgid "" "How long the client's browser should remember the forced HTTPS (in seconds)." msgstr "" -#: admin/PageVServer.py:81 +#: admin/PageVServer.py:85 msgid "" "Should HSTS be used in all the subdomains of this virtual server (Default: " "yes)." msgstr "" -#: admin/PageVServer.py:83 +#: admin/PageVServer.py:87 msgid "

The 'default' virtual server matches all the domain names.

" msgstr "" -#: admin/PageVServer.py:86 +#: admin/PageVServer.py:90 #, fuzzy msgid "Remote IP address" msgstr "LDAPサーバーのIPアドレス" -#: admin/PageVServer.py:87 +#: admin/PageVServer.py:91 #, fuzzy msgid "Local IP address" msgstr "メールアドレス" -#: admin/PageVServer.py:88 +#: admin/PageVServer.py:92 #, fuzzy msgid "Request Protocol" msgstr "リクエスト" -#: admin/PageVServer.py:89 +#: admin/PageVServer.py:93 msgid "Transport type: http or https" msgstr "" -#: admin/PageVServer.py:90 +#: admin/PageVServer.py:94 msgid "Port of the server serving the request" msgstr "" -#: admin/PageVServer.py:91 +#: admin/PageVServer.py:95 msgid "The query string, if exists" msgstr "" -#: admin/PageVServer.py:92 +#: admin/PageVServer.py:96 msgid "First line of HTTP request" msgstr "" -#: admin/PageVServer.py:93 +#: admin/PageVServer.py:97 msgid "Response status code" msgstr "" -#: admin/PageVServer.py:94 +#: admin/PageVServer.py:98 msgid "Time: in common log format time format" msgstr "" -#: admin/PageVServer.py:95 +#: admin/PageVServer.py:99 msgid "Time: seconds since Epoch" msgstr "" -#: admin/PageVServer.py:96 +#: admin/PageVServer.py:100 msgid "Time: milliseconds since Epoch" msgstr "" -#: admin/PageVServer.py:97 +#: admin/PageVServer.py:101 msgid "Remote user (authentication)" msgstr "" -#: admin/PageVServer.py:98 +#: admin/PageVServer.py:102 msgid "URL path requested" msgstr "" -#: admin/PageVServer.py:99 +#: admin/PageVServer.py:103 msgid "URL path requested before any rewrite" msgstr "" -#: admin/PageVServer.py:100 +#: admin/PageVServer.py:104 #, fuzzy msgid "Virtual Server nick name" msgstr "仮想サーバーのニックネーム" -#: admin/PageVServer.py:101 +#: admin/PageVServer.py:105 msgid "Requested host (Host: header)" msgstr "" -#: admin/PageVServer.py:102 +#: admin/PageVServer.py:106 msgid "Size of the response in bytes" msgstr "" -#: admin/PageVServer.py:103 +#: admin/PageVServer.py:107 msgid "'Host:' header of the request" msgstr "" -#: admin/PageVServer.py:104 +#: admin/PageVServer.py:108 msgid "'Referrer:' header of the request" msgstr "" -#: admin/PageVServer.py:105 +#: admin/PageVServer.py:109 msgid "'User-Agent:' header of the request" msgstr "" -#: admin/PageVServer.py:106 +#: admin/PageVServer.py:110 msgid "'Cookie:' header of the request" msgstr "" -#: admin/PageVServer.py:142 +#: admin/PageVServer.py:146 #, fuzzy msgid "Loggers" msgstr "以下でログイン:" -#: admin/PageVServer.py:143 +#: admin/PageVServer.py:147 msgid "SSL cookbook" msgstr "" -#: admin/PageVServer.py:147 admin/PageVServer.py:184 +#: admin/PageVServer.py:151 admin/PageVServer.py:188 #, fuzzy msgid "Match" msgstr "マッチタイプ" -#: admin/PageVServer.py:147 +#: admin/PageVServer.py:151 #, fuzzy msgid "Rule Match" msgstr "ファイルの一致" -#: admin/PageVServer.py:148 +#: admin/PageVServer.py:152 #, fuzzy msgid "Assigned Handler" msgstr "ハンドラ" -#: admin/PageVServer.py:149 +#: admin/PageVServer.py:153 msgid "Auth" msgstr "" -#: admin/PageVServer.py:150 +#: admin/PageVServer.py:154 #, fuzzy msgid "Custom Document Root" msgstr "ドキュメントルート" -#: admin/PageVServer.py:150 +#: admin/PageVServer.py:154 msgid "Root" msgstr "" -#: admin/PageVServer.py:151 +#: admin/PageVServer.py:155 msgid "Only HTTPS" msgstr "" -#: admin/PageVServer.py:151 +#: admin/PageVServer.py:155 #, fuzzy msgid "Secure" msgstr "セキュリティ" -#: admin/PageVServer.py:152 +#: admin/PageVServer.py:156 msgid "Enc" msgstr "" -#: admin/PageVServer.py:152 +#: admin/PageVServer.py:156 #, fuzzy msgid "Encoders" msgstr "エンコード" -#: admin/PageVServer.py:153 +#: admin/PageVServer.py:157 #, fuzzy msgid "Cacheable" msgstr "Apache互換" -#: admin/PageVServer.py:154 +#: admin/PageVServer.py:158 msgid "Exp" msgstr "" -#: admin/PageVServer.py:155 +#: admin/PageVServer.py:159 #, fuzzy msgid "Connection Timeout" msgstr "接続タイムアウト" -#: admin/PageVServer.py:156 +#: admin/PageVServer.py:160 msgid "Shaping" msgstr "" -#: admin/PageVServer.py:157 +#: admin/PageVServer.py:161 msgid "Log" msgstr "ログ" -#: admin/PageVServer.py:157 +#: admin/PageVServer.py:161 #, fuzzy msgid "Logging Enabled" msgstr "エンコーディングが有効です" -#: admin/PageVServer.py:158 +#: admin/PageVServer.py:162 #, fuzzy msgid "Rule is Final" msgstr "条件はアクティブです。" -#: admin/PageVServer.py:184 +#: admin/PageVServer.py:188 #, fuzzy msgid "Match nickname" msgstr "ニックネームに一致" -#: admin/PageVServer.py:188 admin/PageVServer.py:717 +#: admin/PageVServer.py:192 admin/PageVServer.py:726 msgid "Host Match" msgstr "ホストと一致" -#: admin/PageVServer.py:218 admin/PageVServer.py:234 admin/PageVServer.py:258 -#: admin/PageVServer.py:485 admin/PageVServer.py:519 -#: admin/plugins/method.py:99 admin/plugins/method.py:109 +#: admin/PageVServer.py:222 admin/PageVServer.py:238 admin/PageVServer.py:262 +#: admin/PageVServer.py:489 admin/PageVServer.py:523 admin/plugins/method.py:99 +#: admin/plugins/method.py:109 msgid "Method" msgstr "方法" -#: admin/PageVServer.py:226 admin/PageVServer.py:242 +#: admin/PageVServer.py:230 admin/PageVServer.py:246 #, fuzzy msgid "Remove criteria" msgstr "リモートサービス" -#: admin/PageVServer.py:260 +#: admin/PageVServer.py:264 #, fuzzy msgid "How to match this Virtual Server" msgstr "新規仮想サーバー" -#: admin/PageVServer.py:267 +#: admin/PageVServer.py:271 msgid "Add an additional matching criteria" msgstr "" -#: admin/PageVServer.py:358 +#: admin/PageVServer.py:362 msgid "Behavior Rules" msgstr "" -#: admin/PageVServer.py:367 +#: admin/PageVServer.py:371 msgid "Rule Management" msgstr "" -#: admin/PageVServer.py:393 +#: admin/PageVServer.py:397 msgid "Only accept Secure Connections" msgstr "" -#: admin/PageVServer.py:398 +#: admin/PageVServer.py:402 msgid "Encoding enabled" msgstr "エンコーディングが有効です" -#: admin/PageVServer.py:404 +#: admin/PageVServer.py:408 msgid "no" msgstr "切" -#: admin/PageVServer.py:415 +#: admin/PageVServer.py:419 msgid " seconds" msgstr "秒" -#: admin/PageVServer.py:420 +#: admin/PageVServer.py:424 msgid " bytes per second" msgstr "バイト/秒" -#: admin/PageVServer.py:425 +#: admin/PageVServer.py:429 msgid "Logging enabled for this rule" msgstr "" -#: admin/PageVServer.py:430 +#: admin/PageVServer.py:434 msgid "Prevents further rule evaluation" msgstr "" -#: admin/PageVServer.py:435 +#: admin/PageVServer.py:439 msgid "Content can be cached" msgstr "" -#: admin/PageVServer.py:438 +#: admin/PageVServer.py:442 msgid "Forbids content caching" msgstr "" -#: admin/PageVServer.py:455 +#: admin/PageVServer.py:459 msgid "Virtual Server nickname" msgstr "仮想サーバーのニックネーム" -#: admin/PageVServer.py:457 +#: admin/PageVServer.py:461 msgid "Server ID" msgstr "サーバーID" -#: admin/PageVServer.py:463 +#: admin/PageVServer.py:467 msgid "Directory Indexes" msgstr "ディレクトリの一覧表示" -#: admin/PageVServer.py:465 admin/plugins/fullpath.py:119 +#: admin/PageVServer.py:469 admin/plugins/fullpath.py:119 msgid "Paths" msgstr "パス" -#: admin/PageVServer.py:471 +#: admin/PageVServer.py:475 msgid "Neither are in use at the moment." msgstr "" -#: admin/PageVServer.py:476 +#: admin/PageVServer.py:480 #, fuzzy msgid "Keep-alive" msgstr "KeepAliveを許可" -#: admin/PageVServer.py:477 +#: admin/PageVServer.py:481 msgid "Max Upload Size" msgstr "アップロード可能な最大サイズ" -#: admin/PageVServer.py:487 admin/plugins/evhost.py:33 +#: admin/PageVServer.py:491 admin/plugins/evhost.py:33 msgid "Advanced Virtual Hosting" msgstr "拡張バーチャルホスト" -#: admin/PageVServer.py:521 +#: admin/PageVServer.py:525 #, fuzzy msgid "Error Handling hook" msgstr "エラー発生時の処理" -#: admin/PageVServer.py:532 admin/consts.py:233 admin/consts.py:250 +#: admin/PageVServer.py:536 admin/consts.py:232 admin/consts.py:249 msgid "Disabled" msgstr "無効" -#: admin/PageVServer.py:536 +#: admin/PageVServer.py:540 #, fuzzy msgid "Write errors to" msgstr "詳細なエラーを隠す" -#: admin/PageVServer.py:540 admin/PageVServer.py:579 +#: admin/PageVServer.py:544 admin/PageVServer.py:583 msgid "Filename" msgstr "ファイル名" -#: admin/PageVServer.py:542 admin/PageVServer.py:582 +#: admin/PageVServer.py:546 admin/PageVServer.py:586 msgid "Command" msgstr "コマンド" -#: admin/PageVServer.py:548 +#: admin/PageVServer.py:552 msgid "Error Logging" msgstr "エラーのロギング" -#: admin/PageVServer.py:559 +#: admin/PageVServer.py:563 msgid "Format" msgstr "初期化" -#: admin/PageVServer.py:566 +#: admin/PageVServer.py:570 msgid "Write accesses to" msgstr "" -#: admin/PageVServer.py:589 +#: admin/PageVServer.py:593 msgid "Hide" msgstr "隠す" -#: admin/PageVServer.py:589 +#: admin/PageVServer.py:593 msgid "Show macros" msgstr "マクロを表示" -#: admin/PageVServer.py:598 +#: admin/PageVServer.py:602 msgid "Template: " msgstr "ひな形:" -#: admin/PageVServer.py:600 +#: admin/PageVServer.py:604 msgid "Access Logging" msgstr "アクセスログ" -#: admin/PageVServer.py:606 +#: admin/PageVServer.py:610 msgid "Time standard" msgstr "標準時間" -#: admin/PageVServer.py:607 admin/PageVServer.py:687 admin/consts.py:228 +#: admin/PageVServer.py:611 admin/PageVServer.py:696 admin/consts.py:227 msgid "Accept" msgstr "了承" -#: admin/PageVServer.py:607 +#: admin/PageVServer.py:611 msgid "Accept Forwarded IPs" msgstr "" -#: admin/PageVServer.py:610 +#: admin/PageVServer.py:614 msgid "Do not check" msgstr "チェックしない" -#: admin/PageVServer.py:619 +#: admin/PageVServer.py:623 msgid "Logging Options" msgstr "ロギングのオプション" -#: admin/PageVServer.py:655 admin/wizards/ssl_test.py:136 +#: admin/PageVServer.py:659 admin/wizards/ssl_test.py:136 msgid "Certificate" msgstr "証明書" -#: admin/PageVServer.py:656 +#: admin/PageVServer.py:660 msgid "Certificate key" msgstr "証明書のキー" -#: admin/PageVServer.py:661 +#: admin/PageVServer.py:665 msgid "Required SSL/TLS Values" msgstr "" -#: admin/PageVServer.py:666 +#: admin/PageVServer.py:674 +msgid "Ciphersuites" +msgstr "" + +#: admin/PageVServer.py:675 msgid "Ciphers" msgstr "暗号化方式" -#: admin/PageVServer.py:667 +#: admin/PageVServer.py:676 msgid "Prefer" msgstr "" -#: admin/PageVServer.py:667 +#: admin/PageVServer.py:676 #, fuzzy msgid "Server Preference" msgstr "サーバーのトラフィック" -#: admin/PageVServer.py:668 +#: admin/PageVServer.py:677 #, fuzzy msgid "Client Certs. Request" msgstr "接続数/リクエスト数" -#: admin/PageVServer.py:669 +#: admin/PageVServer.py:678 #, fuzzy msgid "Compression" msgstr "圧縮レベル" -#: admin/PageVServer.py:670 +#: admin/PageVServer.py:679 msgid "DH length" msgstr "" -#: admin/PageVServer.py:673 +#: admin/PageVServer.py:682 msgid "CA List" msgstr "CA一覧" -#: admin/PageVServer.py:676 +#: admin/PageVServer.py:685 msgid "Verify Depth" msgstr "" -#: admin/PageVServer.py:682 +#: admin/PageVServer.py:691 #, fuzzy msgid "Advanced Options" msgstr "拡張設定" -#: admin/PageVServer.py:687 +#: admin/PageVServer.py:696 #, fuzzy msgid "Enable HSTS" msgstr "有効" -#: admin/PageVServer.py:690 +#: admin/PageVServer.py:699 msgid "HSTS Max-Age" msgstr "" -#: admin/PageVServer.py:690 +#: admin/PageVServer.py:699 msgid "One year" msgstr "" -#: admin/PageVServer.py:691 +#: admin/PageVServer.py:700 #, fuzzy msgid "Include Subdomains" msgstr "ドメインを送信" -#: admin/PageVServer.py:691 +#: admin/PageVServer.py:700 msgid "Include all" msgstr "" -#: admin/PageVServer.py:697 +#: admin/PageVServer.py:706 msgid "HTTP Strict Transport Security (HSTS)" msgstr "" -#: admin/PageVServer.py:716 +#: admin/PageVServer.py:725 #, fuzzy msgid "Basics" msgstr "Basic認証" -#: admin/PageVServer.py:719 +#: admin/PageVServer.py:728 msgid "Error Handler" msgstr "エラー発生時の処理" @@ -2970,8 +3021,8 @@ msgstr "プロダクト名+プラットフォーム" msgid "Full Server string" msgstr "全サーバー情報" -#: admin/consts.py:51 admin/consts.py:80 admin/consts.py:97 -#: admin/consts.py:111 admin/plugins/mysql.py:45 +#: admin/consts.py:51 admin/consts.py:80 admin/consts.py:97 admin/consts.py:111 +#: admin/plugins/mysql.py:45 msgid "None" msgstr "なし" @@ -3171,192 +3222,192 @@ msgstr "動的" msgid "Automatic" msgstr "自動" -#: admin/consts.py:145 admin/plugins/error_redir.py:35 +#: admin/consts.py:144 admin/plugins/error_redir.py:35 msgid "External" msgstr "外部" -#: admin/consts.py:146 admin/plugins/error_redir.py:34 +#: admin/consts.py:145 admin/plugins/error_redir.py:34 msgid "Internal" msgstr "内部" -#: admin/consts.py:189 admin/plugins/header.py:116 admin/plugins/proxy.py:94 +#: admin/consts.py:188 admin/plugins/header.py:118 admin/plugins/proxy.py:94 #: admin/plugins/proxy.py:144 admin/plugins/redir.py:76 #: admin/plugins/redir.py:106 admin/plugins/request.py:31 #: admin/plugins/url_arg.py:76 admin/plugins/url_arg.py:95 msgid "Regular Expression" msgstr "正規表現" -#: admin/consts.py:191 +#: admin/consts.py:190 msgid "File Exists" msgstr "ファイル存在" -#: admin/consts.py:192 +#: admin/consts.py:191 msgid "HTTP Method" msgstr "HTTPメソッド" -#: admin/consts.py:193 admin/plugins/bind.py:76 admin/plugins/bind.py:129 +#: admin/consts.py:192 admin/plugins/bind.py:76 admin/plugins/bind.py:129 msgid "Incoming IP/Port" msgstr "入力IP/ポート" -#: admin/consts.py:194 +#: admin/consts.py:193 msgid "SSL / TLS" msgstr "" -#: admin/consts.py:195 admin/plugins/fullpath.py:66 +#: admin/consts.py:194 admin/plugins/fullpath.py:66 #: admin/plugins/fullpath.py:101 msgid "Full Path" msgstr "フルパス" -#: admin/consts.py:196 admin/plugins/from.py:71 +#: admin/consts.py:195 admin/plugins/from.py:71 msgid "Connected from" msgstr "接続元" -#: admin/consts.py:197 +#: admin/consts.py:196 #, fuzzy msgid "URL Argument" msgstr "引数" -#: admin/consts.py:198 +#: admin/consts.py:197 msgid "GeoIP" msgstr "" -#: admin/consts.py:202 +#: admin/consts.py:201 msgid "Match Nickname" msgstr "ニックネームに一致" -#: admin/consts.py:203 +#: admin/consts.py:202 msgid "Wildcards" msgstr "ワイルドカード" -#: admin/consts.py:205 +#: admin/consts.py:204 msgid "Server IP" msgstr "サーバーのIP" -#: admin/consts.py:209 admin/consts.py:255 +#: admin/consts.py:208 admin/consts.py:254 msgid "Not set" msgstr "設定なし" -#: admin/consts.py:210 +#: admin/consts.py:209 msgid "Already expired on 1970" msgstr "期限を1970にする" -#: admin/consts.py:211 +#: admin/consts.py:210 msgid "Do not expire until 2038" msgstr "期限を2038年にして定めない" -#: admin/consts.py:212 +#: admin/consts.py:211 msgid "Custom value" msgstr "カスタム値" -#: admin/consts.py:216 +#: admin/consts.py:215 msgid "No TLS/SSL" msgstr "TLS/SSLなし" -#: admin/consts.py:217 +#: admin/consts.py:216 msgid "OpenSSL / libssl" msgstr "" -#: admin/consts.py:221 admin/util.py:91 +#: admin/consts.py:220 admin/util.py:91 msgid "Off" msgstr "切り" -#: admin/consts.py:222 +#: admin/consts.py:221 msgid "Enhanced Virtual Hosting" msgstr "仮想ホスティングを強化" -#: admin/consts.py:226 +#: admin/consts.py:225 msgid "Skip" msgstr "スキップ" -#: admin/consts.py:227 +#: admin/consts.py:226 msgid "Tolerate" msgstr "" -#: admin/consts.py:229 +#: admin/consts.py:228 msgid "Require" msgstr "必須" -#: admin/consts.py:234 +#: admin/consts.py:233 msgid "RRDtool graphs" msgstr "RRDtoolグラフ" -#: admin/consts.py:238 +#: admin/consts.py:237 msgid "Local time" msgstr "ローカル時間" -#: admin/consts.py:239 +#: admin/consts.py:238 msgid "UTC: Coordinated Universal Time" msgstr "UTC:協定された世界時間" -#: admin/consts.py:243 +#: admin/consts.py:242 msgid "JSON" msgstr "" -#: admin/consts.py:244 +#: admin/consts.py:243 msgid "Python" msgstr "" -#: admin/consts.py:245 admin/wizards/List.py:91 +#: admin/consts.py:244 admin/wizards/List.py:91 msgid "PHP" msgstr "" -#: admin/consts.py:246 +#: admin/consts.py:245 msgid "Ruby" msgstr "" -#: admin/consts.py:251 +#: admin/consts.py:250 msgid "POST tracker" msgstr "POSTトラッカー" -#: admin/consts.py:256 +#: admin/consts.py:255 msgid "Public" msgstr "パブリック" -#: admin/consts.py:257 +#: admin/consts.py:256 msgid "Private" msgstr "プライベート" -#: admin/consts.py:258 +#: admin/consts.py:257 msgid "No Cache" msgstr "キャッシュなし" -#: admin/consts.py:263 +#: admin/consts.py:262 msgid "0 - No compression" msgstr "0 - 無圧縮" -#: admin/consts.py:264 +#: admin/consts.py:263 msgid "1" msgstr "" -#: admin/consts.py:265 +#: admin/consts.py:264 msgid "2" msgstr "" -#: admin/consts.py:266 +#: admin/consts.py:265 msgid "3" msgstr "" -#: admin/consts.py:267 +#: admin/consts.py:266 msgid "4" msgstr "" -#: admin/consts.py:268 +#: admin/consts.py:267 msgid "5" msgstr "" -#: admin/consts.py:269 +#: admin/consts.py:268 msgid "6" msgstr "" -#: admin/consts.py:270 +#: admin/consts.py:269 msgid "7" msgstr "" -#: admin/consts.py:271 +#: admin/consts.py:270 msgid "8" msgstr "" -#: admin/consts.py:272 +#: admin/consts.py:271 msgid "9 - Max compression" msgstr "9 - 最大圧縮" @@ -3538,66 +3589,66 @@ msgstr "" msgid "Only listing" msgstr "一覧表示のみ" -#: admin/plugins/dirlist.py:49 admin/plugins/dirlist.py:50 #: admin/plugins/dirlist.py:51 admin/plugins/dirlist.py:52 #: admin/plugins/dirlist.py:53 admin/plugins/dirlist.py:54 +#: admin/plugins/dirlist.py:55 admin/plugins/dirlist.py:56 #: admin/plugins/redir.py:105 msgid "Show" msgstr "表示" -#: admin/plugins/dirlist.py:49 +#: admin/plugins/dirlist.py:51 msgid "Show Size" msgstr "サイズを表示" -#: admin/plugins/dirlist.py:50 +#: admin/plugins/dirlist.py:52 msgid "Show Date" msgstr "日付を表示" -#: admin/plugins/dirlist.py:51 +#: admin/plugins/dirlist.py:53 msgid "Show User" msgstr "ユーザを表示" -#: admin/plugins/dirlist.py:52 +#: admin/plugins/dirlist.py:54 msgid "Show Group" msgstr "グループを表示" -#: admin/plugins/dirlist.py:53 +#: admin/plugins/dirlist.py:55 msgid "Show Backup files" msgstr "バックアップを表示" -#: admin/plugins/dirlist.py:54 +#: admin/plugins/dirlist.py:56 msgid "Show Hidden files" msgstr "隠されたファイルを表示" -#: admin/plugins/dirlist.py:55 +#: admin/plugins/dirlist.py:58 admin/plugins/file.py:44 msgid "Allow symbolic links" msgstr "シンボリックリンクを表示" -#: admin/plugins/dirlist.py:56 +#: admin/plugins/dirlist.py:59 msgid "Redirect symbolic links" msgstr "シンボリックリンクのリダイレクト先" -#: admin/plugins/dirlist.py:60 +#: admin/plugins/dirlist.py:63 msgid "Listing" msgstr "一欄" -#: admin/plugins/dirlist.py:65 +#: admin/plugins/dirlist.py:68 msgid "Theme" msgstr "テーマ" -#: admin/plugins/dirlist.py:66 +#: admin/plugins/dirlist.py:69 msgid "Icons dir" msgstr "アイコンディレクトリ" -#: admin/plugins/dirlist.py:67 +#: admin/plugins/dirlist.py:70 msgid "Notice files" msgstr "注意書きファイル" -#: admin/plugins/dirlist.py:68 +#: admin/plugins/dirlist.py:71 msgid "Hidden files" msgstr "隠されたファイル" -#: admin/plugins/dirlist.py:72 +#: admin/plugins/dirlist.py:75 msgid "Theming" msgstr "テーマ" @@ -3727,7 +3778,7 @@ msgstr "FastCGIの詳細" msgid "Enables an internal I/O cache that improves performance." msgstr "" -#: admin/plugins/file.py:45 +#: admin/plugins/file.py:49 msgid "File Sending" msgstr "ファイルの送信" @@ -3813,24 +3864,24 @@ msgid "" "header entry." msgstr "" -#: admin/plugins/header.py:65 +#: admin/plugins/header.py:67 msgid "Matches a Regular Expression" msgstr "正規表現にマッチ" -#: admin/plugins/header.py:66 +#: admin/plugins/header.py:68 msgid "Is Provided" msgstr "" -#: admin/plugins/header.py:104 +#: admin/plugins/header.py:106 msgid "Full header" msgstr "全ヘッダー" -#: admin/plugins/header.py:107 +#: admin/plugins/header.py:109 #, fuzzy msgid "Complete Header" msgstr "ヘッダーを隠す" -#: admin/plugins/header.py:154 +#: admin/plugins/header.py:156 #, python-format msgid "Header %(header)s is provided" msgstr "" @@ -3958,6 +4009,7 @@ msgid "Database name containing the user/password pair list." msgstr "" #: admin/plugins/mysql.py:41 +#, python-brace-format msgid "" "SQL command to execute. ${user} is replaced with the user name, and " "${passwd} is replaced with the user supplied password." @@ -4367,20 +4419,16 @@ msgstr "新規ワイルドカード" msgid "Accepted Domains" msgstr "許可ドメイン" -#: admin/server.py:68 +#: admin/server.py:70 #, python-format msgid "Server %(version)s running.. PID=%(pid)d Port=%(scgi_port)s" msgstr "" -#: admin/server.py:70 +#: admin/server.py:72 #, python-format msgid "Server %(version)s running.. PID=%(pid)d Socket=%(scgi_port)s" msgstr "" -#: admin/server.py:144 -msgid "Incorrect parameters: PORT CONFIG_FILE" -msgstr "" - #: admin/util.py:91 msgid "On" msgstr "入" @@ -4774,18 +4822,16 @@ msgstr "サービスを実行しているホストのポートを入力してく #: admin/wizards/alfresco.py:45 admin/wizards/coldfusion.py:46 #: admin/wizards/concrete5.py:47 admin/wizards/django.py:44 #: admin/wizards/glassfish.py:45 admin/wizards/mailman.py:48 -#: admin/wizards/mono.py:46 admin/wizards/php.py:43 -#: admin/wizards/symfony.py:51 admin/wizards/uwsgi.py:61 -#: admin/wizards/zend.py:47 +#: admin/wizards/mono.py:46 admin/wizards/php.py:43 admin/wizards/symfony.py:51 +#: admin/wizards/uwsgi.py:61 admin/wizards/zend.py:47 msgid "Host name of the virtual server that is about to be created." msgstr "" #: admin/wizards/alfresco.py:46 admin/wizards/coldfusion.py:45 #: admin/wizards/concrete5.py:46 admin/wizards/django.py:43 #: admin/wizards/glassfish.py:46 admin/wizards/mailman.py:47 -#: admin/wizards/mono.py:45 admin/wizards/php.py:42 -#: admin/wizards/symfony.py:50 admin/wizards/uwsgi.py:60 -#: admin/wizards/zend.py:46 +#: admin/wizards/mono.py:45 admin/wizards/php.py:42 admin/wizards/symfony.py:50 +#: admin/wizards/uwsgi.py:60 admin/wizards/zend.py:46 msgid "New Virtual Server Details" msgstr "新規仮想サーバーの詳細" @@ -5673,3 +5719,28 @@ msgstr "" #: admin/wizards/zend.py:49 msgid "Web directory where you want Zend to be accessible. (Example: /zend)" msgstr "" + +#~ msgid "Allow SSL v2" +#~ msgstr "SSL v2を許可" + +#, fuzzy +#~ msgid "Disable %s" +#~ msgstr "無効" + +#~ msgid "Mailing List Subscription" +#~ msgstr "メーリングリストの申し込み" + +#~ msgid "Optionally provide your name" +#~ msgstr "必要に応じて自分の名前を提供する" + +#~ msgid "Purchase commercial support" +#~ msgstr "有償サポートを受ける" + +#~ msgid "Subscribe" +#~ msgstr "通知" + +#~ msgid "Your email address" +#~ msgstr "あなたのメールアドレス" + +#~ msgid "Your name" +#~ msgstr "あなたの名前" diff --git a/po/admin/nl.po b/po/admin/nl.po index 9ee553c48..fc45a6032 100644 --- a/po/admin/nl.po +++ b/po/admin/nl.po @@ -5,13 +5,13 @@ # msgid "" msgstr "" -"Project-Id-Version: cherokee '0.99.10'\n" -"Report-Msgid-Bugs-To: http://bugs.cherokee-project.com/\n" -"POT-Creation-Date: 2014-01-04 00:54+0100\n" +"Project-Id-Version: cherokee 1.2.104\n" +"Report-Msgid-Bugs-To: https://github.com/cherokee/webserver/issues\n" +"POT-Creation-Date: 2021-03-26 19:04+0100\n" "PO-Revision-Date: 2011-10-13 19:26+0100\n" "Last-Translator: Stefan de Konink \n" "Language-Team: none\n" -"Language: \n" +"Language: nl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -105,7 +105,7 @@ msgstr "Informatie Bronnen" msgid "Assign Information Sources" msgstr "Koppel Informatie Bron" -#: admin/Balancer.py:136 admin/PageIndex.py:204 admin/PageRule.py:112 +#: admin/Balancer.py:136 admin/PageIndex.py:182 admin/PageRule.py:112 #: admin/plugins/bind.py:69 admin/plugins/bind.py:121 #: admin/plugins/custom_error.py:41 admin/plugins/method.py:31 msgid "Choose" @@ -140,17 +140,17 @@ msgstr "Kan de configuratie niet kopieren naar" #: admin/CTK/CTK/Druid.py:216 admin/CTK/CTK/Druid.py:224 #: admin/CTK/CTK/Druid.py:232 admin/CTK/CTK/Druid.py:238 admin/Icons.py:362 #: admin/Mime.py:110 admin/PageGeneral.py:289 admin/PageGeneral.py:317 -#: admin/PageIndex.py:232 admin/PageIndex.py:308 admin/PageRule.py:225 -#: admin/PageRule.py:276 admin/PageRule.py:302 admin/PageSource.py:225 -#: admin/PageSource.py:411 admin/PageSource.py:428 admin/PageSource.py:442 -#: admin/PageVServers.py:215 admin/PageVServers.py:252 -#: admin/PageVServers.py:281 admin/plugins/redir.py:120 +#: admin/PageIndex.py:246 admin/PageRule.py:225 admin/PageRule.py:276 +#: admin/PageRule.py:302 admin/PageSource.py:225 admin/PageSource.py:411 +#: admin/PageSource.py:428 admin/PageSource.py:442 admin/PageVServers.py:215 +#: admin/PageVServers.py:252 admin/PageVServers.py:281 +#: admin/plugins/redir.py:120 msgid "Cancel" msgstr "Annuleer" #: admin/CTK/CTK/Dialog.py:165 admin/CTK/CTK/Dialog.py:272 #: admin/CTK/CTK/Druid.py:243 admin/PageException.py:89 -#: admin/PageException.py:93 admin/PageGeneral.py:283 admin/PageIndex.py:277 +#: admin/PageException.py:93 admin/PageGeneral.py:283 admin/PageIndex.py:215 #: admin/PageSource.py:402 admin/plugins/error_redir.py:110 msgid "Close" msgstr "Sluit" @@ -188,14 +188,14 @@ msgstr "Laden" #: admin/CTK/CTK/Image.py:99 admin/CgiBase.py:69 admin/CgiBase.py:71 #: admin/CgiBase.py:124 admin/CgiBase.py:125 admin/CgiBase.py:126 #: admin/CgiBase.py:127 admin/CgiBase.py:128 admin/Graph.py:125 -#: admin/PageAdvanced.py:150 admin/PageEntry.py:150 admin/PageEntry.py:159 -#: admin/PageGeneral.py:193 admin/PageSource.py:296 -#: admin/plugins/dirlist.py:56 admin/plugins/exists.py:72 -#: admin/plugins/exists.py:77 admin/plugins/exists.py:78 -#: admin/plugins/exists.py:79 admin/plugins/exists.py:109 -#: admin/plugins/exists.py:115 admin/plugins/exists.py:116 -#: admin/plugins/exists.py:117 admin/plugins/file.py:40 -#: admin/plugins/ldap.py:53 admin/plugins/streaming.py:43 +#: admin/PageAdvanced.py:198 admin/PageEntry.py:150 admin/PageEntry.py:159 +#: admin/PageGeneral.py:193 admin/PageSource.py:296 admin/plugins/dirlist.py:59 +#: admin/plugins/exists.py:72 admin/plugins/exists.py:77 +#: admin/plugins/exists.py:78 admin/plugins/exists.py:79 +#: admin/plugins/exists.py:109 admin/plugins/exists.py:115 +#: admin/plugins/exists.py:116 admin/plugins/exists.py:117 +#: admin/plugins/file.py:42 admin/plugins/ldap.py:53 +#: admin/plugins/streaming.py:43 msgid "Enabled" msgstr "Geactiveerd" @@ -212,11 +212,12 @@ msgstr "Vorige" msgid "Optional" msgstr "Optioneel" -#: admin/CTK/CTK/ToggleButton.py:154 +#: admin/CTK/CTK/ToggleButton.py:154 admin/PageAdvanced.py:245 +#: admin/PageAdvanced.py:258 msgid "Disable" msgstr "Zet uit" -#: admin/CTK/CTK/ToggleButton.py:155 admin/PageVServer.py:669 +#: admin/CTK/CTK/ToggleButton.py:155 admin/PageVServer.py:678 #: admin/wizards/flcache.py:157 msgid "Enable" msgstr "Activeer" @@ -264,7 +265,7 @@ msgstr "" "Moet de afhandelaar de X-Real-IP kopregel lezen en deze het gebruiken in " "REMOTE_ADDR." -#: admin/CgiBase.py:40 admin/PageVServer.py:70 +#: admin/CgiBase.py:40 admin/PageVServer.py:74 msgid "" "Accept all the X-Real-IP and X-Forwarded-For headers. WARNING: Turn it on " "only if you are centain of what you are doing." @@ -285,11 +286,11 @@ msgstr "" msgid "Read X-Real-IP" msgstr "Lees X-Real-IP" -#: admin/CgiBase.py:71 admin/PageVServer.py:610 +#: admin/CgiBase.py:71 admin/PageVServer.py:614 msgid "Don't check origin" msgstr "Controleer bron niet" -#: admin/CgiBase.py:73 admin/PageVServer.py:613 +#: admin/CgiBase.py:73 admin/PageVServer.py:617 msgid "Accept from Hosts" msgstr "Accepteer van Computers" @@ -331,7 +332,7 @@ msgid "Allow X-Sendfile" msgstr "Sta X-Sendfile toe" #: admin/CgiBase.py:128 admin/plugins/exists.py:77 admin/plugins/exists.py:115 -#: admin/plugins/file.py:40 +#: admin/plugins/file.py:42 msgid "Use I/O cache" msgstr "Gebruik I/O archief" @@ -423,7 +424,7 @@ msgid "" msgstr "Worden verkeers statistieken voor deze server wel of niet verzameld." #: admin/Graph.py:118 admin/PageEntry.py:538 admin/PageSource.py:257 -#: admin/PageStatus.py:70 admin/PageVServer.py:731 admin/PageVServers.py:210 +#: admin/PageStatus.py:70 admin/PageVServer.py:740 admin/PageVServers.py:210 msgid "Unknown" msgstr "Onbekend" @@ -435,7 +436,7 @@ msgstr "Verzamel Statistieken" msgid "Allows to specify an alternative Document Root path." msgstr "Staat toe om een alternatieve hoofdmap op te geven." -#: admin/Handler.py:43 admin/PageEntry.py:523 admin/PageVServer.py:462 +#: admin/Handler.py:43 admin/PageEntry.py:523 admin/PageVServer.py:466 #: admin/PageVServers.py:128 admin/wizards/django.py:191 #: admin/wizards/mono.py:199 admin/wizards/php.py:39 admin/wizards/php.py:342 #: admin/wizards/uwsgi.py:267 @@ -447,7 +448,7 @@ msgid "Extension List" msgstr "Extensie lijst" #: admin/Icons.py:129 admin/Icons.py:328 admin/Mime.py:96 admin/Mime.py:131 -#: admin/consts.py:188 admin/plugins/extensions.py:61 +#: admin/consts.py:187 admin/plugins/extensions.py:61 #: admin/wizards/flcache.py:141 msgid "Extensions" msgstr "Extenties" @@ -468,12 +469,13 @@ msgstr "Bestanden" msgid "Add New File" msgstr "Voeg Nieuw Bestand Toe" -#: admin/Icons.py:197 admin/Icons.py:329 admin/Rule.py:174 admin/consts.py:42 -#: admin/consts.py:128 admin/consts.py:262 +#: admin/Icons.py:197 admin/Icons.py:329 admin/PageVServer.py:674 +#: admin/PageVServer.py:675 admin/Rule.py:174 admin/consts.py:42 +#: admin/consts.py:128 admin/consts.py:261 msgid "Default" msgstr "Standaard" -#: admin/Icons.py:198 admin/Icons.py:330 admin/consts.py:187 +#: admin/Icons.py:198 admin/Icons.py:330 admin/consts.py:186 #: admin/plugins/directory.py:31 msgid "Directory" msgstr "Map" @@ -486,7 +488,7 @@ msgstr "Ga naar Ouder" msgid "Modify" msgstr "Verander" -#: admin/Icons.py:214 admin/PageAdvanced.py:168 admin/PageAdvanced.py:192 +#: admin/Icons.py:214 admin/PageAdvanced.py:216 admin/PageAdvanced.py:316 msgid "Special Files" msgstr "Speciale Bestanden" @@ -592,7 +594,7 @@ msgstr "Bewaar" msgid "Home" msgstr "Begin" -#: admin/Page.py:155 admin/PageAdvanced.py:150 admin/PageIndex.py:84 +#: admin/Page.py:155 admin/PageAdvanced.py:198 admin/PageIndex.py:62 #: admin/PageStatus.py:40 admin/PageStatus.py:112 msgid "Status" msgstr "Status" @@ -609,7 +611,7 @@ msgstr "vServers" msgid "Sources" msgstr "Bronnen" -#: admin/Page.py:159 admin/PageAdvanced.py:97 admin/PageAdvanced.py:198 +#: admin/Page.py:159 admin/PageAdvanced.py:145 admin/PageAdvanced.py:322 msgid "Advanced" msgstr "Geavanceerd" @@ -621,7 +623,19 @@ msgstr "Hulp" msgid "Updating..." msgstr "Bijwerken..." -#: admin/PageAdvanced.py:64 +#: admin/PageAdvanced.py:56 +msgid "" +"

WARNING: The SSL/TLS back-end supports more recent\n" +"versions of TLS protocols, which are not recognized by Cherokee. Please " +"check\n" +"for latest Cherokee updates or report this issue. As a temporary workaround " +"please\n" +"set 'Max. TLS protocol version' to the maximum TLS protocol version " +"supported by\n" +"Cherokee.

Following unknown TLS protocols have been found:" +msgstr "" + +#: admin/PageAdvanced.py:94 msgid "" "

WARNING: This section contains advanced\n" "configuration parameters. Changing things is not recommended unless\n" @@ -631,17 +645,17 @@ msgstr "" "configuratie parameter. Het veranderen ervan wordt niet geadviseerd\n" "tenzij je weet wat je aan het doen bent.

" -#: admin/PageAdvanced.py:68 +#: admin/PageAdvanced.py:98 msgid "Defines which thread policy the OS should apply to the server." msgstr "" "Definieert welke thread beleid het besturingssysteem moet gebruiken voor de " "server." -#: admin/PageAdvanced.py:69 +#: admin/PageAdvanced.py:99 msgid "If empty, Cherokee will calculate a default number." msgstr "Wanneer leeg zal Cherokee het standaard nummer berekenen." -#: admin/PageAdvanced.py:70 +#: admin/PageAdvanced.py:100 msgid "" "It defines how many file descriptors the server should handle. Default is " "the number showed by ulimit -n" @@ -649,22 +663,22 @@ msgstr "" "Het definieert hoeveel bestands beschrijvers de server moet afhandelen. Het " "standaard aantal wordt getoond met ulimit -n" -#: admin/PageAdvanced.py:71 +#: admin/PageAdvanced.py:101 msgid "Allows to choose the internal file descriptor polling method." msgstr "Staat toe om de interne bestandsbeschrijven polling methode te kiezen." -#: admin/PageAdvanced.py:72 +#: admin/PageAdvanced.py:102 msgid "Minimum size of a file to use sendfile(). Default: 32768 Bytes." msgstr "" "Minimum grootte van een bestand om sendfile() te gebruiken. Standaard: 32768 " "Bytes." -#: admin/PageAdvanced.py:73 +#: admin/PageAdvanced.py:103 msgid "Maximum size of a file to use sendfile(). Default: 2 GB." msgstr "" "Maximum grootte van een bestand om sendfile() te gebruiken. Standaard: 2 GB." -#: admin/PageAdvanced.py:74 +#: admin/PageAdvanced.py:104 msgid "" "Name a program that will be called if, by some reason, the server fails. " "Default: cherokee-panic." @@ -672,17 +686,17 @@ msgstr "" "Naar van het programma dat wordt uitgevoerd als, voor wat voor reden dan " "ook, de webserver faalt. Standaard: cherokee-panic." -#: admin/PageAdvanced.py:75 +#: admin/PageAdvanced.py:105 msgid "Path of the PID file. If empty, the file will not be created." msgstr "" "Pad naar het PID bestand. Het bestand wordt niet gemaakt als deze niet is " "opgegeven." -#: admin/PageAdvanced.py:76 +#: admin/PageAdvanced.py:106 msgid "Max. length of the incoming connection queue." msgstr "Max. lengte van de inkomende connectie rij." -#: admin/PageAdvanced.py:77 +#: admin/PageAdvanced.py:107 msgid "" "Set the number of how many internal connections can be held for reuse by " "each thread. Default: 20." @@ -690,7 +704,7 @@ msgstr "" "Zet het aantal interne connecties dat kan worden hergebruikt per draad. " "Standaard: 20." -#: admin/PageAdvanced.py:78 +#: admin/PageAdvanced.py:108 msgid "" "Sets the number of seconds between log consolidations (flushes). Default: 10 " "seconds." @@ -698,11 +712,11 @@ msgstr "" "Zet het aantal seconde tussen het wegschrijven van het logboek. Standaard: " "10 seconden." -#: admin/PageAdvanced.py:79 +#: admin/PageAdvanced.py:109 msgid "Time lapse (in seconds) between Nonce cache clean ups." msgstr "Tijdspanne (in seconden) tussen het Nonce cache opruimen." -#: admin/PageAdvanced.py:80 +#: admin/PageAdvanced.py:110 msgid "" "Enables the server-wide keep-alive support. It increases the performance. It " "is usually set on." @@ -710,7 +724,7 @@ msgstr "" "Activeer server-brede blijf-inleven ondersteuning. Het verbetert de " "snelheid, daarom staat het gewoonlijk aan." -#: admin/PageAdvanced.py:81 +#: admin/PageAdvanced.py:111 msgid "" "Maximum number of HTTP requests that can be served by each keepalive " "connection." @@ -718,30 +732,30 @@ msgstr "" "Maximum aantal HTTP aanvragen dat kan worden afgehandeld met een blijf-" "inleven verbinding." -#: admin/PageAdvanced.py:82 +#: admin/PageAdvanced.py:112 msgid "" "Allows the server to use Chunked encoding to try to keep Keep-Alive enabled." msgstr "" "Staat de server toe om Chunked encoding toe te passen om de verbinding in " "leven te houden." -#: admin/PageAdvanced.py:83 +#: admin/PageAdvanced.py:113 msgid "Activate or deactivate the I/O cache globally." msgstr "Activeer of deactiveer het I/O archief globaal." -#: admin/PageAdvanced.py:84 +#: admin/PageAdvanced.py:114 msgid "Number of pages that the cache should handle." msgstr "Aantal pagina's dat het archief moet afhandelen." -#: admin/PageAdvanced.py:85 +#: admin/PageAdvanced.py:115 msgid "Files under this size (in bytes) will not be cached." msgstr "Bestanden onder deze grootte (in bytes) worden niet gecached." -#: admin/PageAdvanced.py:86 +#: admin/PageAdvanced.py:116 msgid "Files over this size (in bytes) will not be cached." msgstr "Bestanden boven deze grootte (in bytes) worden niet gecached." -#: admin/PageAdvanced.py:87 +#: admin/PageAdvanced.py:117 msgid "" "How long (in seconds) the file information should last cached without " "refreshing it." @@ -749,169 +763,228 @@ msgstr "" "Hoe lang (in seconden) de bestandsinformatie wordt gearchiveerd zonder het " "te verversen." -#: admin/PageAdvanced.py:88 +#: admin/PageAdvanced.py:118 msgid "How long (in seconds) the file content should last cached." msgstr "Hoe lang (in seconden) de bestand inhoud gearchiveerd moet blijven." -#: admin/PageAdvanced.py:89 +#: admin/PageAdvanced.py:119 msgid "Path to a Diffie Hellman (DH) parameters PEM file: 512 bits." msgstr "Pad naar een Diffie Hellman (DH) parameters PEM bestand: 512bits." -#: admin/PageAdvanced.py:90 +#: admin/PageAdvanced.py:120 msgid "Path to a Diffie Hellman (DH) parameters PEM file: 1024 bits." msgstr "Pad naar een Diffie Hellman (DH) parameters PEM bestand: 1024bits." -#: admin/PageAdvanced.py:91 +#: admin/PageAdvanced.py:121 msgid "Path to a Diffie Hellman (DH) parameters PEM file: 2048 bits." msgstr "Pad naar een Diffie Hellman (DH) parameters PEM bestand: 2048bits." -#: admin/PageAdvanced.py:92 +#: admin/PageAdvanced.py:122 msgid "Path to a Diffie Hellman (DH) parameters PEM file: 4096 bits." msgstr "Pad naar een Diffie Hellman (DH) parameters PEM bestand: 4096bits." -#: admin/PageAdvanced.py:93 +#: admin/PageAdvanced.py:123 +msgid "Your Cherokee Web Server does not support SSL/TLS encryption." +msgstr "" + +#: admin/PageAdvanced.py:124 msgid "Timeout for the TLS/SSL handshake. Default: 15 seconds." msgstr "Uitvaltijd voor de TLS/SSL begroeting. Standaard: 15 seconden." -#: admin/PageAdvanced.py:94 +#: admin/PageAdvanced.py:125 +msgid "Beware: it is vulnerable. You should disable SSLv2." +msgstr "" + +#: admin/PageAdvanced.py:126 +msgid "Beware: it is vulnerable. You should disable SSLv3." +msgstr "" + +#: admin/PageAdvanced.py:127 +msgid "TLSv1 is deprecated" +msgstr "" + +#: admin/PageAdvanced.py:128 +msgid "TLSv1.1 is deprecated" +msgstr "" + +#: admin/PageAdvanced.py:129 admin/PageAdvanced.py:130 +msgid " " +msgstr "" + +#: admin/PageAdvanced.py:131 msgid "" -"Allow clients to use SSL version 2 - Beware: it is vulnerable. (Default: No)" +"The following options work in combination with above min/max TLS protocol " +"version settings. They are deprecated, only set the minimum and maximum " +"supported protocol versions instead." +msgstr "" + +#: admin/PageAdvanced.py:133 +msgid "" +"Minimum required TLS protocol version from clients (Default: auto-configured " +"by libssl)" +msgstr "" + +#: admin/PageAdvanced.py:134 +msgid "" +"Maximum supported TLS protocol version (Default: auto-configured by libssl)" msgstr "" -"Sta clienten toe om SSL versie 2 te gebruiken - Pas op: het is onveilig. " -"(Standaard: Nee)" -#: admin/PageAdvanced.py:119 admin/PageAdvanced.py:121 +#: admin/PageAdvanced.py:167 admin/PageAdvanced.py:169 msgid "Allowed" msgstr "Sta toe" -#: admin/PageAdvanced.py:119 +#: admin/PageAdvanced.py:167 msgid "Keep Alive" msgstr "Blijf In Leven" -#: admin/PageAdvanced.py:120 +#: admin/PageAdvanced.py:168 msgid "Max keepalive reqs" msgstr "Maximum blijfinleven aanvragen" -#: admin/PageAdvanced.py:121 +#: admin/PageAdvanced.py:169 msgid "Chunked Encoding" msgstr "Blokken Geëncodeerd" -#: admin/PageAdvanced.py:122 +#: admin/PageAdvanced.py:170 msgid "Polling Method" msgstr "Polling methode" -#: admin/PageAdvanced.py:123 +#: admin/PageAdvanced.py:171 msgid "Sendfile min size" msgstr "Sendfile min grootte" -#: admin/PageAdvanced.py:124 +#: admin/PageAdvanced.py:172 msgid "Sendfile max size" msgstr "Sendfile max grootte" -#: admin/PageAdvanced.py:126 admin/PageAdvanced.py:189 +#: admin/PageAdvanced.py:174 admin/PageAdvanced.py:313 msgid "Connections" msgstr "Verbindingen" -#: admin/PageAdvanced.py:134 +#: admin/PageAdvanced.py:182 msgid "Thread Number" msgstr "Thread Aantal" -#: admin/PageAdvanced.py:135 +#: admin/PageAdvanced.py:183 msgid "Thread Policy" msgstr "Thread Beleid" -#: admin/PageAdvanced.py:136 +#: admin/PageAdvanced.py:184 msgid "File descriptors" msgstr "Bestands beschrijvers" -#: admin/PageAdvanced.py:137 +#: admin/PageAdvanced.py:185 msgid "Listening queue length" msgstr "Luister rij lengte" -#: admin/PageAdvanced.py:138 admin/plugins/proxy.py:239 +#: admin/PageAdvanced.py:186 admin/plugins/proxy.py:239 msgid "Reuse connections" msgstr "Hergebruik verbindingen" -#: admin/PageAdvanced.py:139 +#: admin/PageAdvanced.py:187 msgid "Log flush time" msgstr "Log schrijf tijd" -#: admin/PageAdvanced.py:140 +#: admin/PageAdvanced.py:188 msgid "Nonces clean up time" msgstr "Nonce opruimtijd" -#: admin/PageAdvanced.py:142 admin/PageAdvanced.py:190 +#: admin/PageAdvanced.py:190 admin/PageAdvanced.py:314 msgid "Resources" msgstr "Bronnen" -#: admin/PageAdvanced.py:151 +#: admin/PageAdvanced.py:199 msgid "Max pages" msgstr "Maximum paginas" -#: admin/PageAdvanced.py:152 +#: admin/PageAdvanced.py:200 msgid "File Min Size" msgstr "Bestand Min grootte" -#: admin/PageAdvanced.py:153 +#: admin/PageAdvanced.py:201 msgid "File Max Size" msgstr "Bestand Max grootte" -#: admin/PageAdvanced.py:154 +#: admin/PageAdvanced.py:202 msgid "Lasting: stat" msgstr "Duur: stat" -#: admin/PageAdvanced.py:155 +#: admin/PageAdvanced.py:203 msgid "Lasting: mmap" msgstr "Duut: mmap" -#: admin/PageAdvanced.py:157 admin/PageAdvanced.py:191 +#: admin/PageAdvanced.py:205 admin/PageAdvanced.py:315 msgid "I/O cache" msgstr "I/O archief" -#: admin/PageAdvanced.py:165 +#: admin/PageAdvanced.py:213 msgid "Panic action" msgstr "Paniek actie" -#: admin/PageAdvanced.py:166 +#: admin/PageAdvanced.py:214 msgid "PID file" msgstr "PID bestand" -#: admin/PageAdvanced.py:176 admin/PageEntry.py:84 admin/PageVServer.py:476 -#: admin/plugins/common.py:42 admin/plugins/common.py:43 -#: admin/plugins/dirlist.py:55 admin/plugins/proxy.py:240 -msgid "Allow" -msgstr "Sta toe" +#: admin/PageAdvanced.py:245 admin/PageAdvanced.py:247 +#: admin/PageAdvanced.py:258 admin/PageAdvanced.py:260 +#, fuzzy +msgid "Disable " +msgstr "Zet uit" + +#: admin/PageAdvanced.py:247 +msgid "Protocol deacrivated" +msgstr "" + +#: admin/PageAdvanced.py:247 +msgid "Protocol not supported" +msgstr "" + +#: admin/PageAdvanced.py:260 +msgid "Protocol deactivated" +msgstr "" + +#: admin/PageAdvanced.py:262 +msgid "Turn off selected TLS Protocols (Deprecated)" +msgstr "" + +#: admin/PageAdvanced.py:270 admin/PageAdvanced.py:271 +msgid "auto-configured" +msgstr "" + +#: admin/PageAdvanced.py:285 +msgid "Min. TLS protocol version" +msgstr "" -#: admin/PageAdvanced.py:176 -msgid "Allow SSL v2" -msgstr "Sta SSL v2 toe" +#: admin/PageAdvanced.py:290 +msgid "Max. TLS protocol version" +msgstr "" -#: admin/PageAdvanced.py:177 +#: admin/PageAdvanced.py:291 msgid "Handshake Timeout" msgstr "Begroetings Uitvaltijd" -#: admin/PageAdvanced.py:178 +#: admin/PageAdvanced.py:292 msgid "DH parameters: 512 bits" msgstr "DH parameters: 512 bits" -#: admin/PageAdvanced.py:179 +#: admin/PageAdvanced.py:293 msgid "DH parameters: 1024 bits" msgstr "DH parameters: 1024 bits" -#: admin/PageAdvanced.py:180 +#: admin/PageAdvanced.py:294 msgid "DH parameters: 2048 bits" msgstr "DH parameters: 2048 bits" -#: admin/PageAdvanced.py:181 +#: admin/PageAdvanced.py:295 msgid "DH parameters: 4096 bits" msgstr "DH parameters: 4096 bits" -#: admin/PageAdvanced.py:183 admin/PageAdvanced.py:193 -#: admin/PageGeneral.py:239 admin/plugins/bind.py:92 +#: admin/PageAdvanced.py:296 admin/PageAdvanced.py:317 admin/PageGeneral.py:239 +#: admin/plugins/bind.py:92 msgid "TLS" msgstr "TLS" -#: admin/PageAdvanced.py:199 +#: admin/PageAdvanced.py:323 msgid "Advanced Configuration" msgstr "Geavanceerde Configuratie" @@ -1016,7 +1089,7 @@ msgstr "GZip encoder" msgid "Deflate encoder" msgstr "Deflate encoder" -#: admin/PageEntry.py:78 admin/PageEntry.py:173 admin/PageVServer.py:149 +#: admin/PageEntry.py:78 admin/PageEntry.py:173 admin/PageVServer.py:153 msgid "Authentication" msgstr "Authenticatie" @@ -1026,7 +1099,13 @@ msgstr "Authenticatie modules" #: admin/PageEntry.py:83 admin/PageEntry.py:89 msgid "Leave unset" -msgstr "Laat niet ingesteld" +msgstr "" + +#: admin/PageEntry.py:84 admin/PageVServer.py:480 admin/plugins/common.py:42 +#: admin/plugins/common.py:43 admin/plugins/dirlist.py:58 +#: admin/plugins/file.py:44 admin/plugins/proxy.py:240 +msgid "Allow" +msgstr "" #: admin/PageEntry.py:85 msgid "Forbid" @@ -1055,7 +1134,7 @@ msgstr "" msgid "Remove" msgstr "Verwijderen" -#: admin/PageEntry.py:126 admin/PageVServer.py:155 +#: admin/PageEntry.py:126 admin/PageVServer.py:159 #: admin/plugins/secdownload.py:44 msgid "Timeout" msgstr "Uitvaltijd" @@ -1068,7 +1147,7 @@ msgstr "Verbindinguitvaltijd" msgid "Limit traffic to" msgstr "Limiteer verkeer tot" -#: admin/PageEntry.py:139 admin/PageVServer.py:156 +#: admin/PageEntry.py:139 admin/PageVServer.py:160 msgid "Traffic Shaping" msgstr "Verkeer Limiteren" @@ -1076,7 +1155,7 @@ msgstr "Verkeer Limiteren" msgid "Skip Logging" msgstr "Log Registratie Overslaan" -#: admin/PageEntry.py:154 admin/PageVServer.py:720 +#: admin/PageEntry.py:154 admin/PageVServer.py:729 msgid "Logging" msgstr "Log registratie" @@ -1100,14 +1179,14 @@ msgstr "Validatie Mechanisme" msgid "Can not be empty" msgstr "Kan niet leeg zijn" -#: admin/PageEntry.py:216 admin/PageEntry.py:268 admin/consts.py:190 -#: admin/plugins/header.py:110 admin/plugins/header.py:151 -#: admin/plugins/header.py:156 admin/plugins/proxy.py:193 +#: admin/PageEntry.py:216 admin/PageEntry.py:268 admin/consts.py:189 +#: admin/plugins/header.py:112 admin/plugins/header.py:153 +#: admin/plugins/header.py:158 admin/plugins/proxy.py:193 msgid "Header" msgstr "Kopregel" #: admin/PageEntry.py:216 admin/PageSource.py:284 -#: admin/plugins/error_redir.py:105 admin/plugins/header.py:113 +#: admin/plugins/error_redir.py:105 admin/plugins/header.py:115 #: admin/plugins/redir.py:76 msgid "Type" msgstr "Type" @@ -1124,7 +1203,7 @@ msgstr "Actie" msgid "Add New Header" msgstr "Voeg nieuwe regel toe" -#: admin/PageEntry.py:326 admin/consts.py:204 admin/plugins/redir.py:39 +#: admin/PageEntry.py:326 admin/consts.py:203 admin/plugins/redir.py:39 #: admin/plugins/rehost.py:53 msgid "Regular Expressions" msgstr "Reguliere Expressies" @@ -1143,8 +1222,7 @@ msgstr "Antwoord status code" msgid "Caching Policy" msgstr "" -#: admin/PageEntry.py:381 admin/plugins/rehost.py:68 -#: admin/plugins/rehost.py:92 +#: admin/PageEntry.py:381 admin/plugins/rehost.py:68 admin/plugins/rehost.py:92 msgid "New Regular Expression" msgstr "Nieuwe Reguliere Expressie" @@ -1152,7 +1230,7 @@ msgstr "Nieuwe Reguliere Expressie" msgid "Disregarded Cookies" msgstr "" -#: admin/PageEntry.py:402 admin/PageVServer.py:154 +#: admin/PageEntry.py:402 admin/PageVServer.py:158 msgid "Expiration" msgstr "Vervaltijd" @@ -1184,7 +1262,7 @@ msgstr "Proxy's Hervalideren" msgid "Content Expiration" msgstr "Inhoud Vervaltijd" -#: admin/PageEntry.py:433 admin/PageVServer.py:153 +#: admin/PageEntry.py:433 admin/PageVServer.py:157 #, fuzzy msgid "Cache" msgstr "Geen Cache" @@ -1207,7 +1285,7 @@ msgid "Matching Rule" msgstr "Kies Regel" #: admin/PageEntry.py:514 admin/PageEntry.py:528 admin/PageEntry.py:553 -#: admin/PageVServer.py:148 +#: admin/PageVServer.py:152 msgid "Handler" msgstr "Uitvoerder" @@ -1225,7 +1303,7 @@ msgstr "Geen Wijzigingen" msgid "Caching" msgstr "Kies Regel" -#: admin/PageEntry.py:556 admin/PageVServer.py:721 +#: admin/PageEntry.py:556 admin/PageVServer.py:730 msgid "Security" msgstr "Beveiliging" @@ -1494,7 +1572,7 @@ msgstr "IPv6" msgid "SSL/TLS back-end" msgstr "SSL/TLS ondersteuning" -#: admin/PageGeneral.py:197 admin/PageIndex.py:252 +#: admin/PageGeneral.py:197 admin/PageIndex.py:198 msgid "Support" msgstr "Ondersteuning" @@ -1527,8 +1605,8 @@ msgid "Bind to" msgstr "Verbind aan" #: admin/PageGeneral.py:239 admin/PageGeneral.py:310 admin/plugins/bind.py:92 -#: admin/plugins/bind.py:155 admin/plugins/bind.py:157 -#: admin/plugins/ldap.py:48 admin/plugins/mysql.py:77 +#: admin/plugins/bind.py:155 admin/plugins/bind.py:157 admin/plugins/ldap.py:48 +#: admin/plugins/mysql.py:77 msgid "Port" msgstr "Poort" @@ -1591,7 +1669,7 @@ msgstr "Groep" msgid "Chroot" msgstr "Chroot" -#: admin/PageGeneral.py:357 admin/PageVServer.py:479 +#: admin/PageGeneral.py:357 admin/PageVServer.py:483 msgid "Network" msgstr "Netwerk" @@ -1619,172 +1697,130 @@ msgstr "Inhoudsopgave" msgid "Documentation" msgstr "Documentatie" -#: admin/PageIndex.py:67 -msgid "You will be sent an email requesting confirmation" -msgstr "Je wordt een e-mail ter bevestiging gestuurd" - -#: admin/PageIndex.py:68 -msgid "Optionally provide your name" -msgstr "Optioneel kun je, je naam opgeven" - -#: admin/PageIndex.py:70 -#, python-format -msgid "" -"There are a number of Community Mailing Lists\n" -"available for you to subscribe. You can subscribe the General Discussion\n" -"mailing list from this interface. There is where most of the discussions\n" -"take place." -msgstr "" -"Er zijn een aantal Community Mailinglijsten\n" -"beschikbaar om op te abonneren. Je kunt abonneren op de Algemene Discussie\n" -"mailinglijst (Engels) vanaf deze applicatie. Hier vindt de meeste discussie\n" -"plaats." - -#: admin/PageIndex.py:77 +#: admin/PageIndex.py:58 msgid "Server is Running" msgstr "Server draait" -#: admin/PageIndex.py:78 +#: admin/PageIndex.py:59 msgid "Server is not Running" msgstr "Server draait niet" -#: admin/PageIndex.py:132 +#: admin/PageIndex.py:110 msgid "Stop Server" msgstr "Stop Server" -#: admin/PageIndex.py:136 +#: admin/PageIndex.py:114 msgid "Start Server" msgstr "Start Server" -#: admin/PageIndex.py:141 +#: admin/PageIndex.py:119 msgid "Hostname" msgstr "Computernaam" -#: admin/PageIndex.py:143 +#: admin/PageIndex.py:121 msgid "Modified" msgstr "Veranderd" -#: admin/PageIndex.py:145 +#: admin/PageIndex.py:123 msgid "Not found" msgstr "Niet gevonden" -#: admin/PageIndex.py:146 +#: admin/PageIndex.py:124 msgid "Config File" msgstr "Configuratie Bestand" -#: admin/PageIndex.py:153 admin/plugins/server_info.py:32 +#: admin/PageIndex.py:131 admin/plugins/server_info.py:32 #: admin/plugins/server_info.py:35 msgid "Server Information" msgstr "Server informatie" -#: admin/PageIndex.py:165 +#: admin/PageIndex.py:143 msgid "Processors" msgstr "Processoren" -#: admin/PageIndex.py:177 +#: admin/PageIndex.py:155 msgid "Memory" msgstr "Geheugen" -#: admin/PageIndex.py:211 admin/plugins/dbslayer.py:51 +#: admin/PageIndex.py:189 admin/plugins/dbslayer.py:51 msgid "Language" msgstr "Taal" -#: admin/PageIndex.py:231 -msgid "Mailing List Subscription" -msgstr "Mailing lijst abonnement" - -#: admin/PageIndex.py:233 -msgid "Subscribe" -msgstr "Abonneer" - -#: admin/PageIndex.py:236 -msgid "Your email address" -msgstr "Je email adres" - -#: admin/PageIndex.py:237 -msgid "Your name" -msgstr "Je naam" - -#: admin/PageIndex.py:256 +#: admin/PageIndex.py:202 msgid "Getting started" msgstr "Hoe te beginnen" -#: admin/PageIndex.py:260 -msgid "Subscribe to mailing lists" +#: admin/PageIndex.py:206 +#, fuzzy +msgid "Visit the mailing list" msgstr "Abonneren op de mailinglijsten" -#: admin/PageIndex.py:268 +#: admin/PageIndex.py:210 msgid "Report a bug" msgstr "Rapporteer een probleem" -#: admin/PageIndex.py:272 -msgid "Purchase commercial support" -msgstr "Koop commerciële ondersteuning" - -#: admin/PageIndex.py:276 admin/PageIndex.py:280 +#: admin/PageIndex.py:214 admin/PageIndex.py:218 msgid "About Cherokee" msgstr "Over Cherokee" -#: admin/PageIndex.py:289 +#: admin/PageIndex.py:227 msgid "Join the Cherokee Community:" msgstr "Kom bij de Cherokee Community:" -#: admin/PageIndex.py:292 +#: admin/PageIndex.py:230 msgid "Visit the Cherokee Project Website" msgstr "Bezoek de Cherokee Project Website" -#: admin/PageIndex.py:293 +#: admin/PageIndex.py:231 msgid "Follow us on Twitter" msgstr "Volg ons op Twitter" -#: admin/PageIndex.py:294 +#: admin/PageIndex.py:232 msgid "Join us on Facebook" msgstr "Word lid op Facebook" -#: admin/PageIndex.py:295 +#: admin/PageIndex.py:233 #, fuzzy msgid "Join us on Google+" msgstr "Word lid op Facebook" -#: admin/PageIndex.py:296 +#: admin/PageIndex.py:234 msgid "Fork us on Github" msgstr "" -#: admin/PageIndex.py:297 +#: admin/PageIndex.py:235 msgid "Become a member of Cherokee group on LinkedIn" msgstr "Wordt lid van de Cherokee groep op LinkedIn" -#: admin/PageIndex.py:298 +#: admin/PageIndex.py:236 msgid "Chat with us at irc.freenode.net" msgstr "Chat met ons op irc.freenode.net" -#: admin/PageIndex.py:307 +#: admin/PageIndex.py:245 msgid "Shutdown Cherokee-admin" msgstr "Cherokee-admin afsluiten" -#: admin/PageIndex.py:309 +#: admin/PageIndex.py:247 msgid "Shut down" msgstr "Afsluiten" -#: admin/PageIndex.py:310 +#: admin/PageIndex.py:248 msgid "You are about to shut down this instance of Cherokee-admin" msgstr "Je gaat zo deze versie van Cherokee-admin afsluiten" -#: admin/PageIndex.py:311 +#: admin/PageIndex.py:249 msgid "Are you sure you want to proceed?" msgstr "Weet je zeker dat je verder wilt gaan?" -#: admin/PageIndex.py:314 +#: admin/PageIndex.py:252 msgid "Cherokee-admin has been shut down" msgstr "Cherokee-admin is afgesloten" -#: admin/PageIndex.py:316 +#: admin/PageIndex.py:254 msgid "Shut down Cherokee-Admin" msgstr "Sluit Cherokee-Admin af" -#: admin/PageIndex.py:329 admin/PageIndex.py:350 +#: admin/PageIndex.py:267 admin/PageIndex.py:288 msgid "Welcome to Cherokee Admin" msgstr "Welkom bij de Cherokee Admin" @@ -1871,7 +1907,7 @@ msgstr "Handleiding" msgid "Manual configuration" msgstr "Handmatige configuratie" -#: admin/PageRule.py:249 admin/PageVServer.py:158 +#: admin/PageRule.py:249 admin/PageVServer.py:162 msgid "Final" msgstr "Definitief" @@ -1899,7 +1935,7 @@ msgstr "Dupliceer" msgid "Clone Selected Behavior Rule" msgstr "Dupliceer de geselecteerde gedragsregel" -#: admin/PageRule.py:314 admin/PageVServer.py:718 +#: admin/PageRule.py:314 admin/PageVServer.py:727 msgid "Behavior" msgstr "Gedrag" @@ -2044,7 +2080,7 @@ msgstr "Voeg een nieuwe Omgevings Variabele toe" msgid "Source Usage" msgstr "Bron gebruik" -#: admin/PageSource.py:253 admin/PageVServer.py:723 +#: admin/PageSource.py:253 admin/PageVServer.py:732 msgid "Virtual Server" msgstr "Virtuele Server" @@ -2098,7 +2134,7 @@ msgstr "Dupliceer geselecteerde Informatie Bron" msgid "Sources Filtering" msgstr "Bron Filteren" -#: admin/PageSources.py:35 admin/PageVServer.py:141 admin/PageVServers.py:48 +#: admin/PageSources.py:35 admin/PageVServer.py:145 admin/PageVServers.py:48 #: admin/PageVServers.py:294 msgid "Virtual Servers" msgstr "Virtuele Server" @@ -2120,10 +2156,14 @@ msgid "Virtual Server Filtering" msgstr "Virtuele Server filtering" #: admin/PageVServer.py:44 +msgid "Reference" +msgstr "" + +#: admin/PageVServer.py:47 msgid "Nickname for the virtual server." msgstr "Naam voor de virtuele server." -#: admin/PageVServer.py:45 +#: admin/PageVServer.py:48 msgid "" "This directive points to the PEM-encoded Certificate file for the server " "(Full path to the file)" @@ -2131,12 +2171,12 @@ msgstr "" "Deze configuratie wijst naar het PEM-geëncodeerde Certificaat voor de server " "(Volledig pad naar het bestand)" -#: admin/PageVServer.py:46 +#: admin/PageVServer.py:49 msgid "PEM-encoded Private Key file for the server (Full path to the file)" msgstr "" "PEM-geëncodeerde Prive Sleutel voor de server (Volledig pad naar het bestand)" -#: admin/PageVServer.py:47 +#: admin/PageVServer.py:50 msgid "" "File containing the trusted CA certificates, utilized for checking the " "client certificates (Full path to the file)" @@ -2144,42 +2184,38 @@ msgstr "" "Bestand dat de vertrouwde CA certificaten bevat, wordt gebruikt om de " "gebruikerscertificaten te controleren (Volledig pad naar het bestand)" -#: admin/PageVServer.py:48 -#, fuzzy -msgid "" -"Ciphers that TLS/SSL is allowed to use. Reference. (Default enables " -"Forward Secrecy)." +#: admin/PageVServer.py:51 +msgid "Ciphers that TLSv1.2 and below is allowed to use." +msgstr "Versleuteling die TLS/SSL mag gebruiken.versie)." + +#: admin/PageVServer.py:52 +msgid "Ciphersuites that TLSv1.3 is allowed to use." msgstr "" -"Versleuteling die TLS/SSL mag gebruiken. Referentie (Engels). " -"(Standaard: alle versleutelingen ondersteund door de gebruikte OpenSSL " -"versie)." -#: admin/PageVServer.py:49 +#: admin/PageVServer.py:53 msgid "" "The cipher sequence that is specified by the server should have preference " "over the client preference. (Default: True)." msgstr "" -#: admin/PageVServer.py:50 +#: admin/PageVServer.py:54 msgid "" "Explicitly enable or disable serverside compression support. (Default: " "Disabled)." msgstr "" -#: admin/PageVServer.py:51 +#: admin/PageVServer.py:55 msgid "" "Explicitely sets the Diffie-Hellman parameters length. (Default: Let openssl " "choose)." msgstr "" -#: admin/PageVServer.py:52 +#: admin/PageVServer.py:56 #, fuzzy msgid "Skip, Tolerate, Accept or Require client certificates." msgstr "Sla over, Accepteer of Vereis gebruikerscertificaten." -#: admin/PageVServer.py:53 +#: admin/PageVServer.py:57 msgid "" "Limit up to which depth certificates in a chain are used during the " "verification procedure (Default: 1)" @@ -2187,11 +2223,11 @@ msgstr "" "Limiteer tot welke diepte certificaten in een ketting kunnen worden gebruikt " "in een verificatie procedure. (Standaard: 1)" -#: admin/PageVServer.py:54 +#: admin/PageVServer.py:58 msgid "Allows the selection of how to generate the error responses." msgstr "Selecteert hoe foutmeldingen worden gegenereerd." -#: admin/PageVServer.py:55 +#: admin/PageVServer.py:59 msgid "" "Directory inside the user home directory to use as root web directory. " "Disabled if empty." @@ -2199,21 +2235,21 @@ msgstr "" "Map binnen de gebruikers thuis map om te gebruiken als hoofdmap voor een " "website. Niet actief wanneer niet opgegeven." -#: admin/PageVServer.py:56 +#: admin/PageVServer.py:60 msgid "The personal web support is currently turned on." msgstr "De persoonlijke website functie is ingeschakeld." -#: admin/PageVServer.py:57 +#: admin/PageVServer.py:61 msgid "Adds a new domain name. Wildcards are allowed in the domain name." msgstr "" "Voegt een nieuwe domeinnaam toe. Jokertekens zijn toegestaan binnen een " "domeinnaam." -#: admin/PageVServer.py:58 +#: admin/PageVServer.py:62 msgid "Virtual Server root directory." msgstr "Virtuele Server hoofdmap." -#: admin/PageVServer.py:59 +#: admin/PageVServer.py:63 msgid "" "List of name files that will be used as directory index. Eg: index.html," "index.php." @@ -2221,47 +2257,47 @@ msgstr "" "Lijst met bestanden dat zal worden gebruikt als map index. Vb index.html," "index.php." -#: admin/PageVServer.py:60 +#: admin/PageVServer.py:64 msgid "The maximum size, in bytes, for POST uploads. (Default: unlimited)" msgstr "" "De maximum grootte, in bytes, voor POST uploads. (Standaard: niet " "gelimiteerd)" -#: admin/PageVServer.py:61 +#: admin/PageVServer.py:65 msgid "Whether this virtual server is allowed to use Keep-alive (Default: yes)" msgstr "Of deze virtuele server blijf-inleven mag gebruiken (Standaard: ja)" -#: admin/PageVServer.py:62 +#: admin/PageVServer.py:66 msgid "The Logging is currently enabled." msgstr "Logboek registratie is ingeschakeld." -#: admin/PageVServer.py:63 +#: admin/PageVServer.py:67 msgid "Logging format. Apache compatible is highly recommended here." msgstr "Type logregistratie. Apache compatibel is hier sterk geadviseerd." -#: admin/PageVServer.py:64 +#: admin/PageVServer.py:68 msgid "Back-end used to store the log accesses." msgstr "Methode om de toegangsstatistieken op te slaan." -#: admin/PageVServer.py:65 +#: admin/PageVServer.py:69 msgid "Back-end used to store the log errors." msgstr "Methode om de foutmeldingen op te slaan." -#: admin/PageVServer.py:66 +#: admin/PageVServer.py:70 msgid "Back-end used to store the log accesses and errors." msgstr "" "Methode om zowel de toegangsstatistieken als foutmeldingen op te slaan." -#: admin/PageVServer.py:67 +#: admin/PageVServer.py:71 msgid "Full path to the file where the information will be saved." msgstr "Volledig pad naar het bestand waar de informatie wordt bewaard." -#: admin/PageVServer.py:68 +#: admin/PageVServer.py:72 msgid "Path to the executable that will be invoked on each log entry." msgstr "" "Pad naar het uitvoerbare bestand dat wordt aangeroepen voor elke log regel." -#: admin/PageVServer.py:69 +#: admin/PageVServer.py:73 msgid "" "Whether the logger should read and use the X-Real-IP and X-Forwarded-For " "headers (send by reverse proxies)." @@ -2269,7 +2305,7 @@ msgstr "" "Of de logger de X-Real-IP en X-Forwarded-For kopregels moet lezen en " "gebruiken (wordt verzonden door de omgekeerde proxies)." -#: admin/PageVServer.py:71 +#: admin/PageVServer.py:75 msgid "" "List of IP addresses and subnets that are allowed to send X-Real-IP and X-" "Forwarded-For headers." @@ -2277,32 +2313,32 @@ msgstr "" "Lijst van IP adressen en subnetten die X-Real-IP en X-Forwarded-For " "kopregels mogen verzenden." -#: admin/PageVServer.py:72 +#: admin/PageVServer.py:76 msgid "" "How to support the \"Advanced Virtual Hosting\" mechanism. (Default: off)" msgstr "" "Hoe het \"Geavanceerde Virtuele Hosting\" mechanisme wordt ondersteund. " "(Standaard: uit)" -#: admin/PageVServer.py:73 +#: admin/PageVServer.py:77 msgid "The following variables are accepted: " msgstr "De volgende variabelen worden geaccepteerd:" -#: admin/PageVServer.py:74 +#: admin/PageVServer.py:78 msgid "Allows the selection of domain matching method." msgstr "Selecteert de methode hoe domeinen worden gekozen." -#: admin/PageVServer.py:75 +#: admin/PageVServer.py:79 msgid "" "Whether or not it should collected statistics about the traffic of this " "virtual server." msgstr "Worden verkeersstatistieken voor deze server wel of niet verzameld." -#: admin/PageVServer.py:76 +#: admin/PageVServer.py:80 msgid "Time standard to use in the log file entries." msgstr "Tijd standaard om te gebruiken in log bestand regels." -#: admin/PageVServer.py:77 +#: admin/PageVServer.py:81 msgid "" "Remember that only \"File Exists\" rules and \"List & Send\" handlers use " "the Directory Indexes setting." @@ -2310,7 +2346,7 @@ msgstr "" "Bedenkt dat alleen de \"Bestand Bestaat\" regel en \"Toon & Verstuur\" " "afhandelaar de Map Index instelling gebruiken." -#: admin/PageVServer.py:78 +#: admin/PageVServer.py:82 msgid "" "Use this nickname as an additional host name for this virtual server " "(Default: yes)" @@ -2318,16 +2354,16 @@ msgstr "" "Gebruik deze bijnaam als extra computernaam voor deze virtuele server " "(Standaard: ja)" -#: admin/PageVServer.py:79 +#: admin/PageVServer.py:83 msgid "Enforce HTTPS by using the HTTP Strict Transport Security." msgstr "" -#: admin/PageVServer.py:80 +#: admin/PageVServer.py:84 msgid "" "How long the client's browser should remember the forced HTTPS (in seconds)." msgstr "" -#: admin/PageVServer.py:81 +#: admin/PageVServer.py:85 #, fuzzy msgid "" "Should HSTS be used in all the subdomains of this virtual server (Default: " @@ -2336,423 +2372,427 @@ msgstr "" "Gebruik deze bijnaam als extra computernaam voor deze virtuele server " "(Standaard: ja)" -#: admin/PageVServer.py:83 +#: admin/PageVServer.py:87 msgid "

The 'default' virtual server matches all the domain names.

" msgstr "

De 'standaard' virtuele server voor alle domein namen.

" -#: admin/PageVServer.py:86 +#: admin/PageVServer.py:90 msgid "Remote IP address" msgstr "Doel IP adres" -#: admin/PageVServer.py:87 +#: admin/PageVServer.py:91 msgid "Local IP address" msgstr "Lokaal IP adres" -#: admin/PageVServer.py:88 +#: admin/PageVServer.py:92 msgid "Request Protocol" msgstr "Aanvraag Protocol" -#: admin/PageVServer.py:89 +#: admin/PageVServer.py:93 msgid "Transport type: http or https" msgstr "Transport type: http of https" -#: admin/PageVServer.py:90 +#: admin/PageVServer.py:94 msgid "Port of the server serving the request" msgstr "Poort van de server die de aanvraag behandelt" -#: admin/PageVServer.py:91 +#: admin/PageVServer.py:95 msgid "The query string, if exists" msgstr "De query string, wanneer deze bestaat" -#: admin/PageVServer.py:92 +#: admin/PageVServer.py:96 msgid "First line of HTTP request" msgstr "Eerste regel van de HTTP aanvraag" -#: admin/PageVServer.py:93 +#: admin/PageVServer.py:97 msgid "Response status code" msgstr "Antwoord status code" -#: admin/PageVServer.py:94 +#: admin/PageVServer.py:98 msgid "Time: in common log format time format" msgstr "Tijd: in het algemene logformaat tijdformaat" -#: admin/PageVServer.py:95 +#: admin/PageVServer.py:99 msgid "Time: seconds since Epoch" msgstr "Tijd: seconden sinds Epoch" -#: admin/PageVServer.py:96 +#: admin/PageVServer.py:100 msgid "Time: milliseconds since Epoch" msgstr "Tijd: milliseconden sinds Epoch" -#: admin/PageVServer.py:97 +#: admin/PageVServer.py:101 msgid "Remote user (authentication)" msgstr "Gebruiker (authenticatie)" -#: admin/PageVServer.py:98 +#: admin/PageVServer.py:102 msgid "URL path requested" msgstr "Aangevraagd URL pad" -#: admin/PageVServer.py:99 +#: admin/PageVServer.py:103 msgid "URL path requested before any rewrite" msgstr "Aangevraagd URL pad voor het herschrijven" -#: admin/PageVServer.py:100 +#: admin/PageVServer.py:104 msgid "Virtual Server nick name" msgstr "Virtuele Server bijnaam" -#: admin/PageVServer.py:101 +#: admin/PageVServer.py:105 msgid "Requested host (Host: header)" msgstr "Aangevraagde systeemnaam (Host: kopregel)" -#: admin/PageVServer.py:102 +#: admin/PageVServer.py:106 msgid "Size of the response in bytes" msgstr "Grootte van het antwoord in bytes" -#: admin/PageVServer.py:103 +#: admin/PageVServer.py:107 msgid "'Host:' header of the request" msgstr "'Host:' kopregel van de aanvraag" -#: admin/PageVServer.py:104 +#: admin/PageVServer.py:108 msgid "'Referrer:' header of the request" msgstr "'Referrer:' kopregel van de aanvraag" -#: admin/PageVServer.py:105 +#: admin/PageVServer.py:109 msgid "'User-Agent:' header of the request" msgstr "'User-Agent:' kopregel van de aanvraag" -#: admin/PageVServer.py:106 +#: admin/PageVServer.py:110 msgid "'Cookie:' header of the request" msgstr "'Cookie' kopregel van de aanvraag" -#: admin/PageVServer.py:142 +#: admin/PageVServer.py:146 msgid "Loggers" msgstr "Loggers" -#: admin/PageVServer.py:143 +#: admin/PageVServer.py:147 msgid "SSL cookbook" msgstr "SSL kookboek" -#: admin/PageVServer.py:147 admin/PageVServer.py:184 +#: admin/PageVServer.py:151 admin/PageVServer.py:188 msgid "Match" msgstr "Overeenkomst" -#: admin/PageVServer.py:147 +#: admin/PageVServer.py:151 msgid "Rule Match" msgstr "Regel overeenkomst" -#: admin/PageVServer.py:148 +#: admin/PageVServer.py:152 msgid "Assigned Handler" msgstr "Toegepaste Uitvoerder" -#: admin/PageVServer.py:149 +#: admin/PageVServer.py:153 msgid "Auth" msgstr "Auth" -#: admin/PageVServer.py:150 +#: admin/PageVServer.py:154 msgid "Custom Document Root" msgstr "Eigen Hoofdmap" -#: admin/PageVServer.py:150 +#: admin/PageVServer.py:154 msgid "Root" msgstr "Hoofdmap" -#: admin/PageVServer.py:151 +#: admin/PageVServer.py:155 msgid "Only HTTPS" msgstr "Alleen HTTPS" -#: admin/PageVServer.py:151 +#: admin/PageVServer.py:155 msgid "Secure" msgstr "Beveiligd" -#: admin/PageVServer.py:152 +#: admin/PageVServer.py:156 msgid "Enc" msgstr "Enc" -#: admin/PageVServer.py:152 +#: admin/PageVServer.py:156 msgid "Encoders" msgstr "Encodering" -#: admin/PageVServer.py:153 +#: admin/PageVServer.py:157 #, fuzzy msgid "Cacheable" msgstr "Apache compatibel" -#: admin/PageVServer.py:154 +#: admin/PageVServer.py:158 msgid "Exp" msgstr "Exp" -#: admin/PageVServer.py:155 +#: admin/PageVServer.py:159 msgid "Connection Timeout" msgstr "Verbindinguitvaltijd" -#: admin/PageVServer.py:156 +#: admin/PageVServer.py:160 msgid "Shaping" msgstr "Verkeer Limiteren" -#: admin/PageVServer.py:157 +#: admin/PageVServer.py:161 msgid "Log" msgstr "Log" -#: admin/PageVServer.py:157 +#: admin/PageVServer.py:161 msgid "Logging Enabled" msgstr "Log Registratie Geactiveerd" -#: admin/PageVServer.py:158 +#: admin/PageVServer.py:162 msgid "Rule is Final" msgstr "Regel is definitief" -#: admin/PageVServer.py:184 +#: admin/PageVServer.py:188 msgid "Match nickname" msgstr "Vergelijk Bijnaam" -#: admin/PageVServer.py:188 admin/PageVServer.py:717 +#: admin/PageVServer.py:192 admin/PageVServer.py:726 msgid "Host Match" msgstr "Computernaam Gelijk" -#: admin/PageVServer.py:218 admin/PageVServer.py:234 admin/PageVServer.py:258 -#: admin/PageVServer.py:485 admin/PageVServer.py:519 -#: admin/plugins/method.py:99 admin/plugins/method.py:109 +#: admin/PageVServer.py:222 admin/PageVServer.py:238 admin/PageVServer.py:262 +#: admin/PageVServer.py:489 admin/PageVServer.py:523 admin/plugins/method.py:99 +#: admin/plugins/method.py:109 msgid "Method" msgstr "Methode" -#: admin/PageVServer.py:226 admin/PageVServer.py:242 +#: admin/PageVServer.py:230 admin/PageVServer.py:246 msgid "Remove criteria" msgstr "Verwijder criteria" -#: admin/PageVServer.py:260 +#: admin/PageVServer.py:264 msgid "How to match this Virtual Server" msgstr "Hoe bij deze Virtuele Server uit te komen" -#: admin/PageVServer.py:267 +#: admin/PageVServer.py:271 msgid "Add an additional matching criteria" msgstr "Voeg extra zoek criteria toe" -#: admin/PageVServer.py:358 +#: admin/PageVServer.py:362 msgid "Behavior Rules" msgstr "Gedragregels" -#: admin/PageVServer.py:367 +#: admin/PageVServer.py:371 msgid "Rule Management" msgstr "Regel beheer" -#: admin/PageVServer.py:393 +#: admin/PageVServer.py:397 msgid "Only accept Secure Connections" msgstr "Accepteer alleen beveiligde verbindingen" -#: admin/PageVServer.py:398 +#: admin/PageVServer.py:402 msgid "Encoding enabled" msgstr "Encodering geactiveerd" -#: admin/PageVServer.py:404 +#: admin/PageVServer.py:408 msgid "no" msgstr "nee" -#: admin/PageVServer.py:415 +#: admin/PageVServer.py:419 msgid " seconds" msgstr " seconden" -#: admin/PageVServer.py:420 +#: admin/PageVServer.py:424 msgid " bytes per second" msgstr " bytes per seconde" -#: admin/PageVServer.py:425 +#: admin/PageVServer.py:429 msgid "Logging enabled for this rule" msgstr "Log registratie voor deze regel is geactiveerd" -#: admin/PageVServer.py:430 +#: admin/PageVServer.py:434 msgid "Prevents further rule evaluation" msgstr "Voorkomt het gebruik van opvolgende regels" -#: admin/PageVServer.py:435 +#: admin/PageVServer.py:439 msgid "Content can be cached" msgstr "" -#: admin/PageVServer.py:438 +#: admin/PageVServer.py:442 msgid "Forbids content caching" msgstr "" -#: admin/PageVServer.py:455 +#: admin/PageVServer.py:459 msgid "Virtual Server nickname" msgstr "Virtuele Server naam" -#: admin/PageVServer.py:457 +#: admin/PageVServer.py:461 msgid "Server ID" msgstr "Server ID" -#: admin/PageVServer.py:463 +#: admin/PageVServer.py:467 msgid "Directory Indexes" msgstr "Map indices" -#: admin/PageVServer.py:465 admin/plugins/fullpath.py:119 +#: admin/PageVServer.py:469 admin/plugins/fullpath.py:119 msgid "Paths" msgstr "Paden" -#: admin/PageVServer.py:471 +#: admin/PageVServer.py:475 msgid "Neither are in use at the moment." msgstr "Geen zijn momenteel in gebruik." -#: admin/PageVServer.py:476 +#: admin/PageVServer.py:480 msgid "Keep-alive" msgstr "Blijf-in-leven" -#: admin/PageVServer.py:477 +#: admin/PageVServer.py:481 msgid "Max Upload Size" msgstr "Max Upload grootte" -#: admin/PageVServer.py:487 admin/plugins/evhost.py:33 +#: admin/PageVServer.py:491 admin/plugins/evhost.py:33 msgid "Advanced Virtual Hosting" msgstr "Geavanceerde Virtuele Hosting" -#: admin/PageVServer.py:521 +#: admin/PageVServer.py:525 msgid "Error Handling hook" msgstr "Fout Afhandelaar onderbreking" -#: admin/PageVServer.py:532 admin/consts.py:233 admin/consts.py:250 +#: admin/PageVServer.py:536 admin/consts.py:232 admin/consts.py:249 msgid "Disabled" msgstr "Uitgeschakeld" -#: admin/PageVServer.py:536 +#: admin/PageVServer.py:540 msgid "Write errors to" msgstr "Schrijf fouten naar" -#: admin/PageVServer.py:540 admin/PageVServer.py:579 +#: admin/PageVServer.py:544 admin/PageVServer.py:583 msgid "Filename" msgstr "Bestandsnaam" -#: admin/PageVServer.py:542 admin/PageVServer.py:582 +#: admin/PageVServer.py:546 admin/PageVServer.py:586 msgid "Command" msgstr "Commando" -#: admin/PageVServer.py:548 +#: admin/PageVServer.py:552 msgid "Error Logging" msgstr "Fout Loggen" -#: admin/PageVServer.py:559 +#: admin/PageVServer.py:563 msgid "Format" msgstr "Formaat" -#: admin/PageVServer.py:566 +#: admin/PageVServer.py:570 msgid "Write accesses to" msgstr "Schrijf toegang naar" -#: admin/PageVServer.py:589 +#: admin/PageVServer.py:593 msgid "Hide" msgstr "Verberg" -#: admin/PageVServer.py:589 +#: admin/PageVServer.py:593 msgid "Show macros" msgstr "Toon macro's" -#: admin/PageVServer.py:598 +#: admin/PageVServer.py:602 msgid "Template: " msgstr "Sjabloon:" -#: admin/PageVServer.py:600 +#: admin/PageVServer.py:604 msgid "Access Logging" msgstr "Toegangslogging" -#: admin/PageVServer.py:606 +#: admin/PageVServer.py:610 msgid "Time standard" msgstr "Tijd standaard" -#: admin/PageVServer.py:607 admin/PageVServer.py:687 admin/consts.py:228 +#: admin/PageVServer.py:611 admin/PageVServer.py:696 admin/consts.py:227 msgid "Accept" msgstr "Accepteer" -#: admin/PageVServer.py:607 +#: admin/PageVServer.py:611 msgid "Accept Forwarded IPs" msgstr "Accepteer Doorgestuurde IPs" -#: admin/PageVServer.py:610 +#: admin/PageVServer.py:614 msgid "Do not check" msgstr "Controleer niet" -#: admin/PageVServer.py:619 +#: admin/PageVServer.py:623 msgid "Logging Options" msgstr "Log opties" -#: admin/PageVServer.py:655 admin/wizards/ssl_test.py:136 +#: admin/PageVServer.py:659 admin/wizards/ssl_test.py:136 msgid "Certificate" msgstr "Certificaat" -#: admin/PageVServer.py:656 +#: admin/PageVServer.py:660 msgid "Certificate key" msgstr "Certificaat sleutel" -#: admin/PageVServer.py:661 +#: admin/PageVServer.py:665 msgid "Required SSL/TLS Values" msgstr "Verplichte SSL/TLS waarden" -#: admin/PageVServer.py:666 +#: admin/PageVServer.py:674 +msgid "Ciphersuites" +msgstr "" + +#: admin/PageVServer.py:675 msgid "Ciphers" msgstr "Versleutelingen" -#: admin/PageVServer.py:667 +#: admin/PageVServer.py:676 #, fuzzy msgid "Prefer" msgstr "Voorvoegsel" -#: admin/PageVServer.py:667 +#: admin/PageVServer.py:676 #, fuzzy msgid "Server Preference" msgstr "Server Verkeer" -#: admin/PageVServer.py:668 +#: admin/PageVServer.py:677 msgid "Client Certs. Request" msgstr "Gebruiker Certificaat Aanvragen" -#: admin/PageVServer.py:669 +#: admin/PageVServer.py:678 #, fuzzy msgid "Compression" msgstr "Compressie Niveau" -#: admin/PageVServer.py:670 +#: admin/PageVServer.py:679 msgid "DH length" msgstr "" -#: admin/PageVServer.py:673 +#: admin/PageVServer.py:682 msgid "CA List" msgstr "CA lijst" -#: admin/PageVServer.py:676 +#: admin/PageVServer.py:685 msgid "Verify Depth" msgstr "Verifiëer Diepte" -#: admin/PageVServer.py:682 +#: admin/PageVServer.py:691 msgid "Advanced Options" msgstr "Uitgebreide opties" -#: admin/PageVServer.py:687 +#: admin/PageVServer.py:696 #, fuzzy msgid "Enable HSTS" msgstr "Activeer" -#: admin/PageVServer.py:690 +#: admin/PageVServer.py:699 msgid "HSTS Max-Age" msgstr "" -#: admin/PageVServer.py:690 +#: admin/PageVServer.py:699 msgid "One year" msgstr "" -#: admin/PageVServer.py:691 +#: admin/PageVServer.py:700 #, fuzzy msgid "Include Subdomains" msgstr "Stuur je domeinen" -#: admin/PageVServer.py:691 +#: admin/PageVServer.py:700 msgid "Include all" msgstr "" -#: admin/PageVServer.py:697 +#: admin/PageVServer.py:706 msgid "HTTP Strict Transport Security (HSTS)" msgstr "" -#: admin/PageVServer.py:716 +#: admin/PageVServer.py:725 msgid "Basics" msgstr "Basis" -#: admin/PageVServer.py:719 +#: admin/PageVServer.py:728 msgid "Error Handler" msgstr "Fout afhandelaar" @@ -3044,8 +3084,8 @@ msgstr "Product + Platform" msgid "Full Server string" msgstr "Volledige Server string" -#: admin/consts.py:51 admin/consts.py:80 admin/consts.py:97 -#: admin/consts.py:111 admin/plugins/mysql.py:45 +#: admin/consts.py:51 admin/consts.py:80 admin/consts.py:97 admin/consts.py:111 +#: admin/plugins/mysql.py:45 msgid "None" msgstr "Geen" @@ -3243,191 +3283,191 @@ msgstr "Dynamisch" msgid "Automatic" msgstr "Autotisch" -#: admin/consts.py:145 admin/plugins/error_redir.py:35 +#: admin/consts.py:144 admin/plugins/error_redir.py:35 msgid "External" msgstr "Externe" -#: admin/consts.py:146 admin/plugins/error_redir.py:34 +#: admin/consts.py:145 admin/plugins/error_redir.py:34 msgid "Internal" msgstr "Interne" -#: admin/consts.py:189 admin/plugins/header.py:116 admin/plugins/proxy.py:94 +#: admin/consts.py:188 admin/plugins/header.py:118 admin/plugins/proxy.py:94 #: admin/plugins/proxy.py:144 admin/plugins/redir.py:76 #: admin/plugins/redir.py:106 admin/plugins/request.py:31 #: admin/plugins/url_arg.py:76 admin/plugins/url_arg.py:95 msgid "Regular Expression" msgstr "Reguliere Expressie" -#: admin/consts.py:191 +#: admin/consts.py:190 msgid "File Exists" msgstr "Bestand Bestaat" -#: admin/consts.py:192 +#: admin/consts.py:191 msgid "HTTP Method" msgstr "HTTP Methode" -#: admin/consts.py:193 admin/plugins/bind.py:76 admin/plugins/bind.py:129 +#: admin/consts.py:192 admin/plugins/bind.py:76 admin/plugins/bind.py:129 msgid "Incoming IP/Port" msgstr "Binnenkomende IP/Poort" -#: admin/consts.py:194 +#: admin/consts.py:193 msgid "SSL / TLS" msgstr "" -#: admin/consts.py:195 admin/plugins/fullpath.py:66 +#: admin/consts.py:194 admin/plugins/fullpath.py:66 #: admin/plugins/fullpath.py:101 msgid "Full Path" msgstr "Volledig pad" -#: admin/consts.py:196 admin/plugins/from.py:71 +#: admin/consts.py:195 admin/plugins/from.py:71 msgid "Connected from" msgstr "Verbonden van" -#: admin/consts.py:197 +#: admin/consts.py:196 msgid "URL Argument" msgstr "URL argument" -#: admin/consts.py:198 +#: admin/consts.py:197 msgid "GeoIP" msgstr "GeoIP" -#: admin/consts.py:202 +#: admin/consts.py:201 msgid "Match Nickname" msgstr "Bijnaam gelijk" -#: admin/consts.py:203 +#: admin/consts.py:202 msgid "Wildcards" msgstr "Jokers" -#: admin/consts.py:205 +#: admin/consts.py:204 msgid "Server IP" msgstr "Server IP" -#: admin/consts.py:209 admin/consts.py:255 +#: admin/consts.py:208 admin/consts.py:254 msgid "Not set" msgstr "Niet gezet" -#: admin/consts.py:210 +#: admin/consts.py:209 msgid "Already expired on 1970" msgstr "Reeks vervallen in 1970" -#: admin/consts.py:211 +#: admin/consts.py:210 msgid "Do not expire until 2038" msgstr "Vervalt niet tot 2038" -#: admin/consts.py:212 +#: admin/consts.py:211 msgid "Custom value" msgstr "Eigen waarde" -#: admin/consts.py:216 +#: admin/consts.py:215 msgid "No TLS/SSL" msgstr "Geen TLS/SSL" -#: admin/consts.py:217 +#: admin/consts.py:216 msgid "OpenSSL / libssl" msgstr "OpenSSL / libssl" -#: admin/consts.py:221 admin/util.py:91 +#: admin/consts.py:220 admin/util.py:91 msgid "Off" msgstr "Uit" -#: admin/consts.py:222 +#: admin/consts.py:221 msgid "Enhanced Virtual Hosting" msgstr "Uitgebreide Virtuele Hosting" -#: admin/consts.py:226 +#: admin/consts.py:225 msgid "Skip" msgstr "Sla over" -#: admin/consts.py:227 +#: admin/consts.py:226 msgid "Tolerate" msgstr "" -#: admin/consts.py:229 +#: admin/consts.py:228 msgid "Require" msgstr "Vereist" -#: admin/consts.py:234 +#: admin/consts.py:233 msgid "RRDtool graphs" msgstr "RRDtool grafieken" -#: admin/consts.py:238 +#: admin/consts.py:237 msgid "Local time" msgstr "Lokale tijd" -#: admin/consts.py:239 +#: admin/consts.py:238 msgid "UTC: Coordinated Universal Time" msgstr "UTC: Coordinated Universal Time" -#: admin/consts.py:243 +#: admin/consts.py:242 msgid "JSON" msgstr "JSON" -#: admin/consts.py:244 +#: admin/consts.py:243 msgid "Python" msgstr "Python" -#: admin/consts.py:245 admin/wizards/List.py:91 +#: admin/consts.py:244 admin/wizards/List.py:91 msgid "PHP" msgstr "PHP" -#: admin/consts.py:246 +#: admin/consts.py:245 msgid "Ruby" msgstr "Ruby" -#: admin/consts.py:251 +#: admin/consts.py:250 msgid "POST tracker" msgstr "POST volger" -#: admin/consts.py:256 +#: admin/consts.py:255 msgid "Public" msgstr "Publiek" -#: admin/consts.py:257 +#: admin/consts.py:256 msgid "Private" msgstr "Prive" -#: admin/consts.py:258 +#: admin/consts.py:257 msgid "No Cache" msgstr "Geen Cache" -#: admin/consts.py:263 +#: admin/consts.py:262 msgid "0 - No compression" msgstr "0 - Geen compressie" -#: admin/consts.py:264 +#: admin/consts.py:263 msgid "1" msgstr "" -#: admin/consts.py:265 +#: admin/consts.py:264 msgid "2" msgstr "" -#: admin/consts.py:266 +#: admin/consts.py:265 msgid "3" msgstr "" -#: admin/consts.py:267 +#: admin/consts.py:266 msgid "4" msgstr "" -#: admin/consts.py:268 +#: admin/consts.py:267 msgid "5" msgstr "" -#: admin/consts.py:269 +#: admin/consts.py:268 msgid "6" msgstr "" -#: admin/consts.py:270 +#: admin/consts.py:269 msgid "7" msgstr "" -#: admin/consts.py:271 +#: admin/consts.py:270 msgid "8" msgstr "" -#: admin/consts.py:272 +#: admin/consts.py:271 msgid "9 - Max compression" msgstr "9 - Maximale compressie" @@ -3609,66 +3649,66 @@ msgstr "Lijst van bestanden die mogen worden weergegeven." msgid "Only listing" msgstr "Alleen lijst" -#: admin/plugins/dirlist.py:49 admin/plugins/dirlist.py:50 #: admin/plugins/dirlist.py:51 admin/plugins/dirlist.py:52 #: admin/plugins/dirlist.py:53 admin/plugins/dirlist.py:54 +#: admin/plugins/dirlist.py:55 admin/plugins/dirlist.py:56 #: admin/plugins/redir.py:105 msgid "Show" msgstr "Toon" -#: admin/plugins/dirlist.py:49 +#: admin/plugins/dirlist.py:51 msgid "Show Size" msgstr "Toon grootte" -#: admin/plugins/dirlist.py:50 +#: admin/plugins/dirlist.py:52 msgid "Show Date" msgstr "Toon Datum" -#: admin/plugins/dirlist.py:51 +#: admin/plugins/dirlist.py:53 msgid "Show User" msgstr "Toon Gebruiker" -#: admin/plugins/dirlist.py:52 +#: admin/plugins/dirlist.py:54 msgid "Show Group" msgstr "Toon Groep" -#: admin/plugins/dirlist.py:53 +#: admin/plugins/dirlist.py:55 msgid "Show Backup files" msgstr "Toon Reservekopieën" -#: admin/plugins/dirlist.py:54 +#: admin/plugins/dirlist.py:56 msgid "Show Hidden files" msgstr "Toon Verborgen bestanden" -#: admin/plugins/dirlist.py:55 +#: admin/plugins/dirlist.py:58 admin/plugins/file.py:44 msgid "Allow symbolic links" msgstr "Sta symbolische koppeling toe" -#: admin/plugins/dirlist.py:56 +#: admin/plugins/dirlist.py:59 msgid "Redirect symbolic links" msgstr "Stuur symbolische koppelingen door" -#: admin/plugins/dirlist.py:60 +#: admin/plugins/dirlist.py:63 msgid "Listing" msgstr "Lijst" -#: admin/plugins/dirlist.py:65 +#: admin/plugins/dirlist.py:68 msgid "Theme" msgstr "Thema" -#: admin/plugins/dirlist.py:66 +#: admin/plugins/dirlist.py:69 msgid "Icons dir" msgstr "Icoon map" -#: admin/plugins/dirlist.py:67 +#: admin/plugins/dirlist.py:70 msgid "Notice files" msgstr "Notificatie bestanden" -#: admin/plugins/dirlist.py:68 +#: admin/plugins/dirlist.py:71 msgid "Hidden files" msgstr "Verborgen bestanden" -#: admin/plugins/dirlist.py:72 +#: admin/plugins/dirlist.py:75 msgid "Theming" msgstr "Thema's" @@ -3808,7 +3848,7 @@ msgstr "FastCGI Specifiek" msgid "Enables an internal I/O cache that improves performance." msgstr "Gebruikt interne I/O cache dat performance verbetert." -#: admin/plugins/file.py:45 +#: admin/plugins/file.py:49 msgid "File Sending" msgstr "Bestandsverzending" @@ -3897,23 +3937,23 @@ msgstr "" "Vergelijk tegen het volledige kopregel blok, in tegenstelling tot een " "specifieke kopregel." -#: admin/plugins/header.py:65 +#: admin/plugins/header.py:67 msgid "Matches a Regular Expression" msgstr "Vindt een Reguliere Expressie" -#: admin/plugins/header.py:66 +#: admin/plugins/header.py:68 msgid "Is Provided" msgstr "Is Doorgegeven" -#: admin/plugins/header.py:104 +#: admin/plugins/header.py:106 msgid "Full header" msgstr "Volledige hoofdregel" -#: admin/plugins/header.py:107 +#: admin/plugins/header.py:109 msgid "Complete Header" msgstr "Volledige Kopregel" -#: admin/plugins/header.py:154 +#: admin/plugins/header.py:156 #, python-format msgid "Header %(header)s is provided" msgstr "Kopregel %(header)s is gegeven" @@ -4037,7 +4077,7 @@ msgid "Database name containing the user/password pair list." msgstr "Danbank naam dat de gebruiker/wachtwoord lijst bevat." #: admin/plugins/mysql.py:41 -#, fuzzy +#, fuzzy, python-brace-format msgid "" "SQL command to execute. ${user} is replaced with the user name, and " "${passwd} is replaced with the user supplied password." @@ -4470,20 +4510,16 @@ msgstr "Voeg joker toe..." msgid "Accepted Domains" msgstr "Geaccepteerde Domeinen" -#: admin/server.py:68 +#: admin/server.py:70 #, python-format msgid "Server %(version)s running.. PID=%(pid)d Port=%(scgi_port)s" msgstr "Server %(version)s draait... PID=%(pid)d Poort=%(scgi_port)s" -#: admin/server.py:70 +#: admin/server.py:72 #, python-format msgid "Server %(version)s running.. PID=%(pid)d Socket=%(scgi_port)s" msgstr "Server %(version)s draait... PID=%(pid)d Poort=%(scgi_port)s" -#: admin/server.py:144 -msgid "Incorrect parameters: PORT CONFIG_FILE" -msgstr "Foutieve parameters: PORT CONFIG_FILE" - #: admin/util.py:91 msgid "On" msgstr "Aan" @@ -4884,18 +4920,16 @@ msgstr "Poort op computer waarop de dienst draait. (Voorbeeld: 8080)" #: admin/wizards/alfresco.py:45 admin/wizards/coldfusion.py:46 #: admin/wizards/concrete5.py:47 admin/wizards/django.py:44 #: admin/wizards/glassfish.py:45 admin/wizards/mailman.py:48 -#: admin/wizards/mono.py:46 admin/wizards/php.py:43 -#: admin/wizards/symfony.py:51 admin/wizards/uwsgi.py:61 -#: admin/wizards/zend.py:47 +#: admin/wizards/mono.py:46 admin/wizards/php.py:43 admin/wizards/symfony.py:51 +#: admin/wizards/uwsgi.py:61 admin/wizards/zend.py:47 msgid "Host name of the virtual server that is about to be created." msgstr "Computer naam van de virtuele computer die zo wordt gemaakt." #: admin/wizards/alfresco.py:46 admin/wizards/coldfusion.py:45 #: admin/wizards/concrete5.py:46 admin/wizards/django.py:43 #: admin/wizards/glassfish.py:46 admin/wizards/mailman.py:47 -#: admin/wizards/mono.py:45 admin/wizards/php.py:42 -#: admin/wizards/symfony.py:50 admin/wizards/uwsgi.py:60 -#: admin/wizards/zend.py:46 +#: admin/wizards/mono.py:45 admin/wizards/php.py:42 admin/wizards/symfony.py:50 +#: admin/wizards/uwsgi.py:60 admin/wizards/zend.py:46 msgid "New Virtual Server Details" msgstr "Nieuwe Virtuele Server Details" @@ -5849,3 +5883,49 @@ msgstr "Dat ziet er niet uit als een Zend broncode map." #: admin/wizards/zend.py:49 msgid "Web directory where you want Zend to be accessible. (Example: /zend)" msgstr "Web map waar je Zend wilt hebben. (Voorbeeld: /zend)" + +#~ msgid "Allow SSL v2" +#~ msgstr "Sta SSL v2 toe" + +#, fuzzy +#~ msgid "Disable %s" +#~ msgstr "Zet uit" + +#~ msgid "Incorrect parameters: PORT CONFIG_FILE" +#~ msgstr "Foutieve parameters: PORT CONFIG_FILE" + +#~ msgid "Mailing List Subscription" +#~ msgstr "Mailing lijst abonnement" + +#~ msgid "Optionally provide your name" +#~ msgstr "Optioneel kun je, je naam opgeven" + +#~ msgid "Purchase commercial support" +#~ msgstr "Koop commerciële ondersteuning" + +#~ msgid "Subscribe" +#~ msgstr "Abonneer" + +#~ msgid "" +#~ "There are a number of Community Mailing Lists\n" +#~ "available for you to subscribe. You can subscribe the General Discussion\n" +#~ "mailing list from this interface. There is where most of the discussions\n" +#~ "take place." +#~ msgstr "" +#~ "Er zijn een aantal Community Mailinglijsten\n" +#~ "beschikbaar om op te abonneren. Je kunt abonneren op de Algemene " +#~ "Discussie\n" +#~ "mailinglijst (Engels) vanaf deze applicatie. Hier vindt de meeste " +#~ "discussie\n" +#~ "plaats." + +#~ msgid "You will be sent an email requesting confirmation" +#~ msgstr "Je wordt een e-mail ter bevestiging gestuurd" + +#~ msgid "Your email address" +#~ msgstr "Je email adres" + +#~ msgid "Your name" +#~ msgstr "Je naam" diff --git a/po/admin/pl.po b/po/admin/pl.po index 55afab8ed..6358e1792 100644 --- a/po/admin/pl.po +++ b/po/admin/pl.po @@ -4,9 +4,9 @@ # FIRST AUTHOR Jedrzej Nowak , 2010-07-03 00:09+0100. msgid "" msgstr "" -"Project-Id-Version: cherokee 1.0\n" -"Report-Msgid-Bugs-To: http://bugs.cherokee-project.com/\n" -"POT-Creation-Date: 2014-01-04 00:54+0100\n" +"Project-Id-Version: cherokee 1.2.104\n" +"Report-Msgid-Bugs-To: https://github.com/cherokee/webserver/issues\n" +"POT-Creation-Date: 2021-03-26 19:04+0100\n" "PO-Revision-Date: 2011-09-24 17:51+0200\n" "Last-Translator: Paul Wysocki \n" "Language-Team: Polish <>\n" @@ -101,7 +101,7 @@ msgstr "Źródła danych" msgid "Assign Information Sources" msgstr "Przypisz źródło danych" -#: admin/Balancer.py:136 admin/PageIndex.py:204 admin/PageRule.py:112 +#: admin/Balancer.py:136 admin/PageIndex.py:182 admin/PageRule.py:112 #: admin/plugins/bind.py:69 admin/plugins/bind.py:121 #: admin/plugins/custom_error.py:41 admin/plugins/method.py:31 msgid "Choose" @@ -136,17 +136,17 @@ msgstr "Nie można skopiować pliku conf. do" #: admin/CTK/CTK/Druid.py:216 admin/CTK/CTK/Druid.py:224 #: admin/CTK/CTK/Druid.py:232 admin/CTK/CTK/Druid.py:238 admin/Icons.py:362 #: admin/Mime.py:110 admin/PageGeneral.py:289 admin/PageGeneral.py:317 -#: admin/PageIndex.py:232 admin/PageIndex.py:308 admin/PageRule.py:225 -#: admin/PageRule.py:276 admin/PageRule.py:302 admin/PageSource.py:225 -#: admin/PageSource.py:411 admin/PageSource.py:428 admin/PageSource.py:442 -#: admin/PageVServers.py:215 admin/PageVServers.py:252 -#: admin/PageVServers.py:281 admin/plugins/redir.py:120 +#: admin/PageIndex.py:246 admin/PageRule.py:225 admin/PageRule.py:276 +#: admin/PageRule.py:302 admin/PageSource.py:225 admin/PageSource.py:411 +#: admin/PageSource.py:428 admin/PageSource.py:442 admin/PageVServers.py:215 +#: admin/PageVServers.py:252 admin/PageVServers.py:281 +#: admin/plugins/redir.py:120 msgid "Cancel" msgstr "Anuluj" #: admin/CTK/CTK/Dialog.py:165 admin/CTK/CTK/Dialog.py:272 #: admin/CTK/CTK/Druid.py:243 admin/PageException.py:89 -#: admin/PageException.py:93 admin/PageGeneral.py:283 admin/PageIndex.py:277 +#: admin/PageException.py:93 admin/PageGeneral.py:283 admin/PageIndex.py:215 #: admin/PageSource.py:402 admin/plugins/error_redir.py:110 msgid "Close" msgstr "Zamknij" @@ -184,14 +184,14 @@ msgstr "Ładowanie" #: admin/CTK/CTK/Image.py:99 admin/CgiBase.py:69 admin/CgiBase.py:71 #: admin/CgiBase.py:124 admin/CgiBase.py:125 admin/CgiBase.py:126 #: admin/CgiBase.py:127 admin/CgiBase.py:128 admin/Graph.py:125 -#: admin/PageAdvanced.py:150 admin/PageEntry.py:150 admin/PageEntry.py:159 -#: admin/PageGeneral.py:193 admin/PageSource.py:296 -#: admin/plugins/dirlist.py:56 admin/plugins/exists.py:72 -#: admin/plugins/exists.py:77 admin/plugins/exists.py:78 -#: admin/plugins/exists.py:79 admin/plugins/exists.py:109 -#: admin/plugins/exists.py:115 admin/plugins/exists.py:116 -#: admin/plugins/exists.py:117 admin/plugins/file.py:40 -#: admin/plugins/ldap.py:53 admin/plugins/streaming.py:43 +#: admin/PageAdvanced.py:198 admin/PageEntry.py:150 admin/PageEntry.py:159 +#: admin/PageGeneral.py:193 admin/PageSource.py:296 admin/plugins/dirlist.py:59 +#: admin/plugins/exists.py:72 admin/plugins/exists.py:77 +#: admin/plugins/exists.py:78 admin/plugins/exists.py:79 +#: admin/plugins/exists.py:109 admin/plugins/exists.py:115 +#: admin/plugins/exists.py:116 admin/plugins/exists.py:117 +#: admin/plugins/file.py:42 admin/plugins/ldap.py:53 +#: admin/plugins/streaming.py:43 msgid "Enabled" msgstr "Włączone" @@ -208,11 +208,12 @@ msgstr "Poprzedni" msgid "Optional" msgstr "Opcjonalne" -#: admin/CTK/CTK/ToggleButton.py:154 +#: admin/CTK/CTK/ToggleButton.py:154 admin/PageAdvanced.py:245 +#: admin/PageAdvanced.py:258 msgid "Disable" msgstr "Wyłącz" -#: admin/CTK/CTK/ToggleButton.py:155 admin/PageVServer.py:669 +#: admin/CTK/CTK/ToggleButton.py:155 admin/PageVServer.py:678 #: admin/wizards/flcache.py:157 msgid "Enable" msgstr "Włącz" @@ -256,7 +257,7 @@ msgid "" "headers and use it in REMOTE_ADDR." msgstr "Czy handler powinien czytać i używać nagłówka X-Real-IP w REMOTE_ADDR." -#: admin/CgiBase.py:40 admin/PageVServer.py:70 +#: admin/CgiBase.py:40 admin/PageVServer.py:74 msgid "" "Accept all the X-Real-IP and X-Forwarded-For headers. WARNING: Turn it on " "only if you are centain of what you are doing." @@ -277,11 +278,11 @@ msgstr "" msgid "Read X-Real-IP" msgstr "Odczytuj X-Real-IP" -#: admin/CgiBase.py:71 admin/PageVServer.py:610 +#: admin/CgiBase.py:71 admin/PageVServer.py:614 msgid "Don't check origin" msgstr "Nie sprawdzaj pochodzenia" -#: admin/CgiBase.py:73 admin/PageVServer.py:613 +#: admin/CgiBase.py:73 admin/PageVServer.py:617 msgid "Accept from Hosts" msgstr "Pozwalaj z hostów" @@ -323,7 +324,7 @@ msgid "Allow X-Sendfile" msgstr "Zezwól na X-Sendfile" #: admin/CgiBase.py:128 admin/plugins/exists.py:77 admin/plugins/exists.py:115 -#: admin/plugins/file.py:40 +#: admin/plugins/file.py:42 msgid "Use I/O cache" msgstr "Używaj I/O cache" @@ -415,7 +416,7 @@ msgid "" msgstr "Zbierać czy nie statystyki dla tego serwera wirtualnego." #: admin/Graph.py:118 admin/PageEntry.py:538 admin/PageSource.py:257 -#: admin/PageStatus.py:70 admin/PageVServer.py:731 admin/PageVServers.py:210 +#: admin/PageStatus.py:70 admin/PageVServer.py:740 admin/PageVServers.py:210 msgid "Unknown" msgstr "Nieznane" @@ -427,7 +428,7 @@ msgstr "Zbieraj statystyki" msgid "Allows to specify an alternative Document Root path." msgstr "Pozwala ustawić alternatywną główną scieżkę dostępu." -#: admin/Handler.py:43 admin/PageEntry.py:523 admin/PageVServer.py:462 +#: admin/Handler.py:43 admin/PageEntry.py:523 admin/PageVServer.py:466 #: admin/PageVServers.py:128 admin/wizards/django.py:191 #: admin/wizards/mono.py:199 admin/wizards/php.py:39 admin/wizards/php.py:342 #: admin/wizards/uwsgi.py:267 @@ -439,7 +440,7 @@ msgid "Extension List" msgstr "Lista rozszerzeń" #: admin/Icons.py:129 admin/Icons.py:328 admin/Mime.py:96 admin/Mime.py:131 -#: admin/consts.py:188 admin/plugins/extensions.py:61 +#: admin/consts.py:187 admin/plugins/extensions.py:61 #: admin/wizards/flcache.py:141 msgid "Extensions" msgstr "Rozszerzenia" @@ -460,12 +461,13 @@ msgstr "Pliki" msgid "Add New File" msgstr "Dodaj nowy plik" -#: admin/Icons.py:197 admin/Icons.py:329 admin/Rule.py:174 admin/consts.py:42 -#: admin/consts.py:128 admin/consts.py:262 +#: admin/Icons.py:197 admin/Icons.py:329 admin/PageVServer.py:674 +#: admin/PageVServer.py:675 admin/Rule.py:174 admin/consts.py:42 +#: admin/consts.py:128 admin/consts.py:261 msgid "Default" msgstr "Domyślne" -#: admin/Icons.py:198 admin/Icons.py:330 admin/consts.py:187 +#: admin/Icons.py:198 admin/Icons.py:330 admin/consts.py:186 #: admin/plugins/directory.py:31 msgid "Directory" msgstr "Katalog" @@ -478,7 +480,7 @@ msgstr "Przejdź do rodzica" msgid "Modify" msgstr "Zmień" -#: admin/Icons.py:214 admin/PageAdvanced.py:168 admin/PageAdvanced.py:192 +#: admin/Icons.py:214 admin/PageAdvanced.py:216 admin/PageAdvanced.py:316 msgid "Special Files" msgstr "Pliki specjalne" @@ -585,7 +587,7 @@ msgstr "Zapisz" msgid "Home" msgstr "Główna" -#: admin/Page.py:155 admin/PageAdvanced.py:150 admin/PageIndex.py:84 +#: admin/Page.py:155 admin/PageAdvanced.py:198 admin/PageIndex.py:62 #: admin/PageStatus.py:40 admin/PageStatus.py:112 msgid "Status" msgstr "Status" @@ -602,7 +604,7 @@ msgstr "serwery wirtualne" msgid "Sources" msgstr "Źródła" -#: admin/Page.py:159 admin/PageAdvanced.py:97 admin/PageAdvanced.py:198 +#: admin/Page.py:159 admin/PageAdvanced.py:145 admin/PageAdvanced.py:322 msgid "Advanced" msgstr "Zaawansowane" @@ -614,7 +616,19 @@ msgstr "Pomoc" msgid "Updating..." msgstr "Aktualizowanie..." -#: admin/PageAdvanced.py:64 +#: admin/PageAdvanced.py:56 +msgid "" +"

WARNING: The SSL/TLS back-end supports more recent\n" +"versions of TLS protocols, which are not recognized by Cherokee. Please " +"check\n" +"for latest Cherokee updates or report this issue. As a temporary workaround " +"please\n" +"set 'Max. TLS protocol version' to the maximum TLS protocol version " +"supported by\n" +"Cherokee.

Following unknown TLS protocols have been found:" +msgstr "" + +#: admin/PageAdvanced.py:94 msgid "" "

WARNING: This section contains advanced\n" "configuration parameters. Changing things is not recommended unless\n" @@ -624,17 +638,17 @@ msgstr "" " parametry konfiguracyjne. Zmiany tutaj nie są zalecane jeśli\n" " nie jesteś przekonany co dokładnie robisz.

" -#: admin/PageAdvanced.py:68 +#: admin/PageAdvanced.py:98 msgid "Defines which thread policy the OS should apply to the server." msgstr "" "Określa jaką politykę wątków system operacyjny powinien zastosować dla " "serwera." -#: admin/PageAdvanced.py:69 +#: admin/PageAdvanced.py:99 msgid "If empty, Cherokee will calculate a default number." msgstr "Jeśli puste, Cherokee wyliczy domyślną wartość" -#: admin/PageAdvanced.py:70 +#: admin/PageAdvanced.py:100 msgid "" "It defines how many file descriptors the server should handle. Default is " "the number showed by ulimit -n" @@ -642,19 +656,19 @@ msgstr "" "Określa jak dużo deskryptorów plików serwer powinien obsługiwać. Domyślnie " "jest to wartość z ulimit -n" -#: admin/PageAdvanced.py:71 +#: admin/PageAdvanced.py:101 msgid "Allows to choose the internal file descriptor polling method." msgstr "Pozwala na wybranie metody " -#: admin/PageAdvanced.py:72 +#: admin/PageAdvanced.py:102 msgid "Minimum size of a file to use sendfile(). Default: 32768 Bytes." msgstr "Minimalny rozmiar pliku dla sendfile(). Domyślnie: 32768 Bytes." -#: admin/PageAdvanced.py:73 +#: admin/PageAdvanced.py:103 msgid "Maximum size of a file to use sendfile(). Default: 2 GB." msgstr "Maksymalny rozmiar pliku dla sendfile(). Domyślnie: 2GB." -#: admin/PageAdvanced.py:74 +#: admin/PageAdvanced.py:104 msgid "" "Name a program that will be called if, by some reason, the server fails. " "Default: cherokee-panic." @@ -662,15 +676,15 @@ msgstr "" "Nazwa programu który ma zostać uruchomiony jeśli z jakiegoś powodu serwer " "przestanie działać. Domyślnie: cherokee-panic." -#: admin/PageAdvanced.py:75 +#: admin/PageAdvanced.py:105 msgid "Path of the PID file. If empty, the file will not be created." msgstr "Scieżka do pliku PID. Jeśli puste, plik nie będzie utworzony." -#: admin/PageAdvanced.py:76 +#: admin/PageAdvanced.py:106 msgid "Max. length of the incoming connection queue." msgstr "Maksymalna długość kolejki przychodzących połączeń" -#: admin/PageAdvanced.py:77 +#: admin/PageAdvanced.py:107 msgid "" "Set the number of how many internal connections can be held for reuse by " "each thread. Default: 20." @@ -678,7 +692,7 @@ msgstr "" "Ilość połączeń jaka ma być przetrzymywana do ponownego użycia przez każdy " "wątek. Domyślnie 20." -#: admin/PageAdvanced.py:78 +#: admin/PageAdvanced.py:108 msgid "" "Sets the number of seconds between log consolidations (flushes). Default: 10 " "seconds." @@ -686,18 +700,18 @@ msgstr "" "Ustaw liczbę sekund pomiędzy zapisywaniem do logów (flush). Domyślnie: 10 " "sekund." -#: admin/PageAdvanced.py:79 +#: admin/PageAdvanced.py:109 msgid "Time lapse (in seconds) between Nonce cache clean ups." msgstr "Odstęp czasu (w sekundach) pomiędzy kolejnymi czyszczeniami cache" -#: admin/PageAdvanced.py:80 +#: admin/PageAdvanced.py:110 msgid "" "Enables the server-wide keep-alive support. It increases the performance. It " "is usually set on." msgstr "" "Włącza keep-alive po stronie serwera. Zwiększa wydajność. Zwykle włączone." -#: admin/PageAdvanced.py:81 +#: admin/PageAdvanced.py:111 msgid "" "Maximum number of HTTP requests that can be served by each keepalive " "connection." @@ -705,29 +719,29 @@ msgstr "" "Maksymalna liczba zapytań HTTP która może być obsługiwana przez połączenie " "keepalive." -#: admin/PageAdvanced.py:82 +#: admin/PageAdvanced.py:112 msgid "" "Allows the server to use Chunked encoding to try to keep Keep-Alive enabled." msgstr "" "Pozwala na używanie kodowania Chunked aby zostawić Keep-Alive włączone." -#: admin/PageAdvanced.py:83 +#: admin/PageAdvanced.py:113 msgid "Activate or deactivate the I/O cache globally." msgstr "Globalnie włącza lub wyłącza I/O cache." -#: admin/PageAdvanced.py:84 +#: admin/PageAdvanced.py:114 msgid "Number of pages that the cache should handle." msgstr "Liczba stron którą cache powinno obsługiwać." -#: admin/PageAdvanced.py:85 +#: admin/PageAdvanced.py:115 msgid "Files under this size (in bytes) will not be cached." msgstr "Pliki poniżej tego rozmiaru nie będą cacheowane." -#: admin/PageAdvanced.py:86 +#: admin/PageAdvanced.py:116 msgid "Files over this size (in bytes) will not be cached." msgstr "Pliki powyżej tej wielkości nie będą cacheowane." -#: admin/PageAdvanced.py:87 +#: admin/PageAdvanced.py:117 msgid "" "How long (in seconds) the file information should last cached without " "refreshing it." @@ -735,169 +749,230 @@ msgstr "" "Jak długo (w sekundach) informacje o pliku powinny być cacheowane bez ich " "odswierzania." -#: admin/PageAdvanced.py:88 +#: admin/PageAdvanced.py:118 msgid "How long (in seconds) the file content should last cached." msgstr "" "Jak długo (w sekundach) zawartość pliku powinna być przetrzymywana w cache." -#: admin/PageAdvanced.py:89 +#: admin/PageAdvanced.py:119 msgid "Path to a Diffie Hellman (DH) parameters PEM file: 512 bits." msgstr "Scieżka " -#: admin/PageAdvanced.py:90 +#: admin/PageAdvanced.py:120 msgid "Path to a Diffie Hellman (DH) parameters PEM file: 1024 bits." msgstr "Ścieżka do pliku PEM dla Diffie Hellman (DH): 1024 bity." -#: admin/PageAdvanced.py:91 +#: admin/PageAdvanced.py:121 msgid "Path to a Diffie Hellman (DH) parameters PEM file: 2048 bits." msgstr "Ścieżka do pliku PEM dla Diffie Hellman (DH): 2048 bity." -#: admin/PageAdvanced.py:92 +#: admin/PageAdvanced.py:122 msgid "Path to a Diffie Hellman (DH) parameters PEM file: 4096 bits." msgstr "Ścieżka do pliku PEM dla Diffie Hellman (DH): 4096 bity." -#: admin/PageAdvanced.py:93 +#: admin/PageAdvanced.py:123 +msgid "Your Cherokee Web Server does not support SSL/TLS encryption." +msgstr "" + +#: admin/PageAdvanced.py:124 msgid "Timeout for the TLS/SSL handshake. Default: 15 seconds." msgstr "" -#: admin/PageAdvanced.py:94 +#: admin/PageAdvanced.py:125 +msgid "Beware: it is vulnerable. You should disable SSLv2." +msgstr "" + +#: admin/PageAdvanced.py:126 +msgid "Beware: it is vulnerable. You should disable SSLv3." +msgstr "" + +#: admin/PageAdvanced.py:127 +msgid "TLSv1 is deprecated" +msgstr "" + +#: admin/PageAdvanced.py:128 +msgid "TLSv1.1 is deprecated" +msgstr "" + +#: admin/PageAdvanced.py:129 admin/PageAdvanced.py:130 +msgid " " +msgstr "" + +#: admin/PageAdvanced.py:131 +msgid "" +"The following options work in combination with above min/max TLS protocol " +"version settings. They are deprecated, only set the minimum and maximum " +"supported protocol versions instead." +msgstr "" + +#: admin/PageAdvanced.py:133 msgid "" -"Allow clients to use SSL version 2 - Beware: it is vulnerable. (Default: No)" +"Minimum required TLS protocol version from clients (Default: auto-configured " +"by libssl)" msgstr "" -#: admin/PageAdvanced.py:119 admin/PageAdvanced.py:121 +#: admin/PageAdvanced.py:134 +msgid "" +"Maximum supported TLS protocol version (Default: auto-configured by libssl)" +msgstr "" + +#: admin/PageAdvanced.py:167 admin/PageAdvanced.py:169 msgid "Allowed" msgstr "Dozwolone" -#: admin/PageAdvanced.py:119 +#: admin/PageAdvanced.py:167 msgid "Keep Alive" msgstr "Keep Alive" -#: admin/PageAdvanced.py:120 +#: admin/PageAdvanced.py:168 msgid "Max keepalive reqs" msgstr "Maksymalna ilość zapytań keepalive" -#: admin/PageAdvanced.py:121 +#: admin/PageAdvanced.py:169 msgid "Chunked Encoding" msgstr "Chunked Encoding" -#: admin/PageAdvanced.py:122 +#: admin/PageAdvanced.py:170 msgid "Polling Method" msgstr "Polling Method" -#: admin/PageAdvanced.py:123 +#: admin/PageAdvanced.py:171 msgid "Sendfile min size" msgstr "Sendfile min. rozmiar" -#: admin/PageAdvanced.py:124 +#: admin/PageAdvanced.py:172 msgid "Sendfile max size" msgstr "Sendfile maks. rozmiar" -#: admin/PageAdvanced.py:126 admin/PageAdvanced.py:189 +#: admin/PageAdvanced.py:174 admin/PageAdvanced.py:313 msgid "Connections" msgstr "Połączenia" -#: admin/PageAdvanced.py:134 +#: admin/PageAdvanced.py:182 msgid "Thread Number" msgstr "Ilość wątków" -#: admin/PageAdvanced.py:135 +#: admin/PageAdvanced.py:183 msgid "Thread Policy" msgstr "Thread Policy" -#: admin/PageAdvanced.py:136 +#: admin/PageAdvanced.py:184 msgid "File descriptors" msgstr "Deskryptory plików" -#: admin/PageAdvanced.py:137 +#: admin/PageAdvanced.py:185 msgid "Listening queue length" msgstr "Długość kolejki do nasłuchiwania" -#: admin/PageAdvanced.py:138 admin/plugins/proxy.py:239 +#: admin/PageAdvanced.py:186 admin/plugins/proxy.py:239 msgid "Reuse connections" msgstr "Połączenia do ponownego użycia" -#: admin/PageAdvanced.py:139 +#: admin/PageAdvanced.py:187 msgid "Log flush time" msgstr "Czas odświeżania logów" -#: admin/PageAdvanced.py:140 +#: admin/PageAdvanced.py:188 #, fuzzy msgid "Nonces clean up time" msgstr "Nonces clean up time" -#: admin/PageAdvanced.py:142 admin/PageAdvanced.py:190 +#: admin/PageAdvanced.py:190 admin/PageAdvanced.py:314 msgid "Resources" msgstr "Zasoby" -#: admin/PageAdvanced.py:151 +#: admin/PageAdvanced.py:199 msgid "Max pages" msgstr "Maksymalnie stron" -#: admin/PageAdvanced.py:152 +#: admin/PageAdvanced.py:200 msgid "File Min Size" msgstr "Minimalny rozmiar pliku" -#: admin/PageAdvanced.py:153 +#: admin/PageAdvanced.py:201 msgid "File Max Size" msgstr "Maksymalny rozmiar pliku" -#: admin/PageAdvanced.py:154 +#: admin/PageAdvanced.py:202 msgid "Lasting: stat" msgstr "" -#: admin/PageAdvanced.py:155 +#: admin/PageAdvanced.py:203 msgid "Lasting: mmap" msgstr "" -#: admin/PageAdvanced.py:157 admin/PageAdvanced.py:191 +#: admin/PageAdvanced.py:205 admin/PageAdvanced.py:315 msgid "I/O cache" msgstr "I/O cache" -#: admin/PageAdvanced.py:165 +#: admin/PageAdvanced.py:213 msgid "Panic action" msgstr "Akcja panic" -#: admin/PageAdvanced.py:166 +#: admin/PageAdvanced.py:214 msgid "PID file" msgstr "plik PID" -#: admin/PageAdvanced.py:176 admin/PageEntry.py:84 admin/PageVServer.py:476 -#: admin/plugins/common.py:42 admin/plugins/common.py:43 -#: admin/plugins/dirlist.py:55 admin/plugins/proxy.py:240 -msgid "Allow" -msgstr "Zezwól" +#: admin/PageAdvanced.py:245 admin/PageAdvanced.py:247 +#: admin/PageAdvanced.py:258 admin/PageAdvanced.py:260 +#, fuzzy +msgid "Disable " +msgstr "Wyłącz" + +#: admin/PageAdvanced.py:247 +msgid "Protocol deacrivated" +msgstr "" -#: admin/PageAdvanced.py:176 -msgid "Allow SSL v2" -msgstr "Zezwalaj na użycie SSL v2" +#: admin/PageAdvanced.py:247 +msgid "Protocol not supported" +msgstr "" + +#: admin/PageAdvanced.py:260 +msgid "Protocol deactivated" +msgstr "" + +#: admin/PageAdvanced.py:262 +msgid "Turn off selected TLS Protocols (Deprecated)" +msgstr "" -#: admin/PageAdvanced.py:177 +#: admin/PageAdvanced.py:270 admin/PageAdvanced.py:271 +msgid "auto-configured" +msgstr "" + +#: admin/PageAdvanced.py:285 +msgid "Min. TLS protocol version" +msgstr "" + +#: admin/PageAdvanced.py:290 +msgid "Max. TLS protocol version" +msgstr "" + +#: admin/PageAdvanced.py:291 msgid "Handshake Timeout" msgstr "" -#: admin/PageAdvanced.py:178 +#: admin/PageAdvanced.py:292 msgid "DH parameters: 512 bits" msgstr "Parametry DH: 512 bit" -#: admin/PageAdvanced.py:179 +#: admin/PageAdvanced.py:293 msgid "DH parameters: 1024 bits" msgstr "Parametry DH: 1024 bit" -#: admin/PageAdvanced.py:180 +#: admin/PageAdvanced.py:294 msgid "DH parameters: 2048 bits" msgstr "Parametry DH: 2048 bit" -#: admin/PageAdvanced.py:181 +#: admin/PageAdvanced.py:295 msgid "DH parameters: 4096 bits" msgstr "Parametry DH: 4096 bit" -#: admin/PageAdvanced.py:183 admin/PageAdvanced.py:193 -#: admin/PageGeneral.py:239 admin/plugins/bind.py:92 +#: admin/PageAdvanced.py:296 admin/PageAdvanced.py:317 admin/PageGeneral.py:239 +#: admin/plugins/bind.py:92 msgid "TLS" msgstr "TLS" -#: admin/PageAdvanced.py:199 +#: admin/PageAdvanced.py:323 msgid "Advanced Configuration" msgstr "Konfiguracja zaawansowana" @@ -996,7 +1071,7 @@ msgstr "GZip encoder" msgid "Deflate encoder" msgstr "Deflate encoder" -#: admin/PageEntry.py:78 admin/PageEntry.py:173 admin/PageVServer.py:149 +#: admin/PageEntry.py:78 admin/PageEntry.py:173 admin/PageVServer.py:153 msgid "Authentication" msgstr "Autoryzacja" @@ -1006,7 +1081,13 @@ msgstr "Moduły autoryzacji" #: admin/PageEntry.py:83 admin/PageEntry.py:89 msgid "Leave unset" -msgstr "Zostaw nieustawione" +msgstr "" + +#: admin/PageEntry.py:84 admin/PageVServer.py:480 admin/plugins/common.py:42 +#: admin/plugins/common.py:43 admin/plugins/dirlist.py:58 +#: admin/plugins/file.py:44 admin/plugins/proxy.py:240 +msgid "Allow" +msgstr "" #: admin/PageEntry.py:85 msgid "Forbid" @@ -1035,7 +1116,7 @@ msgstr "" msgid "Remove" msgstr "Usuń" -#: admin/PageEntry.py:126 admin/PageVServer.py:155 +#: admin/PageEntry.py:126 admin/PageVServer.py:159 #: admin/plugins/secdownload.py:44 msgid "Timeout" msgstr "Timeout" @@ -1048,7 +1129,7 @@ msgstr "Timeout połączeń" msgid "Limit traffic to" msgstr "Ogranicz ruch do" -#: admin/PageEntry.py:139 admin/PageVServer.py:156 +#: admin/PageEntry.py:139 admin/PageVServer.py:160 msgid "Traffic Shaping" msgstr "Zarządzanie ruchem" @@ -1056,7 +1137,7 @@ msgstr "Zarządzanie ruchem" msgid "Skip Logging" msgstr "Pomiń logowanie" -#: admin/PageEntry.py:154 admin/PageVServer.py:720 +#: admin/PageEntry.py:154 admin/PageVServer.py:729 msgid "Logging" msgstr "Logowanie" @@ -1081,14 +1162,14 @@ msgstr "Mechanizm walidacji" msgid "Can not be empty" msgstr "Nie może być puste" -#: admin/PageEntry.py:216 admin/PageEntry.py:268 admin/consts.py:190 -#: admin/plugins/header.py:110 admin/plugins/header.py:151 -#: admin/plugins/header.py:156 admin/plugins/proxy.py:193 +#: admin/PageEntry.py:216 admin/PageEntry.py:268 admin/consts.py:189 +#: admin/plugins/header.py:112 admin/plugins/header.py:153 +#: admin/plugins/header.py:158 admin/plugins/proxy.py:193 msgid "Header" msgstr "Nagłówek" #: admin/PageEntry.py:216 admin/PageSource.py:284 -#: admin/plugins/error_redir.py:105 admin/plugins/header.py:113 +#: admin/plugins/error_redir.py:105 admin/plugins/header.py:115 #: admin/plugins/redir.py:76 msgid "Type" msgstr "Typ" @@ -1105,7 +1186,7 @@ msgstr "Akcja" msgid "Add New Header" msgstr "" -#: admin/PageEntry.py:326 admin/consts.py:204 admin/plugins/redir.py:39 +#: admin/PageEntry.py:326 admin/consts.py:203 admin/plugins/redir.py:39 #: admin/plugins/rehost.py:53 msgid "Regular Expressions" msgstr "Wyrażenia regularne" @@ -1123,8 +1204,7 @@ msgstr "" msgid "Caching Policy" msgstr "" -#: admin/PageEntry.py:381 admin/plugins/rehost.py:68 -#: admin/plugins/rehost.py:92 +#: admin/PageEntry.py:381 admin/plugins/rehost.py:68 admin/plugins/rehost.py:92 msgid "New Regular Expression" msgstr "Nowe wyrażenie regularne" @@ -1132,7 +1212,7 @@ msgstr "Nowe wyrażenie regularne" msgid "Disregarded Cookies" msgstr "" -#: admin/PageEntry.py:402 admin/PageVServer.py:154 +#: admin/PageEntry.py:402 admin/PageVServer.py:158 msgid "Expiration" msgstr "Wygasa" @@ -1164,7 +1244,7 @@ msgstr "" msgid "Content Expiration" msgstr "Wygasanie zawartości" -#: admin/PageEntry.py:433 admin/PageVServer.py:153 +#: admin/PageEntry.py:433 admin/PageVServer.py:157 #, fuzzy msgid "Cache" msgstr "Brak cache" @@ -1188,7 +1268,7 @@ msgid "Matching Rule" msgstr "Pasująca reguła" #: admin/PageEntry.py:514 admin/PageEntry.py:528 admin/PageEntry.py:553 -#: admin/PageVServer.py:148 +#: admin/PageVServer.py:152 msgid "Handler" msgstr "Handler" @@ -1206,7 +1286,7 @@ msgstr "Platformy" msgid "Caching" msgstr "Pasująca reguła" -#: admin/PageEntry.py:556 admin/PageVServer.py:721 +#: admin/PageEntry.py:556 admin/PageVServer.py:730 msgid "Security" msgstr "Bezpieczeństwo" @@ -1473,7 +1553,7 @@ msgstr "IPv6" msgid "SSL/TLS back-end" msgstr "SSL/TLS back-end" -#: admin/PageGeneral.py:197 admin/PageIndex.py:252 +#: admin/PageGeneral.py:197 admin/PageIndex.py:198 msgid "Support" msgstr "Wsparcie" @@ -1506,8 +1586,8 @@ msgid "Bind to" msgstr "Binduj do" #: admin/PageGeneral.py:239 admin/PageGeneral.py:310 admin/plugins/bind.py:92 -#: admin/plugins/bind.py:155 admin/plugins/bind.py:157 -#: admin/plugins/ldap.py:48 admin/plugins/mysql.py:77 +#: admin/plugins/bind.py:155 admin/plugins/bind.py:157 admin/plugins/ldap.py:48 +#: admin/plugins/mysql.py:77 msgid "Port" msgstr "Port" @@ -1570,7 +1650,7 @@ msgstr "Group" msgid "Chroot" msgstr "Chroot" -#: admin/PageGeneral.py:357 admin/PageVServer.py:479 +#: admin/PageGeneral.py:357 admin/PageVServer.py:483 msgid "Network" msgstr "Sieć" @@ -1598,172 +1678,131 @@ msgstr "Zawartość" msgid "Documentation" msgstr "Dokumentacja" -#: admin/PageIndex.py:67 -msgid "You will be sent an email requesting confirmation" -msgstr "Otrzymasz email w celach potwierdzenia" - -#: admin/PageIndex.py:68 -msgid "Optionally provide your name" -msgstr "Opcjonalnie podaj swoje Imie" - -#: admin/PageIndex.py:70 -#, python-format -msgid "" -"There are a number of Community Mailing Lists\n" -"available for you to subscribe. You can subscribe the General Discussion\n" -"mailing list from this interface. There is where most of the discussions\n" -"take place." -msgstr "" -"Są dostępne listy mailingowe\n" -" społeczności dostępne do subskrypcji. Możesz subskrybować listę ogólną z " -"interfejsu. Większość dyskusji odbywa się na tej liście." - -#: admin/PageIndex.py:77 +#: admin/PageIndex.py:58 #, fuzzy msgid "Server is Running" msgstr "Serwer jest uruchomiony." -#: admin/PageIndex.py:78 +#: admin/PageIndex.py:59 msgid "Server is not Running" msgstr "Serwer nie jest uruchomiony" -#: admin/PageIndex.py:132 +#: admin/PageIndex.py:110 msgid "Stop Server" msgstr "Zatrzymaj serwer" -#: admin/PageIndex.py:136 +#: admin/PageIndex.py:114 msgid "Start Server" msgstr "Uruchom serwer" -#: admin/PageIndex.py:141 +#: admin/PageIndex.py:119 msgid "Hostname" msgstr "Nazwa hosta" -#: admin/PageIndex.py:143 +#: admin/PageIndex.py:121 msgid "Modified" msgstr "Zmieniony" -#: admin/PageIndex.py:145 +#: admin/PageIndex.py:123 msgid "Not found" msgstr "Nie znaleziono" -#: admin/PageIndex.py:146 +#: admin/PageIndex.py:124 msgid "Config File" msgstr "Plik konfiguracyjny" -#: admin/PageIndex.py:153 admin/plugins/server_info.py:32 +#: admin/PageIndex.py:131 admin/plugins/server_info.py:32 #: admin/plugins/server_info.py:35 msgid "Server Information" msgstr "Informacje o serwerze" -#: admin/PageIndex.py:165 +#: admin/PageIndex.py:143 msgid "Processors" msgstr "Procesory" -#: admin/PageIndex.py:177 +#: admin/PageIndex.py:155 msgid "Memory" msgstr "Pamięć" -#: admin/PageIndex.py:211 admin/plugins/dbslayer.py:51 +#: admin/PageIndex.py:189 admin/plugins/dbslayer.py:51 msgid "Language" msgstr "Język" -#: admin/PageIndex.py:231 -#, fuzzy -msgid "Mailing List Subscription" -msgstr "Subskrypcja listy mailingowej" - -#: admin/PageIndex.py:233 -msgid "Subscribe" -msgstr "Zapisz się" - -#: admin/PageIndex.py:236 -msgid "Your email address" -msgstr "Twój email" - -#: admin/PageIndex.py:237 -msgid "Your name" -msgstr "Twoje Imię" - -#: admin/PageIndex.py:256 +#: admin/PageIndex.py:202 msgid "Getting started" msgstr "Pierwsze kroki" -#: admin/PageIndex.py:260 -msgid "Subscribe to mailing lists" +#: admin/PageIndex.py:206 +#, fuzzy +msgid "Visit the mailing list" msgstr "Subskrybuj listę mailingową" -#: admin/PageIndex.py:268 +#: admin/PageIndex.py:210 msgid "Report a bug" msgstr "Zgłoś błąd" -#: admin/PageIndex.py:272 -msgid "Purchase commercial support" -msgstr "Kup wsparcie komercyjne" - -#: admin/PageIndex.py:276 admin/PageIndex.py:280 +#: admin/PageIndex.py:214 admin/PageIndex.py:218 msgid "About Cherokee" msgstr "O Cherokee" -#: admin/PageIndex.py:289 +#: admin/PageIndex.py:227 msgid "Join the Cherokee Community:" msgstr "Dołącz do społeczności Cherokee:" -#: admin/PageIndex.py:292 +#: admin/PageIndex.py:230 msgid "Visit the Cherokee Project Website" msgstr "Odwiedź stronę projektu Cherokee" -#: admin/PageIndex.py:293 +#: admin/PageIndex.py:231 msgid "Follow us on Twitter" msgstr "Śledź nas na Twitterze" -#: admin/PageIndex.py:294 +#: admin/PageIndex.py:232 msgid "Join us on Facebook" msgstr "Dołącz do nas na Facebooku" -#: admin/PageIndex.py:295 +#: admin/PageIndex.py:233 #, fuzzy msgid "Join us on Google+" msgstr "Dołącz do nas na Facebooku" -#: admin/PageIndex.py:296 +#: admin/PageIndex.py:234 msgid "Fork us on Github" msgstr "" -#: admin/PageIndex.py:297 +#: admin/PageIndex.py:235 msgid "Become a member of Cherokee group on LinkedIn" msgstr "Stań się członkiem grupy Cherokee na LinedIn" -#: admin/PageIndex.py:298 +#: admin/PageIndex.py:236 msgid "Chat with us at irc.freenode.net" msgstr "Dołącz do chatu na irc.freenode.net" -#: admin/PageIndex.py:307 +#: admin/PageIndex.py:245 msgid "Shutdown Cherokee-admin" msgstr "Wyłącz Cherokee Admin" -#: admin/PageIndex.py:309 +#: admin/PageIndex.py:247 msgid "Shut down" msgstr "Wyłącz" -#: admin/PageIndex.py:310 +#: admin/PageIndex.py:248 msgid "You are about to shut down this instance of Cherokee-admin" msgstr "Masz zamiar wyłączyć Cherokee-admin" -#: admin/PageIndex.py:311 +#: admin/PageIndex.py:249 msgid "Are you sure you want to proceed?" msgstr "Na pewno chcesz kontynuować?" -#: admin/PageIndex.py:314 +#: admin/PageIndex.py:252 msgid "Cherokee-admin has been shut down" msgstr "Cherokee-admin został wyłączony" -#: admin/PageIndex.py:316 +#: admin/PageIndex.py:254 msgid "Shut down Cherokee-Admin" msgstr "Wyłącz Cherokee Admin" -#: admin/PageIndex.py:329 admin/PageIndex.py:350 +#: admin/PageIndex.py:267 admin/PageIndex.py:288 msgid "Welcome to Cherokee Admin" msgstr "Witaj w Cherokee Admin" @@ -1850,7 +1889,7 @@ msgstr "Ręczna" msgid "Manual configuration" msgstr "Ręczna konfiguracja" -#: admin/PageRule.py:249 admin/PageVServer.py:158 +#: admin/PageRule.py:249 admin/PageVServer.py:162 msgid "Final" msgstr "Finalne" @@ -1878,7 +1917,7 @@ msgstr "Klonuj" msgid "Clone Selected Behavior Rule" msgstr "Klonuj wybraną regułę" -#: admin/PageRule.py:314 admin/PageVServer.py:718 +#: admin/PageRule.py:314 admin/PageVServer.py:727 msgid "Behavior" msgstr "Zachowanie" @@ -2024,7 +2063,7 @@ msgstr "Dodaj nową zmienna" msgid "Source Usage" msgstr "" -#: admin/PageSource.py:253 admin/PageVServer.py:723 +#: admin/PageSource.py:253 admin/PageVServer.py:732 msgid "Virtual Server" msgstr "Serwer wirtualny" @@ -2078,7 +2117,7 @@ msgstr "Sklonuj wybrane źródło danych" msgid "Sources Filtering" msgstr "Filtrowanie źródeł" -#: admin/PageSources.py:35 admin/PageVServer.py:141 admin/PageVServers.py:48 +#: admin/PageSources.py:35 admin/PageVServer.py:145 admin/PageVServers.py:48 #: admin/PageVServers.py:294 msgid "Virtual Servers" msgstr "Serwery wirtualne" @@ -2100,20 +2139,24 @@ msgid "Virtual Server Filtering" msgstr "Filtrowanie serwerów wirtualnych" #: admin/PageVServer.py:44 +msgid "Reference" +msgstr "" + +#: admin/PageVServer.py:47 msgid "Nickname for the virtual server." msgstr "Nazwa tego serwera wirtualnego" -#: admin/PageVServer.py:45 +#: admin/PageVServer.py:48 msgid "" "This directive points to the PEM-encoded Certificate file for the server " "(Full path to the file)" msgstr "Pełna ścieżka do certyfikatu serwera (PEM-encoded)." -#: admin/PageVServer.py:46 +#: admin/PageVServer.py:49 msgid "PEM-encoded Private Key file for the server (Full path to the file)" msgstr "Pełna scieżka do prywatnego klucza (PEM-encoded)" -#: admin/PageVServer.py:47 +#: admin/PageVServer.py:50 msgid "" "File containing the trusted CA certificates, utilized for checking the " "client certificates (Full path to the file)" @@ -2121,41 +2164,38 @@ msgstr "" "Plik zawierający zaufane certyfikaty CA, używany do sprawdzania certyfikatów " "klientów (Pełna ścieżka do pliku)" -#: admin/PageVServer.py:48 -#, fuzzy -msgid "" -"Ciphers that TLS/SSL is allowed to use. Reference. (Default enables " -"Forward Secrecy)." +#: admin/PageVServer.py:51 +msgid "Ciphers that TLSv1.2 and below is allowed to use." +msgstr "Metody szyfrujące jakich TLS/SSL może uzywać." + +#: admin/PageVServer.py:52 +msgid "Ciphersuites that TLSv1.3 is allowed to use." msgstr "" -"Metody szyfrujące jakich TLS/SSL może uzywać. Dokumentacja. " -"(Domyślnie: wszystkie wspierane)" -#: admin/PageVServer.py:49 +#: admin/PageVServer.py:53 msgid "" "The cipher sequence that is specified by the server should have preference " "over the client preference. (Default: True)." msgstr "" -#: admin/PageVServer.py:50 +#: admin/PageVServer.py:54 msgid "" "Explicitly enable or disable serverside compression support. (Default: " "Disabled)." msgstr "" -#: admin/PageVServer.py:51 +#: admin/PageVServer.py:55 msgid "" "Explicitely sets the Diffie-Hellman parameters length. (Default: Let openssl " "choose)." msgstr "" -#: admin/PageVServer.py:52 +#: admin/PageVServer.py:56 #, fuzzy msgid "Skip, Tolerate, Accept or Require client certificates." msgstr "Pomijaj, akceptuj lub wymagaj certyfikatów klienta" -#: admin/PageVServer.py:53 +#: admin/PageVServer.py:57 msgid "" "Limit up to which depth certificates in a chain are used during the " "verification procedure (Default: 1)" @@ -2163,11 +2203,11 @@ msgstr "" "Ogranicz jak głęboko sprawdzać certyfikaty klienta w łańcuchu podczas " "procedury weryfikacyjnej" -#: admin/PageVServer.py:54 +#: admin/PageVServer.py:58 msgid "Allows the selection of how to generate the error responses." msgstr "Pozwala wybrać w jaki sposób generować odpowiedzi błędu" -#: admin/PageVServer.py:55 +#: admin/PageVServer.py:59 msgid "" "Directory inside the user home directory to use as root web directory. " "Disabled if empty." @@ -2175,19 +2215,19 @@ msgstr "" "Katalog wewnątrz katalogu użytkownika który ma być używany jako katalog web. " "Wyłączone jeśli puste." -#: admin/PageVServer.py:56 +#: admin/PageVServer.py:60 msgid "The personal web support is currently turned on." msgstr "Wsparcie dla stron domowych użytkowników jest włączone." -#: admin/PageVServer.py:57 +#: admin/PageVServer.py:61 msgid "Adds a new domain name. Wildcards are allowed in the domain name." msgstr "Dodaj nową domenę. Wildcardy są dozwolone" -#: admin/PageVServer.py:58 +#: admin/PageVServer.py:62 msgid "Virtual Server root directory." msgstr "Katalog główny " -#: admin/PageVServer.py:59 +#: admin/PageVServer.py:63 msgid "" "List of name files that will be used as directory index. Eg: index.html," "index.php." @@ -2195,44 +2235,44 @@ msgstr "" "Lista nazw plików które mają być używane jako domyślne. Np: index.html," "index.php." -#: admin/PageVServer.py:60 +#: admin/PageVServer.py:64 msgid "The maximum size, in bytes, for POST uploads. (Default: unlimited)" msgstr "" "Maksymalny rozmiar, w bajtach, dla uploadu POST. (Domyślnie: nielimitowany)" -#: admin/PageVServer.py:61 +#: admin/PageVServer.py:65 msgid "Whether this virtual server is allowed to use Keep-alive (Default: yes)" msgstr "Czy ten serwer wirtualny może używać Keep-alive (Domyślnie: tak)" -#: admin/PageVServer.py:62 +#: admin/PageVServer.py:66 msgid "The Logging is currently enabled." msgstr "Logowanie jest obecnie włączone." -#: admin/PageVServer.py:63 +#: admin/PageVServer.py:67 msgid "Logging format. Apache compatible is highly recommended here." msgstr "Format logowania. Zalecany jest kompatybilny z Apache." -#: admin/PageVServer.py:64 +#: admin/PageVServer.py:68 msgid "Back-end used to store the log accesses." msgstr "Back-end używany do przetrzymywania logów dostępowych" -#: admin/PageVServer.py:65 +#: admin/PageVServer.py:69 msgid "Back-end used to store the log errors." msgstr "Back-end używany do przechowywania błędów" -#: admin/PageVServer.py:66 +#: admin/PageVServer.py:70 msgid "Back-end used to store the log accesses and errors." msgstr "Back-end używany do przechowywania logów dostępowych oraz błędów" -#: admin/PageVServer.py:67 +#: admin/PageVServer.py:71 msgid "Full path to the file where the information will be saved." msgstr "Pełna scieżka do pliku gdzie informacje będą zapisane" -#: admin/PageVServer.py:68 +#: admin/PageVServer.py:72 msgid "Path to the executable that will be invoked on each log entry." msgstr "Scieżka do pliku który ma być wywoływany co każdy wpis do logów." -#: admin/PageVServer.py:69 +#: admin/PageVServer.py:73 msgid "" "Whether the logger should read and use the X-Real-IP and X-Forwarded-For " "headers (send by reverse proxies)." @@ -2240,7 +2280,7 @@ msgstr "" "Czy logger powinien używać nagłówków X-Real-IP oraz X-Forwarded-For " "(przesyłanych przez reverse proxy)." -#: admin/PageVServer.py:71 +#: admin/PageVServer.py:75 msgid "" "List of IP addresses and subnets that are allowed to send X-Real-IP and X-" "Forwarded-For headers." @@ -2248,478 +2288,483 @@ msgstr "" "Lista adresów IP oraz podsieci które mają pozwolenie na wysyłanie nagłówków " "X-Real-IP oraz X-Forwarded-For." -#: admin/PageVServer.py:72 +#: admin/PageVServer.py:76 msgid "" "How to support the \"Advanced Virtual Hosting\" mechanism. (Default: off)" msgstr "" "Metoda używania mechanizmu Zaawansowanego Hostingu Wirtualnego. (Domyślnie: " "wyłączone)" -#: admin/PageVServer.py:73 +#: admin/PageVServer.py:77 msgid "The following variables are accepted: " msgstr "" -#: admin/PageVServer.py:74 +#: admin/PageVServer.py:78 msgid "Allows the selection of domain matching method." msgstr "Pozwala na wybranie sposobu dopasowania domeny." -#: admin/PageVServer.py:75 +#: admin/PageVServer.py:79 msgid "" "Whether or not it should collected statistics about the traffic of this " "virtual server." msgstr "Czy zbierać statystyki odnośnie tego serwera wirtualnego." -#: admin/PageVServer.py:76 +#: admin/PageVServer.py:80 msgid "Time standard to use in the log file entries." msgstr "Standard czasu używany w pliku log." -#: admin/PageVServer.py:77 +#: admin/PageVServer.py:81 msgid "" "Remember that only \"File Exists\" rules and \"List & Send\" handlers use " "the Directory Indexes setting." msgstr "" -#: admin/PageVServer.py:78 +#: admin/PageVServer.py:82 msgid "" "Use this nickname as an additional host name for this virtual server " "(Default: yes)" msgstr "" -#: admin/PageVServer.py:79 +#: admin/PageVServer.py:83 msgid "Enforce HTTPS by using the HTTP Strict Transport Security." msgstr "" -#: admin/PageVServer.py:80 +#: admin/PageVServer.py:84 msgid "" "How long the client's browser should remember the forced HTTPS (in seconds)." msgstr "" -#: admin/PageVServer.py:81 +#: admin/PageVServer.py:85 msgid "" "Should HSTS be used in all the subdomains of this virtual server (Default: " "yes)." msgstr "" -#: admin/PageVServer.py:83 +#: admin/PageVServer.py:87 msgid "

The 'default' virtual server matches all the domain names.

" msgstr "

Domyślny serwer wirtualny odpowiada każdej domenie.

" -#: admin/PageVServer.py:86 +#: admin/PageVServer.py:90 msgid "Remote IP address" msgstr "Zdalny adres IP " -#: admin/PageVServer.py:87 +#: admin/PageVServer.py:91 #, fuzzy msgid "Local IP address" msgstr "Twój email" -#: admin/PageVServer.py:88 +#: admin/PageVServer.py:92 #, fuzzy msgid "Request Protocol" msgstr "Zapytanie" -#: admin/PageVServer.py:89 +#: admin/PageVServer.py:93 msgid "Transport type: http or https" msgstr "" -#: admin/PageVServer.py:90 +#: admin/PageVServer.py:94 msgid "Port of the server serving the request" msgstr "" -#: admin/PageVServer.py:91 +#: admin/PageVServer.py:95 msgid "The query string, if exists" msgstr "" -#: admin/PageVServer.py:92 +#: admin/PageVServer.py:96 msgid "First line of HTTP request" msgstr "" -#: admin/PageVServer.py:93 +#: admin/PageVServer.py:97 msgid "Response status code" msgstr "" -#: admin/PageVServer.py:94 +#: admin/PageVServer.py:98 msgid "Time: in common log format time format" msgstr "" -#: admin/PageVServer.py:95 +#: admin/PageVServer.py:99 msgid "Time: seconds since Epoch" msgstr "" -#: admin/PageVServer.py:96 +#: admin/PageVServer.py:100 msgid "Time: milliseconds since Epoch" msgstr "" -#: admin/PageVServer.py:97 +#: admin/PageVServer.py:101 msgid "Remote user (authentication)" msgstr "Zdalny użytkownik (autoryzacja)" -#: admin/PageVServer.py:98 +#: admin/PageVServer.py:102 msgid "URL path requested" msgstr "" -#: admin/PageVServer.py:99 +#: admin/PageVServer.py:103 msgid "URL path requested before any rewrite" msgstr "" -#: admin/PageVServer.py:100 +#: admin/PageVServer.py:104 msgid "Virtual Server nick name" msgstr "Pseudonim serwera wirtualnego" -#: admin/PageVServer.py:101 +#: admin/PageVServer.py:105 msgid "Requested host (Host: header)" msgstr "" -#: admin/PageVServer.py:102 +#: admin/PageVServer.py:106 msgid "Size of the response in bytes" msgstr "" -#: admin/PageVServer.py:103 +#: admin/PageVServer.py:107 msgid "'Host:' header of the request" msgstr "" -#: admin/PageVServer.py:104 +#: admin/PageVServer.py:108 msgid "'Referrer:' header of the request" msgstr "" -#: admin/PageVServer.py:105 +#: admin/PageVServer.py:109 msgid "'User-Agent:' header of the request" msgstr "" -#: admin/PageVServer.py:106 +#: admin/PageVServer.py:110 msgid "'Cookie:' header of the request" msgstr "" -#: admin/PageVServer.py:142 +#: admin/PageVServer.py:146 msgid "Loggers" msgstr "Loggery" -#: admin/PageVServer.py:143 +#: admin/PageVServer.py:147 msgid "SSL cookbook" msgstr "SSL cookbook" -#: admin/PageVServer.py:147 admin/PageVServer.py:184 +#: admin/PageVServer.py:151 admin/PageVServer.py:188 msgid "Match" msgstr "Pasuje" -#: admin/PageVServer.py:147 +#: admin/PageVServer.py:151 msgid "Rule Match" msgstr "" -#: admin/PageVServer.py:148 +#: admin/PageVServer.py:152 msgid "Assigned Handler" msgstr "Przypisany handler" -#: admin/PageVServer.py:149 +#: admin/PageVServer.py:153 msgid "Auth" msgstr "" -#: admin/PageVServer.py:150 +#: admin/PageVServer.py:154 msgid "Custom Document Root" msgstr "Własna ścieżka główna" -#: admin/PageVServer.py:150 +#: admin/PageVServer.py:154 msgid "Root" msgstr "Root" -#: admin/PageVServer.py:151 +#: admin/PageVServer.py:155 msgid "Only HTTPS" msgstr "Tylko HTTPS" -#: admin/PageVServer.py:151 +#: admin/PageVServer.py:155 msgid "Secure" msgstr "Bezp" -#: admin/PageVServer.py:152 +#: admin/PageVServer.py:156 msgid "Enc" msgstr "" -#: admin/PageVServer.py:152 +#: admin/PageVServer.py:156 msgid "Encoders" msgstr "" -#: admin/PageVServer.py:153 +#: admin/PageVServer.py:157 #, fuzzy msgid "Cacheable" msgstr "Zgodny z apache" -#: admin/PageVServer.py:154 +#: admin/PageVServer.py:158 msgid "Exp" msgstr "" -#: admin/PageVServer.py:155 +#: admin/PageVServer.py:159 msgid "Connection Timeout" msgstr "Timeout połączenia" -#: admin/PageVServer.py:156 +#: admin/PageVServer.py:160 msgid "Shaping" msgstr "" -#: admin/PageVServer.py:157 +#: admin/PageVServer.py:161 msgid "Log" msgstr "" -#: admin/PageVServer.py:157 +#: admin/PageVServer.py:161 msgid "Logging Enabled" msgstr "Logowanie włączone" -#: admin/PageVServer.py:158 +#: admin/PageVServer.py:162 msgid "Rule is Final" msgstr "Reguła jest finalna" -#: admin/PageVServer.py:184 +#: admin/PageVServer.py:188 msgid "Match nickname" msgstr "Pasujący pseudonim" -#: admin/PageVServer.py:188 admin/PageVServer.py:717 +#: admin/PageVServer.py:192 admin/PageVServer.py:726 msgid "Host Match" msgstr "Pasuje host" -#: admin/PageVServer.py:218 admin/PageVServer.py:234 admin/PageVServer.py:258 -#: admin/PageVServer.py:485 admin/PageVServer.py:519 -#: admin/plugins/method.py:99 admin/plugins/method.py:109 +#: admin/PageVServer.py:222 admin/PageVServer.py:238 admin/PageVServer.py:262 +#: admin/PageVServer.py:489 admin/PageVServer.py:523 admin/plugins/method.py:99 +#: admin/plugins/method.py:109 msgid "Method" msgstr "Metoda" -#: admin/PageVServer.py:226 admin/PageVServer.py:242 +#: admin/PageVServer.py:230 admin/PageVServer.py:246 #, fuzzy msgid "Remove criteria" msgstr "Zdalny host" -#: admin/PageVServer.py:260 +#: admin/PageVServer.py:264 msgid "How to match this Virtual Server" msgstr "" -#: admin/PageVServer.py:267 +#: admin/PageVServer.py:271 msgid "Add an additional matching criteria" msgstr "" -#: admin/PageVServer.py:358 +#: admin/PageVServer.py:362 msgid "Behavior Rules" msgstr "Reguły zachowań" -#: admin/PageVServer.py:367 +#: admin/PageVServer.py:371 msgid "Rule Management" msgstr "Zarządzanie regułami" -#: admin/PageVServer.py:393 +#: admin/PageVServer.py:397 msgid "Only accept Secure Connections" msgstr "Akceptuj tylko bezpieczne połączenia" -#: admin/PageVServer.py:398 +#: admin/PageVServer.py:402 msgid "Encoding enabled" msgstr "Kodowanie włączone" -#: admin/PageVServer.py:404 +#: admin/PageVServer.py:408 msgid "no" msgstr "nie" -#: admin/PageVServer.py:415 +#: admin/PageVServer.py:419 msgid " seconds" msgstr "sekund" -#: admin/PageVServer.py:420 +#: admin/PageVServer.py:424 msgid " bytes per second" msgstr "bajtów na sekundę" -#: admin/PageVServer.py:425 +#: admin/PageVServer.py:429 msgid "Logging enabled for this rule" msgstr "Logowanie włączone dla tej reguły" -#: admin/PageVServer.py:430 +#: admin/PageVServer.py:434 msgid "Prevents further rule evaluation" msgstr "Zatrzymuje dalsze sprawdzanie reguł" -#: admin/PageVServer.py:435 +#: admin/PageVServer.py:439 msgid "Content can be cached" msgstr "" -#: admin/PageVServer.py:438 +#: admin/PageVServer.py:442 msgid "Forbids content caching" msgstr "" -#: admin/PageVServer.py:455 +#: admin/PageVServer.py:459 msgid "Virtual Server nickname" msgstr "Nazwa serwera wirtualnego" -#: admin/PageVServer.py:457 +#: admin/PageVServer.py:461 msgid "Server ID" msgstr "ID serwera" -#: admin/PageVServer.py:463 +#: admin/PageVServer.py:467 msgid "Directory Indexes" msgstr "Indeksy dla katalogu" -#: admin/PageVServer.py:465 admin/plugins/fullpath.py:119 +#: admin/PageVServer.py:469 admin/plugins/fullpath.py:119 msgid "Paths" msgstr "Scieżki" -#: admin/PageVServer.py:471 +#: admin/PageVServer.py:475 msgid "Neither are in use at the moment." msgstr "" -#: admin/PageVServer.py:476 +#: admin/PageVServer.py:480 msgid "Keep-alive" msgstr "Keep-alive" -#: admin/PageVServer.py:477 +#: admin/PageVServer.py:481 msgid "Max Upload Size" msgstr "Maksymalna wielkość uploadu" -#: admin/PageVServer.py:487 admin/plugins/evhost.py:33 +#: admin/PageVServer.py:491 admin/plugins/evhost.py:33 msgid "Advanced Virtual Hosting" msgstr "Zaawansowany hosting wirtualny" -#: admin/PageVServer.py:521 +#: admin/PageVServer.py:525 msgid "Error Handling hook" msgstr "" -#: admin/PageVServer.py:532 admin/consts.py:233 admin/consts.py:250 +#: admin/PageVServer.py:536 admin/consts.py:232 admin/consts.py:249 msgid "Disabled" msgstr "Wyłączone" -#: admin/PageVServer.py:536 +#: admin/PageVServer.py:540 msgid "Write errors to" msgstr "Zapisuj błędy do" -#: admin/PageVServer.py:540 admin/PageVServer.py:579 +#: admin/PageVServer.py:544 admin/PageVServer.py:583 msgid "Filename" msgstr "Nazwa pliku" -#: admin/PageVServer.py:542 admin/PageVServer.py:582 +#: admin/PageVServer.py:546 admin/PageVServer.py:586 msgid "Command" msgstr "Komenda" -#: admin/PageVServer.py:548 +#: admin/PageVServer.py:552 msgid "Error Logging" msgstr "Logowanie błędów" -#: admin/PageVServer.py:559 +#: admin/PageVServer.py:563 msgid "Format" msgstr "Format" -#: admin/PageVServer.py:566 +#: admin/PageVServer.py:570 msgid "Write accesses to" msgstr "Zapisz dostępowe do" -#: admin/PageVServer.py:589 +#: admin/PageVServer.py:593 msgid "Hide" msgstr "Ukryj" -#: admin/PageVServer.py:589 +#: admin/PageVServer.py:593 #, fuzzy msgid "Show macros" msgstr "Pokazuj Group" -#: admin/PageVServer.py:598 +#: admin/PageVServer.py:602 msgid "Template: " msgstr "Szablon:" -#: admin/PageVServer.py:600 +#: admin/PageVServer.py:604 msgid "Access Logging" msgstr "Logowanie dostępu" -#: admin/PageVServer.py:606 +#: admin/PageVServer.py:610 msgid "Time standard" msgstr "Standard czasu" -#: admin/PageVServer.py:607 admin/PageVServer.py:687 admin/consts.py:228 +#: admin/PageVServer.py:611 admin/PageVServer.py:696 admin/consts.py:227 msgid "Accept" msgstr "Akceptuj" -#: admin/PageVServer.py:607 +#: admin/PageVServer.py:611 msgid "Accept Forwarded IPs" msgstr "Akceptuj przekierowane IP" -#: admin/PageVServer.py:610 +#: admin/PageVServer.py:614 msgid "Do not check" msgstr "Nie sprawdzaj" -#: admin/PageVServer.py:619 +#: admin/PageVServer.py:623 msgid "Logging Options" msgstr "Opcje logowania" -#: admin/PageVServer.py:655 admin/wizards/ssl_test.py:136 +#: admin/PageVServer.py:659 admin/wizards/ssl_test.py:136 msgid "Certificate" msgstr "Certyfikat" -#: admin/PageVServer.py:656 +#: admin/PageVServer.py:660 msgid "Certificate key" msgstr "Klucz certyfikatu" -#: admin/PageVServer.py:661 +#: admin/PageVServer.py:665 msgid "Required SSL/TLS Values" msgstr "Wymagane wartości SSL/TLS" -#: admin/PageVServer.py:666 +#: admin/PageVServer.py:674 +#, fuzzy +msgid "Ciphersuites" +msgstr "Metody szyfrujące" + +#: admin/PageVServer.py:675 msgid "Ciphers" msgstr "Metody szyfrujące" -#: admin/PageVServer.py:667 +#: admin/PageVServer.py:676 msgid "Prefer" msgstr "" -#: admin/PageVServer.py:667 +#: admin/PageVServer.py:676 #, fuzzy msgid "Server Preference" msgstr "Ruch na serwerze" -#: admin/PageVServer.py:668 +#: admin/PageVServer.py:677 msgid "Client Certs. Request" msgstr "" -#: admin/PageVServer.py:669 +#: admin/PageVServer.py:678 #, fuzzy msgid "Compression" msgstr "Poziom kompresji" -#: admin/PageVServer.py:670 +#: admin/PageVServer.py:679 msgid "DH length" msgstr "" -#: admin/PageVServer.py:673 +#: admin/PageVServer.py:682 msgid "CA List" msgstr "Lista CA" -#: admin/PageVServer.py:676 +#: admin/PageVServer.py:685 msgid "Verify Depth" msgstr "Sprawdzaj głębokość" -#: admin/PageVServer.py:682 +#: admin/PageVServer.py:691 msgid "Advanced Options" msgstr "Opcje zaawansowane" -#: admin/PageVServer.py:687 +#: admin/PageVServer.py:696 #, fuzzy msgid "Enable HSTS" msgstr "Włącz" -#: admin/PageVServer.py:690 +#: admin/PageVServer.py:699 msgid "HSTS Max-Age" msgstr "" -#: admin/PageVServer.py:690 +#: admin/PageVServer.py:699 msgid "One year" msgstr "" -#: admin/PageVServer.py:691 +#: admin/PageVServer.py:700 #, fuzzy msgid "Include Subdomains" msgstr "Wyślij swoje domeny" -#: admin/PageVServer.py:691 +#: admin/PageVServer.py:700 msgid "Include all" msgstr "" -#: admin/PageVServer.py:697 +#: admin/PageVServer.py:706 msgid "HTTP Strict Transport Security (HSTS)" msgstr "" -#: admin/PageVServer.py:716 +#: admin/PageVServer.py:725 msgid "Basics" msgstr "Podstawy" -#: admin/PageVServer.py:719 +#: admin/PageVServer.py:728 msgid "Error Handler" msgstr "Handler błędów" @@ -3015,8 +3060,8 @@ msgstr "Nazwa + platforma" msgid "Full Server string" msgstr "Pełny" -#: admin/consts.py:51 admin/consts.py:80 admin/consts.py:97 -#: admin/consts.py:111 admin/plugins/mysql.py:45 +#: admin/consts.py:51 admin/consts.py:80 admin/consts.py:97 admin/consts.py:111 +#: admin/plugins/mysql.py:45 msgid "None" msgstr "Żadne" @@ -3214,191 +3259,191 @@ msgstr "Dynamiczne" msgid "Automatic" msgstr "Automatycznie" -#: admin/consts.py:145 admin/plugins/error_redir.py:35 +#: admin/consts.py:144 admin/plugins/error_redir.py:35 msgid "External" msgstr "Zewnętrzne" -#: admin/consts.py:146 admin/plugins/error_redir.py:34 +#: admin/consts.py:145 admin/plugins/error_redir.py:34 msgid "Internal" msgstr "Wewnętrzne" -#: admin/consts.py:189 admin/plugins/header.py:116 admin/plugins/proxy.py:94 +#: admin/consts.py:188 admin/plugins/header.py:118 admin/plugins/proxy.py:94 #: admin/plugins/proxy.py:144 admin/plugins/redir.py:76 #: admin/plugins/redir.py:106 admin/plugins/request.py:31 #: admin/plugins/url_arg.py:76 admin/plugins/url_arg.py:95 msgid "Regular Expression" msgstr "Wyrażenie regularne" -#: admin/consts.py:191 +#: admin/consts.py:190 msgid "File Exists" msgstr "Plik istnieje" -#: admin/consts.py:192 +#: admin/consts.py:191 msgid "HTTP Method" msgstr "Metoda HTTP" -#: admin/consts.py:193 admin/plugins/bind.py:76 admin/plugins/bind.py:129 +#: admin/consts.py:192 admin/plugins/bind.py:76 admin/plugins/bind.py:129 msgid "Incoming IP/Port" msgstr "Przychodzące IP/Port" -#: admin/consts.py:194 +#: admin/consts.py:193 msgid "SSL / TLS" msgstr "SSL / TLS" -#: admin/consts.py:195 admin/plugins/fullpath.py:66 +#: admin/consts.py:194 admin/plugins/fullpath.py:66 #: admin/plugins/fullpath.py:101 msgid "Full Path" msgstr "Pełna scieżka" -#: admin/consts.py:196 admin/plugins/from.py:71 +#: admin/consts.py:195 admin/plugins/from.py:71 msgid "Connected from" msgstr "Połączono z" -#: admin/consts.py:197 +#: admin/consts.py:196 msgid "URL Argument" msgstr "Argument URL" -#: admin/consts.py:198 +#: admin/consts.py:197 msgid "GeoIP" msgstr "GeoIP" -#: admin/consts.py:202 +#: admin/consts.py:201 msgid "Match Nickname" msgstr "Pasujący nickname" -#: admin/consts.py:203 +#: admin/consts.py:202 msgid "Wildcards" msgstr "Wildcard" -#: admin/consts.py:205 +#: admin/consts.py:204 msgid "Server IP" msgstr "IP Serwera" -#: admin/consts.py:209 admin/consts.py:255 +#: admin/consts.py:208 admin/consts.py:254 msgid "Not set" msgstr "Nie ustawiono" -#: admin/consts.py:210 +#: admin/consts.py:209 msgid "Already expired on 1970" msgstr "Wygasłe w 1970" -#: admin/consts.py:211 +#: admin/consts.py:210 msgid "Do not expire until 2038" msgstr "Nie wygasa do 2038" -#: admin/consts.py:212 +#: admin/consts.py:211 msgid "Custom value" msgstr "Własna wartość" -#: admin/consts.py:216 +#: admin/consts.py:215 msgid "No TLS/SSL" msgstr "Bez TLS/SSL" -#: admin/consts.py:217 +#: admin/consts.py:216 msgid "OpenSSL / libssl" msgstr "OpenSSL / libssl" -#: admin/consts.py:221 admin/util.py:91 +#: admin/consts.py:220 admin/util.py:91 msgid "Off" msgstr "Wyłącz" -#: admin/consts.py:222 +#: admin/consts.py:221 msgid "Enhanced Virtual Hosting" msgstr "Rozszerzony hosting wirtualny" -#: admin/consts.py:226 +#: admin/consts.py:225 msgid "Skip" msgstr "Pomiń" -#: admin/consts.py:227 +#: admin/consts.py:226 msgid "Tolerate" msgstr "" -#: admin/consts.py:229 +#: admin/consts.py:228 msgid "Require" msgstr "Wymagaj" -#: admin/consts.py:234 +#: admin/consts.py:233 msgid "RRDtool graphs" msgstr "Grafy RRDtool" -#: admin/consts.py:238 +#: admin/consts.py:237 msgid "Local time" msgstr "Czas lokalny" -#: admin/consts.py:239 +#: admin/consts.py:238 msgid "UTC: Coordinated Universal Time" msgstr "UTC: Coordinated Universal Time" -#: admin/consts.py:243 +#: admin/consts.py:242 msgid "JSON" msgstr "JSON" -#: admin/consts.py:244 +#: admin/consts.py:243 msgid "Python" msgstr "Python" -#: admin/consts.py:245 admin/wizards/List.py:91 +#: admin/consts.py:244 admin/wizards/List.py:91 msgid "PHP" msgstr "PHP" -#: admin/consts.py:246 +#: admin/consts.py:245 msgid "Ruby" msgstr "Ruby" -#: admin/consts.py:251 +#: admin/consts.py:250 msgid "POST tracker" msgstr "Śledzenie POST" -#: admin/consts.py:256 +#: admin/consts.py:255 msgid "Public" msgstr "Publiczny" -#: admin/consts.py:257 +#: admin/consts.py:256 msgid "Private" msgstr "Prywatny" -#: admin/consts.py:258 +#: admin/consts.py:257 msgid "No Cache" msgstr "Brak cache" -#: admin/consts.py:263 +#: admin/consts.py:262 msgid "0 - No compression" msgstr "0 - Brak kompresji" -#: admin/consts.py:264 +#: admin/consts.py:263 msgid "1" msgstr "1" -#: admin/consts.py:265 +#: admin/consts.py:264 msgid "2" msgstr "2" -#: admin/consts.py:266 +#: admin/consts.py:265 msgid "3" msgstr "3" -#: admin/consts.py:267 +#: admin/consts.py:266 msgid "4" msgstr "4" -#: admin/consts.py:268 +#: admin/consts.py:267 msgid "5" msgstr "5" -#: admin/consts.py:269 +#: admin/consts.py:268 msgid "6" msgstr "6" -#: admin/consts.py:270 +#: admin/consts.py:269 msgid "7" msgstr "7" -#: admin/consts.py:271 +#: admin/consts.py:270 msgid "8" msgstr "8" -#: admin/consts.py:272 +#: admin/consts.py:271 msgid "9 - Max compression" msgstr "9 - Maksymalna kompresja" @@ -3578,66 +3623,66 @@ msgstr "Lista plików które nie powinny być listowane." msgid "Only listing" msgstr "Tylko listuj" -#: admin/plugins/dirlist.py:49 admin/plugins/dirlist.py:50 #: admin/plugins/dirlist.py:51 admin/plugins/dirlist.py:52 #: admin/plugins/dirlist.py:53 admin/plugins/dirlist.py:54 +#: admin/plugins/dirlist.py:55 admin/plugins/dirlist.py:56 #: admin/plugins/redir.py:105 msgid "Show" msgstr "Pokaż" -#: admin/plugins/dirlist.py:49 +#: admin/plugins/dirlist.py:51 msgid "Show Size" msgstr "Pokaż rozmiar" -#: admin/plugins/dirlist.py:50 +#: admin/plugins/dirlist.py:52 msgid "Show Date" msgstr "Pokaż datę" -#: admin/plugins/dirlist.py:51 +#: admin/plugins/dirlist.py:53 msgid "Show User" msgstr "Pokazuj User" -#: admin/plugins/dirlist.py:52 +#: admin/plugins/dirlist.py:54 msgid "Show Group" msgstr "Pokazuj Group" -#: admin/plugins/dirlist.py:53 +#: admin/plugins/dirlist.py:55 msgid "Show Backup files" msgstr "Pokaż pliki backup" -#: admin/plugins/dirlist.py:54 +#: admin/plugins/dirlist.py:56 msgid "Show Hidden files" msgstr "Pokaż ukryte pliki" -#: admin/plugins/dirlist.py:55 +#: admin/plugins/dirlist.py:58 admin/plugins/file.py:44 msgid "Allow symbolic links" msgstr "Pozwalaj na linki symboliczne" -#: admin/plugins/dirlist.py:56 +#: admin/plugins/dirlist.py:59 msgid "Redirect symbolic links" msgstr "Podążaj za dowiązaniami" -#: admin/plugins/dirlist.py:60 +#: admin/plugins/dirlist.py:63 msgid "Listing" msgstr "Listowanie" -#: admin/plugins/dirlist.py:65 +#: admin/plugins/dirlist.py:68 msgid "Theme" msgstr "Temat" -#: admin/plugins/dirlist.py:66 +#: admin/plugins/dirlist.py:69 msgid "Icons dir" msgstr "Katalog ikon" -#: admin/plugins/dirlist.py:67 +#: admin/plugins/dirlist.py:70 msgid "Notice files" msgstr "Pliki powiadomień" -#: admin/plugins/dirlist.py:68 +#: admin/plugins/dirlist.py:71 msgid "Hidden files" msgstr "Ukryty download" -#: admin/plugins/dirlist.py:72 +#: admin/plugins/dirlist.py:75 msgid "Theming" msgstr "Tematy" @@ -3775,7 +3820,7 @@ msgstr "Specyficzne dla FastCGI" msgid "Enables an internal I/O cache that improves performance." msgstr "Włącza wewnętrzny cache I/O, wyraźnie zwiększa wydajność" -#: admin/plugins/file.py:45 +#: admin/plugins/file.py:49 msgid "File Sending" msgstr "Wysyłanie plików" @@ -3862,23 +3907,23 @@ msgid "" "header entry." msgstr "" -#: admin/plugins/header.py:65 +#: admin/plugins/header.py:67 msgid "Matches a Regular Expression" msgstr "" -#: admin/plugins/header.py:66 +#: admin/plugins/header.py:68 msgid "Is Provided" msgstr "" -#: admin/plugins/header.py:104 +#: admin/plugins/header.py:106 msgid "Full header" msgstr "" -#: admin/plugins/header.py:107 +#: admin/plugins/header.py:109 msgid "Complete Header" msgstr "" -#: admin/plugins/header.py:154 +#: admin/plugins/header.py:156 #, python-format msgid "Header %(header)s is provided" msgstr "" @@ -4002,7 +4047,7 @@ msgid "Database name containing the user/password pair list." msgstr "Nazwa bazy zawierające listę użytkownik/hasło." #: admin/plugins/mysql.py:41 -#, fuzzy +#, fuzzy, python-brace-format msgid "" "SQL command to execute. ${user} is replaced with the user name, and " "${passwd} is replaced with the user supplied password." @@ -4431,20 +4476,16 @@ msgstr "Dodaj nową dziką kartę" msgid "Accepted Domains" msgstr "Akceptowane domeny" -#: admin/server.py:68 +#: admin/server.py:70 #, python-format msgid "Server %(version)s running.. PID=%(pid)d Port=%(scgi_port)s" msgstr "Serwer %(version)s jest uruchomiony.. PID=%(pid)d Port=%(scgi_port)s" -#: admin/server.py:70 +#: admin/server.py:72 #, python-format msgid "Server %(version)s running.. PID=%(pid)d Socket=%(scgi_port)s" msgstr "Serwer %(version)s jest uruchomiony.. PID=%(pid)d Socket=%(scgi_port)s" -#: admin/server.py:144 -msgid "Incorrect parameters: PORT CONFIG_FILE" -msgstr "Niepoprawne parametry: PORT PLIK_KONFIGURACYJNY" - #: admin/util.py:91 msgid "On" msgstr "Włączone" @@ -4822,9 +4863,8 @@ msgstr "" #: admin/wizards/alfresco.py:45 admin/wizards/coldfusion.py:46 #: admin/wizards/concrete5.py:47 admin/wizards/django.py:44 #: admin/wizards/glassfish.py:45 admin/wizards/mailman.py:48 -#: admin/wizards/mono.py:46 admin/wizards/php.py:43 -#: admin/wizards/symfony.py:51 admin/wizards/uwsgi.py:61 -#: admin/wizards/zend.py:47 +#: admin/wizards/mono.py:46 admin/wizards/php.py:43 admin/wizards/symfony.py:51 +#: admin/wizards/uwsgi.py:61 admin/wizards/zend.py:47 #, fuzzy msgid "Host name of the virtual server that is about to be created." msgstr "Nazwa serwera wirtualnego który chcesz stworzyć. Nazwa domeny jest ok." @@ -4832,9 +4872,8 @@ msgstr "Nazwa serwera wirtualnego który chcesz stworzyć. Nazwa domeny jest ok. #: admin/wizards/alfresco.py:46 admin/wizards/coldfusion.py:45 #: admin/wizards/concrete5.py:46 admin/wizards/django.py:43 #: admin/wizards/glassfish.py:46 admin/wizards/mailman.py:47 -#: admin/wizards/mono.py:45 admin/wizards/php.py:42 -#: admin/wizards/symfony.py:50 admin/wizards/uwsgi.py:60 -#: admin/wizards/zend.py:46 +#: admin/wizards/mono.py:45 admin/wizards/php.py:42 admin/wizards/symfony.py:50 +#: admin/wizards/uwsgi.py:60 admin/wizards/zend.py:46 msgid "New Virtual Server Details" msgstr "Szczegóły nowego serwera wirtualnego" @@ -5701,3 +5740,46 @@ msgstr "" #: admin/wizards/zend.py:49 msgid "Web directory where you want Zend to be accessible. (Example: /zend)" msgstr "" + +#~ msgid "Allow SSL v2" +#~ msgstr "Zezwalaj na użycie SSL v2" + +#, fuzzy +#~ msgid "Disable %s" +#~ msgstr "Wyłącz" + +#~ msgid "Incorrect parameters: PORT CONFIG_FILE" +#~ msgstr "Niepoprawne parametry: PORT PLIK_KONFIGURACYJNY" + +#, fuzzy +#~ msgid "Mailing List Subscription" +#~ msgstr "Subskrypcja listy mailingowej" + +#~ msgid "Optionally provide your name" +#~ msgstr "Opcjonalnie podaj swoje Imie" + +#~ msgid "Purchase commercial support" +#~ msgstr "Kup wsparcie komercyjne" + +#~ msgid "Subscribe" +#~ msgstr "Zapisz się" + +#~ msgid "" +#~ "There are a number of Community Mailing Lists\n" +#~ "available for you to subscribe. You can subscribe the General Discussion\n" +#~ "mailing list from this interface. There is where most of the discussions\n" +#~ "take place." +#~ msgstr "" +#~ "Są dostępne listy mailingowe\n" +#~ " społeczności dostępne do subskrypcji. Możesz subskrybować listę ogólną z " +#~ "interfejsu. Większość dyskusji odbywa się na tej liście." + +#~ msgid "You will be sent an email requesting confirmation" +#~ msgstr "Otrzymasz email w celach potwierdzenia" + +#~ msgid "Your email address" +#~ msgstr "Twój email" + +#~ msgid "Your name" +#~ msgstr "Twoje Imię" diff --git a/po/admin/pt_BR.po b/po/admin/pt_BR.po index d426508ae..d847ab380 100644 --- a/po/admin/pt_BR.po +++ b/po/admin/pt_BR.po @@ -1,12 +1,12 @@ msgid "" msgstr "" -"Project-Id-Version: Cherokee\n" -"Report-Msgid-Bugs-To: http://bugs.cherokee-project.com/\n" -"POT-Creation-Date: 2014-01-04 00:54+0100\n" +"Project-Id-Version: cherokee 1.2.104\n" +"Report-Msgid-Bugs-To: https://github.com/cherokee/webserver/issues\n" +"POT-Creation-Date: 2021-03-26 19:04+0100\n" "PO-Revision-Date: \n" "Last-Translator: Sérgio H. Berlotto Jr \n" "Language-Team: \n" -"Language: \n" +"Language: pt_BR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -96,7 +96,7 @@ msgstr "Informação dos Fontes" msgid "Assign Information Sources" msgstr "Associar informações de fontes" -#: admin/Balancer.py:136 admin/PageIndex.py:204 admin/PageRule.py:112 +#: admin/Balancer.py:136 admin/PageIndex.py:182 admin/PageRule.py:112 #: admin/plugins/bind.py:69 admin/plugins/bind.py:121 #: admin/plugins/custom_error.py:41 admin/plugins/method.py:31 msgid "Choose" @@ -132,17 +132,17 @@ msgstr "Configuração de Ícones" #: admin/CTK/CTK/Druid.py:216 admin/CTK/CTK/Druid.py:224 #: admin/CTK/CTK/Druid.py:232 admin/CTK/CTK/Druid.py:238 admin/Icons.py:362 #: admin/Mime.py:110 admin/PageGeneral.py:289 admin/PageGeneral.py:317 -#: admin/PageIndex.py:232 admin/PageIndex.py:308 admin/PageRule.py:225 -#: admin/PageRule.py:276 admin/PageRule.py:302 admin/PageSource.py:225 -#: admin/PageSource.py:411 admin/PageSource.py:428 admin/PageSource.py:442 -#: admin/PageVServers.py:215 admin/PageVServers.py:252 -#: admin/PageVServers.py:281 admin/plugins/redir.py:120 +#: admin/PageIndex.py:246 admin/PageRule.py:225 admin/PageRule.py:276 +#: admin/PageRule.py:302 admin/PageSource.py:225 admin/PageSource.py:411 +#: admin/PageSource.py:428 admin/PageSource.py:442 admin/PageVServers.py:215 +#: admin/PageVServers.py:252 admin/PageVServers.py:281 +#: admin/plugins/redir.py:120 msgid "Cancel" msgstr "Cancelar" #: admin/CTK/CTK/Dialog.py:165 admin/CTK/CTK/Dialog.py:272 #: admin/CTK/CTK/Druid.py:243 admin/PageException.py:89 -#: admin/PageException.py:93 admin/PageGeneral.py:283 admin/PageIndex.py:277 +#: admin/PageException.py:93 admin/PageGeneral.py:283 admin/PageIndex.py:215 #: admin/PageSource.py:402 admin/plugins/error_redir.py:110 #, fuzzy msgid "Close" @@ -183,14 +183,14 @@ msgstr "Logar" #: admin/CTK/CTK/Image.py:99 admin/CgiBase.py:69 admin/CgiBase.py:71 #: admin/CgiBase.py:124 admin/CgiBase.py:125 admin/CgiBase.py:126 #: admin/CgiBase.py:127 admin/CgiBase.py:128 admin/Graph.py:125 -#: admin/PageAdvanced.py:150 admin/PageEntry.py:150 admin/PageEntry.py:159 -#: admin/PageGeneral.py:193 admin/PageSource.py:296 -#: admin/plugins/dirlist.py:56 admin/plugins/exists.py:72 -#: admin/plugins/exists.py:77 admin/plugins/exists.py:78 -#: admin/plugins/exists.py:79 admin/plugins/exists.py:109 -#: admin/plugins/exists.py:115 admin/plugins/exists.py:116 -#: admin/plugins/exists.py:117 admin/plugins/file.py:40 -#: admin/plugins/ldap.py:53 admin/plugins/streaming.py:43 +#: admin/PageAdvanced.py:198 admin/PageEntry.py:150 admin/PageEntry.py:159 +#: admin/PageGeneral.py:193 admin/PageSource.py:296 admin/plugins/dirlist.py:59 +#: admin/plugins/exists.py:72 admin/plugins/exists.py:77 +#: admin/plugins/exists.py:78 admin/plugins/exists.py:79 +#: admin/plugins/exists.py:109 admin/plugins/exists.py:115 +#: admin/plugins/exists.py:116 admin/plugins/exists.py:117 +#: admin/plugins/file.py:42 admin/plugins/ldap.py:53 +#: admin/plugins/streaming.py:43 #, fuzzy msgid "Enabled" msgstr "Habilitado" @@ -209,12 +209,13 @@ msgstr "Preserve" msgid "Optional" msgstr "Opcional" -#: admin/CTK/CTK/ToggleButton.py:154 +#: admin/CTK/CTK/ToggleButton.py:154 admin/PageAdvanced.py:245 +#: admin/PageAdvanced.py:258 #, fuzzy msgid "Disable" msgstr "Desabilitado" -#: admin/CTK/CTK/ToggleButton.py:155 admin/PageVServer.py:669 +#: admin/CTK/CTK/ToggleButton.py:155 admin/PageVServer.py:678 #: admin/wizards/flcache.py:157 #, fuzzy msgid "Enable" @@ -259,7 +260,7 @@ msgid "" "headers and use it in REMOTE_ADDR." msgstr "" -#: admin/CgiBase.py:40 admin/PageVServer.py:70 +#: admin/CgiBase.py:40 admin/PageVServer.py:74 msgid "" "Accept all the X-Real-IP and X-Forwarded-For headers. WARNING: Turn it on " "only if you are centain of what you are doing." @@ -275,11 +276,11 @@ msgstr "" msgid "Read X-Real-IP" msgstr "" -#: admin/CgiBase.py:71 admin/PageVServer.py:610 +#: admin/CgiBase.py:71 admin/PageVServer.py:614 msgid "Don't check origin" msgstr "Não verificar origem" -#: admin/CgiBase.py:73 admin/PageVServer.py:613 +#: admin/CgiBase.py:73 admin/PageVServer.py:617 msgid "Accept from Hosts" msgstr "Aceitar dos Hosts" @@ -322,7 +323,7 @@ msgid "Allow X-Sendfile" msgstr "Permitir X-Sendfile" #: admin/CgiBase.py:128 admin/plugins/exists.py:77 admin/plugins/exists.py:115 -#: admin/plugins/file.py:40 +#: admin/plugins/file.py:42 msgid "Use I/O cache" msgstr "Utilizar cache de I/O" @@ -418,7 +419,7 @@ msgid "" msgstr "" #: admin/Graph.py:118 admin/PageEntry.py:538 admin/PageSource.py:257 -#: admin/PageStatus.py:70 admin/PageVServer.py:731 admin/PageVServers.py:210 +#: admin/PageStatus.py:70 admin/PageVServer.py:740 admin/PageVServers.py:210 msgid "Unknown" msgstr "Desconhecido" @@ -430,7 +431,7 @@ msgstr "Coletar Estatísticas" msgid "Allows to specify an alternative Document Root path." msgstr "" -#: admin/Handler.py:43 admin/PageEntry.py:523 admin/PageVServer.py:462 +#: admin/Handler.py:43 admin/PageEntry.py:523 admin/PageVServer.py:466 #: admin/PageVServers.py:128 admin/wizards/django.py:191 #: admin/wizards/mono.py:199 admin/wizards/php.py:39 admin/wizards/php.py:342 #: admin/wizards/uwsgi.py:267 @@ -443,7 +444,7 @@ msgid "Extension List" msgstr "Lista de Extensões" #: admin/Icons.py:129 admin/Icons.py:328 admin/Mime.py:96 admin/Mime.py:131 -#: admin/consts.py:188 admin/plugins/extensions.py:61 +#: admin/consts.py:187 admin/plugins/extensions.py:61 #: admin/wizards/flcache.py:141 msgid "Extensions" msgstr "Extensões" @@ -466,12 +467,13 @@ msgstr "Arquivos" msgid "Add New File" msgstr "Adicionar nova regra" -#: admin/Icons.py:197 admin/Icons.py:329 admin/Rule.py:174 admin/consts.py:42 -#: admin/consts.py:128 admin/consts.py:262 +#: admin/Icons.py:197 admin/Icons.py:329 admin/PageVServer.py:674 +#: admin/PageVServer.py:675 admin/Rule.py:174 admin/consts.py:42 +#: admin/consts.py:128 admin/consts.py:261 msgid "Default" msgstr "Padrão" -#: admin/Icons.py:198 admin/Icons.py:330 admin/consts.py:187 +#: admin/Icons.py:198 admin/Icons.py:330 admin/consts.py:186 #: admin/plugins/directory.py:31 msgid "Directory" msgstr "Diretório" @@ -484,7 +486,7 @@ msgstr "Vá para o pai" msgid "Modify" msgstr "Modificar" -#: admin/Icons.py:214 admin/PageAdvanced.py:168 admin/PageAdvanced.py:192 +#: admin/Icons.py:214 admin/PageAdvanced.py:216 admin/PageAdvanced.py:316 msgid "Special Files" msgstr "Arquivos Especiais" @@ -595,7 +597,7 @@ msgstr "Salvar" msgid "Home" msgstr "Início" -#: admin/Page.py:155 admin/PageAdvanced.py:150 admin/PageIndex.py:84 +#: admin/Page.py:155 admin/PageAdvanced.py:198 admin/PageIndex.py:62 #: admin/PageStatus.py:40 admin/PageStatus.py:112 msgid "Status" msgstr "Estado" @@ -614,7 +616,7 @@ msgstr "Servidor" msgid "Sources" msgstr "Recursos" -#: admin/Page.py:159 admin/PageAdvanced.py:97 admin/PageAdvanced.py:198 +#: admin/Page.py:159 admin/PageAdvanced.py:145 admin/PageAdvanced.py:322 msgid "Advanced" msgstr "Avançado" @@ -626,8 +628,19 @@ msgstr "Ajuda" msgid "Updating..." msgstr "Atualizando..." -#: admin/PageAdvanced.py:64 -#, fuzzy +#: admin/PageAdvanced.py:56 +msgid "" +"

WARNING: The SSL/TLS back-end supports more recent\n" +"versions of TLS protocols, which are not recognized by Cherokee. Please " +"check\n" +"for latest Cherokee updates or report this issue. As a temporary workaround " +"please\n" +"set 'Max. TLS protocol version' to the maximum TLS protocol version " +"supported by\n" +"Cherokee.

Following unknown TLS protocols have been found:" +msgstr "" + +#: admin/PageAdvanced.py:94 msgid "" "

WARNING: This section contains advanced\n" "configuration parameters. Changing things is not recommended unless\n" @@ -637,264 +650,325 @@ msgstr "" "recomentado que você altere nenhuma opção a não ser que saiba o que está " "fazendo.

" -#: admin/PageAdvanced.py:68 +#: admin/PageAdvanced.py:98 msgid "Defines which thread policy the OS should apply to the server." msgstr "" -#: admin/PageAdvanced.py:69 +#: admin/PageAdvanced.py:99 msgid "If empty, Cherokee will calculate a default number." msgstr "Se for vazio, o Cherokee irá calcular o número padrão." -#: admin/PageAdvanced.py:70 +#: admin/PageAdvanced.py:100 msgid "" "It defines how many file descriptors the server should handle. Default is " "the number showed by ulimit -n" msgstr "" -#: admin/PageAdvanced.py:71 +#: admin/PageAdvanced.py:101 msgid "Allows to choose the internal file descriptor polling method." msgstr "" -#: admin/PageAdvanced.py:72 +#: admin/PageAdvanced.py:102 msgid "Minimum size of a file to use sendfile(). Default: 32768 Bytes." msgstr "" -#: admin/PageAdvanced.py:73 +#: admin/PageAdvanced.py:103 msgid "Maximum size of a file to use sendfile(). Default: 2 GB." msgstr "" -#: admin/PageAdvanced.py:74 +#: admin/PageAdvanced.py:104 msgid "" "Name a program that will be called if, by some reason, the server fails. " "Default: cherokee-panic." msgstr "" -#: admin/PageAdvanced.py:75 +#: admin/PageAdvanced.py:105 msgid "Path of the PID file. If empty, the file will not be created." msgstr "" "Caminho para o arquivo de processo (.pid). Se estiver vazio este não será " "criado." -#: admin/PageAdvanced.py:76 +#: admin/PageAdvanced.py:106 msgid "Max. length of the incoming connection queue." msgstr "" -#: admin/PageAdvanced.py:77 +#: admin/PageAdvanced.py:107 msgid "" "Set the number of how many internal connections can be held for reuse by " "each thread. Default: 20." msgstr "" -#: admin/PageAdvanced.py:78 +#: admin/PageAdvanced.py:108 msgid "" "Sets the number of seconds between log consolidations (flushes). Default: 10 " "seconds." msgstr "" -#: admin/PageAdvanced.py:79 +#: admin/PageAdvanced.py:109 msgid "Time lapse (in seconds) between Nonce cache clean ups." msgstr "" -#: admin/PageAdvanced.py:80 +#: admin/PageAdvanced.py:110 msgid "" "Enables the server-wide keep-alive support. It increases the performance. It " "is usually set on." msgstr "" -#: admin/PageAdvanced.py:81 +#: admin/PageAdvanced.py:111 msgid "" "Maximum number of HTTP requests that can be served by each keepalive " "connection." msgstr "" -#: admin/PageAdvanced.py:82 +#: admin/PageAdvanced.py:112 msgid "" "Allows the server to use Chunked encoding to try to keep Keep-Alive enabled." msgstr "" -#: admin/PageAdvanced.py:83 +#: admin/PageAdvanced.py:113 msgid "Activate or deactivate the I/O cache globally." msgstr "" -#: admin/PageAdvanced.py:84 +#: admin/PageAdvanced.py:114 msgid "Number of pages that the cache should handle." msgstr "" -#: admin/PageAdvanced.py:85 +#: admin/PageAdvanced.py:115 msgid "Files under this size (in bytes) will not be cached." msgstr "" -#: admin/PageAdvanced.py:86 +#: admin/PageAdvanced.py:116 msgid "Files over this size (in bytes) will not be cached." msgstr "" -#: admin/PageAdvanced.py:87 +#: admin/PageAdvanced.py:117 msgid "" "How long (in seconds) the file information should last cached without " "refreshing it." msgstr "" -#: admin/PageAdvanced.py:88 +#: admin/PageAdvanced.py:118 msgid "How long (in seconds) the file content should last cached." msgstr "" -#: admin/PageAdvanced.py:89 +#: admin/PageAdvanced.py:119 msgid "Path to a Diffie Hellman (DH) parameters PEM file: 512 bits." msgstr "" -#: admin/PageAdvanced.py:90 +#: admin/PageAdvanced.py:120 msgid "Path to a Diffie Hellman (DH) parameters PEM file: 1024 bits." msgstr "" -#: admin/PageAdvanced.py:91 +#: admin/PageAdvanced.py:121 msgid "Path to a Diffie Hellman (DH) parameters PEM file: 2048 bits." msgstr "" -#: admin/PageAdvanced.py:92 +#: admin/PageAdvanced.py:122 msgid "Path to a Diffie Hellman (DH) parameters PEM file: 4096 bits." msgstr "" -#: admin/PageAdvanced.py:93 +#: admin/PageAdvanced.py:123 +msgid "Your Cherokee Web Server does not support SSL/TLS encryption." +msgstr "" + +#: admin/PageAdvanced.py:124 msgid "Timeout for the TLS/SSL handshake. Default: 15 seconds." msgstr "" -#: admin/PageAdvanced.py:94 +#: admin/PageAdvanced.py:125 +msgid "Beware: it is vulnerable. You should disable SSLv2." +msgstr "" + +#: admin/PageAdvanced.py:126 +msgid "Beware: it is vulnerable. You should disable SSLv3." +msgstr "" + +#: admin/PageAdvanced.py:127 +msgid "TLSv1 is deprecated" +msgstr "" + +#: admin/PageAdvanced.py:128 +msgid "TLSv1.1 is deprecated" +msgstr "" + +#: admin/PageAdvanced.py:129 admin/PageAdvanced.py:130 +msgid " " +msgstr "" + +#: admin/PageAdvanced.py:131 +msgid "" +"The following options work in combination with above min/max TLS protocol " +"version settings. They are deprecated, only set the minimum and maximum " +"supported protocol versions instead." +msgstr "" + +#: admin/PageAdvanced.py:133 +msgid "" +"Minimum required TLS protocol version from clients (Default: auto-configured " +"by libssl)" +msgstr "" + +#: admin/PageAdvanced.py:134 msgid "" -"Allow clients to use SSL version 2 - Beware: it is vulnerable. (Default: No)" +"Maximum supported TLS protocol version (Default: auto-configured by libssl)" msgstr "" -#: admin/PageAdvanced.py:119 admin/PageAdvanced.py:121 +#: admin/PageAdvanced.py:167 admin/PageAdvanced.py:169 msgid "Allowed" msgstr "Permitido" -#: admin/PageAdvanced.py:119 +#: admin/PageAdvanced.py:167 msgid "Keep Alive" msgstr "Permanecer no ar" -#: admin/PageAdvanced.py:120 +#: admin/PageAdvanced.py:168 msgid "Max keepalive reqs" msgstr "" -#: admin/PageAdvanced.py:121 +#: admin/PageAdvanced.py:169 msgid "Chunked Encoding" msgstr "" -#: admin/PageAdvanced.py:122 +#: admin/PageAdvanced.py:170 msgid "Polling Method" msgstr "" -#: admin/PageAdvanced.py:123 +#: admin/PageAdvanced.py:171 msgid "Sendfile min size" msgstr "" -#: admin/PageAdvanced.py:124 +#: admin/PageAdvanced.py:172 msgid "Sendfile max size" msgstr "" -#: admin/PageAdvanced.py:126 admin/PageAdvanced.py:189 +#: admin/PageAdvanced.py:174 admin/PageAdvanced.py:313 msgid "Connections" msgstr "Conexões" -#: admin/PageAdvanced.py:134 +#: admin/PageAdvanced.py:182 msgid "Thread Number" msgstr "" -#: admin/PageAdvanced.py:135 +#: admin/PageAdvanced.py:183 msgid "Thread Policy" msgstr "" -#: admin/PageAdvanced.py:136 +#: admin/PageAdvanced.py:184 msgid "File descriptors" msgstr "" -#: admin/PageAdvanced.py:137 +#: admin/PageAdvanced.py:185 msgid "Listening queue length" msgstr "" -#: admin/PageAdvanced.py:138 admin/plugins/proxy.py:239 +#: admin/PageAdvanced.py:186 admin/plugins/proxy.py:239 msgid "Reuse connections" msgstr "reutilizar conexões" -#: admin/PageAdvanced.py:139 +#: admin/PageAdvanced.py:187 msgid "Log flush time" msgstr "" -#: admin/PageAdvanced.py:140 +#: admin/PageAdvanced.py:188 msgid "Nonces clean up time" msgstr "" -#: admin/PageAdvanced.py:142 admin/PageAdvanced.py:190 +#: admin/PageAdvanced.py:190 admin/PageAdvanced.py:314 msgid "Resources" msgstr "Recursos" -#: admin/PageAdvanced.py:151 +#: admin/PageAdvanced.py:199 msgid "Max pages" msgstr "" -#: admin/PageAdvanced.py:152 +#: admin/PageAdvanced.py:200 msgid "File Min Size" msgstr "" -#: admin/PageAdvanced.py:153 +#: admin/PageAdvanced.py:201 msgid "File Max Size" msgstr "" -#: admin/PageAdvanced.py:154 +#: admin/PageAdvanced.py:202 msgid "Lasting: stat" msgstr "" -#: admin/PageAdvanced.py:155 +#: admin/PageAdvanced.py:203 msgid "Lasting: mmap" msgstr "" -#: admin/PageAdvanced.py:157 admin/PageAdvanced.py:191 +#: admin/PageAdvanced.py:205 admin/PageAdvanced.py:315 msgid "I/O cache" msgstr "Cache de E/S" -#: admin/PageAdvanced.py:165 +#: admin/PageAdvanced.py:213 msgid "Panic action" msgstr "" -#: admin/PageAdvanced.py:166 +#: admin/PageAdvanced.py:214 msgid "PID file" msgstr "Arquivo de processo (.pid)" -#: admin/PageAdvanced.py:176 admin/PageEntry.py:84 admin/PageVServer.py:476 -#: admin/plugins/common.py:42 admin/plugins/common.py:43 -#: admin/plugins/dirlist.py:55 admin/plugins/proxy.py:240 -msgid "Allow" -msgstr "Permitir" +#: admin/PageAdvanced.py:245 admin/PageAdvanced.py:247 +#: admin/PageAdvanced.py:258 admin/PageAdvanced.py:260 +#, fuzzy +msgid "Disable " +msgstr "Desabilitado" -#: admin/PageAdvanced.py:176 -msgid "Allow SSL v2" +#: admin/PageAdvanced.py:247 +msgid "Protocol deacrivated" msgstr "" -#: admin/PageAdvanced.py:177 +#: admin/PageAdvanced.py:247 +msgid "Protocol not supported" +msgstr "" + +#: admin/PageAdvanced.py:260 +msgid "Protocol deactivated" +msgstr "" + +#: admin/PageAdvanced.py:262 +msgid "Turn off selected TLS Protocols (Deprecated)" +msgstr "" + +#: admin/PageAdvanced.py:270 admin/PageAdvanced.py:271 +msgid "auto-configured" +msgstr "" + +#: admin/PageAdvanced.py:285 +msgid "Min. TLS protocol version" +msgstr "" + +#: admin/PageAdvanced.py:290 +msgid "Max. TLS protocol version" +msgstr "" + +#: admin/PageAdvanced.py:291 msgid "Handshake Timeout" msgstr "" -#: admin/PageAdvanced.py:178 +#: admin/PageAdvanced.py:292 msgid "DH parameters: 512 bits" msgstr "" -#: admin/PageAdvanced.py:179 +#: admin/PageAdvanced.py:293 msgid "DH parameters: 1024 bits" msgstr "" -#: admin/PageAdvanced.py:180 +#: admin/PageAdvanced.py:294 msgid "DH parameters: 2048 bits" msgstr "" -#: admin/PageAdvanced.py:181 +#: admin/PageAdvanced.py:295 msgid "DH parameters: 4096 bits" msgstr "" -#: admin/PageAdvanced.py:183 admin/PageAdvanced.py:193 -#: admin/PageGeneral.py:239 admin/plugins/bind.py:92 +#: admin/PageAdvanced.py:296 admin/PageAdvanced.py:317 admin/PageGeneral.py:239 +#: admin/plugins/bind.py:92 msgid "TLS" msgstr "TLS" -#: admin/PageAdvanced.py:199 +#: admin/PageAdvanced.py:323 #, fuzzy msgid "Advanced Configuration" msgstr "Configuração avançada" @@ -991,7 +1065,7 @@ msgstr "" msgid "Deflate encoder" msgstr "" -#: admin/PageEntry.py:78 admin/PageEntry.py:173 admin/PageVServer.py:149 +#: admin/PageEntry.py:78 admin/PageEntry.py:173 admin/PageVServer.py:153 msgid "Authentication" msgstr "Autenticação" @@ -1004,6 +1078,12 @@ msgstr "Lista de autenticação" msgid "Leave unset" msgstr "" +#: admin/PageEntry.py:84 admin/PageVServer.py:480 admin/plugins/common.py:42 +#: admin/plugins/common.py:43 admin/plugins/dirlist.py:58 +#: admin/plugins/file.py:44 admin/plugins/proxy.py:240 +msgid "Allow" +msgstr "" + #: admin/PageEntry.py:85 msgid "Forbid" msgstr "" @@ -1030,7 +1110,7 @@ msgstr "" msgid "Remove" msgstr "" -#: admin/PageEntry.py:126 admin/PageVServer.py:155 +#: admin/PageEntry.py:126 admin/PageVServer.py:159 #: admin/plugins/secdownload.py:44 msgid "Timeout" msgstr "Timeout" @@ -1043,7 +1123,7 @@ msgstr "" msgid "Limit traffic to" msgstr "" -#: admin/PageEntry.py:139 admin/PageVServer.py:156 +#: admin/PageEntry.py:139 admin/PageVServer.py:160 msgid "Traffic Shaping" msgstr "" @@ -1051,7 +1131,7 @@ msgstr "" msgid "Skip Logging" msgstr "Não logar" -#: admin/PageEntry.py:154 admin/PageVServer.py:720 +#: admin/PageEntry.py:154 admin/PageVServer.py:729 msgid "Logging" msgstr "Logar" @@ -1076,14 +1156,14 @@ msgstr "Mecanismo de Validação" msgid "Can not be empty" msgstr "Não pode ser vazio" -#: admin/PageEntry.py:216 admin/PageEntry.py:268 admin/consts.py:190 -#: admin/plugins/header.py:110 admin/plugins/header.py:151 -#: admin/plugins/header.py:156 admin/plugins/proxy.py:193 +#: admin/PageEntry.py:216 admin/PageEntry.py:268 admin/consts.py:189 +#: admin/plugins/header.py:112 admin/plugins/header.py:153 +#: admin/plugins/header.py:158 admin/plugins/proxy.py:193 msgid "Header" msgstr "Cabeçalho" #: admin/PageEntry.py:216 admin/PageSource.py:284 -#: admin/plugins/error_redir.py:105 admin/plugins/header.py:113 +#: admin/plugins/error_redir.py:105 admin/plugins/header.py:115 #: admin/plugins/redir.py:76 msgid "Type" msgstr "Tipo" @@ -1102,7 +1182,7 @@ msgstr "Ativo" msgid "Add New Header" msgstr "Adicionar novo Header" -#: admin/PageEntry.py:326 admin/consts.py:204 admin/plugins/redir.py:39 +#: admin/PageEntry.py:326 admin/consts.py:203 admin/plugins/redir.py:39 #: admin/plugins/rehost.py:53 msgid "Regular Expressions" msgstr "Expressões Regulares" @@ -1119,8 +1199,7 @@ msgstr "" msgid "Caching Policy" msgstr "" -#: admin/PageEntry.py:381 admin/plugins/rehost.py:68 -#: admin/plugins/rehost.py:92 +#: admin/PageEntry.py:381 admin/plugins/rehost.py:68 admin/plugins/rehost.py:92 msgid "New Regular Expression" msgstr "Nova expressão regular" @@ -1128,7 +1207,7 @@ msgstr "Nova expressão regular" msgid "Disregarded Cookies" msgstr "" -#: admin/PageEntry.py:402 admin/PageVServer.py:154 +#: admin/PageEntry.py:402 admin/PageVServer.py:158 msgid "Expiration" msgstr "Expiração" @@ -1160,7 +1239,7 @@ msgstr "" msgid "Content Expiration" msgstr "" -#: admin/PageEntry.py:433 admin/PageVServer.py:153 +#: admin/PageEntry.py:433 admin/PageVServer.py:157 msgid "Cache" msgstr "" @@ -1183,7 +1262,7 @@ msgid "Matching Rule" msgstr "" #: admin/PageEntry.py:514 admin/PageEntry.py:528 admin/PageEntry.py:553 -#: admin/PageVServer.py:148 +#: admin/PageVServer.py:152 msgid "Handler" msgstr "" @@ -1199,7 +1278,7 @@ msgstr "" msgid "Caching" msgstr "" -#: admin/PageEntry.py:556 admin/PageVServer.py:721 +#: admin/PageEntry.py:556 admin/PageVServer.py:730 msgid "Security" msgstr "Segurança" @@ -1442,7 +1521,7 @@ msgstr "IPv6" msgid "SSL/TLS back-end" msgstr "" -#: admin/PageGeneral.py:197 admin/PageIndex.py:252 +#: admin/PageGeneral.py:197 admin/PageIndex.py:198 msgid "Support" msgstr "Suporte" @@ -1477,8 +1556,8 @@ msgid "Bind to" msgstr "Associar a" #: admin/PageGeneral.py:239 admin/PageGeneral.py:310 admin/plugins/bind.py:92 -#: admin/plugins/bind.py:155 admin/plugins/bind.py:157 -#: admin/plugins/ldap.py:48 admin/plugins/mysql.py:77 +#: admin/plugins/bind.py:155 admin/plugins/bind.py:157 admin/plugins/ldap.py:48 +#: admin/plugins/mysql.py:77 msgid "Port" msgstr "Porta" @@ -1546,7 +1625,7 @@ msgstr "Grupo" msgid "Chroot" msgstr "Chroot" -#: admin/PageGeneral.py:357 admin/PageVServer.py:479 +#: admin/PageGeneral.py:357 admin/PageVServer.py:483 msgid "Network" msgstr "Rede" @@ -1576,178 +1655,138 @@ msgstr "Tabela de conteúdos" msgid "Documentation" msgstr "Diretório de Documento base" -#: admin/PageIndex.py:67 -msgid "You will be sent an email requesting confirmation" -msgstr "" - -#: admin/PageIndex.py:68 -msgid "Optionally provide your name" -msgstr "" - -#: admin/PageIndex.py:70 -#, python-format -msgid "" -"There are a number of Community Mailing Lists\n" -"available for you to subscribe. You can subscribe the General Discussion\n" -"mailing list from this interface. There is where most of the discussions\n" -"take place." -msgstr "" - -#: admin/PageIndex.py:77 +#: admin/PageIndex.py:58 #, fuzzy msgid "Server is Running" msgstr "Permissões do Servidor" -#: admin/PageIndex.py:78 +#: admin/PageIndex.py:59 #, fuzzy msgid "Server is not Running" msgstr "O servidor está parado." -#: admin/PageIndex.py:132 +#: admin/PageIndex.py:110 #, fuzzy msgid "Stop Server" msgstr "Servidor" -#: admin/PageIndex.py:136 +#: admin/PageIndex.py:114 #, fuzzy msgid "Start Server" msgstr "Servidor" -#: admin/PageIndex.py:141 +#: admin/PageIndex.py:119 #, fuzzy msgid "Hostname" msgstr "Novo nome do host" -#: admin/PageIndex.py:143 +#: admin/PageIndex.py:121 msgid "Modified" msgstr "Modificado" -#: admin/PageIndex.py:145 +#: admin/PageIndex.py:123 msgid "Not found" msgstr "Não encontrado" -#: admin/PageIndex.py:146 +#: admin/PageIndex.py:124 #, fuzzy msgid "Config File" msgstr "Arquivo de Ícone" -#: admin/PageIndex.py:153 admin/plugins/server_info.py:32 +#: admin/PageIndex.py:131 admin/plugins/server_info.py:32 #: admin/plugins/server_info.py:35 #, fuzzy msgid "Server Information" msgstr "Mostrar Informações" -#: admin/PageIndex.py:165 +#: admin/PageIndex.py:143 msgid "Processors" msgstr "" -#: admin/PageIndex.py:177 +#: admin/PageIndex.py:155 msgid "Memory" msgstr "" -#: admin/PageIndex.py:211 admin/plugins/dbslayer.py:51 +#: admin/PageIndex.py:189 admin/plugins/dbslayer.py:51 msgid "Language" msgstr "Linguagem" -#: admin/PageIndex.py:231 -#, fuzzy -msgid "Mailing List Subscription" -msgstr "Lista de emails" - -#: admin/PageIndex.py:233 -msgid "Subscribe" -msgstr "" - -#: admin/PageIndex.py:236 -msgid "Your email address" -msgstr "Seu endereço de email" - -#: admin/PageIndex.py:237 -msgid "Your name" -msgstr "Seu nome" - -#: admin/PageIndex.py:256 +#: admin/PageIndex.py:202 msgid "Getting started" msgstr "" -#: admin/PageIndex.py:260 -msgid "Subscribe to mailing lists" +#: admin/PageIndex.py:206 +msgid "Visit the mailing list" msgstr "" -#: admin/PageIndex.py:268 +#: admin/PageIndex.py:210 #, fuzzy msgid "Report a bug" msgstr "Relatório enviado" -#: admin/PageIndex.py:272 -#, fuzzy -msgid "Purchase commercial support" -msgstr "Suporte Comercial" - -#: admin/PageIndex.py:276 admin/PageIndex.py:280 +#: admin/PageIndex.py:214 admin/PageIndex.py:218 msgid "About Cherokee" msgstr "" -#: admin/PageIndex.py:289 +#: admin/PageIndex.py:227 msgid "Join the Cherokee Community:" msgstr "" -#: admin/PageIndex.py:292 +#: admin/PageIndex.py:230 msgid "Visit the Cherokee Project Website" msgstr "" -#: admin/PageIndex.py:293 +#: admin/PageIndex.py:231 msgid "Follow us on Twitter" msgstr "" -#: admin/PageIndex.py:294 +#: admin/PageIndex.py:232 msgid "Join us on Facebook" msgstr "" -#: admin/PageIndex.py:295 +#: admin/PageIndex.py:233 msgid "Join us on Google+" msgstr "" -#: admin/PageIndex.py:296 +#: admin/PageIndex.py:234 msgid "Fork us on Github" msgstr "" -#: admin/PageIndex.py:297 +#: admin/PageIndex.py:235 msgid "Become a member of Cherokee group on LinkedIn" msgstr "" -#: admin/PageIndex.py:298 +#: admin/PageIndex.py:236 msgid "Chat with us at irc.freenode.net" msgstr "" -#: admin/PageIndex.py:307 +#: admin/PageIndex.py:245 #, fuzzy msgid "Shutdown Cherokee-admin" msgstr "Bem-vindo a Administração do Cherokee" -#: admin/PageIndex.py:309 +#: admin/PageIndex.py:247 msgid "Shut down" msgstr "" -#: admin/PageIndex.py:310 +#: admin/PageIndex.py:248 msgid "You are about to shut down this instance of Cherokee-admin" msgstr "" -#: admin/PageIndex.py:311 +#: admin/PageIndex.py:249 msgid "Are you sure you want to proceed?" msgstr "" -#: admin/PageIndex.py:314 +#: admin/PageIndex.py:252 msgid "Cherokee-admin has been shut down" msgstr "" -#: admin/PageIndex.py:316 +#: admin/PageIndex.py:254 #, fuzzy msgid "Shut down Cherokee-Admin" msgstr "Bem-vindo a Administração do Cherokee" -#: admin/PageIndex.py:329 admin/PageIndex.py:350 +#: admin/PageIndex.py:267 admin/PageIndex.py:288 msgid "Welcome to Cherokee Admin" msgstr "Bem-vindo a Administração do Cherokee" @@ -1833,7 +1872,7 @@ msgstr "" msgid "Manual configuration" msgstr "Configuração de ícone" -#: admin/PageRule.py:249 admin/PageVServer.py:158 +#: admin/PageRule.py:249 admin/PageVServer.py:162 msgid "Final" msgstr "" @@ -1865,7 +1904,7 @@ msgstr "" msgid "Clone Selected Behavior Rule" msgstr "" -#: admin/PageRule.py:314 admin/PageVServer.py:718 +#: admin/PageRule.py:314 admin/PageVServer.py:727 msgid "Behavior" msgstr "" @@ -1995,7 +2034,7 @@ msgstr "Adicionar nova regra" msgid "Source Usage" msgstr "Recursos" -#: admin/PageSource.py:253 admin/PageVServer.py:723 +#: admin/PageSource.py:253 admin/PageVServer.py:732 msgid "Virtual Server" msgstr "" @@ -2053,7 +2092,7 @@ msgstr "Informação dos Fontes" msgid "Sources Filtering" msgstr "" -#: admin/PageSources.py:35 admin/PageVServer.py:141 admin/PageVServers.py:48 +#: admin/PageSources.py:35 admin/PageVServer.py:145 admin/PageVServers.py:48 #: admin/PageVServers.py:294 msgid "Virtual Servers" msgstr "Servidores Virtuais" @@ -2077,627 +2116,636 @@ msgid "Virtual Server Filtering" msgstr "Servidores Virtuais" #: admin/PageVServer.py:44 +msgid "Reference" +msgstr "" + +#: admin/PageVServer.py:47 msgid "Nickname for the virtual server." msgstr "" -#: admin/PageVServer.py:45 +#: admin/PageVServer.py:48 msgid "" "This directive points to the PEM-encoded Certificate file for the server " "(Full path to the file)" msgstr "" -#: admin/PageVServer.py:46 +#: admin/PageVServer.py:49 msgid "PEM-encoded Private Key file for the server (Full path to the file)" msgstr "" -#: admin/PageVServer.py:47 +#: admin/PageVServer.py:50 msgid "" "File containing the trusted CA certificates, utilized for checking the " "client certificates (Full path to the file)" msgstr "" -#: admin/PageVServer.py:48 -msgid "" -"Ciphers that TLS/SSL is allowed to use. Reference. (Default enables " -"Forward Secrecy)." +#: admin/PageVServer.py:51 +msgid "Ciphers that TLSv1.2 and below is allowed to use." msgstr "" -#: admin/PageVServer.py:49 +#: admin/PageVServer.py:52 +msgid "Ciphersuites that TLSv1.3 is allowed to use." +msgstr "" + +#: admin/PageVServer.py:53 msgid "" "The cipher sequence that is specified by the server should have preference " "over the client preference. (Default: True)." msgstr "" -#: admin/PageVServer.py:50 +#: admin/PageVServer.py:54 msgid "" "Explicitly enable or disable serverside compression support. (Default: " "Disabled)." msgstr "" -#: admin/PageVServer.py:51 +#: admin/PageVServer.py:55 msgid "" "Explicitely sets the Diffie-Hellman parameters length. (Default: Let openssl " "choose)." msgstr "" -#: admin/PageVServer.py:52 +#: admin/PageVServer.py:56 msgid "Skip, Tolerate, Accept or Require client certificates." msgstr "" -#: admin/PageVServer.py:53 +#: admin/PageVServer.py:57 msgid "" "Limit up to which depth certificates in a chain are used during the " "verification procedure (Default: 1)" msgstr "" -#: admin/PageVServer.py:54 +#: admin/PageVServer.py:58 msgid "Allows the selection of how to generate the error responses." msgstr "" -#: admin/PageVServer.py:55 +#: admin/PageVServer.py:59 msgid "" "Directory inside the user home directory to use as root web directory. " "Disabled if empty." msgstr "" -#: admin/PageVServer.py:56 +#: admin/PageVServer.py:60 msgid "The personal web support is currently turned on." msgstr "" -#: admin/PageVServer.py:57 +#: admin/PageVServer.py:61 msgid "Adds a new domain name. Wildcards are allowed in the domain name." msgstr "" -#: admin/PageVServer.py:58 +#: admin/PageVServer.py:62 msgid "Virtual Server root directory." msgstr "Diretório raiz do Servidor Virtual" -#: admin/PageVServer.py:59 +#: admin/PageVServer.py:63 msgid "" "List of name files that will be used as directory index. Eg: index.html," "index.php." msgstr "" -#: admin/PageVServer.py:60 +#: admin/PageVServer.py:64 msgid "The maximum size, in bytes, for POST uploads. (Default: unlimited)" msgstr "" -#: admin/PageVServer.py:61 +#: admin/PageVServer.py:65 msgid "Whether this virtual server is allowed to use Keep-alive (Default: yes)" msgstr "" -#: admin/PageVServer.py:62 +#: admin/PageVServer.py:66 msgid "The Logging is currently enabled." msgstr "" -#: admin/PageVServer.py:63 +#: admin/PageVServer.py:67 msgid "Logging format. Apache compatible is highly recommended here." msgstr "" -#: admin/PageVServer.py:64 +#: admin/PageVServer.py:68 msgid "Back-end used to store the log accesses." msgstr "" -#: admin/PageVServer.py:65 +#: admin/PageVServer.py:69 msgid "Back-end used to store the log errors." msgstr "" -#: admin/PageVServer.py:66 +#: admin/PageVServer.py:70 msgid "Back-end used to store the log accesses and errors." msgstr "" -#: admin/PageVServer.py:67 +#: admin/PageVServer.py:71 msgid "Full path to the file where the information will be saved." msgstr "" -#: admin/PageVServer.py:68 +#: admin/PageVServer.py:72 msgid "Path to the executable that will be invoked on each log entry." msgstr "" -#: admin/PageVServer.py:69 +#: admin/PageVServer.py:73 msgid "" "Whether the logger should read and use the X-Real-IP and X-Forwarded-For " "headers (send by reverse proxies)." msgstr "" -#: admin/PageVServer.py:71 +#: admin/PageVServer.py:75 msgid "" "List of IP addresses and subnets that are allowed to send X-Real-IP and X-" "Forwarded-For headers." msgstr "" -#: admin/PageVServer.py:72 +#: admin/PageVServer.py:76 msgid "" "How to support the \"Advanced Virtual Hosting\" mechanism. (Default: off)" msgstr "" -#: admin/PageVServer.py:73 +#: admin/PageVServer.py:77 msgid "The following variables are accepted: " msgstr "" -#: admin/PageVServer.py:74 +#: admin/PageVServer.py:78 msgid "Allows the selection of domain matching method." msgstr "" -#: admin/PageVServer.py:75 +#: admin/PageVServer.py:79 msgid "" "Whether or not it should collected statistics about the traffic of this " "virtual server." msgstr "" -#: admin/PageVServer.py:76 +#: admin/PageVServer.py:80 msgid "Time standard to use in the log file entries." msgstr "" -#: admin/PageVServer.py:77 +#: admin/PageVServer.py:81 msgid "" "Remember that only \"File Exists\" rules and \"List & Send\" handlers use " "the Directory Indexes setting." msgstr "" -#: admin/PageVServer.py:78 +#: admin/PageVServer.py:82 msgid "" "Use this nickname as an additional host name for this virtual server " "(Default: yes)" msgstr "" -#: admin/PageVServer.py:79 +#: admin/PageVServer.py:83 msgid "Enforce HTTPS by using the HTTP Strict Transport Security." msgstr "" -#: admin/PageVServer.py:80 +#: admin/PageVServer.py:84 msgid "" "How long the client's browser should remember the forced HTTPS (in seconds)." msgstr "" -#: admin/PageVServer.py:81 +#: admin/PageVServer.py:85 msgid "" "Should HSTS be used in all the subdomains of this virtual server (Default: " "yes)." msgstr "" -#: admin/PageVServer.py:83 +#: admin/PageVServer.py:87 msgid "

The 'default' virtual server matches all the domain names.

" msgstr "" -#: admin/PageVServer.py:86 +#: admin/PageVServer.py:90 #, fuzzy msgid "Remote IP address" msgstr "IP do Servidor de LDAP" -#: admin/PageVServer.py:87 +#: admin/PageVServer.py:91 #, fuzzy msgid "Local IP address" msgstr "Seu endereço de email" -#: admin/PageVServer.py:88 +#: admin/PageVServer.py:92 #, fuzzy msgid "Request Protocol" msgstr "Recursos" -#: admin/PageVServer.py:89 +#: admin/PageVServer.py:93 msgid "Transport type: http or https" msgstr "" -#: admin/PageVServer.py:90 +#: admin/PageVServer.py:94 msgid "Port of the server serving the request" msgstr "" -#: admin/PageVServer.py:91 +#: admin/PageVServer.py:95 msgid "The query string, if exists" msgstr "" -#: admin/PageVServer.py:92 +#: admin/PageVServer.py:96 msgid "First line of HTTP request" msgstr "" -#: admin/PageVServer.py:93 +#: admin/PageVServer.py:97 msgid "Response status code" msgstr "" -#: admin/PageVServer.py:94 +#: admin/PageVServer.py:98 msgid "Time: in common log format time format" msgstr "" -#: admin/PageVServer.py:95 +#: admin/PageVServer.py:99 msgid "Time: seconds since Epoch" msgstr "" -#: admin/PageVServer.py:96 +#: admin/PageVServer.py:100 msgid "Time: milliseconds since Epoch" msgstr "" -#: admin/PageVServer.py:97 +#: admin/PageVServer.py:101 #, fuzzy msgid "Remote user (authentication)" msgstr "Autenticação" -#: admin/PageVServer.py:98 +#: admin/PageVServer.py:102 msgid "URL path requested" msgstr "" -#: admin/PageVServer.py:99 +#: admin/PageVServer.py:103 msgid "URL path requested before any rewrite" msgstr "" -#: admin/PageVServer.py:100 +#: admin/PageVServer.py:104 #, fuzzy msgid "Virtual Server nick name" msgstr "Apelido do Servidor Virtual" -#: admin/PageVServer.py:101 +#: admin/PageVServer.py:105 msgid "Requested host (Host: header)" msgstr "" -#: admin/PageVServer.py:102 +#: admin/PageVServer.py:106 msgid "Size of the response in bytes" msgstr "" -#: admin/PageVServer.py:103 +#: admin/PageVServer.py:107 msgid "'Host:' header of the request" msgstr "" -#: admin/PageVServer.py:104 +#: admin/PageVServer.py:108 msgid "'Referrer:' header of the request" msgstr "" -#: admin/PageVServer.py:105 +#: admin/PageVServer.py:109 msgid "'User-Agent:' header of the request" msgstr "" -#: admin/PageVServer.py:106 +#: admin/PageVServer.py:110 msgid "'Cookie:' header of the request" msgstr "" -#: admin/PageVServer.py:142 +#: admin/PageVServer.py:146 msgid "Loggers" msgstr "" -#: admin/PageVServer.py:143 +#: admin/PageVServer.py:147 msgid "SSL cookbook" msgstr "" -#: admin/PageVServer.py:147 admin/PageVServer.py:184 +#: admin/PageVServer.py:151 admin/PageVServer.py:188 msgid "Match" msgstr "" -#: admin/PageVServer.py:147 +#: admin/PageVServer.py:151 #, fuzzy msgid "Rule Match" msgstr "Caminho Completo" -#: admin/PageVServer.py:148 +#: admin/PageVServer.py:152 msgid "Assigned Handler" msgstr "" -#: admin/PageVServer.py:149 +#: admin/PageVServer.py:153 msgid "Auth" msgstr "" -#: admin/PageVServer.py:150 +#: admin/PageVServer.py:154 #, fuzzy msgid "Custom Document Root" msgstr "Diretório de Documento base" -#: admin/PageVServer.py:150 +#: admin/PageVServer.py:154 msgid "Root" msgstr "" -#: admin/PageVServer.py:151 +#: admin/PageVServer.py:155 msgid "Only HTTPS" msgstr "" -#: admin/PageVServer.py:151 +#: admin/PageVServer.py:155 #, fuzzy msgid "Secure" msgstr "Secreto" -#: admin/PageVServer.py:152 +#: admin/PageVServer.py:156 msgid "Enc" msgstr "" -#: admin/PageVServer.py:152 +#: admin/PageVServer.py:156 #, fuzzy msgid "Encoders" msgstr "Codificação" -#: admin/PageVServer.py:153 +#: admin/PageVServer.py:157 #, fuzzy msgid "Cacheable" msgstr "Compatível com Apache" -#: admin/PageVServer.py:154 +#: admin/PageVServer.py:158 msgid "Exp" msgstr "" -#: admin/PageVServer.py:155 +#: admin/PageVServer.py:159 #, fuzzy msgid "Connection Timeout" msgstr "Tempo de espera de conexões" -#: admin/PageVServer.py:156 +#: admin/PageVServer.py:160 msgid "Shaping" msgstr "" -#: admin/PageVServer.py:157 +#: admin/PageVServer.py:161 #, fuzzy msgid "Log" msgstr "Logar" -#: admin/PageVServer.py:157 +#: admin/PageVServer.py:161 #, fuzzy msgid "Logging Enabled" msgstr "Habilitado" -#: admin/PageVServer.py:158 +#: admin/PageVServer.py:162 #, fuzzy msgid "Rule is Final" msgstr "Lista de regras" -#: admin/PageVServer.py:184 +#: admin/PageVServer.py:188 #, fuzzy msgid "Match nickname" msgstr "Qualquer arquivo" -#: admin/PageVServer.py:188 admin/PageVServer.py:717 +#: admin/PageVServer.py:192 admin/PageVServer.py:726 msgid "Host Match" msgstr "" -#: admin/PageVServer.py:218 admin/PageVServer.py:234 admin/PageVServer.py:258 -#: admin/PageVServer.py:485 admin/PageVServer.py:519 -#: admin/plugins/method.py:99 admin/plugins/method.py:109 +#: admin/PageVServer.py:222 admin/PageVServer.py:238 admin/PageVServer.py:262 +#: admin/PageVServer.py:489 admin/PageVServer.py:523 admin/plugins/method.py:99 +#: admin/plugins/method.py:109 msgid "Method" msgstr "Método" -#: admin/PageVServer.py:226 admin/PageVServer.py:242 +#: admin/PageVServer.py:230 admin/PageVServer.py:246 #, fuzzy msgid "Remove criteria" msgstr "Servidor remoto" -#: admin/PageVServer.py:260 +#: admin/PageVServer.py:264 #, fuzzy msgid "How to match this Virtual Server" msgstr "Servidores Virtuais" -#: admin/PageVServer.py:267 +#: admin/PageVServer.py:271 msgid "Add an additional matching criteria" msgstr "" -#: admin/PageVServer.py:358 +#: admin/PageVServer.py:362 msgid "Behavior Rules" msgstr "" -#: admin/PageVServer.py:367 +#: admin/PageVServer.py:371 msgid "Rule Management" msgstr "" -#: admin/PageVServer.py:393 +#: admin/PageVServer.py:397 msgid "Only accept Secure Connections" msgstr "Apenas aceitar conexões seguras" -#: admin/PageVServer.py:398 +#: admin/PageVServer.py:402 #, fuzzy msgid "Encoding enabled" msgstr "Codificação" -#: admin/PageVServer.py:404 +#: admin/PageVServer.py:408 msgid "no" msgstr "não" -#: admin/PageVServer.py:415 +#: admin/PageVServer.py:419 #, fuzzy msgid " seconds" msgstr "Ícones" -#: admin/PageVServer.py:420 +#: admin/PageVServer.py:424 msgid " bytes per second" msgstr " bytes por segundo" -#: admin/PageVServer.py:425 +#: admin/PageVServer.py:429 msgid "Logging enabled for this rule" msgstr "" -#: admin/PageVServer.py:430 +#: admin/PageVServer.py:434 msgid "Prevents further rule evaluation" msgstr "" -#: admin/PageVServer.py:435 +#: admin/PageVServer.py:439 msgid "Content can be cached" msgstr "" -#: admin/PageVServer.py:438 +#: admin/PageVServer.py:442 msgid "Forbids content caching" msgstr "" -#: admin/PageVServer.py:455 +#: admin/PageVServer.py:459 msgid "Virtual Server nickname" msgstr "Apelido do Servidor Virtual" -#: admin/PageVServer.py:457 +#: admin/PageVServer.py:461 msgid "Server ID" msgstr "ID do Servidor" -#: admin/PageVServer.py:463 +#: admin/PageVServer.py:467 msgid "Directory Indexes" msgstr "Índice do diretório" -#: admin/PageVServer.py:465 admin/plugins/fullpath.py:119 +#: admin/PageVServer.py:469 admin/plugins/fullpath.py:119 msgid "Paths" msgstr "Caminhos" -#: admin/PageVServer.py:471 +#: admin/PageVServer.py:475 msgid "Neither are in use at the moment." msgstr "" -#: admin/PageVServer.py:476 +#: admin/PageVServer.py:480 msgid "Keep-alive" msgstr "" -#: admin/PageVServer.py:477 +#: admin/PageVServer.py:481 msgid "Max Upload Size" msgstr "Tamanho máximo para Upload" -#: admin/PageVServer.py:487 admin/plugins/evhost.py:33 +#: admin/PageVServer.py:491 admin/plugins/evhost.py:33 msgid "Advanced Virtual Hosting" msgstr "" -#: admin/PageVServer.py:521 +#: admin/PageVServer.py:525 msgid "Error Handling hook" msgstr "" -#: admin/PageVServer.py:532 admin/consts.py:233 admin/consts.py:250 +#: admin/PageVServer.py:536 admin/consts.py:232 admin/consts.py:249 msgid "Disabled" msgstr "Desabilitado" -#: admin/PageVServer.py:536 +#: admin/PageVServer.py:540 msgid "Write errors to" msgstr "Gravar erros para" -#: admin/PageVServer.py:540 admin/PageVServer.py:579 +#: admin/PageVServer.py:544 admin/PageVServer.py:583 msgid "Filename" msgstr "Nome do arquivo" -#: admin/PageVServer.py:542 admin/PageVServer.py:582 +#: admin/PageVServer.py:546 admin/PageVServer.py:586 msgid "Command" msgstr "Comando" -#: admin/PageVServer.py:548 +#: admin/PageVServer.py:552 #, fuzzy msgid "Error Logging" msgstr "Logar" -#: admin/PageVServer.py:559 +#: admin/PageVServer.py:563 msgid "Format" msgstr "Formato" -#: admin/PageVServer.py:566 +#: admin/PageVServer.py:570 msgid "Write accesses to" msgstr "" -#: admin/PageVServer.py:589 +#: admin/PageVServer.py:593 #, fuzzy msgid "Hide" msgstr "Cabeçalho" -#: admin/PageVServer.py:589 +#: admin/PageVServer.py:593 #, fuzzy msgid "Show macros" msgstr "Mostrar Grupo" -#: admin/PageVServer.py:598 +#: admin/PageVServer.py:602 msgid "Template: " msgstr "" -#: admin/PageVServer.py:600 +#: admin/PageVServer.py:604 #, fuzzy msgid "Access Logging" msgstr "Logar" -#: admin/PageVServer.py:606 +#: admin/PageVServer.py:610 msgid "Time standard" msgstr "" -#: admin/PageVServer.py:607 admin/PageVServer.py:687 admin/consts.py:228 +#: admin/PageVServer.py:611 admin/PageVServer.py:696 admin/consts.py:227 msgid "Accept" msgstr "Aceitar" -#: admin/PageVServer.py:607 +#: admin/PageVServer.py:611 msgid "Accept Forwarded IPs" msgstr "" -#: admin/PageVServer.py:610 +#: admin/PageVServer.py:614 #, fuzzy msgid "Do not check" msgstr "Não verificar origem" -#: admin/PageVServer.py:619 +#: admin/PageVServer.py:623 #, fuzzy msgid "Logging Options" msgstr "Opções comuns de CGI" -#: admin/PageVServer.py:655 admin/wizards/ssl_test.py:136 +#: admin/PageVServer.py:659 admin/wizards/ssl_test.py:136 msgid "Certificate" msgstr "Certificado" -#: admin/PageVServer.py:656 +#: admin/PageVServer.py:660 msgid "Certificate key" msgstr "" -#: admin/PageVServer.py:661 +#: admin/PageVServer.py:665 msgid "Required SSL/TLS Values" msgstr "" -#: admin/PageVServer.py:666 +#: admin/PageVServer.py:674 +msgid "Ciphersuites" +msgstr "" + +#: admin/PageVServer.py:675 msgid "Ciphers" msgstr "" -#: admin/PageVServer.py:667 +#: admin/PageVServer.py:676 #, fuzzy msgid "Prefer" msgstr "Prefixo" -#: admin/PageVServer.py:667 +#: admin/PageVServer.py:676 #, fuzzy msgid "Server Preference" msgstr "Servidores Virtuais" -#: admin/PageVServer.py:668 +#: admin/PageVServer.py:677 msgid "Client Certs. Request" msgstr "" -#: admin/PageVServer.py:669 +#: admin/PageVServer.py:678 msgid "Compression" msgstr "" -#: admin/PageVServer.py:670 +#: admin/PageVServer.py:679 msgid "DH length" msgstr "" -#: admin/PageVServer.py:673 +#: admin/PageVServer.py:682 msgid "CA List" msgstr "" -#: admin/PageVServer.py:676 +#: admin/PageVServer.py:685 msgid "Verify Depth" msgstr "" -#: admin/PageVServer.py:682 +#: admin/PageVServer.py:691 #, fuzzy msgid "Advanced Options" msgstr "Configuração avançada" -#: admin/PageVServer.py:687 +#: admin/PageVServer.py:696 #, fuzzy msgid "Enable HSTS" msgstr "Habilitado" -#: admin/PageVServer.py:690 +#: admin/PageVServer.py:699 msgid "HSTS Max-Age" msgstr "" -#: admin/PageVServer.py:690 +#: admin/PageVServer.py:699 msgid "One year" msgstr "" -#: admin/PageVServer.py:691 +#: admin/PageVServer.py:700 #, fuzzy msgid "Include Subdomains" msgstr "Envie seus domínios" -#: admin/PageVServer.py:691 +#: admin/PageVServer.py:700 msgid "Include all" msgstr "" -#: admin/PageVServer.py:697 +#: admin/PageVServer.py:706 msgid "HTTP Strict Transport Security (HSTS)" msgstr "" -#: admin/PageVServer.py:716 +#: admin/PageVServer.py:725 msgid "Basics" msgstr "Básico" -#: admin/PageVServer.py:719 +#: admin/PageVServer.py:728 msgid "Error Handler" msgstr "" @@ -3005,8 +3053,8 @@ msgstr "" msgid "Full Server string" msgstr "" -#: admin/consts.py:51 admin/consts.py:80 admin/consts.py:97 -#: admin/consts.py:111 admin/plugins/mysql.py:45 +#: admin/consts.py:51 admin/consts.py:80 admin/consts.py:97 admin/consts.py:111 +#: admin/plugins/mysql.py:45 msgid "None" msgstr "Nada" @@ -3208,191 +3256,191 @@ msgstr "Dinamico" msgid "Automatic" msgstr "Automático" -#: admin/consts.py:145 admin/plugins/error_redir.py:35 +#: admin/consts.py:144 admin/plugins/error_redir.py:35 msgid "External" msgstr "Externo" -#: admin/consts.py:146 admin/plugins/error_redir.py:34 +#: admin/consts.py:145 admin/plugins/error_redir.py:34 msgid "Internal" msgstr "Interno" -#: admin/consts.py:189 admin/plugins/header.py:116 admin/plugins/proxy.py:94 +#: admin/consts.py:188 admin/plugins/header.py:118 admin/plugins/proxy.py:94 #: admin/plugins/proxy.py:144 admin/plugins/redir.py:76 #: admin/plugins/redir.py:106 admin/plugins/request.py:31 #: admin/plugins/url_arg.py:76 admin/plugins/url_arg.py:95 msgid "Regular Expression" msgstr "Expressão Regular" -#: admin/consts.py:191 +#: admin/consts.py:190 msgid "File Exists" msgstr "Arquivo Existe" -#: admin/consts.py:192 +#: admin/consts.py:191 msgid "HTTP Method" msgstr "Método HTTP" -#: admin/consts.py:193 admin/plugins/bind.py:76 admin/plugins/bind.py:129 +#: admin/consts.py:192 admin/plugins/bind.py:76 admin/plugins/bind.py:129 msgid "Incoming IP/Port" msgstr "IP/Porta de entrada" -#: admin/consts.py:194 +#: admin/consts.py:193 msgid "SSL / TLS" msgstr "" -#: admin/consts.py:195 admin/plugins/fullpath.py:66 +#: admin/consts.py:194 admin/plugins/fullpath.py:66 #: admin/plugins/fullpath.py:101 msgid "Full Path" msgstr "Caminho Completo" -#: admin/consts.py:196 admin/plugins/from.py:71 +#: admin/consts.py:195 admin/plugins/from.py:71 msgid "Connected from" msgstr "Conectado de" -#: admin/consts.py:197 +#: admin/consts.py:196 msgid "URL Argument" msgstr "" -#: admin/consts.py:198 +#: admin/consts.py:197 msgid "GeoIP" msgstr "" -#: admin/consts.py:202 +#: admin/consts.py:201 msgid "Match Nickname" msgstr "" -#: admin/consts.py:203 +#: admin/consts.py:202 msgid "Wildcards" msgstr "" -#: admin/consts.py:205 +#: admin/consts.py:204 msgid "Server IP" msgstr "IP do servidor" -#: admin/consts.py:209 admin/consts.py:255 +#: admin/consts.py:208 admin/consts.py:254 msgid "Not set" msgstr "" -#: admin/consts.py:210 +#: admin/consts.py:209 msgid "Already expired on 1970" msgstr "Já expirou em 1970" -#: admin/consts.py:211 +#: admin/consts.py:210 msgid "Do not expire until 2038" msgstr "Não expira até 2038" -#: admin/consts.py:212 +#: admin/consts.py:211 msgid "Custom value" msgstr "Valor personalizado" -#: admin/consts.py:216 +#: admin/consts.py:215 msgid "No TLS/SSL" msgstr "" -#: admin/consts.py:217 +#: admin/consts.py:216 msgid "OpenSSL / libssl" msgstr "" -#: admin/consts.py:221 admin/util.py:91 +#: admin/consts.py:220 admin/util.py:91 msgid "Off" msgstr "Desligado" -#: admin/consts.py:222 +#: admin/consts.py:221 msgid "Enhanced Virtual Hosting" msgstr "" -#: admin/consts.py:226 +#: admin/consts.py:225 msgid "Skip" msgstr "" -#: admin/consts.py:227 +#: admin/consts.py:226 msgid "Tolerate" msgstr "" -#: admin/consts.py:229 +#: admin/consts.py:228 msgid "Require" msgstr "Peça" -#: admin/consts.py:234 +#: admin/consts.py:233 msgid "RRDtool graphs" msgstr "" -#: admin/consts.py:238 +#: admin/consts.py:237 msgid "Local time" msgstr "Hora Local" -#: admin/consts.py:239 +#: admin/consts.py:238 msgid "UTC: Coordinated Universal Time" msgstr "" -#: admin/consts.py:243 +#: admin/consts.py:242 msgid "JSON" msgstr "" -#: admin/consts.py:244 +#: admin/consts.py:243 msgid "Python" msgstr "" -#: admin/consts.py:245 admin/wizards/List.py:91 +#: admin/consts.py:244 admin/wizards/List.py:91 msgid "PHP" msgstr "" -#: admin/consts.py:246 +#: admin/consts.py:245 msgid "Ruby" msgstr "" -#: admin/consts.py:251 +#: admin/consts.py:250 msgid "POST tracker" msgstr "" -#: admin/consts.py:256 +#: admin/consts.py:255 msgid "Public" msgstr "" -#: admin/consts.py:257 +#: admin/consts.py:256 msgid "Private" msgstr "" -#: admin/consts.py:258 +#: admin/consts.py:257 msgid "No Cache" msgstr "" -#: admin/consts.py:263 +#: admin/consts.py:262 msgid "0 - No compression" msgstr "" -#: admin/consts.py:264 +#: admin/consts.py:263 msgid "1" msgstr "" -#: admin/consts.py:265 +#: admin/consts.py:264 msgid "2" msgstr "" -#: admin/consts.py:266 +#: admin/consts.py:265 msgid "3" msgstr "" -#: admin/consts.py:267 +#: admin/consts.py:266 msgid "4" msgstr "" -#: admin/consts.py:268 +#: admin/consts.py:267 msgid "5" msgstr "" -#: admin/consts.py:269 +#: admin/consts.py:268 msgid "6" msgstr "" -#: admin/consts.py:270 +#: admin/consts.py:269 msgid "7" msgstr "" -#: admin/consts.py:271 +#: admin/consts.py:270 msgid "8" msgstr "" -#: admin/consts.py:272 +#: admin/consts.py:271 msgid "9 - Max compression" msgstr "" @@ -3576,66 +3624,66 @@ msgstr "" msgid "Only listing" msgstr "Apenas listar" -#: admin/plugins/dirlist.py:49 admin/plugins/dirlist.py:50 #: admin/plugins/dirlist.py:51 admin/plugins/dirlist.py:52 #: admin/plugins/dirlist.py:53 admin/plugins/dirlist.py:54 +#: admin/plugins/dirlist.py:55 admin/plugins/dirlist.py:56 #: admin/plugins/redir.py:105 msgid "Show" msgstr "Mostrar" -#: admin/plugins/dirlist.py:49 +#: admin/plugins/dirlist.py:51 msgid "Show Size" msgstr "Mostrar tamanho" -#: admin/plugins/dirlist.py:50 +#: admin/plugins/dirlist.py:52 msgid "Show Date" msgstr "Mostrar Data" -#: admin/plugins/dirlist.py:51 +#: admin/plugins/dirlist.py:53 msgid "Show User" msgstr "Mostrar Usuário" -#: admin/plugins/dirlist.py:52 +#: admin/plugins/dirlist.py:54 msgid "Show Group" msgstr "Mostrar Grupo" -#: admin/plugins/dirlist.py:53 +#: admin/plugins/dirlist.py:55 msgid "Show Backup files" msgstr "Mostrar Arquivos de backup" -#: admin/plugins/dirlist.py:54 +#: admin/plugins/dirlist.py:56 msgid "Show Hidden files" msgstr "Mostrar Arquivos Ocultos" -#: admin/plugins/dirlist.py:55 +#: admin/plugins/dirlist.py:58 admin/plugins/file.py:44 msgid "Allow symbolic links" msgstr "Permitir links simbólicos" -#: admin/plugins/dirlist.py:56 +#: admin/plugins/dirlist.py:59 msgid "Redirect symbolic links" msgstr "Redirecionar links simbólicos" -#: admin/plugins/dirlist.py:60 +#: admin/plugins/dirlist.py:63 msgid "Listing" msgstr "Listando" -#: admin/plugins/dirlist.py:65 +#: admin/plugins/dirlist.py:68 msgid "Theme" msgstr "Tema" -#: admin/plugins/dirlist.py:66 +#: admin/plugins/dirlist.py:69 msgid "Icons dir" msgstr "Diretório de ícones" -#: admin/plugins/dirlist.py:67 +#: admin/plugins/dirlist.py:70 msgid "Notice files" msgstr "Arquivos de aviso" -#: admin/plugins/dirlist.py:68 +#: admin/plugins/dirlist.py:71 msgid "Hidden files" msgstr "Arquivos ocultos" -#: admin/plugins/dirlist.py:72 +#: admin/plugins/dirlist.py:75 #, fuzzy msgid "Theming" msgstr "Tema" @@ -3771,7 +3819,7 @@ msgstr "" msgid "Enables an internal I/O cache that improves performance." msgstr "" -#: admin/plugins/file.py:45 +#: admin/plugins/file.py:49 msgid "File Sending" msgstr "Envio de arquivo" @@ -3859,26 +3907,26 @@ msgid "" "header entry." msgstr "" -#: admin/plugins/header.py:65 +#: admin/plugins/header.py:67 #, fuzzy msgid "Matches a Regular Expression" msgstr "Nova expressão regular" -#: admin/plugins/header.py:66 +#: admin/plugins/header.py:68 msgid "Is Provided" msgstr "" -#: admin/plugins/header.py:104 +#: admin/plugins/header.py:106 #, fuzzy msgid "Full header" msgstr "Nome do arquivo" -#: admin/plugins/header.py:107 +#: admin/plugins/header.py:109 #, fuzzy msgid "Complete Header" msgstr "Esconder Header" -#: admin/plugins/header.py:154 +#: admin/plugins/header.py:156 #, python-format msgid "Header %(header)s is provided" msgstr "" @@ -4011,6 +4059,7 @@ msgid "Database name containing the user/password pair list." msgstr "" #: admin/plugins/mysql.py:41 +#, python-brace-format msgid "" "SQL command to execute. ${user} is replaced with the user name, and " "${passwd} is replaced with the user supplied password." @@ -4448,24 +4497,20 @@ msgstr "Adicionar novo" msgid "Accepted Domains" msgstr "Aceitar dos Hosts" -#: admin/server.py:68 +#: admin/server.py:70 #, python-format msgid "Server %(version)s running.. PID=%(pid)d Port=%(scgi_port)s" msgstr "" "Servidor %(version)s está executando.. Id do processo=%(pid)d, Porta=" "%(scgi_port)s" -#: admin/server.py:70 +#: admin/server.py:72 #, python-format msgid "Server %(version)s running.. PID=%(pid)d Socket=%(scgi_port)s" msgstr "" "Servidor %(version)s está executando.. Id do processo=%(pid)d, Soquete=" "%(scgi_port)s" -#: admin/server.py:144 -msgid "Incorrect parameters: PORT CONFIG_FILE" -msgstr "" - #: admin/util.py:91 msgid "On" msgstr "Ligado" @@ -4849,18 +4894,16 @@ msgstr "" #: admin/wizards/alfresco.py:45 admin/wizards/coldfusion.py:46 #: admin/wizards/concrete5.py:47 admin/wizards/django.py:44 #: admin/wizards/glassfish.py:45 admin/wizards/mailman.py:48 -#: admin/wizards/mono.py:46 admin/wizards/php.py:43 -#: admin/wizards/symfony.py:51 admin/wizards/uwsgi.py:61 -#: admin/wizards/zend.py:47 +#: admin/wizards/mono.py:46 admin/wizards/php.py:43 admin/wizards/symfony.py:51 +#: admin/wizards/uwsgi.py:61 admin/wizards/zend.py:47 msgid "Host name of the virtual server that is about to be created." msgstr "" #: admin/wizards/alfresco.py:46 admin/wizards/coldfusion.py:45 #: admin/wizards/concrete5.py:46 admin/wizards/django.py:43 #: admin/wizards/glassfish.py:46 admin/wizards/mailman.py:47 -#: admin/wizards/mono.py:45 admin/wizards/php.py:42 -#: admin/wizards/symfony.py:50 admin/wizards/uwsgi.py:60 -#: admin/wizards/zend.py:46 +#: admin/wizards/mono.py:45 admin/wizards/php.py:42 admin/wizards/symfony.py:50 +#: admin/wizards/uwsgi.py:60 admin/wizards/zend.py:46 #, fuzzy msgid "New Virtual Server Details" msgstr "Servidores Virtuais" @@ -5750,3 +5793,21 @@ msgstr "Não parece ser um diretório com código Zend" #: admin/wizards/zend.py:49 msgid "Web directory where you want Zend to be accessible. (Example: /zend)" msgstr "" + +#, fuzzy +#~ msgid "Disable %s" +#~ msgstr "Desabilitado" + +#, fuzzy +#~ msgid "Mailing List Subscription" +#~ msgstr "Lista de emails" + +#, fuzzy +#~ msgid "Purchase commercial support" +#~ msgstr "Suporte Comercial" + +#~ msgid "Your email address" +#~ msgstr "Seu endereço de email" + +#~ msgid "Your name" +#~ msgstr "Seu nome" diff --git a/po/admin/sv_SE.po b/po/admin/sv_SE.po index df767fcf5..149cb48e2 100644 --- a/po/admin/sv_SE.po +++ b/po/admin/sv_SE.po @@ -1,9 +1,9 @@ # msgid "" msgstr "" -"Project-Id-Version: cherokee-admin 0.99.16\n" -"Report-Msgid-Bugs-To: http://bugs.cherokee-project.com/\n" -"POT-Creation-Date: 2014-01-04 00:54+0100\n" +"Project-Id-Version: cherokee 1.2.104\n" +"Report-Msgid-Bugs-To: https://github.com/cherokee/webserver/issues\n" +"POT-Creation-Date: 2021-03-26 19:04+0100\n" "PO-Revision-Date: 2010-05-10 16:28+0100\n" "Last-Translator: Andreas Andersson \n" "Language-Team: Swedish \n" @@ -101,7 +101,7 @@ msgstr "Informationskällor" msgid "Assign Information Sources" msgstr "Tilldela informationskällor" -#: admin/Balancer.py:136 admin/PageIndex.py:204 admin/PageRule.py:112 +#: admin/Balancer.py:136 admin/PageIndex.py:182 admin/PageRule.py:112 #: admin/plugins/bind.py:69 admin/plugins/bind.py:121 #: admin/plugins/custom_error.py:41 admin/plugins/method.py:31 msgid "Choose" @@ -136,17 +136,17 @@ msgstr "Kunde inte kopiera konfiguration till" #: admin/CTK/CTK/Druid.py:216 admin/CTK/CTK/Druid.py:224 #: admin/CTK/CTK/Druid.py:232 admin/CTK/CTK/Druid.py:238 admin/Icons.py:362 #: admin/Mime.py:110 admin/PageGeneral.py:289 admin/PageGeneral.py:317 -#: admin/PageIndex.py:232 admin/PageIndex.py:308 admin/PageRule.py:225 -#: admin/PageRule.py:276 admin/PageRule.py:302 admin/PageSource.py:225 -#: admin/PageSource.py:411 admin/PageSource.py:428 admin/PageSource.py:442 -#: admin/PageVServers.py:215 admin/PageVServers.py:252 -#: admin/PageVServers.py:281 admin/plugins/redir.py:120 +#: admin/PageIndex.py:246 admin/PageRule.py:225 admin/PageRule.py:276 +#: admin/PageRule.py:302 admin/PageSource.py:225 admin/PageSource.py:411 +#: admin/PageSource.py:428 admin/PageSource.py:442 admin/PageVServers.py:215 +#: admin/PageVServers.py:252 admin/PageVServers.py:281 +#: admin/plugins/redir.py:120 msgid "Cancel" msgstr "Avbryt" #: admin/CTK/CTK/Dialog.py:165 admin/CTK/CTK/Dialog.py:272 #: admin/CTK/CTK/Druid.py:243 admin/PageException.py:89 -#: admin/PageException.py:93 admin/PageGeneral.py:283 admin/PageIndex.py:277 +#: admin/PageException.py:93 admin/PageGeneral.py:283 admin/PageIndex.py:215 #: admin/PageSource.py:402 admin/plugins/error_redir.py:110 msgid "Close" msgstr "Stäng" @@ -188,14 +188,14 @@ msgstr "Loggning" #: admin/CTK/CTK/Image.py:99 admin/CgiBase.py:69 admin/CgiBase.py:71 #: admin/CgiBase.py:124 admin/CgiBase.py:125 admin/CgiBase.py:126 #: admin/CgiBase.py:127 admin/CgiBase.py:128 admin/Graph.py:125 -#: admin/PageAdvanced.py:150 admin/PageEntry.py:150 admin/PageEntry.py:159 -#: admin/PageGeneral.py:193 admin/PageSource.py:296 -#: admin/plugins/dirlist.py:56 admin/plugins/exists.py:72 -#: admin/plugins/exists.py:77 admin/plugins/exists.py:78 -#: admin/plugins/exists.py:79 admin/plugins/exists.py:109 -#: admin/plugins/exists.py:115 admin/plugins/exists.py:116 -#: admin/plugins/exists.py:117 admin/plugins/file.py:40 -#: admin/plugins/ldap.py:53 admin/plugins/streaming.py:43 +#: admin/PageAdvanced.py:198 admin/PageEntry.py:150 admin/PageEntry.py:159 +#: admin/PageGeneral.py:193 admin/PageSource.py:296 admin/plugins/dirlist.py:59 +#: admin/plugins/exists.py:72 admin/plugins/exists.py:77 +#: admin/plugins/exists.py:78 admin/plugins/exists.py:79 +#: admin/plugins/exists.py:109 admin/plugins/exists.py:115 +#: admin/plugins/exists.py:116 admin/plugins/exists.py:117 +#: admin/plugins/file.py:42 admin/plugins/ldap.py:53 +#: admin/plugins/streaming.py:43 #, fuzzy msgid "Enabled" msgstr "Aktiverad" @@ -216,11 +216,12 @@ msgstr "LDAP-server" msgid "Optional" msgstr "Ytterligare inställningar" -#: admin/CTK/CTK/ToggleButton.py:154 +#: admin/CTK/CTK/ToggleButton.py:154 admin/PageAdvanced.py:245 +#: admin/PageAdvanced.py:258 msgid "Disable" msgstr "Deaktivera" -#: admin/CTK/CTK/ToggleButton.py:155 admin/PageVServer.py:669 +#: admin/CTK/CTK/ToggleButton.py:155 admin/PageVServer.py:678 #: admin/wizards/flcache.py:157 #, fuzzy msgid "Enable" @@ -267,7 +268,7 @@ msgstr "" "Huruvida loggaren ska läsa och använda X-Real-IP och X-Forwarded-For-headers " "(skickas av omvända proxies)" -#: admin/CgiBase.py:40 admin/PageVServer.py:70 +#: admin/CgiBase.py:40 admin/PageVServer.py:74 msgid "" "Accept all the X-Real-IP and X-Forwarded-For headers. WARNING: Turn it on " "only if you are centain of what you are doing." @@ -288,11 +289,11 @@ msgstr "" msgid "Read X-Real-IP" msgstr "Läs X-Real-IP" -#: admin/CgiBase.py:71 admin/PageVServer.py:610 +#: admin/CgiBase.py:71 admin/PageVServer.py:614 msgid "Don't check origin" msgstr "Kolla inte ursprung" -#: admin/CgiBase.py:73 admin/PageVServer.py:613 +#: admin/CgiBase.py:73 admin/PageVServer.py:617 msgid "Accept from Hosts" msgstr "Acceptera från värd(ar)" @@ -334,7 +335,7 @@ msgid "Allow X-Sendfile" msgstr "Tillåt X-Sendfile" #: admin/CgiBase.py:128 admin/plugins/exists.py:77 admin/plugins/exists.py:115 -#: admin/plugins/file.py:40 +#: admin/plugins/file.py:42 msgid "Use I/O cache" msgstr "Använd I/O-cache" @@ -432,7 +433,7 @@ msgstr "" "servern." #: admin/Graph.py:118 admin/PageEntry.py:538 admin/PageSource.py:257 -#: admin/PageStatus.py:70 admin/PageVServer.py:731 admin/PageVServers.py:210 +#: admin/PageStatus.py:70 admin/PageVServer.py:740 admin/PageVServers.py:210 msgid "Unknown" msgstr "Okänd" @@ -445,7 +446,7 @@ msgstr "Samla in statistik" msgid "Allows to specify an alternative Document Root path." msgstr "Tillåter att ange en alternativ dokumentroot." -#: admin/Handler.py:43 admin/PageEntry.py:523 admin/PageVServer.py:462 +#: admin/Handler.py:43 admin/PageEntry.py:523 admin/PageVServer.py:466 #: admin/PageVServers.py:128 admin/wizards/django.py:191 #: admin/wizards/mono.py:199 admin/wizards/php.py:39 admin/wizards/php.py:342 #: admin/wizards/uwsgi.py:267 @@ -458,7 +459,7 @@ msgid "Extension List" msgstr "Filtypslista" #: admin/Icons.py:129 admin/Icons.py:328 admin/Mime.py:96 admin/Mime.py:131 -#: admin/consts.py:188 admin/plugins/extensions.py:61 +#: admin/consts.py:187 admin/plugins/extensions.py:61 #: admin/wizards/flcache.py:141 msgid "Extensions" msgstr "Filändelser" @@ -479,12 +480,13 @@ msgstr "Filer" msgid "Add New File" msgstr "Lägg till ny fil" -#: admin/Icons.py:197 admin/Icons.py:329 admin/Rule.py:174 admin/consts.py:42 -#: admin/consts.py:128 admin/consts.py:262 +#: admin/Icons.py:197 admin/Icons.py:329 admin/PageVServer.py:674 +#: admin/PageVServer.py:675 admin/Rule.py:174 admin/consts.py:42 +#: admin/consts.py:128 admin/consts.py:261 msgid "Default" msgstr "Förvald" -#: admin/Icons.py:198 admin/Icons.py:330 admin/consts.py:187 +#: admin/Icons.py:198 admin/Icons.py:330 admin/consts.py:186 #: admin/plugins/directory.py:31 msgid "Directory" msgstr "Katalog" @@ -497,7 +499,7 @@ msgstr "Gå till förälder" msgid "Modify" msgstr "Modifiera" -#: admin/Icons.py:214 admin/PageAdvanced.py:168 admin/PageAdvanced.py:192 +#: admin/Icons.py:214 admin/PageAdvanced.py:216 admin/PageAdvanced.py:316 msgid "Special Files" msgstr "Speciella filer" @@ -610,7 +612,7 @@ msgstr "Spara" msgid "Home" msgstr "" -#: admin/Page.py:155 admin/PageAdvanced.py:150 admin/PageIndex.py:84 +#: admin/Page.py:155 admin/PageAdvanced.py:198 admin/PageIndex.py:62 #: admin/PageStatus.py:40 admin/PageStatus.py:112 msgid "Status" msgstr "Status" @@ -629,7 +631,7 @@ msgstr "Server-id" msgid "Sources" msgstr "Användandet av källa" -#: admin/Page.py:159 admin/PageAdvanced.py:97 admin/PageAdvanced.py:198 +#: admin/Page.py:159 admin/PageAdvanced.py:145 admin/PageAdvanced.py:322 msgid "Advanced" msgstr "Avancerat" @@ -641,8 +643,19 @@ msgstr "Hjälp" msgid "Updating..." msgstr "" -#: admin/PageAdvanced.py:64 -#, fuzzy +#: admin/PageAdvanced.py:56 +msgid "" +"

WARNING: The SSL/TLS back-end supports more recent\n" +"versions of TLS protocols, which are not recognized by Cherokee. Please " +"check\n" +"for latest Cherokee updates or report this issue. As a temporary workaround " +"please\n" +"set 'Max. TLS protocol version' to the maximum TLS protocol version " +"supported by\n" +"Cherokee.

Following unknown TLS protocols have been found:" +msgstr "" + +#: admin/PageAdvanced.py:94 msgid "" "

WARNING: This section contains advanced\n" "configuration parameters. Changing things is not recommended unless\n" @@ -651,15 +664,15 @@ msgstr "" "

WARNING: Denna del innehåller avancerade konfigurationsparametrar. " "Ändringar uppmuntras inte om du inte vet vad du gör..

" -#: admin/PageAdvanced.py:68 +#: admin/PageAdvanced.py:98 msgid "Defines which thread policy the OS should apply to the server." msgstr "Anger vilken trådningspolicy som operativsystem ska köra mot servern." -#: admin/PageAdvanced.py:69 +#: admin/PageAdvanced.py:99 msgid "If empty, Cherokee will calculate a default number." msgstr "Cherokee räknar ut ett grundvärde ifall fältet är tomt." -#: admin/PageAdvanced.py:70 +#: admin/PageAdvanced.py:100 msgid "" "It defines how many file descriptors the server should handle. Default is " "the number showed by ulimit -n" @@ -667,37 +680,37 @@ msgstr "" "Anger hur många file descriptors servern ska använda. Förvalt värde tas " "från ulimit -n." -#: admin/PageAdvanced.py:71 +#: admin/PageAdvanced.py:101 msgid "Allows to choose the internal file descriptor polling method." msgstr "Tillåter val av intern pollningsmetod för file descriptor." -#: admin/PageAdvanced.py:72 +#: admin/PageAdvanced.py:102 msgid "Minimum size of a file to use sendfile(). Default: 32768 Bytes." msgstr "" "Minsta filstorlek för användande av sendfile() för en fil. Förvalt värde: " "32768 bytes." -#: admin/PageAdvanced.py:73 +#: admin/PageAdvanced.py:103 msgid "Maximum size of a file to use sendfile(). Default: 2 GB." msgstr "" "Största filstorlek för användande av sendfile() för en fil. Förvalt värde: " "2GiB." -#: admin/PageAdvanced.py:74 +#: admin/PageAdvanced.py:104 msgid "" "Name a program that will be called if, by some reason, the server fails. " "Default: cherokee-panic." msgstr "Namnge ett program som körs om servern, av någon anledning falerar." -#: admin/PageAdvanced.py:75 +#: admin/PageAdvanced.py:105 msgid "Path of the PID file. If empty, the file will not be created." msgstr "Sökväg till PID-filen. Är fältet tomt skapas filen inte." -#: admin/PageAdvanced.py:76 +#: admin/PageAdvanced.py:106 msgid "Max. length of the incoming connection queue." msgstr "Maximal längd för kö av inkommande anslutningar." -#: admin/PageAdvanced.py:77 +#: admin/PageAdvanced.py:107 #, fuzzy msgid "" "Set the number of how many internal connections can be held for reuse by " @@ -706,7 +719,7 @@ msgstr "" "Ange antal interna anslutningar som kan kvarhållas för återanvändning av " "varje tråd. Förvalt värde: 20." -#: admin/PageAdvanced.py:78 +#: admin/PageAdvanced.py:108 msgid "" "Sets the number of seconds between log consolidations (flushes). Default: 10 " "seconds." @@ -714,11 +727,11 @@ msgstr "" "Anger antalet sekunder mellan logkonsolidationer (rensningar). Förvalt " "värde: 10" -#: admin/PageAdvanced.py:79 +#: admin/PageAdvanced.py:109 msgid "Time lapse (in seconds) between Nonce cache clean ups." msgstr "Tidsrymd (i sekunder) mellan icke-cache-rensningar." -#: admin/PageAdvanced.py:80 +#: admin/PageAdvanced.py:110 msgid "" "Enables the server-wide keep-alive support. It increases the performance. It " "is usually set on." @@ -726,215 +739,276 @@ msgstr "" "Aktiverar keep-alive stöd globalt på servern. Denna funktion höjer " "prestandan. Är vanligtvis aktiverad." -#: admin/PageAdvanced.py:81 +#: admin/PageAdvanced.py:111 msgid "" "Maximum number of HTTP requests that can be served by each keepalive " "connection." msgstr "" "Maximalt antal HTTP-anrop som kan behandlas av varje keepalive-anslutning." -#: admin/PageAdvanced.py:82 +#: admin/PageAdvanced.py:112 msgid "" "Allows the server to use Chunked encoding to try to keep Keep-Alive enabled." msgstr "" "Tillåter servern att använda \"Chunked encoding\" för att försöka hålla Keep-" "alive vid liv." -#: admin/PageAdvanced.py:83 +#: admin/PageAdvanced.py:113 msgid "Activate or deactivate the I/O cache globally." msgstr "Aktivera eller deaktivera I/O-cachen globalt." -#: admin/PageAdvanced.py:84 +#: admin/PageAdvanced.py:114 msgid "Number of pages that the cache should handle." msgstr "Antal pages som cachen ska använda." -#: admin/PageAdvanced.py:85 +#: admin/PageAdvanced.py:115 #, fuzzy msgid "Files under this size (in bytes) will not be cached." msgstr "Filer med mindre filstorlek än denna kommer inte att bli cachade." -#: admin/PageAdvanced.py:86 +#: admin/PageAdvanced.py:116 #, fuzzy msgid "Files over this size (in bytes) will not be cached." msgstr "Filer med större filstorlek än denna kommer inte att bli cachade." -#: admin/PageAdvanced.py:87 +#: admin/PageAdvanced.py:117 #, fuzzy msgid "" "How long (in seconds) the file information should last cached without " "refreshing it." msgstr "Hur länge filinformationen ska cachas innan man uppdaterar den." -#: admin/PageAdvanced.py:88 +#: admin/PageAdvanced.py:118 #, fuzzy msgid "How long (in seconds) the file content should last cached." msgstr "Hur länge filinnehållet ska cachas." -#: admin/PageAdvanced.py:89 +#: admin/PageAdvanced.py:119 #, fuzzy msgid "Path to a Diffie Hellman (DH) parameters PEM file: 512 bits." msgstr "Sökväg till den PEM-kodade DH-parameter-filen (512 bitar)." -#: admin/PageAdvanced.py:90 +#: admin/PageAdvanced.py:120 #, fuzzy msgid "Path to a Diffie Hellman (DH) parameters PEM file: 1024 bits." msgstr "Sökväg till den PEM-kodade DH-parameter-filen (1024 bitar)." -#: admin/PageAdvanced.py:91 +#: admin/PageAdvanced.py:121 #, fuzzy msgid "Path to a Diffie Hellman (DH) parameters PEM file: 2048 bits." msgstr "Sökväg till den PEM-kodade DH-parameter-filen (2048 bitar)." -#: admin/PageAdvanced.py:92 +#: admin/PageAdvanced.py:122 #, fuzzy msgid "Path to a Diffie Hellman (DH) parameters PEM file: 4096 bits." msgstr "Sökväg till den PEM-kodade DH-parameter-filen (4096 bitar)." -#: admin/PageAdvanced.py:93 +#: admin/PageAdvanced.py:123 +msgid "Your Cherokee Web Server does not support SSL/TLS encryption." +msgstr "" + +#: admin/PageAdvanced.py:124 msgid "Timeout for the TLS/SSL handshake. Default: 15 seconds." msgstr "" -#: admin/PageAdvanced.py:94 +#: admin/PageAdvanced.py:125 +msgid "Beware: it is vulnerable. You should disable SSLv2." +msgstr "" + +#: admin/PageAdvanced.py:126 +msgid "Beware: it is vulnerable. You should disable SSLv3." +msgstr "" + +#: admin/PageAdvanced.py:127 +msgid "TLSv1 is deprecated" +msgstr "" + +#: admin/PageAdvanced.py:128 +msgid "TLSv1.1 is deprecated" +msgstr "" + +#: admin/PageAdvanced.py:129 admin/PageAdvanced.py:130 +msgid " " +msgstr "" + +#: admin/PageAdvanced.py:131 msgid "" -"Allow clients to use SSL version 2 - Beware: it is vulnerable. (Default: No)" +"The following options work in combination with above min/max TLS protocol " +"version settings. They are deprecated, only set the minimum and maximum " +"supported protocol versions instead." msgstr "" -#: admin/PageAdvanced.py:119 admin/PageAdvanced.py:121 +#: admin/PageAdvanced.py:133 +msgid "" +"Minimum required TLS protocol version from clients (Default: auto-configured " +"by libssl)" +msgstr "" + +#: admin/PageAdvanced.py:134 +msgid "" +"Maximum supported TLS protocol version (Default: auto-configured by libssl)" +msgstr "" + +#: admin/PageAdvanced.py:167 admin/PageAdvanced.py:169 msgid "Allowed" msgstr "Tillåten" -#: admin/PageAdvanced.py:119 +#: admin/PageAdvanced.py:167 msgid "Keep Alive" msgstr "Keep Alive" -#: admin/PageAdvanced.py:120 +#: admin/PageAdvanced.py:168 msgid "Max keepalive reqs" msgstr "Maximalt antal keepalive-anslutningar." -#: admin/PageAdvanced.py:121 +#: admin/PageAdvanced.py:169 msgid "Chunked Encoding" msgstr "Chunked Encoding" -#: admin/PageAdvanced.py:122 +#: admin/PageAdvanced.py:170 msgid "Polling Method" msgstr "Pollningsmetod" -#: admin/PageAdvanced.py:123 +#: admin/PageAdvanced.py:171 msgid "Sendfile min size" msgstr "Minimal storlek för Sendfile" -#: admin/PageAdvanced.py:124 +#: admin/PageAdvanced.py:172 msgid "Sendfile max size" msgstr "Maximal storlek för Sendfile." -#: admin/PageAdvanced.py:126 admin/PageAdvanced.py:189 +#: admin/PageAdvanced.py:174 admin/PageAdvanced.py:313 msgid "Connections" msgstr "Anslutningar" -#: admin/PageAdvanced.py:134 +#: admin/PageAdvanced.py:182 msgid "Thread Number" msgstr "Trådantal" -#: admin/PageAdvanced.py:135 +#: admin/PageAdvanced.py:183 msgid "Thread Policy" msgstr "Trådningspolicy" -#: admin/PageAdvanced.py:136 +#: admin/PageAdvanced.py:184 msgid "File descriptors" msgstr "" -#: admin/PageAdvanced.py:137 +#: admin/PageAdvanced.py:185 msgid "Listening queue length" msgstr "Längd på kö för väntande anslutningar" -#: admin/PageAdvanced.py:138 admin/plugins/proxy.py:239 +#: admin/PageAdvanced.py:186 admin/plugins/proxy.py:239 msgid "Reuse connections" msgstr "återanvänd anslutningar" -#: admin/PageAdvanced.py:139 +#: admin/PageAdvanced.py:187 msgid "Log flush time" msgstr "Logga rensningstid" -#: admin/PageAdvanced.py:140 +#: admin/PageAdvanced.py:188 msgid "Nonces clean up time" msgstr "" -#: admin/PageAdvanced.py:142 admin/PageAdvanced.py:190 +#: admin/PageAdvanced.py:190 admin/PageAdvanced.py:314 msgid "Resources" msgstr "Resurser" -#: admin/PageAdvanced.py:151 +#: admin/PageAdvanced.py:199 msgid "Max pages" msgstr "Antal pages" -#: admin/PageAdvanced.py:152 +#: admin/PageAdvanced.py:200 msgid "File Min Size" msgstr "Minimal filstorlek" -#: admin/PageAdvanced.py:153 +#: admin/PageAdvanced.py:201 msgid "File Max Size" msgstr "Maximal filstorlek" -#: admin/PageAdvanced.py:154 +#: admin/PageAdvanced.py:202 msgid "Lasting: stat" msgstr "" -#: admin/PageAdvanced.py:155 +#: admin/PageAdvanced.py:203 msgid "Lasting: mmap" msgstr "" -#: admin/PageAdvanced.py:157 admin/PageAdvanced.py:191 +#: admin/PageAdvanced.py:205 admin/PageAdvanced.py:315 msgid "I/O cache" msgstr "I/O-cache" -#: admin/PageAdvanced.py:165 +#: admin/PageAdvanced.py:213 msgid "Panic action" msgstr "Panikåtgärd" -#: admin/PageAdvanced.py:166 +#: admin/PageAdvanced.py:214 msgid "PID file" msgstr "PID-fil" -#: admin/PageAdvanced.py:176 admin/PageEntry.py:84 admin/PageVServer.py:476 -#: admin/plugins/common.py:42 admin/plugins/common.py:43 -#: admin/plugins/dirlist.py:55 admin/plugins/proxy.py:240 -msgid "Allow" -msgstr "Tillåt" +#: admin/PageAdvanced.py:245 admin/PageAdvanced.py:247 +#: admin/PageAdvanced.py:258 admin/PageAdvanced.py:260 +#, fuzzy +msgid "Disable " +msgstr "Deaktivera" + +#: admin/PageAdvanced.py:247 +msgid "Protocol deacrivated" +msgstr "" + +#: admin/PageAdvanced.py:247 +msgid "Protocol not supported" +msgstr "" + +#: admin/PageAdvanced.py:260 +msgid "Protocol deactivated" +msgstr "" -#: admin/PageAdvanced.py:176 -msgid "Allow SSL v2" +#: admin/PageAdvanced.py:262 +msgid "Turn off selected TLS Protocols (Deprecated)" msgstr "" -#: admin/PageAdvanced.py:177 +#: admin/PageAdvanced.py:270 admin/PageAdvanced.py:271 +msgid "auto-configured" +msgstr "" + +#: admin/PageAdvanced.py:285 +msgid "Min. TLS protocol version" +msgstr "" + +#: admin/PageAdvanced.py:290 +msgid "Max. TLS protocol version" +msgstr "" + +#: admin/PageAdvanced.py:291 msgid "Handshake Timeout" msgstr "" -#: admin/PageAdvanced.py:178 +#: admin/PageAdvanced.py:292 #, fuzzy msgid "DH parameters: 512 bits" msgstr "Diffie Hellman-parametrar (512 bitar)" -#: admin/PageAdvanced.py:179 +#: admin/PageAdvanced.py:293 #, fuzzy msgid "DH parameters: 1024 bits" msgstr "Diffie Hellman-parametrar (1024 bitar)" -#: admin/PageAdvanced.py:180 +#: admin/PageAdvanced.py:294 #, fuzzy msgid "DH parameters: 2048 bits" msgstr "Diffie Hellman-parametrar (2048 bitar)" -#: admin/PageAdvanced.py:181 +#: admin/PageAdvanced.py:295 #, fuzzy msgid "DH parameters: 4096 bits" msgstr "Diffie Hellman-parametrar (4096 bitar)" -#: admin/PageAdvanced.py:183 admin/PageAdvanced.py:193 -#: admin/PageGeneral.py:239 admin/plugins/bind.py:92 +#: admin/PageAdvanced.py:296 admin/PageAdvanced.py:317 admin/PageGeneral.py:239 +#: admin/plugins/bind.py:92 msgid "TLS" msgstr "TLS" -#: admin/PageAdvanced.py:199 +#: admin/PageAdvanced.py:323 msgid "Advanced Configuration" msgstr "Avancerad konfiguration." @@ -1037,7 +1111,7 @@ msgstr "" msgid "Deflate encoder" msgstr "Deflate" -#: admin/PageEntry.py:78 admin/PageEntry.py:173 admin/PageVServer.py:149 +#: admin/PageEntry.py:78 admin/PageEntry.py:173 admin/PageVServer.py:153 msgid "Authentication" msgstr "Autentisering" @@ -1047,7 +1121,13 @@ msgstr "Autentiseringsmoduler" #: admin/PageEntry.py:83 admin/PageEntry.py:89 msgid "Leave unset" -msgstr "Lämna oinställt" +msgstr "" + +#: admin/PageEntry.py:84 admin/PageVServer.py:480 admin/plugins/common.py:42 +#: admin/plugins/common.py:43 admin/plugins/dirlist.py:58 +#: admin/plugins/file.py:44 admin/plugins/proxy.py:240 +msgid "Allow" +msgstr "" #: admin/PageEntry.py:85 msgid "Forbid" @@ -1076,7 +1156,7 @@ msgstr "" msgid "Remove" msgstr "Ta bort" -#: admin/PageEntry.py:126 admin/PageVServer.py:155 +#: admin/PageEntry.py:126 admin/PageVServer.py:159 #: admin/plugins/secdownload.py:44 msgid "Timeout" msgstr "Timeout" @@ -1089,7 +1169,7 @@ msgstr "Timeout för anslutningar" msgid "Limit traffic to" msgstr "Begränsa trafik till" -#: admin/PageEntry.py:139 admin/PageVServer.py:156 +#: admin/PageEntry.py:139 admin/PageVServer.py:160 msgid "Traffic Shaping" msgstr "Trafikmodellering" @@ -1097,7 +1177,7 @@ msgstr "Trafikmodellering" msgid "Skip Logging" msgstr "Hoppa över loggning" -#: admin/PageEntry.py:154 admin/PageVServer.py:720 +#: admin/PageEntry.py:154 admin/PageVServer.py:729 msgid "Logging" msgstr "Loggning" @@ -1122,14 +1202,14 @@ msgstr "Mekanism för validering" msgid "Can not be empty" msgstr "Kan inte vara tom" -#: admin/PageEntry.py:216 admin/PageEntry.py:268 admin/consts.py:190 -#: admin/plugins/header.py:110 admin/plugins/header.py:151 -#: admin/plugins/header.py:156 admin/plugins/proxy.py:193 +#: admin/PageEntry.py:216 admin/PageEntry.py:268 admin/consts.py:189 +#: admin/plugins/header.py:112 admin/plugins/header.py:153 +#: admin/plugins/header.py:158 admin/plugins/proxy.py:193 msgid "Header" msgstr "Header" #: admin/PageEntry.py:216 admin/PageSource.py:284 -#: admin/plugins/error_redir.py:105 admin/plugins/header.py:113 +#: admin/plugins/error_redir.py:105 admin/plugins/header.py:115 #: admin/plugins/redir.py:76 msgid "Type" msgstr "Typ" @@ -1148,7 +1228,7 @@ msgstr "Aktiv" msgid "Add New Header" msgstr "Lägg till ny header" -#: admin/PageEntry.py:326 admin/consts.py:204 admin/plugins/redir.py:39 +#: admin/PageEntry.py:326 admin/consts.py:203 admin/plugins/redir.py:39 #: admin/plugins/rehost.py:53 msgid "Regular Expressions" msgstr "Reguljära uttryck" @@ -1166,8 +1246,7 @@ msgstr "" msgid "Caching Policy" msgstr "" -#: admin/PageEntry.py:381 admin/plugins/rehost.py:68 -#: admin/plugins/rehost.py:92 +#: admin/PageEntry.py:381 admin/plugins/rehost.py:68 admin/plugins/rehost.py:92 msgid "New Regular Expression" msgstr "Nytt reguljärt uttryck" @@ -1175,7 +1254,7 @@ msgstr "Nytt reguljärt uttryck" msgid "Disregarded Cookies" msgstr "" -#: admin/PageEntry.py:402 admin/PageVServer.py:154 +#: admin/PageEntry.py:402 admin/PageVServer.py:158 msgid "Expiration" msgstr "Förfallande" @@ -1208,7 +1287,7 @@ msgstr "" msgid "Content Expiration" msgstr "Innehållsförfall" -#: admin/PageEntry.py:433 admin/PageVServer.py:153 +#: admin/PageEntry.py:433 admin/PageVServer.py:157 msgid "Cache" msgstr "" @@ -1230,7 +1309,7 @@ msgid "Matching Rule" msgstr "Matchande regel" #: admin/PageEntry.py:514 admin/PageEntry.py:528 admin/PageEntry.py:553 -#: admin/PageVServer.py:148 +#: admin/PageVServer.py:152 msgid "Handler" msgstr "Hanterare" @@ -1248,7 +1327,7 @@ msgstr "Plattformar" msgid "Caching" msgstr "Matchande regel" -#: admin/PageEntry.py:556 admin/PageVServer.py:721 +#: admin/PageEntry.py:556 admin/PageVServer.py:730 msgid "Security" msgstr "Säkerhet" @@ -1520,7 +1599,7 @@ msgstr "" msgid "SSL/TLS back-end" msgstr "Back-end för SSL/TLS" -#: admin/PageGeneral.py:197 admin/PageIndex.py:252 +#: admin/PageGeneral.py:197 admin/PageIndex.py:198 msgid "Support" msgstr "Support" @@ -1553,8 +1632,8 @@ msgid "Bind to" msgstr "Använd ip:" #: admin/PageGeneral.py:239 admin/PageGeneral.py:310 admin/plugins/bind.py:92 -#: admin/plugins/bind.py:155 admin/plugins/bind.py:157 -#: admin/plugins/ldap.py:48 admin/plugins/mysql.py:77 +#: admin/plugins/bind.py:155 admin/plugins/bind.py:157 admin/plugins/ldap.py:48 +#: admin/plugins/mysql.py:77 msgid "Port" msgstr "Port" @@ -1623,7 +1702,7 @@ msgstr "Grupp" msgid "Chroot" msgstr "Chroot" -#: admin/PageGeneral.py:357 admin/PageVServer.py:479 +#: admin/PageGeneral.py:357 admin/PageVServer.py:483 msgid "Network" msgstr "Nätverk" @@ -1651,177 +1730,136 @@ msgstr "" msgid "Documentation" msgstr "Dokumentation" -#: admin/PageIndex.py:67 -msgid "You will be sent an email requesting confirmation" -msgstr "" -"Du kommer att få ett email skickat till dig med en begäran om bekräftelse." - -#: admin/PageIndex.py:68 -msgid "Optionally provide your name" -msgstr "" - -#: admin/PageIndex.py:70 -#, python-format -msgid "" -"There are a number of Community Mailing Lists\n" -"available for you to subscribe. You can subscribe the General Discussion\n" -"mailing list from this interface. There is where most of the discussions\n" -"take place." -msgstr "" - -#: admin/PageIndex.py:77 +#: admin/PageIndex.py:58 #, fuzzy msgid "Server is Running" msgstr "Servern körs" -#: admin/PageIndex.py:78 +#: admin/PageIndex.py:59 #, fuzzy msgid "Server is not Running" msgstr "Servern körs inte." -#: admin/PageIndex.py:132 +#: admin/PageIndex.py:110 msgid "Stop Server" msgstr "Stoppa server" -#: admin/PageIndex.py:136 +#: admin/PageIndex.py:114 msgid "Start Server" msgstr "Starta server" -#: admin/PageIndex.py:141 +#: admin/PageIndex.py:119 #, fuzzy msgid "Hostname" msgstr "Värdnamn" -#: admin/PageIndex.py:143 +#: admin/PageIndex.py:121 msgid "Modified" msgstr "Modifierad" -#: admin/PageIndex.py:145 +#: admin/PageIndex.py:123 msgid "Not found" msgstr "Hittades inte" -#: admin/PageIndex.py:146 +#: admin/PageIndex.py:124 msgid "Config File" msgstr "Konfigurationsfil" -#: admin/PageIndex.py:153 admin/plugins/server_info.py:32 +#: admin/PageIndex.py:131 admin/plugins/server_info.py:32 #: admin/plugins/server_info.py:35 msgid "Server Information" msgstr "Serverinformation" -#: admin/PageIndex.py:165 +#: admin/PageIndex.py:143 msgid "Processors" msgstr "" -#: admin/PageIndex.py:177 +#: admin/PageIndex.py:155 msgid "Memory" msgstr "" -#: admin/PageIndex.py:211 admin/plugins/dbslayer.py:51 +#: admin/PageIndex.py:189 admin/plugins/dbslayer.py:51 msgid "Language" msgstr "Språk" -#: admin/PageIndex.py:231 -#, fuzzy -msgid "Mailing List Subscription" -msgstr "Prenumeration av epostlista" - -#: admin/PageIndex.py:233 -msgid "Subscribe" -msgstr "Prenumerera" - -#: admin/PageIndex.py:236 -msgid "Your email address" -msgstr "Din email-adress." - -#: admin/PageIndex.py:237 -msgid "Your name" -msgstr "Ditt namn" - -#: admin/PageIndex.py:256 +#: admin/PageIndex.py:202 msgid "Getting started" msgstr "" -#: admin/PageIndex.py:260 -msgid "Subscribe to mailing lists" +#: admin/PageIndex.py:206 +msgid "Visit the mailing list" msgstr "" -#: admin/PageIndex.py:268 +#: admin/PageIndex.py:210 #, fuzzy msgid "Report a bug" msgstr "Rapportera dett" -#: admin/PageIndex.py:272 -#, fuzzy -msgid "Purchase commercial support" -msgstr "Kommersiell support" - -#: admin/PageIndex.py:276 admin/PageIndex.py:280 +#: admin/PageIndex.py:214 admin/PageIndex.py:218 #, fuzzy msgid "About Cherokee" msgstr "Stolta Cherokee-användare" -#: admin/PageIndex.py:289 +#: admin/PageIndex.py:227 msgid "Join the Cherokee Community:" msgstr "" -#: admin/PageIndex.py:292 +#: admin/PageIndex.py:230 msgid "Visit the Cherokee Project Website" msgstr "" -#: admin/PageIndex.py:293 +#: admin/PageIndex.py:231 msgid "Follow us on Twitter" msgstr "" -#: admin/PageIndex.py:294 +#: admin/PageIndex.py:232 msgid "Join us on Facebook" msgstr "" -#: admin/PageIndex.py:295 +#: admin/PageIndex.py:233 msgid "Join us on Google+" msgstr "" -#: admin/PageIndex.py:296 +#: admin/PageIndex.py:234 msgid "Fork us on Github" msgstr "" -#: admin/PageIndex.py:297 +#: admin/PageIndex.py:235 msgid "Become a member of Cherokee group on LinkedIn" msgstr "" -#: admin/PageIndex.py:298 +#: admin/PageIndex.py:236 msgid "Chat with us at irc.freenode.net" msgstr "" -#: admin/PageIndex.py:307 +#: admin/PageIndex.py:245 #, fuzzy msgid "Shutdown Cherokee-admin" msgstr "Välkommen till Cherokee Admin" -#: admin/PageIndex.py:309 +#: admin/PageIndex.py:247 msgid "Shut down" msgstr "" -#: admin/PageIndex.py:310 +#: admin/PageIndex.py:248 msgid "You are about to shut down this instance of Cherokee-admin" msgstr "" -#: admin/PageIndex.py:311 +#: admin/PageIndex.py:249 #, fuzzy msgid "Are you sure you want to proceed?" msgstr "Vill du verkligen ta bort den?" -#: admin/PageIndex.py:314 +#: admin/PageIndex.py:252 msgid "Cherokee-admin has been shut down" msgstr "" -#: admin/PageIndex.py:316 +#: admin/PageIndex.py:254 #, fuzzy msgid "Shut down Cherokee-Admin" msgstr "Välkommen till Cherokee Admin" -#: admin/PageIndex.py:329 admin/PageIndex.py:350 +#: admin/PageIndex.py:267 admin/PageIndex.py:288 msgid "Welcome to Cherokee Admin" msgstr "Välkommen till Cherokee Admin" @@ -1911,7 +1949,7 @@ msgstr "Manuell" msgid "Manual configuration" msgstr "Manuell konfiguration" -#: admin/PageRule.py:249 admin/PageVServer.py:158 +#: admin/PageRule.py:249 admin/PageVServer.py:162 msgid "Final" msgstr "Slutgiltig" @@ -1939,7 +1977,7 @@ msgstr "Klona" msgid "Clone Selected Behavior Rule" msgstr "Klona vald betéenderegel" -#: admin/PageRule.py:314 admin/PageVServer.py:718 +#: admin/PageRule.py:314 admin/PageVServer.py:727 msgid "Behavior" msgstr "Betéende" @@ -2086,7 +2124,7 @@ msgstr "Lägg till ny miljövariabel" msgid "Source Usage" msgstr "Användandet av källa" -#: admin/PageSource.py:253 admin/PageVServer.py:723 +#: admin/PageSource.py:253 admin/PageVServer.py:732 msgid "Virtual Server" msgstr "Virtuell server" @@ -2141,7 +2179,7 @@ msgstr "Klona vald informationskälla" msgid "Sources Filtering" msgstr "Källfiltrering" -#: admin/PageSources.py:35 admin/PageVServer.py:141 admin/PageVServers.py:48 +#: admin/PageSources.py:35 admin/PageVServer.py:145 admin/PageVServers.py:48 #: admin/PageVServers.py:294 msgid "Virtual Servers" msgstr "Virtuella servrar" @@ -2163,10 +2201,14 @@ msgid "Virtual Server Filtering" msgstr "Virtuell server-filtrering" #: admin/PageVServer.py:44 +msgid "Reference" +msgstr "" + +#: admin/PageVServer.py:47 msgid "Nickname for the virtual server." msgstr "Namn för den virtuella servern." -#: admin/PageVServer.py:45 +#: admin/PageVServer.py:48 msgid "" "This directive points to the PEM-encoded Certificate file for the server " "(Full path to the file)" @@ -2174,11 +2216,11 @@ msgstr "" "Detta direktiv pekar till den PEM-kodade certifikatfilen för servern (Hela " "sökvägen till filen)." -#: admin/PageVServer.py:46 +#: admin/PageVServer.py:49 msgid "PEM-encoded Private Key file for the server (Full path to the file)" msgstr "PEM-kodad privat nyckelfil för servern (Hela sökvägen till filen)" -#: admin/PageVServer.py:47 +#: admin/PageVServer.py:50 #, fuzzy msgid "" "File containing the trusted CA certificates, utilized for checking the " @@ -2187,41 +2229,38 @@ msgstr "" "Valbart: Fil som innehåller det betrodda CA-certifikatet. Används för att " "kolla klientcertifikat. (Hela sökvägen till filen)" -#: admin/PageVServer.py:48 -#, fuzzy -msgid "" -"Ciphers that TLS/SSL is allowed to use. Reference. (Default enables " -"Forward Secrecy)." +#: admin/PageVServer.py:51 +msgid "Ciphers that TLSv1.2 and below is allowed to use." +msgstr "Chiffer som TLS/SSL tillåts att använda." + +#: admin/PageVServer.py:52 +msgid "Ciphersuites that TLSv1.3 is allowed to use." msgstr "" -"Chiffer som TLS/SSL tillåts att använda. Referens.. ( Förvalt värde: " -"alla chiffer som stöds av OpenSSL används)." -#: admin/PageVServer.py:49 +#: admin/PageVServer.py:53 msgid "" "The cipher sequence that is specified by the server should have preference " "over the client preference. (Default: True)." msgstr "" -#: admin/PageVServer.py:50 +#: admin/PageVServer.py:54 msgid "" "Explicitly enable or disable serverside compression support. (Default: " "Disabled)." msgstr "" -#: admin/PageVServer.py:51 +#: admin/PageVServer.py:55 msgid "" "Explicitely sets the Diffie-Hellman parameters length. (Default: Let openssl " "choose)." msgstr "" -#: admin/PageVServer.py:52 +#: admin/PageVServer.py:56 #, fuzzy msgid "Skip, Tolerate, Accept or Require client certificates." msgstr "Valbart: Använd inte, acceptera eller kräv klientcertifikat." -#: admin/PageVServer.py:53 +#: admin/PageVServer.py:57 msgid "" "Limit up to which depth certificates in a chain are used during the " "verification procedure (Default: 1)" @@ -2229,11 +2268,11 @@ msgstr "" "Begränsa till vilket djup certifikatet i en kedja används under " "verifikations-proceduren ( Förvalt värde: 1)" -#: admin/PageVServer.py:54 +#: admin/PageVServer.py:58 msgid "Allows the selection of how to generate the error responses." msgstr "Låter dig att välja hur felmeddelanden ska återges." -#: admin/PageVServer.py:55 +#: admin/PageVServer.py:59 msgid "" "Directory inside the user home directory to use as root web directory. " "Disabled if empty." @@ -2241,20 +2280,20 @@ msgstr "" "Katalog att använda som rotkatalog inuti användarens hemkatalog. Används ej " "om fältet är tomt." -#: admin/PageVServer.py:56 +#: admin/PageVServer.py:60 msgid "The personal web support is currently turned on." msgstr "Funktionen för personliga hemsidor är förnärvarande på." -#: admin/PageVServer.py:57 +#: admin/PageVServer.py:61 msgid "Adds a new domain name. Wildcards are allowed in the domain name." msgstr "" "Lägger till ett nytt domännamn. Joker-tecken är tillåtna i domännamnet." -#: admin/PageVServer.py:58 +#: admin/PageVServer.py:62 msgid "Virtual Server root directory." msgstr "Rot-katalog för den virtuella servern." -#: admin/PageVServer.py:59 +#: admin/PageVServer.py:63 msgid "" "List of name files that will be used as directory index. Eg: index.html," "index.php." @@ -2262,47 +2301,47 @@ msgstr "" "Lista av filer som används som katalog-index. Eg: index.html,index.php." -#: admin/PageVServer.py:60 +#: admin/PageVServer.py:64 msgid "The maximum size, in bytes, for POST uploads. (Default: unlimited)" msgstr "" "Den maximala storleken i bytes för POST-uppladdningar. ( Förvalt värde: " "obegränsad)" -#: admin/PageVServer.py:61 +#: admin/PageVServer.py:65 msgid "Whether this virtual server is allowed to use Keep-alive (Default: yes)" msgstr "" "Huruvida den här virtuella servern tillåts att använda Keep-alive ( Förvalt " "värde: Ja)" -#: admin/PageVServer.py:62 +#: admin/PageVServer.py:66 msgid "The Logging is currently enabled." msgstr "Loggning är för närvarande aktiverat." -#: admin/PageVServer.py:63 +#: admin/PageVServer.py:67 msgid "Logging format. Apache compatible is highly recommended here." msgstr "Format för loggning. Apache-kompatibla loggar rekommenderas här." -#: admin/PageVServer.py:64 +#: admin/PageVServer.py:68 msgid "Back-end used to store the log accesses." msgstr "Back-end att använda för att logga åtkomster." -#: admin/PageVServer.py:65 +#: admin/PageVServer.py:69 msgid "Back-end used to store the log errors." msgstr "Back-end att använda för att logga fel." -#: admin/PageVServer.py:66 +#: admin/PageVServer.py:70 msgid "Back-end used to store the log accesses and errors." msgstr "Back-end att använda för att logga åtkomster och fel." -#: admin/PageVServer.py:67 +#: admin/PageVServer.py:71 msgid "Full path to the file where the information will be saved." msgstr "Hela sökvägen till filen där informationen sparas." -#: admin/PageVServer.py:68 +#: admin/PageVServer.py:72 msgid "Path to the executable that will be invoked on each log entry." msgstr "Sökväg till binären som körs vid varje loggningstillfälle." -#: admin/PageVServer.py:69 +#: admin/PageVServer.py:73 msgid "" "Whether the logger should read and use the X-Real-IP and X-Forwarded-For " "headers (send by reverse proxies)." @@ -2310,7 +2349,7 @@ msgstr "" "Huruvida loggaren ska läsa och använda X-Real-IP och X-Forwarded-For-headers " "(skickas av omvända proxies)" -#: admin/PageVServer.py:71 +#: admin/PageVServer.py:75 msgid "" "List of IP addresses and subnets that are allowed to send X-Real-IP and X-" "Forwarded-For headers." @@ -2318,36 +2357,36 @@ msgstr "" "Lista av IP-adresser och subnets som tillåts att skicka X-Real-IP och X-" "Forwarded-For-headers." -#: admin/PageVServer.py:72 +#: admin/PageVServer.py:76 msgid "" "How to support the \"Advanced Virtual Hosting\" mechanism. (Default: off)" msgstr "Hur \"Avancerad Virtual Hosting\" ska skötas. (Default: off)" -#: admin/PageVServer.py:73 +#: admin/PageVServer.py:77 msgid "The following variables are accepted: " msgstr "" -#: admin/PageVServer.py:74 +#: admin/PageVServer.py:78 msgid "Allows the selection of domain matching method." msgstr "Möjliggör valet av metod för matching av domäner." -#: admin/PageVServer.py:75 +#: admin/PageVServer.py:79 msgid "" "Whether or not it should collected statistics about the traffic of this " "virtual server." msgstr "Huruvida den ska samla in trafikstatistik för denna servern." -#: admin/PageVServer.py:76 +#: admin/PageVServer.py:80 msgid "Time standard to use in the log file entries." msgstr "Tidsstandard att använda i lognoteringarna." -#: admin/PageVServer.py:77 +#: admin/PageVServer.py:81 msgid "" "Remember that only \"File Exists\" rules and \"List & Send\" handlers use " "the Directory Indexes setting." msgstr "" -#: admin/PageVServer.py:78 +#: admin/PageVServer.py:82 #, fuzzy msgid "" "Use this nickname as an additional host name for this virtual server " @@ -2356,16 +2395,16 @@ msgstr "" "Anger om trafik-statistik ska samlas in för den virtuella servern.( Förvalt " "värde: Ja)" -#: admin/PageVServer.py:79 +#: admin/PageVServer.py:83 msgid "Enforce HTTPS by using the HTTP Strict Transport Security." msgstr "" -#: admin/PageVServer.py:80 +#: admin/PageVServer.py:84 msgid "" "How long the client's browser should remember the forced HTTPS (in seconds)." msgstr "" -#: admin/PageVServer.py:81 +#: admin/PageVServer.py:85 #, fuzzy msgid "" "Should HSTS be used in all the subdomains of this virtual server (Default: " @@ -2374,7 +2413,7 @@ msgstr "" "Anger om trafik-statistik ska samlas in för den virtuella servern.( Förvalt " "värde: Ja)" -#: admin/PageVServer.py:83 +#: admin/PageVServer.py:87 #, fuzzy msgid "

The 'default' virtual server matches all the domain names.

" msgstr "" @@ -2382,450 +2421,454 @@ msgstr "" "

Den virtuella servern som konfigureras vid installation matchar alla " "domännamn.

\n" -#: admin/PageVServer.py:86 +#: admin/PageVServer.py:90 #, fuzzy msgid "Remote IP address" msgstr "LDAP-serverns IP-adress." -#: admin/PageVServer.py:87 +#: admin/PageVServer.py:91 #, fuzzy msgid "Local IP address" msgstr "Din email-adress." -#: admin/PageVServer.py:88 +#: admin/PageVServer.py:92 #, fuzzy msgid "Request Protocol" msgstr "Begäran" -#: admin/PageVServer.py:89 +#: admin/PageVServer.py:93 msgid "Transport type: http or https" msgstr "" -#: admin/PageVServer.py:90 +#: admin/PageVServer.py:94 msgid "Port of the server serving the request" msgstr "" -#: admin/PageVServer.py:91 +#: admin/PageVServer.py:95 msgid "The query string, if exists" msgstr "" -#: admin/PageVServer.py:92 +#: admin/PageVServer.py:96 msgid "First line of HTTP request" msgstr "" -#: admin/PageVServer.py:93 +#: admin/PageVServer.py:97 msgid "Response status code" msgstr "" -#: admin/PageVServer.py:94 +#: admin/PageVServer.py:98 msgid "Time: in common log format time format" msgstr "" -#: admin/PageVServer.py:95 +#: admin/PageVServer.py:99 msgid "Time: seconds since Epoch" msgstr "" -#: admin/PageVServer.py:96 +#: admin/PageVServer.py:100 msgid "Time: milliseconds since Epoch" msgstr "" -#: admin/PageVServer.py:97 +#: admin/PageVServer.py:101 #, fuzzy msgid "Remote user (authentication)" msgstr "Huvuddomän för webserverns autentiseringar." -#: admin/PageVServer.py:98 +#: admin/PageVServer.py:102 msgid "URL path requested" msgstr "" -#: admin/PageVServer.py:99 +#: admin/PageVServer.py:103 msgid "URL path requested before any rewrite" msgstr "" -#: admin/PageVServer.py:100 +#: admin/PageVServer.py:104 #, fuzzy msgid "Virtual Server nick name" msgstr "Smeknamn för virtuell server" -#: admin/PageVServer.py:101 +#: admin/PageVServer.py:105 msgid "Requested host (Host: header)" msgstr "" -#: admin/PageVServer.py:102 +#: admin/PageVServer.py:106 msgid "Size of the response in bytes" msgstr "" -#: admin/PageVServer.py:103 +#: admin/PageVServer.py:107 msgid "'Host:' header of the request" msgstr "" -#: admin/PageVServer.py:104 +#: admin/PageVServer.py:108 msgid "'Referrer:' header of the request" msgstr "" -#: admin/PageVServer.py:105 +#: admin/PageVServer.py:109 msgid "'User-Agent:' header of the request" msgstr "" -#: admin/PageVServer.py:106 +#: admin/PageVServer.py:110 msgid "'Cookie:' header of the request" msgstr "" -#: admin/PageVServer.py:142 +#: admin/PageVServer.py:146 msgid "Loggers" msgstr "Loggare" -#: admin/PageVServer.py:143 +#: admin/PageVServer.py:147 msgid "SSL cookbook" msgstr "SSL-kokbok" -#: admin/PageVServer.py:147 admin/PageVServer.py:184 +#: admin/PageVServer.py:151 admin/PageVServer.py:188 msgid "Match" msgstr "Matcha" -#: admin/PageVServer.py:147 +#: admin/PageVServer.py:151 #, fuzzy msgid "Rule Match" msgstr "Filmatchningar" -#: admin/PageVServer.py:148 +#: admin/PageVServer.py:152 #, fuzzy msgid "Assigned Handler" msgstr "Hanterare" -#: admin/PageVServer.py:149 +#: admin/PageVServer.py:153 msgid "Auth" msgstr "" -#: admin/PageVServer.py:150 +#: admin/PageVServer.py:154 #, fuzzy msgid "Custom Document Root" msgstr "Dokumentrot" -#: admin/PageVServer.py:150 +#: admin/PageVServer.py:154 msgid "Root" msgstr "Rot" -#: admin/PageVServer.py:151 +#: admin/PageVServer.py:155 msgid "Only HTTPS" msgstr "Endast HTTPS" -#: admin/PageVServer.py:151 +#: admin/PageVServer.py:155 #, fuzzy msgid "Secure" msgstr "Hemlighet" -#: admin/PageVServer.py:152 +#: admin/PageVServer.py:156 msgid "Enc" msgstr "" -#: admin/PageVServer.py:152 +#: admin/PageVServer.py:156 #, fuzzy msgid "Encoders" msgstr "Kodning" -#: admin/PageVServer.py:153 +#: admin/PageVServer.py:157 #, fuzzy msgid "Cacheable" msgstr "Apache-kompatibel" -#: admin/PageVServer.py:154 +#: admin/PageVServer.py:158 msgid "Exp" msgstr "" -#: admin/PageVServer.py:155 +#: admin/PageVServer.py:159 #, fuzzy msgid "Connection Timeout" msgstr "Anslutningar" -#: admin/PageVServer.py:156 +#: admin/PageVServer.py:160 #, fuzzy msgid "Shaping" msgstr "Trafikmodellering" -#: admin/PageVServer.py:157 +#: admin/PageVServer.py:161 #, fuzzy msgid "Log" msgstr "Loggning" -#: admin/PageVServer.py:157 +#: admin/PageVServer.py:161 #, fuzzy msgid "Logging Enabled" msgstr "Aktiverad" -#: admin/PageVServer.py:158 +#: admin/PageVServer.py:162 #, fuzzy msgid "Rule is Final" msgstr "Regellista" -#: admin/PageVServer.py:184 +#: admin/PageVServer.py:188 #, fuzzy msgid "Match nickname" msgstr "Smeknamn" -#: admin/PageVServer.py:188 admin/PageVServer.py:717 +#: admin/PageVServer.py:192 admin/PageVServer.py:726 #, fuzzy msgid "Host Match" msgstr "Närmast träff" -#: admin/PageVServer.py:218 admin/PageVServer.py:234 admin/PageVServer.py:258 -#: admin/PageVServer.py:485 admin/PageVServer.py:519 -#: admin/plugins/method.py:99 admin/plugins/method.py:109 +#: admin/PageVServer.py:222 admin/PageVServer.py:238 admin/PageVServer.py:262 +#: admin/PageVServer.py:489 admin/PageVServer.py:523 admin/plugins/method.py:99 +#: admin/plugins/method.py:109 msgid "Method" msgstr "Metod" -#: admin/PageVServer.py:226 admin/PageVServer.py:242 +#: admin/PageVServer.py:230 admin/PageVServer.py:246 #, fuzzy msgid "Remove criteria" msgstr "Fjärrvärd" -#: admin/PageVServer.py:260 +#: admin/PageVServer.py:264 #, fuzzy msgid "How to match this Virtual Server" msgstr "Virtuell server" -#: admin/PageVServer.py:267 +#: admin/PageVServer.py:271 msgid "Add an additional matching criteria" msgstr "" -#: admin/PageVServer.py:358 +#: admin/PageVServer.py:362 #, fuzzy msgid "Behavior Rules" msgstr "Betéende-regler" -#: admin/PageVServer.py:367 +#: admin/PageVServer.py:371 msgid "Rule Management" msgstr "Regelhantering" -#: admin/PageVServer.py:393 +#: admin/PageVServer.py:397 #, fuzzy msgid "Only accept Secure Connections" msgstr "Godkända domäner" -#: admin/PageVServer.py:398 +#: admin/PageVServer.py:402 #, fuzzy msgid "Encoding enabled" msgstr "Kodning" -#: admin/PageVServer.py:404 +#: admin/PageVServer.py:408 msgid "no" msgstr "nej" -#: admin/PageVServer.py:415 +#: admin/PageVServer.py:419 #, fuzzy msgid " seconds" msgstr "Ikoner" -#: admin/PageVServer.py:420 +#: admin/PageVServer.py:424 msgid " bytes per second" msgstr "Bytes per sekund" -#: admin/PageVServer.py:425 +#: admin/PageVServer.py:429 msgid "Logging enabled for this rule" msgstr "Loggning möjliggjord för denna regel." -#: admin/PageVServer.py:430 +#: admin/PageVServer.py:434 msgid "Prevents further rule evaluation" msgstr "Förhindrar vidare utvärdering av regler." -#: admin/PageVServer.py:435 +#: admin/PageVServer.py:439 msgid "Content can be cached" msgstr "" -#: admin/PageVServer.py:438 +#: admin/PageVServer.py:442 msgid "Forbids content caching" msgstr "" -#: admin/PageVServer.py:455 +#: admin/PageVServer.py:459 msgid "Virtual Server nickname" msgstr "Smeknamn för virtuell server" -#: admin/PageVServer.py:457 +#: admin/PageVServer.py:461 msgid "Server ID" msgstr "Server-id" -#: admin/PageVServer.py:463 +#: admin/PageVServer.py:467 msgid "Directory Indexes" msgstr "Katalogindex" -#: admin/PageVServer.py:465 admin/plugins/fullpath.py:119 +#: admin/PageVServer.py:469 admin/plugins/fullpath.py:119 msgid "Paths" msgstr "Sökvägar" -#: admin/PageVServer.py:471 +#: admin/PageVServer.py:475 msgid "Neither are in use at the moment." msgstr "" -#: admin/PageVServer.py:476 +#: admin/PageVServer.py:480 msgid "Keep-alive" msgstr "Keep-alive" -#: admin/PageVServer.py:477 +#: admin/PageVServer.py:481 msgid "Max Upload Size" msgstr "Max Uppladdnings-storlek" -#: admin/PageVServer.py:487 admin/plugins/evhost.py:33 +#: admin/PageVServer.py:491 admin/plugins/evhost.py:33 msgid "Advanced Virtual Hosting" msgstr "Avancerad Virtual Hosting" -#: admin/PageVServer.py:521 +#: admin/PageVServer.py:525 msgid "Error Handling hook" msgstr "" -#: admin/PageVServer.py:532 admin/consts.py:233 admin/consts.py:250 +#: admin/PageVServer.py:536 admin/consts.py:232 admin/consts.py:249 #, fuzzy msgid "Disabled" msgstr "Deaktivera" -#: admin/PageVServer.py:536 +#: admin/PageVServer.py:540 msgid "Write errors to" msgstr "Skriv fel till" -#: admin/PageVServer.py:540 admin/PageVServer.py:579 +#: admin/PageVServer.py:544 admin/PageVServer.py:583 msgid "Filename" msgstr "Filnamn" -#: admin/PageVServer.py:542 admin/PageVServer.py:582 +#: admin/PageVServer.py:546 admin/PageVServer.py:586 msgid "Command" msgstr "Kommando" -#: admin/PageVServer.py:548 +#: admin/PageVServer.py:552 #, fuzzy msgid "Error Logging" msgstr "Loggning" -#: admin/PageVServer.py:559 +#: admin/PageVServer.py:563 msgid "Format" msgstr "Format" -#: admin/PageVServer.py:566 +#: admin/PageVServer.py:570 msgid "Write accesses to" msgstr "Skriv åtkomster till" -#: admin/PageVServer.py:589 +#: admin/PageVServer.py:593 #, fuzzy msgid "Hide" msgstr "Header" -#: admin/PageVServer.py:589 +#: admin/PageVServer.py:593 #, fuzzy msgid "Show macros" msgstr "Visa grupp" -#: admin/PageVServer.py:598 +#: admin/PageVServer.py:602 msgid "Template: " msgstr "Mall:" -#: admin/PageVServer.py:600 +#: admin/PageVServer.py:604 #, fuzzy msgid "Access Logging" msgstr "Loggning" -#: admin/PageVServer.py:606 +#: admin/PageVServer.py:610 msgid "Time standard" msgstr "Tidsstandard" -#: admin/PageVServer.py:607 admin/PageVServer.py:687 admin/consts.py:228 +#: admin/PageVServer.py:611 admin/PageVServer.py:696 admin/consts.py:227 msgid "Accept" msgstr "Acceptera" -#: admin/PageVServer.py:607 +#: admin/PageVServer.py:611 msgid "Accept Forwarded IPs" msgstr "Acceptera vidarebefodrade IPnummer." -#: admin/PageVServer.py:610 +#: admin/PageVServer.py:614 #, fuzzy msgid "Do not check" msgstr "Kolla inte ursprung" -#: admin/PageVServer.py:619 +#: admin/PageVServer.py:623 #, fuzzy msgid "Logging Options" msgstr "Loggning" -#: admin/PageVServer.py:655 admin/wizards/ssl_test.py:136 +#: admin/PageVServer.py:659 admin/wizards/ssl_test.py:136 msgid "Certificate" msgstr "Certifikat" -#: admin/PageVServer.py:656 +#: admin/PageVServer.py:660 msgid "Certificate key" msgstr "Certifikatnyckel" -#: admin/PageVServer.py:661 +#: admin/PageVServer.py:665 #, fuzzy msgid "Required SSL/TLS Values" msgstr "Obligatoriska SSL/TLS-värden" -#: admin/PageVServer.py:666 +#: admin/PageVServer.py:674 +msgid "Ciphersuites" +msgstr "" + +#: admin/PageVServer.py:675 msgid "Ciphers" msgstr "Chiffer" -#: admin/PageVServer.py:667 +#: admin/PageVServer.py:676 #, fuzzy msgid "Prefer" msgstr "Prefix" -#: admin/PageVServer.py:667 +#: admin/PageVServer.py:676 #, fuzzy msgid "Server Preference" msgstr "Servertrafik" -#: admin/PageVServer.py:668 +#: admin/PageVServer.py:677 msgid "Client Certs. Request" msgstr "" -#: admin/PageVServer.py:669 +#: admin/PageVServer.py:678 msgid "Compression" msgstr "" -#: admin/PageVServer.py:670 +#: admin/PageVServer.py:679 msgid "DH length" msgstr "" -#: admin/PageVServer.py:673 +#: admin/PageVServer.py:682 msgid "CA List" msgstr "CA-lista" -#: admin/PageVServer.py:676 +#: admin/PageVServer.py:685 msgid "Verify Depth" msgstr "Verifiera djup" -#: admin/PageVServer.py:682 +#: admin/PageVServer.py:691 #, fuzzy msgid "Advanced Options" msgstr "Avancerade val" -#: admin/PageVServer.py:687 +#: admin/PageVServer.py:696 #, fuzzy msgid "Enable HSTS" msgstr "Aktiverad" -#: admin/PageVServer.py:690 +#: admin/PageVServer.py:699 msgid "HSTS Max-Age" msgstr "" -#: admin/PageVServer.py:690 +#: admin/PageVServer.py:699 msgid "One year" msgstr "" -#: admin/PageVServer.py:691 +#: admin/PageVServer.py:700 #, fuzzy msgid "Include Subdomains" msgstr "Skicka in dina domäner" -#: admin/PageVServer.py:691 +#: admin/PageVServer.py:700 msgid "Include all" msgstr "" -#: admin/PageVServer.py:697 +#: admin/PageVServer.py:706 msgid "HTTP Strict Transport Security (HSTS)" msgstr "" -#: admin/PageVServer.py:716 +#: admin/PageVServer.py:725 msgid "Basics" msgstr "Allmänt" -#: admin/PageVServer.py:719 +#: admin/PageVServer.py:728 msgid "Error Handler" msgstr "Felhanterare" @@ -3138,8 +3181,8 @@ msgstr "Namn + Plattform" msgid "Full Server string" msgstr "Hela servernamnet." -#: admin/consts.py:51 admin/consts.py:80 admin/consts.py:97 -#: admin/consts.py:111 admin/plugins/mysql.py:45 +#: admin/consts.py:51 admin/consts.py:80 admin/consts.py:97 admin/consts.py:111 +#: admin/plugins/mysql.py:45 msgid "None" msgstr "Ingen" @@ -3344,197 +3387,197 @@ msgstr "Dynamisk" msgid "Automatic" msgstr "Automatisk" -#: admin/consts.py:145 admin/plugins/error_redir.py:35 +#: admin/consts.py:144 admin/plugins/error_redir.py:35 msgid "External" msgstr "Extern" -#: admin/consts.py:146 admin/plugins/error_redir.py:34 +#: admin/consts.py:145 admin/plugins/error_redir.py:34 msgid "Internal" msgstr "Intern" -#: admin/consts.py:189 admin/plugins/header.py:116 admin/plugins/proxy.py:94 +#: admin/consts.py:188 admin/plugins/header.py:118 admin/plugins/proxy.py:94 #: admin/plugins/proxy.py:144 admin/plugins/redir.py:76 #: admin/plugins/redir.py:106 admin/plugins/request.py:31 #: admin/plugins/url_arg.py:76 admin/plugins/url_arg.py:95 msgid "Regular Expression" msgstr "Reguljärt uttryck" -#: admin/consts.py:191 +#: admin/consts.py:190 msgid "File Exists" msgstr "Fil finns" -#: admin/consts.py:192 +#: admin/consts.py:191 msgid "HTTP Method" msgstr "HTTP-metod" -#: admin/consts.py:193 admin/plugins/bind.py:76 admin/plugins/bind.py:129 +#: admin/consts.py:192 admin/plugins/bind.py:76 admin/plugins/bind.py:129 #, fuzzy msgid "Incoming IP/Port" msgstr "Inkommande port" -#: admin/consts.py:194 +#: admin/consts.py:193 msgid "SSL / TLS" msgstr "" -#: admin/consts.py:195 admin/plugins/fullpath.py:66 +#: admin/consts.py:194 admin/plugins/fullpath.py:66 #: admin/plugins/fullpath.py:101 msgid "Full Path" msgstr "Hela sökvägen" -#: admin/consts.py:196 admin/plugins/from.py:71 +#: admin/consts.py:195 admin/plugins/from.py:71 #, fuzzy msgid "Connected from" msgstr "Anslutning" -#: admin/consts.py:197 +#: admin/consts.py:196 msgid "URL Argument" msgstr "" -#: admin/consts.py:198 +#: admin/consts.py:197 msgid "GeoIP" msgstr "GeoIP" -#: admin/consts.py:202 +#: admin/consts.py:201 #, fuzzy msgid "Match Nickname" msgstr "Smeknamn" -#: admin/consts.py:203 +#: admin/consts.py:202 msgid "Wildcards" msgstr "Joker-tecken" -#: admin/consts.py:205 +#: admin/consts.py:204 #, fuzzy msgid "Server IP" msgstr "Server-id" -#: admin/consts.py:209 admin/consts.py:255 +#: admin/consts.py:208 admin/consts.py:254 msgid "Not set" msgstr "Inte satt" -#: admin/consts.py:210 +#: admin/consts.py:209 msgid "Already expired on 1970" msgstr "Förföll redan 1970" -#: admin/consts.py:211 +#: admin/consts.py:210 msgid "Do not expire until 2038" msgstr "Förfaller inte förens år 2038" -#: admin/consts.py:212 +#: admin/consts.py:211 msgid "Custom value" msgstr "Eget värde" -#: admin/consts.py:216 +#: admin/consts.py:215 msgid "No TLS/SSL" msgstr "Ingen TLS/SSL" -#: admin/consts.py:217 +#: admin/consts.py:216 msgid "OpenSSL / libssl" msgstr "OpenSSL / libssl" -#: admin/consts.py:221 admin/util.py:91 +#: admin/consts.py:220 admin/util.py:91 msgid "Off" msgstr "Av" -#: admin/consts.py:222 +#: admin/consts.py:221 msgid "Enhanced Virtual Hosting" msgstr "Förbättrad Virtual Hosting" -#: admin/consts.py:226 +#: admin/consts.py:225 msgid "Skip" msgstr "Hoppa över" -#: admin/consts.py:227 +#: admin/consts.py:226 msgid "Tolerate" msgstr "" -#: admin/consts.py:229 +#: admin/consts.py:228 msgid "Require" msgstr "Kräv" -#: admin/consts.py:234 +#: admin/consts.py:233 msgid "RRDtool graphs" msgstr "RRDtool-grafer" -#: admin/consts.py:238 +#: admin/consts.py:237 #, fuzzy msgid "Local time" msgstr "Nytt värdnamn" -#: admin/consts.py:239 +#: admin/consts.py:238 msgid "UTC: Coordinated Universal Time" msgstr "" -#: admin/consts.py:243 +#: admin/consts.py:242 msgid "JSON" msgstr "JSON" -#: admin/consts.py:244 +#: admin/consts.py:243 #, fuzzy msgid "Python" msgstr "Sökväg" -#: admin/consts.py:245 admin/wizards/List.py:91 +#: admin/consts.py:244 admin/wizards/List.py:91 msgid "PHP" msgstr "PHP" -#: admin/consts.py:246 +#: admin/consts.py:245 msgid "Ruby" msgstr "Ruby" -#: admin/consts.py:251 +#: admin/consts.py:250 msgid "POST tracker" msgstr "" -#: admin/consts.py:256 +#: admin/consts.py:255 msgid "Public" msgstr "" -#: admin/consts.py:257 +#: admin/consts.py:256 msgid "Private" msgstr "" -#: admin/consts.py:258 +#: admin/consts.py:257 msgid "No Cache" msgstr "" -#: admin/consts.py:263 +#: admin/consts.py:262 msgid "0 - No compression" msgstr "" -#: admin/consts.py:264 +#: admin/consts.py:263 msgid "1" msgstr "" -#: admin/consts.py:265 +#: admin/consts.py:264 msgid "2" msgstr "" -#: admin/consts.py:266 +#: admin/consts.py:265 msgid "3" msgstr "" -#: admin/consts.py:267 +#: admin/consts.py:266 msgid "4" msgstr "" -#: admin/consts.py:268 +#: admin/consts.py:267 msgid "5" msgstr "" -#: admin/consts.py:269 +#: admin/consts.py:268 msgid "6" msgstr "" -#: admin/consts.py:270 +#: admin/consts.py:269 msgid "7" msgstr "" -#: admin/consts.py:271 +#: admin/consts.py:270 msgid "8" msgstr "" -#: admin/consts.py:272 +#: admin/consts.py:271 msgid "9 - Max compression" msgstr "" @@ -3720,69 +3763,69 @@ msgstr "Lista av filer som inte bör visas." msgid "Only listing" msgstr "" -#: admin/plugins/dirlist.py:49 admin/plugins/dirlist.py:50 #: admin/plugins/dirlist.py:51 admin/plugins/dirlist.py:52 #: admin/plugins/dirlist.py:53 admin/plugins/dirlist.py:54 +#: admin/plugins/dirlist.py:55 admin/plugins/dirlist.py:56 #: admin/plugins/redir.py:105 msgid "Show" msgstr "Visa" -#: admin/plugins/dirlist.py:49 +#: admin/plugins/dirlist.py:51 msgid "Show Size" msgstr "Visa storlek" -#: admin/plugins/dirlist.py:50 +#: admin/plugins/dirlist.py:52 msgid "Show Date" msgstr "Visa datum" -#: admin/plugins/dirlist.py:51 +#: admin/plugins/dirlist.py:53 msgid "Show User" msgstr "Visa användare" -#: admin/plugins/dirlist.py:52 +#: admin/plugins/dirlist.py:54 msgid "Show Group" msgstr "Visa grupp" -#: admin/plugins/dirlist.py:53 +#: admin/plugins/dirlist.py:55 #, fuzzy msgid "Show Backup files" msgstr "Gömda filer" -#: admin/plugins/dirlist.py:54 +#: admin/plugins/dirlist.py:56 #, fuzzy msgid "Show Hidden files" msgstr "Gömda filer" -#: admin/plugins/dirlist.py:55 +#: admin/plugins/dirlist.py:58 admin/plugins/file.py:44 msgid "Allow symbolic links" msgstr "Tillåt symboliska länkar" -#: admin/plugins/dirlist.py:56 +#: admin/plugins/dirlist.py:59 #, fuzzy msgid "Redirect symbolic links" msgstr "Tillåt symboliska länkar" -#: admin/plugins/dirlist.py:60 +#: admin/plugins/dirlist.py:63 msgid "Listing" msgstr "" -#: admin/plugins/dirlist.py:65 +#: admin/plugins/dirlist.py:68 msgid "Theme" msgstr "Tema" -#: admin/plugins/dirlist.py:66 +#: admin/plugins/dirlist.py:69 msgid "Icons dir" msgstr "Ikonkatalog" -#: admin/plugins/dirlist.py:67 +#: admin/plugins/dirlist.py:70 msgid "Notice files" msgstr "Meddelandefiler" -#: admin/plugins/dirlist.py:68 +#: admin/plugins/dirlist.py:71 msgid "Hidden files" msgstr "Gömda filer" -#: admin/plugins/dirlist.py:72 +#: admin/plugins/dirlist.py:75 msgid "Theming" msgstr "Teman" @@ -3925,7 +3968,7 @@ msgstr "FastCGI-specifikt" msgid "Enables an internal I/O cache that improves performance." msgstr "Aktiverar en intern I/O-cache som förbättrar prestandan." -#: admin/plugins/file.py:45 +#: admin/plugins/file.py:49 msgid "File Sending" msgstr "" @@ -4018,26 +4061,26 @@ msgid "" "header entry." msgstr "" -#: admin/plugins/header.py:65 +#: admin/plugins/header.py:67 #, fuzzy msgid "Matches a Regular Expression" msgstr "Nytt reguljärt uttryck" -#: admin/plugins/header.py:66 +#: admin/plugins/header.py:68 msgid "Is Provided" msgstr "" -#: admin/plugins/header.py:104 +#: admin/plugins/header.py:106 #, fuzzy msgid "Full header" msgstr "Filnamn" -#: admin/plugins/header.py:107 +#: admin/plugins/header.py:109 #, fuzzy msgid "Complete Header" msgstr "Göm Header" -#: admin/plugins/header.py:154 +#: admin/plugins/header.py:156 #, python-format msgid "Header %(header)s is provided" msgstr "" @@ -4169,7 +4212,7 @@ msgid "Database name containing the user/password pair list." msgstr "Databasnamn innehållandes tabeller med användarnamn och lösenord." #: admin/plugins/mysql.py:41 -#, fuzzy +#, fuzzy, python-brace-format msgid "" "SQL command to execute. ${user} is replaced with the user name, and " "${passwd} is replaced with the user supplied password." @@ -4632,20 +4675,16 @@ msgstr "Lägg till ny..." msgid "Accepted Domains" msgstr "Mål" -#: admin/server.py:68 +#: admin/server.py:70 #, fuzzy, python-format msgid "Server %(version)s running.. PID=%(pid)d Port=%(scgi_port)s" msgstr "Server %(version)s körs.. PID=%(pid)d Port=%(scgi_port)d" -#: admin/server.py:70 +#: admin/server.py:72 #, fuzzy, python-format msgid "Server %(version)s running.. PID=%(pid)d Socket=%(scgi_port)s" msgstr "Server %(version)s körs.. PID=%(pid)d Port=%(scgi_port)d" -#: admin/server.py:144 -msgid "Incorrect parameters: PORT CONFIG_FILE" -msgstr "Felaktiga parametrar: PORT CONFIG_FILE" - #: admin/util.py:91 msgid "On" msgstr "På" @@ -5060,9 +5099,8 @@ msgstr "" #: admin/wizards/alfresco.py:45 admin/wizards/coldfusion.py:46 #: admin/wizards/concrete5.py:47 admin/wizards/django.py:44 #: admin/wizards/glassfish.py:45 admin/wizards/mailman.py:48 -#: admin/wizards/mono.py:46 admin/wizards/php.py:43 -#: admin/wizards/symfony.py:51 admin/wizards/uwsgi.py:61 -#: admin/wizards/zend.py:47 +#: admin/wizards/mono.py:46 admin/wizards/php.py:43 admin/wizards/symfony.py:51 +#: admin/wizards/uwsgi.py:61 admin/wizards/zend.py:47 #, fuzzy msgid "Host name of the virtual server that is about to be created." msgstr "Namn för den virtuella servern." @@ -5070,9 +5108,8 @@ msgstr "Namn för den virtuella servern." #: admin/wizards/alfresco.py:46 admin/wizards/coldfusion.py:45 #: admin/wizards/concrete5.py:46 admin/wizards/django.py:43 #: admin/wizards/glassfish.py:46 admin/wizards/mailman.py:47 -#: admin/wizards/mono.py:45 admin/wizards/php.py:42 -#: admin/wizards/symfony.py:50 admin/wizards/uwsgi.py:60 -#: admin/wizards/zend.py:46 +#: admin/wizards/mono.py:45 admin/wizards/php.py:42 admin/wizards/symfony.py:50 +#: admin/wizards/uwsgi.py:60 admin/wizards/zend.py:46 #, fuzzy msgid "New Virtual Server Details" msgstr "Virtuell server" @@ -6057,3 +6094,31 @@ msgstr "Skapa en ny konfigurations-fil" #: admin/wizards/zend.py:49 msgid "Web directory where you want Zend to be accessible. (Example: /zend)" msgstr "Web-katalog där du vill att Zend ska kunna nås. (Exempelvis: /zend)" + +#, fuzzy +#~ msgid "Disable %s" +#~ msgstr "Deaktivera" + +#~ msgid "Incorrect parameters: PORT CONFIG_FILE" +#~ msgstr "Felaktiga parametrar: PORT CONFIG_FILE" + +#, fuzzy +#~ msgid "Mailing List Subscription" +#~ msgstr "Prenumeration av epostlista" + +#, fuzzy +#~ msgid "Purchase commercial support" +#~ msgstr "Kommersiell support" + +#~ msgid "Subscribe" +#~ msgstr "Prenumerera" + +#~ msgid "You will be sent an email requesting confirmation" +#~ msgstr "" +#~ "Du kommer att få ett email skickat till dig med en begäran om bekräftelse." + +#~ msgid "Your email address" +#~ msgstr "Din email-adress." + +#~ msgid "Your name" +#~ msgstr "Ditt namn" diff --git a/po/admin/zh_CN.po b/po/admin/zh_CN.po index 22c727666..14a69cf17 100644 --- a/po/admin/zh_CN.po +++ b/po/admin/zh_CN.po @@ -4,13 +4,13 @@ # msgid "" msgstr "" -"Project-Id-Version: cherokee '0.99.49' admin UI for zh_CN \n" -"Report-Msgid-Bugs-To: http://bugs.cherokee-project.com/\n" -"POT-Creation-Date: 2014-01-04 00:54+0100\n" +"Project-Id-Version: cherokee 1.2.104\n" +"Report-Msgid-Bugs-To: https://github.com/cherokee/webserver/issues\n" +"POT-Creation-Date: 2021-03-26 19:04+0100\n" "PO-Revision-Date: 2009-04-14 21:27+CEST\n" "Last-Translator: Automatically generated\n" "Language-Team: ownlinux.org\n" -"Language: \n" +"Language: zh\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -99,7 +99,7 @@ msgstr "数据源" msgid "Assign Information Sources" msgstr "设置数据源" -#: admin/Balancer.py:136 admin/PageIndex.py:204 admin/PageRule.py:112 +#: admin/Balancer.py:136 admin/PageIndex.py:182 admin/PageRule.py:112 #: admin/plugins/bind.py:69 admin/plugins/bind.py:121 #: admin/plugins/custom_error.py:41 admin/plugins/method.py:31 msgid "Choose" @@ -135,17 +135,17 @@ msgstr "手动配置" #: admin/CTK/CTK/Druid.py:216 admin/CTK/CTK/Druid.py:224 #: admin/CTK/CTK/Druid.py:232 admin/CTK/CTK/Druid.py:238 admin/Icons.py:362 #: admin/Mime.py:110 admin/PageGeneral.py:289 admin/PageGeneral.py:317 -#: admin/PageIndex.py:232 admin/PageIndex.py:308 admin/PageRule.py:225 -#: admin/PageRule.py:276 admin/PageRule.py:302 admin/PageSource.py:225 -#: admin/PageSource.py:411 admin/PageSource.py:428 admin/PageSource.py:442 -#: admin/PageVServers.py:215 admin/PageVServers.py:252 -#: admin/PageVServers.py:281 admin/plugins/redir.py:120 +#: admin/PageIndex.py:246 admin/PageRule.py:225 admin/PageRule.py:276 +#: admin/PageRule.py:302 admin/PageSource.py:225 admin/PageSource.py:411 +#: admin/PageSource.py:428 admin/PageSource.py:442 admin/PageVServers.py:215 +#: admin/PageVServers.py:252 admin/PageVServers.py:281 +#: admin/plugins/redir.py:120 msgid "Cancel" msgstr "取消" #: admin/CTK/CTK/Dialog.py:165 admin/CTK/CTK/Dialog.py:272 #: admin/CTK/CTK/Druid.py:243 admin/PageException.py:89 -#: admin/PageException.py:93 admin/PageGeneral.py:283 admin/PageIndex.py:277 +#: admin/PageException.py:93 admin/PageGeneral.py:283 admin/PageIndex.py:215 #: admin/PageSource.py:402 admin/plugins/error_redir.py:110 msgid "Close" msgstr "关闭" @@ -186,14 +186,14 @@ msgstr "记录" #: admin/CTK/CTK/Image.py:99 admin/CgiBase.py:69 admin/CgiBase.py:71 #: admin/CgiBase.py:124 admin/CgiBase.py:125 admin/CgiBase.py:126 #: admin/CgiBase.py:127 admin/CgiBase.py:128 admin/Graph.py:125 -#: admin/PageAdvanced.py:150 admin/PageEntry.py:150 admin/PageEntry.py:159 -#: admin/PageGeneral.py:193 admin/PageSource.py:296 -#: admin/plugins/dirlist.py:56 admin/plugins/exists.py:72 -#: admin/plugins/exists.py:77 admin/plugins/exists.py:78 -#: admin/plugins/exists.py:79 admin/plugins/exists.py:109 -#: admin/plugins/exists.py:115 admin/plugins/exists.py:116 -#: admin/plugins/exists.py:117 admin/plugins/file.py:40 -#: admin/plugins/ldap.py:53 admin/plugins/streaming.py:43 +#: admin/PageAdvanced.py:198 admin/PageEntry.py:150 admin/PageEntry.py:159 +#: admin/PageGeneral.py:193 admin/PageSource.py:296 admin/plugins/dirlist.py:59 +#: admin/plugins/exists.py:72 admin/plugins/exists.py:77 +#: admin/plugins/exists.py:78 admin/plugins/exists.py:79 +#: admin/plugins/exists.py:109 admin/plugins/exists.py:115 +#: admin/plugins/exists.py:116 admin/plugins/exists.py:117 +#: admin/plugins/file.py:42 admin/plugins/ldap.py:53 +#: admin/plugins/streaming.py:43 msgid "Enabled" msgstr "允许" @@ -213,12 +213,13 @@ msgstr "保存" msgid "Optional" msgstr "完成" -#: admin/CTK/CTK/ToggleButton.py:154 +#: admin/CTK/CTK/ToggleButton.py:154 admin/PageAdvanced.py:245 +#: admin/PageAdvanced.py:258 #, fuzzy msgid "Disable" msgstr "禁止" -#: admin/CTK/CTK/ToggleButton.py:155 admin/PageVServer.py:669 +#: admin/CTK/CTK/ToggleButton.py:155 admin/PageVServer.py:678 #: admin/wizards/flcache.py:157 #, fuzzy msgid "Enable" @@ -261,7 +262,7 @@ msgid "" "headers and use it in REMOTE_ADDR." msgstr "处理程序是否读取和使用X-Real-IP header并设置为客户端地址." -#: admin/CgiBase.py:40 admin/PageVServer.py:70 +#: admin/CgiBase.py:40 admin/PageVServer.py:74 msgid "" "Accept all the X-Real-IP and X-Forwarded-For headers. WARNING: Turn it on " "only if you are centain of what you are doing." @@ -280,11 +281,11 @@ msgstr "允许发送X-Real-IP和X-Forwarded-For头的IP地址和子网." msgid "Read X-Real-IP" msgstr "读取 X-Real-IP" -#: admin/CgiBase.py:71 admin/PageVServer.py:610 +#: admin/CgiBase.py:71 admin/PageVServer.py:614 msgid "Don't check origin" msgstr "不检查来源" -#: admin/CgiBase.py:73 admin/PageVServer.py:613 +#: admin/CgiBase.py:73 admin/PageVServer.py:617 msgid "Accept from Hosts" msgstr "允许访问的主机" @@ -326,7 +327,7 @@ msgid "Allow X-Sendfile" msgstr "允许 X-Sendfile" #: admin/CgiBase.py:128 admin/plugins/exists.py:77 admin/plugins/exists.py:115 -#: admin/plugins/file.py:40 +#: admin/plugins/file.py:42 msgid "Use I/O cache" msgstr "使用I/O缓存" @@ -416,7 +417,7 @@ msgid "" msgstr "是否在此虚拟主机上启用流量统计." #: admin/Graph.py:118 admin/PageEntry.py:538 admin/PageSource.py:257 -#: admin/PageStatus.py:70 admin/PageVServer.py:731 admin/PageVServers.py:210 +#: admin/PageStatus.py:70 admin/PageVServer.py:740 admin/PageVServers.py:210 msgid "Unknown" msgstr "未知" @@ -428,7 +429,7 @@ msgstr "流量信息统计" msgid "Allows to specify an alternative Document Root path." msgstr "允许指定替代网站根目录." -#: admin/Handler.py:43 admin/PageEntry.py:523 admin/PageVServer.py:462 +#: admin/Handler.py:43 admin/PageEntry.py:523 admin/PageVServer.py:466 #: admin/PageVServers.py:128 admin/wizards/django.py:191 #: admin/wizards/mono.py:199 admin/wizards/php.py:39 admin/wizards/php.py:342 #: admin/wizards/uwsgi.py:267 @@ -440,7 +441,7 @@ msgid "Extension List" msgstr "扩展列表" #: admin/Icons.py:129 admin/Icons.py:328 admin/Mime.py:96 admin/Mime.py:131 -#: admin/consts.py:188 admin/plugins/extensions.py:61 +#: admin/consts.py:187 admin/plugins/extensions.py:61 #: admin/wizards/flcache.py:141 msgid "Extensions" msgstr "扩展" @@ -461,12 +462,13 @@ msgstr "文件" msgid "Add New File" msgstr "增加新文件" -#: admin/Icons.py:197 admin/Icons.py:329 admin/Rule.py:174 admin/consts.py:42 -#: admin/consts.py:128 admin/consts.py:262 +#: admin/Icons.py:197 admin/Icons.py:329 admin/PageVServer.py:674 +#: admin/PageVServer.py:675 admin/Rule.py:174 admin/consts.py:42 +#: admin/consts.py:128 admin/consts.py:261 msgid "Default" msgstr "默认" -#: admin/Icons.py:198 admin/Icons.py:330 admin/consts.py:187 +#: admin/Icons.py:198 admin/Icons.py:330 admin/consts.py:186 #: admin/plugins/directory.py:31 msgid "Directory" msgstr "目录" @@ -479,7 +481,7 @@ msgstr "转到上一级" msgid "Modify" msgstr "修改" -#: admin/Icons.py:214 admin/PageAdvanced.py:168 admin/PageAdvanced.py:192 +#: admin/Icons.py:214 admin/PageAdvanced.py:216 admin/PageAdvanced.py:316 msgid "Special Files" msgstr "特殊文件" @@ -588,7 +590,7 @@ msgstr "服务器" msgid "Home" msgstr "" -#: admin/Page.py:155 admin/PageAdvanced.py:150 admin/PageIndex.py:84 +#: admin/Page.py:155 admin/PageAdvanced.py:198 admin/PageIndex.py:62 #: admin/PageStatus.py:40 admin/PageStatus.py:112 msgid "Status" msgstr "状态" @@ -607,7 +609,7 @@ msgstr "服务器" msgid "Sources" msgstr "资源" -#: admin/Page.py:159 admin/PageAdvanced.py:97 admin/PageAdvanced.py:198 +#: admin/Page.py:159 admin/PageAdvanced.py:145 admin/PageAdvanced.py:322 msgid "Advanced" msgstr "高级" @@ -619,7 +621,19 @@ msgstr "" msgid "Updating..." msgstr "" -#: admin/PageAdvanced.py:64 +#: admin/PageAdvanced.py:56 +msgid "" +"

WARNING: The SSL/TLS back-end supports more recent\n" +"versions of TLS protocols, which are not recognized by Cherokee. Please " +"check\n" +"for latest Cherokee updates or report this issue. As a temporary workaround " +"please\n" +"set 'Max. TLS protocol version' to the maximum TLS protocol version " +"supported by\n" +"Cherokee.

Following unknown TLS protocols have been found:" +msgstr "" + +#: admin/PageAdvanced.py:94 msgid "" "

WARNING: This section contains advanced\n" "configuration parameters. Changing things is not recommended unless\n" @@ -628,264 +642,325 @@ msgstr "" "

警告: 这里包含一些高级设置. 除非您知道自己在做什么,否则请不要随意" "更改这些选项.

" -#: admin/PageAdvanced.py:68 +#: admin/PageAdvanced.py:98 msgid "Defines which thread policy the OS should apply to the server." msgstr "定义服务器线程运作方式." -#: admin/PageAdvanced.py:69 +#: admin/PageAdvanced.py:99 msgid "If empty, Cherokee will calculate a default number." msgstr "如果为空,Cherokee将使用默认设置." -#: admin/PageAdvanced.py:70 +#: admin/PageAdvanced.py:100 msgid "" "It defines how many file descriptors the server should handle. Default is " "the number showed by ulimit -n" msgstr "定义服务器同时打开的文件描述符. 默认是 ulimit -n 所显示的数值" -#: admin/PageAdvanced.py:71 +#: admin/PageAdvanced.py:101 msgid "Allows to choose the internal file descriptor polling method." msgstr "允许选择内部文件描述polling方法." -#: admin/PageAdvanced.py:72 +#: admin/PageAdvanced.py:102 msgid "Minimum size of a file to use sendfile(). Default: 32768 Bytes." msgstr "sendfile()发送的最小文件大小.默认: 32768 Bytes." -#: admin/PageAdvanced.py:73 +#: admin/PageAdvanced.py:103 msgid "Maximum size of a file to use sendfile(). Default: 2 GB." msgstr "sendfile()发送的最大文件大小. 默认: 2 GB." -#: admin/PageAdvanced.py:74 +#: admin/PageAdvanced.py:104 msgid "" "Name a program that will be called if, by some reason, the server fails. " "Default: cherokee-panic." msgstr "服务器故障处理程序名称. 默认: cherokee-panic." -#: admin/PageAdvanced.py:75 +#: admin/PageAdvanced.py:105 msgid "Path of the PID file. If empty, the file will not be created." msgstr "PID 文件路径.为空则不创建PID文件." -#: admin/PageAdvanced.py:76 +#: admin/PageAdvanced.py:106 msgid "Max. length of the incoming connection queue." msgstr "最大入站连接队列长度." -#: admin/PageAdvanced.py:77 +#: admin/PageAdvanced.py:107 msgid "" "Set the number of how many internal connections can be held for reuse by " "each thread. Default: 20." msgstr "设置每个线程处理的连接数.默认值 20." -#: admin/PageAdvanced.py:78 +#: admin/PageAdvanced.py:108 msgid "" "Sets the number of seconds between log consolidations (flushes). Default: 10 " "seconds." msgstr "设置日志合并的时间. 默认: 10 秒." -#: admin/PageAdvanced.py:79 +#: admin/PageAdvanced.py:109 msgid "Time lapse (in seconds) between Nonce cache clean ups." msgstr "Nonce缓存清理时间." -#: admin/PageAdvanced.py:80 +#: admin/PageAdvanced.py:110 msgid "" "Enables the server-wide keep-alive support. It increases the performance. It " "is usually set on." msgstr "启用keep-alive支持. 一般这个项目都是启用的." -#: admin/PageAdvanced.py:81 +#: admin/PageAdvanced.py:111 msgid "" "Maximum number of HTTP requests that can be served by each keepalive " "connection." msgstr "keepalive最大连接数." -#: admin/PageAdvanced.py:82 +#: admin/PageAdvanced.py:112 msgid "" "Allows the server to use Chunked encoding to try to keep Keep-Alive enabled." msgstr "允许服务器在Keep-Alive上使用分块编码." -#: admin/PageAdvanced.py:83 +#: admin/PageAdvanced.py:113 msgid "Activate or deactivate the I/O cache globally." msgstr "激活或停用全局I/O缓存." -#: admin/PageAdvanced.py:84 +#: admin/PageAdvanced.py:114 msgid "Number of pages that the cache should handle." msgstr "缓存处理页面数量." -#: admin/PageAdvanced.py:85 +#: admin/PageAdvanced.py:115 #, fuzzy msgid "Files under this size (in bytes) will not be cached." msgstr "文件小于此大小则不被缓存." -#: admin/PageAdvanced.py:86 +#: admin/PageAdvanced.py:116 #, fuzzy msgid "Files over this size (in bytes) will not be cached." msgstr "文件大于此大小则不被缓存." -#: admin/PageAdvanced.py:87 +#: admin/PageAdvanced.py:117 msgid "" "How long (in seconds) the file information should last cached without " "refreshing it." msgstr "多长时间刷新缓存." -#: admin/PageAdvanced.py:88 +#: admin/PageAdvanced.py:118 msgid "How long (in seconds) the file content should last cached." msgstr "文件最大缓存时间." -#: admin/PageAdvanced.py:89 +#: admin/PageAdvanced.py:119 msgid "Path to a Diffie Hellman (DH) parameters PEM file: 512 bits." msgstr "Diffie Hellman (DH) PEM文件路径: 512 bits." -#: admin/PageAdvanced.py:90 +#: admin/PageAdvanced.py:120 msgid "Path to a Diffie Hellman (DH) parameters PEM file: 1024 bits." msgstr "Diffie Hellman (DH) PEM文件路径: 1024 bits" -#: admin/PageAdvanced.py:91 +#: admin/PageAdvanced.py:121 msgid "Path to a Diffie Hellman (DH) parameters PEM file: 2048 bits." msgstr "Diffie Hellman (DH) PEM文件路径: 2048 bits." -#: admin/PageAdvanced.py:92 +#: admin/PageAdvanced.py:122 msgid "Path to a Diffie Hellman (DH) parameters PEM file: 4096 bits." msgstr "Diffie Hellman (DH) PEM文件路径: 4096 bits." -#: admin/PageAdvanced.py:93 +#: admin/PageAdvanced.py:123 +msgid "Your Cherokee Web Server does not support SSL/TLS encryption." +msgstr "" + +#: admin/PageAdvanced.py:124 msgid "Timeout for the TLS/SSL handshake. Default: 15 seconds." msgstr "" -#: admin/PageAdvanced.py:94 +#: admin/PageAdvanced.py:125 +msgid "Beware: it is vulnerable. You should disable SSLv2." +msgstr "" + +#: admin/PageAdvanced.py:126 +msgid "Beware: it is vulnerable. You should disable SSLv3." +msgstr "" + +#: admin/PageAdvanced.py:127 +msgid "TLSv1 is deprecated" +msgstr "" + +#: admin/PageAdvanced.py:128 +msgid "TLSv1.1 is deprecated" +msgstr "" + +#: admin/PageAdvanced.py:129 admin/PageAdvanced.py:130 +msgid " " +msgstr "" + +#: admin/PageAdvanced.py:131 +msgid "" +"The following options work in combination with above min/max TLS protocol " +"version settings. They are deprecated, only set the minimum and maximum " +"supported protocol versions instead." +msgstr "" + +#: admin/PageAdvanced.py:133 msgid "" -"Allow clients to use SSL version 2 - Beware: it is vulnerable. (Default: No)" +"Minimum required TLS protocol version from clients (Default: auto-configured " +"by libssl)" msgstr "" -#: admin/PageAdvanced.py:119 admin/PageAdvanced.py:121 +#: admin/PageAdvanced.py:134 +msgid "" +"Maximum supported TLS protocol version (Default: auto-configured by libssl)" +msgstr "" + +#: admin/PageAdvanced.py:167 admin/PageAdvanced.py:169 msgid "Allowed" msgstr "允许" -#: admin/PageAdvanced.py:119 +#: admin/PageAdvanced.py:167 msgid "Keep Alive" msgstr "" -#: admin/PageAdvanced.py:120 +#: admin/PageAdvanced.py:168 msgid "Max keepalive reqs" msgstr "keepalive最大请求数" -#: admin/PageAdvanced.py:121 +#: admin/PageAdvanced.py:169 msgid "Chunked Encoding" msgstr "块编码" -#: admin/PageAdvanced.py:122 +#: admin/PageAdvanced.py:170 msgid "Polling Method" msgstr "Polling 方式" -#: admin/PageAdvanced.py:123 +#: admin/PageAdvanced.py:171 msgid "Sendfile min size" msgstr "Sendfile最小大小" -#: admin/PageAdvanced.py:124 +#: admin/PageAdvanced.py:172 msgid "Sendfile max size" msgstr "Sendfile 最大大小" -#: admin/PageAdvanced.py:126 admin/PageAdvanced.py:189 +#: admin/PageAdvanced.py:174 admin/PageAdvanced.py:313 msgid "Connections" msgstr "连接" -#: admin/PageAdvanced.py:134 +#: admin/PageAdvanced.py:182 msgid "Thread Number" msgstr "线程数量" -#: admin/PageAdvanced.py:135 +#: admin/PageAdvanced.py:183 msgid "Thread Policy" msgstr "线程工作方式" -#: admin/PageAdvanced.py:136 +#: admin/PageAdvanced.py:184 msgid "File descriptors" msgstr "文件描述符" -#: admin/PageAdvanced.py:137 +#: admin/PageAdvanced.py:185 msgid "Listening queue length" msgstr "监听队列长度" -#: admin/PageAdvanced.py:138 admin/plugins/proxy.py:239 +#: admin/PageAdvanced.py:186 admin/plugins/proxy.py:239 msgid "Reuse connections" msgstr "重用连接" -#: admin/PageAdvanced.py:139 +#: admin/PageAdvanced.py:187 msgid "Log flush time" msgstr "日志刷新时间" -#: admin/PageAdvanced.py:140 +#: admin/PageAdvanced.py:188 msgid "Nonces clean up time" msgstr "Nonces清理时间" -#: admin/PageAdvanced.py:142 admin/PageAdvanced.py:190 +#: admin/PageAdvanced.py:190 admin/PageAdvanced.py:314 msgid "Resources" msgstr "资源" -#: admin/PageAdvanced.py:151 +#: admin/PageAdvanced.py:199 msgid "Max pages" msgstr "最大页面数量" -#: admin/PageAdvanced.py:152 +#: admin/PageAdvanced.py:200 msgid "File Min Size" msgstr "文件最小大小" -#: admin/PageAdvanced.py:153 +#: admin/PageAdvanced.py:201 msgid "File Max Size" msgstr "文件最大大小" -#: admin/PageAdvanced.py:154 +#: admin/PageAdvanced.py:202 msgid "Lasting: stat" msgstr "持续:stat" -#: admin/PageAdvanced.py:155 +#: admin/PageAdvanced.py:203 msgid "Lasting: mmap" msgstr "持续: mmap" -#: admin/PageAdvanced.py:157 admin/PageAdvanced.py:191 +#: admin/PageAdvanced.py:205 admin/PageAdvanced.py:315 msgid "I/O cache" msgstr "I/O 缓存" -#: admin/PageAdvanced.py:165 +#: admin/PageAdvanced.py:213 msgid "Panic action" msgstr "Panic 动作" -#: admin/PageAdvanced.py:166 +#: admin/PageAdvanced.py:214 msgid "PID file" msgstr "PID 文件" -#: admin/PageAdvanced.py:176 admin/PageEntry.py:84 admin/PageVServer.py:476 -#: admin/plugins/common.py:42 admin/plugins/common.py:43 -#: admin/plugins/dirlist.py:55 admin/plugins/proxy.py:240 -msgid "Allow" -msgstr "允许" +#: admin/PageAdvanced.py:245 admin/PageAdvanced.py:247 +#: admin/PageAdvanced.py:258 admin/PageAdvanced.py:260 +#, fuzzy +msgid "Disable " +msgstr "禁止" + +#: admin/PageAdvanced.py:247 +msgid "Protocol deacrivated" +msgstr "" + +#: admin/PageAdvanced.py:247 +msgid "Protocol not supported" +msgstr "" + +#: admin/PageAdvanced.py:260 +msgid "Protocol deactivated" +msgstr "" -#: admin/PageAdvanced.py:176 -msgid "Allow SSL v2" +#: admin/PageAdvanced.py:262 +msgid "Turn off selected TLS Protocols (Deprecated)" msgstr "" -#: admin/PageAdvanced.py:177 +#: admin/PageAdvanced.py:270 admin/PageAdvanced.py:271 +msgid "auto-configured" +msgstr "" + +#: admin/PageAdvanced.py:285 +msgid "Min. TLS protocol version" +msgstr "" + +#: admin/PageAdvanced.py:290 +msgid "Max. TLS protocol version" +msgstr "" + +#: admin/PageAdvanced.py:291 msgid "Handshake Timeout" msgstr "" -#: admin/PageAdvanced.py:178 +#: admin/PageAdvanced.py:292 msgid "DH parameters: 512 bits" msgstr "DH参数: 512 bits" -#: admin/PageAdvanced.py:179 +#: admin/PageAdvanced.py:293 msgid "DH parameters: 1024 bits" msgstr "DH参数: 1024 bits" -#: admin/PageAdvanced.py:180 +#: admin/PageAdvanced.py:294 msgid "DH parameters: 2048 bits" msgstr "DH参数: 2048 bits" -#: admin/PageAdvanced.py:181 +#: admin/PageAdvanced.py:295 msgid "DH parameters: 4096 bits" msgstr "DH参数: 4096 bits" -#: admin/PageAdvanced.py:183 admin/PageAdvanced.py:193 -#: admin/PageGeneral.py:239 admin/plugins/bind.py:92 +#: admin/PageAdvanced.py:296 admin/PageAdvanced.py:317 admin/PageGeneral.py:239 +#: admin/plugins/bind.py:92 msgid "TLS" msgstr "TLS" -#: admin/PageAdvanced.py:199 +#: admin/PageAdvanced.py:323 msgid "Advanced Configuration" msgstr "高级设置" @@ -984,7 +1059,7 @@ msgstr "GZip 压缩" msgid "Deflate encoder" msgstr "Deflate 压缩" -#: admin/PageEntry.py:78 admin/PageEntry.py:173 admin/PageVServer.py:149 +#: admin/PageEntry.py:78 admin/PageEntry.py:173 admin/PageVServer.py:153 msgid "Authentication" msgstr "认证" @@ -994,7 +1069,13 @@ msgstr "认证方式列表" #: admin/PageEntry.py:83 admin/PageEntry.py:89 msgid "Leave unset" -msgstr "不设置" +msgstr "" + +#: admin/PageEntry.py:84 admin/PageVServer.py:480 admin/plugins/common.py:42 +#: admin/plugins/common.py:43 admin/plugins/dirlist.py:58 +#: admin/plugins/file.py:44 admin/plugins/proxy.py:240 +msgid "Allow" +msgstr "" #: admin/PageEntry.py:85 msgid "Forbid" @@ -1023,7 +1104,7 @@ msgstr "" msgid "Remove" msgstr "删除" -#: admin/PageEntry.py:126 admin/PageVServer.py:155 +#: admin/PageEntry.py:126 admin/PageVServer.py:159 #: admin/plugins/secdownload.py:44 msgid "Timeout" msgstr "超时" @@ -1036,7 +1117,7 @@ msgstr "连接超时" msgid "Limit traffic to" msgstr "限制流量" -#: admin/PageEntry.py:139 admin/PageVServer.py:156 +#: admin/PageEntry.py:139 admin/PageVServer.py:160 msgid "Traffic Shaping" msgstr "流量调整" @@ -1044,7 +1125,7 @@ msgstr "流量调整" msgid "Skip Logging" msgstr "不记录" -#: admin/PageEntry.py:154 admin/PageVServer.py:720 +#: admin/PageEntry.py:154 admin/PageVServer.py:729 msgid "Logging" msgstr "记录" @@ -1068,14 +1149,14 @@ msgstr "验证机制" msgid "Can not be empty" msgstr "" -#: admin/PageEntry.py:216 admin/PageEntry.py:268 admin/consts.py:190 -#: admin/plugins/header.py:110 admin/plugins/header.py:151 -#: admin/plugins/header.py:156 admin/plugins/proxy.py:193 +#: admin/PageEntry.py:216 admin/PageEntry.py:268 admin/consts.py:189 +#: admin/plugins/header.py:112 admin/plugins/header.py:153 +#: admin/plugins/header.py:158 admin/plugins/proxy.py:193 msgid "Header" msgstr "头" #: admin/PageEntry.py:216 admin/PageSource.py:284 -#: admin/plugins/error_redir.py:105 admin/plugins/header.py:113 +#: admin/plugins/error_redir.py:105 admin/plugins/header.py:115 #: admin/plugins/redir.py:76 msgid "Type" msgstr "类型" @@ -1095,7 +1176,7 @@ msgstr "连接" msgid "Add New Header" msgstr "新增" -#: admin/PageEntry.py:326 admin/consts.py:204 admin/plugins/redir.py:39 +#: admin/PageEntry.py:326 admin/consts.py:203 admin/plugins/redir.py:39 #: admin/plugins/rehost.py:53 msgid "Regular Expressions" msgstr "正则表达式" @@ -1113,8 +1194,7 @@ msgstr "" msgid "Caching Policy" msgstr "" -#: admin/PageEntry.py:381 admin/plugins/rehost.py:68 -#: admin/plugins/rehost.py:92 +#: admin/PageEntry.py:381 admin/plugins/rehost.py:68 admin/plugins/rehost.py:92 msgid "New Regular Expression" msgstr "" @@ -1122,7 +1202,7 @@ msgstr "" msgid "Disregarded Cookies" msgstr "" -#: admin/PageEntry.py:402 admin/PageVServer.py:154 +#: admin/PageEntry.py:402 admin/PageVServer.py:158 msgid "Expiration" msgstr "过期" @@ -1154,7 +1234,7 @@ msgstr "" msgid "Content Expiration" msgstr "内容超时" -#: admin/PageEntry.py:433 admin/PageVServer.py:153 +#: admin/PageEntry.py:433 admin/PageVServer.py:157 msgid "Cache" msgstr "" @@ -1176,7 +1256,7 @@ msgid "Matching Rule" msgstr "匹配规则" #: admin/PageEntry.py:514 admin/PageEntry.py:528 admin/PageEntry.py:553 -#: admin/PageVServer.py:148 +#: admin/PageVServer.py:152 msgid "Handler" msgstr "处理程序" @@ -1193,7 +1273,7 @@ msgstr "" msgid "Caching" msgstr "匹配规则" -#: admin/PageEntry.py:556 admin/PageVServer.py:721 +#: admin/PageEntry.py:556 admin/PageVServer.py:730 msgid "Security" msgstr "安全" @@ -1439,7 +1519,7 @@ msgstr "IPv6" msgid "SSL/TLS back-end" msgstr "SSL/TLS back-end" -#: admin/PageGeneral.py:197 admin/PageIndex.py:252 +#: admin/PageGeneral.py:197 admin/PageIndex.py:198 msgid "Support" msgstr "支持" @@ -1472,8 +1552,8 @@ msgid "Bind to" msgstr "监听" #: admin/PageGeneral.py:239 admin/PageGeneral.py:310 admin/plugins/bind.py:92 -#: admin/plugins/bind.py:155 admin/plugins/bind.py:157 -#: admin/plugins/ldap.py:48 admin/plugins/mysql.py:77 +#: admin/plugins/bind.py:155 admin/plugins/bind.py:157 admin/plugins/ldap.py:48 +#: admin/plugins/mysql.py:77 msgid "Port" msgstr "端口" @@ -1539,7 +1619,7 @@ msgstr "用户组" msgid "Chroot" msgstr "监禁服务器" -#: admin/PageGeneral.py:357 admin/PageVServer.py:479 +#: admin/PageGeneral.py:357 admin/PageVServer.py:483 msgid "Network" msgstr "网络" @@ -1567,178 +1647,139 @@ msgstr "连接表" msgid "Documentation" msgstr "网页目录" -#: admin/PageIndex.py:67 -msgid "You will be sent an email requesting confirmation" -msgstr "您将发送一封电子邮件确认" - -#: admin/PageIndex.py:68 -msgid "Optionally provide your name" -msgstr "请提供您的姓名" - -#: admin/PageIndex.py:70 -#, python-format -msgid "" -"There are a number of Community Mailing Lists\n" -"available for you to subscribe. You can subscribe the General Discussion\n" -"mailing list from this interface. There is where most of the discussions\n" -"take place." -msgstr "" - -#: admin/PageIndex.py:77 +#: admin/PageIndex.py:58 #, fuzzy msgid "Server is Running" msgstr "服务器运行中." -#: admin/PageIndex.py:78 +#: admin/PageIndex.py:59 #, fuzzy msgid "Server is not Running" msgstr "服务器没有启动." -#: admin/PageIndex.py:132 +#: admin/PageIndex.py:110 msgid "Stop Server" msgstr "停止服务器" -#: admin/PageIndex.py:136 +#: admin/PageIndex.py:114 msgid "Start Server" msgstr "启动服务器" -#: admin/PageIndex.py:141 +#: admin/PageIndex.py:119 #, fuzzy msgid "Hostname" msgstr "主机名称" -#: admin/PageIndex.py:143 +#: admin/PageIndex.py:121 msgid "Modified" msgstr "修改" -#: admin/PageIndex.py:145 +#: admin/PageIndex.py:123 msgid "Not found" msgstr "未找到" -#: admin/PageIndex.py:146 +#: admin/PageIndex.py:124 msgid "Config File" msgstr "配置文件" -#: admin/PageIndex.py:153 admin/plugins/server_info.py:32 +#: admin/PageIndex.py:131 admin/plugins/server_info.py:32 #: admin/plugins/server_info.py:35 msgid "Server Information" msgstr "服务器信息" -#: admin/PageIndex.py:165 +#: admin/PageIndex.py:143 msgid "Processors" msgstr "处理器" -#: admin/PageIndex.py:177 +#: admin/PageIndex.py:155 msgid "Memory" msgstr "内存" -#: admin/PageIndex.py:211 admin/plugins/dbslayer.py:51 +#: admin/PageIndex.py:189 admin/plugins/dbslayer.py:51 msgid "Language" msgstr "语言" -#: admin/PageIndex.py:231 -#, fuzzy -msgid "Mailing List Subscription" -msgstr "邮件列表订阅" - -#: admin/PageIndex.py:233 -msgid "Subscribe" -msgstr "订阅" - -#: admin/PageIndex.py:236 -msgid "Your email address" -msgstr "您的电子邮件地址" - -#: admin/PageIndex.py:237 -msgid "Your name" -msgstr "您的姓名" - -#: admin/PageIndex.py:256 +#: admin/PageIndex.py:202 #, fuzzy msgid "Getting started" msgstr "持续:stat" -#: admin/PageIndex.py:260 -msgid "Subscribe to mailing lists" +#: admin/PageIndex.py:206 +#, fuzzy +msgid "Visit the mailing list" msgstr "订阅邮件列表" -#: admin/PageIndex.py:268 +#: admin/PageIndex.py:210 #, fuzzy msgid "Report a bug" msgstr "远程主机" -#: admin/PageIndex.py:272 -#, fuzzy -msgid "Purchase commercial support" -msgstr "商业支持" - -#: admin/PageIndex.py:276 admin/PageIndex.py:280 +#: admin/PageIndex.py:214 admin/PageIndex.py:218 #, fuzzy msgid "About Cherokee" msgstr "Cherokee用户" -#: admin/PageIndex.py:289 +#: admin/PageIndex.py:227 msgid "Join the Cherokee Community:" msgstr "加入Cherokee社区" -#: admin/PageIndex.py:292 +#: admin/PageIndex.py:230 msgid "Visit the Cherokee Project Website" msgstr "访问Cherokee项目网站" -#: admin/PageIndex.py:293 +#: admin/PageIndex.py:231 msgid "Follow us on Twitter" msgstr "关注我们的Twitter" -#: admin/PageIndex.py:294 +#: admin/PageIndex.py:232 msgid "Join us on Facebook" msgstr "在Facebook加入我们" -#: admin/PageIndex.py:295 +#: admin/PageIndex.py:233 #, fuzzy msgid "Join us on Google+" msgstr "在Facebook加入我们" -#: admin/PageIndex.py:296 +#: admin/PageIndex.py:234 msgid "Fork us on Github" msgstr "" -#: admin/PageIndex.py:297 +#: admin/PageIndex.py:235 msgid "Become a member of Cherokee group on LinkedIn" msgstr "成为Cherokee在LinkedIn上的小组成员" -#: admin/PageIndex.py:298 +#: admin/PageIndex.py:236 msgid "Chat with us at irc.freenode.net" msgstr "在irc.freenode.net上同我们交谈" -#: admin/PageIndex.py:307 +#: admin/PageIndex.py:245 #, fuzzy msgid "Shutdown Cherokee-admin" msgstr "欢迎进入Cherokee管理中心" -#: admin/PageIndex.py:309 +#: admin/PageIndex.py:247 msgid "Shut down" msgstr "关闭" -#: admin/PageIndex.py:310 +#: admin/PageIndex.py:248 msgid "You are about to shut down this instance of Cherokee-admin" msgstr "你将要关闭Cherokee-admin实例" -#: admin/PageIndex.py:311 +#: admin/PageIndex.py:249 #, fuzzy msgid "Are you sure you want to proceed?" msgstr "您真的想要删除它吗?" -#: admin/PageIndex.py:314 +#: admin/PageIndex.py:252 msgid "Cherokee-admin has been shut down" msgstr "Cherokee-admin已经被关闭" -#: admin/PageIndex.py:316 +#: admin/PageIndex.py:254 #, fuzzy msgid "Shut down Cherokee-Admin" msgstr "欢迎进入Cherokee管理中心" -#: admin/PageIndex.py:329 admin/PageIndex.py:350 +#: admin/PageIndex.py:267 admin/PageIndex.py:288 msgid "Welcome to Cherokee Admin" msgstr "欢迎进入Cherokee管理中心" @@ -1823,7 +1864,7 @@ msgstr "手动" msgid "Manual configuration" msgstr "手动配置" -#: admin/PageRule.py:249 admin/PageVServer.py:158 +#: admin/PageRule.py:249 admin/PageVServer.py:162 msgid "Final" msgstr "完成" @@ -1851,7 +1892,7 @@ msgstr "克隆" msgid "Clone Selected Behavior Rule" msgstr "克隆选定规则" -#: admin/PageRule.py:314 admin/PageVServer.py:718 +#: admin/PageRule.py:314 admin/PageVServer.py:727 msgid "Behavior" msgstr "行为" @@ -1983,7 +2024,7 @@ msgstr "增加新文件" msgid "Source Usage" msgstr "资源" -#: admin/PageSource.py:253 admin/PageVServer.py:723 +#: admin/PageSource.py:253 admin/PageVServer.py:732 msgid "Virtual Server" msgstr "虚拟主机" @@ -2038,7 +2079,7 @@ msgstr "克隆选定数据源" msgid "Sources Filtering" msgstr "数据源过滤" -#: admin/PageSources.py:35 admin/PageVServer.py:141 admin/PageVServers.py:48 +#: admin/PageSources.py:35 admin/PageVServer.py:145 admin/PageVServers.py:48 #: admin/PageVServers.py:294 msgid "Virtual Servers" msgstr "虚拟主机" @@ -2060,614 +2101,623 @@ msgid "Virtual Server Filtering" msgstr "虚拟主机过滤" #: admin/PageVServer.py:44 +msgid "Reference" +msgstr "" + +#: admin/PageVServer.py:47 msgid "Nickname for the virtual server." msgstr "虚拟主机昵称" -#: admin/PageVServer.py:45 +#: admin/PageVServer.py:48 msgid "" "This directive points to the PEM-encoded Certificate file for the server " "(Full path to the file)" msgstr "PEM-encoded 认证文件路径(完整路径)" -#: admin/PageVServer.py:46 +#: admin/PageVServer.py:49 msgid "PEM-encoded Private Key file for the server (Full path to the file)" msgstr "服务器PEM-encoded私匙文件完整路径" -#: admin/PageVServer.py:47 +#: admin/PageVServer.py:50 msgid "" "File containing the trusted CA certificates, utilized for checking the " "client certificates (Full path to the file)" msgstr "" -#: admin/PageVServer.py:48 -msgid "" -"Ciphers that TLS/SSL is allowed to use. Reference. (Default enables " -"Forward Secrecy)." +#: admin/PageVServer.py:51 +msgid "Ciphers that TLSv1.2 and below is allowed to use." msgstr "" -#: admin/PageVServer.py:49 +#: admin/PageVServer.py:52 +msgid "Ciphersuites that TLSv1.3 is allowed to use." +msgstr "" + +#: admin/PageVServer.py:53 msgid "" "The cipher sequence that is specified by the server should have preference " "over the client preference. (Default: True)." msgstr "" -#: admin/PageVServer.py:50 +#: admin/PageVServer.py:54 msgid "" "Explicitly enable or disable serverside compression support. (Default: " "Disabled)." msgstr "" -#: admin/PageVServer.py:51 +#: admin/PageVServer.py:55 msgid "" "Explicitely sets the Diffie-Hellman parameters length. (Default: Let openssl " "choose)." msgstr "" -#: admin/PageVServer.py:52 +#: admin/PageVServer.py:56 #, fuzzy msgid "Skip, Tolerate, Accept or Require client certificates." msgstr "跳过,接受或要求客户端证书。" -#: admin/PageVServer.py:53 +#: admin/PageVServer.py:57 msgid "" "Limit up to which depth certificates in a chain are used during the " "verification procedure (Default: 1)" msgstr "" -#: admin/PageVServer.py:54 +#: admin/PageVServer.py:58 msgid "Allows the selection of how to generate the error responses." msgstr "选择允许如何生成错误响应。" -#: admin/PageVServer.py:55 +#: admin/PageVServer.py:59 msgid "" "Directory inside the user home directory to use as root web directory. " "Disabled if empty." msgstr "使用用户主目录作为网站根目录为空则禁止此功能。" -#: admin/PageVServer.py:56 +#: admin/PageVServer.py:60 msgid "The personal web support is currently turned on." msgstr "个人主页服务已启用" -#: admin/PageVServer.py:57 +#: admin/PageVServer.py:61 msgid "Adds a new domain name. Wildcards are allowed in the domain name." msgstr "增加一个新域名,允许在域名中使用通配符." -#: admin/PageVServer.py:58 +#: admin/PageVServer.py:62 msgid "Virtual Server root directory." msgstr "虚拟主机的根目录" -#: admin/PageVServer.py:59 +#: admin/PageVServer.py:63 msgid "" "List of name files that will be used as directory index. Eg: index.html," "index.php." msgstr "默认首页设置.例如:index.html,index.php." -#: admin/PageVServer.py:60 +#: admin/PageVServer.py:64 msgid "The maximum size, in bytes, for POST uploads. (Default: unlimited)" msgstr "最大允许上传大小,单位:字节,默认:不限制" -#: admin/PageVServer.py:61 +#: admin/PageVServer.py:65 msgid "Whether this virtual server is allowed to use Keep-alive (Default: yes)" msgstr "虚拟主机是否使用Keep-alive,默认:是" -#: admin/PageVServer.py:62 +#: admin/PageVServer.py:66 msgid "The Logging is currently enabled." msgstr "日志记录启用" -#: admin/PageVServer.py:63 +#: admin/PageVServer.py:67 msgid "Logging format. Apache compatible is highly recommended here." msgstr "日志记录格式.通常使用Apache compatible" -#: admin/PageVServer.py:64 +#: admin/PageVServer.py:68 msgid "Back-end used to store the log accesses." msgstr "保存访问日志的处理程序" -#: admin/PageVServer.py:65 +#: admin/PageVServer.py:69 msgid "Back-end used to store the log errors." msgstr "保存错误日志的处理程序" -#: admin/PageVServer.py:66 +#: admin/PageVServer.py:70 msgid "Back-end used to store the log accesses and errors." msgstr "保存错误和访问日志的处理程序" -#: admin/PageVServer.py:67 +#: admin/PageVServer.py:71 msgid "Full path to the file where the information will be saved." msgstr "信息文件保存的完整路径" -#: admin/PageVServer.py:68 +#: admin/PageVServer.py:72 msgid "Path to the executable that will be invoked on each log entry." msgstr "处理日志的程序路径" -#: admin/PageVServer.py:69 +#: admin/PageVServer.py:73 msgid "" "Whether the logger should read and use the X-Real-IP and X-Forwarded-For " "headers (send by reverse proxies)." msgstr "日志处理程序是否读取和使用X-Real-IP和X-Forwarded-For头" -#: admin/PageVServer.py:71 +#: admin/PageVServer.py:75 msgid "" "List of IP addresses and subnets that are allowed to send X-Real-IP and X-" "Forwarded-For headers." msgstr "允许发送X-Real-IP和X-Forwarded-For头的IP地址和子网." -#: admin/PageVServer.py:72 +#: admin/PageVServer.py:76 msgid "" "How to support the \"Advanced Virtual Hosting\" mechanism. (Default: off)" msgstr "是否支持高级虚拟主机特性(默认关闭)" -#: admin/PageVServer.py:73 +#: admin/PageVServer.py:77 msgid "The following variables are accepted: " msgstr "" -#: admin/PageVServer.py:74 +#: admin/PageVServer.py:78 msgid "Allows the selection of domain matching method." msgstr "选择域名匹配方式。" -#: admin/PageVServer.py:75 +#: admin/PageVServer.py:79 msgid "" "Whether or not it should collected statistics about the traffic of this " "virtual server." msgstr "是否对此虚拟主机开启统计." -#: admin/PageVServer.py:76 +#: admin/PageVServer.py:80 msgid "Time standard to use in the log file entries." msgstr "在日志文件使用时间标准" -#: admin/PageVServer.py:77 +#: admin/PageVServer.py:81 msgid "" "Remember that only \"File Exists\" rules and \"List & Send\" handlers use " "the Directory Indexes setting." msgstr "" -#: admin/PageVServer.py:78 +#: admin/PageVServer.py:82 msgid "" "Use this nickname as an additional host name for this virtual server " "(Default: yes)" msgstr "" -#: admin/PageVServer.py:79 +#: admin/PageVServer.py:83 msgid "Enforce HTTPS by using the HTTP Strict Transport Security." msgstr "" -#: admin/PageVServer.py:80 +#: admin/PageVServer.py:84 msgid "" "How long the client's browser should remember the forced HTTPS (in seconds)." msgstr "" -#: admin/PageVServer.py:81 +#: admin/PageVServer.py:85 msgid "" "Should HSTS be used in all the subdomains of this virtual server (Default: " "yes)." msgstr "" -#: admin/PageVServer.py:83 +#: admin/PageVServer.py:87 msgid "

The 'default' virtual server matches all the domain names.

" msgstr "

'default'虚拟主机将默认匹配所有域名。

" -#: admin/PageVServer.py:86 +#: admin/PageVServer.py:90 #, fuzzy msgid "Remote IP address" msgstr "LDAP目录服务器IP地址" -#: admin/PageVServer.py:87 +#: admin/PageVServer.py:91 #, fuzzy msgid "Local IP address" msgstr "您的电子邮件地址" -#: admin/PageVServer.py:88 +#: admin/PageVServer.py:92 #, fuzzy msgid "Request Protocol" msgstr "请求" -#: admin/PageVServer.py:89 +#: admin/PageVServer.py:93 msgid "Transport type: http or https" msgstr "" -#: admin/PageVServer.py:90 +#: admin/PageVServer.py:94 msgid "Port of the server serving the request" msgstr "" -#: admin/PageVServer.py:91 +#: admin/PageVServer.py:95 msgid "The query string, if exists" msgstr "" -#: admin/PageVServer.py:92 +#: admin/PageVServer.py:96 msgid "First line of HTTP request" msgstr "" -#: admin/PageVServer.py:93 +#: admin/PageVServer.py:97 msgid "Response status code" msgstr "" -#: admin/PageVServer.py:94 +#: admin/PageVServer.py:98 msgid "Time: in common log format time format" msgstr "" -#: admin/PageVServer.py:95 +#: admin/PageVServer.py:99 msgid "Time: seconds since Epoch" msgstr "" -#: admin/PageVServer.py:96 +#: admin/PageVServer.py:100 msgid "Time: milliseconds since Epoch" msgstr "" -#: admin/PageVServer.py:97 +#: admin/PageVServer.py:101 #, fuzzy msgid "Remote user (authentication)" msgstr "认证" -#: admin/PageVServer.py:98 +#: admin/PageVServer.py:102 msgid "URL path requested" msgstr "" -#: admin/PageVServer.py:99 +#: admin/PageVServer.py:103 msgid "URL path requested before any rewrite" msgstr "" -#: admin/PageVServer.py:100 +#: admin/PageVServer.py:104 #, fuzzy msgid "Virtual Server nick name" msgstr "虚拟主机昵称" -#: admin/PageVServer.py:101 +#: admin/PageVServer.py:105 msgid "Requested host (Host: header)" msgstr "" -#: admin/PageVServer.py:102 +#: admin/PageVServer.py:106 msgid "Size of the response in bytes" msgstr "" -#: admin/PageVServer.py:103 +#: admin/PageVServer.py:107 msgid "'Host:' header of the request" msgstr "" -#: admin/PageVServer.py:104 +#: admin/PageVServer.py:108 msgid "'Referrer:' header of the request" msgstr "" -#: admin/PageVServer.py:105 +#: admin/PageVServer.py:109 msgid "'User-Agent:' header of the request" msgstr "" -#: admin/PageVServer.py:106 +#: admin/PageVServer.py:110 msgid "'Cookie:' header of the request" msgstr "" -#: admin/PageVServer.py:142 +#: admin/PageVServer.py:146 msgid "Loggers" msgstr "日志" -#: admin/PageVServer.py:143 +#: admin/PageVServer.py:147 msgid "SSL cookbook" msgstr "SSL cookbook" -#: admin/PageVServer.py:147 admin/PageVServer.py:184 +#: admin/PageVServer.py:151 admin/PageVServer.py:188 msgid "Match" msgstr "匹配" -#: admin/PageVServer.py:147 +#: admin/PageVServer.py:151 msgid "Rule Match" msgstr "规则匹配" -#: admin/PageVServer.py:148 +#: admin/PageVServer.py:152 msgid "Assigned Handler" msgstr "分配处理程序" -#: admin/PageVServer.py:149 +#: admin/PageVServer.py:153 msgid "Auth" msgstr "认证" -#: admin/PageVServer.py:150 +#: admin/PageVServer.py:154 msgid "Custom Document Root" msgstr "定义网站根目录" -#: admin/PageVServer.py:150 +#: admin/PageVServer.py:154 msgid "Root" msgstr "根目录" -#: admin/PageVServer.py:151 +#: admin/PageVServer.py:155 msgid "Only HTTPS" msgstr "仅HTTPS" -#: admin/PageVServer.py:151 +#: admin/PageVServer.py:155 msgid "Secure" msgstr "安全" -#: admin/PageVServer.py:152 +#: admin/PageVServer.py:156 msgid "Enc" msgstr "压缩" -#: admin/PageVServer.py:152 +#: admin/PageVServer.py:156 msgid "Encoders" msgstr "压缩程序" -#: admin/PageVServer.py:153 +#: admin/PageVServer.py:157 #, fuzzy msgid "Cacheable" msgstr "Apache compatible" -#: admin/PageVServer.py:154 +#: admin/PageVServer.py:158 msgid "Exp" msgstr "缓存时间" -#: admin/PageVServer.py:155 +#: admin/PageVServer.py:159 msgid "Connection Timeout" msgstr "连接超时" -#: admin/PageVServer.py:156 +#: admin/PageVServer.py:160 msgid "Shaping" msgstr "流量调整" -#: admin/PageVServer.py:157 +#: admin/PageVServer.py:161 msgid "Log" msgstr "日志" -#: admin/PageVServer.py:157 +#: admin/PageVServer.py:161 msgid "Logging Enabled" msgstr "日志已启用" -#: admin/PageVServer.py:158 +#: admin/PageVServer.py:162 msgid "Rule is Final" msgstr "规则完成" -#: admin/PageVServer.py:184 +#: admin/PageVServer.py:188 #, fuzzy msgid "Match nickname" msgstr "匹配昵称" -#: admin/PageVServer.py:188 admin/PageVServer.py:717 +#: admin/PageVServer.py:192 admin/PageVServer.py:726 msgid "Host Match" msgstr "主机匹配" -#: admin/PageVServer.py:218 admin/PageVServer.py:234 admin/PageVServer.py:258 -#: admin/PageVServer.py:485 admin/PageVServer.py:519 -#: admin/plugins/method.py:99 admin/plugins/method.py:109 +#: admin/PageVServer.py:222 admin/PageVServer.py:238 admin/PageVServer.py:262 +#: admin/PageVServer.py:489 admin/PageVServer.py:523 admin/plugins/method.py:99 +#: admin/plugins/method.py:109 msgid "Method" msgstr "方式" -#: admin/PageVServer.py:226 admin/PageVServer.py:242 +#: admin/PageVServer.py:230 admin/PageVServer.py:246 #, fuzzy msgid "Remove criteria" msgstr "远程主机" -#: admin/PageVServer.py:260 +#: admin/PageVServer.py:264 #, fuzzy msgid "How to match this Virtual Server" msgstr "克隆选定虚拟主机" -#: admin/PageVServer.py:267 +#: admin/PageVServer.py:271 msgid "Add an additional matching criteria" msgstr "" -#: admin/PageVServer.py:358 +#: admin/PageVServer.py:362 msgid "Behavior Rules" msgstr "行为规则" -#: admin/PageVServer.py:367 +#: admin/PageVServer.py:371 msgid "Rule Management" msgstr "规则管理" -#: admin/PageVServer.py:393 +#: admin/PageVServer.py:397 msgid "Only accept Secure Connections" msgstr "仅允许安全连接" -#: admin/PageVServer.py:398 +#: admin/PageVServer.py:402 msgid "Encoding enabled" msgstr "启用压缩" -#: admin/PageVServer.py:404 +#: admin/PageVServer.py:408 msgid "no" msgstr "否" -#: admin/PageVServer.py:415 +#: admin/PageVServer.py:419 msgid " seconds" msgstr "秒" -#: admin/PageVServer.py:420 +#: admin/PageVServer.py:424 msgid " bytes per second" msgstr "比特/秒" -#: admin/PageVServer.py:425 +#: admin/PageVServer.py:429 msgid "Logging enabled for this rule" msgstr "记录此规则相关日志" -#: admin/PageVServer.py:430 +#: admin/PageVServer.py:434 msgid "Prevents further rule evaluation" msgstr "" -#: admin/PageVServer.py:435 +#: admin/PageVServer.py:439 msgid "Content can be cached" msgstr "" -#: admin/PageVServer.py:438 +#: admin/PageVServer.py:442 msgid "Forbids content caching" msgstr "" -#: admin/PageVServer.py:455 +#: admin/PageVServer.py:459 msgid "Virtual Server nickname" msgstr "虚拟主机昵称" -#: admin/PageVServer.py:457 +#: admin/PageVServer.py:461 msgid "Server ID" msgstr "服务器ID" -#: admin/PageVServer.py:463 +#: admin/PageVServer.py:467 msgid "Directory Indexes" msgstr "目录列表" -#: admin/PageVServer.py:465 admin/plugins/fullpath.py:119 +#: admin/PageVServer.py:469 admin/plugins/fullpath.py:119 msgid "Paths" msgstr "路径" -#: admin/PageVServer.py:471 +#: admin/PageVServer.py:475 msgid "Neither are in use at the moment." msgstr "" -#: admin/PageVServer.py:476 +#: admin/PageVServer.py:480 msgid "Keep-alive" msgstr "" -#: admin/PageVServer.py:477 +#: admin/PageVServer.py:481 msgid "Max Upload Size" msgstr "最大上传大小" -#: admin/PageVServer.py:487 admin/plugins/evhost.py:33 +#: admin/PageVServer.py:491 admin/plugins/evhost.py:33 msgid "Advanced Virtual Hosting" msgstr "高级虚拟主机" -#: admin/PageVServer.py:521 +#: admin/PageVServer.py:525 msgid "Error Handling hook" msgstr "错误处理程序" -#: admin/PageVServer.py:532 admin/consts.py:233 admin/consts.py:250 +#: admin/PageVServer.py:536 admin/consts.py:232 admin/consts.py:249 msgid "Disabled" msgstr "禁止" -#: admin/PageVServer.py:536 +#: admin/PageVServer.py:540 msgid "Write errors to" msgstr "将错误日志写入到" -#: admin/PageVServer.py:540 admin/PageVServer.py:579 +#: admin/PageVServer.py:544 admin/PageVServer.py:583 msgid "Filename" msgstr "文件名" -#: admin/PageVServer.py:542 admin/PageVServer.py:582 +#: admin/PageVServer.py:546 admin/PageVServer.py:586 msgid "Command" msgstr "命令" -#: admin/PageVServer.py:548 +#: admin/PageVServer.py:552 msgid "Error Logging" msgstr "错误日志" -#: admin/PageVServer.py:559 +#: admin/PageVServer.py:563 msgid "Format" msgstr "格式" -#: admin/PageVServer.py:566 +#: admin/PageVServer.py:570 msgid "Write accesses to" msgstr "将访问日志写入" -#: admin/PageVServer.py:589 +#: admin/PageVServer.py:593 #, fuzzy msgid "Hide" msgstr "头" -#: admin/PageVServer.py:589 +#: admin/PageVServer.py:593 #, fuzzy msgid "Show macros" msgstr "显示用户组" -#: admin/PageVServer.py:598 +#: admin/PageVServer.py:602 msgid "Template: " msgstr "模板" -#: admin/PageVServer.py:600 +#: admin/PageVServer.py:604 msgid "Access Logging" msgstr "访问日志" -#: admin/PageVServer.py:606 +#: admin/PageVServer.py:610 msgid "Time standard" msgstr "时间标准" -#: admin/PageVServer.py:607 admin/PageVServer.py:687 admin/consts.py:228 +#: admin/PageVServer.py:611 admin/PageVServer.py:696 admin/consts.py:227 msgid "Accept" msgstr "接受" -#: admin/PageVServer.py:607 +#: admin/PageVServer.py:611 msgid "Accept Forwarded IPs" msgstr "允许转发的IP地址" -#: admin/PageVServer.py:610 +#: admin/PageVServer.py:614 msgid "Do not check" msgstr "不检查" -#: admin/PageVServer.py:619 +#: admin/PageVServer.py:623 msgid "Logging Options" msgstr "日志选项" -#: admin/PageVServer.py:655 admin/wizards/ssl_test.py:136 +#: admin/PageVServer.py:659 admin/wizards/ssl_test.py:136 msgid "Certificate" msgstr "证书" -#: admin/PageVServer.py:656 +#: admin/PageVServer.py:660 msgid "Certificate key" msgstr "证书密匙" -#: admin/PageVServer.py:661 +#: admin/PageVServer.py:665 msgid "Required SSL/TLS Values" msgstr "包含SSL/TLS值" -#: admin/PageVServer.py:666 +#: admin/PageVServer.py:674 +msgid "Ciphersuites" +msgstr "" + +#: admin/PageVServer.py:675 msgid "Ciphers" msgstr "密码" -#: admin/PageVServer.py:667 +#: admin/PageVServer.py:676 #, fuzzy msgid "Prefer" msgstr "安装目录" -#: admin/PageVServer.py:667 +#: admin/PageVServer.py:676 #, fuzzy msgid "Server Preference" msgstr "服务器流量" -#: admin/PageVServer.py:668 +#: admin/PageVServer.py:677 msgid "Client Certs. Request" msgstr "客户端证书.请求" -#: admin/PageVServer.py:669 +#: admin/PageVServer.py:678 #, fuzzy msgid "Compression" msgstr "压缩等级" -#: admin/PageVServer.py:670 +#: admin/PageVServer.py:679 msgid "DH length" msgstr "" -#: admin/PageVServer.py:673 +#: admin/PageVServer.py:682 msgid "CA List" msgstr "证书列表" -#: admin/PageVServer.py:676 +#: admin/PageVServer.py:685 msgid "Verify Depth" msgstr "验证级别" -#: admin/PageVServer.py:682 +#: admin/PageVServer.py:691 msgid "Advanced Options" msgstr "高级选项" -#: admin/PageVServer.py:687 +#: admin/PageVServer.py:696 #, fuzzy msgid "Enable HSTS" msgstr "允许" -#: admin/PageVServer.py:690 +#: admin/PageVServer.py:699 msgid "HSTS Max-Age" msgstr "" -#: admin/PageVServer.py:690 +#: admin/PageVServer.py:699 msgid "One year" msgstr "" -#: admin/PageVServer.py:691 +#: admin/PageVServer.py:700 #, fuzzy msgid "Include Subdomains" msgstr "提交您的域名" -#: admin/PageVServer.py:691 +#: admin/PageVServer.py:700 msgid "Include all" msgstr "" -#: admin/PageVServer.py:697 +#: admin/PageVServer.py:706 msgid "HTTP Strict Transport Security (HSTS)" msgstr "" -#: admin/PageVServer.py:716 +#: admin/PageVServer.py:725 msgid "Basics" msgstr "基础" -#: admin/PageVServer.py:719 +#: admin/PageVServer.py:728 msgid "Error Handler" msgstr "错误处理程序" @@ -2962,8 +3012,8 @@ msgstr "软件名称+平台" msgid "Full Server string" msgstr "完整服务器信息" -#: admin/consts.py:51 admin/consts.py:80 admin/consts.py:97 -#: admin/consts.py:111 admin/plugins/mysql.py:45 +#: admin/consts.py:51 admin/consts.py:80 admin/consts.py:97 admin/consts.py:111 +#: admin/plugins/mysql.py:45 msgid "None" msgstr "无" @@ -3163,191 +3213,191 @@ msgstr "动态" msgid "Automatic" msgstr "自动" -#: admin/consts.py:145 admin/plugins/error_redir.py:35 +#: admin/consts.py:144 admin/plugins/error_redir.py:35 msgid "External" msgstr "外部" -#: admin/consts.py:146 admin/plugins/error_redir.py:34 +#: admin/consts.py:145 admin/plugins/error_redir.py:34 msgid "Internal" msgstr "内部" -#: admin/consts.py:189 admin/plugins/header.py:116 admin/plugins/proxy.py:94 +#: admin/consts.py:188 admin/plugins/header.py:118 admin/plugins/proxy.py:94 #: admin/plugins/proxy.py:144 admin/plugins/redir.py:76 #: admin/plugins/redir.py:106 admin/plugins/request.py:31 #: admin/plugins/url_arg.py:76 admin/plugins/url_arg.py:95 msgid "Regular Expression" msgstr "正则表达式" -#: admin/consts.py:191 +#: admin/consts.py:190 msgid "File Exists" msgstr "文件已存在" -#: admin/consts.py:192 +#: admin/consts.py:191 msgid "HTTP Method" msgstr "HTTP方式" -#: admin/consts.py:193 admin/plugins/bind.py:76 admin/plugins/bind.py:129 +#: admin/consts.py:192 admin/plugins/bind.py:76 admin/plugins/bind.py:129 msgid "Incoming IP/Port" msgstr "入站 IP/端口" -#: admin/consts.py:194 +#: admin/consts.py:193 msgid "SSL / TLS" msgstr "" -#: admin/consts.py:195 admin/plugins/fullpath.py:66 +#: admin/consts.py:194 admin/plugins/fullpath.py:66 #: admin/plugins/fullpath.py:101 msgid "Full Path" msgstr "完整路径" -#: admin/consts.py:196 admin/plugins/from.py:71 +#: admin/consts.py:195 admin/plugins/from.py:71 msgid "Connected from" msgstr "连接来自" -#: admin/consts.py:197 +#: admin/consts.py:196 msgid "URL Argument" msgstr "URL参数" -#: admin/consts.py:198 +#: admin/consts.py:197 msgid "GeoIP" msgstr "" -#: admin/consts.py:202 +#: admin/consts.py:201 msgid "Match Nickname" msgstr "匹配昵称" -#: admin/consts.py:203 +#: admin/consts.py:202 msgid "Wildcards" msgstr "通配符" -#: admin/consts.py:205 +#: admin/consts.py:204 msgid "Server IP" msgstr "服务器IP" -#: admin/consts.py:209 admin/consts.py:255 +#: admin/consts.py:208 admin/consts.py:254 msgid "Not set" msgstr "未设置" -#: admin/consts.py:210 +#: admin/consts.py:209 msgid "Already expired on 1970" msgstr "不缓存" -#: admin/consts.py:211 +#: admin/consts.py:210 msgid "Do not expire until 2038" msgstr "永久缓存" -#: admin/consts.py:212 +#: admin/consts.py:211 msgid "Custom value" msgstr "自定义值" -#: admin/consts.py:216 +#: admin/consts.py:215 msgid "No TLS/SSL" msgstr "无TLS/SSL" -#: admin/consts.py:217 +#: admin/consts.py:216 msgid "OpenSSL / libssl" msgstr "OpenSSL / libssl" -#: admin/consts.py:221 admin/util.py:91 +#: admin/consts.py:220 admin/util.py:91 msgid "Off" msgstr "关闭" -#: admin/consts.py:222 +#: admin/consts.py:221 msgid "Enhanced Virtual Hosting" msgstr "增强性虚拟主机" -#: admin/consts.py:226 +#: admin/consts.py:225 msgid "Skip" msgstr "跳过" -#: admin/consts.py:227 +#: admin/consts.py:226 msgid "Tolerate" msgstr "" -#: admin/consts.py:229 +#: admin/consts.py:228 msgid "Require" msgstr "包含" -#: admin/consts.py:234 +#: admin/consts.py:233 msgid "RRDtool graphs" msgstr "RRDtool绘图" -#: admin/consts.py:238 +#: admin/consts.py:237 msgid "Local time" msgstr "本地时间" -#: admin/consts.py:239 +#: admin/consts.py:238 msgid "UTC: Coordinated Universal Time" msgstr "UTC:协调世界时" -#: admin/consts.py:243 +#: admin/consts.py:242 msgid "JSON" msgstr "" -#: admin/consts.py:244 +#: admin/consts.py:243 msgid "Python" msgstr "" -#: admin/consts.py:245 admin/wizards/List.py:91 +#: admin/consts.py:244 admin/wizards/List.py:91 msgid "PHP" msgstr "" -#: admin/consts.py:246 +#: admin/consts.py:245 msgid "Ruby" msgstr "" -#: admin/consts.py:251 +#: admin/consts.py:250 msgid "POST tracker" msgstr "" -#: admin/consts.py:256 +#: admin/consts.py:255 msgid "Public" msgstr "" -#: admin/consts.py:257 +#: admin/consts.py:256 msgid "Private" msgstr "" -#: admin/consts.py:258 +#: admin/consts.py:257 msgid "No Cache" msgstr "" -#: admin/consts.py:263 +#: admin/consts.py:262 msgid "0 - No compression" msgstr "" -#: admin/consts.py:264 +#: admin/consts.py:263 msgid "1" msgstr "" -#: admin/consts.py:265 +#: admin/consts.py:264 msgid "2" msgstr "" -#: admin/consts.py:266 +#: admin/consts.py:265 msgid "3" msgstr "" -#: admin/consts.py:267 +#: admin/consts.py:266 msgid "4" msgstr "" -#: admin/consts.py:268 +#: admin/consts.py:267 msgid "5" msgstr "" -#: admin/consts.py:269 +#: admin/consts.py:268 msgid "6" msgstr "" -#: admin/consts.py:270 +#: admin/consts.py:269 msgid "7" msgstr "" -#: admin/consts.py:271 +#: admin/consts.py:270 msgid "8" msgstr "" -#: admin/consts.py:272 +#: admin/consts.py:271 msgid "9 - Max compression" msgstr "" @@ -3524,66 +3574,66 @@ msgstr "不允许生成列表的文件" msgid "Only listing" msgstr "仅列表" -#: admin/plugins/dirlist.py:49 admin/plugins/dirlist.py:50 #: admin/plugins/dirlist.py:51 admin/plugins/dirlist.py:52 #: admin/plugins/dirlist.py:53 admin/plugins/dirlist.py:54 +#: admin/plugins/dirlist.py:55 admin/plugins/dirlist.py:56 #: admin/plugins/redir.py:105 msgid "Show" msgstr "显示" -#: admin/plugins/dirlist.py:49 +#: admin/plugins/dirlist.py:51 msgid "Show Size" msgstr "显示大小" -#: admin/plugins/dirlist.py:50 +#: admin/plugins/dirlist.py:52 msgid "Show Date" msgstr "显示日期" -#: admin/plugins/dirlist.py:51 +#: admin/plugins/dirlist.py:53 msgid "Show User" msgstr "显示用户" -#: admin/plugins/dirlist.py:52 +#: admin/plugins/dirlist.py:54 msgid "Show Group" msgstr "显示用户组" -#: admin/plugins/dirlist.py:53 +#: admin/plugins/dirlist.py:55 msgid "Show Backup files" msgstr "显示备份文件" -#: admin/plugins/dirlist.py:54 +#: admin/plugins/dirlist.py:56 msgid "Show Hidden files" msgstr "显示隐藏文件" -#: admin/plugins/dirlist.py:55 +#: admin/plugins/dirlist.py:58 admin/plugins/file.py:44 msgid "Allow symbolic links" msgstr "允许符号链接" -#: admin/plugins/dirlist.py:56 +#: admin/plugins/dirlist.py:59 msgid "Redirect symbolic links" msgstr "重定向符号链接" -#: admin/plugins/dirlist.py:60 +#: admin/plugins/dirlist.py:63 msgid "Listing" msgstr "列表" -#: admin/plugins/dirlist.py:65 +#: admin/plugins/dirlist.py:68 msgid "Theme" msgstr "主题" -#: admin/plugins/dirlist.py:66 +#: admin/plugins/dirlist.py:69 msgid "Icons dir" msgstr "图标目录" -#: admin/plugins/dirlist.py:67 +#: admin/plugins/dirlist.py:70 msgid "Notice files" msgstr "通知文件" -#: admin/plugins/dirlist.py:68 +#: admin/plugins/dirlist.py:71 msgid "Hidden files" msgstr "隐藏文件" -#: admin/plugins/dirlist.py:72 +#: admin/plugins/dirlist.py:75 msgid "Theming" msgstr "主题化" @@ -3716,7 +3766,7 @@ msgstr "FastCGI 详情" msgid "Enables an internal I/O cache that improves performance." msgstr "允许内部I/O缓存来提升性能" -#: admin/plugins/file.py:45 +#: admin/plugins/file.py:49 msgid "File Sending" msgstr "文件发送中" @@ -3801,26 +3851,26 @@ msgid "" "header entry." msgstr "" -#: admin/plugins/header.py:65 +#: admin/plugins/header.py:67 #, fuzzy msgid "Matches a Regular Expression" msgstr "正则表达式" -#: admin/plugins/header.py:66 +#: admin/plugins/header.py:68 msgid "Is Provided" msgstr "" -#: admin/plugins/header.py:104 +#: admin/plugins/header.py:106 #, fuzzy msgid "Full header" msgstr "文件名" -#: admin/plugins/header.py:107 +#: admin/plugins/header.py:109 #, fuzzy msgid "Complete Header" msgstr "隐藏请求头" -#: admin/plugins/header.py:154 +#: admin/plugins/header.py:156 #, python-format msgid "Header %(header)s is provided" msgstr "" @@ -3943,7 +3993,7 @@ msgid "Database name containing the user/password pair list." msgstr "数据库包含用户名称/密码对清单。" #: admin/plugins/mysql.py:41 -#, fuzzy +#, fuzzy, python-brace-format msgid "" "SQL command to execute. ${user} is replaced with the user name, and " "${passwd} is replaced with the user supplied password." @@ -4354,20 +4404,16 @@ msgstr "" msgid "Accepted Domains" msgstr "" -#: admin/server.py:68 +#: admin/server.py:70 #, python-format msgid "Server %(version)s running.. PID=%(pid)d Port=%(scgi_port)s" msgstr "" -#: admin/server.py:70 +#: admin/server.py:72 #, python-format msgid "Server %(version)s running.. PID=%(pid)d Socket=%(scgi_port)s" msgstr "" -#: admin/server.py:144 -msgid "Incorrect parameters: PORT CONFIG_FILE" -msgstr "" - #: admin/util.py:91 msgid "On" msgstr "" @@ -4744,18 +4790,16 @@ msgstr "" #: admin/wizards/alfresco.py:45 admin/wizards/coldfusion.py:46 #: admin/wizards/concrete5.py:47 admin/wizards/django.py:44 #: admin/wizards/glassfish.py:45 admin/wizards/mailman.py:48 -#: admin/wizards/mono.py:46 admin/wizards/php.py:43 -#: admin/wizards/symfony.py:51 admin/wizards/uwsgi.py:61 -#: admin/wizards/zend.py:47 +#: admin/wizards/mono.py:46 admin/wizards/php.py:43 admin/wizards/symfony.py:51 +#: admin/wizards/uwsgi.py:61 admin/wizards/zend.py:47 msgid "Host name of the virtual server that is about to be created." msgstr "" #: admin/wizards/alfresco.py:46 admin/wizards/coldfusion.py:45 #: admin/wizards/concrete5.py:46 admin/wizards/django.py:43 #: admin/wizards/glassfish.py:46 admin/wizards/mailman.py:47 -#: admin/wizards/mono.py:45 admin/wizards/php.py:42 -#: admin/wizards/symfony.py:50 admin/wizards/uwsgi.py:60 -#: admin/wizards/zend.py:46 +#: admin/wizards/mono.py:45 admin/wizards/php.py:42 admin/wizards/symfony.py:50 +#: admin/wizards/uwsgi.py:60 admin/wizards/zend.py:46 msgid "New Virtual Server Details" msgstr "" @@ -5615,3 +5659,30 @@ msgstr "" #: admin/wizards/zend.py:49 msgid "Web directory where you want Zend to be accessible. (Example: /zend)" msgstr "" + +#, fuzzy +#~ msgid "Disable %s" +#~ msgstr "禁止" + +#, fuzzy +#~ msgid "Mailing List Subscription" +#~ msgstr "邮件列表订阅" + +#~ msgid "Optionally provide your name" +#~ msgstr "请提供您的姓名" + +#, fuzzy +#~ msgid "Purchase commercial support" +#~ msgstr "商业支持" + +#~ msgid "Subscribe" +#~ msgstr "订阅" + +#~ msgid "You will be sent an email requesting confirmation" +#~ msgstr "您将发送一封电子邮件确认" + +#~ msgid "Your email address" +#~ msgstr "您的电子邮件地址" + +#~ msgid "Your name" +#~ msgstr "您的姓名"