diff -Nru plinth-0.7.2/actions/dynamicdns plinth-0.8.1/actions/dynamicdns --- plinth-0.7.2/actions/dynamicdns 2015-12-23 11:34:40.000000000 +0000 +++ plinth-0.8.1/actions/dynamicdns 2016-02-16 03:55:53.000000000 +0000 @@ -65,7 +65,7 @@ basicauth=0 ignoreCertError=0 - while getopts ":s:d:u:p:I:U:c:b:" opt; do + while getopts ":s:d:u:P:I:U:c:b:p" opt; do case ${opt} in s) if [ "${OPTARG}" != "${EMPTYSTRING}" ];then @@ -80,6 +80,9 @@ u) user=${OPTARG} ;; + P) + pass=${OPTARG} + ;; p) if read -t 0; then IFS= read -r pass @@ -164,11 +167,11 @@ echo "NAT no" >> ${HELPERCFG} # if this file is added ez-ipupdate will take ip form this interface { - "interface=${default_interface}" + echo "interface=${default_interface}" # if this line is added to config file, ez-ipupdate will be launched on startup via init.d - "daemon" - "execute=${0} success" - } > ${out_file} + echo "daemon" + echo "execute=${0} success" + } >> ${out_file} fi fi } @@ -186,10 +189,10 @@ ipurl="" if [ ! -z "${cfgfile}" ];then - host=$(grep host "${cfgfile}" 2> /dev/null |cut -d = -f 2) - server=$(grep server "${cfgfile}" 2> /dev/null |cut -d = -f 2 |grep -v ^\'\') - user=$(grep user "${cfgfile}" 2> /dev/null |cut -d = -f 2 |cut -d : -f 1 ) - pass=$(grep user "${cfgfile}" 2> /dev/null |cut -d = -f 2 |cut -d : -f 2) + host=$(grep ^host= "${cfgfile}" 2> /dev/null | cut -d = -f 2-) + server=$(grep ^server= "${cfgfile}" 2> /dev/null | cut -d = -f 2- | grep -v ^\'\') + user=$(grep ^user= "${cfgfile}" 2> /dev/null | cut -d = -f 2- | cut -d : -f 1 ) + pass=$(grep ^user= "${cfgfile}" 2> /dev/null | cut -d = -f 2- | cut -d : -f 2-) fi if [ ! -z ${HELPERCFG} ];then @@ -293,7 +296,7 @@ doUpdate() { local dnsentry=$(nslookup "${host}"|tail -n2|grep A|sed s/[^0-9.]//g) - if [ "${dnsentry}" = "${wanip}" ];then + if [ "${dnsentry}" = "${wanip}" ];then return fi if [ ! -z "${server}" ];then @@ -335,8 +338,8 @@ doGetWANIP if [ "$(grep ^NAT ${HELPERCFG} | awk '{print $2}')" = "no" ];then #if we are not behind a NAT device and we use gnudip, start the daemon tool - local gnudipServer=$(grep server ${cfgfile} 2> /dev/null |cut -d = -f 2 |grep -v ^\'\') - if [ -f ${CFG} -a ! -z "${gnudipServer}" ];then + gnudipServer=$(grep ^server= ${cfgfile} 2> /dev/null | cut -d = -f 2- |grep -v ^\'\') + if [ ! -f ${CFG} -a ! -z "${gnudipServer}" ];then mv ${CFG_disabled} ${CFG} /etc/init.d/${TOOLNAME} start fi @@ -371,10 +374,10 @@ fi # if we don't know our WAN IP do a blind update once a hour if [ "${wanip}" = ${NOIP} ];then - uptime=$(cut -d . -f 1 /proc/uptime) + currenttime=$(date +%s) LAST=0 [ -f ${LASTUPDATE} ] && LAST=$(cat ${LASTUPDATE}) - diff=$((uptime - LAST)) + diff=$((currenttime - LAST)) if [ ${diff} -gt ${UPDATEMINUTESUNKNOWN} ];then doUpdate fi @@ -389,7 +392,7 @@ success) date=$(date) echo "last update done (${date})" > ${STATUSFILE} - awk '{print $1}' /proc/uptime |cut -d . -f 1 > ${LASTUPDATE} + date +%s > ${LASTUPDATE} # if called from cronjob, the current IP is given as parameter if [ $# -eq 1 ];then echo "${1}" > ${IPFILE} @@ -428,6 +431,7 @@ echo "-s Gnudip Server address" echo "-d Domain to be updated" echo "-u Account username" + echo "-P Account password" echo "-p Read Account Password from stdin" echo "-I A URL which returns the IP of the client who is requesting" echo "-U The update URL (a HTTP GET on this URL will be done)" diff -Nru plinth-0.7.2/actions/letsencrypt plinth-0.8.1/actions/letsencrypt --- plinth-0.7.2/actions/letsencrypt 1970-01-01 00:00:00.000000000 +0000 +++ plinth-0.8.1/actions/letsencrypt 2016-02-16 03:55:53.000000000 +0000 @@ -0,0 +1,188 @@ +#!/usr/bin/python3 +# +# This file is part of Plinth. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# + +""" +Configuration helper for Let's Encrypt. +""" + +import argparse +import json +import os +import subprocess +import sys + +from plinth import action_utils + +TEST_MODE = False +LIVE_DIRECTORY = '/etc/letsencrypt/live/' +APACHE_PREFIX = '/etc/apache2/sites-available/' +APACHE_CONFIGURATION = ''' + + + ServerAdmin webmaster@localhost + ServerName {domain} + DocumentRoot /var/www/html + + Options FollowSymLinks + AllowOverride None + + + Options Indexes FollowSymLinks MultiViews + AllowOverride None + Order allow,deny + allow from all + + ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ + + AllowOverride None + Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch + Order allow,deny + Allow from all + + ErrorLog ${{APACHE_LOG_DIR}}/error.log + # Possible values include: debug, info, notice, warn, error, crit, alert, emerg. + LogLevel warn + CustomLog ${{APACHE_LOG_DIR}}/ssl_access.log combined + # GnuTLS Switch: Enable/Disable SSL/TLS for this virtual host. + GnuTLSEnable On + # Automatically obtained certficates from Let's Encrypt + GnuTLSCertificateFile /etc/letsencrypt/live/{domain}/fullchain.pem + GnuTLSKeyFile /etc/letsencrypt/live/{domain}/privkey.pem + # See http://www.outoforder.cc/projects/apache/mod_gnutls/docs/#GnuTLSPriorities + GnuTLSPriorities NORMAL + + +''' + + +def parse_arguments(): + """Return parsed command line arguments as dictionary.""" + parser = argparse.ArgumentParser() + subparsers = parser.add_subparsers(dest='subcommand', help='Sub command') + + subparsers.add_parser( + 'get-status', help='Return the status of configured domains.') + revoke_parser = subparsers.add_parser( + 'revoke', help='Disable and domain and revoke its certificate.') + revoke_parser.add_argument( + '--domain', help='Domain name to revoke certificate for') + obtain_parser = subparsers.add_parser( + 'obtain', help='Obtain certficate for a domain and setup website.') + obtain_parser.add_argument( + '--domain', help='Domain name to obtain certificate for') + + return parser.parse_args() + + +def get_certficate_expiry(domain): + """Return the expiry date of a certificate.""" + certificate_file = os.path.join(LIVE_DIRECTORY, domain, 'cert.pem') + output = subprocess.check_output(['openssl', 'x509', '-enddate', '-noout', + '-in', certificate_file]) + return output.decode().strip().split('=')[1] + + +def subcommand_get_status(_): + """Return a JSON dictionary of currently configured domains.""" + try: + domains = os.listdir(LIVE_DIRECTORY) + except OSError: + domains = [] + + domains = [domain for domain in domains + if os.path.isdir(os.path.join(LIVE_DIRECTORY, domain))] + + domain_status = {} + for domain in domains: + domain_status[domain] = { + 'certificate_available': True, + 'expiry_date': get_certficate_expiry(domain), + 'web_enabled': + action_utils.webserver_is_enabled(domain, kind='site') + } + + print(json.dumps({'domains': domain_status})) + + +def subcommand_revoke(arguments): + """Disable a domain and revoke the certificate.""" + domain = arguments.domain + + command = ['letsencrypt', 'revoke', '--domain', domain, '--cert-path', + os.path.join(LIVE_DIRECTORY, domain, 'cert.pem')] + if TEST_MODE: + command.append('--staging') + + process = subprocess.Popen(command, stdout=subprocess.PIPE, + stderr=subprocess.PIPE) + stdout, stderr = process.communicate() + if process.returncode: + print(stderr.decode(), file=sys.stderr) + sys.exit(1) + + action_utils.webserver_disable(domain, kind='site') + + +def subcommand_obtain(arguments): + """Obtain a certificate for a domain and setup website.""" + domain = arguments.domain + + command = [ + 'letsencrypt', 'certonly', '--agree-tos', + '--register-unsafely-without-email', '--domain', arguments.domain, + '--authenticator', 'webroot', '--webroot-path', '/var/www/html/', + '--renew-by-default'] + if TEST_MODE: + command.append('--staging') + + process = subprocess.Popen(command, stdout=subprocess.PIPE, + stderr=subprocess.PIPE) + stdin, stderr = process.communicate() + if process.returncode: + print(stderr.decode(), file=sys.stderr) + sys.exit(1) + + setup_webserver_config(domain) + + action_utils.webserver_enable(domain, kind='site') + + +def setup_webserver_config(domain): + """Create SSL web server configuration for a domain. + + Do so only if there is no configuration existing. + """ + file_name = os.path.join(APACHE_PREFIX, domain + '.conf') + if os.path.isfile(file_name): + return + + with open(file_name, 'w') as file_handle: + file_handle.write(APACHE_CONFIGURATION.format(domain=domain)) + + +def main(): + """Parse arguments and perform all duties.""" + arguments = parse_arguments() + + subcommand = arguments.subcommand.replace('-', '_') + subcommand_method = globals()['subcommand_' + subcommand] + subcommand_method(arguments) + + +if __name__ == '__main__': + main() diff -Nru plinth-0.7.2/actions/monkeysphere plinth-0.8.1/actions/monkeysphere --- plinth-0.7.2/actions/monkeysphere 1970-01-01 00:00:00.000000000 +0000 +++ plinth-0.8.1/actions/monkeysphere 2016-02-16 03:55:53.000000000 +0000 @@ -0,0 +1,122 @@ +#!/usr/bin/python3 +# +# This file is part of Plinth. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# + +""" +Configuration helper for monkeysphere. +""" + +import argparse +import json +import os +import subprocess + + +def parse_arguments(): + """Return parsed command line arguments as dictionary.""" + parser = argparse.ArgumentParser() + subparsers = parser.add_subparsers(dest='subcommand', help='Sub command') + + host_show_keys = subparsers.add_parser( + 'host-show-keys', help='Show host key fingerprints') + host_show_keys.add_argument( + 'key_ids', nargs='*', help='Optional list of KEYIDs') + + host_import_ssh_key = subparsers.add_parser( + 'host-import-ssh-key', help='Import host SSH key') + host_import_ssh_key.add_argument( + 'hostname', help='Fully-qualified hostname') + + host_publish_key = subparsers.add_parser( + 'host-publish-key', help='Push host key to keyserver') + host_publish_key.add_argument( + 'key_ids', nargs='*', help='Optional list of KEYIDs') + + return parser.parse_args() + + +def subcommand_host_show_keys(arguments): + """Show host key fingerprints.""" + try: + output = subprocess.check_output( + ['monkeysphere-host', 'show-keys'] + arguments.key_ids, + stderr=subprocess.DEVNULL) + except subprocess.CalledProcessError: + # no keys available + print(json.dumps({'keys': []})) + return + + # parse output + keys = [dict()] + lines = output.decode().strip().split('\n') + for line in lines: + if line.startswith('pub'): + data = line.lstrip('pub').split() + keys[-1]['pub'] = data[0] + keys[-1]['date'] = data[1] + elif line.startswith('uid'): + keys[-1]['uid'] = line.lstrip('uid').strip() + elif line.startswith('OpenPGP fingerprint:'): + keys[-1]['pgp_fingerprint'] = line.lstrip('Open PGP fingerprint:') + elif line.startswith('ssh fingerprint:'): + data = line.lstrip('ssh fingerprint:').split() + keys[-1]['ssh_key_size'] = data[0] + keys[-1]['ssh_fingerprint'] = data[1] + keys[-1]['ssh_key_type'] = data[2].strip('()') + elif line == '': + keys.append(dict()) + + print(json.dumps({'keys': keys})) + + +def subcommand_host_import_ssh_key(arguments): + """Import host SSH key.""" + output = subprocess.check_output( + ['monkeysphere-host', 'import-key', + '/etc/ssh/ssh_host_rsa_key', arguments.hostname]) + print(output.decode()) + + +def subcommand_host_publish_key(arguments): + """Push host key to keyserver.""" + # setting TMPDIR as workaround for Debian bug #656750 + proc = subprocess.Popen( + ['monkeysphere-host', 'publish-keys'] + arguments.key_ids, + stdout=subprocess.PIPE, stderr=subprocess.PIPE, + env=dict( + os.environ, + TMPDIR='/var/lib/monkeysphere/authentication/tmp/', + MONKEYSPHERE_PROMPT='false')) + output, error = proc.communicate() + output, error = output.decode(), error.decode() + if proc.returncode != 0: + raise Exception(output, error) + + print(output) + + +def main(): + """Parse arguments and perform all duties.""" + arguments = parse_arguments() + + subcommand = arguments.subcommand.replace('-', '_') + subcommand_method = globals()['subcommand_' + subcommand] + subcommand_method(arguments) + + +if __name__ == '__main__': + main() diff -Nru plinth-0.7.2/actions/repro plinth-0.8.1/actions/repro --- plinth-0.7.2/actions/repro 1970-01-01 00:00:00.000000000 +0000 +++ plinth-0.8.1/actions/repro 2016-02-16 03:55:53.000000000 +0000 @@ -0,0 +1,84 @@ +#!/usr/bin/python3 +# +# This file is part of Plinth. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# + +""" +Configuration helper for repro SIP proxy. +""" + +import argparse + +from plinth import action_utils + +CONFIG = '/etc/repro/repro.config' + + +def parse_arguments(): + """Return parsed command line arguments as dictionary.""" + parser = argparse.ArgumentParser() + subparsers = parser.add_subparsers(dest='subcommand', help='Sub command') + + subparsers.add_parser('setup', help='Configure repro') + subparsers.add_parser('enable', help='Enable repro service') + subparsers.add_parser('disable', help='Disable repro service') + + return parser.parse_args() + + +def subcommand_setup(_): + """Configure repro.""" + with open(CONFIG, 'r') as conf: + lines = conf.readlines() + + with open(CONFIG, 'w') as conf: + for line in lines: + if line.startswith('Database1Path'): + # workaround for Debian bug #803113 + conf.write('Database1Path = /var/lib/repro\n') + elif line.startswith('TLSPort'): + conf.write('TLSPort = 5061\n') + elif line.startswith('DisableHttpAuth'): + # let apache handle authentication + conf.write('DisableHttpAuth = true\n') + else: + conf.write(line) + + action_utils.service_restart('repro') + action_utils.webserver_enable('repro-plinth') + + +def subcommand_enable(_): + """Start service.""" + action_utils.service_enable('repro') + + +def subcommand_disable(_): + """Stop service.""" + action_utils.service_disable('repro') + + +def main(): + """Parse arguments and perform all duties.""" + arguments = parse_arguments() + + subcommand = arguments.subcommand.replace('-', '_') + subcommand_method = globals()['subcommand_' + subcommand] + subcommand_method(arguments) + + +if __name__ == '__main__': + main() diff -Nru plinth-0.7.2/actions/ssh plinth-0.8.1/actions/ssh --- plinth-0.7.2/actions/ssh 1970-01-01 00:00:00.000000000 +0000 +++ plinth-0.8.1/actions/ssh 2016-02-16 03:55:53.000000000 +0000 @@ -0,0 +1,99 @@ +#!/usr/bin/python3 +# +# This file is part of Plinth. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# + +""" +Configuration helper for SSH server. +""" + +import argparse +import os +import re +import shutil +import stat +import subprocess +import sys + + +def parse_arguments(): + """Return parsed command line arguments as dictionary.""" + parser = argparse.ArgumentParser() + subparsers = parser.add_subparsers(dest='subcommand', help='Sub command') + + get_keys = subparsers.add_parser('get-keys', help='Get SSH authorized keys') + get_keys.add_argument('--username') + + set_keys = subparsers.add_parser('set-keys', help='Set SSH authorized keys') + set_keys.add_argument('--username') + set_keys.add_argument('--keys') + + return parser.parse_args() + + +def _assert_valid_username(username): + """Verify that username is a valid one.""" + if not re.match(r'^[a-z][-a-z0-9_]*$', username): + print('Bad username') + sys.exit(1) + + +def subcommand_get_keys(arguments): + """Get SSH authorized keys.""" + user = arguments.username + _assert_valid_username(user) + + path = os.path.join(os.path.expanduser('~' + user), + '.ssh', 'authorized_keys') + try: + with open(path, 'r') as file_handle: + print(file_handle.read()) + except FileNotFoundError: + pass + + +def subcommand_set_keys(arguments): + """Set SSH authorized keys.""" + user = arguments.username + _assert_valid_username(user) + + subprocess.check_call(['mkhomedir_helper', user]) + + ssh_folder = os.path.join(os.path.expanduser('~' + user), '.ssh') + key_file_path = os.path.join(ssh_folder, 'authorized_keys') + + if not os.path.exists(ssh_folder): + os.makedirs(ssh_folder) + shutil.chown(ssh_folder, user, 'users') + + with open(key_file_path, 'w') as file_handle: + file_handle.write(arguments.keys) + + shutil.chown(key_file_path, user, 'users') + os.chmod(key_file_path, stat.S_IRUSR | stat.S_IWUSR) + + +def main(): + """Parse arguments and perform all duties.""" + arguments = parse_arguments() + + subcommand = arguments.subcommand.replace('-', '_') + subcommand_method = globals()['subcommand_' + subcommand] + subcommand_method(arguments) + + +if __name__ == '__main__': + main() diff -Nru plinth-0.7.2/actions/tor plinth-0.8.1/actions/tor --- plinth-0.7.2/actions/tor 2015-12-23 11:34:40.000000000 +0000 +++ plinth-0.8.1/actions/tor 2016-02-16 03:55:53.000000000 +0000 @@ -26,11 +26,13 @@ import os import re import socket +import time from plinth import action_utils -from plinth.modules.tor.tor import get_augeas, get_real_apt_uri_path, \ - iter_apt_uris, APT_TOR_PREFIX +from plinth.modules.tor import is_enabled, is_running, get_augeas, \ + get_real_apt_uri_path, iter_apt_uris, APT_TOR_PREFIX +SERVICE_FILE = '/etc/firewalld/services/tor-{0}.xml' TOR_CONFIG = '/etc/tor/torrc' TOR_STATE_FILE = '/var/lib/tor/state' TOR_AUTH_COOKIE = '/var/run/tor/control.authcookie' @@ -42,16 +44,17 @@ subparsers = parser.add_subparsers(dest='subcommand', help='Sub command') subparsers.add_parser('setup', help='Setup Tor configuration') - subparsers.add_parser('enable', help='Enable and start Tor service') - subparsers.add_parser('disable', help='Disable and stop Tor service') - subparsers.add_parser('get-hs', help='Get hidden service') - subparsers.add_parser('enable-hs', help='Enable hidden service') - subparsers.add_parser('disable-hs', help='Disable hidden service') subparsers.add_parser('get-ports', help='Get list of Tor ports') - subparsers.add_parser('enable-apt-transport-tor', - help='Enable package download over Tor') - subparsers.add_parser('disable-apt-transport-tor', - help='Disable package download over Tor') + subparsers.add_parser('get-hs', help='Get hidden service') + + configure = subparsers.add_parser('configure', help='Configure Tor') + configure.add_argument('--service', choices=['enable', 'disable'], + help='Configure Tor service') + configure.add_argument('--hidden-service', choices=['enable', 'disable'], + help='Configure hidden service') + configure.add_argument('--apt-transport-tor', + choices=['enable', 'disable'], + help='Configure package download over Tor') return parser.parse_args() @@ -89,25 +92,123 @@ conffile.writelines(lines) action_utils.service_restart('tor') + _update_ports() + + +def subcommand_get_ports(_): + """Get list of Tor ports.""" + ports = get_ports() + for name, number in ports.items(): + print(name, number) + + +def subcommand_get_hs(_): + """Print currently configured Tor hidden service information""" + print(get_hidden_service()) + + +def subcommand_configure(arguments): + """Configure Tor.""" + if arguments.service == 'disable': + _disable() + + restart = arguments.service == None + if arguments.hidden_service == 'enable': + _enable_hs(restart=restart) + elif arguments.hidden_service == 'disable': + _disable_hs(restart=restart) + + if arguments.service == 'enable': + _enable() + + if arguments.apt_transport_tor == 'enable': + _enable_apt_transport_tor() + elif arguments.apt_transport_tor == 'disable': + _disable_apt_transport_tor() + + +def get_ports(): + """Return dict mapping port names to numbers.""" + ports = {} + try: + ports['orport'] = _get_orport() + except Exception: + pass + + try: + with open(TOR_STATE_FILE, 'r') as state_file: + for line in state_file: + matches = re.match( + r'^\s*TransportProxy\s+(\S*)\s+\S+:(\d+)\s*$', line) + if matches: + ports[matches.group(1)] = matches.group(2) + except FileNotFoundError: + pass + + return ports + + +def _get_orport(): + """Return the ORPort by querying running instance.""" + cookie = open(TOR_AUTH_COOKIE, 'rb').read() + cookie = codecs.encode(cookie, 'hex').decode() + + commands = '''AUTHENTICATE {cookie} +GETINFO net/listeners/or +QUIT +'''.format(cookie=cookie) + tor_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + tor_socket.connect(('localhost', 9051)) + tor_socket.send(commands.encode()) + response = tor_socket.recv(1024) + tor_socket.close() + + line = response.split(b'\r\n')[1].decode() + matches = re.match(r'.*="[^:]+:(\d+)"', line) + return matches.group(1) + + +def get_hidden_service(): + """Return a string with configured Tor hidden service information""" + hs_dir = None + hs_ports = [] + + try: + with open(TOR_CONFIG, 'r') as conf_file: + for line in conf_file: + if line.startswith('HiddenServiceDir'): + hs_dir = line.split()[1] + elif line.startswith('HiddenServicePort'): + hs_ports.append(line.split()[1]) + except FileNotFoundError: + return 'error' + + if not hs_dir: + return '' + + try: + with open(os.path.join(hs_dir, 'hostname'), 'r') as conf_file: + hs_hostname = conf_file.read().strip() + except Exception: + return 'error' + + return hs_hostname + ' ' + ','.join(hs_ports) -def subcommand_enable(_): + +def _enable(): """Enable and start the service.""" action_utils.service_enable('tor') + _update_ports() -def subcommand_disable(_): +def _disable(): """Disable and stop the service.""" - subcommand_disable_apt_transport_tor(_) + _disable_apt_transport_tor() action_utils.service_disable('tor') -def subcommand_get_hs(_): - """Print currently configured Tor hidden service information""" - print(get_hidden_service()) - - -def subcommand_enable_hs(_): +def _enable_hs(restart=True): """Enable Tor hidden service""" if get_hidden_service(): return @@ -124,10 +225,21 @@ with open(TOR_CONFIG, 'w') as conffile: conffile.writelines(lines) - action_utils.service_restart('tor') + if restart: + if is_enabled() and is_running(): + action_utils.service_restart('tor') + + # wait until hidden service information is available + tries = 0 + while get_hidden_service() in ('', 'error'): + tries += 1 + if tries >= 12: + return + + time.sleep(10) -def subcommand_disable_hs(_): +def _disable_hs(restart=True): """Disable Tor hidden service""" if not get_hidden_service(): return @@ -159,55 +271,12 @@ with open(TOR_CONFIG, 'w') as conffile: conffile.writelines(filtered_lines) - action_utils.service_restart('tor') - - -def get_hidden_service(): - """Return a string with configured Tor hidden service information""" - hs_dir = None - hs_ports = [] - - try: - with open(TOR_CONFIG, 'r') as conf_file: - for line in conf_file: - if line.startswith('HiddenServiceDir'): - hs_dir = line.split()[1] - elif line.startswith('HiddenServicePort'): - hs_ports.append(line.split()[1]) - except FileNotFoundError: - return 'error' - - if not hs_dir: - return '' - - try: - with open(os.path.join(hs_dir, 'hostname'), 'r') as conf_file: - hs_hostname = conf_file.read().strip() - except Exception: - return 'error' - - return hs_hostname + ' ' + ','.join(hs_ports) - - -def subcommand_get_ports(_): - """Return a list of running Tor ports.""" - try: - print('orport', _get_orport()) - except Exception: - pass - - try: - with open(TOR_STATE_FILE, 'r') as state_file: - for line in state_file: - matches = re.match( - r'^\s*TransportProxy\s+(\S*)\s+\S+:(\d+)\s*$', line) - if matches: - print('{0} {1}'.format(matches.group(1), matches.group(2))) - except FileNotFoundError: - pass + if restart: + if is_enabled() and is_running(): + action_utils.service_restart('tor') -def subcommand_enable_apt_transport_tor(_): +def _enable_apt_transport_tor(): """Enable package download over Tor.""" try: aug = get_augeas() @@ -225,7 +294,7 @@ aug.save() -def subcommand_disable_apt_transport_tor(_): +def _disable_apt_transport_tor(): """Disable package download over Tor.""" try: aug = get_augeas() @@ -242,25 +311,40 @@ aug.save() -def _get_orport(): - """Return the ORPort by querying running instance.""" - cookie = open(TOR_AUTH_COOKIE, 'rb').read() - cookie = codecs.encode(cookie, 'hex').decode() - - commands = '''AUTHENTICATE {cookie} -GETINFO net/listeners/or -QUIT -'''.format(cookie=cookie) - - tor_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) - tor_socket.connect(('localhost', 9051)) - tor_socket.send(commands.encode()) - response = tor_socket.recv(1024) - tor_socket.close() - - line = response.split(b'\r\n')[1].decode() - matches = re.match(r'.*="[^:]+:(\d+)"', line) - return matches.group(1) +def _update_ports(): + """Update firewall service information.""" + ready = False + tries = 0 + + # port information may not be available immediately after Tor started + while not ready: + ports = get_ports() + ready = 'orport' in ports and 'obfs3' in ports and 'obfs4' in ports + if ready: + break + + tries += 1 + if tries >= 12: + return + + time.sleep(10) + + lines = """ + + Tor - {0} + + +""" + for name, number in ports.items(): + try: + with open(SERVICE_FILE.format(name), 'w') as service_file: + service_file.writelines(lines.format(name, number)) + except FileNotFoundError: + return + + # XXX: We should ideally do firewalld reload instead. However, + # firewalld seems to fail to successfully reload sometimes. + action_utils.service_restart('firewalld') def main(): diff -Nru plinth-0.7.2/actions/upgrades plinth-0.8.1/actions/upgrades --- plinth-0.7.2/actions/upgrades 2015-12-23 11:34:40.000000000 +0000 +++ plinth-0.8.1/actions/upgrades 2016-02-16 03:55:53.000000000 +0000 @@ -61,7 +61,11 @@ sys.exit(1) try: - subprocess.check_call(['unattended-upgrades', '-v']) + subprocess.Popen( + ['unattended-upgrades', '-v'], + stdin=subprocess.DEVNULL, stdout=subprocess.DEVNULL, + stderr=subprocess.DEVNULL, close_fds=True, + start_new_session=True) except FileNotFoundError: print('Error: unattended-upgrades is not available.', file=sys.stderr) sys.exit(2) diff -Nru plinth-0.7.2/data/etc/apache2/conf-available/repro-plinth.conf plinth-0.8.1/data/etc/apache2/conf-available/repro-plinth.conf --- plinth-0.7.2/data/etc/apache2/conf-available/repro-plinth.conf 1970-01-01 00:00:00.000000000 +0000 +++ plinth-0.8.1/data/etc/apache2/conf-available/repro-plinth.conf 2016-02-16 03:55:53.000000000 +0000 @@ -0,0 +1,15 @@ +## +## On all sites, provide repro admin interface on a path: /repro +## Only allow users of admin LDAP group. +## + + ProxyPass http://localhost:5080 + + AuthType basic + AuthName "FreedomBox Login" + AuthBasicProvider ldap + AuthLDAPUrl "ldap:///ou=users,dc=thisbox?uid" + AuthLDAPGroupAttribute memberUid + AuthLDAPGroupAttributeIsDN off + Require ldap-group cn=admin,ou=groups,dc=thisbox + diff -Nru plinth-0.7.2/data/etc/plinth/modules-enabled/letsencrypt plinth-0.8.1/data/etc/plinth/modules-enabled/letsencrypt --- plinth-0.7.2/data/etc/plinth/modules-enabled/letsencrypt 1970-01-01 00:00:00.000000000 +0000 +++ plinth-0.8.1/data/etc/plinth/modules-enabled/letsencrypt 2016-02-16 03:55:53.000000000 +0000 @@ -0,0 +1 @@ +plinth.modules.letsencrypt diff -Nru plinth-0.7.2/data/etc/plinth/modules-enabled/monkeysphere plinth-0.8.1/data/etc/plinth/modules-enabled/monkeysphere --- plinth-0.7.2/data/etc/plinth/modules-enabled/monkeysphere 1970-01-01 00:00:00.000000000 +0000 +++ plinth-0.8.1/data/etc/plinth/modules-enabled/monkeysphere 2016-02-16 03:55:53.000000000 +0000 @@ -0,0 +1 @@ +plinth.modules.monkeysphere diff -Nru plinth-0.7.2/data/etc/plinth/modules-enabled/repro plinth-0.8.1/data/etc/plinth/modules-enabled/repro --- plinth-0.7.2/data/etc/plinth/modules-enabled/repro 1970-01-01 00:00:00.000000000 +0000 +++ plinth-0.8.1/data/etc/plinth/modules-enabled/repro 2016-02-16 03:55:53.000000000 +0000 @@ -0,0 +1 @@ +plinth.modules.repro diff -Nru plinth-0.7.2/data/usr/lib/firewalld/services/sip-plinth.xml plinth-0.8.1/data/usr/lib/firewalld/services/sip-plinth.xml --- plinth-0.7.2/data/usr/lib/firewalld/services/sip-plinth.xml 1970-01-01 00:00:00.000000000 +0000 +++ plinth-0.8.1/data/usr/lib/firewalld/services/sip-plinth.xml 2016-02-16 03:55:53.000000000 +0000 @@ -0,0 +1,7 @@ + + + SIP + The Session Initiaion Protocol (SIP) is commonly used in Internet telephony for audio/video calls and instant messaging. Enable this if you are running a SIP proxy, registrar, redirector or gateway server over an unencrypted channel. + + + diff -Nru plinth-0.7.2/data/usr/lib/firewalld/services/sip-tls-plinth.xml plinth-0.8.1/data/usr/lib/firewalld/services/sip-tls-plinth.xml --- plinth-0.7.2/data/usr/lib/firewalld/services/sip-tls-plinth.xml 1970-01-01 00:00:00.000000000 +0000 +++ plinth-0.8.1/data/usr/lib/firewalld/services/sip-tls-plinth.xml 2016-02-16 03:55:53.000000000 +0000 @@ -0,0 +1,7 @@ + + + SIP over TLS/DTLS + The Session Initiaion Protocol (SIP) is commonly used in Internet telephony for audio/video calls and instant messaging. Enable this if you are running a SIP proxy, registrar, redirector or gateway server over a channel encrypted using TLS or DTLS. + + + diff -Nru plinth-0.7.2/debian/changelog plinth-0.8.1/debian/changelog --- plinth-0.7.2/debian/changelog 2015-12-25 14:02:39.000000000 +0000 +++ plinth-0.8.1/debian/changelog 2016-02-16 18:39:23.000000000 +0000 @@ -1,3 +1,13 @@ +plinth (0.8.1-1) unstable; urgency=low + + [ James Valleroy ] + * Skip filter-pristine-tar step for new upstream. + * New upstream version 0.8.1. + * Add docbook-utils as build dependency. + * Add packagekit as dependency. + + -- Federico Ceratto Tue, 16 Feb 2016 18:38:53 +0000 + plinth (0.7.2-1) unstable; urgency=low [ James Valleroy ] diff -Nru plinth-0.7.2/debian/control plinth-0.8.1/debian/control --- plinth-0.7.2/debian/control 2015-12-25 14:02:39.000000000 +0000 +++ plinth-0.8.1/debian/control 2016-02-16 18:39:23.000000000 +0000 @@ -13,6 +13,7 @@ , dblatex , dh-python , dh-systemd + , docbook-utils , gir1.2-networkmanager-1.0 , gir1.2-packagekitglib-1.0 , libjs-bootstrap @@ -31,8 +32,8 @@ , xmlto Standards-Version: 3.9.6 Homepage: https://github.com/freedombox/Plinth/ -Vcs-Git: git://anonscm.debian.org/freedombox/plinth.git -Vcs-Browser: http://anonscm.debian.org/gitweb/?p=freedombox/plinth.git;a=summary +Vcs-Git: https://anonscm.debian.org/git/freedombox/plinth.git +Vcs-Browser: https://anonscm.debian.org/gitweb/?p=freedombox/plinth.git;a=summary Package: plinth Architecture: all @@ -50,6 +51,7 @@ , libjs-jquery , libjs-modernizr , network-manager + , packagekit , ppp , pppoe , python3-augeas diff -Nru plinth-0.7.2/debian/rules plinth-0.8.1/debian/rules --- plinth-0.7.2/debian/rules 2015-12-25 14:02:39.000000000 +0000 +++ plinth-0.8.1/debian/rules 2016-02-16 18:39:23.000000000 +0000 @@ -10,4 +10,4 @@ dh_installinit --onlyscripts new-upstream: - gbp import-orig --uscan --verbose --pristine-tar + gbp import-orig --uscan --verbose --pristine-tar --no-filter-pristine-tar diff -Nru plinth-0.7.2/doc/freedombox-manual.xml plinth-0.8.1/doc/freedombox-manual.xml --- plinth-0.7.2/doc/freedombox-manual.xml 2015-12-23 11:34:40.000000000 +0000 +++ plinth-0.8.1/doc/freedombox-manual.xml 2016-02-16 03:55:53.000000000 +0000 @@ -7,7 +7,7 @@
FreedomBox Introduction - FreedomBox is a personal server that protects your privacy. It is a free software stack, a subset of the Debian universal operating system, that can be installed in many flavors of cheap and power-efficient hardware. The simplicity of setting up and operating a FreedomBox is similar to that of a smart phone. + FreedomBox is a personal server that protects your privacy. It is a free software stack, a subset of the Debian universal operating system, that can be installed in many flavors of inexpensive and power-efficient hardware. The simplicity of setting up and operating a FreedomBox is similar to that of a smart phone.
Smart Router FreedomBox runs in a physical computer and can route your traffic. It can sit between various devices at home such as mobiles, laptops and TVs and the Internet replacing a home wireless router. By routing traffic, FreedomBox can remove tracking advertisements and malicious web bugs before they ever reach your devices. FreedomBox can cloak your location and protect your anonymity by "onion routing" your traffic over Tor. FreedomBox provides a VPN server that you can use while you are away from home to keep your traffic secret on untrusted public wireless networks and to securely access various devices at home. It can also be carried along with your laptop and used to connect to public networks at work, school, or office to avail its services. It could be used in a village to provide communications throughout the village. In future, FreedomBox intends to provide support for alternative ways of connecting to the Internet such as Mesh networks. @@ -41,22 +41,30 @@ On first boot, the FreedomBox will perform initial setup and then reboot. This may take several minutes. - After the FreedomBox has rebooted, you can access Plinth through your web browser. + After the FreedomBox has rebooted, you can access its web interface (called Plinth) through your web browser. If your computer is connected directly to the FreedomBox through a second (LAN) ethernet port, you can browse to: or . - If your computer supports mDNS (GNU/Linux, Mac OSX and Windows with mDNS software installed), you can browse to: . + If your computer supports mDNS (GNU/Linux, Mac OSX and Windows with mDNS software installed), you can browse to: (or ) If neither of these methods are available, then you will need to figure out the IP address of your FreedomBox. You can use the "nmap" program to find its IP address: nmap -p 80 --open -sV 192.168.0.0/24 + Your FreedomBox will show up as an IP address with an open tcp port 80 using Apache httpd service on Debian, such as the example below which would make it accessible at : + Nmap scan report for 192.168.0.165 + Host is up (0.00088s latency). + PORT STATE SERVICE VERSION + 80/tcp open http Apache httpd 2.4.17 ((Debian)) - When you first access Plinth, you will see a welcome page that asks you to provide some basic information for setting up your FreedomBox. + On accessing Plinth your browser will warn you that it communicates securely but that it regards the security certificate for doing so as invalid. This is a fact you need to accept because the certificate is auto generated on the box and therefore "self-signed" (the browser might also use words such as "untrusted", "not private", "privacy error" or "unknown issuer/authority"). Telling your browser that you are aware of this might involve pressing buttons such as "I understand the Risks", "proceed to ... (unsafe)" or "Add exception". + + + On the intial access you will see a welcome page that asks you to provide some basic information for setting up your FreedomBox. After completing the form, you will be logged in to Plinth and able to access apps and configuration through the interface. @@ -95,10 +103,39 @@ Release Notes The following are the release notes for each FreedomBox version.
- Version 0.7 (unreleased) + Version 0.8 (2016-02) - Translations! + Added Quassel, an IRC client that stays connected to IRC networks and can synchronize multiple frontends. + + + Improved first boot user interface. + + + Fixed Transmission RPC whitelist issue. + + + Added translations for Turkish, Chinese, and Russian. Fixed and updated translations in other languages. + + + Added Monkeysphere, which uses PGP web of trust for SSH host key verification. + + + Added Let's Encrypt, to obtain certificates for domains, so that browser certificate warnings can be avoided. + + + Added repro, a SIP server for audio and video calls. + + + Allow users to set their SSH public keys, so they can login over SSH without a password. + + +
+
+ Version 0.7 (2015-12-13) + + + Translations! Full translations of the interface in Danish, Dutch, French, German and Norwegian Bokmål, and partial Telugu. Support for OLinuXino A20 MICRO and LIME2 @@ -298,7 +335,7 @@
Download and Install - You may either use FreedomBox on one of the supported hardware, install it on a Debian machine, or deploy on a virtual machine. + Wellcome to the FreedomBox download page. You may either install FreedomBox on one of the supported inexpensive hardware, on a Linux Debian operating system, or deploy on a virtual machine. Installing on Debian is easy because FreedomBox is available as packages. On hardware, you may need a little bit of technical expertise to setup. What we are requiring is to buy a device and plug in an SD card. In case of trouble, please read and interact with the Questions and Answers page based on Freedombox-discuss mailing list archives.
Downloading on Debian If you are installing on Debian, you don't need to download these images. Instead read instructions on setting up FreedomBox on Debian. @@ -336,7 +373,7 @@ Finally, verify your downloaded image with its signature file .sig. For example: - $ gpg --verify freedombox-unstable_2015-01-15_beaglebone-armhf-card.tar.bz2.sig freedombox-unstable_2015-01-15_beaglebone-armhf-card.tar.bz2 + $ gpg --verify freedombox-unstable-free_2015-12-13_cubietruck-armhf.img.xz.sig freedombox-unstable-free_2015-12-13_cubietruck-armhf.img.xz gpg: Signature made Thursday 15 January 2015 09:27:50 AM IST using RSA key ID 0C9BC971 gpg: Good signature from "Sunil Mohan Adapa <sunil@medhas.org>" gpg: WARNING: This key is not certified with a trusted signature! @@ -388,15 +425,14 @@ Decompress the downloaded image using tar: - $ tar -xjvf freedombox-unstable_2015-08-06_beaglebone-armhf-card.tar.bz2 - The above command is an example for the beaglebone image built on 2015-08-06. Your downloaded file name will be different. + $ xz -d freedombox-unstable-free_2015-12-13_cubietruck-armhf.img.xz + The above command is an example for the cubietruck image built on 2015-12-13. Your downloaded file name will be different. Copy the image to your card. Double check and make sure you don't write to your computer's main storage (such as /dev/sda). Also make sure that you don't run this step as root to avoid potentially overriding data on your hard drive due to a mistake in identifying the device or errors while typing the command. USB disks and SD cards inserted into the system should typically be write accessible to normal users. If you don't have permission to write to your SD card as a user, you may need to run this command as root. In this case triple check everything before you run the command. Another safety precaution is to unplug all external disks except the SD card before running the command. For example, if your SD card is /dev/sdf as noted in the first step above, then to copy the image, run: - $ cd build -$ dd bs=1M if=freedombox-unstable_2015-08-06_beaglebone-armhf-card.img of=/dev/sdf conv=fdatasync - The above command is an example for the beaglebone image built on 2015-08-06. Your image file name will be different. + $ dd bs=1M if=freedombox-unstable-free_2015-12-13_cubietruck-armhf.img of=/dev/sdf conv=fdatasync + The above command is an example for the cubietruck image built on 2015-12-13. Your image file name will be different. When picking a device, use the drive-letter destination, like /dev/sdf, not a numbered destination, like /dev/sdf1. The device without a number refers to the entire device, while the device with a number refers to a specific partition. We want to use the whole device. Downloaded images contain complete information about how many partitions there should be, their sizes and types. You don't have to format your SD card or create partitions. All the data on the SD card will be wiped off during the write process. @@ -415,6 +451,10 @@
Anonymity Network (Tor)
+ What is Tor? + Tor is a network of server operated by volunteers. It allows users of these servers to improve their privacy and security while surfing on the Internet. You and your friends are able to access to your FreedomBox via Tor network without revealing its IP address. Activating Tor application on your FreedomBox, you will be able to offer remote services (chat, wiki, file sharing, etc...) without showing your location. This application will give you a better protection than a public web server because you will be less exposed to intrusive people on the web. +
+
Using Tor to browse anonymously Tor Browser is the recommended way to browse the web using Tor. You can download the Tor Browser from and follow the instructions on that site to install and run it.
@@ -431,10 +471,35 @@
+ Deluge +
+ What is Deluge? + Your FreedomBox provides a Deluge application to enable. Deluge is a lightweight Bit Torrent client. Bit Torrent is a communications protocol using peer-to-peer (P2P) file sharing. P2P is a system that aims to interconnect end-user machines. Highly configurable, Deluge offers functionalities in the form of plugins. +
+
+
+ Transmission +
+ What is Transmission ? + In addition to Deluge Bit Torrent, your FreedomBox provides a Transmission application to enable. Transmission is a lightweight Bit Torrent client allowing end-user machine to share files (documents, pictures, sounds, videos and programs). Transmission is well known for its simplicity and a default configuration that "Just Works". +
+
+
+ Shaarli +
+ What is Shaarli? + Shaarli is personal (single-user) bookmarking application to install on your FreedomBox. It can also be used for micro-blogging, pastebin, online notepad and snippet archive. Shaarli is designed as a no-database delicious clone. As such, it provides very fast services, easy backup and import/export links as desktop or mobile browser bookmarks. Links stored can be public or private. Shaarli delivers ATOM and RSS feeds from its minimalist interface. +
+
+
Chat Server (XMPP)
+ What is XMPP? + XMPP is a federated protocol for Instant Messaging. This means that users who have accounts on one server, can talk to users that are on another server. +
+
Setting the Domain Name - XMPP is a federated protocol for Instant Messaging. This means that users who have accounts on one server, can talk to users that are on another server. However, for this to work, your FreedomBox needs to have a Domain Name that can be accessed over the public Internet. You can read more about obtaining a Domain Name in the Dynamic DNS section of this manual. + For XMPP to work, your FreedomBox needs to have a Domain Name that can be accessed over the public Internet. You can read more about obtaining a Domain Name in the Dynamic DNS section of this manual. Once you have a Domain Name, you can tell your FreedomBox to use it by setting the Domain Name in the System Config. Please note that Pagekite does not support the XMPP protocol at this time.
@@ -445,9 +510,12 @@
Dynamic DNS - In order reach a server on the Internet, the server needs to have permanent address also know as the static IP address. Many Internet service providers don't provide home users with a static IP address or they charge more providing a static IP address. Instead they provide the home user with an IP address that changes every time the user connects to the Internet. Clients wishing to contact the server will have difficulty reaching the server. - Dynamic DNS service providers assist in working around a problem. First they provide you with a domain name, such as 'myhost.example.org'. Then they associate your IP address, whenever it changes, with this domain name. Then anyone intending to reach the server will be to contact the server using the domain name 'myhost.example.org' which always points to the latest IP address of the server. - For this to work, every time you connect to the Internet, you will have to tell your Dynamic DNS provider what your current IP address is. Hence you need special software on your server to perform this operation. The Dynamic DNS function in FreedomBox will allow users without a static public IP address to push the current public IP address to a Dynamic DNS Server. This allows you to expose services on FreedomBox, such as ownCloud, to the Internet. +
+ What is Dynamic DNS? + In order to reach a server on the Internet, the server needs to have permanent address also know as the static IP address. Many Internet service providers don't provide home users with a static IP address or they charge more providing a static IP address. Instead they provide the home user with an IP address that changes every time the user connects to the Internet. Clients wishing to contact the server will have difficulty reaching the server. + Dynamic DNS service providers assist in working around a problem. First they provide you with a domain name, such as 'myhost.example.org'. Then they associate your IP address, whenever it changes, with this domain name. Then anyone intending to reach the server will be to contact the server using the domain name 'myhost.example.org' which always points to the latest IP address of the server. + For this to work, every time you connect to the Internet, you will have to tell your Dynamic DNS provider what your current IP address is. Hence you need special software on your server to perform this operation. The Dynamic DNS function in FreedomBox will allow users without a static public IP address to push the current public IP address to a Dynamic DNS Server. This allows you to expose services on FreedomBox, such as ownCloud, to the Internet. +
GnuDIP vs. Update URL There are two main mechanism to notify the Dynamic DNS server of your new IP address; using the GnuDIP protocol and using the Update URL mechanism. @@ -511,50 +579,72 @@
+ Roundcube +
+ What is Roundcube? + RoundCube is a browser-based multilingual email client with an application-like user interface. RoundCube is using the Internet Message Access Protocol (IMAP) to access e-mail on a remote mail server. It supports MIME to send files, and provides particularly address book, folder management, message searching and spell checking. +
+
+
+ ownCloud +
+ What is ownCloud? + ownCloud is a self-hosted file sync and share server. It provides access to your data through a platform to view, sync and share across devices. Calendars and Contacts feature will help you keeping google at a nice distance. ownCloud's functionalities are native or available via plugins (Collaborative Editing, Play Music, Watch Movies, Store Passwords, Dashboard, Mozilla Sync...) via +
+
+ Installation + Clicking on the ownCloud application in Plinth will show an installation prompt. Proceed to install. After the installation, visit the /owncloud link provided in the ownCloud page. First time installation wizard will show up asking for administrator username and password to setup (no additional details such as database configuration are requested). After providing the details, you will be logged. You will be able to start using the ownCloud and create more users. +
+ External Storage + ownCloud's external storage plugin allows you to expose the contents of a hard drive or those of an online storage account as a folder. Following are the steps required to setup such storage. + + + Mount your hard drive or external storage to any fixed directory on the system. + + + Install two packages needed via the 'apt-get' on the SSH command line shell (this step will not be needed in future): + + + $ sudo apt-get install php-google-api-php-client php-dropbox + + + + + Goto ownCloud Apps section and enable 'External Storage Support' plugin. + + + Goto 'Admin' section and add your hard drive mount path in the external storage section. This folder will now show up in your folders list to access and sync across devices. + + +
+
+
+
PageKite - PageKite is free Software solution for tunneling HTTP, HTTPS and SSH servers through firewalls and NAT. - See PageKite website. +
+ What is PageKite? + PageKite makes local websites and services publicly accessible immediately without creating yourself a public IP address. PageKite provides "Kites" and "Services". Kites aims to make accessible in a second a web page (for instance foo.pagekite.me). Services can expose a file or a folder. Technically speaking, PageKite is free Software solution for tunneling HTTP, HTTPS and SSH servers through firewalls and NAT. +
+
+ Use PageKite + See PageKite website. +
Secure Shell - FreedomBox runs openssh-server server by default allowing remote logins from all interfaces. If your hardware device is connected to a monitor and a keyboard, you may login directly as well. Regular operation of FreedomBox does not require you to use the shell. However, some tasks or identifying a problem may require you to login to a shell. +
+ What is Secure Shell? + FreedomBox runs openssh-server server by default allowing remote logins from all interfaces. If your hardware device is connected to a monitor and a keyboard, you may login directly as well. Regular operation of FreedomBox does not require you to use the shell. However, some tasks or identifying a problem may require you to login to a shell. +
Default User Account - FreedomBox is bundled with a preset user account. This user also has superuser privileges via sudo. The default credentials are: - - - - - - - - - Username - - - - - Password - - - - - - fbx - - - frdm - - - - - - - - Change the password - - Soon after you get your FreedomBox working, you must change the default password for the fbx user. If you fail to do this, since the password is public knowledge, anyone will be able to take control of your device. - + The pre-built FreedomBox images have a default user account called "fbx". However the password is not set for this account, so it will not be possible to log in with this account by default. + There is a script included in the freedom-maker program, that will allow you to set the password for this account, if it is needed. To set a password for the "fbx" user: + 1. Decompress the image file. + 2. Get a copy of freedom-maker from . + 3. Run sudo ./bin/passwd-in-image <image-file> fbx. + 4. Copy the image file to SD card and boot device as normal. + The "fbx" user also has superuser privileges via sudo.
Logging In @@ -583,8 +673,26 @@
+ Mumble +
+ What is Mumble? + Mumble is a voice chat software. Primarily intended for use while gaming, it is suitable for simple talking with high audio quality, noise suppression, encrypted communication, public/private-key authentication by default, and "wizards" to configure your microphone for instance. A user can be marked as a "priority speaker" within a channel. +
+
+
+ Privoxy +
+ What is Privoxy? + Privoxy is a software for security, privacy, and accurate control over the web. It provides a much more powerful web proxy (anonymity on the web) than what your browser can offer. Privoxy "is a proxy that is primarily focused on privacy enhancement, ad and junk elimination and freeing the user from restrictions placed on his activities" (source: Privoxy FAQ). Learning about networking protocols like HTTP, about HTML, and "Regular Expressions" can help a lot using Privoxy. +
+
+
Wiki & Blog (Ikiwiki)
+ What is Ikiwiki? + Ikiwiki converts wiki pages into HTML pages suitable for publishing on a website. It provides particularly blogging, podcasting, calendars and a large selection of plugins. +
+
Creating a wiki or blog You can create a wiki or blog to be hosted on your FreedomBox through the Wiki & Blog (Ikiwiki) page in Plinth. The first time you visit this page, it will ask to install packages required by Ikiwiki. After the package install has completed, select the Create tab. You can select the type to be Wiki or Blog. Also type in a name for the wiki or blog, and the username and password for the wiki's/blog's admin account. Then click Update setup and you will see the wiki/blog added to your list. Note that each wiki/blog has its own admin account. @@ -602,24 +710,27 @@
- Unhosted - From : - - Also known as "serverless", "client-side", or "static" web apps, unhosted web apps do not send your user data to their server. Either you connect your own server at runtime, or your data stays within the browser. - - Note: This module is not yet part of mainline FreedomBox, but available for testing via . + Unhosted Storage
- Set up remoteStorage - Your FreedomBox contains the restore remoteStorage server, which means that it can serve as your personal backend for Unhosted apps. Make sure the package is installed in your Plinth. - Then create a remoteStorage account at https://<yourdomain>/restore/. - Warning: These user accounts are currently not integrated with Plinth user management, and public sign-up is enabled! + What is Unhosted? + Unhosted is a way to uncouple web applications from data. No matter where a web application is served from, the data can be stored on an Unhosted storage server of user's choice. Unhosted web apps do not send your user data to their server and are hence known as "serverless", "client-side", or "static" web apps. Either you connect your own server at runtime, or your data stays within the browser. Your FreedomBox can become your Unhosted storage server using a remoteStorage server know as reStore. + + This module is currently disabled in FreedomBox as the package required for reStore server is not available in Debian yet. The package is available for testing via + +
+
+ Setup + Your FreedomBox contains a remoteStorage server called reStore, that can serve as your personal storage server for Unhosted web apps. To setup reStore, simply install and enable in FreedomBox web UI. After the setup, create an account by visiting the link provided on the Unhosted app page https://<yourdomain>/restore/. + + User accounts are currently not integrated with Plinth user management, and public sign-up is enabled! +
Try Unhosted apps - Once your FreedomBox is set up, and both PageKite and remoteStorage are running, try one of the following Unhosted apps (more are listed at ): + Once Unhosted is setup on FreedomBox and when FreedomBox is accessible by a domain name (such by using PageKite, Dynamic DNS or Tor Hidden Service), try one of the following Unhosted web apps (more are listed at ): - (a notepad) + (a note taking application) (list your favorite drinks) @@ -628,7 +739,7 @@ (a simple todo list) - To connect the Unhosted app to your remoteStorage, click on the remoteStorage icon and type your address <user>@<yourdomain>, e.g.: + To connect the Unhosted app to your FreedomBox's Unhosted storage, click on the remoteStorage icon and type your address <user>@<yourdomain>, e.g.: @@ -639,8 +750,40 @@ - If this doesn't work, make sure that both PageKite and remoteStorage are running, and that your FreedomBox SSL certificate is trusted in your current browser session (important when using private browsing). - Finish the OAuth flow by authenticating with your password and authorizing access, then you should get redirected back to the Unhosted app, and you should be able to use it. All data of the Unhosted app is stored on your FreedomBox. + If this doesn't work, make sure that + + + FreedomBox has a domain name using PageKite, Dynamic DNS or Tor Hidden Service. + + + The reStore server is running. + + + You have created the account specified in the reStore server. + + + Your FreedomBox SSL certificate is trusted in your current browser session (important when using private browsing). + + + Finish the OAuth flow by authenticating with your password and authorizing access, then you should get redirected back to the Unhosted app, and be able to use it. All data of the Unhosted web app is now stored on your FreedomBox. +
+
+
+ OpenVPN +
+ What is OpenVPN? + OpenVPN provides to your FreedomBox a virtual private network service. You can use this software for remote access, site-to-site VPNs and Wi-Fi security. OpenVPN includes support for dynamic IP addresses and NAT. +
+
+
+ GnuSocial +
+ What is GNU social? + GNU social is a continuation of the StatusNet project. It is social communication software for both public and private communications. It is widely supported and has a large userbase. It is already used by the Free Software Foundation, and Richard Stallman himself. Think of GNU Social as twitter and beyond. +
+
+ Status of package + GNU Social is still getting packaged for debian and will be available soon for everyone to use. check the progress by tracking the bug #782812.
@@ -746,6 +889,7 @@ Manual Upgrades In the Plinth web interface, you can initiate a manual upgrade process from Upgrades page of the Settings section. Note that once the upgrades start, it may take a long time to complete and Plinth may seem to wait for the page to load. Under some circumstances, automatic upgrades may fail and require you perform a manual upgrade action. Even upgrades initiated from Plinth may not finish properly. This may be because the upgrade process requires you to make a decision. In these cases, manual upgrade on the terminal may be the only option. + In addition, while the upgrade task is running any application installations will wait until the upgrade task is finished. Depending on the hardware, the upgrade task may take a little time, therefore, giving the impression that the application installation stalled. To perform manual upgrades on the terminal, login into FreedomBox on a terminal or using a remote secure shell (see Secure Shell section). Then run the following commands: $ sudo su - Password: @@ -2192,9 +2336,9 @@ firewall-cmd --zone=internal --remove-port=<port>/<protocol> firewall-cmd --permanent --zone=internal --remove-port=<port>/<protocol> Example: - firewall-cmd --zone=internal --remove-service=5353/udp + firewall-cmd --zone=internal --remove-port=5353/udp firewall-cmd --permanent --zone=internal --remove-port=5353/udp - To add a port to a zone: + To add a service to a zone: firewall-cmd --zone=<zone> --add-service=<service> firewall-cmd --permanent --zone=<zone> --add-service=<interface> Example: @@ -2204,7 +2348,7 @@ firewall-cmd --zone=internal --add-port=<port>/<protocol> firewall-cmd --permanent --zone=internal --add-port=<port>/<protocol> Example: - firewall-cmd --zone=internal --add-service=5353/udp + firewall-cmd --zone=internal --add-port=5353/udp firewall-cmd --permanent --zone=internal --add-port=5353/udp
@@ -2220,10 +2364,10 @@ firewall-cmd --permanent --zone=external --remove-interface=eth0 To add an interface to a zone: firewall-cmd --zone=<zone> --add-interface=<interface> -firewall-cmd --permanent --zone=<zone> --remove-interface=<interface> +firewall-cmd --permanent --zone=<zone> --add-interface=<interface> Example: firewall-cmd --zone=internal --add-interface=eth0 -firewall-cmd --permanent --zone=internal --remove-interface=eth0 +firewall-cmd --permanent --zone=internal --add-interface=eth0
@@ -2265,6 +2409,23 @@ + + + + + + + Cubieboard 2 + + + + + + Cubieboard2 + + + + @@ -2280,6 +2441,8 @@ BeagleBone Black + + @@ -3076,27 +3239,27 @@ First and the recommended option is to use the Bridge type of network. This option exposes the guest machine to the same network that host network is connected to. The guest obtains network configuration information from a router or DHCP server on the network. The guest will appear as just another machine in the network. A major advantage of this of setup is that the host and all other machines in the network will be able to access the services provided by guest without requiring any further setup. The only drawback of this approach is that if the host is not connected to any network, the guest's network will remain unconfigured making it inaccessible even from the host. - Second method is Host only type of networking. With a guest's network interface configured in this manner, it will only be accessible from the host machine. The guest will not able access any other machine but the host. It, however, does not require that the host machine be connected to a network. All services all accessible from the host machine without any special configuration such as port forwarding. + Second method is Host only type of networking. With a guest's network interface configured in this manner, it will only be accessible from the host machine. The guest will not able access any other machine but the host, so you do not have internet access on the guest. All services on the guest are available to the host machine without any configuration such as port forwarding. - The final option is to use the NAT type of network. This the networking type that VirtualBox assigns to a freshly created virtual machine. This option works even when host is not connected to any network. The guest is automatically configured and is able to access the Internet and local networks that host is able to connect to. However, the services provided by the guest require port forwarding configuration setup to be available outside. + The third option is to use the NAT type of network. This the networking type that VirtualBox assigns to a freshly created virtual machine. This option works even when host is not connected to any network. The guest is automatically configured and is able to access the Internet and local networks that host is able to connect to. However, the services provided by the guest require port forwarding configuration setup to be available outside. To configure this go to VM settings -> [Network] -> [Adapter] -> [Port Forwarding]. Map a port such as 2222 from host to guest port 22 and you will be able to ssh into FreedomBox from host machine as follows: - - - ssh -p 2222 fbx@localhost - - + ssh -p 2222 fbx@localhost Map 4443 on host to 443 on the guest. This make FreedomBox HTTPS service available on host using the URL You will need to add a mapping for each such services from host to guest. - + + The final option is to create two network interfaces, one host only and one NAT type. This way you can access the guest without any additional configuration, and you have internet access on the guest. The guest will be invisible to any other machines on the network. + + Summary of various network types: - + + @@ -3122,11 +3285,16 @@ Works without host connected to network + + + Guest has internet access + + - Bridged Adapter + Bridged @@ -3177,6 +3345,18 @@ + + + + + + + + (./) + + + + @@ -3232,6 +3412,18 @@ + + + + + + + + {X} + + + + @@ -3287,6 +3479,85 @@ + + + + + + + + (./) + + + + + + + + + NAT and Host + + + + + + + + + + {X} + + + + + + + + + + + + (./) + + + + + + + + + + + + (./) + + + + + + + + + + + + (./) + + + + + + + + + + + + (./) + + + + @@ -3294,13 +3565,7 @@
Using - You can log in as the following user: - - - Username: fbx - Password: frdm - - + You can log in as the user created during Plinth setup. After logging in, you can become root with the command sudo su. See the FreedomBox usage page for more details.
@@ -3310,6 +3575,12 @@
Tips & Troubleshooting
+ Finding out the IP address of the virtual machine + This depends on the network configuration you chose. With a bridged adapter, your virtual machine gets its IP address from the DHCP server of your network, most likely of your Router. You can try the first couple of IP addresses or check your router web interface for a list of connected devices. + If you chose host-only adapter, the IP address is assigned by the DHCP server of your VirtualBox network. In the VirtualBox Manager, go to File -> Preferences -> Network -> Host-only Networks. You can see and edit the DHCP address range there, typically you get assigned addresses close to the Lower Address Bound. + Another possibility of finding the IP address is to login via the Virtualbox Manager (or similar software). The FreedomBox images do not have any default user accounts, so you need to set an initial user and password using the passwd-in-image script. +
+
Networking Problems with macchanger The package macchanger can cause network problems with VirtualBox. If you have a valid IP address on your guest's host network adapter (like 192.168.56.101) but are not able to ping or access the host (like 192.168.56.1), try uninstalling macchanger: $ dpkg --ignore-depends=freedombox-setup --remove macchanger @@ -3342,6 +3613,10 @@ Use a fresh Debian installation Installing FreedomBox changes your Debian system in many important ways. This includes installing a firewall and regenerating server certificates. It is hence recommended that you install FreedomBox on a fresh Debian installation instead of an existing setup. + + use "fbx" as the login name + + If you choose to create an initial user account, use "fbx" as the login name. (Once the FreedomBox setup program completes, all user accounts except for the "fbx" account will be locked out via pam_access. This also affects sudo access.)
Installing on Debian @@ -3351,11 +3626,6 @@ Install Debian Testing (Stretch) or Unstable (Sid) on your hardware. - - - If you choose to create an initial user account, use "fbx" as the login name. (Once the FreedomBox setup program completes, all user accounts except for the "fbx" account will be locked out via pam_access. This also affects sudo access.) - - Update your package list. @@ -3364,6 +3634,11 @@ Install freedombox-setup package. $ sudo apt-get install freedombox-setup + + + When asked to specify whether Macchanger should be set up to run automatically, please choose "No". + + Run FreedomBox setup program. This installs further packages and sets up basic configuration. @@ -3735,116 +4010,135 @@ Contributing From code, design and translation to spreading the world and donation, here is a list of possible contributions to develop FreedomBox.
- Welcome to newcomers - As a newcomer, you are more than welcome to introduce yourself to all users and doers on the "FreedomBox-discuss" mailing list or on the #freedombox IRC channel. - In addition to make useful contacts, you can start reporting bugs and translate (see below) the wiki website and the FreedomBox web interface. -
-
- Development priorities - Upcoming priorities have been discussed end of October 2015 by several core developers and the Freedombox Foundation. You'll find on the mailing list archives a Medium Term Roadmap for 2015 and 2016. Please check next progess calls to keep yourself on track and meet members of the release team. A TODO page aggregates the complete list of the items to work on for FreedomBox. + Quick Links + + Progess calls + + + TODO page + + + Donation page +
- Add an Application - If you are a developer and wish to see an application available in FreedomBox, you can contribute by adding the application to FreedomBox. See the FreedomBox Developer Manual. + Welcome to newcomers + As a newcomer, you are more than welcome to introduce yourself to all users and doers on the "FreedomBox-discuss" mailing list or on the #freedombox IRC channel. In addition to make useful contacts, you can start reporting bugs and translate (see below) the wiki website and the FreedomBox web interface.
- Code - If you are a developer, you can contribute code to one of the sub-projects of FreedomBox. Step-by-step process of contributing code to FreedomBox is available. - - - FreedomBox Setup: a Debian package for setting up the FreedomBox. - - - Plinth: a web interface to administer the functions of FreedomBox. - - - Freedom Maker: a script to build FreedomBox disk images for use on various hardware devices or virtual machines. - - - You can pickup a task from one of the TODO lists. The individual page project pages contain information availabily of the code, how to build and TODO lists. + Development priorities + Upcoming priorities have been discussed end of October 2015 by several core developers and the Freedombox Foundation. You'll find on the mailing list archives a Medium Term Roadmap for 2015 and 2016. We want to enjoy soon a version 1.0. We are targeting mid January for a 0.8 release. The main focus of the 0.8 release is going to be integrated in the PGP based SSL Client authentication work. We are planning on a 0.9 polish release for late February with general usability improvements. + Please check next progess calls to keep yourself on track and meet members of the release team. A TODO page aggregates the complete list of the items to work on for FreedomBox.
- Design + Contributions needed +
+ Add an Application + If you are a developer and wish to see an application available in FreedomBox, you can contribute by adding the application to FreedomBox. See the FreedomBox Developer Manual. +
+
+ Bugs + List of bugs listed on Debian universal system. +
- User Experience Design - If you are a user experience designer, you can help FreedomBox with the following items: + Code + If you are a developer, you can contribute code to one of the sub-projects of FreedomBox. Step-by-step process of contributing code to FreedomBox is available. - UI experience for the Plinth web interface + FreedomBox Setup: a Debian package for setting up the FreedomBox. - Web design for freedomboxfoundation.org and FreedomBox wiki pages + Plinth: a web interface to administer the functions of FreedomBox. - Logo and branding (we currently have an identity manual and logos) + Freedom Maker: a script to build FreedomBox disk images for use on various hardware devices or virtual machines. + + You can pickup a task from one of the TODO lists. The individual page project pages contain information availabily of the code, how to build and TODO lists. +
+
+ Design +
+ User Experience Design + If you are a user experience designer, you can help FreedomBox with the following items: + + + UI experience for the Plinth web interface + + + Web design for freedomboxfoundation.org and FreedomBox wiki pages + + + Logo and branding (we currently have an identity manual and logos) + + + Possible designs for custom FreedomBox cases on single board computers + + + + User experience design + + + +
+
+ Technical Design + FreedomBox is still under development any many components are yet to be worked on. You can contribute to the discussion on various technical design and implementation aspects of FreedomBox. See: + + + + Design portal + + + +
+
+
+ Donate + The FreedomBox Foundation is a Delaware non-profit corporation in the process of applying for 501(c)(3) federal nonprofit recognition from the IRS. FreedomBox project is run by volunteers. You can help the project financially by donating via PayPal, Bitcoin or by mailing a check. Please see the donation page for details on how to donate. +
+
+ Document: User Manual, Website and Wiki + FreedomBox needs better documentation for users and contributors. FreedomBox manual is prepared by aggregating various pages on the wiki and exporting to various formats. The manual is then used in Plinth and elsewhere. + If you wish to contribute to the FreedomBox wiki (and consequently the FreedomBox manual), you can create a wiki account and start editing. + For contributing to the website please start a discussion on the FreedomBox mailing list. +
+
+ Quality Assurance + - Possible designs for custom FreedomBox cases on single board computers + FreedomBox already runs on many platforms and it is not possible for developers to test all possible platforms. If you have one of the supported hardware you can help with testing FreedomBox on the platform. - - User experience design - + When an application is made available on FreedomBox, not all of its functionality is tested in the real world by developer doing the work. Deploying the application and testing it will help ensure high quality applications in FreedomBox. + See the quality assurance page for a basic list of test cases to check for and information on reporting bugs.
- Technical Design - FreedomBox is still under development any many components are yet to be worked on. You can contribute to the discussion on various technical design and implementation aspects of FreedomBox. See: + Localization + All text visible to users of FreedomBox needs to be localized to various languages. This translation work includes: - - Design portal - + Plinth web interface for FreedomBox + + + FreedomBox documentation + + + FreedomBox website and wiki + + + Individual applications that FreedomBox exposes to users such as ownCloud, JWChat etc. + Some of the translation work are implemented in user interface (Plinth) since the 0.7 release. Documents for user interface translation are currently available on Transifex localization platform and GitHub. If you wish to see FreedomBox available for one of your languages, please start a discussion on the FreedomBox discuss mailing list or on the #freedombox IRC channel to avoid double translations. + For more information, please visit the FreedomBox translation landing page. +
+
+ Spread the Word + Speak to your family, friends, local community or at global conferences about the importance of FreedomBox. To be a successful project we need many more participants, be it users or contributors. Write about your efforts at the talks page and on the wiki.
-
-
- Donate - The FreedomBox Foundation is a Delaware non-profit corporation in the process of applying for 501(c)(3) federal nonprofit recognition from the IRS. FreedomBox project is run by volunteers. You can help the project financially by donating via PayPal, Bitcoin or by mailing a check. Please see the donation page for details on how to donate. -
-
- Document: User Manual, Website and Wiki - FreedomBox needs better documentation for users and contributors. FreedomBox manual is prepared by aggregating various pages on the wiki and exporting to various formats. The manual is then used in Plinth and elsewhere. - If you wish to contribute to the FreedomBox wiki (and consequently the FreedomBox manual), you can create a wiki account and start editing. - For contributing to the website please start a discussion on the FreedomBox mailing list. -
-
- Quality Assurance - - - FreedomBox already runs on many platforms and it is not possible for developers to test all possible platforms. If you have one of the supported hardware you can help with testing FreedomBox on the platform. - - - When an application is made available on FreedomBox, not all of its functionality is tested in the real world by developer doing the work. Deploying the application and testing it will help ensure high quality applications in FreedomBox. - - - See the quality assurance page for a basic list of test cases to check for and information on reporting bugs. -
-
- Localization - All text visible to users of FreedomBox needs to be localized to various languages. This translation work includes: - - - Plinth web interface for FreedomBox - - - FreedomBox documentation - - - FreedomBox website and wiki - - - Individual applications that FreedomBox exposes to users such as ownCloud, JWChat etc. - - - Some of the translation work are implemented in user interface (Plinth) since the 0.7 release. Documents for user interface translation are currently available on Transifex localization platform and GitHub. If you wish to see FreedomBox available for one of your languages, please start a discussion on the FreedomBox discuss mailing list or on the #freedombox IRC channel to avoid double translations. - For more information, please visit the FreedomBox translation landing page. -
-
- Spread the Word - Speak to your family, friends, local community or at global conferences about the importance of FreedomBox. To be a successful project we need many more participants, be it users or contributors. Write about your efforts at the talks page and on the wiki.
@@ -3879,7 +4173,7 @@
Packaging the application Majority of the effort in creating an application for FreedomBox is to package it for Debian and get it uploaded to Debian repositories. Going through the process of packaging itself is outside the scope of this tutorial. It is, however, well documented elsewhere. You should start here. - Debian packaging might seem like an unnecessary process that takes time with its adherence to standards, review process, legal checks, etc. However, upon close examination, one will find that without these steps the goals of the FreedomBox project cannot be met without such a process. Some of the advantages of Debian packaging are listed below: + Debian packaging might seem like an unnecessary process that takes time with its adherence to standards, review process, legal checks, etc. However, upon close examination, one will find that without these steps the goals of the FreedomBox project cannot be met. Some of the advantages of Debian packaging are listed below: Legal check ensures that proprietary licensed code or code with bad licenses does not inadvertently creep in. @@ -3947,12 +4241,13 @@
Writing the URLs For a user to visit our application in Plinth, we need to provide a URL. When the user visits this URL, a view is executed and a page is displayed. In urls.py write the following: - from django.conf.urls import patterns, url + from django.conf.urls import url + +from . import views -urlpatterns = patterns( - 'plinth.modules.ttrss.views', - url(r'^apps/ttrss/$', 'index', name='index'), - ) +urlpatterns = [ + url(r'^apps/ttrss/$', views.index, name='index'), +] This routes the /apps/ttrss/ URL to a view called index defined in plinth/modules/ttrss/views.py. This is no different than how routing URLs are written in Django. See Django URL dispatcher for more information.
@@ -4105,9 +4400,9 @@ modified = True if modified: - messages.success(request, _('Configuration updated')) + messages.success(request, 'Configuration updated') else: - messages.info(request, _('Setting unchanged')) + messages.info(request, 'Setting unchanged') We check to make sure that we don't try to disable the application when it is already disabled or try to enable the application when it is already enabled. Although Plinth's operations are idempotent, meaning that running them twice will not be problematic, we still wish avoid unnecessary operations for the sake of speed. We are actually perform the operation using Plinth actions. We will implement the action to be performed a bit later. After we perform the operation, we will show a message on the response page showing that the action was successful or that nothing happened. We use the Django messaging framework to accomplish this. See Django messaging framework for more information. @@ -4246,16 +4541,8 @@
Internationalization - Every string message that is visible to the user must localized to user's native language. For this to happen, our application needs to be internationalized. This requires marking the user visible messages for translation. Plinth applications use the gettext library to make that happen. - from gettext import gettext as _ - -def init(): - """Intialize the module.""" - menu = cfg.main_menu.get('apps:index') - menu.add_urlname(_('News Feed Reader (Tiny Tiny RSS)'), 'glyphicon-envelope', - 'ttrss:index', 600) - Notice that the menu item's display name is wrapped in the _() method call. Let us do that for the title of the application page too. - from gettext import gettext as _ + Every string message that is visible to the user must be localized to user's native language. For this to happen, our application needs to be internationalized. This requires marking the user visible messages for translation. Plinth applications use the Django's localization methods to make that happen. + from django.utils.translation import ugettext as _ def index(request): ... @@ -4263,6 +4550,16 @@ {'title': _('News Feed Reader (Tiny Tiny RSS)'), 'status': status, 'form': form}) + Notice that the page's title is wrapped in the _() method call. Let us do that for the menu item of the application too. + from django.utils.translation import ugettext_lazy as _ + +def init(): + """Intialize the module.""" + menu = cfg.main_menu.get('apps:index') + menu.add_urlname(_('News Feed Reader (Tiny Tiny RSS)'), 'glyphicon-envelope', + 'ttrss:index', 600) + Notice that in this case, we have used the ugettext_lazy and in the first case we have used the regular ugettext. This is because in the second case the gettext lookup is made once and reused for every user looking at the interface. These users may each have a different language set for their interface. Lookup made for one language should not be used for other users. The _lazy method provided by Django makes sure that the return value is an object that will actually be converted to string at the final moment when the string is being displayed. In the first case, the looked is made and string is returned immediately. + All of this is the usual way internationalization is done in Django. See Django internationalization and localization documentation for more information.
Coding standards Binary files /tmp/tmpayiXe6/4CFLMOgqkY/plinth-0.7.2/doc/images/cubieboard2_thumb.jpg and /tmp/tmpayiXe6/oLYEgxqtMe/plinth-0.8.1/doc/images/cubieboard2_thumb.jpg differ diff -Nru plinth-0.7.2/doc/Makefile plinth-0.8.1/doc/Makefile --- plinth-0.7.2/doc/Makefile 2015-12-23 11:34:40.000000000 +0000 +++ plinth-0.8.1/doc/Makefile 2016-02-16 03:55:53.000000000 +0000 @@ -55,7 +55,7 @@ %.html: %.xml - xmlto html-nochunks $< + docbook2html --nochunks $< %.1: %.xml diff -Nru plinth-0.7.2/INSTALL plinth-0.8.1/INSTALL --- plinth-0.7.2/INSTALL 2015-12-23 11:34:40.000000000 +0000 +++ plinth-0.8.1/INSTALL 2016-02-16 03:55:53.000000000 +0000 @@ -17,6 +17,7 @@ libjs-modernizr \ make \ network-manager \ + packagekit \ ppp \ pppoe \ python3 \ diff -Nru plinth-0.7.2/plinth/context_processors.py plinth-0.8.1/plinth/context_processors.py --- plinth-0.7.2/plinth/context_processors.py 2015-12-23 11:34:40.000000000 +0000 +++ plinth-0.8.1/plinth/context_processors.py 2016-02-16 03:55:53.000000000 +0000 @@ -19,6 +19,7 @@ Django context processors to provide common data to templates. """ +from django.utils.translation import ugettext as _, ugettext_noop import re from plinth import cfg @@ -30,10 +31,15 @@ Any resources referenced in the return value are expected to have been initialized or configured externally beforehand. """ + # Allow a value in configuration file to be translated. Allow + # the brand name 'FreedomBox' itself to be translated. + ugettext_noop('FreedomBox') + slash_indices = [match.start() for match in re.finditer('/', request.path)] active_menu_urls = [request.path[:index + 1] for index in slash_indices] return { 'cfg': cfg, 'submenu': cfg.main_menu.active_item(request), - 'active_menu_urls': active_menu_urls + 'active_menu_urls': active_menu_urls, + 'box_name': _(cfg.box_name) } diff -Nru plinth-0.7.2/plinth/__init__.py plinth-0.8.1/plinth/__init__.py --- plinth-0.7.2/plinth/__init__.py 2015-12-23 11:34:40.000000000 +0000 +++ plinth-0.8.1/plinth/__init__.py 2016-02-16 03:55:53.000000000 +0000 @@ -19,4 +19,4 @@ Plinth package init file """ -__version__ = '0.7.2' +__version__ = '0.8.1' diff -Nru plinth-0.7.2/plinth/locale/da/LC_MESSAGES/django.po plinth-0.8.1/plinth/locale/da/LC_MESSAGES/django.po --- plinth-0.7.2/plinth/locale/da/LC_MESSAGES/django.po 2015-12-23 11:34:40.000000000 +0000 +++ plinth-0.8.1/plinth/locale/da/LC_MESSAGES/django.po 2016-02-16 03:55:53.000000000 +0000 @@ -9,11 +9,11 @@ msgstr "" "Project-Id-Version: FreedomBox UI\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-12-20 13:58+0530\n" +"POT-Creation-Date: 2016-01-31 22:19+0530\n" "PO-Revision-Date: 2015-12-20 14:43+0000\n" "Last-Translator: Mikkel Kirkgaard Nielsen \n" -"Language-Team: Danish " -"\n" +"Language-Team: Danish \n" "Language: da\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -51,11 +51,15 @@ msgid "Cannot connect to {host}:{port}" msgstr "Kan ikke forbinde til {host}:{port}" +#: plinth/context_processors.py:36 +msgid "FreedomBox" +msgstr "FreedomBox" + #: plinth/modules/apps/apps.py:26 msgid "Apps" msgstr "Apps" -#: plinth/modules/apps/apps.py:32 plinth/templates/base.html.py:90 +#: plinth/modules/apps/apps.py:32 plinth/templates/base.html.py:93 msgid "Applications" msgstr "Applikationer" @@ -97,10 +101,18 @@ msgstr "Aktiver tjenestesøgning" #: plinth/modules/avahi/templates/avahi.html:29 -msgid "" -"Service discovery allows other machines on the network to discover your " -"FreedomBox and services running on it. It also allows FreedomBox to " -"discover other machines and services running on your local network. Service " +#, fuzzy, python-format +#| msgid "" +#| "Service discovery allows other machines on the network to discover your " +#| "FreedomBox and services running on it. It also allows FreedomBox to " +#| "discover other machines and services running on your local network. " +#| "Service discovery is not essential and works only on internal networks. " +#| "It may be disabled to improve security especially when connecting to a " +#| "hostile local network." +msgid "" +"Service discovery allows other devices on the network to discover your " +"%(box_name)s and services running on it. It also allows %(box_name)s to " +"discover other devices and services running on your local network. Service " "discovery is not essential and works only on internal networks. It may be " "disabled to improve security especially when connecting to a hostile local " "network." @@ -115,14 +127,15 @@ #: plinth/modules/avahi/templates/avahi.html:40 #: plinth/modules/datetime/templates/datetime.html:35 #: plinth/modules/deluge/templates/deluge.html:39 -#: plinth/modules/dynamicdns/dynamicdns.py:38 +#: plinth/modules/dynamicdns/dynamicdns.py:39 #: plinth/modules/firewall/templates/firewall.html:57 #: plinth/modules/mumble/templates/mumble.html:44 #: plinth/modules/networks/templates/connection_show.html:261 #: plinth/modules/openvpn/templates/openvpn.html:81 #: plinth/modules/privoxy/templates/privoxy.html:48 #: plinth/modules/quassel/templates/quassel.html:50 -#: plinth/modules/tor/templates/tor.html:39 +#: plinth/modules/repro/templates/repro.html:58 +#: plinth/modules/tor/templates/tor.html:48 #: plinth/modules/transmission/templates/transmission.html:42 #: plinth/modules/xmpp/templates/xmpp.html:58 msgid "Status" @@ -145,9 +158,10 @@ #: plinth/modules/owncloud/templates/owncloud.html:51 #: plinth/modules/privoxy/templates/privoxy.html:62 #: plinth/modules/quassel/templates/quassel.html:65 +#: plinth/modules/repro/templates/repro.html:72 #: plinth/modules/roundcube/templates/roundcube.html:62 #: plinth/modules/shaarli/templates/shaarli.html:40 -#: plinth/modules/tor/templates/tor.html:74 +#: plinth/modules/tor/templates/tor.html:92 #: plinth/modules/transmission/templates/transmission.html:56 #: plinth/modules/xmpp/templates/xmpp.html:72 msgid "Configuration" @@ -163,10 +177,11 @@ #: plinth/modules/openvpn/templates/openvpn.html:138 #: plinth/modules/privoxy/templates/privoxy.html:70 #: plinth/modules/quassel/templates/quassel.html:73 +#: plinth/modules/repro/templates/repro.html:80 #: plinth/modules/restore/templates/restore_index.html:54 #: plinth/modules/roundcube/templates/roundcube.html:70 #: plinth/modules/shaarli/templates/shaarli.html:48 -#: plinth/modules/tor/templates/tor.html:82 +#: plinth/modules/tor/templates/tor.html:100 #: plinth/modules/transmission/templates/transmission.html:64 #: plinth/modules/upgrades/templates/upgrades_configure.html:34 #: plinth/modules/xmpp/templates/xmpp.html:80 @@ -175,12 +190,13 @@ #: plinth/modules/avahi/views.py:73 plinth/modules/datetime/views.py:85 #: plinth/modules/deluge/views.py:80 -#: plinth/modules/dynamicdns/dynamicdns.py:368 +#: plinth/modules/dynamicdns/dynamicdns.py:371 #: plinth/modules/ikiwiki/views.py:95 plinth/modules/mumble/views.py:80 #: plinth/modules/openvpn/views.py:142 plinth/modules/privoxy/views.py:83 -#: plinth/modules/quassel/views.py:76 plinth/modules/restore/views.py:68 -#: plinth/modules/roundcube/views.py:84 plinth/modules/shaarli/views.py:74 -#: plinth/modules/transmission/views.py:105 plinth/modules/xmpp/views.py:100 +#: plinth/modules/quassel/views.py:76 plinth/modules/repro/views.py:77 +#: plinth/modules/restore/views.py:68 plinth/modules/roundcube/views.py:84 +#: plinth/modules/shaarli/views.py:74 plinth/modules/transmission/views.py:109 +#: plinth/modules/xmpp/views.py:100 msgid "Configuration updated" msgstr "Konfiguration opdateret" @@ -188,27 +204,34 @@ #: plinth/modules/deluge/views.py:82 plinth/modules/ikiwiki/views.py:97 #: plinth/modules/mumble/views.py:82 plinth/modules/openvpn/views.py:144 #: plinth/modules/owncloud/owncloud.py:93 plinth/modules/privoxy/views.py:85 -#: plinth/modules/quassel/views.py:78 plinth/modules/restore/views.py:70 -#: plinth/modules/roundcube/views.py:86 plinth/modules/shaarli/views.py:76 -#: plinth/modules/tor/tor.py:250 plinth/modules/transmission/views.py:107 -#: plinth/modules/upgrades/views.py:103 plinth/modules/xmpp/views.py:102 +#: plinth/modules/quassel/views.py:78 plinth/modules/repro/views.py:79 +#: plinth/modules/restore/views.py:70 plinth/modules/roundcube/views.py:86 +#: plinth/modules/shaarli/views.py:76 plinth/modules/tor/views.py:111 +#: plinth/modules/transmission/views.py:111 +#: plinth/modules/upgrades/views.py:118 plinth/modules/xmpp/views.py:102 msgid "Setting unchanged" msgstr "Indstilling uændret" -#: plinth/modules/config/config.py:83 plinth/modules/config/config.py:120 -#: plinth/modules/dynamicdns/dynamicdns.py:145 +#: plinth/modules/config/config.py:84 plinth/modules/config/config.py:121 +#: plinth/modules/dynamicdns/dynamicdns.py:148 msgid "Invalid domain name" msgstr "Ugyldigt domænenavn" -#: plinth/modules/config/config.py:94 +#: plinth/modules/config/config.py:95 msgid "Hostname" msgstr "Værtsnavn" -#: plinth/modules/config/config.py:96 -msgid "" -"Hostname is the local name by which other machines on the local network " -"reach your machine. It must start and end with an alphabet or a digit and " -"have as interior characters only alphabets, digits and hyphens. Total " +#: plinth/modules/config/config.py:97 +#, fuzzy, python-brace-format +#| msgid "" +#| "Hostname is the local name by which other machines on the local network " +#| "reach your machine. It must start and end with an alphabet or a digit " +#| "and have as interior characters only alphabets, digits and hyphens. " +#| "Total length must be 63 characters or less." +msgid "" +"Hostname is the local name by which other devices on the local network can " +"reach your {box_name}. It must start and end with an alphabet or a digit " +"and have as interior characters only alphabets, digits and hyphens. Total " "length must be 63 characters or less." msgstr "" "Værtsnavn er det lokale navn under hvilket maskiner på dit lokalnetværk kan " @@ -216,24 +239,32 @@ "må kun være bogstaver, tal og bindestreger. Den samlede længde skal være 63 " "tegn eller derunder." -#: plinth/modules/config/config.py:104 +#: plinth/modules/config/config.py:105 msgid "Invalid hostname" msgstr "Ugyldigt værtsnavn" -#: plinth/modules/config/config.py:107 plinth/modules/config/config.py:153 +#: plinth/modules/config/config.py:108 plinth/modules/config/config.py:153 #: plinth/modules/config/config.py:265 -#: plinth/modules/dynamicdns/dynamicdns.py:140 +#: plinth/modules/dynamicdns/dynamicdns.py:143 msgid "Domain Name" msgstr "Domænenavn" -#: plinth/modules/config/config.py:109 -msgid "" -"Domain name is the global name by which other machines on the Internet can " -"reach you. It must consist of labels separated by dots. Each label must " -"start and end with an alphabet or a digit and have as interior characters " -"only alphabets, digits and hyphens. Length of each label must be 63 " -"characters or less. Total length of domain name must be 253 characters or " -"less." +#: plinth/modules/config/config.py:110 +#, fuzzy, python-brace-format +#| msgid "" +#| "Domain name is the global name by which other machines on the Internet " +#| "can reach you. It must consist of labels separated by dots. Each label " +#| "must start and end with an alphabet or a digit and have as interior " +#| "characters only alphabets, digits and hyphens. Length of each label must " +#| "be 63 characters or less. Total length of domain name must be 253 " +#| "characters or less." +msgid "" +"Domain name is the global name by which other devices on the Internet can " +"reach your {box_name}. It must consist of labels separated by dots. Each " +"label must start and end with an alphabet or a digit and have as interior " +"characters only alphabets, digits and hyphens. Length of each label must be " +"63 characters or less. Total length of domain name must be 253 characters " +"or less." msgstr "" "Domænenavn er det globale navn under hvilket maskiner på internettet kan nå " "dig. Det skal bestå af ord adskilt af punktummer. Hver ord skal starte og " @@ -241,16 +272,18 @@ "og bindestreger. Hvert ord skal være på 63 tegn eller derunder. Den samlede " "længde skal være 253 tegn eller derunder." -#: plinth/modules/config/config.py:124 +#: plinth/modules/config/config.py:125 msgid "Language" msgstr "Sprog" -#: plinth/modules/config/config.py:126 -msgid "Language for this FreedomBox web administration interface" +#: plinth/modules/config/config.py:127 +#, fuzzy +#| msgid "Language for this FreedomBox web administration interface" +msgid "Language for this web administration interface" msgstr "Sprog i FreedomBox administrationsværktøjet" #: plinth/modules/config/config.py:135 -#: plinth/modules/dynamicdns/dynamicdns.py:36 +#: plinth/modules/dynamicdns/dynamicdns.py:37 #: plinth/modules/ikiwiki/views.py:36 msgid "Configure" msgstr "Konfigurer" @@ -446,16 +479,16 @@ msgid "Result" msgstr "Resultat" -#: plinth/modules/dynamicdns/dynamicdns.py:34 plinth/modules/help/help.py:40 +#: plinth/modules/dynamicdns/dynamicdns.py:35 plinth/modules/help/help.py:40 msgid "About" msgstr "Om" -#: plinth/modules/dynamicdns/dynamicdns.py:44 -#: plinth/modules/dynamicdns/dynamicdns.py:53 +#: plinth/modules/dynamicdns/dynamicdns.py:45 +#: plinth/modules/dynamicdns/dynamicdns.py:54 msgid "Dynamic DNS" msgstr "Dynamisk DNS" -#: plinth/modules/dynamicdns/dynamicdns.py:70 +#: plinth/modules/dynamicdns/dynamicdns.py:71 msgid "" "The Variables <User>, <Pass>, <Ip>, <Domain> may be " "used within the URL. For details see the update URL templates of the example " @@ -465,7 +498,7 @@ "bruges i URL'en. For flere detaljer se skabelonerne for opdaterings-URL'er i " "eksemplernes tjenester." -#: plinth/modules/dynamicdns/dynamicdns.py:74 +#: plinth/modules/dynamicdns/dynamicdns.py:75 msgid "" "Please choose an update protocol according to your provider. If your " "provider does not support the GnudIP protocol or your provider is not listed " @@ -475,23 +508,29 @@ "udbyderen ikke understøtter GnuDIP-protokollen eller ikke er prædefineret, " "kan en opdaterings-URL fra din udbyder angives direkte." -#: plinth/modules/dynamicdns/dynamicdns.py:79 +#: plinth/modules/dynamicdns/dynamicdns.py:80 +#, fuzzy +#| msgid "" +#| "Please do not enter a URL here (like \"https://example.com/\") but only " +#| "the hostname of the GnuDIP server (like \"example.pcom\")." msgid "" "Please do not enter a URL here (like \"https://example.com/\") but only the " -"hostname of the GnuDIP server (like \"example.pcom\")." +"hostname of the GnuDIP server (like \"example.com\")." msgstr "" "Her skal ikke angives en URL (såsom \"https://example.com/\"), men blot " "værtsnavnet for GnuDIP-serveren (såsom \"example.com\")." -#: plinth/modules/dynamicdns/dynamicdns.py:83 -msgid "The public domain name you want use to reach your box." +#: plinth/modules/dynamicdns/dynamicdns.py:84 +#, fuzzy, python-brace-format +#| msgid "The public domain name you want use to reach your box." +msgid "The public domain name you want use to reach your {box_name}." msgstr "Det offentlige domænenavn du vil bruge til at nå din boks." -#: plinth/modules/dynamicdns/dynamicdns.py:85 +#: plinth/modules/dynamicdns/dynamicdns.py:87 msgid "Use this option if your provider uses self signed certificates." msgstr "Aktiver dette hvis din udbyder bruger selvunderskrevne certifikater." -#: plinth/modules/dynamicdns/dynamicdns.py:88 +#: plinth/modules/dynamicdns/dynamicdns.py:90 msgid "" "If this option is selected, your username and password will be used for HTTP " "basic authentication." @@ -499,123 +538,151 @@ "Hvis denne option er aktiveret vil dit brugernavn og kodeord blive anvendt " "til basal (\"basic\") HTTP-autentifikation." -#: plinth/modules/dynamicdns/dynamicdns.py:91 +#: plinth/modules/dynamicdns/dynamicdns.py:93 msgid "" "Leave this field empty if you want to keep your previous configured password." msgstr "" "Lad dette felt stå tomt hvis du vil beholde det tidligere konfigurerede " "kodeord." -#: plinth/modules/dynamicdns/dynamicdns.py:94 +#: plinth/modules/dynamicdns/dynamicdns.py:96 +#, fuzzy, python-brace-format +#| msgid "" +#| "Optional Value. If your FreedomBox is not connected directly to the " +#| "Internet (i.e. connected to a NAT router) this URL is used to figure out " +#| "the real Internet IP. The URL should simply return the IP wherethe client " +#| "comes from. Example: http://myip.datasystems24.de" msgid "" -"Optional Value. If your FreedomBox is not connected directly to the Internet " +"Optional Value. If your {box_name} is not connected directly to the Internet " "(i.e. connected to a NAT router) this URL is used to figure out the real " -"Internet IP. The URL should simply return the IP wherethe client comes from. " -"Example: http://myip.datasystems24.de" +"Internet IP. The URL should simply return the IP where the client comes from " +"(example: http://myip.datasystems24.de)." msgstr "" "Ikke obligatorisk. Hvis din FreedomBox ikke er tilsluttet direkte til " "internettet (hvis den f.eks.er bag en NAT-router) bruges denne URL til at " "afgøre dens offentlige IP. Denne URL skal simpelthen returnere IP-adressen " "hvorfra klientens forespørgsel kommer. Eksempel: http://myip.datasystems24.de" -#: plinth/modules/dynamicdns/dynamicdns.py:101 +#: plinth/modules/dynamicdns/dynamicdns.py:104 msgid "" "You should have been requested to select a username when you created the " "account." msgstr "Brugernavn du har valgt ved oprettelse af konto hos tjenesteudbyderen." -#: plinth/modules/dynamicdns/dynamicdns.py:112 +#: plinth/modules/dynamicdns/dynamicdns.py:115 msgid "Enable Dynamic DNS" msgstr "Aktiver Dynamisk DNS" -#: plinth/modules/dynamicdns/dynamicdns.py:115 +#: plinth/modules/dynamicdns/dynamicdns.py:118 msgid "Service type" msgstr "Servicetype" -#: plinth/modules/dynamicdns/dynamicdns.py:120 +#: plinth/modules/dynamicdns/dynamicdns.py:123 msgid "GnudIP Server Address" msgstr "GnuDIP Serveradresse" -#: plinth/modules/dynamicdns/dynamicdns.py:125 +#: plinth/modules/dynamicdns/dynamicdns.py:128 msgid "Invalid server name" msgstr "Ugyldigt servernavn" -#: plinth/modules/dynamicdns/dynamicdns.py:128 +#: plinth/modules/dynamicdns/dynamicdns.py:131 msgid "Update URL" msgstr "Opdaterings-URL" -#: plinth/modules/dynamicdns/dynamicdns.py:132 -msgid "accept all SSL certificates" +#: plinth/modules/dynamicdns/dynamicdns.py:135 +#, fuzzy +#| msgid "accept all SSL certificates" +msgid "Accept all SSL certificates" msgstr "accepter alle SSL-certifikater" -#: plinth/modules/dynamicdns/dynamicdns.py:136 -msgid "use HTTP basic authentication" +#: plinth/modules/dynamicdns/dynamicdns.py:139 +#, fuzzy +#| msgid "use HTTP basic authentication" +msgid "Use HTTP basic authentication" msgstr "brug basal (\"basic\") HTTP-autentifikation" -#: plinth/modules/dynamicdns/dynamicdns.py:148 -#: plinth/modules/networks/forms.py:118 plinth/modules/transmission/forms.py:39 +#: plinth/modules/dynamicdns/dynamicdns.py:151 +#: plinth/modules/networks/forms.py:146 plinth/modules/transmission/forms.py:39 msgid "Username" msgstr "Brugernavn" -#: plinth/modules/dynamicdns/dynamicdns.py:151 -#: plinth/modules/networks/forms.py:119 plinth/modules/transmission/forms.py:43 +#: plinth/modules/dynamicdns/dynamicdns.py:154 +#: plinth/modules/networks/forms.py:147 plinth/modules/transmission/forms.py:43 msgid "Password" msgstr "Kodeord" -#: plinth/modules/dynamicdns/dynamicdns.py:154 -msgid "show password" -msgstr "vis kodeord" +#: plinth/modules/dynamicdns/dynamicdns.py:157 +#: plinth/modules/networks/forms.py:149 +msgid "Show password" +msgstr "Vis kodeord" -#: plinth/modules/dynamicdns/dynamicdns.py:158 +#: plinth/modules/dynamicdns/dynamicdns.py:161 msgid "IP check URL" msgstr "URL for IP-kontrol" -#: plinth/modules/dynamicdns/dynamicdns.py:184 +#: plinth/modules/dynamicdns/dynamicdns.py:187 msgid "Please provide update URL or a GnuDIP Server" msgstr "Angiv venligst opdaterings-URL eller GnuDIP-server" -#: plinth/modules/dynamicdns/dynamicdns.py:187 +#: plinth/modules/dynamicdns/dynamicdns.py:190 msgid "Please provide GnuDIP username" msgstr "Angiv venligst brugernavn til GnuDIP" -#: plinth/modules/dynamicdns/dynamicdns.py:190 +#: plinth/modules/dynamicdns/dynamicdns.py:193 msgid "Please provide GnuDIP domain" msgstr "Angiv venligst domæne til GnuDIP-server" -#: plinth/modules/dynamicdns/dynamicdns.py:195 +#: plinth/modules/dynamicdns/dynamicdns.py:198 msgid "Please provide a password" msgstr "Angiv venligst et kodeord" -#: plinth/modules/dynamicdns/dynamicdns.py:214 +#: plinth/modules/dynamicdns/dynamicdns.py:217 msgid "Configure Dynamic DNS" msgstr "Konfigurer Dynamisk DNS" -#: plinth/modules/dynamicdns/dynamicdns.py:236 +#: plinth/modules/dynamicdns/dynamicdns.py:239 msgid "Status of Dynamic DNS" msgstr "Status for Dynamisk DNS" #: plinth/modules/dynamicdns/templates/dynamicdns.html:25 -msgid "DynamicDNS client" +#, fuzzy +#| msgid "DynamicDNS client" +msgid "Dynamic DNS Client" msgstr "Dynamisk DNS" #: plinth/modules/dynamicdns/templates/dynamicdns.html:28 +#, fuzzy, python-format +#| msgid "" +#| "If your internet provider changes your IP address periodic (i.e. every " +#| "24h) it may be hard for others to find you in the WEB. And for this " +#| "reason nobody may find the services which are provided by FreedomBox " +#| "(like your ownCloud)." msgid "" "If your internet provider changes your IP address periodic (i.e. every 24h) " "it may be hard for others to find you in the WEB. And for this reason nobody " -"may find the services which are provided by FreedomBox (like your ownCloud)." +"may find the services which are provided by %(box_name)s, such as ownCloud." msgstr "" "Hvis din internetudbyder periodisk ændrer din IP-adresse (f.eks. en gang i " "døgnet), kan det være svært for andre at finde dig og de tjenester (såsom " "din ownCloud) din FreedomBox udbyder på nettet." #: plinth/modules/dynamicdns/templates/dynamicdns.html:37 +#, fuzzy +#| msgid "" +#| "The solution is to assign a DNS name to your IP address and update the " +#| "DNS name every time your IP is changed by your Internet provider. Dynamic " +#| "DNS allows you to push your current public IP address to an gnudip " +#| "server. Afterwards the Server will assign your DNS name with the new IP " +#| "and if someone from the internet asks for your DNS name he will get your " +#| "current IP answered." msgid "" "The solution is to assign a DNS name to your IP address and update the DNS " "name every time your IP is changed by your Internet provider. Dynamic DNS " "allows you to push your current public IP address to an gnudip server. Afterwards " "the Server will assign your DNS name with the new IP and if someone from the " -"internet asks for your DNS name he will get your current IP answered." +"Internet asks for your DNS name he will get your current IP answered." msgstr "" "Løsningen er at tilknytte et DNS-navn til din IP-adresse og opdatere dette " "navn hver gang IP-adressen ændres af din udbyder. Dynamisk DNS gør det " @@ -638,10 +705,14 @@ "href='http://freedns.afraid.org/' target='_blank'> freedns.afraid.org." #: plinth/modules/dynamicdns/templates/dynamicdns.html:61 +#, fuzzy, python-format +#| msgid "" +#| "If your freedombox is connected behind some NAT router, don't forget to " +#| "add portforwarding (i.e. forward some standard ports like 80 and 443) to " +#| "your freedombox device." msgid "" -"If your freedombox is connected behind some NAT router, don't forget to add " -"portforwarding (i.e. forward some standard ports like 80 and 443) to your " -"freedombox device." +"If your %(box_name)s is connected behind some NAT router, don't forget to " +"add port forwarding (i.e. forward some standard ports like 80 and 443)." msgstr "" "Hvis din FreedomBox er tilsluttet bag en NAT-router, så glem ikke at " "viderestille de relevante porte (som f.eks. standard portene for HTTP 80 og " @@ -669,16 +740,23 @@ "IP-kontrol\" kan den ikke detekteres." #: plinth/modules/dynamicdns/templates/dynamicdns_status.html:35 -msgid "Direct connection to the internet." +#, fuzzy +#| msgid "Direct connection to the internet." +msgid "Direct connection to the Internet." msgstr "Direkte forbindelse til internettet." #: plinth/modules/dynamicdns/templates/dynamicdns_status.html:37 -#, python-format -msgid "" -"Behind NAT, this means that dynamic DNS service will poll the \"IP check URL" -"\" for changes (we need the \"IP check URL\" for this reason - otherwise we " -"will not detect IP changes). It may take up to %(timer)s minutes until we " -"update your DNS entry in case of WAN IP change." +#, fuzzy, python-format +#| msgid "" +#| "Behind NAT, this means that dynamic DNS service will poll the \"IP check " +#| "URL\" for changes (we need the \"IP check URL\" for this reason - " +#| "otherwise we will not detect IP changes). It may take up to %(timer)s " +#| "minutes until we update your DNS entry in case of WAN IP change." +msgid "" +"Behind NAT. This means that Dynamic DNS service will poll the \"IP check URL" +"\" for changes (the \"IP check URL\" entry is needed for this - otherwise IP " +"changes will not be detected). In case the WAN IP changes, it may take up " +"to %(timer)s minutes until your DNS entry is updated." msgstr "" "Bagved NAT betyder at Dynamisk DNS-tjenesten med \"URL for IP-kontrol\" vil " "tjekke din IP-adresse for ændringer (vi behøver denne URL af samme grund - " @@ -696,19 +774,23 @@ msgstr "Firewall" #: plinth/modules/firewall/templates/firewall.html:28 -#, python-format -msgid "" -"Firewall is a network security system that controls the incoming and " -"outgoing network traffic on your %(box_name)s. Keeping a firewall enabled " -"and properly configured reduces risk of security threat from the Internet." +#, fuzzy, python-format +#| msgid "" +#| "Firewall is a network security system that controls the incoming and " +#| "outgoing network traffic on your %(box_name)s. Keeping a firewall enabled " +#| "and properly configured reduces risk of security threat from the Internet." +msgid "" +"Firewall is a security system that controls the incoming and outgoing " +"network traffic on your %(box_name)s. Keeping a firewall enabled and " +"properly configured reduces risk of security threat from the Internet." msgstr "" "En firewall er et netværksbeskyttelsessystem som styrer indgående og " "udgående trafik på din %(box_name)s. At holde en firewall aktiveret og " "velkonfigureret reducerer risikoen for sikkerhedstrusler fra internettet." #: plinth/modules/firewall/templates/firewall.html:36 -msgid "The following is the current status:" -msgstr "Den nuværende status er som følger:" +msgid "Current status:" +msgstr "" #: plinth/modules/firewall/templates/firewall.html:41 #, python-format @@ -728,11 +810,13 @@ msgstr "Tjeneste/Port" #: plinth/modules/firewall/templates/firewall.html:67 +#: plinth/modules/letsencrypt/templates/letsencrypt.html:91 #: plinth/modules/names/templates/names.html:51 msgid "Enabled" msgstr "Aktiveret" #: plinth/modules/firewall/templates/firewall.html:70 +#: plinth/modules/letsencrypt/templates/letsencrypt.html:93 #: plinth/modules/names/templates/names.html:53 msgid "Disabled" msgstr "Deaktiveret" @@ -754,10 +838,15 @@ msgstr "Blokeret" #: plinth/modules/firewall/templates/firewall.html:103 +#, fuzzy +#| msgid "" +#| "The operation of the firewall is automatic. When you enable a service it " +#| "is automatically permitted in the firewall and you disable a service is " +#| "automatically disabled in the firewall." msgid "" "The operation of the firewall is automatic. When you enable a service it is " -"automatically permitted in the firewall and you disable a service is " -"automatically disabled in the firewall." +"also permitted in the firewall and when you disable a service it is also " +"disabled in the firewall." msgstr "" "Denne firewall er autokonfigurerende. Når du aktiverer en tjeneste vil den " "automatiskt blive åbnet i firewallen, og når du deaktiverer en tjeneste " @@ -775,29 +864,30 @@ msgid "User account created, you are now logged in" msgstr "Brugerkonto oprettet, du er nu logget ind" -#: plinth/modules/first_boot/templates/firstboot_state0.html:50 -msgid "Congratulations! Your FreedomBox is up and running!" -msgstr "Tillykke! Din FreedomBox er nu kørende!" +#: plinth/modules/first_boot/templates/firstboot_navbar.html:23 +#: plinth/modules/help/templates/help_index.html:25 +#: plinth/templates/base.html:102 +msgid "Help" +msgstr "Hjælp" + +#: plinth/modules/first_boot/templates/firstboot_state0.html:45 +#, fuzzy +#| msgid "Start setup" +msgid "Start Setup" +msgstr "Start opsætning" -#: plinth/modules/first_boot/templates/firstboot_state0.html:54 +#: plinth/modules/first_boot/templates/firstboot_state0.html:49 +#, python-format msgid "" -"Please provide the following basic information to complete the setup process." +"To complete the setup of your %(box_name)s, please provide some basic " +"information." msgstr "" -"Indtast venligst følgende grundoplysninger for at færdiggøre konfigurationen." -#: plinth/modules/first_boot/templates/firstboot_state0.html:62 -msgid "Next" -msgstr "Næste" - -#: plinth/modules/first_boot/templates/firstboot_state1.html:39 +#: plinth/modules/first_boot/templates/firstboot_state1.html:41 msgid "Administrator Account" msgstr "Administratorkonto" -#: plinth/modules/first_boot/templates/firstboot_state1.html:42 -#| msgid "" -#| "Choose a username and password to access this web interface. The password " -#| "can be changed and other users can be added later. An LDAP user with " -#| "administrative privileges (sudo) is also created." +#: plinth/modules/first_boot/templates/firstboot_state1.html:44 msgid "" "Choose a username and password to access this web interface. The password " "can be changed later. This user will be granted administrative privileges. " @@ -807,7 +897,7 @@ "Kodeordet kan ændres senere. Brugeren vil få tildelt " "administratorrettigheder. Andre brugere kan tilføjes senere." -#: plinth/modules/first_boot/templates/firstboot_state1.html:55 +#: plinth/modules/first_boot/templates/firstboot_state1.html:57 msgid "Box it up!" msgstr "Box den!" @@ -816,35 +906,46 @@ msgstr "Konfiguration er færdig!" #: plinth/modules/first_boot/templates/firstboot_state10.html:32 +#, fuzzy, python-format +#| msgid "" +#| "To make your FreedomBox functional, you need some applications. " +#| "Applications will be installed the first time you access them." msgid "" -"FreedomBox setup is now complete. However, you should check the network " -"setup and modify it if necessary. Do not forget to change the default Wi-Fi " -"passwords." -msgstr "" -"Konfigurationen af FreedomBox er nu færdig. Du bør dog kontrollere " -"netværksopsætningen og tilpasse den hvis nødvendigt. Glem ikke at ændre " -"standardkodeordene for Wi-Fi." - -#: plinth/modules/first_boot/templates/firstboot_state10.html:40 -msgid "" -"To make your FreedomBox functional, you need some applications. " -"Applications will be installed the first time you access them." +"%(box_name)s setup is now complete. To make your %(box_name)s functional, " +"you need some applications. They will be installed the first time you " +"access them." msgstr "" "For at kunne noget nyttigt skal din FreedomBox bruge nogle applikationer. " "Disse installeres første gang du tilgår dem." -#: plinth/modules/first_boot/templates/firstboot_state10.html:47 -msgid "Network Configuration" +#: plinth/modules/first_boot/templates/firstboot_state10.html:41 +msgid "Go to Apps" +msgstr "Gå til Apps" + +#: plinth/modules/first_boot/templates/firstboot_state10.html:44 +#, fuzzy +#| msgid "Network Configuration" +msgid "Current Network Configuration" msgstr "Netværkskonfiguration" -#: plinth/modules/first_boot/templates/firstboot_state10.html:54 +#: plinth/modules/first_boot/templates/firstboot_state10.html:47 +#, fuzzy +#| msgid "" +#| "FreedomBox setup is now complete. However, you should check the network " +#| "setup and modify it if necessary. Do not forget to change the default Wi-" +#| "Fi passwords." +msgid "" +"You should check the network setup and modify it if necessary. Do not forget " +"to change the default Wi-Fi passwords!" +msgstr "" +"Konfigurationen af FreedomBox er nu færdig. Du bør dog kontrollere " +"netværksopsætningen og tilpasse den hvis nødvendigt. Glem ikke at ændre " +"standardkodeordene for Wi-Fi." + +#: plinth/modules/first_boot/templates/firstboot_state10.html:57 msgid "Go to Networks" msgstr "Gå til Netværk" -#: plinth/modules/first_boot/templates/firstboot_state10.html:59 -msgid "Go to Apps" -msgstr "Gå til Apps" - #: plinth/modules/first_boot/views.py:60 msgid "Setup Complete" msgstr "Konfiguration Færdig" @@ -857,9 +958,9 @@ msgid "Where to Get Help" msgstr "Få Hjælp" -#: plinth/modules/help/help.py:38 plinth/modules/help/help.py:72 -msgid "FreedomBox Manual" -msgstr "FreedomBox Brugervejledning" +#: plinth/modules/help/help.py:38 +msgid "Manual" +msgstr "" #: plinth/modules/help/help.py:48 msgid "Documentation and FAQ" @@ -870,15 +971,30 @@ msgid "About {box_name}" msgstr "Om {box_name}" +#: plinth/modules/help/help.py:73 +#, fuzzy, python-brace-format +#| msgid "About {box_name}" +msgid "{box_name} Manual" +msgstr "Om {box_name}" + #: plinth/modules/help/templates/help_about.html:30 +#, fuzzy, python-format +#| msgid "" +#| "FreedomBox is a community project to develop, design and promote personal " +#| "servers running free software for private, personal communications. It " +#| "is a networking appliance designed to allow interfacing with the rest of " +#| "the Internet under conditions of protected privacy and data security. It " +#| "hosts applications such as blog, wiki, website, social network, email, " +#| "web proxy and a Tor relay on a device that can replace your Wi-Fi router " +#| "so that your data stays with you." msgid "" -"FreedomBox is a community project to develop, design and promote personal " +"%(box_name)s is a community project to develop, design and promote personal " "servers running free software for private, personal communications. It is a " "networking appliance designed to allow interfacing with the rest of the " "Internet under conditions of protected privacy and data security. It hosts " "applications such as blog, wiki, website, social network, email, web proxy " -"and a Tor relay on a device that can replace your Wi-Fi router so that your " -"data stays with you." +"and a Tor relay, on a device that can replace your Wi-Fi router, so that " +"your data stays with you." msgstr "" "FreedomBox er et fællesskabsdrevet projekt med det mål at udvikle, designe " "og promovere personlige servere der drives af fri software til privat og " @@ -906,59 +1022,82 @@ "tilbage til dets påtænkte peer-to-peer arkitektur." #: plinth/modules/help/templates/help_about.html:56 +#, fuzzy, python-format +#| msgid "" +#| "There are a number of projects working to realize a future of distributed " +#| "services; FreedomBox aims to bring them all together in a convenient " +#| "package." msgid "" "There are a number of projects working to realize a future of distributed " -"services; FreedomBox aims to bring them all together in a convenient package." +"services; %(box_name)s aims to bring them all together in a convenient " +"package." msgstr "" "Der findes et antal projekter som arbejder på at realisere en fremtid hvor " "distribuerede tjenester er mere udbredte end i dag; FreedomBox har som mål " "at kombinere alle disse i én letanvendelig pakke." #: plinth/modules/help/templates/help_about.html:64 +#, fuzzy, python-format +#| msgid "" +#| "For more information about the FreedomBox project, see the FreedomBox Wiki." msgid "" -"For more information about the FreedomBox project, see the FreedomBox Wiki." +"For more information about the %(box_name)s project, see the %(box_name)s Wiki." msgstr "" "For mere information om FreedomBox-projektet, se FreedomBox Wiki-siden." -#: plinth/modules/help/templates/help_about.html:72 +#: plinth/modules/help/templates/help_about.html:73 msgid "Learn more »" msgstr "Lær mere »" -#: plinth/modules/help/templates/help_about.html:75 +#: plinth/modules/help/templates/help_about.html:76 #, python-format msgid "You are running Plinth version %(version)s." msgstr "Du kører Plinth version %(version)s." -#: plinth/modules/help/templates/help_index.html:25 -#: plinth/templates/base.html:98 -msgid "Help" -msgstr "Hjælp" +#: plinth/modules/help/templates/help_base.html:36 +#, python-format +msgid "%(box_name)s Setup" +msgstr "" #: plinth/modules/help/templates/help_index.html:29 -#, python-format +#, fuzzy, python-format +#| msgid "" +#| "The FreedomBox Manual is the best place to " +#| "start for information regarding %(box_name)s." msgid "" -"The FreedomBox Manual is the best place to " +"The %(box_name)s Manual is the best place to " "start for information regarding %(box_name)s." msgstr "" "FreedomBox Brugervejledningen er det bedste " "sted at starte når du har brug for information om %(box_name)s." #: plinth/modules/help/templates/help_index.html:36 +#, fuzzy, python-format +#| msgid "" +#| " " +#| "FreedomBox project wiki contains further information." msgid "" -" FreedomBox " -"project wiki contains further information." +" " +"%(box_name)s project wiki contains further information." msgstr "" "FreedomBox " "wiki-siden indeholder yderligere information." #: plinth/modules/help/templates/help_index.html:43 -msgid "" -"To seek help from FreedomBox community, queries may be posted on the " -"mailing list. The list archives also contain information about problems " -"faced by other users and possible solutions." +#, fuzzy, python-format +#| msgid "" +#| "To seek help from FreedomBox community, queries may be posted on the mailing list. The list archives also contain information about " +#| "problems faced by other users and possible solutions." +msgid "" +"To seek help from %(box_name)s community, queries may be posted on the mailing list. The list archives also contain information about " +"problems faced by other users and possible solutions." msgstr "" "Ønsker du hjælp af FreedomBox-fællesskabet, kan du skrive til #freedombox " +"channel using the IRC web interface." msgstr "" -"Mange bidragsydere og brugere af FreedomBox er også at finde i kanalen " -"#freedombox på irc.oftc.net IRC-netværket." #: plinth/modules/ikiwiki/__init__.py:38 -msgid "Wiki & Blog (Ikiwiki)" +#, fuzzy +#| msgid "Wiki & Blog (Ikiwiki)" +msgid "Wiki and Blog (ikiwiki)" msgstr "Wiki & Blog (Ikiwiki)" #: plinth/modules/ikiwiki/__init__.py:43 -msgid "Ikiwiki wikis and blogs" +#, fuzzy +#| msgid "Ikiwiki wikis and blogs" +msgid "ikiwiki wikis and blogs" msgstr "Ikiwiki wikier og blogs" #: plinth/modules/ikiwiki/forms.py:29 -msgid "Enable Ikiwiki" +#, fuzzy +#| msgid "Enable Ikiwiki" +msgid "Enable ikiwiki" msgstr "Aktiver Ikiwiki" #: plinth/modules/ikiwiki/forms.py:36 @@ -1012,24 +1158,30 @@ "\">/ikiwiki." #: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:27 -#, python-format -msgid "Delete Wiki/Blog %(name)s" +#, fuzzy, python-format +#| msgid "Delete Wiki/Blog %(name)s" +msgid "Delete Wiki or Blog %(name)s" msgstr "Slet Wiki/Blog %(name)s" #: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:33 +#, fuzzy +#| msgid "" +#| "This action will remove all the posts, pages and comments including " +#| "revision history. Delete this wiki/blog permanently?" msgid "" "This action will remove all the posts, pages and comments including revision " -"history. Delete this wiki/blog permanently?" +"history. Delete this wiki or blog permanently?" msgstr "" "Denne handling fjerner alle artikler, sider og kommentater inklusiv al " "historik. Slet denne wiki/blog permanent?" -#: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:43 +#: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:44 #, python-format msgid "Delete %(name)s" msgstr "Slet %(name)s" -#: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:46 +#: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:47 +#: plinth/modules/monkeysphere/templates/monkeysphere.html:60 #: plinth/modules/networks/templates/connections_delete.html:41 #: plinth/modules/users/templates/users_delete.html:41 msgid "Cancel" @@ -1062,7 +1214,9 @@ msgstr "Opret" #: plinth/modules/ikiwiki/views.py:73 -msgid "Wiki & Blog" +#, fuzzy +#| msgid "Wiki & Blog" +msgid "Wiki and Blog" msgstr "Wiki & Blog" #: plinth/modules/ikiwiki/views.py:106 @@ -1070,8 +1224,10 @@ msgstr "Administrer Wikier og Blogs" #: plinth/modules/ikiwiki/views.py:132 -msgid "Create Wiki/Blog" -msgstr "Opret Wiki/Blog" +#, fuzzy +#| msgid "Create a Wiki or Blog" +msgid "Create Wiki or Blog" +msgstr "Opret en Wiki eller Blog" #: plinth/modules/ikiwiki/views.py:145 #, python-brace-format @@ -1104,9 +1260,154 @@ msgstr "Kunne ikke slette {name}: {error}" #: plinth/modules/ikiwiki/views.py:182 -msgid "Delete Wiki/Blog" +#, fuzzy +#| msgid "Delete Wiki/Blog" +msgid "Delete Wiki or Blog" msgstr "Slet Wiki/Blog" +#: plinth/modules/letsencrypt/__init__.py:43 +#: plinth/modules/letsencrypt/templates/letsencrypt.html:38 +#: plinth/modules/letsencrypt/views.py:45 +msgid "Certificates (Let's Encrypt)" +msgstr "" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:41 +#, python-format +msgid "" +"A digital certficate allows users of a web service to verify the identity of " +"the service and to securely communicate with it. %(box_name)s can " +"automatically obtain and setup digital certificates for each available " +"domain. It does so by proving itself to be the owner of a domain to Let's " +"Encrypt, a certficate authority (CA)." +msgstr "" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:52 +msgid "" +"Let's Encrypt is a free, automated, and open certificate authority, run for " +"the public’s benefit by the Internet Security Research Group (ISRG). Please " +"read and agree with the Let's Encrypt Subscriber Agreement before using this service." +msgstr "" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:66 +#: plinth/modules/monkeysphere/templates/monkeysphere.html:70 +#, fuzzy +#| msgid "Domain Name" +msgid "Domain" +msgstr "Domænenavn" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:67 +msgid "Certificate Status" +msgstr "" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:68 +#, fuzzy +#| msgid "Security" +msgid "Website Security" +msgstr "Sikkerhed" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:69 +#: plinth/modules/monkeysphere/templates/monkeysphere.html:72 +#, fuzzy +#| msgid "Applications" +msgid "Actions" +msgstr "Applikationer" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:79 +#, python-format +msgid "Expires on %(expiry_date)s" +msgstr "" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:85 +msgid "No certficate" +msgstr "" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:102 +msgid "Revoke" +msgstr "" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:108 +msgid "Re-obtain" +msgstr "" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:115 +msgid "Obtain" +msgstr "" + +#: plinth/modules/letsencrypt/views.py:55 +#, python-brace-format +msgid "Certificate successfully revoked for domain {domain}" +msgstr "" + +#: plinth/modules/letsencrypt/views.py:60 +#, python-brace-format +msgid "Failed to revoke certificate for domain {domain}: {error}" +msgstr "" + +#: plinth/modules/letsencrypt/views.py:72 +#, python-brace-format +msgid "Certificate successfully obtained for domain {domain}" +msgstr "" + +#: plinth/modules/letsencrypt/views.py:77 +#, python-brace-format +msgid "Failed to obtain certificate for domain {domain}: {error}" +msgstr "" + +#: plinth/modules/monkeysphere/__init__.py:32 +#: plinth/modules/monkeysphere/templates/monkeysphere.html:35 +#: plinth/modules/monkeysphere/views.py:44 +msgid "Monkeysphere" +msgstr "" + +#: plinth/modules/monkeysphere/templates/monkeysphere.html:38 +msgid "" +"With Monkeysphere, a PGP key can be generated for each configured domain " +"serving SSH. The PGP public key can then be uploaded to the PGP keyservers. " +"Users connecting to this machine through SSH can verify that they are " +"connecting to the correct host. For users to trust the key, at least one " +"person (usually the machine owner) must sign the key using the regular PGP " +"key signing process. See the Monkeysphere SSH documentation for more details." +msgstr "" + +#: plinth/modules/monkeysphere/templates/monkeysphere.html:53 +msgid "Publishing key to keyserver..." +msgstr "" + +#: plinth/modules/monkeysphere/templates/monkeysphere.html:71 +msgid "GPG Fingerprint" +msgstr "" + +#: plinth/modules/monkeysphere/templates/monkeysphere.html:83 +#: plinth/modules/names/views.py:45 +msgid "Not Available" +msgstr "Ikke tilgængelig" + +#: plinth/modules/monkeysphere/templates/monkeysphere.html:93 +msgid "Generate PGP Key" +msgstr "" + +#: plinth/modules/monkeysphere/templates/monkeysphere.html:101 +msgid "Publish Key" +msgstr "" + +#: plinth/modules/monkeysphere/views.py:58 +msgid "Generated PGP key." +msgstr "" + +#: plinth/modules/monkeysphere/views.py:83 +msgid "Cancelled key publishing." +msgstr "" + +#: plinth/modules/monkeysphere/views.py:120 +msgid "Published key to keyserver." +msgstr "" + +#: plinth/modules/monkeysphere/views.py:122 +msgid "Error occurred while publishing key." +msgstr "" + #: plinth/modules/mumble/__init__.py:38 #: plinth/modules/mumble/templates/mumble.html:26 #: plinth/modules/mumble/views.py:58 @@ -1147,61 +1448,48 @@ msgid "Mumble server is not running" msgstr "Mumble-server er ikke aktiv" -#: plinth/modules/names/__init__.py:30 +#: plinth/modules/names/__init__.py:29 msgid "HTTP" msgstr "HTTP" -#: plinth/modules/names/__init__.py:31 +#: plinth/modules/names/__init__.py:30 msgid "HTTPS" msgstr "HTTPS" -#: plinth/modules/names/__init__.py:32 +#: plinth/modules/names/__init__.py:31 msgid "SSH" msgstr "SSH" -#: plinth/modules/names/__init__.py:46 plinth/modules/names/views.py:34 +#: plinth/modules/names/__init__.py:45 plinth/modules/names/views.py:34 msgid "Name Services" msgstr "Navnetjenester" -#: plinth/modules/names/__init__.py:107 -msgid "Not Available" -msgstr "Ikke tilgængelig" - #: plinth/modules/networks/__init__.py:108 #, python-brace-format msgid "Using DNSSEC on IPv{kind}" msgstr "Bruger DNSSEC på IPv{kind}" #: plinth/modules/networks/forms.py:30 -msgid "-- select --" -msgstr "-- vælg --" - -#: plinth/modules/networks/forms.py:42 msgid "Connection Type" msgstr "Forbindelsestype" -#: plinth/modules/networks/forms.py:49 plinth/modules/networks/forms.py:106 -#: plinth/modules/networks/forms.py:133 +#: plinth/modules/networks/forms.py:37 msgid "Connection Name" msgstr "Forbindelsesnavn" -#: plinth/modules/networks/forms.py:51 plinth/modules/networks/forms.py:108 -#: plinth/modules/networks/forms.py:135 +#: plinth/modules/networks/forms.py:39 msgid "Physical Interface" msgstr "Fysisk Interface" -#: plinth/modules/networks/forms.py:53 plinth/modules/networks/forms.py:110 -#: plinth/modules/networks/forms.py:137 +#: plinth/modules/networks/forms.py:41 msgid "The network device that this connection should be bound to." msgstr "Netværksenheden som denne forbindelse skal bindes til." -#: plinth/modules/networks/forms.py:56 plinth/modules/networks/forms.py:113 -#: plinth/modules/networks/forms.py:140 +#: plinth/modules/networks/forms.py:44 msgid "Firewall Zone" msgstr "Firewall-zone" -#: plinth/modules/networks/forms.py:57 plinth/modules/networks/forms.py:114 -#: plinth/modules/networks/forms.py:141 +#: plinth/modules/networks/forms.py:45 msgid "" "The firewall zone will control which services are available over this " "interfaces. Select Internal only for trusted networks." @@ -1209,11 +1497,11 @@ "Firewall-zonen bestemmer hvilke tjenester der er tilgængelige fra dette " "interface. Vælg Kun internt for netværk du har tillid til." -#: plinth/modules/networks/forms.py:61 plinth/modules/networks/forms.py:162 +#: plinth/modules/networks/forms.py:49 msgid "IPv4 Addressing Method" msgstr "IPv4 Adresseringsmetode" -#: plinth/modules/networks/forms.py:62 +#: plinth/modules/networks/forms.py:50 msgid "" "\"Shared\" method will start a DHCP server and \"Automatic\" method will " "acquire configuration from a DHCP server." @@ -1221,15 +1509,15 @@ "Metoden \"Delt\" vil starte en DHCP-server mens metoden \"Automatisk\" vil " "hente en konfiguration fra en DHCP-server." -#: plinth/modules/networks/forms.py:68 plinth/modules/networks/forms.py:170 +#: plinth/modules/networks/forms.py:56 msgid "Address" msgstr "Adresse" -#: plinth/modules/networks/forms.py:72 plinth/modules/networks/forms.py:174 +#: plinth/modules/networks/forms.py:60 msgid "Netmask" msgstr "Netmaske" -#: plinth/modules/networks/forms.py:73 plinth/modules/networks/forms.py:175 +#: plinth/modules/networks/forms.py:61 msgid "" "Optional value. If left blank, a default netmask based on the address will " "be used." @@ -1237,21 +1525,21 @@ "Ikke obligatorisk. Hvis ikke angivet, vil en standardværdi for netmasken " "baseret på adressen anvendes." -#: plinth/modules/networks/forms.py:78 plinth/modules/networks/forms.py:180 +#: plinth/modules/networks/forms.py:66 #: plinth/modules/networks/templates/connection_show.html:202 #: plinth/modules/networks/templates/connection_show.html:241 msgid "Gateway" msgstr "Gateway" -#: plinth/modules/networks/forms.py:79 plinth/modules/networks/forms.py:181 +#: plinth/modules/networks/forms.py:67 msgid "Optional value." msgstr "Ikke obligatorisk." -#: plinth/modules/networks/forms.py:83 plinth/modules/networks/forms.py:185 +#: plinth/modules/networks/forms.py:71 msgid "DNS Server" msgstr "DNS-server" -#: plinth/modules/networks/forms.py:84 plinth/modules/networks/forms.py:186 +#: plinth/modules/networks/forms.py:72 msgid "" "Optional value. If this value is given and IPv4 addressing method is " "\"Automatic\", the DNS Servers provided by a DHCP server will be ignored." @@ -1260,12 +1548,11 @@ "\"Automatisk\", vil DNS-serverne der konfigureres af en DHCP-server blive " "ignoreret." -#: plinth/modules/networks/forms.py:90 plinth/modules/networks/forms.py:192 -#| msgid "DNS server" +#: plinth/modules/networks/forms.py:78 msgid "Second DNS Server" msgstr "Sekundær DNS-server" -#: plinth/modules/networks/forms.py:91 plinth/modules/networks/forms.py:193 +#: plinth/modules/networks/forms.py:79 msgid "" "Optional value. If this value is given and IPv4 Addressing Method is " "\"Automatic\", the DNS Servers provided by a DHCP server will be ignored." @@ -1274,29 +1561,29 @@ "\"Automatisk\", vil DNS-serverne der konfigureres af en DHCP-server blive " "ignoreret." -#: plinth/modules/networks/forms.py:121 -msgid "Show password" -msgstr "Vis kodeord" +#: plinth/modules/networks/forms.py:89 +msgid "-- select --" +msgstr "-- vælg --" -#: plinth/modules/networks/forms.py:145 +#: plinth/modules/networks/forms.py:175 #: plinth/modules/networks/templates/connection_show.html:144 msgid "SSID" msgstr "SSID" -#: plinth/modules/networks/forms.py:146 +#: plinth/modules/networks/forms.py:176 msgid "The visible name of the network." msgstr "Netværkets synlige navn." -#: plinth/modules/networks/forms.py:148 +#: plinth/modules/networks/forms.py:178 #: plinth/modules/networks/templates/connection_show.html:157 msgid "Mode" msgstr "Tilstand" -#: plinth/modules/networks/forms.py:153 +#: plinth/modules/networks/forms.py:183 msgid "Authentication Mode" msgstr "Autentificeringstilstand" -#: plinth/modules/networks/forms.py:154 +#: plinth/modules/networks/forms.py:184 msgid "" "Select WPA if the wireless network is secured and requires clients to have " "the password to connect." @@ -1304,31 +1591,22 @@ "Vælg WPA hvis det trådløse netværk er sikret og kræver at klienter kender " "kodeordet for at oprette forbindelse." -#: plinth/modules/networks/forms.py:158 +#: plinth/modules/networks/forms.py:188 msgid "Passphrase" msgstr "Kodesætning" -#: plinth/modules/networks/forms.py:166 -msgid "" -"Select Automatic (DHCP) if you are connecting to an existing wireless " -"network. Shared mode is useful when running an Access Point." -msgstr "" -"Vælg \"Automatisk\" (DHCP) hvis du forbinder til et eksisterende trådløst " -"netværk. \"Delt\"-metoden er nyttig hvis enheden skal fungere som " -"accesspunkt." - #: plinth/modules/networks/networks.py:36 #: plinth/modules/networks/networks.py:56 msgid "Network Connections" msgstr "Netværksforbindelser" #: plinth/modules/networks/networks.py:38 -#: plinth/modules/networks/networks.py:273 +#: plinth/modules/networks/networks.py:242 msgid "Nearby Wi-Fi Networks" msgstr "Wi-Fi-netværk i Nærheden" #: plinth/modules/networks/networks.py:40 -#: plinth/modules/networks/networks.py:295 +#: plinth/modules/networks/networks.py:264 msgid "Add Connection" msgstr "Tilføj forbindelse" @@ -1352,59 +1630,59 @@ msgid "This type of connection is not yet understood." msgstr "Denne type forbindelse kan ikke konfigureres herfra endnu." -#: plinth/modules/networks/networks.py:170 -#: plinth/modules/networks/networks.py:229 +#: plinth/modules/networks/networks.py:139 +#: plinth/modules/networks/networks.py:198 #: plinth/modules/networks/templates/connections_edit.html:34 msgid "Edit Connection" msgstr "Rediger Forbindelse" -#: plinth/modules/networks/networks.py:240 +#: plinth/modules/networks/networks.py:209 #, python-brace-format msgid "Activated connection {name}." msgstr "Aktiverede forbindelse {name}." -#: plinth/modules/networks/networks.py:243 +#: plinth/modules/networks/networks.py:212 msgid "Failed to activate connection: Connection not found." msgstr "Kunne ikke aktivere forbindelse: Forbindelse ikke fundet." -#: plinth/modules/networks/networks.py:247 +#: plinth/modules/networks/networks.py:216 #, python-brace-format msgid "Failed to activate connection {name}: No suitable device is available." msgstr "" "Kunne ikke aktivere forbindelse {name}: Ingen passende enhed er tilgængelig." -#: plinth/modules/networks/networks.py:260 +#: plinth/modules/networks/networks.py:229 #, python-brace-format msgid "Deactivated connection {name}." msgstr "Deaktiverede forbindelse {name}." -#: plinth/modules/networks/networks.py:263 +#: plinth/modules/networks/networks.py:232 msgid "Failed to de-activate connection: Connection not found." msgstr "Kan ikke deaktivere forbindelse: Forbindelse ikke fundet." -#: plinth/modules/networks/networks.py:325 +#: plinth/modules/networks/networks.py:282 msgid "Adding New Ethernet Connection" msgstr "Tilføjer Ny Ethernet Forbindelse" -#: plinth/modules/networks/networks.py:350 +#: plinth/modules/networks/networks.py:300 msgid "Adding New PPPoE Connection" msgstr "Tilføjer Ny PPPoE Forbindelse" -#: plinth/modules/networks/networks.py:399 +#: plinth/modules/networks/networks.py:332 msgid "Adding New Wi-Fi Connection" msgstr "Tilføjer Ny Wi-Fi Forbindelse" -#: plinth/modules/networks/networks.py:413 +#: plinth/modules/networks/networks.py:346 #, python-brace-format msgid "Connection {name} deleted." msgstr "Slettede forbindelse {name}." -#: plinth/modules/networks/networks.py:416 -#: plinth/modules/networks/networks.py:425 +#: plinth/modules/networks/networks.py:349 +#: plinth/modules/networks/networks.py:358 msgid "Failed to delete connection: Connection not found." msgstr "Kunne ikke slette forbindelse: Forbindelse ikke fundet." -#: plinth/modules/networks/networks.py:430 +#: plinth/modules/networks/networks.py:363 #: plinth/modules/networks/templates/connections_delete.html:26 msgid "Delete Connection" msgstr "Slet Forbindelse" @@ -1414,7 +1692,7 @@ msgstr "Rediger Forbindelse" #: plinth/modules/networks/templates/connection_show.html:43 -#: plinth/templates/base.html:119 +#: plinth/templates/base.html:123 msgid "Edit" msgstr "Rediger" @@ -1560,10 +1838,16 @@ msgstr "Firewall-zone" #: plinth/modules/networks/templates/connection_show.html:280 -msgid "" -"This interface should be connected to local network/machine. If you connect " -"this interface to a public network, services meant to be available only " -"internally will become available externally. This is a security risk." +#, fuzzy +#| msgid "" +#| "This interface should be connected to local network/machine. If you " +#| "connect this interface to a public network, services meant to be " +#| "available only internally will become available externally. This is a " +#| "security risk." +msgid "" +"This interface should be connected to a local network/machine. If you " +"connect this interface to a public network, services meant to be available " +"only internally will become available externally. This is a security risk." msgstr "" "Dette netværksinterface er beregnet til at forbinde til et lokalt netværk " "eller maskine. Forbinder du det til et offentligt netværk, vil tjenester som " @@ -1571,20 +1855,31 @@ "Dette er en sikkerhedsrisiko." #: plinth/modules/networks/templates/connection_show.html:300 -msgid "" -"This interface should receive your Internet connection. If you connect it " -"your a local network/machine, many services meant to available only " -"internally will not be available." +#, fuzzy +#| msgid "" +#| "This interface should receive your Internet connection. If you connect it " +#| "your a local network/machine, many services meant to available only " +#| "internally will not be available." +msgid "" +"This interface should receive your Internet connection. If you connect it to " +"a local network/machine, many services meant to available only internally " +"will not be available." msgstr "" "Dette netværksinterface er beregnet til at modtage din internetforbindelse. " "Forbinder du det til et lokalt netværk eller maskine, vil tjenester som er " "beregnet til at være eksternt tilgængelige ikke være det." #: plinth/modules/networks/templates/connection_show.html:319 -msgid "" -"This interface is not maintained by FreedomBox. Its security status is " -"unknown to FreedomBox. Many FreedomBox services may not be available on " -"this interface. It is recommended that you deactivate/delete this " +#, fuzzy, python-format +#| msgid "" +#| "This interface is not maintained by FreedomBox. Its security status is " +#| "unknown to FreedomBox. Many FreedomBox services may not be available on " +#| "this interface. It is recommended that you deactivate/delete this " +#| "connection and re-configure it." +msgid "" +"This interface is not maintained by %(box_name)s. Its security status is " +"unknown to %(box_name)s. Many %(box_name)s services may not be available on " +"this interface. It is recommended that you deactivate or delete this " "connection and re-configure it." msgstr "" "Dette netværksinterface vedligeholdes ikke af FreedomBox. Dets " @@ -1677,10 +1972,17 @@ msgstr "Aktiver OpenVPN-server" #: plinth/modules/openvpn/templates/openvpn.html:38 -#, python-format +#, fuzzy, python-format +#| msgid "" +#| "Virtual Private Network (VPN) is a technique for securely connecting two " +#| "machines in order to access resources of a private network. While you " +#| "are away from home, you can connect to your %(box_name)s in order to join " +#| "your home network and access private/internal services provided by " +#| "%(box_name)s. You can also access the rest of the Internet via " +#| "%(box_name)s for added security and anonymity." msgid "" "Virtual Private Network (VPN) is a technique for securely connecting two " -"machines in order to access resources of a private network. While you are " +"devices in order to access resources of a private network. While you are " "away from home, you can connect to your %(box_name)s in order to join your " "home network and access private/internal services provided by %(box_name)s. " "You can also access the rest of the Internet via %(box_name)s for added " @@ -1698,12 +2000,19 @@ msgstr "Profil" #: plinth/modules/openvpn/templates/openvpn.html:54 -#, python-format +#, fuzzy, python-format +#| msgid "" +#| "To connect to %(box_name)s's VPN, you need to download a profile and feed " +#| "it to an OpenVPN client on your mobile or desktop machine. OpenVPN " +#| "Clients are available for most platforms. See documentation on recommended clients and instructions on how to " +#| "configure them." msgid "" "To connect to %(box_name)s's VPN, you need to download a profile and feed it " "to an OpenVPN client on your mobile or desktop machine. OpenVPN Clients are " "available for most platforms. See documentation on recommended clients and instructions on how to " "configure them." msgstr "" @@ -2219,7 +2528,6 @@ msgstr "Quassel IRC-klient" #: plinth/modules/quassel/forms.py:29 -#| msgid "Enable Tor Hidden Service" msgid "Enable Quassel core service" msgstr "Aktiver Quassel grund-tjeneste" @@ -2233,9 +2541,9 @@ "one or more Quassel clients from a desktop or a mobile can be used to " "connect and disconnect from it." msgstr "" -"Quassel er en IRC-applikation som er opdelt i to; en \"kerne\" og en \"" -"klient\". Dette gør det muligt for kerne-delen at forblive tilsluttet til " -"IRC-servere og fortsætte med at modtage beskeder, selv når klienten afbryder " +"Quassel er en IRC-applikation som er opdelt i to; en \"kerne\" og en \"klient" +"\". Dette gør det muligt for kerne-delen at forblive tilsluttet til IRC-" +"servere og fortsætte med at modtage beskeder, selv når klienten afbryder " "forbindelsen. %(box_name)s kan køre Quassel kerne-tjenesten og holde dig " "kontinuerligt online, og du vil kunne bruge en eller flere Quassel-klienter " "fra en computer eller en mobil til at forbinde til den." @@ -2248,20 +2556,76 @@ "\">mobile devices are available." msgstr "" "Du kan forbinde til din Quassel kerne-tjeneste på standardporten 4242. " -"Klienter til at forbinde fra din computer og mobile " -"enhed er tilgængelige." +"Klienter til at forbinde fra din computer og mobile enhed er tilgængelige." #: plinth/modules/quassel/templates/quassel.html:55 -#| msgid "Mumble server is running" msgid "Quassel core service is running" msgstr "Quassel kerne-tjeneste er aktiv" #: plinth/modules/quassel/templates/quassel.html:58 -#| msgid "Mumble server is not running" msgid "Quassel core service is not running" msgstr "Quassel kerne-tjeneste er ikke aktiv" +#: plinth/modules/repro/__init__.py:36 +#: plinth/modules/repro/templates/repro.html:26 +#: plinth/modules/repro/views.py:55 +#, fuzzy +#| msgid "Server port" +msgid "SIP Server (repro)" +msgstr "Serverport" + +#: plinth/modules/repro/__init__.py:41 +#, fuzzy +#| msgid "Second DNS Server" +msgid "repro SIP Server" +msgstr "Sekundær DNS-server" + +#: plinth/modules/repro/forms.py:29 +#, fuzzy +#| msgid "Enable Quassel core service" +msgid "Enable repro service" +msgstr "Aktiver Quassel grund-tjeneste" + +#: plinth/modules/repro/templates/repro.html:29 +msgid "" +"repro provides various SIP services that a SIP softphone can utilize to " +"provide audio and video calls as well as presence and instant messaging. " +"repro provides a server and SIP user accounts that clients can use to let " +"their presence known. It also acts as a proxy to federate SIP " +"communications to other servers on the Internet similar to email." +msgstr "" + +#: plinth/modules/repro/templates/repro.html:39 +msgid "" +"To make SIP calls, a client application is needed. Available clients include " +"Jitsi (for computers) and CSipSimple (for Android phones)." +msgstr "" + +#: plinth/modules/repro/templates/repro.html:48 +msgid "" +"Note: Before using repro, domains and users will need to " +"be configured using the web-based " +"configuration panel. Users in the admin group will be able to " +"log in to the repro configuration panel. After setting the domain, it is " +"required to restart the repro service. Disable the service and re-enable it." +msgstr "" + +#: plinth/modules/repro/templates/repro.html:63 +#, fuzzy +#| msgid "Quassel core service is running" +msgid "repro service is running" +msgstr "Quassel kerne-tjeneste er aktiv" + +#: plinth/modules/repro/templates/repro.html:66 +#, fuzzy +#| msgid "Quassel core service is not running" +msgid "repro service is not running" +msgstr "Quassel kerne-tjeneste er ikke aktiv" + #: plinth/modules/restore/__init__.py:36 #: plinth/modules/restore/templates/restore_index.html:26 #: plinth/modules/restore/views.py:46 @@ -2277,13 +2641,19 @@ msgstr "Aktiver reStore" #: plinth/modules/restore/templates/restore_index.html:29 -#, python-format +#, fuzzy, python-format +#| msgid "" +#| "reStore is a server for unhosted web " +#| "applications. The idea is to uncouple web applications from data. No " +#| "matter where a web application is served from, the data can be stored on " +#| "an unhosted storage server of user's choice. With reStore, your " +#| "%(cfg.box_name)s becomes your unhosted storage server." msgid "" "reStore is a server for unhosted web " "applications. The idea is to uncouple web applications from data. No " "matter where a web application is served from, the data can be stored on an " -"unhosted storage server of user's choice. With reStore, your " -"%(cfg.box_name)s becomes your unhosted storage server." +"unhosted storage server of user's choice. With reStore, your %(box_name)s " +"becomes your unhosted storage server." msgstr "" "reStore er en server til brug for ikke-hostede web-applilkationer som " "anvender standarden kaldet unhosted.org. " @@ -2387,7 +2757,7 @@ #: plinth/modules/system/system.py:33 #: plinth/modules/system/templates/system.html:25 -#: plinth/templates/base.html:105 +#: plinth/templates/base.html:109 msgid "System Configuration" msgstr "Systemkonfiguration" @@ -2404,33 +2774,81 @@ "Disse muligheder påvirker %(box_name)s på det meste grundlæggende niveau, så " "vær forsigtig!" -#: plinth/modules/tor/__init__.py:50 +#: plinth/modules/tor/__init__.py:48 plinth/modules/tor/templates/tor.html:35 +msgid "Anonymity Network (Tor)" +msgstr "Anonymiseringstjeneste (Tor)" + +#: plinth/modules/tor/__init__.py:53 +#, fuzzy +#| msgid "Anonymity Network (Tor)" +msgid "Tor Anonymity Network" +msgstr "Anonymiseringstjeneste (Tor)" + +#: plinth/modules/tor/__init__.py:58 +msgid "Tor Bridge Relay" +msgstr "" + +#: plinth/modules/tor/__init__.py:76 plinth/modules/tor/views.py:144 +msgid "Tor Hidden Service" +msgstr "Tor Skjult Tjeneste" + +#: plinth/modules/tor/__init__.py:222 msgid "Tor relay port available" msgstr "Tor videresendelsesport tilgængelig" -#: plinth/modules/tor/__init__.py:58 +#: plinth/modules/tor/__init__.py:230 msgid "Obfs3 transport registered" msgstr "Obfs3 transport registreret" -#: plinth/modules/tor/__init__.py:64 +#: plinth/modules/tor/__init__.py:236 msgid "Obfs4 transport registered" msgstr "Obfs4 transport registreret" -#: plinth/modules/tor/__init__.py:101 +#: plinth/modules/tor/__init__.py:273 #, python-brace-format msgid "Access URL {url} on tcp{kind} via Tor" msgstr "Tilgå URL {url} ved brug af tcp{kind} via Tor" -#: plinth/modules/tor/__init__.py:112 +#: plinth/modules/tor/__init__.py:284 #, python-brace-format msgid "Confirm Tor usage at {url} on tcp{kind}" msgstr "Bekræft brug af Tor på {url} ved brug af tcp{kind}" -#: plinth/modules/tor/templates/tor.html:26 plinth/modules/tor/tor.py:66 -msgid "Anonymity Network (Tor)" -msgstr "Anonymiseringstjeneste (Tor)" +#: plinth/modules/tor/forms.py:32 +msgid "Enable Tor" +msgstr "Aktiver Tor" + +#: plinth/modules/tor/forms.py:35 +msgid "Enable Tor Hidden Service" +msgstr "Aktiver Tor Skjult Tjeneste" -#: plinth/modules/tor/templates/tor.html:29 +#: plinth/modules/tor/forms.py:38 +#, fuzzy, python-brace-format +#| msgid "" +#| "A hidden service will allow FreedomBox to provide selected services (such " +#| "as ownCloud or Chat) without revealing its location." +msgid "" +"A hidden service will allow {box_name} to provide selected services (such as " +"ownCloud or chat) without revealing its location." +msgstr "" +"En skjult tjeneste tillader FreedomBox at levere udvalgte tjenester (såsom " +"ownCloud og Chat) uden at afsløre sin lokation." + +#: plinth/modules/tor/forms.py:42 +msgid "Download software packages over Tor" +msgstr "Hent softwarepakker over Tor" + +#: plinth/modules/tor/forms.py:44 +msgid "" +"When enabled, software will be downloaded over the Tor network for " +"installations and upgrades. This adds a degree of privacy and security " +"during software downloads." +msgstr "" +"Når aktiveret, vil softwareinstallationer og opdateringer blive hentet over " +"Tor-netværket. Dette giver en vis grad af privatlivsbeskyttelse og sikkerhed " +"under hentningen." + +#: plinth/modules/tor/templates/tor.html:38 msgid "" "Tor is an anonymous communication system. You can learn more about it from " "the Tor Project website. For " @@ -2444,28 +2862,34 @@ "du bruger Tor-browseren." -#: plinth/modules/tor/templates/tor.html:44 +#: plinth/modules/tor/templates/tor.html:54 +#, fuzzy +#| msgid "Configuration updated" +msgid "Tor configuration is being updated" +msgstr "Konfiguration opdateret" + +#: plinth/modules/tor/templates/tor.html:62 msgid "Tor is running" msgstr "Tor er aktiv" -#: plinth/modules/tor/templates/tor.html:47 +#: plinth/modules/tor/templates/tor.html:65 msgid "Tor is not running" msgstr "Tor er ikke aktiv" -#: plinth/modules/tor/templates/tor.html:59 +#: plinth/modules/tor/templates/tor.html:77 msgid "Hidden Service" msgstr "Skjult Tjeneste" -#: plinth/modules/tor/templates/tor.html:60 -#: plinth/modules/tor/templates/tor.html:102 +#: plinth/modules/tor/templates/tor.html:78 +#: plinth/modules/tor/templates/tor.html:120 msgid "Port" msgstr "Port" -#: plinth/modules/tor/templates/tor.html:85 +#: plinth/modules/tor/templates/tor.html:103 msgid "Bridge" msgstr "Bro" -#: plinth/modules/tor/templates/tor.html:88 +#: plinth/modules/tor/templates/tor.html:106 #, python-format msgid "" "Your %(box_name)s is configured as a Tor bridge with obfsproxy, so it can " @@ -2478,89 +2902,41 @@ "router eller firewall, bør du sikre at de følgende porte er åbne, eller " "viderestillede, hvis nødvendigt:" -#: plinth/modules/tor/templates/tor.html:101 +#: plinth/modules/tor/templates/tor.html:119 msgid "Service" msgstr "Tjeneste" -#: plinth/modules/tor/templates/tor.html:117 +#: plinth/modules/tor/templates/tor.html:135 msgid "SOCKS" msgstr "SOCKS" -#: plinth/modules/tor/templates/tor.html:120 +#: plinth/modules/tor/templates/tor.html:138 #, python-format msgid "A Tor SOCKS port is available on your %(box_name)s on TCP port 9050." msgstr "En Tor SOCKS-port er tilgængelig på din %(box_name)s TCP-port 9050." -#: plinth/modules/tor/tor.py:46 -msgid "Enable Tor" -msgstr "Aktiver Tor" - -#: plinth/modules/tor/tor.py:49 -msgid "Enable Tor Hidden Service" -msgstr "Aktiver Tor Skjult Tjeneste" - -#: plinth/modules/tor/tor.py:51 -msgid "" -"A hidden service will allow FreedomBox to provide selected services (such as " -"ownCloud or Chat) without revealing its location." -msgstr "" -"En skjult tjeneste tillader FreedomBox at levere udvalgte tjenester (såsom " -"ownCloud og Chat) uden at afsløre sin lokation." - -#: plinth/modules/tor/tor.py:55 -msgid "Download software packages over Tor" -msgstr "Hent softwarepakker over Tor" - -#: plinth/modules/tor/tor.py:57 -msgid "" -"When enabled, software will be downloaded over the Tor network for " -"installations and upgrades. This adds a degree of privacy and security " -"during software downloads." -msgstr "" -"Når aktiveret, vil softwareinstallationer og opdateringer blive hentet over " -"Tor-netværket. Dette giver en vis grad af privatlivsbeskyttelse og sikkerhed " -"under hentningen." - -#: plinth/modules/tor/tor.py:85 plinth/modules/tor/tor.py:285 -msgid "Tor Hidden Service" -msgstr "Tor Skjult Tjeneste" - -#: plinth/modules/tor/tor.py:115 +#: plinth/modules/tor/views.py:68 msgid "Tor Control Panel" msgstr "Tor Kontrolpanel" -#: plinth/modules/tor/tor.py:240 +#: plinth/modules/tor/views.py:79 #, python-brace-format msgid "Action error: {0} [{1}] [{2}]" msgstr "Fejl under handling: {0} [{1}] [{2}]" -#: plinth/modules/tor/tor.py:256 -msgid "Tor enabled" -msgstr "Tor aktiveret" - -#: plinth/modules/tor/tor.py:259 -msgid "Tor disabled" -msgstr "Tor deaktiveret" - -#: plinth/modules/tor/tor.py:264 -msgid "Tor hidden service enabled" -msgstr "Anonymiseringstjenesten Tor aktiveret" - -#: plinth/modules/tor/tor.py:267 -msgid "Tor hidden service disabled" -msgstr "Anonymiseringstjenesten Tor deaktiveret" - -#: plinth/modules/tor/tor.py:292 -msgid "Enabled package download over Tor" -msgstr "Pakke-hentning over Tor aktiveret" - -#: plinth/modules/tor/tor.py:295 -msgid "Disabled package download over Tor" -msgstr "Pakke-hentning over Tor deaktiveret" +#: plinth/modules/tor/views.py:148 +#, fuzzy +#| msgid "Configuration updated" +msgid "Configuration updated." +msgstr "Konfiguration opdateret" + +#: plinth/modules/tor/views.py:150 +msgid "An error occurred during configuration." +msgstr "" #: plinth/modules/transmission/__init__.py:38 #: plinth/modules/transmission/templates/transmission.html:26 -#: plinth/modules/transmission/views.py:63 +#: plinth/modules/transmission/views.py:67 msgid "BitTorrent (Transmission)" msgstr "BitTorrent (Transmission)" @@ -2577,18 +2953,14 @@ msgstr "Download-mappe" #: plinth/modules/transmission/forms.py:34 -#| msgid "" -#| "Directory where downloads are saved. If you change the default " -#| "directory, ensure that the new directory exists and is writable by " -#| "\"debian-tramission\" user." msgid "" "Directory where downloads are saved. If you change the default directory, " "ensure that the new directory exists and is writable by \"debian-transmission" "\" user." msgstr "" "Mappe hvori downloadede filer gemmes. Hvis du ændrer standardindstillingen, " -"skal du sikre dig at den nye mappe eksisterer og er skrivbar af brugeren \"" -"debian-transmission\"." +"skal du sikre dig at den nye mappe eksisterer og er skrivbar af brugeren " +"\"debian-transmission\"." #: plinth/modules/transmission/forms.py:40 msgid "Username to login to the web interface." @@ -2641,74 +3013,73 @@ "Når aktiveret, vil programmet unattended-upgrades blive kørt en gang " "dagligt. Dette vil forsøge at opdatere alle tilgængelige pakker." -#: plinth/modules/upgrades/templates/upgrades.html:40 -msgid "There was an error while upgrading." -msgstr "Fejl under opdatering." - -#: plinth/modules/upgrades/templates/upgrades.html:43 -#: plinth/modules/upgrades/templates/upgrades.html:59 -msgid "Output from unattended-upgrades:" -msgstr "Uddata fra unattended-upgrades:" - -#: plinth/modules/upgrades/templates/upgrades.html:50 -msgid "The operating system is up to date now.  " -msgstr "Operativsystemet er nu opdateret.  " - -#: plinth/modules/upgrades/templates/upgrades.html:53 -msgid "Show Details" -msgstr "Vis Detaljer" +#: plinth/modules/upgrades/templates/upgrades.html:37 +msgid "" +"Upgrades install the latest software and security updates. When automatic " +"upgrades are enabled, upgrades are automatically run every night. You don't " +"normally need to start the upgrade process." +msgstr "" -#: plinth/modules/upgrades/templates/upgrades.html:69 +#: plinth/modules/upgrades/templates/upgrades.html:45 msgid "" -"This will run unattended-upgrades, which will attempt to upgrade your system " -"with the latest Debian packages. It may take a few minutes to complete." +"Depending on the number of packages to install, this may take a long time to " +"complete. While upgrades are in progress, you will not be able to install " +"other packages. During the upgrade, this web interface may be temporarily " +"unavailable and show an error. Refresh the page to continue." msgstr "" -"Dette vil køre programmet unattended-upgrades som forsøger at opdatere dit " -"system med de nyeste Debian-pakker. Dette kan tage nogle minutter at " -"gennemføre." -#: plinth/modules/upgrades/templates/upgrades.html:80 +#: plinth/modules/upgrades/templates/upgrades.html:58 msgid "Upgrade now »" msgstr "Opdater nu »" -#: plinth/modules/upgrades/templates/upgrades.html:87 -msgid "System is being upgraded." -msgstr "Systemet opdateres." +#: plinth/modules/upgrades/templates/upgrades.html:65 +#, fuzzy +#| msgid "ejabberd is running" +msgid "A package manager is running." +msgstr "ejabberd er aktiv" + +#: plinth/modules/upgrades/templates/upgrades.html:70 +msgid "Recent log from upgrades:" +msgstr "" -#: plinth/modules/upgrades/views.py:35 plinth/modules/upgrades/views.py:64 +#: plinth/modules/upgrades/views.py:36 plinth/modules/upgrades/views.py:66 msgid "Automatic Upgrades" msgstr "Automatisk Opdatering" -#: plinth/modules/upgrades/views.py:37 +#: plinth/modules/upgrades/views.py:38 msgid "Upgrade Packages" msgstr "Opdater Pakker" -#: plinth/modules/upgrades/views.py:75 +#: plinth/modules/upgrades/views.py:96 +#, fuzzy +#| msgid "Upgrade completed." +msgid "Upgrade process started." +msgstr "Opdatering færdig." + +#: plinth/modules/upgrades/views.py:99 +#, fuzzy +#| msgid "Upgrade failed." +msgid "Starting upgrade failed." +msgstr "Opdatering fejlede." + +#: plinth/modules/upgrades/views.py:102 msgid "Package Upgrades" msgstr "Pakkeopdateringer" -#: plinth/modules/upgrades/views.py:116 +#: plinth/modules/upgrades/views.py:131 #, python-brace-format msgid "Error when configuring unattended-upgrades: {error}" msgstr "" "Kunne ikke konfigurere automatisk opdatering (unattended-upgrades): {error}" -#: plinth/modules/upgrades/views.py:121 +#: plinth/modules/upgrades/views.py:136 msgid "Automatic upgrades enabled" msgstr "Automatisk opdatering aktiveret" -#: plinth/modules/upgrades/views.py:123 +#: plinth/modules/upgrades/views.py:138 msgid "Automatic upgrades disabled" msgstr "Automatisk opdatering deaktiveret" -#: plinth/modules/upgrades/views.py:142 -msgid "Upgrade completed." -msgstr "Opdatering færdig." - -#: plinth/modules/upgrades/views.py:144 -msgid "Upgrade failed." -msgstr "Opdatering fejlede." - #: plinth/modules/users/__init__.py:36 msgid "Users and Groups" msgstr "Brugere og Grupper" @@ -2750,19 +3121,30 @@ msgid "Failed to add new user to {group} group." msgstr "Kunne ikke tilføje ny bruger til gruppen {group}." -#: plinth/modules/users/forms.py:126 +#: plinth/modules/users/forms.py:92 +msgid "SSH Keys" +msgstr "" + +#: plinth/modules/users/forms.py:96 +msgid "" +"Setting an SSH public key will allow this user to securely log in to the " +"system without using a password. You may enter multiple keys, one on each " +"line. Blank lines and lines starting with # will be ignored." +msgstr "" + +#: plinth/modules/users/forms.py:136 msgid "Renaming LDAP user failed." msgstr "Kunne ikke omdøbe LDAP-bruger." -#: plinth/modules/users/forms.py:138 +#: plinth/modules/users/forms.py:148 msgid "Failed to remove user from group." msgstr "Kunne ikke fjerne bruger fra gruppe." -#: plinth/modules/users/forms.py:149 +#: plinth/modules/users/forms.py:159 msgid "Failed to add user to group." msgstr "Kunne ikke tilføje bruger til gruppe." -#: plinth/modules/users/forms.py:174 +#: plinth/modules/users/forms.py:188 msgid "Changing LDAP user password failed." msgstr "Kunne ikke ændre LDAP-kodeord." @@ -2781,7 +3163,7 @@ msgstr "Opret Bruger" #: plinth/modules/users/templates/users_delete.html:26 -#: plinth/modules/users/views.py:103 +#: plinth/modules/users/views.py:110 msgid "Delete User" msgstr "Slet Bruger" @@ -2836,20 +3218,20 @@ msgid "Edit User" msgstr "Rediger Bruger" -#: plinth/modules/users/views.py:113 +#: plinth/modules/users/views.py:120 #, python-brace-format msgid "User {user} deleted." msgstr "Brugeren {user} slettet." -#: plinth/modules/users/views.py:120 +#: plinth/modules/users/views.py:127 msgid "Deleting LDAP user failed." msgstr "Kunne ikke slette LDAP-bruger." -#: plinth/modules/users/views.py:129 +#: plinth/modules/users/views.py:136 msgid "Change Password" msgstr "Ændr kodeord" -#: plinth/modules/users/views.py:130 +#: plinth/modules/users/views.py:137 msgid "Password changed successfully." msgstr "Kodeord blev ændret." @@ -2932,8 +3314,10 @@ msgid "Secure Shell (SSH) Server" msgstr "Secure Shell (SSH) Server" -#: plinth/service.py:78 -msgid "FreedomBox Web Interface (Plinth)" +#: plinth/service.py:79 +#, fuzzy, python-brace-format +#| msgid "FreedomBox Web Interface (Plinth)" +msgid "{box_name} Web Interface (Plinth)" msgstr "FreedomBox Web-brugerflade (Plinth)" #: plinth/templates/404.html:25 @@ -2970,27 +3354,25 @@ "issues\">fejlhåndteringsvørktøjet så vi kan rette den." #: plinth/templates/base.html:49 -msgid "Plinth administrative interface for the FreedomBox" +#, fuzzy, python-format +#| msgid "Plinth administrative interface for the FreedomBox" +msgid "Plinth administrative interface for the %(box_name)s" msgstr "Plinth administrationsværktøj til FreedomBox" -#: plinth/templates/base.html:52 plinth/templates/base.html.py:88 -msgid "FreedomBox" -msgstr "FreedomBox" - -#: plinth/templates/base.html:81 +#: plinth/templates/base.html:83 msgid "Toggle navigation" msgstr "Åbn/luk navigation" -#: plinth/templates/base.html:121 plinth/templates/base.html.py:122 +#: plinth/templates/base.html:125 plinth/templates/base.html.py:126 msgid "Change password" msgstr "Ændr kodeord" -#: plinth/templates/base.html:125 plinth/templates/base.html.py:126 -#: plinth/templates/base.html:139 plinth/templates/base.html.py:141 +#: plinth/templates/base.html:129 plinth/templates/base.html.py:130 +#: plinth/templates/base.html:143 plinth/templates/base.html.py:145 msgid "Log out" msgstr "Log ud" -#: plinth/templates/base.html:131 plinth/templates/base.html.py:133 +#: plinth/templates/base.html:135 plinth/templates/base.html.py:137 msgid "Log in" msgstr "Log ind" @@ -3032,6 +3414,88 @@ msgid "%(percentage)s%% complete" msgstr "%(percentage)s%% færdig" +#~ msgid "show password" +#~ msgstr "vis kodeord" + +#~ msgid "The following is the current status:" +#~ msgstr "Den nuværende status er som følger:" + +#~ msgid "Congratulations! Your FreedomBox is up and running!" +#~ msgstr "Tillykke! Din FreedomBox er nu kørende!" + +#~ msgid "" +#~ "Please provide the following basic information to complete the setup " +#~ "process." +#~ msgstr "" +#~ "Indtast venligst følgende grundoplysninger for at færdiggøre " +#~ "konfigurationen." + +#~ msgid "Next" +#~ msgstr "Næste" + +#~ msgid "FreedomBox Manual" +#~ msgstr "FreedomBox Brugervejledning" + +#~ msgid "" +#~ "Many FreedomBox contributors and users are also available on the " +#~ "#freedombox channel of the irc.oftc.net IRC network." +#~ msgstr "" +#~ "Mange bidragsydere og brugere af FreedomBox er også at finde i kanalen " +#~ "#freedombox på irc.oftc.net IRC-netværket." + +#~ msgid "Create Wiki/Blog" +#~ msgstr "Opret Wiki/Blog" + +#~ msgid "" +#~ "Select Automatic (DHCP) if you are connecting to an existing wireless " +#~ "network. Shared mode is useful when running an Access Point." +#~ msgstr "" +#~ "Vælg \"Automatisk\" (DHCP) hvis du forbinder til et eksisterende trådløst " +#~ "netværk. \"Delt\"-metoden er nyttig hvis enheden skal fungere som " +#~ "accesspunkt." + +#~ msgid "Tor enabled" +#~ msgstr "Tor aktiveret" + +#~ msgid "Tor disabled" +#~ msgstr "Tor deaktiveret" + +#~ msgid "Tor hidden service enabled" +#~ msgstr "Anonymiseringstjenesten Tor aktiveret" + +#~ msgid "Tor hidden service disabled" +#~ msgstr "Anonymiseringstjenesten Tor deaktiveret" + +#~ msgid "Enabled package download over Tor" +#~ msgstr "Pakke-hentning over Tor aktiveret" + +#~ msgid "Disabled package download over Tor" +#~ msgstr "Pakke-hentning over Tor deaktiveret" + +#~ msgid "There was an error while upgrading." +#~ msgstr "Fejl under opdatering." + +#~ msgid "Output from unattended-upgrades:" +#~ msgstr "Uddata fra unattended-upgrades:" + +#~ msgid "The operating system is up to date now.  " +#~ msgstr "Operativsystemet er nu opdateret.  " + +#~ msgid "Show Details" +#~ msgstr "Vis Detaljer" + +#~ msgid "" +#~ "This will run unattended-upgrades, which will attempt to upgrade your " +#~ "system with the latest Debian packages. It may take a few minutes to " +#~ "complete." +#~ msgstr "" +#~ "Dette vil køre programmet unattended-upgrades som forsøger at opdatere " +#~ "dit system med de nyeste Debian-pakker. Dette kan tage nogle minutter at " +#~ "gennemføre." + +#~ msgid "System is being upgraded." +#~ msgstr "Systemet opdateres." + #~ msgid "" #~ "You can install and run various services and applications on your " #~ "%(box_name)s." diff -Nru plinth-0.7.2/plinth/locale/de/LC_MESSAGES/django.po plinth-0.8.1/plinth/locale/de/LC_MESSAGES/django.po --- plinth-0.7.2/plinth/locale/de/LC_MESSAGES/django.po 2015-12-23 11:34:40.000000000 +0000 +++ plinth-0.8.1/plinth/locale/de/LC_MESSAGES/django.po 2016-02-16 03:55:53.000000000 +0000 @@ -9,8 +9,8 @@ msgstr "" "Project-Id-Version: FreedomBox UI\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-12-20 13:58+0530\n" -"PO-Revision-Date: 2015-12-20 17:46+0000\n" +"POT-Creation-Date: 2016-01-31 22:19+0530\n" +"PO-Revision-Date: 2016-02-12 18:31+0000\n" "Last-Translator: Dietmar \n" "Language-Team: German " "\n" @@ -51,11 +51,15 @@ msgid "Cannot connect to {host}:{port}" msgstr "Verbindung zu {host}:{port} fehlgeschlagen" +#: plinth/context_processors.py:36 +msgid "FreedomBox" +msgstr "FreedomBox" + #: plinth/modules/apps/apps.py:26 msgid "Apps" msgstr "Apps" -#: plinth/modules/apps/apps.py:32 plinth/templates/base.html.py:90 +#: plinth/modules/apps/apps.py:32 plinth/templates/base.html.py:93 msgid "Applications" msgstr "Anwendungen" @@ -98,31 +102,40 @@ msgstr "Dienste-Erkennung einschalten" #: plinth/modules/avahi/templates/avahi.html:29 -msgid "" -"Service discovery allows other machines on the network to discover your " -"FreedomBox and services running on it. It also allows FreedomBox to " -"discover other machines and services running on your local network. Service " +#, python-format +#| msgid "" +#| "Service discovery allows other machines on the network to discover your " +#| "FreedomBox and services running on it. It also allows FreedomBox to " +#| "discover other machines and services running on your local network. " +#| "Service discovery is not essential and works only on internal networks. " +#| "It may be disabled to improve security especially when connecting to a " +#| "hostile local network." +msgid "" +"Service discovery allows other devices on the network to discover your " +"%(box_name)s and services running on it. It also allows %(box_name)s to " +"discover other devices and services running on your local network. Service " "discovery is not essential and works only on internal networks. It may be " "disabled to improve security especially when connecting to a hostile local " "network." msgstr "" -"Dienste-Erkennung erlaubt es anderen Geräten im Netzwerk die FreedomBox und " -"deren Dienste zu finden. Zudem erlaubt es der FreedomBox andere Geräte im " -"Netzwerk ausfindig zu machen. Dienste-Erkennung ist nicht zwingend " +"Die Dienste-Erkennung erlaubt es anderen Geräten im Netzwerk Ihre %(box_name)" +"s und deren Dienste zu finden. Zudem erlaubt es %(box_name)s andere Geräte " +"im Netzwerk ausfindig zu machen. Dienste-Erkennung ist nicht zwingend " "erforderlich und funktioniert nur in internen Netzen. Es kann deaktiviert " "werden um die Sicherheit vor allem in einem unsicheren Netz zu erhöhen." #: plinth/modules/avahi/templates/avahi.html:40 #: plinth/modules/datetime/templates/datetime.html:35 #: plinth/modules/deluge/templates/deluge.html:39 -#: plinth/modules/dynamicdns/dynamicdns.py:38 +#: plinth/modules/dynamicdns/dynamicdns.py:39 #: plinth/modules/firewall/templates/firewall.html:57 #: plinth/modules/mumble/templates/mumble.html:44 #: plinth/modules/networks/templates/connection_show.html:261 #: plinth/modules/openvpn/templates/openvpn.html:81 #: plinth/modules/privoxy/templates/privoxy.html:48 #: plinth/modules/quassel/templates/quassel.html:50 -#: plinth/modules/tor/templates/tor.html:39 +#: plinth/modules/repro/templates/repro.html:58 +#: plinth/modules/tor/templates/tor.html:48 #: plinth/modules/transmission/templates/transmission.html:42 #: plinth/modules/xmpp/templates/xmpp.html:58 msgid "Status" @@ -145,9 +158,10 @@ #: plinth/modules/owncloud/templates/owncloud.html:51 #: plinth/modules/privoxy/templates/privoxy.html:62 #: plinth/modules/quassel/templates/quassel.html:65 +#: plinth/modules/repro/templates/repro.html:72 #: plinth/modules/roundcube/templates/roundcube.html:62 #: plinth/modules/shaarli/templates/shaarli.html:40 -#: plinth/modules/tor/templates/tor.html:74 +#: plinth/modules/tor/templates/tor.html:92 #: plinth/modules/transmission/templates/transmission.html:56 #: plinth/modules/xmpp/templates/xmpp.html:72 msgid "Configuration" @@ -163,10 +177,11 @@ #: plinth/modules/openvpn/templates/openvpn.html:138 #: plinth/modules/privoxy/templates/privoxy.html:70 #: plinth/modules/quassel/templates/quassel.html:73 +#: plinth/modules/repro/templates/repro.html:80 #: plinth/modules/restore/templates/restore_index.html:54 #: plinth/modules/roundcube/templates/roundcube.html:70 #: plinth/modules/shaarli/templates/shaarli.html:48 -#: plinth/modules/tor/templates/tor.html:82 +#: plinth/modules/tor/templates/tor.html:100 #: plinth/modules/transmission/templates/transmission.html:64 #: plinth/modules/upgrades/templates/upgrades_configure.html:34 #: plinth/modules/xmpp/templates/xmpp.html:80 @@ -175,12 +190,13 @@ #: plinth/modules/avahi/views.py:73 plinth/modules/datetime/views.py:85 #: plinth/modules/deluge/views.py:80 -#: plinth/modules/dynamicdns/dynamicdns.py:368 +#: plinth/modules/dynamicdns/dynamicdns.py:371 #: plinth/modules/ikiwiki/views.py:95 plinth/modules/mumble/views.py:80 #: plinth/modules/openvpn/views.py:142 plinth/modules/privoxy/views.py:83 -#: plinth/modules/quassel/views.py:76 plinth/modules/restore/views.py:68 -#: plinth/modules/roundcube/views.py:84 plinth/modules/shaarli/views.py:74 -#: plinth/modules/transmission/views.py:105 plinth/modules/xmpp/views.py:100 +#: plinth/modules/quassel/views.py:76 plinth/modules/repro/views.py:77 +#: plinth/modules/restore/views.py:68 plinth/modules/roundcube/views.py:84 +#: plinth/modules/shaarli/views.py:74 plinth/modules/transmission/views.py:109 +#: plinth/modules/xmpp/views.py:100 msgid "Configuration updated" msgstr "Konfiguration aktualisiert" @@ -188,68 +204,84 @@ #: plinth/modules/deluge/views.py:82 plinth/modules/ikiwiki/views.py:97 #: plinth/modules/mumble/views.py:82 plinth/modules/openvpn/views.py:144 #: plinth/modules/owncloud/owncloud.py:93 plinth/modules/privoxy/views.py:85 -#: plinth/modules/quassel/views.py:78 plinth/modules/restore/views.py:70 -#: plinth/modules/roundcube/views.py:86 plinth/modules/shaarli/views.py:76 -#: plinth/modules/tor/tor.py:250 plinth/modules/transmission/views.py:107 -#: plinth/modules/upgrades/views.py:103 plinth/modules/xmpp/views.py:102 +#: plinth/modules/quassel/views.py:78 plinth/modules/repro/views.py:79 +#: plinth/modules/restore/views.py:70 plinth/modules/roundcube/views.py:86 +#: plinth/modules/shaarli/views.py:76 plinth/modules/tor/views.py:111 +#: plinth/modules/transmission/views.py:111 +#: plinth/modules/upgrades/views.py:118 plinth/modules/xmpp/views.py:102 msgid "Setting unchanged" msgstr "Einstellung unverändert" -#: plinth/modules/config/config.py:83 plinth/modules/config/config.py:120 -#: plinth/modules/dynamicdns/dynamicdns.py:145 +#: plinth/modules/config/config.py:84 plinth/modules/config/config.py:121 +#: plinth/modules/dynamicdns/dynamicdns.py:148 msgid "Invalid domain name" msgstr "Ungültiger Domain Name" -#: plinth/modules/config/config.py:94 +#: plinth/modules/config/config.py:95 msgid "Hostname" msgstr "Hostname" -#: plinth/modules/config/config.py:96 -msgid "" -"Hostname is the local name by which other machines on the local network " -"reach your machine. It must start and end with an alphabet or a digit and " -"have as interior characters only alphabets, digits and hyphens. Total " +#: plinth/modules/config/config.py:97 +#, python-brace-format +#| msgid "" +#| "Hostname is the local name by which other machines on the local network " +#| "reach your machine. It must start and end with an alphabet or a digit " +#| "and have as interior characters only alphabets, digits and hyphens. " +#| "Total length must be 63 characters or less." +msgid "" +"Hostname is the local name by which other devices on the local network can " +"reach your {box_name}. It must start and end with an alphabet or a digit " +"and have as interior characters only alphabets, digits and hyphens. Total " "length must be 63 characters or less." msgstr "" "Ein Hostname ist der lokale Name unter dem andere Geräte im lokalen Netzwerk " -"Ihr Gerät erreichen können. Er muss alphanumerisch sein, mit einem " +"Ihre {box_name} erreichen können. Er muss alphanumerisch sein, mit einem " "Buchstaben beginnen und enden und darf nicht länger als 63 Zeichen sein." -#: plinth/modules/config/config.py:104 +#: plinth/modules/config/config.py:105 msgid "Invalid hostname" msgstr "Ungültiger Hostname" -#: plinth/modules/config/config.py:107 plinth/modules/config/config.py:153 +#: plinth/modules/config/config.py:108 plinth/modules/config/config.py:153 #: plinth/modules/config/config.py:265 -#: plinth/modules/dynamicdns/dynamicdns.py:140 +#: plinth/modules/dynamicdns/dynamicdns.py:143 msgid "Domain Name" msgstr "Domain-Name" -#: plinth/modules/config/config.py:109 -msgid "" -"Domain name is the global name by which other machines on the Internet can " -"reach you. It must consist of labels separated by dots. Each label must " -"start and end with an alphabet or a digit and have as interior characters " -"only alphabets, digits and hyphens. Length of each label must be 63 " -"characters or less. Total length of domain name must be 253 characters or " -"less." +#: plinth/modules/config/config.py:110 +#, python-brace-format +#| msgid "" +#| "Domain name is the global name by which other machines on the Internet " +#| "can reach you. It must consist of labels separated by dots. Each label " +#| "must start and end with an alphabet or a digit and have as interior " +#| "characters only alphabets, digits and hyphens. Length of each label must " +#| "be 63 characters or less. Total length of domain name must be 253 " +#| "characters or less." +msgid "" +"Domain name is the global name by which other devices on the Internet can " +"reach your {box_name}. It must consist of labels separated by dots. Each " +"label must start and end with an alphabet or a digit and have as interior " +"characters only alphabets, digits and hyphens. Length of each label must be " +"63 characters or less. Total length of domain name must be 253 characters " +"or less." msgstr "" -"Ein Domainname ist der globale Name unter dem andere Geräte im Internet Ihr " -"Gerät erreichen können. Er muss aus durch Punkte getrennte Kennungen " +"Ein Domainname ist der globale Name unter dem andere Geräte im Internet Ihre " +"{box_name} erreichen können. Er muss aus durch Punkte getrennte Kennungen " "bestehen. Jede Kennung muss alphanumerisch beginnen und enden und aus " "alphanumerischen Zeichen und Bindestrichen bestehen. Jede Kennung darf " "maximal 63 Zeichen lang sein, die Gesamtlänge des Domainnames 253 Zeichen." -#: plinth/modules/config/config.py:124 +#: plinth/modules/config/config.py:125 msgid "Language" msgstr "Sprache" -#: plinth/modules/config/config.py:126 -msgid "Language for this FreedomBox web administration interface" -msgstr "Sprache für dieses FreedomBox Web-Interface" +#: plinth/modules/config/config.py:127 +#| msgid "Language for this FreedomBox web administration interface" +msgid "Language for this web administration interface" +msgstr "Sprache dieses Web-Interfaces" #: plinth/modules/config/config.py:135 -#: plinth/modules/dynamicdns/dynamicdns.py:36 +#: plinth/modules/dynamicdns/dynamicdns.py:37 #: plinth/modules/ikiwiki/views.py:36 msgid "Configure" msgstr "Konfigurieren" @@ -391,7 +423,7 @@ #: plinth/modules/diagnostics/diagnostics.py:55 msgid "System Diagnostics" -msgstr "System Diagnose" +msgstr "System-Diagnose" #: plinth/modules/diagnostics/diagnostics.py:78 msgid "Diagnostic Test" @@ -445,16 +477,16 @@ msgid "Result" msgstr "Ergebnis" -#: plinth/modules/dynamicdns/dynamicdns.py:34 plinth/modules/help/help.py:40 +#: plinth/modules/dynamicdns/dynamicdns.py:35 plinth/modules/help/help.py:40 msgid "About" msgstr "Über" -#: plinth/modules/dynamicdns/dynamicdns.py:44 -#: plinth/modules/dynamicdns/dynamicdns.py:53 +#: plinth/modules/dynamicdns/dynamicdns.py:45 +#: plinth/modules/dynamicdns/dynamicdns.py:54 msgid "Dynamic DNS" msgstr "Dynamisches DNS" -#: plinth/modules/dynamicdns/dynamicdns.py:70 +#: plinth/modules/dynamicdns/dynamicdns.py:71 msgid "" "The Variables <User>, <Pass>, <Ip>, <Domain> may be " "used within the URL. For details see the update URL templates of the example " @@ -464,7 +496,7 @@ "in der URL verwendet werden. Beispiele sind in den update URLs der " "vorkonfigurierten Anbieter zu finden." -#: plinth/modules/dynamicdns/dynamicdns.py:74 +#: plinth/modules/dynamicdns/dynamicdns.py:75 msgid "" "Please choose an update protocol according to your provider. If your " "provider does not support the GnudIP protocol or your provider is not listed " @@ -474,27 +506,31 @@ "Anbieter GnuDIP nicht unterstützt oder der Anbieter nicht aufgeführt ist, " "kann die Aktualisierungs-URL Ihres Anbieters angegeben werden." -#: plinth/modules/dynamicdns/dynamicdns.py:79 +#: plinth/modules/dynamicdns/dynamicdns.py:80 +#| msgid "" +#| "Please do not enter a URL here (like \"https://example.com/\") but only " +#| "the hostname of the GnuDIP server (like \"example.pcom\")." msgid "" "Please do not enter a URL here (like \"https://example.com/\") but only the " -"hostname of the GnuDIP server (like \"example.pcom\")." +"hostname of the GnuDIP server (like \"example.com\")." msgstr "" "Bitte hier keine URL (wie \"https://example.com/\") eingeben, sondern nur " "den Hostnamen des GnuDIP Servers (wie \"example.com\")." -#: plinth/modules/dynamicdns/dynamicdns.py:83 -msgid "The public domain name you want use to reach your box." +#: plinth/modules/dynamicdns/dynamicdns.py:84 +#, python-brace-format +#| msgid "The public domain name you want use to reach your box." +msgid "The public domain name you want use to reach your {box_name}." msgstr "" -"Der öffentliche Domain Name unter welchem die FreedomBox erreichbar sein " -"soll." +"Der öffentliche Domain Name unter dem Ihre {box_name} erreichbar sein soll." -#: plinth/modules/dynamicdns/dynamicdns.py:85 +#: plinth/modules/dynamicdns/dynamicdns.py:87 msgid "Use this option if your provider uses self signed certificates." msgstr "" "Verwenden Sie diese Option wenn Ihr Anbieter selbst-signierte Zertifikate " "verwendet." -#: plinth/modules/dynamicdns/dynamicdns.py:88 +#: plinth/modules/dynamicdns/dynamicdns.py:90 msgid "" "If this option is selected, your username and password will be used for HTTP " "basic authentication." @@ -503,25 +539,30 @@ "DNS Kontos auch zur HTTP Authentifizierung für die update URL verwendet " "werden." -#: plinth/modules/dynamicdns/dynamicdns.py:91 +#: plinth/modules/dynamicdns/dynamicdns.py:93 msgid "" "Leave this field empty if you want to keep your previous configured password." msgstr "Wird dieses Feld leer gelassen, dann bleibt das Passwort unverändert." -#: plinth/modules/dynamicdns/dynamicdns.py:94 +#: plinth/modules/dynamicdns/dynamicdns.py:96 +#, python-brace-format +#| msgid "" +#| "Optional Value. If your FreedomBox is not connected directly to the " +#| "Internet (i.e. connected to a NAT router) this URL is used to figure out " +#| "the real Internet IP. The URL should simply return the IP wherethe client " +#| "comes from. Example: http://myip.datasystems24.de" msgid "" -"Optional Value. If your FreedomBox is not connected directly to the Internet " +"Optional Value. If your {box_name} is not connected directly to the Internet " "(i.e. connected to a NAT router) this URL is used to figure out the real " -"Internet IP. The URL should simply return the IP wherethe client comes from. " -"Example: http://myip.datasystems24.de" +"Internet IP. The URL should simply return the IP where the client comes from " +"(example: http://myip.datasystems24.de)." msgstr "" -"Optionaler Wert. Wenn die FreedomBox nicht direkt mit dem Internet verbunden " -"ist (zum Beispiel weil die Box an einen Router angeschlossen ist welcher die " -"IP per NAT umsetzt) wird diese URL verwendet um die öffentliche IP Adresse " -"in Erfahrung zu bringen. Die URL sollte nichts weiter als die IP Adresse " -"liefern. Beispiel: http://myip.datasystems24.de" +"Optionaler Wert. Wenn Ihre {box_name} nicht direkt mit dem Internet " +"verbunden ist, (zum Beispiel über ein NAT) wird diese URL verwendet um die " +"öffentliche IP Adresse in Erfahrung zu bringen. Die URL sollte einfach nur " +"IP-Adresse des Clients liefern (zum Beispiel: http://myip.datasystems24.de)." -#: plinth/modules/dynamicdns/dynamicdns.py:101 +#: plinth/modules/dynamicdns/dynamicdns.py:104 msgid "" "You should have been requested to select a username when you created the " "account." @@ -529,107 +570,125 @@ "Beim Erstellen des Nutzer Kontos sollte der Anbieter zur Vergabe eines " "Passwortes aufgefordert haben." -#: plinth/modules/dynamicdns/dynamicdns.py:112 +#: plinth/modules/dynamicdns/dynamicdns.py:115 msgid "Enable Dynamic DNS" msgstr "Dynamisches DNS einschalten" -#: plinth/modules/dynamicdns/dynamicdns.py:115 +#: plinth/modules/dynamicdns/dynamicdns.py:118 msgid "Service type" msgstr "Dienst Typ" -#: plinth/modules/dynamicdns/dynamicdns.py:120 +#: plinth/modules/dynamicdns/dynamicdns.py:123 msgid "GnudIP Server Address" msgstr "GnuDIP Server Adresse" -#: plinth/modules/dynamicdns/dynamicdns.py:125 +#: plinth/modules/dynamicdns/dynamicdns.py:128 msgid "Invalid server name" msgstr "Ungültiger Server Name" -#: plinth/modules/dynamicdns/dynamicdns.py:128 +#: plinth/modules/dynamicdns/dynamicdns.py:131 msgid "Update URL" msgstr "Update URL" -#: plinth/modules/dynamicdns/dynamicdns.py:132 -msgid "accept all SSL certificates" -msgstr "alle Zertifikate akzeptieren" - -#: plinth/modules/dynamicdns/dynamicdns.py:136 -msgid "use HTTP basic authentication" +#: plinth/modules/dynamicdns/dynamicdns.py:135 +#| msgid "accept all SSL certificates" +msgid "Accept all SSL certificates" +msgstr "Alle Zertifikate akzeptieren" + +#: plinth/modules/dynamicdns/dynamicdns.py:139 +#| msgid "use HTTP basic authentication" +msgid "Use HTTP basic authentication" msgstr "HTTP basic authentication verwenden" -#: plinth/modules/dynamicdns/dynamicdns.py:148 -#: plinth/modules/networks/forms.py:118 plinth/modules/transmission/forms.py:39 +#: plinth/modules/dynamicdns/dynamicdns.py:151 +#: plinth/modules/networks/forms.py:146 plinth/modules/transmission/forms.py:39 msgid "Username" msgstr "Benutzername" -#: plinth/modules/dynamicdns/dynamicdns.py:151 -#: plinth/modules/networks/forms.py:119 plinth/modules/transmission/forms.py:43 +#: plinth/modules/dynamicdns/dynamicdns.py:154 +#: plinth/modules/networks/forms.py:147 plinth/modules/transmission/forms.py:43 msgid "Password" msgstr "Passwort" -#: plinth/modules/dynamicdns/dynamicdns.py:154 -msgid "show password" -msgstr "Passwort anzeigen" +#: plinth/modules/dynamicdns/dynamicdns.py:157 +#: plinth/modules/networks/forms.py:149 +msgid "Show password" +msgstr "Zeige Passwort" -#: plinth/modules/dynamicdns/dynamicdns.py:158 +#: plinth/modules/dynamicdns/dynamicdns.py:161 msgid "IP check URL" msgstr "URL zur Erkennung der IP-Adresse" -#: plinth/modules/dynamicdns/dynamicdns.py:184 +#: plinth/modules/dynamicdns/dynamicdns.py:187 msgid "Please provide update URL or a GnuDIP Server" msgstr "Bitte eine update URL oder einen GnuDIP Server angeben" -#: plinth/modules/dynamicdns/dynamicdns.py:187 +#: plinth/modules/dynamicdns/dynamicdns.py:190 msgid "Please provide GnuDIP username" msgstr "Bitte GnuDIP Nutzernamen angeben" -#: plinth/modules/dynamicdns/dynamicdns.py:190 +#: plinth/modules/dynamicdns/dynamicdns.py:193 msgid "Please provide GnuDIP domain" msgstr "Bitte GnuDIP Domain angeben" -#: plinth/modules/dynamicdns/dynamicdns.py:195 +#: plinth/modules/dynamicdns/dynamicdns.py:198 msgid "Please provide a password" msgstr "Bitte ein Passwort angeben" -#: plinth/modules/dynamicdns/dynamicdns.py:214 +#: plinth/modules/dynamicdns/dynamicdns.py:217 msgid "Configure Dynamic DNS" msgstr "Dynamisches DNS konfigurieren" -#: plinth/modules/dynamicdns/dynamicdns.py:236 +#: plinth/modules/dynamicdns/dynamicdns.py:239 msgid "Status of Dynamic DNS" msgstr "Status des Dynamischen DNS" #: plinth/modules/dynamicdns/templates/dynamicdns.html:25 -msgid "DynamicDNS client" +#| msgid "DynamicDNS client" +msgid "Dynamic DNS Client" msgstr "Dynamischer DNS Client" #: plinth/modules/dynamicdns/templates/dynamicdns.html:28 +#, python-format +#| msgid "" +#| "If your internet provider changes your IP address periodic (i.e. every " +#| "24h) it may be hard for others to find you in the WEB. And for this " +#| "reason nobody may find the services which are provided by FreedomBox " +#| "(like your ownCloud)." msgid "" "If your internet provider changes your IP address periodic (i.e. every 24h) " "it may be hard for others to find you in the WEB. And for this reason nobody " -"may find the services which are provided by FreedomBox (like your ownCloud)." +"may find the services which are provided by %(box_name)s, such as ownCloud." msgstr "" "Wenn Ihr Internetanbieter die öffentliche IP Adresse zyklisch erneuert (zum " "Beispiel alle 24 Stunden) dann ist es für andere Internetnutzer nicht " -"möglich Ihre FreedomBox im Netz zu finden. Aus diesem Grund können " -"FreedomBox Dienste wie zum Beispiel ownCloud nicht aus dem Internet erreicht " -"werden." +"möglich Sie im Netz zu finden. Aus diesem Grund können %(box_name)s Dienste " +"wie zum Beispiel ownCloud nicht aus dem Internet erreicht werden." #: plinth/modules/dynamicdns/templates/dynamicdns.html:37 +#| msgid "" +#| "The solution is to assign a DNS name to your IP address and update the " +#| "DNS name every time your IP is changed by your Internet provider. Dynamic " +#| "DNS allows you to push your current public IP address to an gnudip " +#| "server. Afterwards the Server will assign your DNS name with the new IP " +#| "and if someone from the internet asks for your DNS name he will get your " +#| "current IP answered." msgid "" "The solution is to assign a DNS name to your IP address and update the DNS " "name every time your IP is changed by your Internet provider. Dynamic DNS " "allows you to push your current public IP address to an gnudip server. Afterwards " "the Server will assign your DNS name with the new IP and if someone from the " -"internet asks for your DNS name he will get your current IP answered." +"Internet asks for your DNS name he will get your current IP answered." msgstr "" -"Die Lösung ist, einen Dynamischen Domain Namen (DNS) mit der IP Adresse zu " +"Die Lösung ist, einen Dynamischen Domain Namen (DNS) mit der IP-Adresse zu " "verknüpfen und diesen DNS Eintrag jedes mal zu aktualisieren wenn sich die " "IP Adresse ändert. Dynamisches DNS erlaubt es die aktuelle IP Adresse zu " "einem gnudip " "Server zu übertragen. Anschließend wird der Server die aktuelle IP Adresse " -"mit dem DNS Namen verknüpfen." +"mit dem DNS Namen verknüpfen und wenn jemand aus dem Internet nach Ihrem DNS " +"Namen sucht erhält er die aktuelle IP-Adresse." #: plinth/modules/dynamicdns/templates/dynamicdns.html:50 msgid "" @@ -646,15 +705,18 @@ "target='_blank'>freedns.afraid.org können per update URL genutzt werden." #: plinth/modules/dynamicdns/templates/dynamicdns.html:61 -msgid "" -"If your freedombox is connected behind some NAT router, don't forget to add " -"portforwarding (i.e. forward some standard ports like 80 and 443) to your " -"freedombox device." -msgstr "" -"Wenn die FreedomBox an einen NAT Router angeschlossen ist, muss zusätzlich " -"ein Portforwarding im Router eingerichtet werden. Zum Beispiel können die " -"TCP Standard Ports (80 und 443) auf die IP Adresse der FreedomBox weiter " -"geleitet werden." +#, python-format +#| msgid "" +#| "If your freedombox is connected behind some NAT router, don't forget to " +#| "add portforwarding (i.e. forward some standard ports like 80 and 443) to " +#| "your freedombox device." +msgid "" +"If your %(box_name)s is connected behind some NAT router, don't forget to " +"add port forwarding (i.e. forward some standard ports like 80 and 443)." +msgstr "" +"Wenn Ihre %(box_name)s an einen NAT Router angeschlossen ist, muss " +"zusätzlich ein Portforwarding im Router eingerichtet werden (zum Beispiel " +"Standard Ports wie 80 und 443)." #: plinth/modules/dynamicdns/templates/dynamicdns_configure.html:30 msgid "" @@ -678,20 +740,26 @@ "angegeben wurde, dann kann der NAT Typ nicht erkannt werden." #: plinth/modules/dynamicdns/templates/dynamicdns_status.html:35 -msgid "Direct connection to the internet." +#| msgid "Direct connection to the internet." +msgid "Direct connection to the Internet." msgstr "Direkte Verbindung zum Internet." #: plinth/modules/dynamicdns/templates/dynamicdns_status.html:37 #, python-format -msgid "" -"Behind NAT, this means that dynamic DNS service will poll the \"IP check URL" -"\" for changes (we need the \"IP check URL\" for this reason - otherwise we " -"will not detect IP changes). It may take up to %(timer)s minutes until we " -"update your DNS entry in case of WAN IP change." -msgstr "" -"Hinter einem NAT; das bedeutet dass der Dynamische DNS Dienst zyklisch die " -"\"IP check URL\" abfragen wird (aus diesem Grund wird eine \"IP check URL\" " -"zwingend benötigt). Nach einer Änderung der IP Adresse durch Ihren " +#| msgid "" +#| "Behind NAT, this means that dynamic DNS service will poll the \"IP check " +#| "URL\" for changes (we need the \"IP check URL\" for this reason - " +#| "otherwise we will not detect IP changes). It may take up to %(timer)s " +#| "minutes until we update your DNS entry in case of WAN IP change." +msgid "" +"Behind NAT. This means that Dynamic DNS service will poll the \"IP check URL" +"\" for changes (the \"IP check URL\" entry is needed for this - otherwise IP " +"changes will not be detected). In case the WAN IP changes, it may take up " +"to %(timer)s minutes until your DNS entry is updated." +msgstr "" +"Hinter einem NAT; das bedeutet dass der Dynamische DNS Dienst zyklisch die \"" +"IP check URL\" abfragen wird (aus diesem Grund wird eine \"IP check URL\" " +"zwingend benötigt). Nach einer Änderung der IP-Adresse durch Ihren " "Internetanbieter kann es bis zu %(timer)s Minuten dauern bis die neue IP " "Adresse dem DNS Server bekannt gemacht wird." @@ -707,18 +775,22 @@ #: plinth/modules/firewall/templates/firewall.html:28 #, python-format -msgid "" -"Firewall is a network security system that controls the incoming and " -"outgoing network traffic on your %(box_name)s. Keeping a firewall enabled " -"and properly configured reduces risk of security threat from the Internet." -msgstr "" -"Firewall ist ein Netzwerk-Sicherheitssystem das den ein- und ausgehenden " -"Verkehr der %(box_name)s kontrolliert. Die Firewall aktiv und korrekt " -"konfiguriert zu halten reduziert Sicherheitsrisiken aus dem Internet." +#| msgid "" +#| "Firewall is a network security system that controls the incoming and " +#| "outgoing network traffic on your %(box_name)s. Keeping a firewall enabled " +#| "and properly configured reduces risk of security threat from the Internet." +msgid "" +"Firewall is a security system that controls the incoming and outgoing " +"network traffic on your %(box_name)s. Keeping a firewall enabled and " +"properly configured reduces risk of security threat from the Internet." +msgstr "" +"Firewall ist ein Sicherheitssystem das den ein- und ausgehenden Verkehr der " +"%(box_name)s kontrolliert. Die Firewall aktiv und korrekt konfiguriert zu " +"halten reduziert Sicherheitsrisiken aus dem Internet." #: plinth/modules/firewall/templates/firewall.html:36 -msgid "The following is the current status:" -msgstr "Der aktuelle Status ist wie folgt:" +msgid "Current status:" +msgstr "Aktueller Status:" #: plinth/modules/firewall/templates/firewall.html:41 #, python-format @@ -738,11 +810,13 @@ msgstr "Dienst/Port" #: plinth/modules/firewall/templates/firewall.html:67 +#: plinth/modules/letsencrypt/templates/letsencrypt.html:91 #: plinth/modules/names/templates/names.html:51 msgid "Enabled" msgstr "Aktiviert" #: plinth/modules/firewall/templates/firewall.html:70 +#: plinth/modules/letsencrypt/templates/letsencrypt.html:93 #: plinth/modules/names/templates/names.html:53 msgid "Disabled" msgstr "Deaktiviert" @@ -764,14 +838,18 @@ msgstr "Geblockt" #: plinth/modules/firewall/templates/firewall.html:103 +#| msgid "" +#| "The operation of the firewall is automatic. When you enable a service it " +#| "is automatically permitted in the firewall and you disable a service is " +#| "automatically disabled in the firewall." msgid "" "The operation of the firewall is automatic. When you enable a service it is " -"automatically permitted in the firewall and you disable a service is " -"automatically disabled in the firewall." +"also permitted in the firewall and when you disable a service it is also " +"disabled in the firewall." msgstr "" "Der Betrieb der Firewall erfolgt automatisch. Wenn ein Dienst eingeschaltet " -"wird, wird er automatisch in der Firewall zugelassen und wenn ein Dienst " -"ausgeschaltet wird, wird er automatisch in der Firewall verboten." +"wird, wird er auch in der Firewall zugelassen und wenn ein Dienst " +"ausgeschaltet wird, wird er auch in der Firewall verboten." #: plinth/modules/first_boot/forms.py:48 plinth/modules/users/forms.py:70 msgid "Creating LDAP user failed." @@ -785,30 +863,31 @@ msgid "User account created, you are now logged in" msgstr "Benutzerkonto wurde erstellt, Sie sind jetzt angemeldet" -#: plinth/modules/first_boot/templates/firstboot_state0.html:50 -msgid "Congratulations! Your FreedomBox is up and running!" -msgstr "Glückwunsch! Ihre FreedomBox läuft!" +#: plinth/modules/first_boot/templates/firstboot_navbar.html:23 +#: plinth/modules/help/templates/help_index.html:25 +#: plinth/templates/base.html:102 +msgid "Help" +msgstr "Hilfe" + +#: plinth/modules/first_boot/templates/firstboot_state0.html:45 +#| msgid "Start setup" +msgid "Start Setup" +msgstr "Einrichten beginnen" -#: plinth/modules/first_boot/templates/firstboot_state0.html:54 +#: plinth/modules/first_boot/templates/firstboot_state0.html:49 +#, python-format msgid "" -"Please provide the following basic information to complete the setup process." +"To complete the setup of your %(box_name)s, please provide some basic " +"information." msgstr "" -"Bitte geben Sie die folgenden grundlegenden Informationen an um die " -"Installation abzuschließen." - -#: plinth/modules/first_boot/templates/firstboot_state0.html:62 -msgid "Next" -msgstr "Weiter" +"Um die Installation Ihrer %(box_name)s abzuschließen, stellen Sie bitte " +"einige Grundinformationen bereit." -#: plinth/modules/first_boot/templates/firstboot_state1.html:39 +#: plinth/modules/first_boot/templates/firstboot_state1.html:41 msgid "Administrator Account" msgstr "Administrator Konto" -#: plinth/modules/first_boot/templates/firstboot_state1.html:42 -#| msgid "" -#| "Choose a username and password to access this web interface. The password " -#| "can be changed and other users can be added later. An LDAP user with " -#| "administrative privileges (sudo) is also created." +#: plinth/modules/first_boot/templates/firstboot_state1.html:44 msgid "" "Choose a username and password to access this web interface. The password " "can be changed later. This user will be granted administrative privileges. " @@ -819,7 +898,7 @@ "erhält Administrator-Rechte. Weitere Benutzer können später hinzugefügt " "werden." -#: plinth/modules/first_boot/templates/firstboot_state1.html:55 +#: plinth/modules/first_boot/templates/firstboot_state1.html:57 msgid "Box it up!" msgstr "Die Box starten!" @@ -828,36 +907,44 @@ msgstr "Installation komplett!" #: plinth/modules/first_boot/templates/firstboot_state10.html:32 +#, python-format +#| msgid "" +#| "To make your FreedomBox functional, you need some applications. " +#| "Applications will be installed the first time you access them." msgid "" -"FreedomBox setup is now complete. However, you should check the network " -"setup and modify it if necessary. Do not forget to change the default Wi-Fi " -"passwords." -msgstr "" -"Die FreedomBox Installation ist jetzt abgeschlossen. Allerdings sollten Sie " -"die Netzwerkkonfiguration überprüfen und gegebenenfalls ändern. Vergessen " -"Sie nicht, die standardmäßigen WLAN-Passwörter zu ändern." +"%(box_name)s setup is now complete. To make your %(box_name)s functional, " +"you need some applications. They will be installed the first time you " +"access them." +msgstr "" +"%(box_name)s Installation ist jetzt abgeschlossen. Um Ihre %(box_name)s " +"funktionsfähig zu machen benötigen Sie einige Anwendungen (Apps). Die " +"Anwendungen werden installiert wenn Sie das erste Mal auf sie zugreifen." -#: plinth/modules/first_boot/templates/firstboot_state10.html:40 -msgid "" -"To make your FreedomBox functional, you need some applications. " -"Applications will be installed the first time you access them." -msgstr "" -"Um Ihre FreedomBox funktionsfähig zu machen benötigen Sie einige Anwendungen " -"(Apps). Die Anwendungen werden installiert wenn Sie das erste Mal auf sie " -"zugreifen." +#: plinth/modules/first_boot/templates/firstboot_state10.html:41 +msgid "Go to Apps" +msgstr "Zu den Anwendungen" + +#: plinth/modules/first_boot/templates/firstboot_state10.html:44 +#| msgid "Network Configuration" +msgid "Current Network Configuration" +msgstr "Aktuelle Netzwerk-Konfiguration" #: plinth/modules/first_boot/templates/firstboot_state10.html:47 -msgid "Network Configuration" -msgstr "Netzwerk-Konfiguration" +#| msgid "" +#| "FreedomBox setup is now complete. However, you should check the network " +#| "setup and modify it if necessary. Do not forget to change the default Wi-" +#| "Fi passwords." +msgid "" +"You should check the network setup and modify it if necessary. Do not forget " +"to change the default Wi-Fi passwords!" +msgstr "" +"Sie sollten die Netzwerkkonfiguration überprüfen und gegebenenfalls ändern. " +"Vergessen Sie nicht, die standardmäßigen Wi-Fi-Passwörter zu ändern!" -#: plinth/modules/first_boot/templates/firstboot_state10.html:54 +#: plinth/modules/first_boot/templates/firstboot_state10.html:57 msgid "Go to Networks" msgstr "Zu den Netzwerken" -#: plinth/modules/first_boot/templates/firstboot_state10.html:59 -msgid "Go to Apps" -msgstr "Zu den Anwendungen" - #: plinth/modules/first_boot/views.py:60 msgid "Setup Complete" msgstr "Installation abgeschlossen" @@ -870,9 +957,9 @@ msgid "Where to Get Help" msgstr "Wo man Hilfe bekommt" -#: plinth/modules/help/help.py:38 plinth/modules/help/help.py:72 -msgid "FreedomBox Manual" -msgstr "FreedomBox Handbuch" +#: plinth/modules/help/help.py:38 +msgid "Manual" +msgstr "Handbuch" #: plinth/modules/help/help.py:48 msgid "Documentation and FAQ" @@ -883,22 +970,37 @@ msgid "About {box_name}" msgstr "Über {box_name}" +#: plinth/modules/help/help.py:73 +#, python-brace-format +#| msgid "About {box_name}" +msgid "{box_name} Manual" +msgstr "{box_name} Handbuch" + #: plinth/modules/help/templates/help_about.html:30 +#, python-format +#| msgid "" +#| "FreedomBox is a community project to develop, design and promote personal " +#| "servers running free software for private, personal communications. It " +#| "is a networking appliance designed to allow interfacing with the rest of " +#| "the Internet under conditions of protected privacy and data security. It " +#| "hosts applications such as blog, wiki, website, social network, email, " +#| "web proxy and a Tor relay on a device that can replace your Wi-Fi router " +#| "so that your data stays with you." msgid "" -"FreedomBox is a community project to develop, design and promote personal " +"%(box_name)s is a community project to develop, design and promote personal " "servers running free software for private, personal communications. It is a " "networking appliance designed to allow interfacing with the rest of the " "Internet under conditions of protected privacy and data security. It hosts " "applications such as blog, wiki, website, social network, email, web proxy " -"and a Tor relay on a device that can replace your Wi-Fi router so that your " -"data stays with you." +"and a Tor relay, on a device that can replace your Wi-Fi router, so that " +"your data stays with you." msgstr "" -"FreedomBox ist ein Gemeinschaftsprojekt zur Entwicklung, Gestaltung und " -"Förderung persönlicher Server mit freier Software für die private, " +"%(box_name)s ist ein Gemeinschaftsprojekt zur Entwicklung, Gestaltung und " +"Förderung persönlicher Server mit freier Software für die private, " "persönliche Kommunikation. Es ist als Netzwerkgerät so konzipiert, dass es " "eine Schnittstelle mit dem Internet darstellt bei Beibehaltung der " "geschützten Privatsphäre und Datensicherheit. Es beherbergt Anwendungen wie " -"Blog, Wiki, Website, soziale Netzwerke, E-Mail, Web-Proxy und einen Tor-" +"Blog, Wiki, Webseite, soziale Netzwerke, E-Mail, Web-Proxy und einen Tor-" "Server auf einem Gerät, das Wi-Fi-Router ersetzen kann, so dass Ihre Daten " "immer bei Ihnen bleiben." @@ -921,84 +1023,115 @@ "vorgesehenen Peer-to-Peer-Architektur (Gleiche mit Gleichen) zurück." #: plinth/modules/help/templates/help_about.html:56 +#, python-format +#| msgid "" +#| "There are a number of projects working to realize a future of distributed " +#| "services; FreedomBox aims to bring them all together in a convenient " +#| "package." msgid "" "There are a number of projects working to realize a future of distributed " -"services; FreedomBox aims to bring them all together in a convenient package." +"services; %(box_name)s aims to bring them all together in a convenient " +"package." msgstr "" "Es gibt eine Vielzahl von Projekten die an eine Zukunft von verteilten " -"Diensten arbeiten; FreedomBox zielt darauf ab diese alle in einem " -"praktischen Paket zusammenzubringen ." +"Diensten arbeiten; %(box_name)s zielt darauf ab diese alle in einem " +"praktischen Paket zusammenzubringen." #: plinth/modules/help/templates/help_about.html:64 +#, python-format +#| msgid "" +#| "For more information about the FreedomBox project, see the FreedomBox Wiki." msgid "" -"For more information about the FreedomBox project, see the FreedomBox Wiki." +"For more information about the %(box_name)s project, see the %(box_name)s Wiki." msgstr "" -"Mehr Informationen über das FreedomBox Projekt finden Sie auf dem FreedomBox Wiki." +"Mehr Informationen über das %(box_name)s Projekt finden Sie im %(box_name)s Wiki." -#: plinth/modules/help/templates/help_about.html:72 +#: plinth/modules/help/templates/help_about.html:73 msgid "Learn more »" msgstr "Mehr lernen" -#: plinth/modules/help/templates/help_about.html:75 +#: plinth/modules/help/templates/help_about.html:76 #, python-format msgid "You are running Plinth version %(version)s." msgstr "Es läuft Plinth Version %(version)s." -#: plinth/modules/help/templates/help_index.html:25 -#: plinth/templates/base.html:98 -msgid "Help" -msgstr "Hilfe" +#: plinth/modules/help/templates/help_base.html:36 +#, python-format +msgid "%(box_name)s Setup" +msgstr "%(box_name)s Installation" #: plinth/modules/help/templates/help_index.html:29 #, python-format +#| msgid "" +#| "The FreedomBox Manual is the best place to " +#| "start for information regarding %(box_name)s." msgid "" -"The FreedomBox Manual is the best place to " +"The %(box_name)s Manual is the best place to " "start for information regarding %(box_name)s." msgstr "" -"Das FreedomBox Handbuch ist der beste Ort für " -"erste Informationen über %(box_name)s." +"Das %(box_name)s Handbuch ist der beste Ort " +"für erste Informationen über %(box_name)s." #: plinth/modules/help/templates/help_index.html:36 +#, python-format +#| msgid "" +#| " " +#| "FreedomBox project wiki contains further information." msgid "" -" FreedomBox " -"project wiki contains further information." +" " +"%(box_name)s project wiki contains further information." msgstr "" -"Das FreedomBox Wiki Projekt enthält weitere Informationen." +"Das %(box_name)s Wiki Projekt enthält weitere Informationen." #: plinth/modules/help/templates/help_index.html:43 -msgid "" -"To seek help from FreedomBox community, queries may be posted on the " -"mailing list. The list archives also contain information about problems " -"faced by other users and possible solutions." -msgstr "" -"Um Hilfe von der FreedomBox Gemeinschaft zu bekommen können Anfragen an die " -"Mailingliste gestellt werden. Das Listenarchiv enthält auch " +#, python-format +#| msgid "" +#| "To seek help from FreedomBox community, queries may be posted on the mailing list. The list archives also contain information about " +#| "problems faced by other users and possible solutions." +msgid "" +"To seek help from %(box_name)s community, queries may be posted on the mailing list. The list archives also contain information about " +"problems faced by other users and possible solutions." +msgstr "" +"Um Hilfe von der %(box_name)s Gemeinschaft zu bekommen können Anfragen an " +"die Mailingliste gestellt werden. Das Listenarchiv enthält auch " "Informationen über Probleme anderer Benutzer und mögliche Lösungen." #: plinth/modules/help/templates/help_index.html:53 +#, python-format msgid "" -"Many FreedomBox contributors and users are also available on the #freedombox " -"channel of the irc.oftc.net IRC network." -msgstr "" -"Viele Mitwirkende bei FreedomBox und Benutzer sind auch über den #freedombox " -"Kanal des irc.oftc.net IRC Netzwerks erreichbar." +"Many %(box_name)s contributors and users are also available on the irc.oftc." +"net IRC network. Join and request help on the #freedombox " +"channel using the IRC web interface." +msgstr "" +"Viele %(box_name)s Mitarbeiter und Benutzer sind auch im irc.oftc.net IRC " +"Netzwerk erreichbar. Treten Sie ihm bei und bitten um Hilfe im " +"#freedombox Kanal des IRC Web-Interfaces." #: plinth/modules/ikiwiki/__init__.py:38 -msgid "Wiki & Blog (Ikiwiki)" -msgstr "Wiki & Blog (Ikiwiki)" +#| msgid "Wiki & Blog (Ikiwiki)" +msgid "Wiki and Blog (ikiwiki)" +msgstr "Wiki und Blog (ikiwiki)" #: plinth/modules/ikiwiki/__init__.py:43 -msgid "Ikiwiki wikis and blogs" -msgstr "Ikiwiki Wikis und Blogs" +#| msgid "Ikiwiki wikis and blogs" +msgid "ikiwiki wikis and blogs" +msgstr "ikiwiki Wikis und Blogs" #: plinth/modules/ikiwiki/forms.py:29 -msgid "Enable Ikiwiki" -msgstr "Ikiwiki einschalten" +#| msgid "Enable Ikiwiki" +msgid "Enable ikiwiki" +msgstr "ikiwiki einschalten" #: plinth/modules/ikiwiki/forms.py:36 #: plinth/modules/networks/templates/connection_show.html:98 @@ -1028,23 +1161,28 @@ #: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:27 #, python-format -msgid "Delete Wiki/Blog %(name)s" -msgstr "Lösche Wiki/Blog %(name)s" +#| msgid "Delete Wiki/Blog %(name)s" +msgid "Delete Wiki or Blog %(name)s" +msgstr "Lösche Wiki oder Blog %(name)s" #: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:33 +#| msgid "" +#| "This action will remove all the posts, pages and comments including " +#| "revision history. Delete this wiki/blog permanently?" msgid "" "This action will remove all the posts, pages and comments including revision " -"history. Delete this wiki/blog permanently?" +"history. Delete this wiki or blog permanently?" msgstr "" "Diese Aktion wird alle Posts, Seiten und Kommentare einschließlich der " -"Historie löschen. Dieses Wiki/Blog permanent löschen?" +"Historie löschen. Dieses Wiki oder den Blog permanent löschen?" -#: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:43 +#: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:44 #, python-format msgid "Delete %(name)s" msgstr "Lösche %(name)s" -#: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:46 +#: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:47 +#: plinth/modules/monkeysphere/templates/monkeysphere.html:60 #: plinth/modules/networks/templates/connections_delete.html:41 #: plinth/modules/users/templates/users_delete.html:41 msgid "Cancel" @@ -1077,16 +1215,18 @@ msgstr "Anlegen" #: plinth/modules/ikiwiki/views.py:73 -msgid "Wiki & Blog" -msgstr "Wiki & Blog" +#| msgid "Wiki & Blog" +msgid "Wiki and Blog" +msgstr "Wiki und Blog" #: plinth/modules/ikiwiki/views.py:106 msgid "Manage Wikis and Blogs" msgstr "Wikis und Blogs verwalten" #: plinth/modules/ikiwiki/views.py:132 -msgid "Create Wiki/Blog" -msgstr "Wiki/Blog anlegen" +#| msgid "Create a Wiki or Blog" +msgid "Create Wiki or Blog" +msgstr "Wiki oder Blog anlegen" #: plinth/modules/ikiwiki/views.py:145 #, python-brace-format @@ -1119,8 +1259,169 @@ msgstr "Konnte {name} nicht löschen: {error}" #: plinth/modules/ikiwiki/views.py:182 -msgid "Delete Wiki/Blog" -msgstr "Lösche Wiki/Blog" +#| msgid "Delete Wiki/Blog" +msgid "Delete Wiki or Blog" +msgstr "Lösche Wiki oder Blog" + +#: plinth/modules/letsencrypt/__init__.py:43 +#: plinth/modules/letsencrypt/templates/letsencrypt.html:38 +#: plinth/modules/letsencrypt/views.py:45 +msgid "Certificates (Let's Encrypt)" +msgstr "Zertifikate (Let's Encrypt)" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:41 +#, python-format +msgid "" +"A digital certficate allows users of a web service to verify the identity of " +"the service and to securely communicate with it. %(box_name)s can " +"automatically obtain and setup digital certificates for each available " +"domain. It does so by proving itself to be the owner of a domain to Let's " +"Encrypt, a certficate authority (CA)." +msgstr "" +"Ein digitales Zertifikat ermöglicht es Benutzern von einem Web-Service, die " +"Identität des Dienstes zu überprüfen und sicher mit ihm zu kommunizieren. " +"%(box_name)s kann automatisch digitale Zertifikate für jede verfügbare " +"Domain beziehen und installieren. Es tut dies, indem es gegenüber Let's " +"Encrypt, einer Zertifizierungsstelle (CA), nachweist der Inhaber einer " +"Domain zu sein." + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:52 +msgid "" +"Let's Encrypt is a free, automated, and open certificate authority, run for " +"the public’s benefit by the Internet Security Research Group (ISRG). Please " +"read and agree with the Let's Encrypt Subscriber Agreement before using this service." +msgstr "" +"Let's Encrypt ist eine freie, automatisierte und offene " +"Zertifizierungsstelle, zum Nutzen der Öffentlichkeit betrieben von der " +"Internet Security Research Group (ISRG). Bitte lesen und akzeptieren Sie die " +"Let's Encrypt " +"Abonnentenvereinbarung vor der Verwendung dieses Dienstes." + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:66 +#: plinth/modules/monkeysphere/templates/monkeysphere.html:70 +#| msgid "Domain Name" +msgid "Domain" +msgstr "Domain" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:67 +msgid "Certificate Status" +msgstr "Status des Zertifikats" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:68 +#| msgid "Security" +msgid "Website Security" +msgstr "Webseiten-Sicherheit" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:69 +#: plinth/modules/monkeysphere/templates/monkeysphere.html:72 +#| msgid "Applications" +msgid "Actions" +msgstr "Aktion" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:79 +#, python-format +msgid "Expires on %(expiry_date)s" +msgstr "Verfällt am %(expiry_date)s" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:85 +msgid "No certficate" +msgstr "Kein Zertifikat" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:102 +msgid "Revoke" +msgstr "Zurückziehen" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:108 +msgid "Re-obtain" +msgstr "Wieder beziehen" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:115 +msgid "Obtain" +msgstr "Beziehen" + +#: plinth/modules/letsencrypt/views.py:55 +#, python-brace-format +msgid "Certificate successfully revoked for domain {domain}" +msgstr "Zertifikat erfolgreich zurückgezogen für Domain {domain}" + +#: plinth/modules/letsencrypt/views.py:60 +#, python-brace-format +msgid "Failed to revoke certificate for domain {domain}: {error}" +msgstr "Zurückziehen des Zertifikats für Domain {domain} gescheiter: {error}" + +#: plinth/modules/letsencrypt/views.py:72 +#, python-brace-format +msgid "Certificate successfully obtained for domain {domain}" +msgstr "Zertifikat erfolgreich bezogen für Domain {domain}" + +#: plinth/modules/letsencrypt/views.py:77 +#, python-brace-format +msgid "Failed to obtain certificate for domain {domain}: {error}" +msgstr "Beziehen des Zertifikats für Domain {domain} fehlgeschlagen: {error}" + +#: plinth/modules/monkeysphere/__init__.py:32 +#: plinth/modules/monkeysphere/templates/monkeysphere.html:35 +#: plinth/modules/monkeysphere/views.py:44 +msgid "Monkeysphere" +msgstr "Monkeysphere" + +#: plinth/modules/monkeysphere/templates/monkeysphere.html:38 +msgid "" +"With Monkeysphere, a PGP key can be generated for each configured domain " +"serving SSH. The PGP public key can then be uploaded to the PGP keyservers. " +"Users connecting to this machine through SSH can verify that they are " +"connecting to the correct host. For users to trust the key, at least one " +"person (usually the machine owner) must sign the key using the regular PGP " +"key signing process. See the Monkeysphere SSH documentation for more details." +msgstr "" +"Mit Monkeysphere kann ein PGP-Schlüssel für jede konfigurierte Domain die " +"SSH bedient generiert werden. Die öffentlichen PGP-Schlüssel können dann auf " +"die PGP-Schlüsselserver hochgeladen werden. Benutzer, die mit diesem Gerät " +"über SSH verbunden sind, können überprüfen, ob sie mit den richtigen Host " +"verbunden sind. Damit Anwender dem Schlüssel vertrauen können, muss " +"mindestens eine Person (in der Regel der Gerätebetreiber) den Schlüssel mit " +"dem regulären PGP Keysigning-Verfahren signieren. Siehe die Monkeysphere SSH " +"Dokumentation für weitere Details." + +#: plinth/modules/monkeysphere/templates/monkeysphere.html:53 +msgid "Publishing key to keyserver..." +msgstr "Veröffentliche den Schlüssel beim Schlüssel-Server..." + +#: plinth/modules/monkeysphere/templates/monkeysphere.html:71 +msgid "GPG Fingerprint" +msgstr "GPG Fingerabdruck" + +#: plinth/modules/monkeysphere/templates/monkeysphere.html:83 +#: plinth/modules/names/views.py:45 +msgid "Not Available" +msgstr "Nicht verfügbar" + +#: plinth/modules/monkeysphere/templates/monkeysphere.html:93 +msgid "Generate PGP Key" +msgstr "Generiere PGP Schlüssel" + +#: plinth/modules/monkeysphere/templates/monkeysphere.html:101 +msgid "Publish Key" +msgstr "Schlüssel veröffentlichen" + +#: plinth/modules/monkeysphere/views.py:58 +msgid "Generated PGP key." +msgstr "PGP Schlüssel erzeugt." + +#: plinth/modules/monkeysphere/views.py:83 +msgid "Cancelled key publishing." +msgstr "Schlüssel-Veröffentlichung abgebrochen." + +#: plinth/modules/monkeysphere/views.py:120 +msgid "Published key to keyserver." +msgstr "Veröffentlichte Schlüssel auf dem Server." + +#: plinth/modules/monkeysphere/views.py:122 +msgid "Error occurred while publishing key." +msgstr "Ein Fehler ist beim Veröffentlichen des Schlüssels aufgetreten." #: plinth/modules/mumble/__init__.py:38 #: plinth/modules/mumble/templates/mumble.html:26 @@ -1162,61 +1463,48 @@ msgid "Mumble server is not running" msgstr "Mumble Server läuft nicht" -#: plinth/modules/names/__init__.py:30 +#: plinth/modules/names/__init__.py:29 msgid "HTTP" msgstr "HTTP" -#: plinth/modules/names/__init__.py:31 +#: plinth/modules/names/__init__.py:30 msgid "HTTPS" msgstr "HTTPS" -#: plinth/modules/names/__init__.py:32 +#: plinth/modules/names/__init__.py:31 msgid "SSH" msgstr "SSH" -#: plinth/modules/names/__init__.py:46 plinth/modules/names/views.py:34 +#: plinth/modules/names/__init__.py:45 plinth/modules/names/views.py:34 msgid "Name Services" msgstr "Namen-Dienste" -#: plinth/modules/names/__init__.py:107 -msgid "Not Available" -msgstr "Nicht verfügbar" - #: plinth/modules/networks/__init__.py:108 #, python-brace-format msgid "Using DNSSEC on IPv{kind}" msgstr "Verwende DNSSEC auf IPv{kind}" #: plinth/modules/networks/forms.py:30 -msgid "-- select --" -msgstr "-- auswählen --" - -#: plinth/modules/networks/forms.py:42 msgid "Connection Type" msgstr "Verbindungstyp" -#: plinth/modules/networks/forms.py:49 plinth/modules/networks/forms.py:106 -#: plinth/modules/networks/forms.py:133 +#: plinth/modules/networks/forms.py:37 msgid "Connection Name" msgstr "Verbindungsname" -#: plinth/modules/networks/forms.py:51 plinth/modules/networks/forms.py:108 -#: plinth/modules/networks/forms.py:135 +#: plinth/modules/networks/forms.py:39 msgid "Physical Interface" msgstr "Physikalisches Interface" -#: plinth/modules/networks/forms.py:53 plinth/modules/networks/forms.py:110 -#: plinth/modules/networks/forms.py:137 +#: plinth/modules/networks/forms.py:41 msgid "The network device that this connection should be bound to." msgstr "Das Netzwerkgerät an das diese Verbindung gebunden sein sollte." -#: plinth/modules/networks/forms.py:56 plinth/modules/networks/forms.py:113 -#: plinth/modules/networks/forms.py:140 +#: plinth/modules/networks/forms.py:44 msgid "Firewall Zone" msgstr "Firewall Zone" -#: plinth/modules/networks/forms.py:57 plinth/modules/networks/forms.py:114 -#: plinth/modules/networks/forms.py:141 +#: plinth/modules/networks/forms.py:45 msgid "" "The firewall zone will control which services are available over this " "interfaces. Select Internal only for trusted networks." @@ -1224,11 +1512,11 @@ "Die Firewall Zone steuert welche Dienste über diese Schnittstellen zur " "Verfügung stehen. Wählen Sie 'Intern' nur für vertrauenswürdige Netzwerke." -#: plinth/modules/networks/forms.py:61 plinth/modules/networks/forms.py:162 +#: plinth/modules/networks/forms.py:49 msgid "IPv4 Addressing Method" msgstr "IPv4 Adressierungs-Methode" -#: plinth/modules/networks/forms.py:62 +#: plinth/modules/networks/forms.py:50 msgid "" "\"Shared\" method will start a DHCP server and \"Automatic\" method will " "acquire configuration from a DHCP server." @@ -1236,15 +1524,15 @@ "Die \"Shared\" Methode wird einen DHCP Server starten während die \"Automatic" "\" Methode sich ihre Konfiguration vom DHCP Server holt." -#: plinth/modules/networks/forms.py:68 plinth/modules/networks/forms.py:170 +#: plinth/modules/networks/forms.py:56 msgid "Address" msgstr "Adresse" -#: plinth/modules/networks/forms.py:72 plinth/modules/networks/forms.py:174 +#: plinth/modules/networks/forms.py:60 msgid "Netmask" msgstr "Netzmaske" -#: plinth/modules/networks/forms.py:73 plinth/modules/networks/forms.py:175 +#: plinth/modules/networks/forms.py:61 msgid "" "Optional value. If left blank, a default netmask based on the address will " "be used." @@ -1252,21 +1540,21 @@ "Optionaler Wert. Wenn er leer gelassen wird, wird eine Maske basierend auf " "der Adresse verwendet." -#: plinth/modules/networks/forms.py:78 plinth/modules/networks/forms.py:180 +#: plinth/modules/networks/forms.py:66 #: plinth/modules/networks/templates/connection_show.html:202 #: plinth/modules/networks/templates/connection_show.html:241 msgid "Gateway" msgstr "Gateway" -#: plinth/modules/networks/forms.py:79 plinth/modules/networks/forms.py:181 +#: plinth/modules/networks/forms.py:67 msgid "Optional value." msgstr "Optionaler Wert." -#: plinth/modules/networks/forms.py:83 plinth/modules/networks/forms.py:185 +#: plinth/modules/networks/forms.py:71 msgid "DNS Server" msgstr "DNS Server" -#: plinth/modules/networks/forms.py:84 plinth/modules/networks/forms.py:186 +#: plinth/modules/networks/forms.py:72 msgid "" "Optional value. If this value is given and IPv4 addressing method is " "\"Automatic\", the DNS Servers provided by a DHCP server will be ignored." @@ -1275,11 +1563,11 @@ "\"Automatic\" ist, werden die DNS Server die von einem DHCP Server " "bereitgestellt wurden, ignoriert." -#: plinth/modules/networks/forms.py:90 plinth/modules/networks/forms.py:192 +#: plinth/modules/networks/forms.py:78 msgid "Second DNS Server" msgstr "Zweiter DNS Server" -#: plinth/modules/networks/forms.py:91 plinth/modules/networks/forms.py:193 +#: plinth/modules/networks/forms.py:79 msgid "" "Optional value. If this value is given and IPv4 Addressing Method is " "\"Automatic\", the DNS Servers provided by a DHCP server will be ignored." @@ -1288,29 +1576,29 @@ "\"Automatic\" ist, werden die DNS Server die von einem DHCP Server " "bereitgestellt wurden, ignoriert." -#: plinth/modules/networks/forms.py:121 -msgid "Show password" -msgstr "Zeige Passwort" +#: plinth/modules/networks/forms.py:89 +msgid "-- select --" +msgstr "-- auswählen --" -#: plinth/modules/networks/forms.py:145 +#: plinth/modules/networks/forms.py:175 #: plinth/modules/networks/templates/connection_show.html:144 msgid "SSID" msgstr "SSID" -#: plinth/modules/networks/forms.py:146 +#: plinth/modules/networks/forms.py:176 msgid "The visible name of the network." msgstr "Der sichtbare Name des Netzwerks." -#: plinth/modules/networks/forms.py:148 +#: plinth/modules/networks/forms.py:178 #: plinth/modules/networks/templates/connection_show.html:157 msgid "Mode" msgstr "Modus" -#: plinth/modules/networks/forms.py:153 +#: plinth/modules/networks/forms.py:183 msgid "Authentication Mode" msgstr "Authentifizierungs-Modus" -#: plinth/modules/networks/forms.py:154 +#: plinth/modules/networks/forms.py:184 msgid "" "Select WPA if the wireless network is secured and requires clients to have " "the password to connect." @@ -1318,31 +1606,22 @@ "Wählen Sie WPA, wenn das Wireless-Netzwerk gesichert ist und ein Passwort " "für die Benutzung erfordert." -#: plinth/modules/networks/forms.py:158 +#: plinth/modules/networks/forms.py:188 msgid "Passphrase" msgstr "Passphrase" -#: plinth/modules/networks/forms.py:166 -msgid "" -"Select Automatic (DHCP) if you are connecting to an existing wireless " -"network. Shared mode is useful when running an Access Point." -msgstr "" -"Wählen Sie Automatisch (DHCP), wenn Sie zu einem bestehenden drahtlosen " -"Netzwerk verbunden sind. Shared mode ist nützlich bei Verwendung eines " -"Access Points." - #: plinth/modules/networks/networks.py:36 #: plinth/modules/networks/networks.py:56 msgid "Network Connections" msgstr "Netzwerkverbindungen" #: plinth/modules/networks/networks.py:38 -#: plinth/modules/networks/networks.py:273 +#: plinth/modules/networks/networks.py:242 msgid "Nearby Wi-Fi Networks" msgstr "Nahe Wi-Fi Netzwerke" #: plinth/modules/networks/networks.py:40 -#: plinth/modules/networks/networks.py:295 +#: plinth/modules/networks/networks.py:264 msgid "Add Connection" msgstr "Verbindung hinzufügen" @@ -1366,60 +1645,60 @@ msgid "This type of connection is not yet understood." msgstr "Dieser Verbindungstyp ist noch nicht bekannt." -#: plinth/modules/networks/networks.py:170 -#: plinth/modules/networks/networks.py:229 +#: plinth/modules/networks/networks.py:139 +#: plinth/modules/networks/networks.py:198 #: plinth/modules/networks/templates/connections_edit.html:34 msgid "Edit Connection" msgstr "Verbindung bearbeiten" -#: plinth/modules/networks/networks.py:240 +#: plinth/modules/networks/networks.py:209 #, python-brace-format msgid "Activated connection {name}." msgstr "Verbindung {name} eingeschaltet." -#: plinth/modules/networks/networks.py:243 +#: plinth/modules/networks/networks.py:212 msgid "Failed to activate connection: Connection not found." msgstr "Fehler beim Einschalten der Verbindung: Verbindung nicht gefunden." -#: plinth/modules/networks/networks.py:247 +#: plinth/modules/networks/networks.py:216 #, python-brace-format msgid "Failed to activate connection {name}: No suitable device is available." msgstr "" "Fehler beim Einschalten der Verbindung {name}: Kein geeignetes Gerät " "verfügbar." -#: plinth/modules/networks/networks.py:260 +#: plinth/modules/networks/networks.py:229 #, python-brace-format msgid "Deactivated connection {name}." msgstr "Verbindung {name} ausgeschaltet." -#: plinth/modules/networks/networks.py:263 +#: plinth/modules/networks/networks.py:232 msgid "Failed to de-activate connection: Connection not found." msgstr "Konnte Verbindung nicht ausschalten: Verbindung nicht gefunden." -#: plinth/modules/networks/networks.py:325 +#: plinth/modules/networks/networks.py:282 msgid "Adding New Ethernet Connection" msgstr "Füge neue Ethernet Verbindung hinzu" -#: plinth/modules/networks/networks.py:350 +#: plinth/modules/networks/networks.py:300 msgid "Adding New PPPoE Connection" msgstr "Füge neue PPPoE Verbindung hinzu" -#: plinth/modules/networks/networks.py:399 +#: plinth/modules/networks/networks.py:332 msgid "Adding New Wi-Fi Connection" msgstr "Füge neue Wi-Fi Verbindung hinzu" -#: plinth/modules/networks/networks.py:413 +#: plinth/modules/networks/networks.py:346 #, python-brace-format msgid "Connection {name} deleted." msgstr "Verbindung {name} gelöscht." -#: plinth/modules/networks/networks.py:416 -#: plinth/modules/networks/networks.py:425 +#: plinth/modules/networks/networks.py:349 +#: plinth/modules/networks/networks.py:358 msgid "Failed to delete connection: Connection not found." msgstr "Konnte Verbindung nicht löschen: Verbindung nicht gefunden." -#: plinth/modules/networks/networks.py:430 +#: plinth/modules/networks/networks.py:363 #: plinth/modules/networks/templates/connections_delete.html:26 msgid "Delete Connection" msgstr "Lösche Verbindung" @@ -1429,7 +1708,7 @@ msgstr "Bearbeite Verbindung" #: plinth/modules/networks/templates/connection_show.html:43 -#: plinth/templates/base.html:119 +#: plinth/templates/base.html:123 msgid "Edit" msgstr "Bearbeiten" @@ -1575,37 +1854,53 @@ msgstr "Firewall Zone" #: plinth/modules/networks/templates/connection_show.html:280 -msgid "" -"This interface should be connected to local network/machine. If you connect " -"this interface to a public network, services meant to be available only " -"internally will become available externally. This is a security risk." -msgstr "" -"Diese Schnittstelle sollte auf lokales Netzwerk / Gerät angeschlossen sein. " -"Wenn Sie diese Schnittstelle mit einem öffentlichen Netzwerk verbinden, " -"werden Dienste die nur intern zur Verfügung stehen sollten extern " +#| msgid "" +#| "This interface should be connected to local network/machine. If you " +#| "connect this interface to a public network, services meant to be " +#| "available only internally will become available externally. This is a " +#| "security risk." +msgid "" +"This interface should be connected to a local network/machine. If you " +"connect this interface to a public network, services meant to be available " +"only internally will become available externally. This is a security risk." +msgstr "" +"Diese Schnittstelle sollte an ein lokales Netzwerk / Gerät angeschlossen " +"sein. Wenn Sie diese Schnittstelle mit einem öffentlichen Netzwerk " +"verbinden, werden Dienste die nur intern zur Verfügung stehen sollten extern " "erreichbar sein. Dies ist ein Sicherheitsrisiko." #: plinth/modules/networks/templates/connection_show.html:300 -msgid "" -"This interface should receive your Internet connection. If you connect it " -"your a local network/machine, many services meant to available only " -"internally will not be available." +#| msgid "" +#| "This interface should receive your Internet connection. If you connect it " +#| "your a local network/machine, many services meant to available only " +#| "internally will not be available." +msgid "" +"This interface should receive your Internet connection. If you connect it to " +"a local network/machine, many services meant to available only internally " +"will not be available." msgstr "" "Diese Schnittstelle sollte Ihre Internetverbindung empfangen. Wenn Sie es an " "ein lokales Netzwerk / Gerät anschließen, werden viele Dienste die nur " "intern zur Verfügung stehen sollten nicht verfügbar sein." #: plinth/modules/networks/templates/connection_show.html:319 -msgid "" -"This interface is not maintained by FreedomBox. Its security status is " -"unknown to FreedomBox. Many FreedomBox services may not be available on " -"this interface. It is recommended that you deactivate/delete this " +#, python-format +#| msgid "" +#| "This interface is not maintained by FreedomBox. Its security status is " +#| "unknown to FreedomBox. Many FreedomBox services may not be available on " +#| "this interface. It is recommended that you deactivate/delete this " +#| "connection and re-configure it." +msgid "" +"This interface is not maintained by %(box_name)s. Its security status is " +"unknown to %(box_name)s. Many %(box_name)s services may not be available on " +"this interface. It is recommended that you deactivate or delete this " "connection and re-configure it." msgstr "" -"Diese Schnittstelle wird von FreedomBox nicht gepflegt. Sein " -"Sicherheitsstatus ist FreedomBox unbekannt. Viele FreedomBox Dienste sind " -"möglicherweise nicht über diese Schnittstelle erreichbar. Es wird empfohlen " -"diese Verbindung zu deaktivieren / löschen und neu zu konfigurieren." +"Diese Schnittstelle wird von %(box_name)s nicht gepflegt. Sein " +"Sicherheitsstatus ist %(box_name)s unbekannt. Viele %(box_name)s Dienste " +"sind möglicherweise nicht über diese Schnittstelle erreichbar. Es wird " +"empfohlen diese Verbindung zu deaktivieren oder zu löschen und neu zu " +"konfigurieren." #: plinth/modules/networks/templates/connections_add.html:34 #: plinth/modules/networks/templates/connections_type_select.html:34 @@ -1693,9 +1988,16 @@ #: plinth/modules/openvpn/templates/openvpn.html:38 #, python-format +#| msgid "" +#| "Virtual Private Network (VPN) is a technique for securely connecting two " +#| "machines in order to access resources of a private network. While you " +#| "are away from home, you can connect to your %(box_name)s in order to join " +#| "your home network and access private/internal services provided by " +#| "%(box_name)s. You can also access the rest of the Internet via " +#| "%(box_name)s for added security and anonymity." msgid "" "Virtual Private Network (VPN) is a technique for securely connecting two " -"machines in order to access resources of a private network. While you are " +"devices in order to access resources of a private network. While you are " "away from home, you can connect to your %(box_name)s in order to join your " "home network and access private/internal services provided by %(box_name)s. " "You can also access the rest of the Internet via %(box_name)s for added " @@ -1715,11 +2017,18 @@ #: plinth/modules/openvpn/templates/openvpn.html:54 #, python-format +#| msgid "" +#| "To connect to %(box_name)s's VPN, you need to download a profile and feed " +#| "it to an OpenVPN client on your mobile or desktop machine. OpenVPN " +#| "Clients are available for most platforms. See documentation on recommended clients and instructions on how to " +#| "configure them." msgid "" "To connect to %(box_name)s's VPN, you need to download a profile and feed it " "to an OpenVPN client on your mobile or desktop machine. OpenVPN Clients are " "available for most platforms. See documentation on recommended clients and instructions on how to " "configure them." msgstr "" @@ -1727,7 +2036,7 @@ "herunterladen und einem OpenVPN-Client auf Ihrem Mobiltelefon oder Desktop-" "Rechner weiterleiten. OpenVPN-Clients sind für die meisten Plattformen " "verfügbar. Siehe die Dokumentation zu " +"OpenVPN\" title=\"%(box_name)s Handbuch OpenVPN\">Dokumentation zu " "empfohlenen Clients und Hinweisen, wie sie zu konfigurieren sind." #: plinth/modules/openvpn/templates/openvpn.html:66 @@ -2278,6 +2587,75 @@ msgid "Quassel core service is not running" msgstr "Quassel Kern läuft nicht" +#: plinth/modules/repro/__init__.py:36 +#: plinth/modules/repro/templates/repro.html:26 +#: plinth/modules/repro/views.py:55 +#| msgid "Server port" +msgid "SIP Server (repro)" +msgstr "SIP Server (repro)" + +#: plinth/modules/repro/__init__.py:41 +#| msgid "Second DNS Server" +msgid "repro SIP Server" +msgstr "repro SIP Server" + +#: plinth/modules/repro/forms.py:29 +#| msgid "Enable Quassel core service" +msgid "Enable repro service" +msgstr "repro Dienst einschalten" + +#: plinth/modules/repro/templates/repro.html:29 +msgid "" +"repro provides various SIP services that a SIP softphone can utilize to " +"provide audio and video calls as well as presence and instant messaging. " +"repro provides a server and SIP user accounts that clients can use to let " +"their presence known. It also acts as a proxy to federate SIP " +"communications to other servers on the Internet similar to email." +msgstr "" +"repro bietet verschiedene SIP-Dienste an, die ein SIP-Softphone nutzen kann " +"um Audio- und Video-Anrufe sowie Präsenz und Sofortnachrichten zur Verfügung " +"zu stellen. repro stellt einen Server und SIP-Benutzerkonten bereit, die " +"Kunden nutzen können, um ihre Präsenz bekannt zu machen. Es fungiert auch " +"als Proxy zu verbündeten SIP-Kommunikationen mit anderen Servern über das " +"Internet ähnlich wie E-Mail." + +#: plinth/modules/repro/templates/repro.html:39 +msgid "" +"To make SIP calls, a client application is needed. Available clients include " +"Jitsi (for computers) and CSipSimple (for Android phones)." +msgstr "" +"Um SIP-Anrufe zu tätigen wird eine Client-Anwendung benötigt. Verfügbare " +"Clients sind unter anderem Jitsi (für " +"Computer) und CSipSimple (für Android-Telefone)." + +#: plinth/modules/repro/templates/repro.html:48 +msgid "" +"Note: Before using repro, domains and users will need to " +"be configured using the web-based " +"configuration panel. Users in the admin group will be able to " +"log in to the repro configuration panel. After setting the domain, it is " +"required to restart the repro service. Disable the service and re-enable it." +msgstr "" +"Hinweis: Vor der Verwendung von repro, müssen Domains und " +"Benutzer über das web-basierte " +"Konfigurations-Panel konfiguriert werden. Die Nutzer der admin " +"Gruppe können sich dort anmelden. Nach dem Festlegen der Domain ist es " +"erforderlich den repro Dienst neu zu starten. Deaktivieren Sie den Dienst " +"und aktivieren ihn wieder." + +#: plinth/modules/repro/templates/repro.html:63 +#| msgid "Quassel core service is running" +msgid "repro service is running" +msgstr "repro Dienst läuft" + +#: plinth/modules/repro/templates/repro.html:66 +#| msgid "Quassel core service is not running" +msgid "repro service is not running" +msgstr "repro Dienst läuft nicht" + #: plinth/modules/restore/__init__.py:36 #: plinth/modules/restore/templates/restore_index.html:26 #: plinth/modules/restore/views.py:46 @@ -2294,18 +2672,24 @@ #: plinth/modules/restore/templates/restore_index.html:29 #, python-format +#| msgid "" +#| "reStore is a server for unhosted web " +#| "applications. The idea is to uncouple web applications from data. No " +#| "matter where a web application is served from, the data can be stored on " +#| "an unhosted storage server of user's choice. With reStore, your " +#| "%(cfg.box_name)s becomes your unhosted storage server." msgid "" "reStore is a server for unhosted web " "applications. The idea is to uncouple web applications from data. No " "matter where a web application is served from, the data can be stored on an " -"unhosted storage server of user's choice. With reStore, your " -"%(cfg.box_name)s becomes your unhosted storage server." +"unhosted storage server of user's choice. With reStore, your %(box_name)s " +"becomes your unhosted storage server." msgstr "" "reStore ist ein Server für unhosted Web-" "Anwendungen. Die Idee ist, Web-Anwendungen von den Daten zu entkoppeln. " "Unabhängig davon von wo eine Web-Anwendung aus bedient wird, können die " "Daten auf einem unhosted Speicherserver der Wahl des Benutzers gespeichert " -"werden. Mit reStore, wird Ihre %(cfg.box_name)s Ihr unhosted Speicherserver." +"werden. Mit reStore, wird Ihre %(box_name)s Ihr unhosted Speicherserver." #: plinth/modules/restore/templates/restore_index.html:40 msgid "" @@ -2403,7 +2787,7 @@ #: plinth/modules/system/system.py:33 #: plinth/modules/system/templates/system.html:25 -#: plinth/templates/base.html:105 +#: plinth/templates/base.html:109 msgid "System Configuration" msgstr "System-Konfiguration" @@ -2420,33 +2804,80 @@ "Diese Optionen beeinflussen die Funktionen der %(box_name)s auf grundlegende " "Art und Weise, also vorsichtig benutzen!" -#: plinth/modules/tor/__init__.py:50 +#: plinth/modules/tor/__init__.py:48 plinth/modules/tor/templates/tor.html:35 +msgid "Anonymity Network (Tor)" +msgstr "Anonymisierungsnetzwerk (Tor)" + +#: plinth/modules/tor/__init__.py:53 +#| msgid "Anonymity Network (Tor)" +msgid "Tor Anonymity Network" +msgstr "Tor Anonymisierungs-Netzwerk" + +#: plinth/modules/tor/__init__.py:58 +msgid "Tor Bridge Relay" +msgstr "Tor Bridge Relay" + +#: plinth/modules/tor/__init__.py:76 plinth/modules/tor/views.py:144 +msgid "Tor Hidden Service" +msgstr "Tor Hidden Dienst" + +#: plinth/modules/tor/__init__.py:222 msgid "Tor relay port available" msgstr "Tor relay Port ist verfügbar" -#: plinth/modules/tor/__init__.py:58 +#: plinth/modules/tor/__init__.py:230 msgid "Obfs3 transport registered" msgstr "Obfs3 Transport registriert" -#: plinth/modules/tor/__init__.py:64 +#: plinth/modules/tor/__init__.py:236 msgid "Obfs4 transport registered" msgstr "Obfs4 Transport registriert" -#: plinth/modules/tor/__init__.py:101 +#: plinth/modules/tor/__init__.py:273 #, python-brace-format msgid "Access URL {url} on tcp{kind} via Tor" msgstr "Zugangs-URL {url} auf TCP{kind} über Tor" -#: plinth/modules/tor/__init__.py:112 +#: plinth/modules/tor/__init__.py:284 #, python-brace-format msgid "Confirm Tor usage at {url} on tcp{kind}" msgstr "Bestätige Tor-Nutzung auf {url} über TCP{kind}" -#: plinth/modules/tor/templates/tor.html:26 plinth/modules/tor/tor.py:66 -msgid "Anonymity Network (Tor)" -msgstr "Anonymisierungsnetzwerk (Tor)" +#: plinth/modules/tor/forms.py:32 +msgid "Enable Tor" +msgstr "Tor einschalten" + +#: plinth/modules/tor/forms.py:35 +msgid "Enable Tor Hidden Service" +msgstr "Tor Verborgenen Dienst einschalten" -#: plinth/modules/tor/templates/tor.html:29 +#: plinth/modules/tor/forms.py:38 +#, python-brace-format +#| msgid "" +#| "A hidden service will allow FreedomBox to provide selected services (such " +#| "as ownCloud or Chat) without revealing its location." +msgid "" +"A hidden service will allow {box_name} to provide selected services (such as " +"ownCloud or chat) without revealing its location." +msgstr "" +"Ein verborgener Dienst ermöglicht {box_name} ausgewählte Dienste (wie " +"ownCloud oder Chat) ohne Offenlegung seiner Position anzubieten." + +#: plinth/modules/tor/forms.py:42 +msgid "Download software packages over Tor" +msgstr "Software über Tor Netzwerk installieren" + +#: plinth/modules/tor/forms.py:44 +msgid "" +"When enabled, software will be downloaded over the Tor network for " +"installations and upgrades. This adds a degree of privacy and security " +"during software downloads." +msgstr "" +"Wenn aktiviert, wird Software für Installationen und Aktualisierungen über " +"das Tor-Netzwerk heruntergeladen. Dies fügt einen Schritt zur Privatsphäre " +"und Sicherheit während des Software-Downloads hinzu." + +#: plinth/modules/tor/templates/tor.html:38 msgid "" "Tor is an anonymous communication system. You can learn more about it from " "the Tor Project website. For " @@ -2454,34 +2885,39 @@ "the " "Tor Browser." msgstr "" -"Tor ist ein anonymes Kommunikationssystem. Sie können mehr darüber auf der " -"Tor Projekt Website erfahren. " +"Tor ist ein anonymes Kommunikationssystem. Sie können mehr darüber auf der <" +"a href=\"https://www.torproject.org/\">Tor Projekt Webseite erfahren. " "Für besten Schutz beim Surfen im Web, empfiehlt das Tor-Projekt, dass Sie " -"den Tor Browser verwenden." +"den " +"Tor Browser verwenden." + +#: plinth/modules/tor/templates/tor.html:54 +#| msgid "Configuration updated" +msgid "Tor configuration is being updated" +msgstr "Tor-Konfiguration wird aktualisiert" -#: plinth/modules/tor/templates/tor.html:44 +#: plinth/modules/tor/templates/tor.html:62 msgid "Tor is running" msgstr "Tor läuft" -#: plinth/modules/tor/templates/tor.html:47 +#: plinth/modules/tor/templates/tor.html:65 msgid "Tor is not running" msgstr "Tor läuft nicht" -#: plinth/modules/tor/templates/tor.html:59 +#: plinth/modules/tor/templates/tor.html:77 msgid "Hidden Service" msgstr "Verborgene Dienste" -#: plinth/modules/tor/templates/tor.html:60 -#: plinth/modules/tor/templates/tor.html:102 +#: plinth/modules/tor/templates/tor.html:78 +#: plinth/modules/tor/templates/tor.html:120 msgid "Port" msgstr "Port" -#: plinth/modules/tor/templates/tor.html:85 +#: plinth/modules/tor/templates/tor.html:103 msgid "Bridge" msgstr "Brücke" -#: plinth/modules/tor/templates/tor.html:88 +#: plinth/modules/tor/templates/tor.html:106 #, python-format msgid "" "Your %(box_name)s is configured as a Tor bridge with obfsproxy, so it can " @@ -2494,90 +2930,41 @@ "einer Firewall ist, sollten Sie sicherstellen, dass die folgenden Ports " "geöffnet und weitergeleitet sind, falls erforderlich:" -#: plinth/modules/tor/templates/tor.html:101 +#: plinth/modules/tor/templates/tor.html:119 msgid "Service" msgstr "Dienst" -#: plinth/modules/tor/templates/tor.html:117 +#: plinth/modules/tor/templates/tor.html:135 msgid "SOCKS" msgstr "SOCKS" -#: plinth/modules/tor/templates/tor.html:120 +#: plinth/modules/tor/templates/tor.html:138 #, python-format msgid "A Tor SOCKS port is available on your %(box_name)s on TCP port 9050." msgstr "" "Ein Tor SOCKS Port steht auf Ihrer %(box_name)s auf TCP port 9050 bereit." -#: plinth/modules/tor/tor.py:46 -msgid "Enable Tor" -msgstr "Tor einschalten" - -#: plinth/modules/tor/tor.py:49 -msgid "Enable Tor Hidden Service" -msgstr "Tor Verborgenen Dienst einschalten" - -#: plinth/modules/tor/tor.py:51 -msgid "" -"A hidden service will allow FreedomBox to provide selected services (such as " -"ownCloud or Chat) without revealing its location." -msgstr "" -"Ein verborgener Dienst ermöglicht FreedomBox ausgewählte Dienste (wie " -"ownCloud oder Chat) ohne Offenlegung seiner Position anzubieten." - -#: plinth/modules/tor/tor.py:55 -msgid "Download software packages over Tor" -msgstr "Software über Tor Netzwerk installieren" - -#: plinth/modules/tor/tor.py:57 -msgid "" -"When enabled, software will be downloaded over the Tor network for " -"installations and upgrades. This adds a degree of privacy and security " -"during software downloads." -msgstr "" -"Wenn aktiviert, wird Software für Installationen und Aktualisierungen über " -"das Tor-Netzwerk heruntergeladen. Dies fügt einen Schritt zur Privatsphäre " -"und Sicherheit während des Software-Downloads hinzu." - -#: plinth/modules/tor/tor.py:85 plinth/modules/tor/tor.py:285 -msgid "Tor Hidden Service" -msgstr "Tor Hidden Service" - -#: plinth/modules/tor/tor.py:115 +#: plinth/modules/tor/views.py:68 msgid "Tor Control Panel" msgstr "Tor Kontrollpult" -#: plinth/modules/tor/tor.py:240 +#: plinth/modules/tor/views.py:79 #, python-brace-format msgid "Action error: {0} [{1}] [{2}]" msgstr "Action error: {0} [{1}] [{2}]" -#: plinth/modules/tor/tor.py:256 -msgid "Tor enabled" -msgstr "Tor eingeschaltet" - -#: plinth/modules/tor/tor.py:259 -msgid "Tor disabled" -msgstr "Tor ausgeschaltet" - -#: plinth/modules/tor/tor.py:264 -msgid "Tor hidden service enabled" -msgstr "Tor verborgener Dienst eingeschaltet" - -#: plinth/modules/tor/tor.py:267 -msgid "Tor hidden service disabled" -msgstr "Tor verborgener Dienst ausgeschaltet" - -#: plinth/modules/tor/tor.py:292 -msgid "Enabled package download over Tor" -msgstr "Package Download über Tor eingeschaltet" - -#: plinth/modules/tor/tor.py:295 -msgid "Disabled package download over Tor" -msgstr "Package Download über Tor ausgeschaltet" +#: plinth/modules/tor/views.py:148 +#| msgid "Configuration updated" +msgid "Configuration updated." +msgstr "Konfiguration aktualisiert." + +#: plinth/modules/tor/views.py:150 +msgid "An error occurred during configuration." +msgstr "Ein Fehler ist bei der Konfiguration aufgetreten." #: plinth/modules/transmission/__init__.py:38 #: plinth/modules/transmission/templates/transmission.html:26 -#: plinth/modules/transmission/views.py:63 +#: plinth/modules/transmission/views.py:67 msgid "BitTorrent (Transmission)" msgstr "BitTorrent (Transmission)" @@ -2594,10 +2981,6 @@ msgstr "Download Ordner" #: plinth/modules/transmission/forms.py:34 -#| msgid "" -#| "Directory where downloads are saved. If you change the default " -#| "directory, ensure that the new directory exists and is writable by " -#| "\"debian-tramission\" user." msgid "" "Directory where downloads are saved. If you change the default directory, " "ensure that the new directory exists and is writable by \"debian-transmission" @@ -2661,73 +3044,78 @@ "System verfügbar sind. Es wird dann versucht alle Aktualisierungen " "durchzuführen." -#: plinth/modules/upgrades/templates/upgrades.html:40 -msgid "There was an error while upgrading." -msgstr "Es trat ein Fehler beim automatischen Update auf." - -#: plinth/modules/upgrades/templates/upgrades.html:43 -#: plinth/modules/upgrades/templates/upgrades.html:59 -msgid "Output from unattended-upgrades:" -msgstr "Meldungen der automatischen Aktualisierungen:" - -#: plinth/modules/upgrades/templates/upgrades.html:50 -msgid "The operating system is up to date now.  " -msgstr "Das Betriebssystem ist nun auf dem neuesten Stand.  " - -#: plinth/modules/upgrades/templates/upgrades.html:53 -msgid "Show Details" -msgstr "Zeige Details" - -#: plinth/modules/upgrades/templates/upgrades.html:69 +#: plinth/modules/upgrades/templates/upgrades.html:37 msgid "" -"This will run unattended-upgrades, which will attempt to upgrade your system " -"with the latest Debian packages. It may take a few minutes to complete." -msgstr "" -"Hier werden automatische Updates gestartet welche versuchen werden das " -"System mit den neusten Debian Paketen zu versorgen. Es kann einige Minuten " -"dauern bis dieser Vorgang abgeschlossen ist." +"Upgrades install the latest software and security updates. When automatic " +"upgrades are enabled, upgrades are automatically run every night. You don't " +"normally need to start the upgrade process." +msgstr "" +"Upgrades installiert die neuesten Software- und Sicherheitsupdates. Wenn " +"automatische Upgrades aktiviert sind, werden Aktualisierungen automatisch " +"jede Nacht durchgeführt. Sie brauchen normalerweise den Upgrade-Prozess " +"nicht zu starten." + +#: plinth/modules/upgrades/templates/upgrades.html:45 +msgid "" +"Depending on the number of packages to install, this may take a long time to " +"complete. While upgrades are in progress, you will not be able to install " +"other packages. During the upgrade, this web interface may be temporarily " +"unavailable and show an error. Refresh the page to continue." +msgstr "" +"Abhängig von der Anzahl der zu installierenden Pakete, kann dies eine lange " +"Zeit dauern. Während Aktualisierungen im Gange sind, werden Sie nicht in der " +"Lage sein, andere Pakete zu installieren. Während der Aktualisierung kann " +"dieses Web-Interface vorübergehend nicht verfügbar sein und eine " +"Fehlermeldung anzeigen. Aktualisieren Sie die Seite um fortzufahren." -#: plinth/modules/upgrades/templates/upgrades.html:80 +#: plinth/modules/upgrades/templates/upgrades.html:58 msgid "Upgrade now »" msgstr "Updates jetzt durchführen »" -#: plinth/modules/upgrades/templates/upgrades.html:87 -msgid "System is being upgraded." -msgstr "System wir aktualisiert." +#: plinth/modules/upgrades/templates/upgrades.html:65 +#| msgid "ejabberd is running" +msgid "A package manager is running." +msgstr "Ein Paket-Manager läuft." + +#: plinth/modules/upgrades/templates/upgrades.html:70 +msgid "Recent log from upgrades:" +msgstr "Letzte Protokolle der Aktualisierungen:" -#: plinth/modules/upgrades/views.py:35 plinth/modules/upgrades/views.py:64 +#: plinth/modules/upgrades/views.py:36 plinth/modules/upgrades/views.py:66 msgid "Automatic Upgrades" msgstr "Automatische Aktualisierungen" -#: plinth/modules/upgrades/views.py:37 +#: plinth/modules/upgrades/views.py:38 msgid "Upgrade Packages" msgstr "Pakete aktualisieren" -#: plinth/modules/upgrades/views.py:75 +#: plinth/modules/upgrades/views.py:96 +#| msgid "Upgrade completed." +msgid "Upgrade process started." +msgstr "Aktualisierung begonnen." + +#: plinth/modules/upgrades/views.py:99 +#| msgid "Upgrade failed." +msgid "Starting upgrade failed." +msgstr "Starten der Aktualisierung fehlgeschlagen." + +#: plinth/modules/upgrades/views.py:102 msgid "Package Upgrades" msgstr "Paketaktualisierungen" -#: plinth/modules/upgrades/views.py:116 +#: plinth/modules/upgrades/views.py:131 #, python-brace-format msgid "Error when configuring unattended-upgrades: {error}" msgstr "Fehler beim Konfigurieren von automatischen Aktualisierungen: {error}" -#: plinth/modules/upgrades/views.py:121 +#: plinth/modules/upgrades/views.py:136 msgid "Automatic upgrades enabled" msgstr "Automatische Aktualisierungen eingeschaltet" -#: plinth/modules/upgrades/views.py:123 +#: plinth/modules/upgrades/views.py:138 msgid "Automatic upgrades disabled" msgstr "Automatische Aktualisierungen ausgeschaltet" -#: plinth/modules/upgrades/views.py:142 -msgid "Upgrade completed." -msgstr "Aktualisierung beendet." - -#: plinth/modules/upgrades/views.py:144 -msgid "Upgrade failed." -msgstr "Aktualisierung fehlgeschlagen." - #: plinth/modules/users/__init__.py:36 msgid "Users and Groups" msgstr "Benutzer und Gruppen" @@ -2768,19 +3156,34 @@ msgid "Failed to add new user to {group} group." msgstr "Der Benutzer konnte nicht der Gruppe {group} hinzugefügt werden." -#: plinth/modules/users/forms.py:126 +#: plinth/modules/users/forms.py:92 +msgid "SSH Keys" +msgstr "SSH Schlüssel" + +#: plinth/modules/users/forms.py:96 +msgid "" +"Setting an SSH public key will allow this user to securely log in to the " +"system without using a password. You may enter multiple keys, one on each " +"line. Blank lines and lines starting with # will be ignored." +msgstr "" +"Einen SSH-Public-Key festzulegen erlaubt dem Benutzer erlauben sich sicher " +"ohne Kennwort an das System anzumelden. Sie können mehrere Schlüssel, einen " +"auf jeder Zeile, eingeben. Leerzeilen und Zeilen beginnend mit # werden " +"ignoriert." + +#: plinth/modules/users/forms.py:136 msgid "Renaming LDAP user failed." msgstr "Umbenennen des LDAP Nutzers fehlgeschlagen." -#: plinth/modules/users/forms.py:138 +#: plinth/modules/users/forms.py:148 msgid "Failed to remove user from group." msgstr "Entfernen des Nutzers von der Gruppe fehlgeschlagen." -#: plinth/modules/users/forms.py:149 +#: plinth/modules/users/forms.py:159 msgid "Failed to add user to group." msgstr "Hinzufügen eines Benutzers zur Gruppe ist fehlgeschlagen." -#: plinth/modules/users/forms.py:174 +#: plinth/modules/users/forms.py:188 msgid "Changing LDAP user password failed." msgstr "Ändern des LDAP Benutzerpassworts ist fehlgeschlagen." @@ -2799,7 +3202,7 @@ msgstr "Benutzer anlegen" #: plinth/modules/users/templates/users_delete.html:26 -#: plinth/modules/users/views.py:103 +#: plinth/modules/users/views.py:110 msgid "Delete User" msgstr "Benutzer löschen" @@ -2855,20 +3258,20 @@ msgid "Edit User" msgstr "Benutzer bearbeiten" -#: plinth/modules/users/views.py:113 +#: plinth/modules/users/views.py:120 #, python-brace-format msgid "User {user} deleted." msgstr "Benutzer {user} gelöscht." -#: plinth/modules/users/views.py:120 +#: plinth/modules/users/views.py:127 msgid "Deleting LDAP user failed." msgstr "LDAP Benutzer Löschen fehlgeschlagen." -#: plinth/modules/users/views.py:129 +#: plinth/modules/users/views.py:136 msgid "Change Password" msgstr "Passwort ändern" -#: plinth/modules/users/views.py:130 +#: plinth/modules/users/views.py:137 msgid "Password changed successfully." msgstr "Passwort erfolgreich geändert." @@ -2952,9 +3355,11 @@ msgid "Secure Shell (SSH) Server" msgstr "Secure Shell (SSH) Server" -#: plinth/service.py:78 -msgid "FreedomBox Web Interface (Plinth)" -msgstr "FreedomBox Web Benutzerschnittstelle (Plinth)" +#: plinth/service.py:79 +#, python-brace-format +#| msgid "FreedomBox Web Interface (Plinth)" +msgid "{box_name} Web Interface (Plinth)" +msgstr "{box_name} Web Benutzerschnittstelle (Plinth)" #: plinth/templates/404.html:25 msgid "404" @@ -2990,27 +3395,25 @@ "com/freedombox/Plinth/issues\">Bugtracker, so dass wir es beheben können." #: plinth/templates/base.html:49 -msgid "Plinth administrative interface for the FreedomBox" -msgstr "Plinth Verwaltungsschnittstelle für die FreedomBox" - -#: plinth/templates/base.html:52 plinth/templates/base.html.py:88 -msgid "FreedomBox" -msgstr "FreedomBox" +#, python-format +#| msgid "Plinth administrative interface for the FreedomBox" +msgid "Plinth administrative interface for the %(box_name)s" +msgstr "Plinth Verwaltungsschnittstelle für %(box_name)s" -#: plinth/templates/base.html:81 +#: plinth/templates/base.html:83 msgid "Toggle navigation" msgstr "Navigation umschalten" -#: plinth/templates/base.html:121 plinth/templates/base.html.py:122 +#: plinth/templates/base.html:125 plinth/templates/base.html.py:126 msgid "Change password" msgstr "Passwort ändern" -#: plinth/templates/base.html:125 plinth/templates/base.html.py:126 -#: plinth/templates/base.html:139 plinth/templates/base.html.py:141 +#: plinth/templates/base.html:129 plinth/templates/base.html.py:130 +#: plinth/templates/base.html:143 plinth/templates/base.html.py:145 msgid "Log out" msgstr "Abmelden" -#: plinth/templates/base.html:131 plinth/templates/base.html.py:133 +#: plinth/templates/base.html:135 plinth/templates/base.html.py:137 msgid "Log in" msgstr "Anmelden" @@ -3052,6 +3455,88 @@ msgid "%(percentage)s%% complete" msgstr "%(percentage)s%% abgearbeitet" +#~ msgid "show password" +#~ msgstr "Passwort anzeigen" + +#~ msgid "The following is the current status:" +#~ msgstr "Der aktuelle Status ist wie folgt:" + +#~ msgid "Congratulations! Your FreedomBox is up and running!" +#~ msgstr "Glückwunsch! Ihre FreedomBox läuft!" + +#~ msgid "" +#~ "Please provide the following basic information to complete the setup " +#~ "process." +#~ msgstr "" +#~ "Bitte geben Sie die folgenden grundlegenden Informationen an um die " +#~ "Installation abzuschließen." + +#~ msgid "Next" +#~ msgstr "Weiter" + +#~ msgid "FreedomBox Manual" +#~ msgstr "FreedomBox Handbuch" + +#~ msgid "" +#~ "Many FreedomBox contributors and users are also available on the " +#~ "#freedombox channel of the irc.oftc.net IRC network." +#~ msgstr "" +#~ "Viele Mitwirkende bei FreedomBox und Benutzer sind auch über den " +#~ "#freedombox Kanal des irc.oftc.net IRC Netzwerks erreichbar." + +#~ msgid "Create Wiki/Blog" +#~ msgstr "Wiki/Blog anlegen" + +#~ msgid "" +#~ "Select Automatic (DHCP) if you are connecting to an existing wireless " +#~ "network. Shared mode is useful when running an Access Point." +#~ msgstr "" +#~ "Wählen Sie Automatisch (DHCP), wenn Sie zu einem bestehenden drahtlosen " +#~ "Netzwerk verbunden sind. Shared mode ist nützlich bei Verwendung eines " +#~ "Access Points." + +#~ msgid "Tor enabled" +#~ msgstr "Tor eingeschaltet" + +#~ msgid "Tor disabled" +#~ msgstr "Tor ausgeschaltet" + +#~ msgid "Tor hidden service enabled" +#~ msgstr "Tor verborgener Dienst eingeschaltet" + +#~ msgid "Tor hidden service disabled" +#~ msgstr "Tor verborgener Dienst ausgeschaltet" + +#~ msgid "Enabled package download over Tor" +#~ msgstr "Package Download über Tor eingeschaltet" + +#~ msgid "Disabled package download over Tor" +#~ msgstr "Package Download über Tor ausgeschaltet" + +#~ msgid "There was an error while upgrading." +#~ msgstr "Es trat ein Fehler beim automatischen Update auf." + +#~ msgid "Output from unattended-upgrades:" +#~ msgstr "Meldungen der automatischen Aktualisierungen:" + +#~ msgid "The operating system is up to date now.  " +#~ msgstr "Das Betriebssystem ist nun auf dem neuesten Stand.  " + +#~ msgid "Show Details" +#~ msgstr "Zeige Details" + +#~ msgid "" +#~ "This will run unattended-upgrades, which will attempt to upgrade your " +#~ "system with the latest Debian packages. It may take a few minutes to " +#~ "complete." +#~ msgstr "" +#~ "Hier werden automatische Updates gestartet welche versuchen werden das " +#~ "System mit den neusten Debian Paketen zu versorgen. Es kann einige " +#~ "Minuten dauern bis dieser Vorgang abgeschlossen ist." + +#~ msgid "System is being upgraded." +#~ msgstr "System wir aktualisiert." + #~ msgid "" #~ "You can install and run various services and applications on your " #~ "%(box_name)s." diff -Nru plinth-0.7.2/plinth/locale/django.pot plinth-0.8.1/plinth/locale/django.pot --- plinth-0.7.2/plinth/locale/django.pot 2015-12-23 11:34:40.000000000 +0000 +++ plinth-0.8.1/plinth/locale/django.pot 2016-02-16 03:55:53.000000000 +0000 @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-12-20 13:58+0530\n" +"POT-Creation-Date: 2016-01-31 22:19+0530\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -47,11 +47,15 @@ msgid "Cannot connect to {host}:{port}" msgstr "" +#: plinth/context_processors.py:36 +msgid "FreedomBox" +msgstr "" + #: plinth/modules/apps/apps.py:26 msgid "Apps" msgstr "" -#: plinth/modules/apps/apps.py:32 plinth/templates/base.html.py:90 +#: plinth/modules/apps/apps.py:32 plinth/templates/base.html.py:93 msgid "Applications" msgstr "" @@ -86,10 +90,11 @@ msgstr "" #: plinth/modules/avahi/templates/avahi.html:29 +#, python-format msgid "" -"Service discovery allows other machines on the network to discover your " -"FreedomBox and services running on it. It also allows FreedomBox to " -"discover other machines and services running on your local network. Service " +"Service discovery allows other devices on the network to discover your " +"%(box_name)s and services running on it. It also allows %(box_name)s to " +"discover other devices and services running on your local network. Service " "discovery is not essential and works only on internal networks. It may be " "disabled to improve security especially when connecting to a hostile local " "network." @@ -98,14 +103,15 @@ #: plinth/modules/avahi/templates/avahi.html:40 #: plinth/modules/datetime/templates/datetime.html:35 #: plinth/modules/deluge/templates/deluge.html:39 -#: plinth/modules/dynamicdns/dynamicdns.py:38 +#: plinth/modules/dynamicdns/dynamicdns.py:39 #: plinth/modules/firewall/templates/firewall.html:57 #: plinth/modules/mumble/templates/mumble.html:44 #: plinth/modules/networks/templates/connection_show.html:261 #: plinth/modules/openvpn/templates/openvpn.html:81 #: plinth/modules/privoxy/templates/privoxy.html:48 #: plinth/modules/quassel/templates/quassel.html:50 -#: plinth/modules/tor/templates/tor.html:39 +#: plinth/modules/repro/templates/repro.html:58 +#: plinth/modules/tor/templates/tor.html:48 #: plinth/modules/transmission/templates/transmission.html:42 #: plinth/modules/xmpp/templates/xmpp.html:58 msgid "Status" @@ -128,9 +134,10 @@ #: plinth/modules/owncloud/templates/owncloud.html:51 #: plinth/modules/privoxy/templates/privoxy.html:62 #: plinth/modules/quassel/templates/quassel.html:65 +#: plinth/modules/repro/templates/repro.html:72 #: plinth/modules/roundcube/templates/roundcube.html:62 #: plinth/modules/shaarli/templates/shaarli.html:40 -#: plinth/modules/tor/templates/tor.html:74 +#: plinth/modules/tor/templates/tor.html:92 #: plinth/modules/transmission/templates/transmission.html:56 #: plinth/modules/xmpp/templates/xmpp.html:72 msgid "Configuration" @@ -146,10 +153,11 @@ #: plinth/modules/openvpn/templates/openvpn.html:138 #: plinth/modules/privoxy/templates/privoxy.html:70 #: plinth/modules/quassel/templates/quassel.html:73 +#: plinth/modules/repro/templates/repro.html:80 #: plinth/modules/restore/templates/restore_index.html:54 #: plinth/modules/roundcube/templates/roundcube.html:70 #: plinth/modules/shaarli/templates/shaarli.html:48 -#: plinth/modules/tor/templates/tor.html:82 +#: plinth/modules/tor/templates/tor.html:100 #: plinth/modules/transmission/templates/transmission.html:64 #: plinth/modules/upgrades/templates/upgrades_configure.html:34 #: plinth/modules/xmpp/templates/xmpp.html:80 @@ -158,12 +166,13 @@ #: plinth/modules/avahi/views.py:73 plinth/modules/datetime/views.py:85 #: plinth/modules/deluge/views.py:80 -#: plinth/modules/dynamicdns/dynamicdns.py:368 +#: plinth/modules/dynamicdns/dynamicdns.py:371 #: plinth/modules/ikiwiki/views.py:95 plinth/modules/mumble/views.py:80 #: plinth/modules/openvpn/views.py:142 plinth/modules/privoxy/views.py:83 -#: plinth/modules/quassel/views.py:76 plinth/modules/restore/views.py:68 -#: plinth/modules/roundcube/views.py:84 plinth/modules/shaarli/views.py:74 -#: plinth/modules/transmission/views.py:105 plinth/modules/xmpp/views.py:100 +#: plinth/modules/quassel/views.py:76 plinth/modules/repro/views.py:77 +#: plinth/modules/restore/views.py:68 plinth/modules/roundcube/views.py:84 +#: plinth/modules/shaarli/views.py:74 plinth/modules/transmission/views.py:109 +#: plinth/modules/xmpp/views.py:100 msgid "Configuration updated" msgstr "" @@ -171,60 +180,63 @@ #: plinth/modules/deluge/views.py:82 plinth/modules/ikiwiki/views.py:97 #: plinth/modules/mumble/views.py:82 plinth/modules/openvpn/views.py:144 #: plinth/modules/owncloud/owncloud.py:93 plinth/modules/privoxy/views.py:85 -#: plinth/modules/quassel/views.py:78 plinth/modules/restore/views.py:70 -#: plinth/modules/roundcube/views.py:86 plinth/modules/shaarli/views.py:76 -#: plinth/modules/tor/tor.py:250 plinth/modules/transmission/views.py:107 -#: plinth/modules/upgrades/views.py:103 plinth/modules/xmpp/views.py:102 +#: plinth/modules/quassel/views.py:78 plinth/modules/repro/views.py:79 +#: plinth/modules/restore/views.py:70 plinth/modules/roundcube/views.py:86 +#: plinth/modules/shaarli/views.py:76 plinth/modules/tor/views.py:111 +#: plinth/modules/transmission/views.py:111 +#: plinth/modules/upgrades/views.py:118 plinth/modules/xmpp/views.py:102 msgid "Setting unchanged" msgstr "" -#: plinth/modules/config/config.py:83 plinth/modules/config/config.py:120 -#: plinth/modules/dynamicdns/dynamicdns.py:145 +#: plinth/modules/config/config.py:84 plinth/modules/config/config.py:121 +#: plinth/modules/dynamicdns/dynamicdns.py:148 msgid "Invalid domain name" msgstr "" -#: plinth/modules/config/config.py:94 +#: plinth/modules/config/config.py:95 msgid "Hostname" msgstr "" -#: plinth/modules/config/config.py:96 +#: plinth/modules/config/config.py:97 +#, python-brace-format msgid "" -"Hostname is the local name by which other machines on the local network " -"reach your machine. It must start and end with an alphabet or a digit and " -"have as interior characters only alphabets, digits and hyphens. Total " +"Hostname is the local name by which other devices on the local network can " +"reach your {box_name}. It must start and end with an alphabet or a digit " +"and have as interior characters only alphabets, digits and hyphens. Total " "length must be 63 characters or less." msgstr "" -#: plinth/modules/config/config.py:104 +#: plinth/modules/config/config.py:105 msgid "Invalid hostname" msgstr "" -#: plinth/modules/config/config.py:107 plinth/modules/config/config.py:153 +#: plinth/modules/config/config.py:108 plinth/modules/config/config.py:153 #: plinth/modules/config/config.py:265 -#: plinth/modules/dynamicdns/dynamicdns.py:140 +#: plinth/modules/dynamicdns/dynamicdns.py:143 msgid "Domain Name" msgstr "" -#: plinth/modules/config/config.py:109 +#: plinth/modules/config/config.py:110 +#, python-brace-format msgid "" -"Domain name is the global name by which other machines on the Internet can " -"reach you. It must consist of labels separated by dots. Each label must " -"start and end with an alphabet or a digit and have as interior characters " -"only alphabets, digits and hyphens. Length of each label must be 63 " -"characters or less. Total length of domain name must be 253 characters or " -"less." +"Domain name is the global name by which other devices on the Internet can " +"reach your {box_name}. It must consist of labels separated by dots. Each " +"label must start and end with an alphabet or a digit and have as interior " +"characters only alphabets, digits and hyphens. Length of each label must be " +"63 characters or less. Total length of domain name must be 253 characters " +"or less." msgstr "" -#: plinth/modules/config/config.py:124 +#: plinth/modules/config/config.py:125 msgid "Language" msgstr "" -#: plinth/modules/config/config.py:126 -msgid "Language for this FreedomBox web administration interface" +#: plinth/modules/config/config.py:127 +msgid "Language for this web administration interface" msgstr "" #: plinth/modules/config/config.py:135 -#: plinth/modules/dynamicdns/dynamicdns.py:36 +#: plinth/modules/dynamicdns/dynamicdns.py:37 #: plinth/modules/ikiwiki/views.py:36 msgid "Configure" msgstr "" @@ -411,147 +423,151 @@ msgid "Result" msgstr "" -#: plinth/modules/dynamicdns/dynamicdns.py:34 plinth/modules/help/help.py:40 +#: plinth/modules/dynamicdns/dynamicdns.py:35 plinth/modules/help/help.py:40 msgid "About" msgstr "" -#: plinth/modules/dynamicdns/dynamicdns.py:44 -#: plinth/modules/dynamicdns/dynamicdns.py:53 +#: plinth/modules/dynamicdns/dynamicdns.py:45 +#: plinth/modules/dynamicdns/dynamicdns.py:54 msgid "Dynamic DNS" msgstr "" -#: plinth/modules/dynamicdns/dynamicdns.py:70 +#: plinth/modules/dynamicdns/dynamicdns.py:71 msgid "" "The Variables <User>, <Pass>, <Ip>, <Domain> may be " "used within the URL. For details see the update URL templates of the example " "providers." msgstr "" -#: plinth/modules/dynamicdns/dynamicdns.py:74 +#: plinth/modules/dynamicdns/dynamicdns.py:75 msgid "" "Please choose an update protocol according to your provider. If your " "provider does not support the GnudIP protocol or your provider is not listed " "you may use the update URL of your provider." msgstr "" -#: plinth/modules/dynamicdns/dynamicdns.py:79 +#: plinth/modules/dynamicdns/dynamicdns.py:80 msgid "" "Please do not enter a URL here (like \"https://example.com/\") but only the " -"hostname of the GnuDIP server (like \"example.pcom\")." +"hostname of the GnuDIP server (like \"example.com\")." msgstr "" -#: plinth/modules/dynamicdns/dynamicdns.py:83 -msgid "The public domain name you want use to reach your box." +#: plinth/modules/dynamicdns/dynamicdns.py:84 +#, python-brace-format +msgid "The public domain name you want use to reach your {box_name}." msgstr "" -#: plinth/modules/dynamicdns/dynamicdns.py:85 +#: plinth/modules/dynamicdns/dynamicdns.py:87 msgid "Use this option if your provider uses self signed certificates." msgstr "" -#: plinth/modules/dynamicdns/dynamicdns.py:88 +#: plinth/modules/dynamicdns/dynamicdns.py:90 msgid "" "If this option is selected, your username and password will be used for HTTP " "basic authentication." msgstr "" -#: plinth/modules/dynamicdns/dynamicdns.py:91 +#: plinth/modules/dynamicdns/dynamicdns.py:93 msgid "" "Leave this field empty if you want to keep your previous configured password." msgstr "" -#: plinth/modules/dynamicdns/dynamicdns.py:94 +#: plinth/modules/dynamicdns/dynamicdns.py:96 +#, python-brace-format msgid "" -"Optional Value. If your FreedomBox is not connected directly to the Internet " +"Optional Value. If your {box_name} is not connected directly to the Internet " "(i.e. connected to a NAT router) this URL is used to figure out the real " -"Internet IP. The URL should simply return the IP wherethe client comes from. " -"Example: http://myip.datasystems24.de" +"Internet IP. The URL should simply return the IP where the client comes from " +"(example: http://myip.datasystems24.de)." msgstr "" -#: plinth/modules/dynamicdns/dynamicdns.py:101 +#: plinth/modules/dynamicdns/dynamicdns.py:104 msgid "" "You should have been requested to select a username when you created the " "account." msgstr "" -#: plinth/modules/dynamicdns/dynamicdns.py:112 +#: plinth/modules/dynamicdns/dynamicdns.py:115 msgid "Enable Dynamic DNS" msgstr "" -#: plinth/modules/dynamicdns/dynamicdns.py:115 +#: plinth/modules/dynamicdns/dynamicdns.py:118 msgid "Service type" msgstr "" -#: plinth/modules/dynamicdns/dynamicdns.py:120 +#: plinth/modules/dynamicdns/dynamicdns.py:123 msgid "GnudIP Server Address" msgstr "" -#: plinth/modules/dynamicdns/dynamicdns.py:125 +#: plinth/modules/dynamicdns/dynamicdns.py:128 msgid "Invalid server name" msgstr "" -#: plinth/modules/dynamicdns/dynamicdns.py:128 +#: plinth/modules/dynamicdns/dynamicdns.py:131 msgid "Update URL" msgstr "" -#: plinth/modules/dynamicdns/dynamicdns.py:132 -msgid "accept all SSL certificates" +#: plinth/modules/dynamicdns/dynamicdns.py:135 +msgid "Accept all SSL certificates" msgstr "" -#: plinth/modules/dynamicdns/dynamicdns.py:136 -msgid "use HTTP basic authentication" +#: plinth/modules/dynamicdns/dynamicdns.py:139 +msgid "Use HTTP basic authentication" msgstr "" -#: plinth/modules/dynamicdns/dynamicdns.py:148 -#: plinth/modules/networks/forms.py:118 plinth/modules/transmission/forms.py:39 +#: plinth/modules/dynamicdns/dynamicdns.py:151 +#: plinth/modules/networks/forms.py:146 plinth/modules/transmission/forms.py:39 msgid "Username" msgstr "" -#: plinth/modules/dynamicdns/dynamicdns.py:151 -#: plinth/modules/networks/forms.py:119 plinth/modules/transmission/forms.py:43 +#: plinth/modules/dynamicdns/dynamicdns.py:154 +#: plinth/modules/networks/forms.py:147 plinth/modules/transmission/forms.py:43 msgid "Password" msgstr "" -#: plinth/modules/dynamicdns/dynamicdns.py:154 -msgid "show password" +#: plinth/modules/dynamicdns/dynamicdns.py:157 +#: plinth/modules/networks/forms.py:149 +msgid "Show password" msgstr "" -#: plinth/modules/dynamicdns/dynamicdns.py:158 +#: plinth/modules/dynamicdns/dynamicdns.py:161 msgid "IP check URL" msgstr "" -#: plinth/modules/dynamicdns/dynamicdns.py:184 +#: plinth/modules/dynamicdns/dynamicdns.py:187 msgid "Please provide update URL or a GnuDIP Server" msgstr "" -#: plinth/modules/dynamicdns/dynamicdns.py:187 +#: plinth/modules/dynamicdns/dynamicdns.py:190 msgid "Please provide GnuDIP username" msgstr "" -#: plinth/modules/dynamicdns/dynamicdns.py:190 +#: plinth/modules/dynamicdns/dynamicdns.py:193 msgid "Please provide GnuDIP domain" msgstr "" -#: plinth/modules/dynamicdns/dynamicdns.py:195 +#: plinth/modules/dynamicdns/dynamicdns.py:198 msgid "Please provide a password" msgstr "" -#: plinth/modules/dynamicdns/dynamicdns.py:214 +#: plinth/modules/dynamicdns/dynamicdns.py:217 msgid "Configure Dynamic DNS" msgstr "" -#: plinth/modules/dynamicdns/dynamicdns.py:236 +#: plinth/modules/dynamicdns/dynamicdns.py:239 msgid "Status of Dynamic DNS" msgstr "" #: plinth/modules/dynamicdns/templates/dynamicdns.html:25 -msgid "DynamicDNS client" +msgid "Dynamic DNS Client" msgstr "" #: plinth/modules/dynamicdns/templates/dynamicdns.html:28 +#, python-format msgid "" "If your internet provider changes your IP address periodic (i.e. every 24h) " "it may be hard for others to find you in the WEB. And for this reason nobody " -"may find the services which are provided by FreedomBox (like your ownCloud)." +"may find the services which are provided by %(box_name)s, such as ownCloud." msgstr "" #: plinth/modules/dynamicdns/templates/dynamicdns.html:37 @@ -561,7 +577,7 @@ "allows you to push your current public IP address to an gnudip server. Afterwards " "the Server will assign your DNS name with the new IP and if someone from the " -"internet asks for your DNS name he will get your current IP answered." +"Internet asks for your DNS name he will get your current IP answered." msgstr "" #: plinth/modules/dynamicdns/templates/dynamicdns.html:50 @@ -574,10 +590,10 @@ msgstr "" #: plinth/modules/dynamicdns/templates/dynamicdns.html:61 +#, python-format msgid "" -"If your freedombox is connected behind some NAT router, don't forget to add " -"portforwarding (i.e. forward some standard ports like 80 and 443) to your " -"freedombox device." +"If your %(box_name)s is connected behind some NAT router, don't forget to " +"add port forwarding (i.e. forward some standard ports like 80 and 443)." msgstr "" #: plinth/modules/dynamicdns/templates/dynamicdns_configure.html:30 @@ -597,16 +613,16 @@ msgstr "" #: plinth/modules/dynamicdns/templates/dynamicdns_status.html:35 -msgid "Direct connection to the internet." +msgid "Direct connection to the Internet." msgstr "" #: plinth/modules/dynamicdns/templates/dynamicdns_status.html:37 #, python-format msgid "" -"Behind NAT, this means that dynamic DNS service will poll the \"IP check URL" -"\" for changes (we need the \"IP check URL\" for this reason - otherwise we " -"will not detect IP changes). It may take up to %(timer)s minutes until we " -"update your DNS entry in case of WAN IP change." +"Behind NAT. This means that Dynamic DNS service will poll the \"IP check URL" +"\" for changes (the \"IP check URL\" entry is needed for this - otherwise IP " +"changes will not be detected). In case the WAN IP changes, it may take up " +"to %(timer)s minutes until your DNS entry is updated." msgstr "" #: plinth/modules/dynamicdns/templates/dynamicdns_status.html:48 @@ -622,13 +638,13 @@ #: plinth/modules/firewall/templates/firewall.html:28 #, python-format msgid "" -"Firewall is a network security system that controls the incoming and " -"outgoing network traffic on your %(box_name)s. Keeping a firewall enabled " -"and properly configured reduces risk of security threat from the Internet." +"Firewall is a security system that controls the incoming and outgoing " +"network traffic on your %(box_name)s. Keeping a firewall enabled and " +"properly configured reduces risk of security threat from the Internet." msgstr "" #: plinth/modules/firewall/templates/firewall.html:36 -msgid "The following is the current status:" +msgid "Current status:" msgstr "" #: plinth/modules/firewall/templates/firewall.html:41 @@ -645,11 +661,13 @@ msgstr "" #: plinth/modules/firewall/templates/firewall.html:67 +#: plinth/modules/letsencrypt/templates/letsencrypt.html:91 #: plinth/modules/names/templates/names.html:51 msgid "Enabled" msgstr "" #: plinth/modules/firewall/templates/firewall.html:70 +#: plinth/modules/letsencrypt/templates/letsencrypt.html:93 #: plinth/modules/names/templates/names.html:53 msgid "Disabled" msgstr "" @@ -673,8 +691,8 @@ #: plinth/modules/firewall/templates/firewall.html:103 msgid "" "The operation of the firewall is automatic. When you enable a service it is " -"automatically permitted in the firewall and you disable a service is " -"automatically disabled in the firewall." +"also permitted in the firewall and when you disable a service it is also " +"disabled in the firewall." msgstr "" #: plinth/modules/first_boot/forms.py:48 plinth/modules/users/forms.py:70 @@ -689,31 +707,35 @@ msgid "User account created, you are now logged in" msgstr "" -#: plinth/modules/first_boot/templates/firstboot_state0.html:50 -msgid "Congratulations! Your FreedomBox is up and running!" +#: plinth/modules/first_boot/templates/firstboot_navbar.html:23 +#: plinth/modules/help/templates/help_index.html:25 +#: plinth/templates/base.html:102 +msgid "Help" msgstr "" -#: plinth/modules/first_boot/templates/firstboot_state0.html:54 -msgid "" -"Please provide the following basic information to complete the setup process." +#: plinth/modules/first_boot/templates/firstboot_state0.html:45 +msgid "Start Setup" msgstr "" -#: plinth/modules/first_boot/templates/firstboot_state0.html:62 -msgid "Next" +#: plinth/modules/first_boot/templates/firstboot_state0.html:49 +#, python-format +msgid "" +"To complete the setup of your %(box_name)s, please provide some basic " +"information." msgstr "" -#: plinth/modules/first_boot/templates/firstboot_state1.html:39 +#: plinth/modules/first_boot/templates/firstboot_state1.html:41 msgid "Administrator Account" msgstr "" -#: plinth/modules/first_boot/templates/firstboot_state1.html:42 +#: plinth/modules/first_boot/templates/firstboot_state1.html:44 msgid "" "Choose a username and password to access this web interface. The password " "can be changed later. This user will be granted administrative privileges. " "Other users can be added later." msgstr "" -#: plinth/modules/first_boot/templates/firstboot_state1.html:55 +#: plinth/modules/first_boot/templates/firstboot_state1.html:57 msgid "Box it up!" msgstr "" @@ -722,28 +744,29 @@ msgstr "" #: plinth/modules/first_boot/templates/firstboot_state10.html:32 +#, python-format msgid "" -"FreedomBox setup is now complete. However, you should check the network " -"setup and modify it if necessary. Do not forget to change the default Wi-Fi " -"passwords." +"%(box_name)s setup is now complete. To make your %(box_name)s functional, " +"you need some applications. They will be installed the first time you " +"access them." msgstr "" -#: plinth/modules/first_boot/templates/firstboot_state10.html:40 -msgid "" -"To make your FreedomBox functional, you need some applications. " -"Applications will be installed the first time you access them." +#: plinth/modules/first_boot/templates/firstboot_state10.html:41 +msgid "Go to Apps" msgstr "" -#: plinth/modules/first_boot/templates/firstboot_state10.html:47 -msgid "Network Configuration" +#: plinth/modules/first_boot/templates/firstboot_state10.html:44 +msgid "Current Network Configuration" msgstr "" -#: plinth/modules/first_boot/templates/firstboot_state10.html:54 -msgid "Go to Networks" +#: plinth/modules/first_boot/templates/firstboot_state10.html:47 +msgid "" +"You should check the network setup and modify it if necessary. Do not forget " +"to change the default Wi-Fi passwords!" msgstr "" -#: plinth/modules/first_boot/templates/firstboot_state10.html:59 -msgid "Go to Apps" +#: plinth/modules/first_boot/templates/firstboot_state10.html:57 +msgid "Go to Networks" msgstr "" #: plinth/modules/first_boot/views.py:60 @@ -758,8 +781,8 @@ msgid "Where to Get Help" msgstr "" -#: plinth/modules/help/help.py:38 plinth/modules/help/help.py:72 -msgid "FreedomBox Manual" +#: plinth/modules/help/help.py:38 +msgid "Manual" msgstr "" #: plinth/modules/help/help.py:48 @@ -771,15 +794,21 @@ msgid "About {box_name}" msgstr "" +#: plinth/modules/help/help.py:73 +#, python-brace-format +msgid "{box_name} Manual" +msgstr "" + #: plinth/modules/help/templates/help_about.html:30 +#, python-format msgid "" -"FreedomBox is a community project to develop, design and promote personal " +"%(box_name)s is a community project to develop, design and promote personal " "servers running free software for private, personal communications. It is a " "networking appliance designed to allow interfacing with the rest of the " "Internet under conditions of protected privacy and data security. It hosts " "applications such as blog, wiki, website, social network, email, web proxy " -"and a Tor relay on a device that can replace your Wi-Fi router so that your " -"data stays with you." +"and a Tor relay, on a device that can replace your Wi-Fi router, so that " +"your data stays with you." msgstr "" #: plinth/modules/help/templates/help_about.html:43 @@ -793,68 +822,76 @@ msgstr "" #: plinth/modules/help/templates/help_about.html:56 +#, python-format msgid "" "There are a number of projects working to realize a future of distributed " -"services; FreedomBox aims to bring them all together in a convenient package." +"services; %(box_name)s aims to bring them all together in a convenient " +"package." msgstr "" #: plinth/modules/help/templates/help_about.html:64 +#, python-format msgid "" -"For more information about the FreedomBox project, see the FreedomBox Wiki." +"For more information about the %(box_name)s project, see the %(box_name)s Wiki." msgstr "" -#: plinth/modules/help/templates/help_about.html:72 +#: plinth/modules/help/templates/help_about.html:73 msgid "Learn more »" msgstr "" -#: plinth/modules/help/templates/help_about.html:75 +#: plinth/modules/help/templates/help_about.html:76 #, python-format msgid "You are running Plinth version %(version)s." msgstr "" -#: plinth/modules/help/templates/help_index.html:25 -#: plinth/templates/base.html:98 -msgid "Help" +#: plinth/modules/help/templates/help_base.html:36 +#, python-format +msgid "%(box_name)s Setup" msgstr "" #: plinth/modules/help/templates/help_index.html:29 #, python-format msgid "" -"The FreedomBox Manual is the best place to " +"The %(box_name)s Manual is the best place to " "start for information regarding %(box_name)s." msgstr "" #: plinth/modules/help/templates/help_index.html:36 +#, python-format msgid "" -" FreedomBox " -"project wiki contains further information." +" " +"%(box_name)s project wiki contains further information." msgstr "" #: plinth/modules/help/templates/help_index.html:43 +#, python-format msgid "" -"To seek help from FreedomBox community, queries may be posted on the " -"mailing list. The list archives also contain information about problems " -"faced by other users and possible solutions." +"To seek help from %(box_name)s community, queries may be posted on the mailing list. The list archives also contain information about " +"problems faced by other users and possible solutions." msgstr "" #: plinth/modules/help/templates/help_index.html:53 +#, python-format msgid "" -"Many FreedomBox contributors and users are also available on the #freedombox " -"channel of the irc.oftc.net IRC network." +"Many %(box_name)s contributors and users are also available on the irc.oftc." +"net IRC network. Join and request help on the #freedombox " +"channel using the IRC web interface." msgstr "" #: plinth/modules/ikiwiki/__init__.py:38 -msgid "Wiki & Blog (Ikiwiki)" +msgid "Wiki and Blog (ikiwiki)" msgstr "" #: plinth/modules/ikiwiki/__init__.py:43 -msgid "Ikiwiki wikis and blogs" +msgid "ikiwiki wikis and blogs" msgstr "" #: plinth/modules/ikiwiki/forms.py:29 -msgid "Enable Ikiwiki" +msgid "Enable ikiwiki" msgstr "" #: plinth/modules/ikiwiki/forms.py:36 @@ -883,21 +920,22 @@ #: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:27 #, python-format -msgid "Delete Wiki/Blog %(name)s" +msgid "Delete Wiki or Blog %(name)s" msgstr "" #: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:33 msgid "" "This action will remove all the posts, pages and comments including revision " -"history. Delete this wiki/blog permanently?" +"history. Delete this wiki or blog permanently?" msgstr "" -#: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:43 +#: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:44 #, python-format msgid "Delete %(name)s" msgstr "" -#: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:46 +#: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:47 +#: plinth/modules/monkeysphere/templates/monkeysphere.html:60 #: plinth/modules/networks/templates/connections_delete.html:41 #: plinth/modules/users/templates/users_delete.html:41 msgid "Cancel" @@ -930,7 +968,7 @@ msgstr "" #: plinth/modules/ikiwiki/views.py:73 -msgid "Wiki & Blog" +msgid "Wiki and Blog" msgstr "" #: plinth/modules/ikiwiki/views.py:106 @@ -938,7 +976,7 @@ msgstr "" #: plinth/modules/ikiwiki/views.py:132 -msgid "Create Wiki/Blog" +msgid "Create Wiki or Blog" msgstr "" #: plinth/modules/ikiwiki/views.py:145 @@ -972,7 +1010,144 @@ msgstr "" #: plinth/modules/ikiwiki/views.py:182 -msgid "Delete Wiki/Blog" +msgid "Delete Wiki or Blog" +msgstr "" + +#: plinth/modules/letsencrypt/__init__.py:43 +#: plinth/modules/letsencrypt/templates/letsencrypt.html:38 +#: plinth/modules/letsencrypt/views.py:45 +msgid "Certificates (Let's Encrypt)" +msgstr "" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:41 +#, python-format +msgid "" +"A digital certficate allows users of a web service to verify the identity of " +"the service and to securely communicate with it. %(box_name)s can " +"automatically obtain and setup digital certificates for each available " +"domain. It does so by proving itself to be the owner of a domain to Let's " +"Encrypt, a certficate authority (CA)." +msgstr "" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:52 +msgid "" +"Let's Encrypt is a free, automated, and open certificate authority, run for " +"the public’s benefit by the Internet Security Research Group (ISRG). Please " +"read and agree with the Let's Encrypt Subscriber Agreement before using this service." +msgstr "" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:66 +#: plinth/modules/monkeysphere/templates/monkeysphere.html:70 +msgid "Domain" +msgstr "" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:67 +msgid "Certificate Status" +msgstr "" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:68 +msgid "Website Security" +msgstr "" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:69 +#: plinth/modules/monkeysphere/templates/monkeysphere.html:72 +msgid "Actions" +msgstr "" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:79 +#, python-format +msgid "Expires on %(expiry_date)s" +msgstr "" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:85 +msgid "No certficate" +msgstr "" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:102 +msgid "Revoke" +msgstr "" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:108 +msgid "Re-obtain" +msgstr "" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:115 +msgid "Obtain" +msgstr "" + +#: plinth/modules/letsencrypt/views.py:55 +#, python-brace-format +msgid "Certificate successfully revoked for domain {domain}" +msgstr "" + +#: plinth/modules/letsencrypt/views.py:60 +#, python-brace-format +msgid "Failed to revoke certificate for domain {domain}: {error}" +msgstr "" + +#: plinth/modules/letsencrypt/views.py:72 +#, python-brace-format +msgid "Certificate successfully obtained for domain {domain}" +msgstr "" + +#: plinth/modules/letsencrypt/views.py:77 +#, python-brace-format +msgid "Failed to obtain certificate for domain {domain}: {error}" +msgstr "" + +#: plinth/modules/monkeysphere/__init__.py:32 +#: plinth/modules/monkeysphere/templates/monkeysphere.html:35 +#: plinth/modules/monkeysphere/views.py:44 +msgid "Monkeysphere" +msgstr "" + +#: plinth/modules/monkeysphere/templates/monkeysphere.html:38 +msgid "" +"With Monkeysphere, a PGP key can be generated for each configured domain " +"serving SSH. The PGP public key can then be uploaded to the PGP keyservers. " +"Users connecting to this machine through SSH can verify that they are " +"connecting to the correct host. For users to trust the key, at least one " +"person (usually the machine owner) must sign the key using the regular PGP " +"key signing process. See the Monkeysphere SSH documentation for more details." +msgstr "" + +#: plinth/modules/monkeysphere/templates/monkeysphere.html:53 +msgid "Publishing key to keyserver..." +msgstr "" + +#: plinth/modules/monkeysphere/templates/monkeysphere.html:71 +msgid "GPG Fingerprint" +msgstr "" + +#: plinth/modules/monkeysphere/templates/monkeysphere.html:83 +#: plinth/modules/names/views.py:45 +msgid "Not Available" +msgstr "" + +#: plinth/modules/monkeysphere/templates/monkeysphere.html:93 +msgid "Generate PGP Key" +msgstr "" + +#: plinth/modules/monkeysphere/templates/monkeysphere.html:101 +msgid "Publish Key" +msgstr "" + +#: plinth/modules/monkeysphere/views.py:58 +msgid "Generated PGP key." +msgstr "" + +#: plinth/modules/monkeysphere/views.py:83 +msgid "Cancelled key publishing." +msgstr "" + +#: plinth/modules/monkeysphere/views.py:120 +msgid "Published key to keyserver." +msgstr "" + +#: plinth/modules/monkeysphere/views.py:122 +msgid "Error occurred while publishing key." msgstr "" #: plinth/modules/mumble/__init__.py:38 @@ -1010,170 +1185,151 @@ msgid "Mumble server is not running" msgstr "" -#: plinth/modules/names/__init__.py:30 +#: plinth/modules/names/__init__.py:29 msgid "HTTP" msgstr "" -#: plinth/modules/names/__init__.py:31 +#: plinth/modules/names/__init__.py:30 msgid "HTTPS" msgstr "" -#: plinth/modules/names/__init__.py:32 +#: plinth/modules/names/__init__.py:31 msgid "SSH" msgstr "" -#: plinth/modules/names/__init__.py:46 plinth/modules/names/views.py:34 +#: plinth/modules/names/__init__.py:45 plinth/modules/names/views.py:34 msgid "Name Services" msgstr "" -#: plinth/modules/names/__init__.py:107 -msgid "Not Available" -msgstr "" - #: plinth/modules/networks/__init__.py:108 #, python-brace-format msgid "Using DNSSEC on IPv{kind}" msgstr "" #: plinth/modules/networks/forms.py:30 -msgid "-- select --" -msgstr "" - -#: plinth/modules/networks/forms.py:42 msgid "Connection Type" msgstr "" -#: plinth/modules/networks/forms.py:49 plinth/modules/networks/forms.py:106 -#: plinth/modules/networks/forms.py:133 +#: plinth/modules/networks/forms.py:37 msgid "Connection Name" msgstr "" -#: plinth/modules/networks/forms.py:51 plinth/modules/networks/forms.py:108 -#: plinth/modules/networks/forms.py:135 +#: plinth/modules/networks/forms.py:39 msgid "Physical Interface" msgstr "" -#: plinth/modules/networks/forms.py:53 plinth/modules/networks/forms.py:110 -#: plinth/modules/networks/forms.py:137 +#: plinth/modules/networks/forms.py:41 msgid "The network device that this connection should be bound to." msgstr "" -#: plinth/modules/networks/forms.py:56 plinth/modules/networks/forms.py:113 -#: plinth/modules/networks/forms.py:140 +#: plinth/modules/networks/forms.py:44 msgid "Firewall Zone" msgstr "" -#: plinth/modules/networks/forms.py:57 plinth/modules/networks/forms.py:114 -#: plinth/modules/networks/forms.py:141 +#: plinth/modules/networks/forms.py:45 msgid "" "The firewall zone will control which services are available over this " "interfaces. Select Internal only for trusted networks." msgstr "" -#: plinth/modules/networks/forms.py:61 plinth/modules/networks/forms.py:162 +#: plinth/modules/networks/forms.py:49 msgid "IPv4 Addressing Method" msgstr "" -#: plinth/modules/networks/forms.py:62 +#: plinth/modules/networks/forms.py:50 msgid "" "\"Shared\" method will start a DHCP server and \"Automatic\" method will " "acquire configuration from a DHCP server." msgstr "" -#: plinth/modules/networks/forms.py:68 plinth/modules/networks/forms.py:170 +#: plinth/modules/networks/forms.py:56 msgid "Address" msgstr "" -#: plinth/modules/networks/forms.py:72 plinth/modules/networks/forms.py:174 +#: plinth/modules/networks/forms.py:60 msgid "Netmask" msgstr "" -#: plinth/modules/networks/forms.py:73 plinth/modules/networks/forms.py:175 +#: plinth/modules/networks/forms.py:61 msgid "" "Optional value. If left blank, a default netmask based on the address will " "be used." msgstr "" -#: plinth/modules/networks/forms.py:78 plinth/modules/networks/forms.py:180 +#: plinth/modules/networks/forms.py:66 #: plinth/modules/networks/templates/connection_show.html:202 #: plinth/modules/networks/templates/connection_show.html:241 msgid "Gateway" msgstr "" -#: plinth/modules/networks/forms.py:79 plinth/modules/networks/forms.py:181 +#: plinth/modules/networks/forms.py:67 msgid "Optional value." msgstr "" -#: plinth/modules/networks/forms.py:83 plinth/modules/networks/forms.py:185 +#: plinth/modules/networks/forms.py:71 msgid "DNS Server" msgstr "" -#: plinth/modules/networks/forms.py:84 plinth/modules/networks/forms.py:186 +#: plinth/modules/networks/forms.py:72 msgid "" "Optional value. If this value is given and IPv4 addressing method is " "\"Automatic\", the DNS Servers provided by a DHCP server will be ignored." msgstr "" -#: plinth/modules/networks/forms.py:90 plinth/modules/networks/forms.py:192 +#: plinth/modules/networks/forms.py:78 msgid "Second DNS Server" msgstr "" -#: plinth/modules/networks/forms.py:91 plinth/modules/networks/forms.py:193 +#: plinth/modules/networks/forms.py:79 msgid "" "Optional value. If this value is given and IPv4 Addressing Method is " "\"Automatic\", the DNS Servers provided by a DHCP server will be ignored." msgstr "" -#: plinth/modules/networks/forms.py:121 -msgid "Show password" +#: plinth/modules/networks/forms.py:89 +msgid "-- select --" msgstr "" -#: plinth/modules/networks/forms.py:145 +#: plinth/modules/networks/forms.py:175 #: plinth/modules/networks/templates/connection_show.html:144 msgid "SSID" msgstr "" -#: plinth/modules/networks/forms.py:146 +#: plinth/modules/networks/forms.py:176 msgid "The visible name of the network." msgstr "" -#: plinth/modules/networks/forms.py:148 +#: plinth/modules/networks/forms.py:178 #: plinth/modules/networks/templates/connection_show.html:157 msgid "Mode" msgstr "" -#: plinth/modules/networks/forms.py:153 +#: plinth/modules/networks/forms.py:183 msgid "Authentication Mode" msgstr "" -#: plinth/modules/networks/forms.py:154 +#: plinth/modules/networks/forms.py:184 msgid "" "Select WPA if the wireless network is secured and requires clients to have " "the password to connect." msgstr "" -#: plinth/modules/networks/forms.py:158 +#: plinth/modules/networks/forms.py:188 msgid "Passphrase" msgstr "" -#: plinth/modules/networks/forms.py:166 -msgid "" -"Select Automatic (DHCP) if you are connecting to an existing wireless " -"network. Shared mode is useful when running an Access Point." -msgstr "" - #: plinth/modules/networks/networks.py:36 #: plinth/modules/networks/networks.py:56 msgid "Network Connections" msgstr "" #: plinth/modules/networks/networks.py:38 -#: plinth/modules/networks/networks.py:273 +#: plinth/modules/networks/networks.py:242 msgid "Nearby Wi-Fi Networks" msgstr "" #: plinth/modules/networks/networks.py:40 -#: plinth/modules/networks/networks.py:295 +#: plinth/modules/networks/networks.py:264 msgid "Add Connection" msgstr "" @@ -1197,58 +1353,58 @@ msgid "This type of connection is not yet understood." msgstr "" -#: plinth/modules/networks/networks.py:170 -#: plinth/modules/networks/networks.py:229 +#: plinth/modules/networks/networks.py:139 +#: plinth/modules/networks/networks.py:198 #: plinth/modules/networks/templates/connections_edit.html:34 msgid "Edit Connection" msgstr "" -#: plinth/modules/networks/networks.py:240 +#: plinth/modules/networks/networks.py:209 #, python-brace-format msgid "Activated connection {name}." msgstr "" -#: plinth/modules/networks/networks.py:243 +#: plinth/modules/networks/networks.py:212 msgid "Failed to activate connection: Connection not found." msgstr "" -#: plinth/modules/networks/networks.py:247 +#: plinth/modules/networks/networks.py:216 #, python-brace-format msgid "Failed to activate connection {name}: No suitable device is available." msgstr "" -#: plinth/modules/networks/networks.py:260 +#: plinth/modules/networks/networks.py:229 #, python-brace-format msgid "Deactivated connection {name}." msgstr "" -#: plinth/modules/networks/networks.py:263 +#: plinth/modules/networks/networks.py:232 msgid "Failed to de-activate connection: Connection not found." msgstr "" -#: plinth/modules/networks/networks.py:325 +#: plinth/modules/networks/networks.py:282 msgid "Adding New Ethernet Connection" msgstr "" -#: plinth/modules/networks/networks.py:350 +#: plinth/modules/networks/networks.py:300 msgid "Adding New PPPoE Connection" msgstr "" -#: plinth/modules/networks/networks.py:399 +#: plinth/modules/networks/networks.py:332 msgid "Adding New Wi-Fi Connection" msgstr "" -#: plinth/modules/networks/networks.py:413 +#: plinth/modules/networks/networks.py:346 #, python-brace-format msgid "Connection {name} deleted." msgstr "" -#: plinth/modules/networks/networks.py:416 -#: plinth/modules/networks/networks.py:425 +#: plinth/modules/networks/networks.py:349 +#: plinth/modules/networks/networks.py:358 msgid "Failed to delete connection: Connection not found." msgstr "" -#: plinth/modules/networks/networks.py:430 +#: plinth/modules/networks/networks.py:363 #: plinth/modules/networks/templates/connections_delete.html:26 msgid "Delete Connection" msgstr "" @@ -1258,7 +1414,7 @@ msgstr "" #: plinth/modules/networks/templates/connection_show.html:43 -#: plinth/templates/base.html:119 +#: plinth/templates/base.html:123 msgid "Edit" msgstr "" @@ -1405,23 +1561,24 @@ #: plinth/modules/networks/templates/connection_show.html:280 msgid "" -"This interface should be connected to local network/machine. If you connect " -"this interface to a public network, services meant to be available only " -"internally will become available externally. This is a security risk." +"This interface should be connected to a local network/machine. If you " +"connect this interface to a public network, services meant to be available " +"only internally will become available externally. This is a security risk." msgstr "" #: plinth/modules/networks/templates/connection_show.html:300 msgid "" -"This interface should receive your Internet connection. If you connect it " -"your a local network/machine, many services meant to available only " -"internally will not be available." +"This interface should receive your Internet connection. If you connect it to " +"a local network/machine, many services meant to available only internally " +"will not be available." msgstr "" #: plinth/modules/networks/templates/connection_show.html:319 +#, python-format msgid "" -"This interface is not maintained by FreedomBox. Its security status is " -"unknown to FreedomBox. Many FreedomBox services may not be available on " -"this interface. It is recommended that you deactivate/delete this " +"This interface is not maintained by %(box_name)s. Its security status is " +"unknown to %(box_name)s. Many %(box_name)s services may not be available on " +"this interface. It is recommended that you deactivate or delete this " "connection and re-configure it." msgstr "" @@ -1513,7 +1670,7 @@ #, python-format msgid "" "Virtual Private Network (VPN) is a technique for securely connecting two " -"machines in order to access resources of a private network. While you are " +"devices in order to access resources of a private network. While you are " "away from home, you can connect to your %(box_name)s in order to join your " "home network and access private/internal services provided by %(box_name)s. " "You can also access the rest of the Internet via %(box_name)s for added " @@ -1530,7 +1687,7 @@ "To connect to %(box_name)s's VPN, you need to download a profile and feed it " "to an OpenVPN client on your mobile or desktop machine. OpenVPN Clients are " "available for most platforms. See documentation on recommended clients and instructions on how to " "configure them." msgstr "" @@ -2008,6 +2165,54 @@ msgid "Quassel core service is not running" msgstr "" +#: plinth/modules/repro/__init__.py:36 +#: plinth/modules/repro/templates/repro.html:26 +#: plinth/modules/repro/views.py:55 +msgid "SIP Server (repro)" +msgstr "" + +#: plinth/modules/repro/__init__.py:41 +msgid "repro SIP Server" +msgstr "" + +#: plinth/modules/repro/forms.py:29 +msgid "Enable repro service" +msgstr "" + +#: plinth/modules/repro/templates/repro.html:29 +msgid "" +"repro provides various SIP services that a SIP softphone can utilize to " +"provide audio and video calls as well as presence and instant messaging. " +"repro provides a server and SIP user accounts that clients can use to let " +"their presence known. It also acts as a proxy to federate SIP " +"communications to other servers on the Internet similar to email." +msgstr "" + +#: plinth/modules/repro/templates/repro.html:39 +msgid "" +"To make SIP calls, a client application is needed. Available clients include " +"Jitsi (for computers) and CSipSimple (for Android phones)." +msgstr "" + +#: plinth/modules/repro/templates/repro.html:48 +msgid "" +"Note: Before using repro, domains and users will need to " +"be configured using the web-based " +"configuration panel. Users in the admin group will be able to " +"log in to the repro configuration panel. After setting the domain, it is " +"required to restart the repro service. Disable the service and re-enable it." +msgstr "" + +#: plinth/modules/repro/templates/repro.html:63 +msgid "repro service is running" +msgstr "" + +#: plinth/modules/repro/templates/repro.html:66 +msgid "repro service is not running" +msgstr "" + #: plinth/modules/restore/__init__.py:36 #: plinth/modules/restore/templates/restore_index.html:26 #: plinth/modules/restore/views.py:46 @@ -2028,8 +2233,8 @@ "reStore is a server for unhosted web " "applications. The idea is to uncouple web applications from data. No " "matter where a web application is served from, the data can be stored on an " -"unhosted storage server of user's choice. With reStore, your " -"%(cfg.box_name)s becomes your unhosted storage server." +"unhosted storage server of user's choice. With reStore, your %(box_name)s " +"becomes your unhosted storage server." msgstr "" #: plinth/modules/restore/templates/restore_index.html:40 @@ -2106,7 +2311,7 @@ #: plinth/modules/system/system.py:33 #: plinth/modules/system/templates/system.html:25 -#: plinth/templates/base.html:105 +#: plinth/templates/base.html:109 msgid "System Configuration" msgstr "" @@ -2121,33 +2326,71 @@ "The options affect the %(box_name)s at its most general level, so be careful!" msgstr "" -#: plinth/modules/tor/__init__.py:50 -msgid "Tor relay port available" +#: plinth/modules/tor/__init__.py:48 plinth/modules/tor/templates/tor.html:35 +msgid "Anonymity Network (Tor)" +msgstr "" + +#: plinth/modules/tor/__init__.py:53 +msgid "Tor Anonymity Network" msgstr "" #: plinth/modules/tor/__init__.py:58 +msgid "Tor Bridge Relay" +msgstr "" + +#: plinth/modules/tor/__init__.py:76 plinth/modules/tor/views.py:144 +msgid "Tor Hidden Service" +msgstr "" + +#: plinth/modules/tor/__init__.py:222 +msgid "Tor relay port available" +msgstr "" + +#: plinth/modules/tor/__init__.py:230 msgid "Obfs3 transport registered" msgstr "" -#: plinth/modules/tor/__init__.py:64 +#: plinth/modules/tor/__init__.py:236 msgid "Obfs4 transport registered" msgstr "" -#: plinth/modules/tor/__init__.py:101 +#: plinth/modules/tor/__init__.py:273 #, python-brace-format msgid "Access URL {url} on tcp{kind} via Tor" msgstr "" -#: plinth/modules/tor/__init__.py:112 +#: plinth/modules/tor/__init__.py:284 #, python-brace-format msgid "Confirm Tor usage at {url} on tcp{kind}" msgstr "" -#: plinth/modules/tor/templates/tor.html:26 plinth/modules/tor/tor.py:66 -msgid "Anonymity Network (Tor)" +#: plinth/modules/tor/forms.py:32 +msgid "Enable Tor" +msgstr "" + +#: plinth/modules/tor/forms.py:35 +msgid "Enable Tor Hidden Service" +msgstr "" + +#: plinth/modules/tor/forms.py:38 +#, python-brace-format +msgid "" +"A hidden service will allow {box_name} to provide selected services (such as " +"ownCloud or chat) without revealing its location." +msgstr "" + +#: plinth/modules/tor/forms.py:42 +msgid "Download software packages over Tor" +msgstr "" + +#: plinth/modules/tor/forms.py:44 +msgid "" +"When enabled, software will be downloaded over the Tor network for " +"installations and upgrades. This adds a degree of privacy and security " +"during software downloads." msgstr "" -#: plinth/modules/tor/templates/tor.html:29 +#: plinth/modules/tor/templates/tor.html:38 msgid "" "Tor is an anonymous communication system. You can learn more about it from " "the Tor Project website. For " @@ -2156,28 +2399,32 @@ "Tor Browser." msgstr "" -#: plinth/modules/tor/templates/tor.html:44 +#: plinth/modules/tor/templates/tor.html:54 +msgid "Tor configuration is being updated" +msgstr "" + +#: plinth/modules/tor/templates/tor.html:62 msgid "Tor is running" msgstr "" -#: plinth/modules/tor/templates/tor.html:47 +#: plinth/modules/tor/templates/tor.html:65 msgid "Tor is not running" msgstr "" -#: plinth/modules/tor/templates/tor.html:59 +#: plinth/modules/tor/templates/tor.html:77 msgid "Hidden Service" msgstr "" -#: plinth/modules/tor/templates/tor.html:60 -#: plinth/modules/tor/templates/tor.html:102 +#: plinth/modules/tor/templates/tor.html:78 +#: plinth/modules/tor/templates/tor.html:120 msgid "Port" msgstr "" -#: plinth/modules/tor/templates/tor.html:85 +#: plinth/modules/tor/templates/tor.html:103 msgid "Bridge" msgstr "" -#: plinth/modules/tor/templates/tor.html:88 +#: plinth/modules/tor/templates/tor.html:106 #, python-format msgid "" "Your %(box_name)s is configured as a Tor bridge with obfsproxy, so it can " @@ -2186,84 +2433,39 @@ "forwarded, if necessary:" msgstr "" -#: plinth/modules/tor/templates/tor.html:101 +#: plinth/modules/tor/templates/tor.html:119 msgid "Service" msgstr "" -#: plinth/modules/tor/templates/tor.html:117 +#: plinth/modules/tor/templates/tor.html:135 msgid "SOCKS" msgstr "" -#: plinth/modules/tor/templates/tor.html:120 +#: plinth/modules/tor/templates/tor.html:138 #, python-format msgid "A Tor SOCKS port is available on your %(box_name)s on TCP port 9050." msgstr "" -#: plinth/modules/tor/tor.py:46 -msgid "Enable Tor" -msgstr "" - -#: plinth/modules/tor/tor.py:49 -msgid "Enable Tor Hidden Service" -msgstr "" - -#: plinth/modules/tor/tor.py:51 -msgid "" -"A hidden service will allow FreedomBox to provide selected services (such as " -"ownCloud or Chat) without revealing its location." -msgstr "" - -#: plinth/modules/tor/tor.py:55 -msgid "Download software packages over Tor" -msgstr "" - -#: plinth/modules/tor/tor.py:57 -msgid "" -"When enabled, software will be downloaded over the Tor network for " -"installations and upgrades. This adds a degree of privacy and security " -"during software downloads." -msgstr "" - -#: plinth/modules/tor/tor.py:85 plinth/modules/tor/tor.py:285 -msgid "Tor Hidden Service" -msgstr "" - -#: plinth/modules/tor/tor.py:115 +#: plinth/modules/tor/views.py:68 msgid "Tor Control Panel" msgstr "" -#: plinth/modules/tor/tor.py:240 +#: plinth/modules/tor/views.py:79 #, python-brace-format msgid "Action error: {0} [{1}] [{2}]" msgstr "" -#: plinth/modules/tor/tor.py:256 -msgid "Tor enabled" -msgstr "" - -#: plinth/modules/tor/tor.py:259 -msgid "Tor disabled" -msgstr "" - -#: plinth/modules/tor/tor.py:264 -msgid "Tor hidden service enabled" -msgstr "" - -#: plinth/modules/tor/tor.py:267 -msgid "Tor hidden service disabled" -msgstr "" - -#: plinth/modules/tor/tor.py:292 -msgid "Enabled package download over Tor" +#: plinth/modules/tor/views.py:148 +msgid "Configuration updated." msgstr "" -#: plinth/modules/tor/tor.py:295 -msgid "Disabled package download over Tor" +#: plinth/modules/tor/views.py:150 +msgid "An error occurred during configuration." msgstr "" #: plinth/modules/transmission/__init__.py:38 #: plinth/modules/transmission/templates/transmission.html:26 -#: plinth/modules/transmission/views.py:63 +#: plinth/modules/transmission/views.py:67 msgid "BitTorrent (Transmission)" msgstr "" @@ -2329,70 +2531,66 @@ "will attempt to perform any package upgrades that are available." msgstr "" -#: plinth/modules/upgrades/templates/upgrades.html:40 -msgid "There was an error while upgrading." +#: plinth/modules/upgrades/templates/upgrades.html:37 +msgid "" +"Upgrades install the latest software and security updates. When automatic " +"upgrades are enabled, upgrades are automatically run every night. You don't " +"normally need to start the upgrade process." msgstr "" -#: plinth/modules/upgrades/templates/upgrades.html:43 -#: plinth/modules/upgrades/templates/upgrades.html:59 -msgid "Output from unattended-upgrades:" +#: plinth/modules/upgrades/templates/upgrades.html:45 +msgid "" +"Depending on the number of packages to install, this may take a long time to " +"complete. While upgrades are in progress, you will not be able to install " +"other packages. During the upgrade, this web interface may be temporarily " +"unavailable and show an error. Refresh the page to continue." msgstr "" -#: plinth/modules/upgrades/templates/upgrades.html:50 -msgid "The operating system is up to date now.  " +#: plinth/modules/upgrades/templates/upgrades.html:58 +msgid "Upgrade now »" msgstr "" -#: plinth/modules/upgrades/templates/upgrades.html:53 -msgid "Show Details" +#: plinth/modules/upgrades/templates/upgrades.html:65 +msgid "A package manager is running." msgstr "" -#: plinth/modules/upgrades/templates/upgrades.html:69 -msgid "" -"This will run unattended-upgrades, which will attempt to upgrade your system " -"with the latest Debian packages. It may take a few minutes to complete." +#: plinth/modules/upgrades/templates/upgrades.html:70 +msgid "Recent log from upgrades:" msgstr "" -#: plinth/modules/upgrades/templates/upgrades.html:80 -msgid "Upgrade now »" +#: plinth/modules/upgrades/views.py:36 plinth/modules/upgrades/views.py:66 +msgid "Automatic Upgrades" msgstr "" -#: plinth/modules/upgrades/templates/upgrades.html:87 -msgid "System is being upgraded." +#: plinth/modules/upgrades/views.py:38 +msgid "Upgrade Packages" msgstr "" -#: plinth/modules/upgrades/views.py:35 plinth/modules/upgrades/views.py:64 -msgid "Automatic Upgrades" +#: plinth/modules/upgrades/views.py:96 +msgid "Upgrade process started." msgstr "" -#: plinth/modules/upgrades/views.py:37 -msgid "Upgrade Packages" +#: plinth/modules/upgrades/views.py:99 +msgid "Starting upgrade failed." msgstr "" -#: plinth/modules/upgrades/views.py:75 +#: plinth/modules/upgrades/views.py:102 msgid "Package Upgrades" msgstr "" -#: plinth/modules/upgrades/views.py:116 +#: plinth/modules/upgrades/views.py:131 #, python-brace-format msgid "Error when configuring unattended-upgrades: {error}" msgstr "" -#: plinth/modules/upgrades/views.py:121 +#: plinth/modules/upgrades/views.py:136 msgid "Automatic upgrades enabled" msgstr "" -#: plinth/modules/upgrades/views.py:123 +#: plinth/modules/upgrades/views.py:138 msgid "Automatic upgrades disabled" msgstr "" -#: plinth/modules/upgrades/views.py:142 -msgid "Upgrade completed." -msgstr "" - -#: plinth/modules/upgrades/views.py:144 -msgid "Upgrade failed." -msgstr "" - #: plinth/modules/users/__init__.py:36 msgid "Users and Groups" msgstr "" @@ -2428,19 +2626,30 @@ msgid "Failed to add new user to {group} group." msgstr "" -#: plinth/modules/users/forms.py:126 +#: plinth/modules/users/forms.py:92 +msgid "SSH Keys" +msgstr "" + +#: plinth/modules/users/forms.py:96 +msgid "" +"Setting an SSH public key will allow this user to securely log in to the " +"system without using a password. You may enter multiple keys, one on each " +"line. Blank lines and lines starting with # will be ignored." +msgstr "" + +#: plinth/modules/users/forms.py:136 msgid "Renaming LDAP user failed." msgstr "" -#: plinth/modules/users/forms.py:138 +#: plinth/modules/users/forms.py:148 msgid "Failed to remove user from group." msgstr "" -#: plinth/modules/users/forms.py:149 +#: plinth/modules/users/forms.py:159 msgid "Failed to add user to group." msgstr "" -#: plinth/modules/users/forms.py:174 +#: plinth/modules/users/forms.py:188 msgid "Changing LDAP user password failed." msgstr "" @@ -2459,7 +2668,7 @@ msgstr "" #: plinth/modules/users/templates/users_delete.html:26 -#: plinth/modules/users/views.py:103 +#: plinth/modules/users/views.py:110 msgid "Delete User" msgstr "" @@ -2512,20 +2721,20 @@ msgid "Edit User" msgstr "" -#: plinth/modules/users/views.py:113 +#: plinth/modules/users/views.py:120 #, python-brace-format msgid "User {user} deleted." msgstr "" -#: plinth/modules/users/views.py:120 +#: plinth/modules/users/views.py:127 msgid "Deleting LDAP user failed." msgstr "" -#: plinth/modules/users/views.py:129 +#: plinth/modules/users/views.py:136 msgid "Change Password" msgstr "" -#: plinth/modules/users/views.py:130 +#: plinth/modules/users/views.py:137 msgid "Password changed successfully." msgstr "" @@ -2600,8 +2809,9 @@ msgid "Secure Shell (SSH) Server" msgstr "" -#: plinth/service.py:78 -msgid "FreedomBox Web Interface (Plinth)" +#: plinth/service.py:79 +#, python-brace-format +msgid "{box_name} Web Interface (Plinth)" msgstr "" #: plinth/templates/404.html:25 @@ -2632,27 +2842,24 @@ msgstr "" #: plinth/templates/base.html:49 -msgid "Plinth administrative interface for the FreedomBox" -msgstr "" - -#: plinth/templates/base.html:52 plinth/templates/base.html.py:88 -msgid "FreedomBox" +#, python-format +msgid "Plinth administrative interface for the %(box_name)s" msgstr "" -#: plinth/templates/base.html:81 +#: plinth/templates/base.html:83 msgid "Toggle navigation" msgstr "" -#: plinth/templates/base.html:121 plinth/templates/base.html.py:122 +#: plinth/templates/base.html:125 plinth/templates/base.html.py:126 msgid "Change password" msgstr "" -#: plinth/templates/base.html:125 plinth/templates/base.html.py:126 -#: plinth/templates/base.html:139 plinth/templates/base.html.py:141 +#: plinth/templates/base.html:129 plinth/templates/base.html.py:130 +#: plinth/templates/base.html:143 plinth/templates/base.html.py:145 msgid "Log out" msgstr "" -#: plinth/templates/base.html:131 plinth/templates/base.html.py:133 +#: plinth/templates/base.html:135 plinth/templates/base.html.py:137 msgid "Log in" msgstr "" diff -Nru plinth-0.7.2/plinth/locale/es/LC_MESSAGES/django.po plinth-0.8.1/plinth/locale/es/LC_MESSAGES/django.po --- plinth-0.7.2/plinth/locale/es/LC_MESSAGES/django.po 2015-12-23 11:34:40.000000000 +0000 +++ plinth-0.8.1/plinth/locale/es/LC_MESSAGES/django.po 2016-02-16 03:55:53.000000000 +0000 @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-12-20 13:58+0530\n" +"POT-Creation-Date: 2016-01-31 22:19+0530\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -48,11 +48,15 @@ msgid "Cannot connect to {host}:{port}" msgstr "" +#: plinth/context_processors.py:36 +msgid "FreedomBox" +msgstr "" + #: plinth/modules/apps/apps.py:26 msgid "Apps" msgstr "" -#: plinth/modules/apps/apps.py:32 plinth/templates/base.html.py:90 +#: plinth/modules/apps/apps.py:32 plinth/templates/base.html.py:93 msgid "Applications" msgstr "" @@ -87,10 +91,11 @@ msgstr "" #: plinth/modules/avahi/templates/avahi.html:29 +#, python-format msgid "" -"Service discovery allows other machines on the network to discover your " -"FreedomBox and services running on it. It also allows FreedomBox to " -"discover other machines and services running on your local network. Service " +"Service discovery allows other devices on the network to discover your " +"%(box_name)s and services running on it. It also allows %(box_name)s to " +"discover other devices and services running on your local network. Service " "discovery is not essential and works only on internal networks. It may be " "disabled to improve security especially when connecting to a hostile local " "network." @@ -99,14 +104,15 @@ #: plinth/modules/avahi/templates/avahi.html:40 #: plinth/modules/datetime/templates/datetime.html:35 #: plinth/modules/deluge/templates/deluge.html:39 -#: plinth/modules/dynamicdns/dynamicdns.py:38 +#: plinth/modules/dynamicdns/dynamicdns.py:39 #: plinth/modules/firewall/templates/firewall.html:57 #: plinth/modules/mumble/templates/mumble.html:44 #: plinth/modules/networks/templates/connection_show.html:261 #: plinth/modules/openvpn/templates/openvpn.html:81 #: plinth/modules/privoxy/templates/privoxy.html:48 #: plinth/modules/quassel/templates/quassel.html:50 -#: plinth/modules/tor/templates/tor.html:39 +#: plinth/modules/repro/templates/repro.html:58 +#: plinth/modules/tor/templates/tor.html:48 #: plinth/modules/transmission/templates/transmission.html:42 #: plinth/modules/xmpp/templates/xmpp.html:58 msgid "Status" @@ -129,9 +135,10 @@ #: plinth/modules/owncloud/templates/owncloud.html:51 #: plinth/modules/privoxy/templates/privoxy.html:62 #: plinth/modules/quassel/templates/quassel.html:65 +#: plinth/modules/repro/templates/repro.html:72 #: plinth/modules/roundcube/templates/roundcube.html:62 #: plinth/modules/shaarli/templates/shaarli.html:40 -#: plinth/modules/tor/templates/tor.html:74 +#: plinth/modules/tor/templates/tor.html:92 #: plinth/modules/transmission/templates/transmission.html:56 #: plinth/modules/xmpp/templates/xmpp.html:72 msgid "Configuration" @@ -147,10 +154,11 @@ #: plinth/modules/openvpn/templates/openvpn.html:138 #: plinth/modules/privoxy/templates/privoxy.html:70 #: plinth/modules/quassel/templates/quassel.html:73 +#: plinth/modules/repro/templates/repro.html:80 #: plinth/modules/restore/templates/restore_index.html:54 #: plinth/modules/roundcube/templates/roundcube.html:70 #: plinth/modules/shaarli/templates/shaarli.html:48 -#: plinth/modules/tor/templates/tor.html:82 +#: plinth/modules/tor/templates/tor.html:100 #: plinth/modules/transmission/templates/transmission.html:64 #: plinth/modules/upgrades/templates/upgrades_configure.html:34 #: plinth/modules/xmpp/templates/xmpp.html:80 @@ -159,12 +167,13 @@ #: plinth/modules/avahi/views.py:73 plinth/modules/datetime/views.py:85 #: plinth/modules/deluge/views.py:80 -#: plinth/modules/dynamicdns/dynamicdns.py:368 +#: plinth/modules/dynamicdns/dynamicdns.py:371 #: plinth/modules/ikiwiki/views.py:95 plinth/modules/mumble/views.py:80 #: plinth/modules/openvpn/views.py:142 plinth/modules/privoxy/views.py:83 -#: plinth/modules/quassel/views.py:76 plinth/modules/restore/views.py:68 -#: plinth/modules/roundcube/views.py:84 plinth/modules/shaarli/views.py:74 -#: plinth/modules/transmission/views.py:105 plinth/modules/xmpp/views.py:100 +#: plinth/modules/quassel/views.py:76 plinth/modules/repro/views.py:77 +#: plinth/modules/restore/views.py:68 plinth/modules/roundcube/views.py:84 +#: plinth/modules/shaarli/views.py:74 plinth/modules/transmission/views.py:109 +#: plinth/modules/xmpp/views.py:100 msgid "Configuration updated" msgstr "" @@ -172,60 +181,63 @@ #: plinth/modules/deluge/views.py:82 plinth/modules/ikiwiki/views.py:97 #: plinth/modules/mumble/views.py:82 plinth/modules/openvpn/views.py:144 #: plinth/modules/owncloud/owncloud.py:93 plinth/modules/privoxy/views.py:85 -#: plinth/modules/quassel/views.py:78 plinth/modules/restore/views.py:70 -#: plinth/modules/roundcube/views.py:86 plinth/modules/shaarli/views.py:76 -#: plinth/modules/tor/tor.py:250 plinth/modules/transmission/views.py:107 -#: plinth/modules/upgrades/views.py:103 plinth/modules/xmpp/views.py:102 +#: plinth/modules/quassel/views.py:78 plinth/modules/repro/views.py:79 +#: plinth/modules/restore/views.py:70 plinth/modules/roundcube/views.py:86 +#: plinth/modules/shaarli/views.py:76 plinth/modules/tor/views.py:111 +#: plinth/modules/transmission/views.py:111 +#: plinth/modules/upgrades/views.py:118 plinth/modules/xmpp/views.py:102 msgid "Setting unchanged" msgstr "" -#: plinth/modules/config/config.py:83 plinth/modules/config/config.py:120 -#: plinth/modules/dynamicdns/dynamicdns.py:145 +#: plinth/modules/config/config.py:84 plinth/modules/config/config.py:121 +#: plinth/modules/dynamicdns/dynamicdns.py:148 msgid "Invalid domain name" msgstr "" -#: plinth/modules/config/config.py:94 +#: plinth/modules/config/config.py:95 msgid "Hostname" msgstr "" -#: plinth/modules/config/config.py:96 +#: plinth/modules/config/config.py:97 +#, python-brace-format msgid "" -"Hostname is the local name by which other machines on the local network " -"reach your machine. It must start and end with an alphabet or a digit and " -"have as interior characters only alphabets, digits and hyphens. Total " +"Hostname is the local name by which other devices on the local network can " +"reach your {box_name}. It must start and end with an alphabet or a digit " +"and have as interior characters only alphabets, digits and hyphens. Total " "length must be 63 characters or less." msgstr "" -#: plinth/modules/config/config.py:104 +#: plinth/modules/config/config.py:105 msgid "Invalid hostname" msgstr "" -#: plinth/modules/config/config.py:107 plinth/modules/config/config.py:153 +#: plinth/modules/config/config.py:108 plinth/modules/config/config.py:153 #: plinth/modules/config/config.py:265 -#: plinth/modules/dynamicdns/dynamicdns.py:140 +#: plinth/modules/dynamicdns/dynamicdns.py:143 msgid "Domain Name" msgstr "" -#: plinth/modules/config/config.py:109 +#: plinth/modules/config/config.py:110 +#, python-brace-format msgid "" -"Domain name is the global name by which other machines on the Internet can " -"reach you. It must consist of labels separated by dots. Each label must " -"start and end with an alphabet or a digit and have as interior characters " -"only alphabets, digits and hyphens. Length of each label must be 63 " -"characters or less. Total length of domain name must be 253 characters or " -"less." +"Domain name is the global name by which other devices on the Internet can " +"reach your {box_name}. It must consist of labels separated by dots. Each " +"label must start and end with an alphabet or a digit and have as interior " +"characters only alphabets, digits and hyphens. Length of each label must be " +"63 characters or less. Total length of domain name must be 253 characters " +"or less." msgstr "" -#: plinth/modules/config/config.py:124 +#: plinth/modules/config/config.py:125 msgid "Language" msgstr "" -#: plinth/modules/config/config.py:126 -msgid "Language for this FreedomBox web administration interface" +#: plinth/modules/config/config.py:127 +msgid "Language for this web administration interface" msgstr "" #: plinth/modules/config/config.py:135 -#: plinth/modules/dynamicdns/dynamicdns.py:36 +#: plinth/modules/dynamicdns/dynamicdns.py:37 #: plinth/modules/ikiwiki/views.py:36 msgid "Configure" msgstr "" @@ -412,147 +424,151 @@ msgid "Result" msgstr "" -#: plinth/modules/dynamicdns/dynamicdns.py:34 plinth/modules/help/help.py:40 +#: plinth/modules/dynamicdns/dynamicdns.py:35 plinth/modules/help/help.py:40 msgid "About" msgstr "" -#: plinth/modules/dynamicdns/dynamicdns.py:44 -#: plinth/modules/dynamicdns/dynamicdns.py:53 +#: plinth/modules/dynamicdns/dynamicdns.py:45 +#: plinth/modules/dynamicdns/dynamicdns.py:54 msgid "Dynamic DNS" msgstr "" -#: plinth/modules/dynamicdns/dynamicdns.py:70 +#: plinth/modules/dynamicdns/dynamicdns.py:71 msgid "" "The Variables <User>, <Pass>, <Ip>, <Domain> may be " "used within the URL. For details see the update URL templates of the example " "providers." msgstr "" -#: plinth/modules/dynamicdns/dynamicdns.py:74 +#: plinth/modules/dynamicdns/dynamicdns.py:75 msgid "" "Please choose an update protocol according to your provider. If your " "provider does not support the GnudIP protocol or your provider is not listed " "you may use the update URL of your provider." msgstr "" -#: plinth/modules/dynamicdns/dynamicdns.py:79 +#: plinth/modules/dynamicdns/dynamicdns.py:80 msgid "" "Please do not enter a URL here (like \"https://example.com/\") but only the " -"hostname of the GnuDIP server (like \"example.pcom\")." +"hostname of the GnuDIP server (like \"example.com\")." msgstr "" -#: plinth/modules/dynamicdns/dynamicdns.py:83 -msgid "The public domain name you want use to reach your box." +#: plinth/modules/dynamicdns/dynamicdns.py:84 +#, python-brace-format +msgid "The public domain name you want use to reach your {box_name}." msgstr "" -#: plinth/modules/dynamicdns/dynamicdns.py:85 +#: plinth/modules/dynamicdns/dynamicdns.py:87 msgid "Use this option if your provider uses self signed certificates." msgstr "" -#: plinth/modules/dynamicdns/dynamicdns.py:88 +#: plinth/modules/dynamicdns/dynamicdns.py:90 msgid "" "If this option is selected, your username and password will be used for HTTP " "basic authentication." msgstr "" -#: plinth/modules/dynamicdns/dynamicdns.py:91 +#: plinth/modules/dynamicdns/dynamicdns.py:93 msgid "" "Leave this field empty if you want to keep your previous configured password." msgstr "" -#: plinth/modules/dynamicdns/dynamicdns.py:94 +#: plinth/modules/dynamicdns/dynamicdns.py:96 +#, python-brace-format msgid "" -"Optional Value. If your FreedomBox is not connected directly to the Internet " +"Optional Value. If your {box_name} is not connected directly to the Internet " "(i.e. connected to a NAT router) this URL is used to figure out the real " -"Internet IP. The URL should simply return the IP wherethe client comes from. " -"Example: http://myip.datasystems24.de" +"Internet IP. The URL should simply return the IP where the client comes from " +"(example: http://myip.datasystems24.de)." msgstr "" -#: plinth/modules/dynamicdns/dynamicdns.py:101 +#: plinth/modules/dynamicdns/dynamicdns.py:104 msgid "" "You should have been requested to select a username when you created the " "account." msgstr "" -#: plinth/modules/dynamicdns/dynamicdns.py:112 +#: plinth/modules/dynamicdns/dynamicdns.py:115 msgid "Enable Dynamic DNS" msgstr "" -#: plinth/modules/dynamicdns/dynamicdns.py:115 +#: plinth/modules/dynamicdns/dynamicdns.py:118 msgid "Service type" msgstr "" -#: plinth/modules/dynamicdns/dynamicdns.py:120 +#: plinth/modules/dynamicdns/dynamicdns.py:123 msgid "GnudIP Server Address" msgstr "" -#: plinth/modules/dynamicdns/dynamicdns.py:125 +#: plinth/modules/dynamicdns/dynamicdns.py:128 msgid "Invalid server name" msgstr "" -#: plinth/modules/dynamicdns/dynamicdns.py:128 +#: plinth/modules/dynamicdns/dynamicdns.py:131 msgid "Update URL" msgstr "" -#: plinth/modules/dynamicdns/dynamicdns.py:132 -msgid "accept all SSL certificates" +#: plinth/modules/dynamicdns/dynamicdns.py:135 +msgid "Accept all SSL certificates" msgstr "" -#: plinth/modules/dynamicdns/dynamicdns.py:136 -msgid "use HTTP basic authentication" +#: plinth/modules/dynamicdns/dynamicdns.py:139 +msgid "Use HTTP basic authentication" msgstr "" -#: plinth/modules/dynamicdns/dynamicdns.py:148 -#: plinth/modules/networks/forms.py:118 plinth/modules/transmission/forms.py:39 +#: plinth/modules/dynamicdns/dynamicdns.py:151 +#: plinth/modules/networks/forms.py:146 plinth/modules/transmission/forms.py:39 msgid "Username" msgstr "" -#: plinth/modules/dynamicdns/dynamicdns.py:151 -#: plinth/modules/networks/forms.py:119 plinth/modules/transmission/forms.py:43 +#: plinth/modules/dynamicdns/dynamicdns.py:154 +#: plinth/modules/networks/forms.py:147 plinth/modules/transmission/forms.py:43 msgid "Password" msgstr "" -#: plinth/modules/dynamicdns/dynamicdns.py:154 -msgid "show password" +#: plinth/modules/dynamicdns/dynamicdns.py:157 +#: plinth/modules/networks/forms.py:149 +msgid "Show password" msgstr "" -#: plinth/modules/dynamicdns/dynamicdns.py:158 +#: plinth/modules/dynamicdns/dynamicdns.py:161 msgid "IP check URL" msgstr "" -#: plinth/modules/dynamicdns/dynamicdns.py:184 +#: plinth/modules/dynamicdns/dynamicdns.py:187 msgid "Please provide update URL or a GnuDIP Server" msgstr "" -#: plinth/modules/dynamicdns/dynamicdns.py:187 +#: plinth/modules/dynamicdns/dynamicdns.py:190 msgid "Please provide GnuDIP username" msgstr "" -#: plinth/modules/dynamicdns/dynamicdns.py:190 +#: plinth/modules/dynamicdns/dynamicdns.py:193 msgid "Please provide GnuDIP domain" msgstr "" -#: plinth/modules/dynamicdns/dynamicdns.py:195 +#: plinth/modules/dynamicdns/dynamicdns.py:198 msgid "Please provide a password" msgstr "" -#: plinth/modules/dynamicdns/dynamicdns.py:214 +#: plinth/modules/dynamicdns/dynamicdns.py:217 msgid "Configure Dynamic DNS" msgstr "" -#: plinth/modules/dynamicdns/dynamicdns.py:236 +#: plinth/modules/dynamicdns/dynamicdns.py:239 msgid "Status of Dynamic DNS" msgstr "" #: plinth/modules/dynamicdns/templates/dynamicdns.html:25 -msgid "DynamicDNS client" +msgid "Dynamic DNS Client" msgstr "" #: plinth/modules/dynamicdns/templates/dynamicdns.html:28 +#, python-format msgid "" "If your internet provider changes your IP address periodic (i.e. every 24h) " "it may be hard for others to find you in the WEB. And for this reason nobody " -"may find the services which are provided by FreedomBox (like your ownCloud)." +"may find the services which are provided by %(box_name)s, such as ownCloud." msgstr "" #: plinth/modules/dynamicdns/templates/dynamicdns.html:37 @@ -562,7 +578,7 @@ "allows you to push your current public IP address to an gnudip server. Afterwards " "the Server will assign your DNS name with the new IP and if someone from the " -"internet asks for your DNS name he will get your current IP answered." +"Internet asks for your DNS name he will get your current IP answered." msgstr "" #: plinth/modules/dynamicdns/templates/dynamicdns.html:50 @@ -575,10 +591,10 @@ msgstr "" #: plinth/modules/dynamicdns/templates/dynamicdns.html:61 +#, python-format msgid "" -"If your freedombox is connected behind some NAT router, don't forget to add " -"portforwarding (i.e. forward some standard ports like 80 and 443) to your " -"freedombox device." +"If your %(box_name)s is connected behind some NAT router, don't forget to " +"add port forwarding (i.e. forward some standard ports like 80 and 443)." msgstr "" #: plinth/modules/dynamicdns/templates/dynamicdns_configure.html:30 @@ -598,16 +614,16 @@ msgstr "" #: plinth/modules/dynamicdns/templates/dynamicdns_status.html:35 -msgid "Direct connection to the internet." +msgid "Direct connection to the Internet." msgstr "" #: plinth/modules/dynamicdns/templates/dynamicdns_status.html:37 #, python-format msgid "" -"Behind NAT, this means that dynamic DNS service will poll the \"IP check URL" -"\" for changes (we need the \"IP check URL\" for this reason - otherwise we " -"will not detect IP changes). It may take up to %(timer)s minutes until we " -"update your DNS entry in case of WAN IP change." +"Behind NAT. This means that Dynamic DNS service will poll the \"IP check URL" +"\" for changes (the \"IP check URL\" entry is needed for this - otherwise IP " +"changes will not be detected). In case the WAN IP changes, it may take up " +"to %(timer)s minutes until your DNS entry is updated." msgstr "" #: plinth/modules/dynamicdns/templates/dynamicdns_status.html:48 @@ -623,13 +639,13 @@ #: plinth/modules/firewall/templates/firewall.html:28 #, python-format msgid "" -"Firewall is a network security system that controls the incoming and " -"outgoing network traffic on your %(box_name)s. Keeping a firewall enabled " -"and properly configured reduces risk of security threat from the Internet." +"Firewall is a security system that controls the incoming and outgoing " +"network traffic on your %(box_name)s. Keeping a firewall enabled and " +"properly configured reduces risk of security threat from the Internet." msgstr "" #: plinth/modules/firewall/templates/firewall.html:36 -msgid "The following is the current status:" +msgid "Current status:" msgstr "" #: plinth/modules/firewall/templates/firewall.html:41 @@ -646,11 +662,13 @@ msgstr "" #: plinth/modules/firewall/templates/firewall.html:67 +#: plinth/modules/letsencrypt/templates/letsencrypt.html:91 #: plinth/modules/names/templates/names.html:51 msgid "Enabled" msgstr "" #: plinth/modules/firewall/templates/firewall.html:70 +#: plinth/modules/letsencrypt/templates/letsencrypt.html:93 #: plinth/modules/names/templates/names.html:53 msgid "Disabled" msgstr "" @@ -674,8 +692,8 @@ #: plinth/modules/firewall/templates/firewall.html:103 msgid "" "The operation of the firewall is automatic. When you enable a service it is " -"automatically permitted in the firewall and you disable a service is " -"automatically disabled in the firewall." +"also permitted in the firewall and when you disable a service it is also " +"disabled in the firewall." msgstr "" #: plinth/modules/first_boot/forms.py:48 plinth/modules/users/forms.py:70 @@ -690,31 +708,35 @@ msgid "User account created, you are now logged in" msgstr "" -#: plinth/modules/first_boot/templates/firstboot_state0.html:50 -msgid "Congratulations! Your FreedomBox is up and running!" +#: plinth/modules/first_boot/templates/firstboot_navbar.html:23 +#: plinth/modules/help/templates/help_index.html:25 +#: plinth/templates/base.html:102 +msgid "Help" msgstr "" -#: plinth/modules/first_boot/templates/firstboot_state0.html:54 -msgid "" -"Please provide the following basic information to complete the setup process." +#: plinth/modules/first_boot/templates/firstboot_state0.html:45 +msgid "Start Setup" msgstr "" -#: plinth/modules/first_boot/templates/firstboot_state0.html:62 -msgid "Next" +#: plinth/modules/first_boot/templates/firstboot_state0.html:49 +#, python-format +msgid "" +"To complete the setup of your %(box_name)s, please provide some basic " +"information." msgstr "" -#: plinth/modules/first_boot/templates/firstboot_state1.html:39 +#: plinth/modules/first_boot/templates/firstboot_state1.html:41 msgid "Administrator Account" msgstr "" -#: plinth/modules/first_boot/templates/firstboot_state1.html:42 +#: plinth/modules/first_boot/templates/firstboot_state1.html:44 msgid "" "Choose a username and password to access this web interface. The password " "can be changed later. This user will be granted administrative privileges. " "Other users can be added later." msgstr "" -#: plinth/modules/first_boot/templates/firstboot_state1.html:55 +#: plinth/modules/first_boot/templates/firstboot_state1.html:57 msgid "Box it up!" msgstr "" @@ -723,28 +745,29 @@ msgstr "" #: plinth/modules/first_boot/templates/firstboot_state10.html:32 +#, python-format msgid "" -"FreedomBox setup is now complete. However, you should check the network " -"setup and modify it if necessary. Do not forget to change the default Wi-Fi " -"passwords." +"%(box_name)s setup is now complete. To make your %(box_name)s functional, " +"you need some applications. They will be installed the first time you " +"access them." msgstr "" -#: plinth/modules/first_boot/templates/firstboot_state10.html:40 -msgid "" -"To make your FreedomBox functional, you need some applications. " -"Applications will be installed the first time you access them." +#: plinth/modules/first_boot/templates/firstboot_state10.html:41 +msgid "Go to Apps" msgstr "" -#: plinth/modules/first_boot/templates/firstboot_state10.html:47 -msgid "Network Configuration" +#: plinth/modules/first_boot/templates/firstboot_state10.html:44 +msgid "Current Network Configuration" msgstr "" -#: plinth/modules/first_boot/templates/firstboot_state10.html:54 -msgid "Go to Networks" +#: plinth/modules/first_boot/templates/firstboot_state10.html:47 +msgid "" +"You should check the network setup and modify it if necessary. Do not forget " +"to change the default Wi-Fi passwords!" msgstr "" -#: plinth/modules/first_boot/templates/firstboot_state10.html:59 -msgid "Go to Apps" +#: plinth/modules/first_boot/templates/firstboot_state10.html:57 +msgid "Go to Networks" msgstr "" #: plinth/modules/first_boot/views.py:60 @@ -759,8 +782,8 @@ msgid "Where to Get Help" msgstr "" -#: plinth/modules/help/help.py:38 plinth/modules/help/help.py:72 -msgid "FreedomBox Manual" +#: plinth/modules/help/help.py:38 +msgid "Manual" msgstr "" #: plinth/modules/help/help.py:48 @@ -772,15 +795,21 @@ msgid "About {box_name}" msgstr "" +#: plinth/modules/help/help.py:73 +#, python-brace-format +msgid "{box_name} Manual" +msgstr "" + #: plinth/modules/help/templates/help_about.html:30 +#, python-format msgid "" -"FreedomBox is a community project to develop, design and promote personal " +"%(box_name)s is a community project to develop, design and promote personal " "servers running free software for private, personal communications. It is a " "networking appliance designed to allow interfacing with the rest of the " "Internet under conditions of protected privacy and data security. It hosts " "applications such as blog, wiki, website, social network, email, web proxy " -"and a Tor relay on a device that can replace your Wi-Fi router so that your " -"data stays with you." +"and a Tor relay, on a device that can replace your Wi-Fi router, so that " +"your data stays with you." msgstr "" #: plinth/modules/help/templates/help_about.html:43 @@ -794,68 +823,76 @@ msgstr "" #: plinth/modules/help/templates/help_about.html:56 +#, python-format msgid "" "There are a number of projects working to realize a future of distributed " -"services; FreedomBox aims to bring them all together in a convenient package." +"services; %(box_name)s aims to bring them all together in a convenient " +"package." msgstr "" #: plinth/modules/help/templates/help_about.html:64 +#, python-format msgid "" -"For more information about the FreedomBox project, see the FreedomBox Wiki." +"For more information about the %(box_name)s project, see the %(box_name)s Wiki." msgstr "" -#: plinth/modules/help/templates/help_about.html:72 +#: plinth/modules/help/templates/help_about.html:73 msgid "Learn more »" msgstr "" -#: plinth/modules/help/templates/help_about.html:75 +#: plinth/modules/help/templates/help_about.html:76 #, python-format msgid "You are running Plinth version %(version)s." msgstr "" -#: plinth/modules/help/templates/help_index.html:25 -#: plinth/templates/base.html:98 -msgid "Help" +#: plinth/modules/help/templates/help_base.html:36 +#, python-format +msgid "%(box_name)s Setup" msgstr "" #: plinth/modules/help/templates/help_index.html:29 #, python-format msgid "" -"The FreedomBox Manual is the best place to " +"The %(box_name)s Manual is the best place to " "start for information regarding %(box_name)s." msgstr "" #: plinth/modules/help/templates/help_index.html:36 +#, python-format msgid "" -" FreedomBox " -"project wiki contains further information." +" " +"%(box_name)s project wiki contains further information." msgstr "" #: plinth/modules/help/templates/help_index.html:43 +#, python-format msgid "" -"To seek help from FreedomBox community, queries may be posted on the " -"mailing list. The list archives also contain information about problems " -"faced by other users and possible solutions." +"To seek help from %(box_name)s community, queries may be posted on the mailing list. The list archives also contain information about " +"problems faced by other users and possible solutions." msgstr "" #: plinth/modules/help/templates/help_index.html:53 +#, python-format msgid "" -"Many FreedomBox contributors and users are also available on the #freedombox " -"channel of the irc.oftc.net IRC network." +"Many %(box_name)s contributors and users are also available on the irc.oftc." +"net IRC network. Join and request help on the #freedombox " +"channel using the IRC web interface." msgstr "" #: plinth/modules/ikiwiki/__init__.py:38 -msgid "Wiki & Blog (Ikiwiki)" +msgid "Wiki and Blog (ikiwiki)" msgstr "" #: plinth/modules/ikiwiki/__init__.py:43 -msgid "Ikiwiki wikis and blogs" +msgid "ikiwiki wikis and blogs" msgstr "" #: plinth/modules/ikiwiki/forms.py:29 -msgid "Enable Ikiwiki" +msgid "Enable ikiwiki" msgstr "" #: plinth/modules/ikiwiki/forms.py:36 @@ -884,21 +921,22 @@ #: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:27 #, python-format -msgid "Delete Wiki/Blog %(name)s" +msgid "Delete Wiki or Blog %(name)s" msgstr "" #: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:33 msgid "" "This action will remove all the posts, pages and comments including revision " -"history. Delete this wiki/blog permanently?" +"history. Delete this wiki or blog permanently?" msgstr "" -#: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:43 +#: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:44 #, python-format msgid "Delete %(name)s" msgstr "" -#: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:46 +#: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:47 +#: plinth/modules/monkeysphere/templates/monkeysphere.html:60 #: plinth/modules/networks/templates/connections_delete.html:41 #: plinth/modules/users/templates/users_delete.html:41 msgid "Cancel" @@ -931,7 +969,7 @@ msgstr "" #: plinth/modules/ikiwiki/views.py:73 -msgid "Wiki & Blog" +msgid "Wiki and Blog" msgstr "" #: plinth/modules/ikiwiki/views.py:106 @@ -939,7 +977,7 @@ msgstr "" #: plinth/modules/ikiwiki/views.py:132 -msgid "Create Wiki/Blog" +msgid "Create Wiki or Blog" msgstr "" #: plinth/modules/ikiwiki/views.py:145 @@ -973,7 +1011,144 @@ msgstr "" #: plinth/modules/ikiwiki/views.py:182 -msgid "Delete Wiki/Blog" +msgid "Delete Wiki or Blog" +msgstr "" + +#: plinth/modules/letsencrypt/__init__.py:43 +#: plinth/modules/letsencrypt/templates/letsencrypt.html:38 +#: plinth/modules/letsencrypt/views.py:45 +msgid "Certificates (Let's Encrypt)" +msgstr "" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:41 +#, python-format +msgid "" +"A digital certficate allows users of a web service to verify the identity of " +"the service and to securely communicate with it. %(box_name)s can " +"automatically obtain and setup digital certificates for each available " +"domain. It does so by proving itself to be the owner of a domain to Let's " +"Encrypt, a certficate authority (CA)." +msgstr "" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:52 +msgid "" +"Let's Encrypt is a free, automated, and open certificate authority, run for " +"the public’s benefit by the Internet Security Research Group (ISRG). Please " +"read and agree with the Let's Encrypt Subscriber Agreement before using this service." +msgstr "" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:66 +#: plinth/modules/monkeysphere/templates/monkeysphere.html:70 +msgid "Domain" +msgstr "" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:67 +msgid "Certificate Status" +msgstr "" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:68 +msgid "Website Security" +msgstr "" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:69 +#: plinth/modules/monkeysphere/templates/monkeysphere.html:72 +msgid "Actions" +msgstr "" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:79 +#, python-format +msgid "Expires on %(expiry_date)s" +msgstr "" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:85 +msgid "No certficate" +msgstr "" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:102 +msgid "Revoke" +msgstr "" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:108 +msgid "Re-obtain" +msgstr "" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:115 +msgid "Obtain" +msgstr "" + +#: plinth/modules/letsencrypt/views.py:55 +#, python-brace-format +msgid "Certificate successfully revoked for domain {domain}" +msgstr "" + +#: plinth/modules/letsencrypt/views.py:60 +#, python-brace-format +msgid "Failed to revoke certificate for domain {domain}: {error}" +msgstr "" + +#: plinth/modules/letsencrypt/views.py:72 +#, python-brace-format +msgid "Certificate successfully obtained for domain {domain}" +msgstr "" + +#: plinth/modules/letsencrypt/views.py:77 +#, python-brace-format +msgid "Failed to obtain certificate for domain {domain}: {error}" +msgstr "" + +#: plinth/modules/monkeysphere/__init__.py:32 +#: plinth/modules/monkeysphere/templates/monkeysphere.html:35 +#: plinth/modules/monkeysphere/views.py:44 +msgid "Monkeysphere" +msgstr "" + +#: plinth/modules/monkeysphere/templates/monkeysphere.html:38 +msgid "" +"With Monkeysphere, a PGP key can be generated for each configured domain " +"serving SSH. The PGP public key can then be uploaded to the PGP keyservers. " +"Users connecting to this machine through SSH can verify that they are " +"connecting to the correct host. For users to trust the key, at least one " +"person (usually the machine owner) must sign the key using the regular PGP " +"key signing process. See the Monkeysphere SSH documentation for more details." +msgstr "" + +#: plinth/modules/monkeysphere/templates/monkeysphere.html:53 +msgid "Publishing key to keyserver..." +msgstr "" + +#: plinth/modules/monkeysphere/templates/monkeysphere.html:71 +msgid "GPG Fingerprint" +msgstr "" + +#: plinth/modules/monkeysphere/templates/monkeysphere.html:83 +#: plinth/modules/names/views.py:45 +msgid "Not Available" +msgstr "" + +#: plinth/modules/monkeysphere/templates/monkeysphere.html:93 +msgid "Generate PGP Key" +msgstr "" + +#: plinth/modules/monkeysphere/templates/monkeysphere.html:101 +msgid "Publish Key" +msgstr "" + +#: plinth/modules/monkeysphere/views.py:58 +msgid "Generated PGP key." +msgstr "" + +#: plinth/modules/monkeysphere/views.py:83 +msgid "Cancelled key publishing." +msgstr "" + +#: plinth/modules/monkeysphere/views.py:120 +msgid "Published key to keyserver." +msgstr "" + +#: plinth/modules/monkeysphere/views.py:122 +msgid "Error occurred while publishing key." msgstr "" #: plinth/modules/mumble/__init__.py:38 @@ -1011,170 +1186,151 @@ msgid "Mumble server is not running" msgstr "" -#: plinth/modules/names/__init__.py:30 +#: plinth/modules/names/__init__.py:29 msgid "HTTP" msgstr "" -#: plinth/modules/names/__init__.py:31 +#: plinth/modules/names/__init__.py:30 msgid "HTTPS" msgstr "" -#: plinth/modules/names/__init__.py:32 +#: plinth/modules/names/__init__.py:31 msgid "SSH" msgstr "" -#: plinth/modules/names/__init__.py:46 plinth/modules/names/views.py:34 +#: plinth/modules/names/__init__.py:45 plinth/modules/names/views.py:34 msgid "Name Services" msgstr "" -#: plinth/modules/names/__init__.py:107 -msgid "Not Available" -msgstr "" - #: plinth/modules/networks/__init__.py:108 #, python-brace-format msgid "Using DNSSEC on IPv{kind}" msgstr "" #: plinth/modules/networks/forms.py:30 -msgid "-- select --" -msgstr "" - -#: plinth/modules/networks/forms.py:42 msgid "Connection Type" msgstr "" -#: plinth/modules/networks/forms.py:49 plinth/modules/networks/forms.py:106 -#: plinth/modules/networks/forms.py:133 +#: plinth/modules/networks/forms.py:37 msgid "Connection Name" msgstr "" -#: plinth/modules/networks/forms.py:51 plinth/modules/networks/forms.py:108 -#: plinth/modules/networks/forms.py:135 +#: plinth/modules/networks/forms.py:39 msgid "Physical Interface" msgstr "" -#: plinth/modules/networks/forms.py:53 plinth/modules/networks/forms.py:110 -#: plinth/modules/networks/forms.py:137 +#: plinth/modules/networks/forms.py:41 msgid "The network device that this connection should be bound to." msgstr "" -#: plinth/modules/networks/forms.py:56 plinth/modules/networks/forms.py:113 -#: plinth/modules/networks/forms.py:140 +#: plinth/modules/networks/forms.py:44 msgid "Firewall Zone" msgstr "" -#: plinth/modules/networks/forms.py:57 plinth/modules/networks/forms.py:114 -#: plinth/modules/networks/forms.py:141 +#: plinth/modules/networks/forms.py:45 msgid "" "The firewall zone will control which services are available over this " "interfaces. Select Internal only for trusted networks." msgstr "" -#: plinth/modules/networks/forms.py:61 plinth/modules/networks/forms.py:162 +#: plinth/modules/networks/forms.py:49 msgid "IPv4 Addressing Method" msgstr "" -#: plinth/modules/networks/forms.py:62 +#: plinth/modules/networks/forms.py:50 msgid "" "\"Shared\" method will start a DHCP server and \"Automatic\" method will " "acquire configuration from a DHCP server." msgstr "" -#: plinth/modules/networks/forms.py:68 plinth/modules/networks/forms.py:170 +#: plinth/modules/networks/forms.py:56 msgid "Address" msgstr "" -#: plinth/modules/networks/forms.py:72 plinth/modules/networks/forms.py:174 +#: plinth/modules/networks/forms.py:60 msgid "Netmask" msgstr "" -#: plinth/modules/networks/forms.py:73 plinth/modules/networks/forms.py:175 +#: plinth/modules/networks/forms.py:61 msgid "" "Optional value. If left blank, a default netmask based on the address will " "be used." msgstr "" -#: plinth/modules/networks/forms.py:78 plinth/modules/networks/forms.py:180 +#: plinth/modules/networks/forms.py:66 #: plinth/modules/networks/templates/connection_show.html:202 #: plinth/modules/networks/templates/connection_show.html:241 msgid "Gateway" msgstr "" -#: plinth/modules/networks/forms.py:79 plinth/modules/networks/forms.py:181 +#: plinth/modules/networks/forms.py:67 msgid "Optional value." msgstr "" -#: plinth/modules/networks/forms.py:83 plinth/modules/networks/forms.py:185 +#: plinth/modules/networks/forms.py:71 msgid "DNS Server" msgstr "" -#: plinth/modules/networks/forms.py:84 plinth/modules/networks/forms.py:186 +#: plinth/modules/networks/forms.py:72 msgid "" "Optional value. If this value is given and IPv4 addressing method is " "\"Automatic\", the DNS Servers provided by a DHCP server will be ignored." msgstr "" -#: plinth/modules/networks/forms.py:90 plinth/modules/networks/forms.py:192 +#: plinth/modules/networks/forms.py:78 msgid "Second DNS Server" msgstr "" -#: plinth/modules/networks/forms.py:91 plinth/modules/networks/forms.py:193 +#: plinth/modules/networks/forms.py:79 msgid "" "Optional value. If this value is given and IPv4 Addressing Method is " "\"Automatic\", the DNS Servers provided by a DHCP server will be ignored." msgstr "" -#: plinth/modules/networks/forms.py:121 -msgid "Show password" +#: plinth/modules/networks/forms.py:89 +msgid "-- select --" msgstr "" -#: plinth/modules/networks/forms.py:145 +#: plinth/modules/networks/forms.py:175 #: plinth/modules/networks/templates/connection_show.html:144 msgid "SSID" msgstr "" -#: plinth/modules/networks/forms.py:146 +#: plinth/modules/networks/forms.py:176 msgid "The visible name of the network." msgstr "" -#: plinth/modules/networks/forms.py:148 +#: plinth/modules/networks/forms.py:178 #: plinth/modules/networks/templates/connection_show.html:157 msgid "Mode" msgstr "" -#: plinth/modules/networks/forms.py:153 +#: plinth/modules/networks/forms.py:183 msgid "Authentication Mode" msgstr "" -#: plinth/modules/networks/forms.py:154 +#: plinth/modules/networks/forms.py:184 msgid "" "Select WPA if the wireless network is secured and requires clients to have " "the password to connect." msgstr "" -#: plinth/modules/networks/forms.py:158 +#: plinth/modules/networks/forms.py:188 msgid "Passphrase" msgstr "" -#: plinth/modules/networks/forms.py:166 -msgid "" -"Select Automatic (DHCP) if you are connecting to an existing wireless " -"network. Shared mode is useful when running an Access Point." -msgstr "" - #: plinth/modules/networks/networks.py:36 #: plinth/modules/networks/networks.py:56 msgid "Network Connections" msgstr "" #: plinth/modules/networks/networks.py:38 -#: plinth/modules/networks/networks.py:273 +#: plinth/modules/networks/networks.py:242 msgid "Nearby Wi-Fi Networks" msgstr "" #: plinth/modules/networks/networks.py:40 -#: plinth/modules/networks/networks.py:295 +#: plinth/modules/networks/networks.py:264 msgid "Add Connection" msgstr "" @@ -1198,58 +1354,58 @@ msgid "This type of connection is not yet understood." msgstr "" -#: plinth/modules/networks/networks.py:170 -#: plinth/modules/networks/networks.py:229 +#: plinth/modules/networks/networks.py:139 +#: plinth/modules/networks/networks.py:198 #: plinth/modules/networks/templates/connections_edit.html:34 msgid "Edit Connection" msgstr "" -#: plinth/modules/networks/networks.py:240 +#: plinth/modules/networks/networks.py:209 #, python-brace-format msgid "Activated connection {name}." msgstr "" -#: plinth/modules/networks/networks.py:243 +#: plinth/modules/networks/networks.py:212 msgid "Failed to activate connection: Connection not found." msgstr "" -#: plinth/modules/networks/networks.py:247 +#: plinth/modules/networks/networks.py:216 #, python-brace-format msgid "Failed to activate connection {name}: No suitable device is available." msgstr "" -#: plinth/modules/networks/networks.py:260 +#: plinth/modules/networks/networks.py:229 #, python-brace-format msgid "Deactivated connection {name}." msgstr "" -#: plinth/modules/networks/networks.py:263 +#: plinth/modules/networks/networks.py:232 msgid "Failed to de-activate connection: Connection not found." msgstr "" -#: plinth/modules/networks/networks.py:325 +#: plinth/modules/networks/networks.py:282 msgid "Adding New Ethernet Connection" msgstr "" -#: plinth/modules/networks/networks.py:350 +#: plinth/modules/networks/networks.py:300 msgid "Adding New PPPoE Connection" msgstr "" -#: plinth/modules/networks/networks.py:399 +#: plinth/modules/networks/networks.py:332 msgid "Adding New Wi-Fi Connection" msgstr "" -#: plinth/modules/networks/networks.py:413 +#: plinth/modules/networks/networks.py:346 #, python-brace-format msgid "Connection {name} deleted." msgstr "" -#: plinth/modules/networks/networks.py:416 -#: plinth/modules/networks/networks.py:425 +#: plinth/modules/networks/networks.py:349 +#: plinth/modules/networks/networks.py:358 msgid "Failed to delete connection: Connection not found." msgstr "" -#: plinth/modules/networks/networks.py:430 +#: plinth/modules/networks/networks.py:363 #: plinth/modules/networks/templates/connections_delete.html:26 msgid "Delete Connection" msgstr "" @@ -1259,7 +1415,7 @@ msgstr "" #: plinth/modules/networks/templates/connection_show.html:43 -#: plinth/templates/base.html:119 +#: plinth/templates/base.html:123 msgid "Edit" msgstr "" @@ -1406,23 +1562,24 @@ #: plinth/modules/networks/templates/connection_show.html:280 msgid "" -"This interface should be connected to local network/machine. If you connect " -"this interface to a public network, services meant to be available only " -"internally will become available externally. This is a security risk." +"This interface should be connected to a local network/machine. If you " +"connect this interface to a public network, services meant to be available " +"only internally will become available externally. This is a security risk." msgstr "" #: plinth/modules/networks/templates/connection_show.html:300 msgid "" -"This interface should receive your Internet connection. If you connect it " -"your a local network/machine, many services meant to available only " -"internally will not be available." +"This interface should receive your Internet connection. If you connect it to " +"a local network/machine, many services meant to available only internally " +"will not be available." msgstr "" #: plinth/modules/networks/templates/connection_show.html:319 +#, python-format msgid "" -"This interface is not maintained by FreedomBox. Its security status is " -"unknown to FreedomBox. Many FreedomBox services may not be available on " -"this interface. It is recommended that you deactivate/delete this " +"This interface is not maintained by %(box_name)s. Its security status is " +"unknown to %(box_name)s. Many %(box_name)s services may not be available on " +"this interface. It is recommended that you deactivate or delete this " "connection and re-configure it." msgstr "" @@ -1514,7 +1671,7 @@ #, python-format msgid "" "Virtual Private Network (VPN) is a technique for securely connecting two " -"machines in order to access resources of a private network. While you are " +"devices in order to access resources of a private network. While you are " "away from home, you can connect to your %(box_name)s in order to join your " "home network and access private/internal services provided by %(box_name)s. " "You can also access the rest of the Internet via %(box_name)s for added " @@ -1531,7 +1688,7 @@ "To connect to %(box_name)s's VPN, you need to download a profile and feed it " "to an OpenVPN client on your mobile or desktop machine. OpenVPN Clients are " "available for most platforms. See documentation on recommended clients and instructions on how to " "configure them." msgstr "" @@ -2009,6 +2166,54 @@ msgid "Quassel core service is not running" msgstr "" +#: plinth/modules/repro/__init__.py:36 +#: plinth/modules/repro/templates/repro.html:26 +#: plinth/modules/repro/views.py:55 +msgid "SIP Server (repro)" +msgstr "" + +#: plinth/modules/repro/__init__.py:41 +msgid "repro SIP Server" +msgstr "" + +#: plinth/modules/repro/forms.py:29 +msgid "Enable repro service" +msgstr "" + +#: plinth/modules/repro/templates/repro.html:29 +msgid "" +"repro provides various SIP services that a SIP softphone can utilize to " +"provide audio and video calls as well as presence and instant messaging. " +"repro provides a server and SIP user accounts that clients can use to let " +"their presence known. It also acts as a proxy to federate SIP " +"communications to other servers on the Internet similar to email." +msgstr "" + +#: plinth/modules/repro/templates/repro.html:39 +msgid "" +"To make SIP calls, a client application is needed. Available clients include " +"Jitsi (for computers) and CSipSimple (for Android phones)." +msgstr "" + +#: plinth/modules/repro/templates/repro.html:48 +msgid "" +"Note: Before using repro, domains and users will need to " +"be configured using the web-based " +"configuration panel. Users in the admin group will be able to " +"log in to the repro configuration panel. After setting the domain, it is " +"required to restart the repro service. Disable the service and re-enable it." +msgstr "" + +#: plinth/modules/repro/templates/repro.html:63 +msgid "repro service is running" +msgstr "" + +#: plinth/modules/repro/templates/repro.html:66 +msgid "repro service is not running" +msgstr "" + #: plinth/modules/restore/__init__.py:36 #: plinth/modules/restore/templates/restore_index.html:26 #: plinth/modules/restore/views.py:46 @@ -2029,8 +2234,8 @@ "reStore is a server for unhosted web " "applications. The idea is to uncouple web applications from data. No " "matter where a web application is served from, the data can be stored on an " -"unhosted storage server of user's choice. With reStore, your " -"%(cfg.box_name)s becomes your unhosted storage server." +"unhosted storage server of user's choice. With reStore, your %(box_name)s " +"becomes your unhosted storage server." msgstr "" #: plinth/modules/restore/templates/restore_index.html:40 @@ -2107,7 +2312,7 @@ #: plinth/modules/system/system.py:33 #: plinth/modules/system/templates/system.html:25 -#: plinth/templates/base.html:105 +#: plinth/templates/base.html:109 msgid "System Configuration" msgstr "" @@ -2122,33 +2327,71 @@ "The options affect the %(box_name)s at its most general level, so be careful!" msgstr "" -#: plinth/modules/tor/__init__.py:50 -msgid "Tor relay port available" +#: plinth/modules/tor/__init__.py:48 plinth/modules/tor/templates/tor.html:35 +msgid "Anonymity Network (Tor)" +msgstr "" + +#: plinth/modules/tor/__init__.py:53 +msgid "Tor Anonymity Network" msgstr "" #: plinth/modules/tor/__init__.py:58 +msgid "Tor Bridge Relay" +msgstr "" + +#: plinth/modules/tor/__init__.py:76 plinth/modules/tor/views.py:144 +msgid "Tor Hidden Service" +msgstr "" + +#: plinth/modules/tor/__init__.py:222 +msgid "Tor relay port available" +msgstr "" + +#: plinth/modules/tor/__init__.py:230 msgid "Obfs3 transport registered" msgstr "" -#: plinth/modules/tor/__init__.py:64 +#: plinth/modules/tor/__init__.py:236 msgid "Obfs4 transport registered" msgstr "" -#: plinth/modules/tor/__init__.py:101 +#: plinth/modules/tor/__init__.py:273 #, python-brace-format msgid "Access URL {url} on tcp{kind} via Tor" msgstr "" -#: plinth/modules/tor/__init__.py:112 +#: plinth/modules/tor/__init__.py:284 #, python-brace-format msgid "Confirm Tor usage at {url} on tcp{kind}" msgstr "" -#: plinth/modules/tor/templates/tor.html:26 plinth/modules/tor/tor.py:66 -msgid "Anonymity Network (Tor)" +#: plinth/modules/tor/forms.py:32 +msgid "Enable Tor" +msgstr "" + +#: plinth/modules/tor/forms.py:35 +msgid "Enable Tor Hidden Service" +msgstr "" + +#: plinth/modules/tor/forms.py:38 +#, python-brace-format +msgid "" +"A hidden service will allow {box_name} to provide selected services (such as " +"ownCloud or chat) without revealing its location." +msgstr "" + +#: plinth/modules/tor/forms.py:42 +msgid "Download software packages over Tor" +msgstr "" + +#: plinth/modules/tor/forms.py:44 +msgid "" +"When enabled, software will be downloaded over the Tor network for " +"installations and upgrades. This adds a degree of privacy and security " +"during software downloads." msgstr "" -#: plinth/modules/tor/templates/tor.html:29 +#: plinth/modules/tor/templates/tor.html:38 msgid "" "Tor is an anonymous communication system. You can learn more about it from " "the Tor Project website. For " @@ -2157,28 +2400,32 @@ "Tor Browser." msgstr "" -#: plinth/modules/tor/templates/tor.html:44 +#: plinth/modules/tor/templates/tor.html:54 +msgid "Tor configuration is being updated" +msgstr "" + +#: plinth/modules/tor/templates/tor.html:62 msgid "Tor is running" msgstr "" -#: plinth/modules/tor/templates/tor.html:47 +#: plinth/modules/tor/templates/tor.html:65 msgid "Tor is not running" msgstr "" -#: plinth/modules/tor/templates/tor.html:59 +#: plinth/modules/tor/templates/tor.html:77 msgid "Hidden Service" msgstr "" -#: plinth/modules/tor/templates/tor.html:60 -#: plinth/modules/tor/templates/tor.html:102 +#: plinth/modules/tor/templates/tor.html:78 +#: plinth/modules/tor/templates/tor.html:120 msgid "Port" msgstr "" -#: plinth/modules/tor/templates/tor.html:85 +#: plinth/modules/tor/templates/tor.html:103 msgid "Bridge" msgstr "" -#: plinth/modules/tor/templates/tor.html:88 +#: plinth/modules/tor/templates/tor.html:106 #, python-format msgid "" "Your %(box_name)s is configured as a Tor bridge with obfsproxy, so it can " @@ -2187,84 +2434,39 @@ "forwarded, if necessary:" msgstr "" -#: plinth/modules/tor/templates/tor.html:101 +#: plinth/modules/tor/templates/tor.html:119 msgid "Service" msgstr "" -#: plinth/modules/tor/templates/tor.html:117 +#: plinth/modules/tor/templates/tor.html:135 msgid "SOCKS" msgstr "" -#: plinth/modules/tor/templates/tor.html:120 +#: plinth/modules/tor/templates/tor.html:138 #, python-format msgid "A Tor SOCKS port is available on your %(box_name)s on TCP port 9050." msgstr "" -#: plinth/modules/tor/tor.py:46 -msgid "Enable Tor" -msgstr "" - -#: plinth/modules/tor/tor.py:49 -msgid "Enable Tor Hidden Service" -msgstr "" - -#: plinth/modules/tor/tor.py:51 -msgid "" -"A hidden service will allow FreedomBox to provide selected services (such as " -"ownCloud or Chat) without revealing its location." -msgstr "" - -#: plinth/modules/tor/tor.py:55 -msgid "Download software packages over Tor" -msgstr "" - -#: plinth/modules/tor/tor.py:57 -msgid "" -"When enabled, software will be downloaded over the Tor network for " -"installations and upgrades. This adds a degree of privacy and security " -"during software downloads." -msgstr "" - -#: plinth/modules/tor/tor.py:85 plinth/modules/tor/tor.py:285 -msgid "Tor Hidden Service" -msgstr "" - -#: plinth/modules/tor/tor.py:115 +#: plinth/modules/tor/views.py:68 msgid "Tor Control Panel" msgstr "" -#: plinth/modules/tor/tor.py:240 +#: plinth/modules/tor/views.py:79 #, python-brace-format msgid "Action error: {0} [{1}] [{2}]" msgstr "" -#: plinth/modules/tor/tor.py:256 -msgid "Tor enabled" -msgstr "" - -#: plinth/modules/tor/tor.py:259 -msgid "Tor disabled" -msgstr "" - -#: plinth/modules/tor/tor.py:264 -msgid "Tor hidden service enabled" -msgstr "" - -#: plinth/modules/tor/tor.py:267 -msgid "Tor hidden service disabled" -msgstr "" - -#: plinth/modules/tor/tor.py:292 -msgid "Enabled package download over Tor" +#: plinth/modules/tor/views.py:148 +msgid "Configuration updated." msgstr "" -#: plinth/modules/tor/tor.py:295 -msgid "Disabled package download over Tor" +#: plinth/modules/tor/views.py:150 +msgid "An error occurred during configuration." msgstr "" #: plinth/modules/transmission/__init__.py:38 #: plinth/modules/transmission/templates/transmission.html:26 -#: plinth/modules/transmission/views.py:63 +#: plinth/modules/transmission/views.py:67 msgid "BitTorrent (Transmission)" msgstr "" @@ -2330,70 +2532,66 @@ "will attempt to perform any package upgrades that are available." msgstr "" -#: plinth/modules/upgrades/templates/upgrades.html:40 -msgid "There was an error while upgrading." +#: plinth/modules/upgrades/templates/upgrades.html:37 +msgid "" +"Upgrades install the latest software and security updates. When automatic " +"upgrades are enabled, upgrades are automatically run every night. You don't " +"normally need to start the upgrade process." msgstr "" -#: plinth/modules/upgrades/templates/upgrades.html:43 -#: plinth/modules/upgrades/templates/upgrades.html:59 -msgid "Output from unattended-upgrades:" +#: plinth/modules/upgrades/templates/upgrades.html:45 +msgid "" +"Depending on the number of packages to install, this may take a long time to " +"complete. While upgrades are in progress, you will not be able to install " +"other packages. During the upgrade, this web interface may be temporarily " +"unavailable and show an error. Refresh the page to continue." msgstr "" -#: plinth/modules/upgrades/templates/upgrades.html:50 -msgid "The operating system is up to date now.  " +#: plinth/modules/upgrades/templates/upgrades.html:58 +msgid "Upgrade now »" msgstr "" -#: plinth/modules/upgrades/templates/upgrades.html:53 -msgid "Show Details" +#: plinth/modules/upgrades/templates/upgrades.html:65 +msgid "A package manager is running." msgstr "" -#: plinth/modules/upgrades/templates/upgrades.html:69 -msgid "" -"This will run unattended-upgrades, which will attempt to upgrade your system " -"with the latest Debian packages. It may take a few minutes to complete." +#: plinth/modules/upgrades/templates/upgrades.html:70 +msgid "Recent log from upgrades:" msgstr "" -#: plinth/modules/upgrades/templates/upgrades.html:80 -msgid "Upgrade now »" +#: plinth/modules/upgrades/views.py:36 plinth/modules/upgrades/views.py:66 +msgid "Automatic Upgrades" msgstr "" -#: plinth/modules/upgrades/templates/upgrades.html:87 -msgid "System is being upgraded." +#: plinth/modules/upgrades/views.py:38 +msgid "Upgrade Packages" msgstr "" -#: plinth/modules/upgrades/views.py:35 plinth/modules/upgrades/views.py:64 -msgid "Automatic Upgrades" +#: plinth/modules/upgrades/views.py:96 +msgid "Upgrade process started." msgstr "" -#: plinth/modules/upgrades/views.py:37 -msgid "Upgrade Packages" +#: plinth/modules/upgrades/views.py:99 +msgid "Starting upgrade failed." msgstr "" -#: plinth/modules/upgrades/views.py:75 +#: plinth/modules/upgrades/views.py:102 msgid "Package Upgrades" msgstr "" -#: plinth/modules/upgrades/views.py:116 +#: plinth/modules/upgrades/views.py:131 #, python-brace-format msgid "Error when configuring unattended-upgrades: {error}" msgstr "" -#: plinth/modules/upgrades/views.py:121 +#: plinth/modules/upgrades/views.py:136 msgid "Automatic upgrades enabled" msgstr "" -#: plinth/modules/upgrades/views.py:123 +#: plinth/modules/upgrades/views.py:138 msgid "Automatic upgrades disabled" msgstr "" -#: plinth/modules/upgrades/views.py:142 -msgid "Upgrade completed." -msgstr "" - -#: plinth/modules/upgrades/views.py:144 -msgid "Upgrade failed." -msgstr "" - #: plinth/modules/users/__init__.py:36 msgid "Users and Groups" msgstr "" @@ -2429,19 +2627,30 @@ msgid "Failed to add new user to {group} group." msgstr "" -#: plinth/modules/users/forms.py:126 +#: plinth/modules/users/forms.py:92 +msgid "SSH Keys" +msgstr "" + +#: plinth/modules/users/forms.py:96 +msgid "" +"Setting an SSH public key will allow this user to securely log in to the " +"system without using a password. You may enter multiple keys, one on each " +"line. Blank lines and lines starting with # will be ignored." +msgstr "" + +#: plinth/modules/users/forms.py:136 msgid "Renaming LDAP user failed." msgstr "" -#: plinth/modules/users/forms.py:138 +#: plinth/modules/users/forms.py:148 msgid "Failed to remove user from group." msgstr "" -#: plinth/modules/users/forms.py:149 +#: plinth/modules/users/forms.py:159 msgid "Failed to add user to group." msgstr "" -#: plinth/modules/users/forms.py:174 +#: plinth/modules/users/forms.py:188 msgid "Changing LDAP user password failed." msgstr "" @@ -2460,7 +2669,7 @@ msgstr "" #: plinth/modules/users/templates/users_delete.html:26 -#: plinth/modules/users/views.py:103 +#: plinth/modules/users/views.py:110 msgid "Delete User" msgstr "" @@ -2513,20 +2722,20 @@ msgid "Edit User" msgstr "" -#: plinth/modules/users/views.py:113 +#: plinth/modules/users/views.py:120 #, python-brace-format msgid "User {user} deleted." msgstr "" -#: plinth/modules/users/views.py:120 +#: plinth/modules/users/views.py:127 msgid "Deleting LDAP user failed." msgstr "" -#: plinth/modules/users/views.py:129 +#: plinth/modules/users/views.py:136 msgid "Change Password" msgstr "" -#: plinth/modules/users/views.py:130 +#: plinth/modules/users/views.py:137 msgid "Password changed successfully." msgstr "" @@ -2601,8 +2810,9 @@ msgid "Secure Shell (SSH) Server" msgstr "" -#: plinth/service.py:78 -msgid "FreedomBox Web Interface (Plinth)" +#: plinth/service.py:79 +#, python-brace-format +msgid "{box_name} Web Interface (Plinth)" msgstr "" #: plinth/templates/404.html:25 @@ -2633,27 +2843,24 @@ msgstr "" #: plinth/templates/base.html:49 -msgid "Plinth administrative interface for the FreedomBox" -msgstr "" - -#: plinth/templates/base.html:52 plinth/templates/base.html.py:88 -msgid "FreedomBox" +#, python-format +msgid "Plinth administrative interface for the %(box_name)s" msgstr "" -#: plinth/templates/base.html:81 +#: plinth/templates/base.html:83 msgid "Toggle navigation" msgstr "" -#: plinth/templates/base.html:121 plinth/templates/base.html.py:122 +#: plinth/templates/base.html:125 plinth/templates/base.html.py:126 msgid "Change password" msgstr "" -#: plinth/templates/base.html:125 plinth/templates/base.html.py:126 -#: plinth/templates/base.html:139 plinth/templates/base.html.py:141 +#: plinth/templates/base.html:129 plinth/templates/base.html.py:130 +#: plinth/templates/base.html:143 plinth/templates/base.html.py:145 msgid "Log out" msgstr "" -#: plinth/templates/base.html:131 plinth/templates/base.html.py:133 +#: plinth/templates/base.html:135 plinth/templates/base.html.py:137 msgid "Log in" msgstr "" diff -Nru plinth-0.7.2/plinth/locale/fake/LC_MESSAGES/django.po plinth-0.8.1/plinth/locale/fake/LC_MESSAGES/django.po --- plinth-0.7.2/plinth/locale/fake/LC_MESSAGES/django.po 2015-12-23 11:34:40.000000000 +0000 +++ plinth-0.8.1/plinth/locale/fake/LC_MESSAGES/django.po 2016-02-16 03:55:53.000000000 +0000 @@ -7,8 +7,8 @@ msgstr "" "Project-Id-Version: Plinth 0.6\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-12-20 13:58+0530\n" -"PO-Revision-Date: 2015-12-20 13:57+0530\n" +"POT-Creation-Date: 2016-01-31 22:19+0530\n" +"PO-Revision-Date: 2016-01-31 22:24+0530\n" "Last-Translator: Sunil Mohan Adapa \n" "Language-Team: Plinth Developers \n" @@ -49,11 +49,15 @@ msgid "Cannot connect to {host}:{port}" msgstr "CANNOT CONNECT TO {host}:{port}" +#: plinth/context_processors.py:36 +msgid "FreedomBox" +msgstr "FREEDOMBOX" + #: plinth/modules/apps/apps.py:26 msgid "Apps" msgstr "APPS" -#: plinth/modules/apps/apps.py:32 plinth/templates/base.html.py:90 +#: plinth/modules/apps/apps.py:32 plinth/templates/base.html.py:93 msgid "Applications" msgstr "APPLICATIONS" @@ -95,17 +99,18 @@ msgstr "ENABLE SERVICE DISCOVERY" #: plinth/modules/avahi/templates/avahi.html:29 +#, python-format msgid "" -"Service discovery allows other machines on the network to discover your " -"FreedomBox and services running on it. It also allows FreedomBox to " -"discover other machines and services running on your local network. Service " +"Service discovery allows other devices on the network to discover your " +"%(box_name)s and services running on it. It also allows %(box_name)s to " +"discover other devices and services running on your local network. Service " "discovery is not essential and works only on internal networks. It may be " "disabled to improve security especially when connecting to a hostile local " "network." msgstr "" -"SERVICE DISCOVERY ALLOWS OTHER MACHINES ON THE NETWORK TO DISCOVER YOUR " -"FREEDOMBOX AND SERVICES RUNNING ON IT. IT ALSO ALLOWS FREEDOMBOX TO " -"DISCOVER OTHER MACHINES AND SERVICES RUNNING ON YOUR LOCAL NETWORK. SERVICE " +"SERVICE DISCOVERY ALLOWS OTHER DEVICES ON THE NETWORK TO DISCOVER YOUR " +"%(box_name)s AND SERVICES RUNNING ON IT. IT ALSO ALLOWS %(box_name)s TO " +"DISCOVER OTHER DEVICES AND SERVICES RUNNING ON YOUR LOCAL NETWORK. SERVICE " "DISCOVERY IS NOT ESSENTIAL AND WORKS ONLY ON INTERNAL NETWORKS. IT MAY BE " "DISABLED TO IMPROVE SECURITY ESPECIALLY WHEN CONNECTING TO A HOSTILE LOCAL " "NETWORK." @@ -113,14 +118,15 @@ #: plinth/modules/avahi/templates/avahi.html:40 #: plinth/modules/datetime/templates/datetime.html:35 #: plinth/modules/deluge/templates/deluge.html:39 -#: plinth/modules/dynamicdns/dynamicdns.py:38 +#: plinth/modules/dynamicdns/dynamicdns.py:39 #: plinth/modules/firewall/templates/firewall.html:57 #: plinth/modules/mumble/templates/mumble.html:44 #: plinth/modules/networks/templates/connection_show.html:261 #: plinth/modules/openvpn/templates/openvpn.html:81 #: plinth/modules/privoxy/templates/privoxy.html:48 #: plinth/modules/quassel/templates/quassel.html:50 -#: plinth/modules/tor/templates/tor.html:39 +#: plinth/modules/repro/templates/repro.html:58 +#: plinth/modules/tor/templates/tor.html:48 #: plinth/modules/transmission/templates/transmission.html:42 #: plinth/modules/xmpp/templates/xmpp.html:58 msgid "Status" @@ -143,9 +149,10 @@ #: plinth/modules/owncloud/templates/owncloud.html:51 #: plinth/modules/privoxy/templates/privoxy.html:62 #: plinth/modules/quassel/templates/quassel.html:65 +#: plinth/modules/repro/templates/repro.html:72 #: plinth/modules/roundcube/templates/roundcube.html:62 #: plinth/modules/shaarli/templates/shaarli.html:40 -#: plinth/modules/tor/templates/tor.html:74 +#: plinth/modules/tor/templates/tor.html:92 #: plinth/modules/transmission/templates/transmission.html:56 #: plinth/modules/xmpp/templates/xmpp.html:72 msgid "Configuration" @@ -161,10 +168,11 @@ #: plinth/modules/openvpn/templates/openvpn.html:138 #: plinth/modules/privoxy/templates/privoxy.html:70 #: plinth/modules/quassel/templates/quassel.html:73 +#: plinth/modules/repro/templates/repro.html:80 #: plinth/modules/restore/templates/restore_index.html:54 #: plinth/modules/roundcube/templates/roundcube.html:70 #: plinth/modules/shaarli/templates/shaarli.html:48 -#: plinth/modules/tor/templates/tor.html:82 +#: plinth/modules/tor/templates/tor.html:100 #: plinth/modules/transmission/templates/transmission.html:64 #: plinth/modules/upgrades/templates/upgrades_configure.html:34 #: plinth/modules/xmpp/templates/xmpp.html:80 @@ -173,12 +181,13 @@ #: plinth/modules/avahi/views.py:73 plinth/modules/datetime/views.py:85 #: plinth/modules/deluge/views.py:80 -#: plinth/modules/dynamicdns/dynamicdns.py:368 +#: plinth/modules/dynamicdns/dynamicdns.py:371 #: plinth/modules/ikiwiki/views.py:95 plinth/modules/mumble/views.py:80 #: plinth/modules/openvpn/views.py:142 plinth/modules/privoxy/views.py:83 -#: plinth/modules/quassel/views.py:76 plinth/modules/restore/views.py:68 -#: plinth/modules/roundcube/views.py:84 plinth/modules/shaarli/views.py:74 -#: plinth/modules/transmission/views.py:105 plinth/modules/xmpp/views.py:100 +#: plinth/modules/quassel/views.py:76 plinth/modules/repro/views.py:77 +#: plinth/modules/restore/views.py:68 plinth/modules/roundcube/views.py:84 +#: plinth/modules/shaarli/views.py:74 plinth/modules/transmission/views.py:109 +#: plinth/modules/xmpp/views.py:100 msgid "Configuration updated" msgstr "CONFIGURATION UPDATED" @@ -186,70 +195,73 @@ #: plinth/modules/deluge/views.py:82 plinth/modules/ikiwiki/views.py:97 #: plinth/modules/mumble/views.py:82 plinth/modules/openvpn/views.py:144 #: plinth/modules/owncloud/owncloud.py:93 plinth/modules/privoxy/views.py:85 -#: plinth/modules/quassel/views.py:78 plinth/modules/restore/views.py:70 -#: plinth/modules/roundcube/views.py:86 plinth/modules/shaarli/views.py:76 -#: plinth/modules/tor/tor.py:250 plinth/modules/transmission/views.py:107 -#: plinth/modules/upgrades/views.py:103 plinth/modules/xmpp/views.py:102 +#: plinth/modules/quassel/views.py:78 plinth/modules/repro/views.py:79 +#: plinth/modules/restore/views.py:70 plinth/modules/roundcube/views.py:86 +#: plinth/modules/shaarli/views.py:76 plinth/modules/tor/views.py:111 +#: plinth/modules/transmission/views.py:111 +#: plinth/modules/upgrades/views.py:118 plinth/modules/xmpp/views.py:102 msgid "Setting unchanged" msgstr "SETTING UNCHANGED" -#: plinth/modules/config/config.py:83 plinth/modules/config/config.py:120 -#: plinth/modules/dynamicdns/dynamicdns.py:145 +#: plinth/modules/config/config.py:84 plinth/modules/config/config.py:121 +#: plinth/modules/dynamicdns/dynamicdns.py:148 msgid "Invalid domain name" msgstr "INVALID DOMAIN NAME" -#: plinth/modules/config/config.py:94 +#: plinth/modules/config/config.py:95 msgid "Hostname" msgstr "HOSTNAME" -#: plinth/modules/config/config.py:96 +#: plinth/modules/config/config.py:97 +#, python-brace-format msgid "" -"Hostname is the local name by which other machines on the local network " -"reach your machine. It must start and end with an alphabet or a digit and " -"have as interior characters only alphabets, digits and hyphens. Total " +"Hostname is the local name by which other devices on the local network can " +"reach your {box_name}. It must start and end with an alphabet or a digit " +"and have as interior characters only alphabets, digits and hyphens. Total " "length must be 63 characters or less." msgstr "" -"HOSTNAME IS THE LOCAL NAME BY WHICH OTHER MACHINES ON THE LOCAL NETWORK " -"REACH YOUR MACHINE. IT MUST START AND END WITH AN ALPHABET OR A DIGIT AND " -"HAVE AS INTERIOR CHARACTERS ONLY ALPHABETS, DIGITS AND HYPHENS. TOTAL " +"HOSTNAME IS THE LOCAL NAME BY WHICH OTHER DEVICES ON THE LOCAL NETWORK CAN " +"REACH YOUR {box_name}. IT MUST START AND END WITH AN ALPHABET OR A DIGIT " +"AND HAVE AS INTERIOR CHARACTERS ONLY ALPHABETS, DIGITS AND HYPHENS. TOTAL " "LENGTH MUST BE 63 CHARACTERS OR LESS." -#: plinth/modules/config/config.py:104 +#: plinth/modules/config/config.py:105 msgid "Invalid hostname" msgstr "INVALID HOSTNAME" -#: plinth/modules/config/config.py:107 plinth/modules/config/config.py:153 +#: plinth/modules/config/config.py:108 plinth/modules/config/config.py:153 #: plinth/modules/config/config.py:265 -#: plinth/modules/dynamicdns/dynamicdns.py:140 +#: plinth/modules/dynamicdns/dynamicdns.py:143 msgid "Domain Name" msgstr "DOMAIN NAME" -#: plinth/modules/config/config.py:109 +#: plinth/modules/config/config.py:110 +#, python-brace-format msgid "" -"Domain name is the global name by which other machines on the Internet can " -"reach you. It must consist of labels separated by dots. Each label must " -"start and end with an alphabet or a digit and have as interior characters " -"only alphabets, digits and hyphens. Length of each label must be 63 " -"characters or less. Total length of domain name must be 253 characters or " -"less." -msgstr "" -"DOMAIN NAME IS THE GLOBAL NAME BY WHICH OTHER MACHINES ON THE INTERNET CAN " -"REACH YOU. IT MUST CONSIST OF LABELS SEPARATED BY DOTS. EACH LABEL MUST " -"START AND END WITH AN ALPHABET OR A DIGIT AND HAVE AS INTERIOR CHARACTERS " -"ONLY ALPHABETS, DIGITS AND HYPHENS. LENGTH OF EACH LABEL MUST BE 63 " -"CHARACTERS OR LESS. TOTAL LENGTH OF DOMAIN NAME MUST BE 253 CHARACTERS OR " -"LESS." +"Domain name is the global name by which other devices on the Internet can " +"reach your {box_name}. It must consist of labels separated by dots. Each " +"label must start and end with an alphabet or a digit and have as interior " +"characters only alphabets, digits and hyphens. Length of each label must be " +"63 characters or less. Total length of domain name must be 253 characters " +"or less." +msgstr "" +"DOMAIN NAME IS THE GLOBAL NAME BY WHICH OTHER DEVICES ON THE INTERNET CAN " +"REACH YOUR {box_name}. IT MUST CONSIST OF LABELS SEPARATED BY DOTS. EACH " +"LABEL MUST START AND END WITH AN ALPHABET OR A DIGIT AND HAVE AS INTERIOR " +"CHARACTERS ONLY ALPHABETS, DIGITS AND HYPHENS. LENGTH OF EACH LABEL MUST BE " +"63 CHARACTERS OR LESS. TOTAL LENGTH OF DOMAIN NAME MUST BE 253 CHARACTERS " +"OR LESS." -#: plinth/modules/config/config.py:124 +#: plinth/modules/config/config.py:125 msgid "Language" msgstr "LANGUAGE" -#: plinth/modules/config/config.py:126 -msgid "Language for this FreedomBox web administration interface" -msgstr "LANGUAGE FOR THIS FREEDOMBOX WEB ADMINISTRATION INTERFACE" +#: plinth/modules/config/config.py:127 +msgid "Language for this web administration interface" +msgstr "LANGUAGE FOR THIS WEB ADMINISTRATION INTERFACE" #: plinth/modules/config/config.py:135 -#: plinth/modules/dynamicdns/dynamicdns.py:36 +#: plinth/modules/dynamicdns/dynamicdns.py:37 #: plinth/modules/ikiwiki/views.py:36 msgid "Configure" msgstr "CONFIGURE" @@ -445,16 +457,16 @@ msgid "Result" msgstr "RESULT" -#: plinth/modules/dynamicdns/dynamicdns.py:34 plinth/modules/help/help.py:40 +#: plinth/modules/dynamicdns/dynamicdns.py:35 plinth/modules/help/help.py:40 msgid "About" msgstr "ABOUT" -#: plinth/modules/dynamicdns/dynamicdns.py:44 -#: plinth/modules/dynamicdns/dynamicdns.py:53 +#: plinth/modules/dynamicdns/dynamicdns.py:45 +#: plinth/modules/dynamicdns/dynamicdns.py:54 msgid "Dynamic DNS" msgstr "DYNAMIC DNS" -#: plinth/modules/dynamicdns/dynamicdns.py:70 +#: plinth/modules/dynamicdns/dynamicdns.py:71 msgid "" "The Variables <User>, <Pass>, <Ip>, <Domain> may be " "used within the URL. For details see the update URL templates of the example " @@ -464,7 +476,7 @@ "USED WITHIN THE URL. FOR DETAILS SEE THE UPDATE URL TEMPLATES OF THE EXAMPLE " "PROVIDERS." -#: plinth/modules/dynamicdns/dynamicdns.py:74 +#: plinth/modules/dynamicdns/dynamicdns.py:75 msgid "" "Please choose an update protocol according to your provider. If your " "provider does not support the GnudIP protocol or your provider is not listed " @@ -474,23 +486,24 @@ "PROVIDER DOES NOT SUPPORT THE GNUDIP PROTOCOL OR YOUR PROVIDER IS NOT LISTED " "YOU MAY USE THE UPDATE URL OF YOUR PROVIDER." -#: plinth/modules/dynamicdns/dynamicdns.py:79 +#: plinth/modules/dynamicdns/dynamicdns.py:80 msgid "" "Please do not enter a URL here (like \"https://example.com/\") but only the " -"hostname of the GnuDIP server (like \"example.pcom\")." +"hostname of the GnuDIP server (like \"example.com\")." msgstr "" "PLEASE DO NOT ENTER A URL HERE (LIKE \"HTTPS://EXAMPLE.COM/\") BUT ONLY THE " -"HOSTNAME OF THE GNUDIP SERVER (LIKE \"EXAMPLE.PCOM\")." +"HOSTNAME OF THE GNUDIP SERVER (LIKE \"EXAMPLE.COM\")." -#: plinth/modules/dynamicdns/dynamicdns.py:83 -msgid "The public domain name you want use to reach your box." -msgstr "THE PUBLIC DOMAIN NAME YOU WANT USE TO REACH YOUR BOX." +#: plinth/modules/dynamicdns/dynamicdns.py:84 +#, python-brace-format +msgid "The public domain name you want use to reach your {box_name}." +msgstr "THE PUBLIC DOMAIN NAME YOU WANT USE TO REACH YOUR {box_name}." -#: plinth/modules/dynamicdns/dynamicdns.py:85 +#: plinth/modules/dynamicdns/dynamicdns.py:87 msgid "Use this option if your provider uses self signed certificates." msgstr "USE THIS OPTION IF YOUR PROVIDER USES SELF SIGNED CERTIFICATES." -#: plinth/modules/dynamicdns/dynamicdns.py:88 +#: plinth/modules/dynamicdns/dynamicdns.py:90 msgid "" "If this option is selected, your username and password will be used for HTTP " "basic authentication." @@ -498,25 +511,26 @@ "IF THIS OPTION IS SELECTED, YOUR USERNAME AND PASSWORD WILL BE USED FOR HTTP " "BASIC AUTHENTICATION." -#: plinth/modules/dynamicdns/dynamicdns.py:91 +#: plinth/modules/dynamicdns/dynamicdns.py:93 msgid "" "Leave this field empty if you want to keep your previous configured password." msgstr "" "LEAVE THIS FIELD EMPTY IF YOU WANT TO KEEP YOUR PREVIOUS CONFIGURED PASSWORD." -#: plinth/modules/dynamicdns/dynamicdns.py:94 +#: plinth/modules/dynamicdns/dynamicdns.py:96 +#, python-brace-format msgid "" -"Optional Value. If your FreedomBox is not connected directly to the Internet " +"Optional Value. If your {box_name} is not connected directly to the Internet " "(i.e. connected to a NAT router) this URL is used to figure out the real " -"Internet IP. The URL should simply return the IP wherethe client comes from. " -"Example: http://myip.datasystems24.de" +"Internet IP. The URL should simply return the IP where the client comes from " +"(example: http://myip.datasystems24.de)." msgstr "" -"OPTIONAL VALUE. IF YOUR FREEDOMBOX IS NOT CONNECTED DIRECTLY TO THE INTERNET " +"OPTIONAL VALUE. IF YOUR {box_name} IS NOT CONNECTED DIRECTLY TO THE INTERNET " "(I.E. CONNECTED TO A NAT ROUTER) THIS URL IS USED TO FIGURE OUT THE REAL " -"INTERNET IP. THE URL SHOULD SIMPLY RETURN THE IP WHERETHE CLIENT COMES FROM. " -"EXAMPLE: HTTP://MYIP.DATASYSTEMS24.DE" +"INTERNET IP. THE URL SHOULD SIMPLY RETURN THE IP WHERE THE CLIENT COMES FROM " +"(EXAMPLE: HTTP://MYIP.DATASYSTEMS24.DE)." -#: plinth/modules/dynamicdns/dynamicdns.py:101 +#: plinth/modules/dynamicdns/dynamicdns.py:104 msgid "" "You should have been requested to select a username when you created the " "account." @@ -524,89 +538,91 @@ "YOU SHOULD HAVE BEEN REQUESTED TO SELECT A USERNAME WHEN YOU CREATED THE " "ACCOUNT." -#: plinth/modules/dynamicdns/dynamicdns.py:112 +#: plinth/modules/dynamicdns/dynamicdns.py:115 msgid "Enable Dynamic DNS" msgstr "ENABLE DYNAMIC DNS" -#: plinth/modules/dynamicdns/dynamicdns.py:115 +#: plinth/modules/dynamicdns/dynamicdns.py:118 msgid "Service type" msgstr "SERVICE TYPE" -#: plinth/modules/dynamicdns/dynamicdns.py:120 +#: plinth/modules/dynamicdns/dynamicdns.py:123 msgid "GnudIP Server Address" msgstr "GNUDIP SERVER ADDRESS" -#: plinth/modules/dynamicdns/dynamicdns.py:125 +#: plinth/modules/dynamicdns/dynamicdns.py:128 msgid "Invalid server name" msgstr "INVALID SERVER NAME" -#: plinth/modules/dynamicdns/dynamicdns.py:128 +#: plinth/modules/dynamicdns/dynamicdns.py:131 msgid "Update URL" msgstr "UPDATE URL" -#: plinth/modules/dynamicdns/dynamicdns.py:132 -msgid "accept all SSL certificates" +#: plinth/modules/dynamicdns/dynamicdns.py:135 +msgid "Accept all SSL certificates" msgstr "ACCEPT ALL SSL CERTIFICATES" -#: plinth/modules/dynamicdns/dynamicdns.py:136 -msgid "use HTTP basic authentication" +#: plinth/modules/dynamicdns/dynamicdns.py:139 +msgid "Use HTTP basic authentication" msgstr "USE HTTP BASIC AUTHENTICATION" -#: plinth/modules/dynamicdns/dynamicdns.py:148 -#: plinth/modules/networks/forms.py:118 plinth/modules/transmission/forms.py:39 +#: plinth/modules/dynamicdns/dynamicdns.py:151 +#: plinth/modules/networks/forms.py:146 plinth/modules/transmission/forms.py:39 msgid "Username" msgstr "USERNAME" -#: plinth/modules/dynamicdns/dynamicdns.py:151 -#: plinth/modules/networks/forms.py:119 plinth/modules/transmission/forms.py:43 +#: plinth/modules/dynamicdns/dynamicdns.py:154 +#: plinth/modules/networks/forms.py:147 plinth/modules/transmission/forms.py:43 msgid "Password" msgstr "PASSWORD" -#: plinth/modules/dynamicdns/dynamicdns.py:154 -msgid "show password" +#: plinth/modules/dynamicdns/dynamicdns.py:157 +#: plinth/modules/networks/forms.py:149 +msgid "Show password" msgstr "SHOW PASSWORD" -#: plinth/modules/dynamicdns/dynamicdns.py:158 +#: plinth/modules/dynamicdns/dynamicdns.py:161 msgid "IP check URL" msgstr "IP CHECK URL" -#: plinth/modules/dynamicdns/dynamicdns.py:184 +#: plinth/modules/dynamicdns/dynamicdns.py:187 msgid "Please provide update URL or a GnuDIP Server" msgstr "PLEASE PROVIDE UPDATE URL OR A GNUDIP SERVER" -#: plinth/modules/dynamicdns/dynamicdns.py:187 +#: plinth/modules/dynamicdns/dynamicdns.py:190 msgid "Please provide GnuDIP username" msgstr "PLEASE PROVIDE GNUDIP USERNAME" -#: plinth/modules/dynamicdns/dynamicdns.py:190 +#: plinth/modules/dynamicdns/dynamicdns.py:193 msgid "Please provide GnuDIP domain" msgstr "PLEASE PROVIDE GNUDIP DOMAIN" -#: plinth/modules/dynamicdns/dynamicdns.py:195 +#: plinth/modules/dynamicdns/dynamicdns.py:198 msgid "Please provide a password" msgstr "PLEASE PROVIDE A PASSWORD" -#: plinth/modules/dynamicdns/dynamicdns.py:214 +#: plinth/modules/dynamicdns/dynamicdns.py:217 msgid "Configure Dynamic DNS" msgstr "CONFIGURE DYNAMIC DNS" -#: plinth/modules/dynamicdns/dynamicdns.py:236 +#: plinth/modules/dynamicdns/dynamicdns.py:239 msgid "Status of Dynamic DNS" msgstr "STATUS OF DYNAMIC DNS" #: plinth/modules/dynamicdns/templates/dynamicdns.html:25 -msgid "DynamicDNS client" -msgstr "DYNAMICDNS CLIENT" +msgid "Dynamic DNS Client" +msgstr "DYNAMIC DNS CLIENT" #: plinth/modules/dynamicdns/templates/dynamicdns.html:28 +#, python-format msgid "" "If your internet provider changes your IP address periodic (i.e. every 24h) " "it may be hard for others to find you in the WEB. And for this reason nobody " -"may find the services which are provided by FreedomBox (like your ownCloud)." +"may find the services which are provided by %(box_name)s, such as ownCloud." msgstr "" "IF YOUR INTERNET PROVIDER CHANGES YOUR IP ADDRESS PERIODIC (I.E. EVERY 24H) " "IT MAY BE HARD FOR OTHERS TO FIND YOU IN THE WEB. AND FOR THIS REASON NOBODY " -"MAY FIND THE SERVICES WHICH ARE PROVIDED BY FREEDOMBOX (LIKE YOUR OWNCLOUD)." +"MAY FIND THE SERVICES WHICH ARE PROVIDED BY %(box_name)s, SUCH AS OWNCLOUD." #: plinth/modules/dynamicdns/templates/dynamicdns.html:37 msgid "" @@ -615,7 +631,7 @@ "allows you to push your current public IP address to an gnudip server. Afterwards " "the Server will assign your DNS name with the new IP and if someone from the " -"internet asks for your DNS name he will get your current IP answered." +"Internet asks for your DNS name he will get your current IP answered." msgstr "" "THE SOLUTION IS TO ASSIGN A DNS NAME TO YOUR IP ADDRESS AND UPDATE THE DNS " "NAME EVERY TIME YOUR IP IS CHANGED BY YOUR INTERNET PROVIDER. DYNAMIC DNS " @@ -639,14 +655,14 @@ "FREEDNS.AFRAID.ORG." #: plinth/modules/dynamicdns/templates/dynamicdns.html:61 +#, python-format msgid "" -"If your freedombox is connected behind some NAT router, don't forget to add " -"portforwarding (i.e. forward some standard ports like 80 and 443) to your " -"freedombox device." -msgstr "" -"IF YOUR FREEDOMBOX IS CONNECTED BEHIND SOME NAT ROUTER, DON'T FORGET TO ADD " -"PORTFORWARDING (I.E. FORWARD SOME STANDARD PORTS LIKE 80 AND 443) TO YOUR " -"FREEDOMBOX DEVICE." +"If your %(box_name)s is connected behind some NAT router, don't forget to " +"add port forwarding (i.e. forward some standard ports like 80 and 443)." +msgstr "" +"IF YOUR %(box_name)s IS CONNECTED BEHIND SOME NAT ROUTER, DON'T FORGET TO " +"ADD PORT FORWARDING (I.E. FORWARD SOME STANDARD PORTS LIKE 80 AND 443) TO " +"YOUR %(box_name)s DEVICE." #: plinth/modules/dynamicdns/templates/dynamicdns_configure.html:30 msgid "" @@ -669,21 +685,21 @@ "NOT DETECT A NAT TYPE." #: plinth/modules/dynamicdns/templates/dynamicdns_status.html:35 -msgid "Direct connection to the internet." +msgid "Direct connection to the Internet." msgstr "DIRECT CONNECTION TO THE INTERNET." #: plinth/modules/dynamicdns/templates/dynamicdns_status.html:37 #, python-format msgid "" -"Behind NAT, this means that dynamic DNS service will poll the \"IP check URL" -"\" for changes (we need the \"IP check URL\" for this reason - otherwise we " -"will not detect IP changes). It may take up to %(timer)s minutes until we " -"update your DNS entry in case of WAN IP change." -msgstr "" -"BEHIND NAT, THIS MEANS THAT DYNAMIC DNS SERVICE WILL POLL THE \"IP CHECK URL" -"\" FOR CHANGES (WE NEED THE \"IP CHECK URL\" FOR THIS REASON - OTHERWISE WE " -"WILL NOT DETECT IP CHANGES). IT MAY TAKE UP TO %(timer)s MINUTES UNTIL WE " -"UPDATE YOUR DNS ENTRY IN CASE OF WAN IP CHANGE." +"Behind NAT. This means that Dynamic DNS service will poll the \"IP check URL" +"\" for changes (the \"IP check URL\" entry is needed for this - otherwise IP " +"changes will not be detected). In case the WAN IP changes, it may take up " +"to %(timer)s minutes until your DNS entry is updated." +msgstr "" +"BEHIND NAT. THIS MEANS THAT DYNAMIC DNS SERVICE WILL POLL THE \"IP CHECK URL" +"\" FOR CHANGES (THE \"IP CHECK URL\" ENTRY IS NEEDED FOR THIS - OTHERWISE IP " +"CHANGES WILL NOT BE DETECTED). IN CASE THE WAN IP CHANGES, IT MAY TAKE UP " +"TO %(timer)s MINUTES UNTIL YOUR DNS ENTRY IS UPDATED." #: plinth/modules/dynamicdns/templates/dynamicdns_status.html:48 msgid "Last update" @@ -698,17 +714,17 @@ #: plinth/modules/firewall/templates/firewall.html:28 #, python-format msgid "" -"Firewall is a network security system that controls the incoming and " -"outgoing network traffic on your %(box_name)s. Keeping a firewall enabled " -"and properly configured reduces risk of security threat from the Internet." -msgstr "" -"FIREWALL IS A NETWORK SECURITY SYSTEM THAT CONTROLS THE INCOMING AND " -"OUTGOING NETWORK TRAFFIC ON YOUR %(box_name)s. KEEPING A FIREWALL ENABLED " -"AND PROPERLY CONFIGURED REDUCES RISK OF SECURITY THREAT FROM THE INTERNET." +"Firewall is a security system that controls the incoming and outgoing " +"network traffic on your %(box_name)s. Keeping a firewall enabled and " +"properly configured reduces risk of security threat from the Internet." +msgstr "" +"FIREWALL IS A SECURITY SYSTEM THAT CONTROLS THE INCOMING AND OUTGOING " +"NETWORK TRAFFIC ON YOUR %(box_name)s. KEEPING A FIREWALL ENABLED AND " +"PROPERLY CONFIGURED REDUCES RISK OF SECURITY THREAT FROM THE INTERNET." #: plinth/modules/firewall/templates/firewall.html:36 -msgid "The following is the current status:" -msgstr "THE FOLLOWING IS THE CURRENT STATUS:" +msgid "Current status:" +msgstr "CURRENT STATUS:" #: plinth/modules/firewall/templates/firewall.html:41 #, python-format @@ -728,11 +744,13 @@ msgstr "SERVICE/PORT" #: plinth/modules/firewall/templates/firewall.html:67 +#: plinth/modules/letsencrypt/templates/letsencrypt.html:91 #: plinth/modules/names/templates/names.html:51 msgid "Enabled" msgstr "ENABLED" #: plinth/modules/firewall/templates/firewall.html:70 +#: plinth/modules/letsencrypt/templates/letsencrypt.html:93 #: plinth/modules/names/templates/names.html:53 msgid "Disabled" msgstr "DISABLED" @@ -756,12 +774,12 @@ #: plinth/modules/firewall/templates/firewall.html:103 msgid "" "The operation of the firewall is automatic. When you enable a service it is " -"automatically permitted in the firewall and you disable a service is " -"automatically disabled in the firewall." +"also permitted in the firewall and when you disable a service it is also " +"disabled in the firewall." msgstr "" "THE OPERATION OF THE FIREWALL IS AUTOMATIC. WHEN YOU ENABLE A SERVICE IT IS " -"AUTOMATICALLY PERMITTED IN THE FIREWALL AND YOU DISABLE A SERVICE IS " -"AUTOMATICALLY DISABLED IN THE FIREWALL." +"ALSO PERMITTED IN THE FIREWALL AND WHEN YOU DISABLE A SERVICE IT IS ALSO " +"DISABLED IN THE FIREWALL." #: plinth/modules/first_boot/forms.py:48 plinth/modules/users/forms.py:70 msgid "Creating LDAP user failed." @@ -775,25 +793,30 @@ msgid "User account created, you are now logged in" msgstr "USER ACCOUNT CREATED, YOU ARE NOW LOGGED IN" -#: plinth/modules/first_boot/templates/firstboot_state0.html:50 -msgid "Congratulations! Your FreedomBox is up and running!" -msgstr "CONGRATULATIONS! YOUR FREEDOMBOX IS UP AND RUNNING!" +#: plinth/modules/first_boot/templates/firstboot_navbar.html:23 +#: plinth/modules/help/templates/help_index.html:25 +#: plinth/templates/base.html:102 +msgid "Help" +msgstr "HELP" + +#: plinth/modules/first_boot/templates/firstboot_state0.html:45 +msgid "Start Setup" +msgstr "START SETUP" -#: plinth/modules/first_boot/templates/firstboot_state0.html:54 +#: plinth/modules/first_boot/templates/firstboot_state0.html:49 +#, python-format msgid "" -"Please provide the following basic information to complete the setup process." +"To complete the setup of your %(box_name)s, please provide some basic " +"information." msgstr "" -"PLEASE PROVIDE THE FOLLOWING BASIC INFORMATION TO COMPLETE THE SETUP PROCESS." +"TO COMPLETE THE SETUP OF YOUR %(box_name)s, PLEASE PROVIDE SOME BASIC " +"INFORMATION." -#: plinth/modules/first_boot/templates/firstboot_state0.html:62 -msgid "Next" -msgstr "NEXT" - -#: plinth/modules/first_boot/templates/firstboot_state1.html:39 +#: plinth/modules/first_boot/templates/firstboot_state1.html:41 msgid "Administrator Account" msgstr "ADMINISTRATOR ACCOUNT" -#: plinth/modules/first_boot/templates/firstboot_state1.html:42 +#: plinth/modules/first_boot/templates/firstboot_state1.html:44 msgid "" "Choose a username and password to access this web interface. The password " "can be changed later. This user will be granted administrative privileges. " @@ -803,7 +826,7 @@ "CAN BE CHANGED LATER. THIS USER WILL BE GRANTED ADMINISTRATIVE PRIVILEGES. " "OTHER USERS CAN BE ADDED LATER." -#: plinth/modules/first_boot/templates/firstboot_state1.html:55 +#: plinth/modules/first_boot/templates/firstboot_state1.html:57 msgid "Box it up!" msgstr "BOX IT UP!" @@ -812,35 +835,37 @@ msgstr "SETUP COMPLETE!" #: plinth/modules/first_boot/templates/firstboot_state10.html:32 +#, python-format msgid "" -"FreedomBox setup is now complete. However, you should check the network " -"setup and modify it if necessary. Do not forget to change the default Wi-Fi " -"passwords." -msgstr "" -"FREEDOMBOX SETUP IS NOW COMPLETE. HOWEVER, YOU SHOULD CHECK THE NETWORK " -"SETUP AND MODIFY IT IF NECESSARY. DO NOT FORGET TO CHANGE THE DEFAULT WI-FI " -"PASSWORDS." +"%(box_name)s setup is now complete. To make your %(box_name)s functional, " +"you need some applications. They will be installed the first time you " +"access them." +msgstr "" +"%(box_name)s SETUP IS NOW COMPLETE. TO MAKE YOUR %(box_name)s FUNCTIONAL, \n" +"YOU NEED SOME APPLICATIONS. THEY WILL BE INSTALLED THE FIRST TIME \n" +"YOU ACCESS THEM." -#: plinth/modules/first_boot/templates/firstboot_state10.html:40 -msgid "" -"To make your FreedomBox functional, you need some applications. " -"Applications will be installed the first time you access them." -msgstr "" -"TO MAKE YOUR FREEDOMBOX FUNCTIONAL, YOU NEED SOME APPLICATIONS. APPLICATIONS " -"WILL BE INSTALLED THE FIRST TIME YOU ACCESS THEM." +#: plinth/modules/first_boot/templates/firstboot_state10.html:41 +msgid "Go to Apps" +msgstr "GO TO APPS" + +#: plinth/modules/first_boot/templates/firstboot_state10.html:44 +msgid "Current Network Configuration" +msgstr "CURRENT NETWORK CONFIGURATION" #: plinth/modules/first_boot/templates/firstboot_state10.html:47 -msgid "Network Configuration" -msgstr "NETWORK CONFIGURATION" +msgid "" +"You should check the network setup and modify it if necessary. Do not forget " +"to change the default Wi-Fi passwords!" +msgstr "" +"YOU SHOULD CHECK THE NETWORK SETUP AND MODIFY IT IF NECESSARY. DO NOT " +"FORGET \n" +"TO CHANGE THE DEFAULT WI-FI PASSWORDS!" -#: plinth/modules/first_boot/templates/firstboot_state10.html:54 +#: plinth/modules/first_boot/templates/firstboot_state10.html:57 msgid "Go to Networks" msgstr "GO TO NETWORKS" -#: plinth/modules/first_boot/templates/firstboot_state10.html:59 -msgid "Go to Apps" -msgstr "GO TO APPS" - #: plinth/modules/first_boot/views.py:60 msgid "Setup Complete" msgstr "SETUP COMPLETE" @@ -853,9 +878,9 @@ msgid "Where to Get Help" msgstr "WHERE TO GET HELP" -#: plinth/modules/help/help.py:38 plinth/modules/help/help.py:72 -msgid "FreedomBox Manual" -msgstr "FREEDOMBOX MANUAL" +#: plinth/modules/help/help.py:38 +msgid "Manual" +msgstr "MANUAL" #: plinth/modules/help/help.py:48 msgid "Documentation and FAQ" @@ -866,23 +891,29 @@ msgid "About {box_name}" msgstr "ABOUT {box_name}" +#: plinth/modules/help/help.py:73 +#, python-brace-format +msgid "{box_name} Manual" +msgstr "{box_name} MANUAL" + #: plinth/modules/help/templates/help_about.html:30 +#, python-format msgid "" -"FreedomBox is a community project to develop, design and promote personal " +"%(box_name)s is a community project to develop, design and promote personal " "servers running free software for private, personal communications. It is a " "networking appliance designed to allow interfacing with the rest of the " "Internet under conditions of protected privacy and data security. It hosts " "applications such as blog, wiki, website, social network, email, web proxy " -"and a Tor relay on a device that can replace your Wi-Fi router so that your " -"data stays with you." +"and a Tor relay, on a device that can replace your Wi-Fi router, so that " +"your data stays with you." msgstr "" -"FREEDOMBOX IS A COMMUNITY PROJECT TO DEVELOP, DESIGN AND PROMOTE PERSONAL " +"%(box_name)s IS A COMMUNITY PROJECT TO DEVELOP, DESIGN AND PROMOTE PERSONAL " "SERVERS RUNNING FREE SOFTWARE FOR PRIVATE, PERSONAL COMMUNICATIONS. IT IS A " "NETWORKING APPLIANCE DESIGNED TO ALLOW INTERFACING WITH THE REST OF THE " "INTERNET UNDER CONDITIONS OF PROTECTED PRIVACY AND DATA SECURITY. IT HOSTS " "APPLICATIONS SUCH AS BLOG, WIKI, WEBSITE, SOCIAL NETWORK, EMAIL, WEB PROXY " -"AND A TOR RELAY ON A DEVICE THAT CAN REPLACE YOUR WI-FI ROUTER SO THAT YOUR " -"DATA STAYS WITH YOU." +"AND A TOR RELAY, ON A DEVICE THAT CAN REPLACE YOUR WI-FI ROUTER, SO THAT " +"YOUR DATA STAYS WITH YOU." #: plinth/modules/help/templates/help_about.html:43 msgid "" @@ -901,82 +932,93 @@ "RETURNING THE INTERNET TO ITS INTENDED PEER-TO-PEER ARCHITECTURE." #: plinth/modules/help/templates/help_about.html:56 +#, python-format msgid "" "There are a number of projects working to realize a future of distributed " -"services; FreedomBox aims to bring them all together in a convenient package." +"services; %(box_name)s aims to bring them all together in a convenient " +"package." msgstr "" "THERE ARE A NUMBER OF PROJECTS WORKING TO REALIZE A FUTURE OF DISTRIBUTED " -"SERVICES; FREEDOMBOX AIMS TO BRING THEM ALL TOGETHER IN A CONVENIENT PACKAGE." +"SERVICES; %(box_name)s AIMS TO BRING THEM ALL TOGETHER IN A CONVENIENT " +"PACKAGE." #: plinth/modules/help/templates/help_about.html:64 +#, python-format msgid "" -"For more information about the FreedomBox project, see the FreedomBox Wiki." +"For more information about the %(box_name)s project, see the %(box_name)s Wiki." msgstr "" -"FOR MORE INFORMATION ABOUT THE FREEDOMBOX PROJECT, SEE THE FREEDOMBOX WIKI." +"FOR MORE INFORMATION ABOUT THE %(box_name)s PROJECT, SEE THE %(box_name)s WIKI." -#: plinth/modules/help/templates/help_about.html:72 +#: plinth/modules/help/templates/help_about.html:73 msgid "Learn more »" msgstr "LEARN MORE »" -#: plinth/modules/help/templates/help_about.html:75 +#: plinth/modules/help/templates/help_about.html:76 #, python-format msgid "You are running Plinth version %(version)s." msgstr "YOU ARE RUNNING PLINTH VERSION %(version)s." -#: plinth/modules/help/templates/help_index.html:25 -#: plinth/templates/base.html:98 -msgid "Help" -msgstr "HELP" +#: plinth/modules/help/templates/help_base.html:36 +#, python-format +msgid "%(box_name)s Setup" +msgstr "%(box_name)s SETUP" #: plinth/modules/help/templates/help_index.html:29 #, python-format msgid "" -"The FreedomBox Manual is the best place to " +"The %(box_name)s Manual is the best place to " "start for information regarding %(box_name)s." msgstr "" -"THE FREEDOMBOX MANUAL IS THE BEST PLACE TO " +"THE %(box_name)s MANUAL IS THE BEST PLACE TO " "START FOR INFORMATION REGARDING %(box_name)s." #: plinth/modules/help/templates/help_index.html:36 +#, python-format msgid "" -" FreedomBox " -"project wiki contains further information." +" " +"%(box_name)s project wiki contains further information." msgstr "" -" FREEDOMBOX " -"PROJECT WIKI CONTAINS FURTHER INFORMATION." +" " +"%(box_name)s PROJECT WIKI CONTAINS FURTHER INFORMATION." #: plinth/modules/help/templates/help_index.html:43 +#, python-format msgid "" -"To seek help from FreedomBox community, queries may be posted on the " -"mailing list. The list archives also contain information about problems " -"faced by other users and possible solutions." -msgstr "" -"TO SEEK HELP FROM FREEDOMBOX COMMUNITY, QUERIES MAY BE POSTED ON THE " -"MAILING LIST. THE LIST ARCHIVES ALSO CONTAIN INFORMATION ABOUT PROBLEMS " -"FACED BY OTHER USERS AND POSSIBLE SOLUTIONS." +"To seek help from %(box_name)s community, queries may be posted on the mailing list. The list archives also contain information about " +"problems faced by other users and possible solutions." +msgstr "" +"TO SEEK HELP FROM %(box_name)s COMMUNITY, QUERIES MAY BE POSTED ON THE MAILING LIST. THE LIST ARCHIVES ALSO CONTAIN INFORMATION ABOUT " +"PROBLEMS FACED BY OTHER USERS AND POSSIBLE SOLUTIONS." #: plinth/modules/help/templates/help_index.html:53 +#, python-format msgid "" -"Many FreedomBox contributors and users are also available on the #freedombox " -"channel of the irc.oftc.net IRC network." -msgstr "" -"MANY FREEDOMBOX CONTRIBUTORS AND USERS ARE ALSO AVAILABLE ON THE #FREEDOMBOX " -"CHANNEL OF THE IRC.OFTC.NET IRC NETWORK." +"Many %(box_name)s contributors and users are also available on the irc.oftc." +"net IRC network. Join and request help on the #freedombox " +"channel using the IRC web interface." +msgstr "" +"MANY %(box_name)s CONTRIBUTORS AND USERS ARE ALSO AVAILABLE ON THE IRC.OFTC." +"NET IRC NETWORK. JOIN AND REQUEST HELP ON THE #FREEDOMBOX " +"CHANNEL USING THE IRC WEB INTERFACE." #: plinth/modules/ikiwiki/__init__.py:38 -msgid "Wiki & Blog (Ikiwiki)" -msgstr "WIKI & BLOG (IKIWIKI)" +msgid "Wiki and Blog (ikiwiki)" +msgstr "WIKI AND BLOG (IKIWIKI)" #: plinth/modules/ikiwiki/__init__.py:43 -msgid "Ikiwiki wikis and blogs" +msgid "ikiwiki wikis and blogs" msgstr "IKIWIKI WIKIS AND BLOGS" #: plinth/modules/ikiwiki/forms.py:29 -msgid "Enable Ikiwiki" +msgid "Enable ikiwiki" msgstr "ENABLE IKIWIKI" #: plinth/modules/ikiwiki/forms.py:36 @@ -1007,23 +1049,24 @@ #: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:27 #, python-format -msgid "Delete Wiki/Blog %(name)s" -msgstr "DELETE WIKI/BLOG %(name)s" +msgid "Delete Wiki or Blog %(name)s" +msgstr "DELETE WIKI OR BLOG %(name)s" #: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:33 msgid "" "This action will remove all the posts, pages and comments including revision " -"history. Delete this wiki/blog permanently?" +"history. Delete this wiki or blog permanently?" msgstr "" "THIS ACTION WILL REMOVE ALL THE POSTS, PAGES AND COMMENTS INCLUDING REVISION " -"HISTORY. DELETE THIS WIKI/BLOG PERMANENTLY?" +"HISTORY. DELETE THIS WIKI OR BLOG PERMANENTLY?" -#: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:43 +#: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:44 #, python-format msgid "Delete %(name)s" msgstr "DELETE %(name)s" -#: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:46 +#: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:47 +#: plinth/modules/monkeysphere/templates/monkeysphere.html:60 #: plinth/modules/networks/templates/connections_delete.html:41 #: plinth/modules/users/templates/users_delete.html:41 msgid "Cancel" @@ -1056,16 +1099,16 @@ msgstr "CREATE" #: plinth/modules/ikiwiki/views.py:73 -msgid "Wiki & Blog" -msgstr "WIKI & BLOG" +msgid "Wiki and Blog" +msgstr "WIKI AND BLOG" #: plinth/modules/ikiwiki/views.py:106 msgid "Manage Wikis and Blogs" msgstr "MANAGE WIKIS AND BLOGS" #: plinth/modules/ikiwiki/views.py:132 -msgid "Create Wiki/Blog" -msgstr "CREATE WIKI/BLOG" +msgid "Create Wiki or Blog" +msgstr "CREATE WIKI OR BLOG" #: plinth/modules/ikiwiki/views.py:145 #, python-brace-format @@ -1098,8 +1141,162 @@ msgstr "COULD NOT DELETE {name}: {error}" #: plinth/modules/ikiwiki/views.py:182 -msgid "Delete Wiki/Blog" -msgstr "DELETE WIKI/BLOG" +msgid "Delete Wiki or Blog" +msgstr "DELETE WIKI OR BLOG" + +#: plinth/modules/letsencrypt/__init__.py:43 +#: plinth/modules/letsencrypt/templates/letsencrypt.html:38 +#: plinth/modules/letsencrypt/views.py:45 +msgid "Certificates (Let's Encrypt)" +msgstr "CERTIFICATES (LET'S ENCRYPT)" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:41 +#, python-format +msgid "" +"A digital certficate allows users of a web service to verify the identity of " +"the service and to securely communicate with it. %(box_name)s can " +"automatically obtain and setup digital certificates for each available " +"domain. It does so by proving itself to be the owner of a domain to Let's " +"Encrypt, a certficate authority (CA)." +msgstr "" +"A DIGITAL CERTFICATE ALLOWS USERS OF A WEB SERVICE TO VERIFY THE IDENTITY OF " +"THE SERVICE AND TO SECURELY COMMUNICATE WITH IT. %(box_name)s CAN " +"AUTOMATICALLY OBTAIN AND SETUP DIGITAL CERTIFICATES FOR EACH AVAILABLE " +"DOMAIN. IT DOES SO BY PROVING ITSELF TO BE THE OWNER OF A DOMAIN TO LET'S " +"ENCRYPT, A CERTFICATE AUTHORITY (CA)." + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:52 +msgid "" +"Let's Encrypt is a free, automated, and open certificate authority, run for " +"the public’s benefit by the Internet Security Research Group (ISRG). Please " +"read and agree with the Let's Encrypt Subscriber Agreement before using this service." +msgstr "" +"LET'S ENCRYPT IS A FREE, AUTOMATED, AND OPEN CERTIFICATE AUTHORITY, RUN FOR " +"THE PUBLIC’S BENEFIT BY THE INTERNET SECURITY RESEARCH GROUP (ISRG). PLEASE " +"READ AND AGREE WITH THE LET'S ENCRYPT SUBSCRIBER AGREEMENT BEFORE USING THIS SERVICE." + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:66 +#: plinth/modules/monkeysphere/templates/monkeysphere.html:70 +msgid "Domain" +msgstr "DOMAIN" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:67 +msgid "Certificate Status" +msgstr "CERTIFICATE STATUS" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:68 +msgid "Website Security" +msgstr "WEBSITE SECURITY" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:69 +#: plinth/modules/monkeysphere/templates/monkeysphere.html:72 +msgid "Actions" +msgstr "ACTIONS" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:79 +#, python-format +msgid "Expires on %(expiry_date)s" +msgstr "EXPIRES ON %(expiry_date)s" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:85 +msgid "No certficate" +msgstr "NO CERTFICATE" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:102 +msgid "Revoke" +msgstr "REVOKE" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:108 +msgid "Re-obtain" +msgstr "RE-OBTAIN" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:115 +msgid "Obtain" +msgstr "OBTAIN" + +#: plinth/modules/letsencrypt/views.py:55 +#, python-brace-format +msgid "Certificate successfully revoked for domain {domain}" +msgstr "CERTIFICATE SUCCESSFULLY REVOKED FOR DOMAIN {domain}" + +#: plinth/modules/letsencrypt/views.py:60 +#, python-brace-format +msgid "Failed to revoke certificate for domain {domain}: {error}" +msgstr "FAILED TO REVOKE CERTIFICATE FOR DOMAIN {domain}: {error}" + +#: plinth/modules/letsencrypt/views.py:72 +#, python-brace-format +msgid "Certificate successfully obtained for domain {domain}" +msgstr "CERTIFICATE SUCCESSFULLY OBTAINED FOR DOMAIN {domain}" + +#: plinth/modules/letsencrypt/views.py:77 +#, python-brace-format +msgid "Failed to obtain certificate for domain {domain}: {error}" +msgstr "FAILED TO OBTAIN CERTIFICATE FOR DOMAIN {domain}: {error}" + +#: plinth/modules/monkeysphere/__init__.py:32 +#: plinth/modules/monkeysphere/templates/monkeysphere.html:35 +#: plinth/modules/monkeysphere/views.py:44 +msgid "Monkeysphere" +msgstr "MONKEYSPHERE" + +#: plinth/modules/monkeysphere/templates/monkeysphere.html:38 +msgid "" +"With Monkeysphere, a PGP key can be generated for each configured domain " +"serving SSH. The PGP public key can then be uploaded to the PGP keyservers. " +"Users connecting to this machine through SSH can verify that they are " +"connecting to the correct host. For users to trust the key, at least one " +"person (usually the machine owner) must sign the key using the regular PGP " +"key signing process. See the Monkeysphere SSH documentation for more details." +msgstr "" +"WITH MONKEYSPHERE, A PGP KEY CAN BE GENERATED FOR EACH CONFIGURED DOMAIN " +"SERVING SSH. THE PGP PUBLIC KEY CAN THEN BE UPLOADED TO THE PGP KEYSERVERS. " +"USERS CONNECTING TO THIS MACHINE THROUGH SSH CAN VERIFY THAT THEY ARE " +"CONNECTING TO THE CORRECT HOST. FOR USERS TO TRUST THE KEY, AT LEAST ONE " +"PERSON (USUALLY THE MACHINE OWNER) MUST SIGN THE KEY USING THE REGULAR PGP " +"KEY SIGNING PROCESS. SEE THE MONKEYSPHERE SSH DOCUMENTATION FOR MORE " +"DETAILS." + +#: plinth/modules/monkeysphere/templates/monkeysphere.html:53 +msgid "Publishing key to keyserver..." +msgstr "PUBLISHING KEY TO KEYSERVER..." + +#: plinth/modules/monkeysphere/templates/monkeysphere.html:71 +msgid "GPG Fingerprint" +msgstr "GPG FINGERPRINT" + +#: plinth/modules/monkeysphere/templates/monkeysphere.html:83 +#: plinth/modules/names/views.py:45 +msgid "Not Available" +msgstr "NOT AVAILABLE" + +#: plinth/modules/monkeysphere/templates/monkeysphere.html:93 +msgid "Generate PGP Key" +msgstr "GENERATE PGP KEY" + +#: plinth/modules/monkeysphere/templates/monkeysphere.html:101 +msgid "Publish Key" +msgstr "PUBLISH KEY" + +#: plinth/modules/monkeysphere/views.py:58 +msgid "Generated PGP key." +msgstr "GENERATED PGP KEY." + +#: plinth/modules/monkeysphere/views.py:83 +msgid "Cancelled key publishing." +msgstr "CANCELLED KEY PUBLISHING." + +#: plinth/modules/monkeysphere/views.py:120 +msgid "Published key to keyserver." +msgstr "PUBLISHED KEY TO KEYSERVER." + +#: plinth/modules/monkeysphere/views.py:122 +msgid "Error occurred while publishing key." +msgstr "ERROR OCCURRED WHILE PUBLISHING KEY." #: plinth/modules/mumble/__init__.py:38 #: plinth/modules/mumble/templates/mumble.html:26 @@ -1141,61 +1338,48 @@ msgid "Mumble server is not running" msgstr "MUMBLE SERVER IS NOT RUNNING" -#: plinth/modules/names/__init__.py:30 +#: plinth/modules/names/__init__.py:29 msgid "HTTP" msgstr "HTTP" -#: plinth/modules/names/__init__.py:31 +#: plinth/modules/names/__init__.py:30 msgid "HTTPS" msgstr "HTTPS" -#: plinth/modules/names/__init__.py:32 +#: plinth/modules/names/__init__.py:31 msgid "SSH" msgstr "SSH" -#: plinth/modules/names/__init__.py:46 plinth/modules/names/views.py:34 +#: plinth/modules/names/__init__.py:45 plinth/modules/names/views.py:34 msgid "Name Services" msgstr "NAME SERVICES" -#: plinth/modules/names/__init__.py:107 -msgid "Not Available" -msgstr "NOT AVAILABLE" - #: plinth/modules/networks/__init__.py:108 #, python-brace-format msgid "Using DNSSEC on IPv{kind}" msgstr "USING DNSSEC ON IPV{kind}" #: plinth/modules/networks/forms.py:30 -msgid "-- select --" -msgstr "-- SELECT --" - -#: plinth/modules/networks/forms.py:42 msgid "Connection Type" msgstr "CONNECTION TYPE" -#: plinth/modules/networks/forms.py:49 plinth/modules/networks/forms.py:106 -#: plinth/modules/networks/forms.py:133 +#: plinth/modules/networks/forms.py:37 msgid "Connection Name" msgstr "CONNECTION NAME" -#: plinth/modules/networks/forms.py:51 plinth/modules/networks/forms.py:108 -#: plinth/modules/networks/forms.py:135 +#: plinth/modules/networks/forms.py:39 msgid "Physical Interface" msgstr "PHYSICAL INTERFACE" -#: plinth/modules/networks/forms.py:53 plinth/modules/networks/forms.py:110 -#: plinth/modules/networks/forms.py:137 +#: plinth/modules/networks/forms.py:41 msgid "The network device that this connection should be bound to." msgstr "THE NETWORK DEVICE THAT THIS CONNECTION SHOULD BE BOUND TO." -#: plinth/modules/networks/forms.py:56 plinth/modules/networks/forms.py:113 -#: plinth/modules/networks/forms.py:140 +#: plinth/modules/networks/forms.py:44 msgid "Firewall Zone" msgstr "FIREWALL ZONE" -#: plinth/modules/networks/forms.py:57 plinth/modules/networks/forms.py:114 -#: plinth/modules/networks/forms.py:141 +#: plinth/modules/networks/forms.py:45 msgid "" "The firewall zone will control which services are available over this " "interfaces. Select Internal only for trusted networks." @@ -1203,11 +1387,11 @@ "THE FIREWALL ZONE WILL CONTROL WHICH SERVICES ARE AVAILABLE OVER THIS " "INTERFACES. SELECT INTERNAL ONLY FOR TRUSTED NETWORKS." -#: plinth/modules/networks/forms.py:61 plinth/modules/networks/forms.py:162 +#: plinth/modules/networks/forms.py:49 msgid "IPv4 Addressing Method" msgstr "IPV4 ADDRESSING METHOD" -#: plinth/modules/networks/forms.py:62 +#: plinth/modules/networks/forms.py:50 msgid "" "\"Shared\" method will start a DHCP server and \"Automatic\" method will " "acquire configuration from a DHCP server." @@ -1215,15 +1399,15 @@ "\"SHARED\" METHOD WILL START A DHCP SERVER AND \"AUTOMATIC\" METHOD WILL " "ACQUIRE CONFIGURATION FROM A DHCP SERVER." -#: plinth/modules/networks/forms.py:68 plinth/modules/networks/forms.py:170 +#: plinth/modules/networks/forms.py:56 msgid "Address" msgstr "ADDRESS" -#: plinth/modules/networks/forms.py:72 plinth/modules/networks/forms.py:174 +#: plinth/modules/networks/forms.py:60 msgid "Netmask" msgstr "NETMASK" -#: plinth/modules/networks/forms.py:73 plinth/modules/networks/forms.py:175 +#: plinth/modules/networks/forms.py:61 msgid "" "Optional value. If left blank, a default netmask based on the address will " "be used." @@ -1231,21 +1415,21 @@ "OPTIONAL VALUE. IF LEFT BLANK, A DEFAULT NETMASK BASED ON THE ADDRESS WILL " "BE USED." -#: plinth/modules/networks/forms.py:78 plinth/modules/networks/forms.py:180 +#: plinth/modules/networks/forms.py:66 #: plinth/modules/networks/templates/connection_show.html:202 #: plinth/modules/networks/templates/connection_show.html:241 msgid "Gateway" msgstr "GATEWAY" -#: plinth/modules/networks/forms.py:79 plinth/modules/networks/forms.py:181 +#: plinth/modules/networks/forms.py:67 msgid "Optional value." msgstr "OPTIONAL VALUE." -#: plinth/modules/networks/forms.py:83 plinth/modules/networks/forms.py:185 +#: plinth/modules/networks/forms.py:71 msgid "DNS Server" msgstr "DNS SERVER" -#: plinth/modules/networks/forms.py:84 plinth/modules/networks/forms.py:186 +#: plinth/modules/networks/forms.py:72 msgid "" "Optional value. If this value is given and IPv4 addressing method is " "\"Automatic\", the DNS Servers provided by a DHCP server will be ignored." @@ -1253,11 +1437,11 @@ "OPTIONAL VALUE. IF THIS VALUE IS GIVEN AND IPV4 ADDRESSING METHOD IS " "\"AUTOMATIC\", THE DNS SERVERS PROVIDED BY A DHCP SERVER WILL BE IGNORED." -#: plinth/modules/networks/forms.py:90 plinth/modules/networks/forms.py:192 +#: plinth/modules/networks/forms.py:78 msgid "Second DNS Server" msgstr "SECOND DNS SERVER" -#: plinth/modules/networks/forms.py:91 plinth/modules/networks/forms.py:193 +#: plinth/modules/networks/forms.py:79 msgid "" "Optional value. If this value is given and IPv4 Addressing Method is " "\"Automatic\", the DNS Servers provided by a DHCP server will be ignored." @@ -1265,29 +1449,29 @@ "OPTIONAL VALUE. IF THIS VALUE IS GIVEN AND IPV4 ADDRESSING METHOD IS " "\"AUTOMATIC\", THE DNS SERVERS PROVIDED BY A DHCP SERVER WILL BE IGNORED." -#: plinth/modules/networks/forms.py:121 -msgid "Show password" -msgstr "SHOW PASSWORD" +#: plinth/modules/networks/forms.py:89 +msgid "-- select --" +msgstr "-- SELECT --" -#: plinth/modules/networks/forms.py:145 +#: plinth/modules/networks/forms.py:175 #: plinth/modules/networks/templates/connection_show.html:144 msgid "SSID" msgstr "SSID" -#: plinth/modules/networks/forms.py:146 +#: plinth/modules/networks/forms.py:176 msgid "The visible name of the network." msgstr "THE VISIBLE NAME OF THE NETWORK." -#: plinth/modules/networks/forms.py:148 +#: plinth/modules/networks/forms.py:178 #: plinth/modules/networks/templates/connection_show.html:157 msgid "Mode" msgstr "MODE" -#: plinth/modules/networks/forms.py:153 +#: plinth/modules/networks/forms.py:183 msgid "Authentication Mode" msgstr "AUTHENTICATION MODE" -#: plinth/modules/networks/forms.py:154 +#: plinth/modules/networks/forms.py:184 msgid "" "Select WPA if the wireless network is secured and requires clients to have " "the password to connect." @@ -1295,30 +1479,22 @@ "SELECT WPA IF THE WIRELESS NETWORK IS SECURED AND REQUIRES CLIENTS TO HAVE " "THE PASSWORD TO CONNECT." -#: plinth/modules/networks/forms.py:158 +#: plinth/modules/networks/forms.py:188 msgid "Passphrase" msgstr "PASSPHRASE" -#: plinth/modules/networks/forms.py:166 -msgid "" -"Select Automatic (DHCP) if you are connecting to an existing wireless " -"network. Shared mode is useful when running an Access Point." -msgstr "" -"SELECT AUTOMATIC (DHCP) IF YOU ARE CONNECTING TO AN EXISTING WIRELESS " -"NETWORK. SHARED MODE IS USEFUL WHEN RUNNING AN ACCESS POINT." - #: plinth/modules/networks/networks.py:36 #: plinth/modules/networks/networks.py:56 msgid "Network Connections" msgstr "NETWORK CONNECTIONS" #: plinth/modules/networks/networks.py:38 -#: plinth/modules/networks/networks.py:273 +#: plinth/modules/networks/networks.py:242 msgid "Nearby Wi-Fi Networks" msgstr "NEARBY WI-FI NETWORKS" #: plinth/modules/networks/networks.py:40 -#: plinth/modules/networks/networks.py:295 +#: plinth/modules/networks/networks.py:264 msgid "Add Connection" msgstr "ADD CONNECTION" @@ -1342,58 +1518,58 @@ msgid "This type of connection is not yet understood." msgstr "THIS TYPE OF CONNECTION IS NOT YET UNDERSTOOD." -#: plinth/modules/networks/networks.py:170 -#: plinth/modules/networks/networks.py:229 +#: plinth/modules/networks/networks.py:139 +#: plinth/modules/networks/networks.py:198 #: plinth/modules/networks/templates/connections_edit.html:34 msgid "Edit Connection" msgstr "EDIT CONNECTION" -#: plinth/modules/networks/networks.py:240 +#: plinth/modules/networks/networks.py:209 #, python-brace-format msgid "Activated connection {name}." msgstr "ACTIVATED CONNECTION {name}." -#: plinth/modules/networks/networks.py:243 +#: plinth/modules/networks/networks.py:212 msgid "Failed to activate connection: Connection not found." msgstr "FAILED TO ACTIVATE CONNECTION: CONNECTION NOT FOUND." -#: plinth/modules/networks/networks.py:247 +#: plinth/modules/networks/networks.py:216 #, python-brace-format msgid "Failed to activate connection {name}: No suitable device is available." msgstr "FAILED TO ACTIVATE CONNECTION {name}: NO SUITABLE DEVICE IS AVAILABLE." -#: plinth/modules/networks/networks.py:260 +#: plinth/modules/networks/networks.py:229 #, python-brace-format msgid "Deactivated connection {name}." msgstr "DEACTIVATED CONNECTION {name}." -#: plinth/modules/networks/networks.py:263 +#: plinth/modules/networks/networks.py:232 msgid "Failed to de-activate connection: Connection not found." msgstr "FAILED TO DE-ACTIVATE CONNECTION: CONNECTION NOT FOUND." -#: plinth/modules/networks/networks.py:325 +#: plinth/modules/networks/networks.py:282 msgid "Adding New Ethernet Connection" msgstr "ADDING NEW ETHERNET CONNECTION" -#: plinth/modules/networks/networks.py:350 +#: plinth/modules/networks/networks.py:300 msgid "Adding New PPPoE Connection" msgstr "ADDING NEW PPPOE CONNECTION" -#: plinth/modules/networks/networks.py:399 +#: plinth/modules/networks/networks.py:332 msgid "Adding New Wi-Fi Connection" msgstr "ADDING NEW WI-FI CONNECTION" -#: plinth/modules/networks/networks.py:413 +#: plinth/modules/networks/networks.py:346 #, python-brace-format msgid "Connection {name} deleted." msgstr "CONNECTION {name} DELETED." -#: plinth/modules/networks/networks.py:416 -#: plinth/modules/networks/networks.py:425 +#: plinth/modules/networks/networks.py:349 +#: plinth/modules/networks/networks.py:358 msgid "Failed to delete connection: Connection not found." msgstr "FAILED TO DELETE CONNECTION: CONNECTION NOT FOUND." -#: plinth/modules/networks/networks.py:430 +#: plinth/modules/networks/networks.py:363 #: plinth/modules/networks/templates/connections_delete.html:26 msgid "Delete Connection" msgstr "DELETE CONNECTION" @@ -1403,7 +1579,7 @@ msgstr "EDIT CONNECTION" #: plinth/modules/networks/templates/connection_show.html:43 -#: plinth/templates/base.html:119 +#: plinth/templates/base.html:123 msgid "Edit" msgstr "EDIT" @@ -1550,34 +1726,35 @@ #: plinth/modules/networks/templates/connection_show.html:280 msgid "" -"This interface should be connected to local network/machine. If you connect " -"this interface to a public network, services meant to be available only " -"internally will become available externally. This is a security risk." -msgstr "" -"THIS INTERFACE SHOULD BE CONNECTED TO LOCAL NETWORK/MACHINE. IF YOU CONNECT " -"THIS INTERFACE TO A PUBLIC NETWORK, SERVICES MEANT TO BE AVAILABLE ONLY " -"INTERNALLY WILL BECOME AVAILABLE EXTERNALLY. THIS IS A SECURITY RISK." +"This interface should be connected to a local network/machine. If you " +"connect this interface to a public network, services meant to be available " +"only internally will become available externally. This is a security risk." +msgstr "" +"THIS INTERFACE SHOULD BE CONNECTED TO A LOCAL NETWORK/MACHINE. IF YOU " +"CONNECT THIS INTERFACE TO A PUBLIC NETWORK, SERVICES MEANT TO BE AVAILABLE " +"ONLY INTERNALLY WILL BECOME AVAILABLE EXTERNALLY. THIS IS A SECURITY RISK." #: plinth/modules/networks/templates/connection_show.html:300 msgid "" -"This interface should receive your Internet connection. If you connect it " -"your a local network/machine, many services meant to available only " -"internally will not be available." +"This interface should receive your Internet connection. If you connect it to " +"a local network/machine, many services meant to available only internally " +"will not be available." msgstr "" "THIS INTERFACE SHOULD RECEIVE YOUR INTERNET CONNECTION. IF YOU CONNECT IT " "YOUR A LOCAL NETWORK/MACHINE, MANY SERVICES MEANT TO AVAILABLE ONLY " "INTERNALLY WILL NOT BE AVAILABLE." #: plinth/modules/networks/templates/connection_show.html:319 +#, python-format msgid "" -"This interface is not maintained by FreedomBox. Its security status is " -"unknown to FreedomBox. Many FreedomBox services may not be available on " -"this interface. It is recommended that you deactivate/delete this " +"This interface is not maintained by %(box_name)s. Its security status is " +"unknown to %(box_name)s. Many %(box_name)s services may not be available on " +"this interface. It is recommended that you deactivate or delete this " "connection and re-configure it." msgstr "" -"THIS INTERFACE IS NOT MAINTAINED BY FREEDOMBOX. ITS SECURITY STATUS IS " -"UNKNOWN TO FREEDOMBOX. MANY FREEDOMBOX SERVICES MAY NOT BE AVAILABLE ON " -"THIS INTERFACE. IT IS RECOMMENDED THAT YOU DEACTIVATE/DELETE THIS " +"THIS INTERFACE IS NOT MAINTAINED BY %(box_name)s. ITS SECURITY STATUS IS " +"UNKNOWN TO %(box_name)s. MANY %(box_name)s SERVICES MAY NOT BE AVAILABLE ON " +"THIS INTERFACE. IT IS RECOMMENDED THAT YOU DEACTIVATE OR DELETE THIS " "CONNECTION AND RE-CONFIGURE IT." #: plinth/modules/networks/templates/connections_add.html:34 @@ -1668,14 +1845,14 @@ #, python-format msgid "" "Virtual Private Network (VPN) is a technique for securely connecting two " -"machines in order to access resources of a private network. While you are " +"devices in order to access resources of a private network. While you are " "away from home, you can connect to your %(box_name)s in order to join your " "home network and access private/internal services provided by %(box_name)s. " "You can also access the rest of the Internet via %(box_name)s for added " "security and anonymity." msgstr "" "VIRTUAL PRIVATE NETWORK (VPN) IS A TECHNIQUE FOR SECURELY CONNECTING TWO " -"MACHINES IN ORDER TO ACCESS RESOURCES OF A PRIVATE NETWORK. WHILE YOU ARE " +"DEVICES IN ORDER TO ACCESS RESOURCES OF A PRIVATE NETWORK. WHILE YOU ARE " "AWAY FROM HOME, YOU CAN CONNECT TO YOUR %(box_name)s IN ORDER TO JOIN YOUR " "HOME NETWORK AND ACCESS PRIVATE/INTERNAL SERVICES PROVIDED BY %(box_name)s. " "YOU CAN ALSO ACCESS THE REST OF THE INTERNET VIA %(box_name)s FOR ADDED " @@ -1691,14 +1868,14 @@ "To connect to %(box_name)s's VPN, you need to download a profile and feed it " "to an OpenVPN client on your mobile or desktop machine. OpenVPN Clients are " "available for most platforms. See documentation on recommended clients and instructions on how to " "configure them." msgstr "" "TO CONNECT TO %(box_name)s's VPN, YOU NEED TO DOWNLOAD A PROFILE AND FEED IT " "TO AN OPENVPN CLIENT ON YOUR MOBILE OR DESKTOP MACHINE. OPENVPN CLIENTS ARE " "AVAILABLE FOR MOST PLATFORMS. SEE DOCUMENTATION ON RECOMMENDED CLIENTS AND INSTRUCTIONS ON HOW TO " "CONFIGURE THEM." @@ -2237,6 +2414,54 @@ msgid "Quassel core service is not running" msgstr "QUASSEL CORE SERVICE IS NOT RUNNING" +#: plinth/modules/repro/__init__.py:36 +#: plinth/modules/repro/templates/repro.html:26 +#: plinth/modules/repro/views.py:55 +msgid "SIP Server (repro)" +msgstr "SIP SERVER (REPRO)" + +#: plinth/modules/repro/__init__.py:41 +msgid "repro SIP Server" +msgstr "REPRO SIP SERVER" + +#: plinth/modules/repro/forms.py:29 +msgid "Enable repro service" +msgstr "ENABLE REPRO SERVICE" + +#: plinth/modules/repro/templates/repro.html:29 +msgid "" +"repro provides various SIP services that a SIP softphone can utilize to " +"provide audio and video calls as well as presence and instant messaging. " +"repro provides a server and SIP user accounts that clients can use to let " +"their presence known. It also acts as a proxy to federate SIP " +"communications to other servers on the Internet similar to email." +msgstr "REPRO PROVIDES VARIOUS SIP SERVICES THAT A SIP SOFTPHONE CAN UTILIZE TO PROVIDE AUDIO AND VIDEO CALLS AS WELL AS PRESENCE AND INSTANT MESSAGING. REPRO PROVIDES A SERVER AND SIP USER ACCOUNTS THAT CLIENTS CAN USE TO LET THEIR PRESENCE KNOWN. IT ALSO ACTS AS A PROXY TO FEDERATE SIP COMMUNICATIONS TO OTHER SERVERS ON THE INTERNET SIMILAR TO EMAIL." + +#: plinth/modules/repro/templates/repro.html:39 +msgid "" +"To make SIP calls, a client application is needed. Available clients include " +"Jitsi (for computers) and CSipSimple (for Android phones)." +msgstr "TO MAKE SIP CALLS, A CLIENT APPLICATION IS NEEDED. AVAILABLE CLIENTS INCLUDE JITSI (FOR COMPUTERS) AND CSIPSIMPLE (FOR ANDROID PHONES)." + +#: plinth/modules/repro/templates/repro.html:48 +msgid "" +"Note: Before using repro, domains and users will need to " +"be configured using the web-based " +"configuration panel. Users in the admin group will be able to " +"log in to the repro configuration panel. After setting the domain, it is " +"required to restart the repro service. Disable the service and re-enable it." +msgstr "NOTE: BEFORE USING REPRO, DOMAINS AND USERS WILL NEED TO BE CONFIGURED USING THE WEB-BASED CONFIGURATION PANEL. USERS IN THE ADMIN GROUP WILL BE ABLE TO LOG IN TO THE REPRO CONFIGURATION PANEL. AFTER SETTING THE DOMAIN, IT IS REQUIRED TO RESTART THE REPRO SERVICE. DISABLE THE SERVICE AND RE-ENABLE IT." + +#: plinth/modules/repro/templates/repro.html:63 +msgid "repro service is running" +msgstr "REPRO SERVICE IS RUNNING" + +#: plinth/modules/repro/templates/repro.html:66 +msgid "repro service is not running" +msgstr "REPRO SERVICE IS NOT RUNNING" + #: plinth/modules/restore/__init__.py:36 #: plinth/modules/restore/templates/restore_index.html:26 #: plinth/modules/restore/views.py:46 @@ -2257,14 +2482,14 @@ "reStore is a server for unhosted web " "applications. The idea is to uncouple web applications from data. No " "matter where a web application is served from, the data can be stored on an " -"unhosted storage server of user's choice. With reStore, your " -"%(cfg.box_name)s becomes your unhosted storage server." +"unhosted storage server of user's choice. With reStore, your %(box_name)s " +"becomes your unhosted storage server." msgstr "" "RESTORE IS A SERVER FOR UNHOSTED WEB " "APPLICATIONS. THE IDEA IS TO UNCOUPLE WEB APPLICATIONS FROM DATA. NO " "MATTER WHERE A WEB APPLICATION IS SERVED FROM, THE DATA CAN BE STORED ON AN " -"UNHOSTED STORAGE SERVER OF USER'S CHOICE. WITH RESTORE, YOUR " -"%(cfg.box_name)s BECOMES YOUR UNHOSTED STORAGE SERVER." +"UNHOSTED STORAGE SERVER OF USER'S CHOICE. WITH RESTORE, YOUR %(box_name)s " +"BECOMES YOUR UNHOSTED STORAGE SERVER." #: plinth/modules/restore/templates/restore_index.html:40 msgid "" @@ -2360,7 +2585,7 @@ #: plinth/modules/system/system.py:33 #: plinth/modules/system/templates/system.html:25 -#: plinth/templates/base.html:105 +#: plinth/templates/base.html:109 msgid "System Configuration" msgstr "SYSTEM CONFIGURATION" @@ -2376,33 +2601,76 @@ msgstr "" "THE OPTIONS AFFECT THE %(box_name)s AT ITS MOST GENERAL LEVEL, SO BE CAREFUL!" -#: plinth/modules/tor/__init__.py:50 +#: plinth/modules/tor/__init__.py:48 plinth/modules/tor/templates/tor.html:35 +msgid "Anonymity Network (Tor)" +msgstr "ANONYMITY NETWORK (TOR)" + +#: plinth/modules/tor/__init__.py:53 +msgid "Tor Anonymity Network" +msgstr "TOR ANONYMITY NETWORK" + +#: plinth/modules/tor/__init__.py:58 +msgid "Tor Bridge Relay" +msgstr "TOR BRIDGE RELAY" + +#: plinth/modules/tor/__init__.py:76 plinth/modules/tor/views.py:144 +msgid "Tor Hidden Service" +msgstr "TOR HIDDEN SERVICE" + +#: plinth/modules/tor/__init__.py:222 msgid "Tor relay port available" msgstr "TOR RELAY PORT AVAILABLE" -#: plinth/modules/tor/__init__.py:58 +#: plinth/modules/tor/__init__.py:230 msgid "Obfs3 transport registered" msgstr "OBFS3 TRANSPORT REGISTERED" -#: plinth/modules/tor/__init__.py:64 +#: plinth/modules/tor/__init__.py:236 msgid "Obfs4 transport registered" msgstr "OBFS4 TRANSPORT REGISTERED" -#: plinth/modules/tor/__init__.py:101 +#: plinth/modules/tor/__init__.py:273 #, python-brace-format msgid "Access URL {url} on tcp{kind} via Tor" msgstr "ACCESS URL {url} ON TCP{kind} VIA TOR" -#: plinth/modules/tor/__init__.py:112 +#: plinth/modules/tor/__init__.py:284 #, python-brace-format msgid "Confirm Tor usage at {url} on tcp{kind}" msgstr "CONFIRM TOR USAGE AT {url} ON TCP{kind}" -#: plinth/modules/tor/templates/tor.html:26 plinth/modules/tor/tor.py:66 -msgid "Anonymity Network (Tor)" -msgstr "ANONYMITY NETWORK (TOR)" +#: plinth/modules/tor/forms.py:32 +msgid "Enable Tor" +msgstr "ENABLE TOR" + +#: plinth/modules/tor/forms.py:35 +msgid "Enable Tor Hidden Service" +msgstr "ENABLE TOR HIDDEN SERVICE" -#: plinth/modules/tor/templates/tor.html:29 +#: plinth/modules/tor/forms.py:38 +#, python-brace-format +msgid "" +"A hidden service will allow {box_name} to provide selected services (such as " +"ownCloud or chat) without revealing its location." +msgstr "" +"A HIDDEN SERVICE WILL ALLOW {box_name} TO PROVIDE SELECTED SERVICES (SUCH AS " +"OWNCLOUD OR CHAT) WITHOUT REVEALING ITS LOCATION." + +#: plinth/modules/tor/forms.py:42 +msgid "Download software packages over Tor" +msgstr "DOWNLOAD SOFTWARE PACKAGES OVER TOR" + +#: plinth/modules/tor/forms.py:44 +msgid "" +"When enabled, software will be downloaded over the Tor network for " +"installations and upgrades. This adds a degree of privacy and security " +"during software downloads." +msgstr "" +"WHEN ENABLED, SOFTWARE WILL BE DOWNLOADED OVER THE TOR NETWORK FOR " +"INSTALLATIONS AND UPGRADES. THIS ADDS A DEGREE OF PRIVACY AND SECURITY " +"DURING SOFTWARE DOWNLOADS." + +#: plinth/modules/tor/templates/tor.html:38 msgid "" "Tor is an anonymous communication system. You can learn more about it from " "the Tor Project website. For " @@ -2416,28 +2684,32 @@ "THE " "TOR BROWSER." -#: plinth/modules/tor/templates/tor.html:44 +#: plinth/modules/tor/templates/tor.html:54 +msgid "Tor configuration is being updated" +msgstr "TOR CONFIGURATION IS BEING UPDATED" + +#: plinth/modules/tor/templates/tor.html:62 msgid "Tor is running" msgstr "TOR IS RUNNING" -#: plinth/modules/tor/templates/tor.html:47 +#: plinth/modules/tor/templates/tor.html:65 msgid "Tor is not running" msgstr "TOR IS NOT RUNNING" -#: plinth/modules/tor/templates/tor.html:59 +#: plinth/modules/tor/templates/tor.html:77 msgid "Hidden Service" msgstr "HIDDEN SERVICE" -#: plinth/modules/tor/templates/tor.html:60 -#: plinth/modules/tor/templates/tor.html:102 +#: plinth/modules/tor/templates/tor.html:78 +#: plinth/modules/tor/templates/tor.html:120 msgid "Port" msgstr "PORT" -#: plinth/modules/tor/templates/tor.html:85 +#: plinth/modules/tor/templates/tor.html:103 msgid "Bridge" msgstr "BRIDGE" -#: plinth/modules/tor/templates/tor.html:88 +#: plinth/modules/tor/templates/tor.html:106 #, python-format msgid "" "Your %(box_name)s is configured as a Tor bridge with obfsproxy, so it can " @@ -2450,89 +2722,39 @@ "FIREWALL, YOU SHOULD MAKE SURE THE FOLLOWING PORTS ARE OPEN, AND PORT-" "FORWARDED, IF NECESSARY:" -#: plinth/modules/tor/templates/tor.html:101 +#: plinth/modules/tor/templates/tor.html:119 msgid "Service" msgstr "SERVICE" -#: plinth/modules/tor/templates/tor.html:117 +#: plinth/modules/tor/templates/tor.html:135 msgid "SOCKS" msgstr "SOCKS" -#: plinth/modules/tor/templates/tor.html:120 +#: plinth/modules/tor/templates/tor.html:138 #, python-format msgid "A Tor SOCKS port is available on your %(box_name)s on TCP port 9050." msgstr "A TOR SOCKS PORT IS AVAILABLE ON YOUR %(box_name)s ON TCP PORT 9050." -#: plinth/modules/tor/tor.py:46 -msgid "Enable Tor" -msgstr "ENABLE TOR" - -#: plinth/modules/tor/tor.py:49 -msgid "Enable Tor Hidden Service" -msgstr "ENABLE TOR HIDDEN SERVICE" - -#: plinth/modules/tor/tor.py:51 -msgid "" -"A hidden service will allow FreedomBox to provide selected services (such as " -"ownCloud or Chat) without revealing its location." -msgstr "" -"A HIDDEN SERVICE WILL ALLOW FREEDOMBOX TO PROVIDE SELECTED SERVICES (SUCH AS " -"OWNCLOUD OR CHAT) WITHOUT REVEALING ITS LOCATION." - -#: plinth/modules/tor/tor.py:55 -msgid "Download software packages over Tor" -msgstr "DOWNLOAD SOFTWARE PACKAGES OVER TOR" - -#: plinth/modules/tor/tor.py:57 -msgid "" -"When enabled, software will be downloaded over the Tor network for " -"installations and upgrades. This adds a degree of privacy and security " -"during software downloads." -msgstr "" -"WHEN ENABLED, SOFTWARE WILL BE DOWNLOADED OVER THE TOR NETWORK FOR " -"INSTALLATIONS AND UPGRADES. THIS ADDS A DEGREE OF PRIVACY AND SECURITY " -"DURING SOFTWARE DOWNLOADS." - -#: plinth/modules/tor/tor.py:85 plinth/modules/tor/tor.py:285 -msgid "Tor Hidden Service" -msgstr "TOR HIDDEN SERVICE" - -#: plinth/modules/tor/tor.py:115 +#: plinth/modules/tor/views.py:68 msgid "Tor Control Panel" msgstr "TOR CONTROL PANEL" -#: plinth/modules/tor/tor.py:240 +#: plinth/modules/tor/views.py:79 #, python-brace-format msgid "Action error: {0} [{1}] [{2}]" msgstr "ACTION ERROR: {0} [{1}] [{2}]" -#: plinth/modules/tor/tor.py:256 -msgid "Tor enabled" -msgstr "TOR ENABLED" - -#: plinth/modules/tor/tor.py:259 -msgid "Tor disabled" -msgstr "TOR DISABLED" - -#: plinth/modules/tor/tor.py:264 -msgid "Tor hidden service enabled" -msgstr "TOR HIDDEN SERVICE ENABLED" - -#: plinth/modules/tor/tor.py:267 -msgid "Tor hidden service disabled" -msgstr "TOR HIDDEN SERVICE DISABLED" - -#: plinth/modules/tor/tor.py:292 -msgid "Enabled package download over Tor" -msgstr "ENABLED PACKAGE DOWNLOAD OVER TOR" - -#: plinth/modules/tor/tor.py:295 -msgid "Disabled package download over Tor" -msgstr "DISABLED PACKAGE DOWNLOAD OVER TOR" +#: plinth/modules/tor/views.py:148 +msgid "Configuration updated." +msgstr "CONFIGURATION UPDATED." + +#: plinth/modules/tor/views.py:150 +msgid "An error occurred during configuration." +msgstr "AN ERROR OCCURRED DURING CONFIGURATION." #: plinth/modules/transmission/__init__.py:38 #: plinth/modules/transmission/templates/transmission.html:26 -#: plinth/modules/transmission/views.py:63 +#: plinth/modules/transmission/views.py:67 msgid "BitTorrent (Transmission)" msgstr "BITTORRENT (TRANSMISSION)" @@ -2608,72 +2830,73 @@ "WHEN ENABLED, THE UNATTENDED-UPGRADES PROGRAM WILL BE RUN ONCE PER DAY. IT " "WILL ATTEMPT TO PERFORM ANY PACKAGE UPGRADES THAT ARE AVAILABLE." -#: plinth/modules/upgrades/templates/upgrades.html:40 -msgid "There was an error while upgrading." -msgstr "THERE WAS AN ERROR WHILE UPGRADING." - -#: plinth/modules/upgrades/templates/upgrades.html:43 -#: plinth/modules/upgrades/templates/upgrades.html:59 -msgid "Output from unattended-upgrades:" -msgstr "OUTPUT FROM UNATTENDED-UPGRADES:" - -#: plinth/modules/upgrades/templates/upgrades.html:50 -msgid "The operating system is up to date now.  " -msgstr "THE OPERATING SYSTEM IS UP TO DATE NOW.  " - -#: plinth/modules/upgrades/templates/upgrades.html:53 -msgid "Show Details" -msgstr "SHOW DETAILS" +#: plinth/modules/upgrades/templates/upgrades.html:37 +msgid "" +"Upgrades install the latest software and security updates. When automatic " +"upgrades are enabled, upgrades are automatically run every night. You don't " +"normally need to start the upgrade process." +msgstr "" +"UPGRADES INSTALL THE LATEST SOFTWARE AND SECURITY UPDATES. WHEN AUTOMATIC " +"UPGRADES ARE ENABLED, UPGRADES ARE AUTOMATICALLY RUN EVERY NIGHT. YOU DON'T " +"NORMALLY NEED TO START THE UPGRADE PROCESS." -#: plinth/modules/upgrades/templates/upgrades.html:69 +#: plinth/modules/upgrades/templates/upgrades.html:45 msgid "" -"This will run unattended-upgrades, which will attempt to upgrade your system " -"with the latest Debian packages. It may take a few minutes to complete." +"Depending on the number of packages to install, this may take a long time to " +"complete. While upgrades are in progress, you will not be able to install " +"other packages. During the upgrade, this web interface may be temporarily " +"unavailable and show an error. Refresh the page to continue." msgstr "" -"THIS WILL RUN UNATTENDED-UPGRADES, WHICH WILL ATTEMPT TO UPGRADE YOUR SYSTEM " -"WITH THE LATEST DEBIAN PACKAGES. IT MAY TAKE A FEW MINUTES TO COMPLETE." +"DEPENDING ON THE NUMBER OF PACKAGES TO INSTALL, THIS MAY TAKE A LONG TIME TO " +"COMPLETE. WHILE UPGRADES ARE IN PROGRESS, YOU WILL NOT BE ABLE TO INSTALL " +"OTHER PACKAGES. DURING THE UPGRADE, THIS WEB INTERFACE MAY BE TEMPORARILY " +"UNAVAILABLE AND SHOW AN ERROR. REFRESH THE PAGE TO CONTINUE." -#: plinth/modules/upgrades/templates/upgrades.html:80 +#: plinth/modules/upgrades/templates/upgrades.html:58 msgid "Upgrade now »" msgstr "UPGRADE NOW »" -#: plinth/modules/upgrades/templates/upgrades.html:87 -msgid "System is being upgraded." -msgstr "SYSTEM IS BEING UPGRADED." +#: plinth/modules/upgrades/templates/upgrades.html:65 +msgid "A package manager is running." +msgstr "A PACKAGE MANAGER IS RUNNING." + +#: plinth/modules/upgrades/templates/upgrades.html:70 +msgid "Recent log from upgrades:" +msgstr "RECENT LOG FROM UPGRADES:" -#: plinth/modules/upgrades/views.py:35 plinth/modules/upgrades/views.py:64 +#: plinth/modules/upgrades/views.py:36 plinth/modules/upgrades/views.py:66 msgid "Automatic Upgrades" msgstr "AUTOMATIC UPGRADES" -#: plinth/modules/upgrades/views.py:37 +#: plinth/modules/upgrades/views.py:38 msgid "Upgrade Packages" msgstr "UPGRADE PACKAGES" -#: plinth/modules/upgrades/views.py:75 +#: plinth/modules/upgrades/views.py:96 +msgid "Upgrade process started." +msgstr "UPGRADE PROCESS STARTED." + +#: plinth/modules/upgrades/views.py:99 +msgid "Starting upgrade failed." +msgstr "STARTING UPGRADE FAILED." + +#: plinth/modules/upgrades/views.py:102 msgid "Package Upgrades" msgstr "PACKAGE UPGRADES" -#: plinth/modules/upgrades/views.py:116 +#: plinth/modules/upgrades/views.py:131 #, python-brace-format msgid "Error when configuring unattended-upgrades: {error}" msgstr "ERROR WHEN CONFIGURING UNATTENDED-UPGRADES: {error}" -#: plinth/modules/upgrades/views.py:121 +#: plinth/modules/upgrades/views.py:136 msgid "Automatic upgrades enabled" msgstr "AUTOMATIC UPGRADES ENABLED" -#: plinth/modules/upgrades/views.py:123 +#: plinth/modules/upgrades/views.py:138 msgid "Automatic upgrades disabled" msgstr "AUTOMATIC UPGRADES DISABLED" -#: plinth/modules/upgrades/views.py:142 -msgid "Upgrade completed." -msgstr "UPGRADE COMPLETED." - -#: plinth/modules/upgrades/views.py:144 -msgid "Upgrade failed." -msgstr "UPGRADE FAILED." - #: plinth/modules/users/__init__.py:36 msgid "Users and Groups" msgstr "USERS AND GROUPS" @@ -2714,19 +2937,30 @@ msgid "Failed to add new user to {group} group." msgstr "FAILED TO ADD NEW USER TO {group} GROUP." -#: plinth/modules/users/forms.py:126 +#: plinth/modules/users/forms.py:92 +msgid "SSH Keys" +msgstr "SSH KEYS" + +#: plinth/modules/users/forms.py:96 +msgid "" +"Setting an SSH public key will allow this user to securely log in to the " +"system without using a password. You may enter multiple keys, one on each " +"line. Blank lines and lines starting with # will be ignored." +msgstr "SETTING AN SSH PUBLIC KEY WILL ALLOW THIS USER TO SECURELY LOG IN TO THE SYSTEM WITHOUT USING A PASSWORD. YOU MAY ENTER MULTIPLE KEYS, ONE ON EACH LINE. BLANK LINES AND LINES STARTING WITH # WILL BE IGNORED." + +#: plinth/modules/users/forms.py:136 msgid "Renaming LDAP user failed." msgstr "RENAMING LDAP USER FAILED." -#: plinth/modules/users/forms.py:138 +#: plinth/modules/users/forms.py:148 msgid "Failed to remove user from group." msgstr "FAILED TO REMOVE USER FROM GROUP." -#: plinth/modules/users/forms.py:149 +#: plinth/modules/users/forms.py:159 msgid "Failed to add user to group." msgstr "FAILED TO ADD USER TO GROUP." -#: plinth/modules/users/forms.py:174 +#: plinth/modules/users/forms.py:188 msgid "Changing LDAP user password failed." msgstr "CHANGING LDAP USER PASSWORD FAILED." @@ -2745,7 +2979,7 @@ msgstr "CREATE USER" #: plinth/modules/users/templates/users_delete.html:26 -#: plinth/modules/users/views.py:103 +#: plinth/modules/users/views.py:110 msgid "Delete User" msgstr "DELETE USER" @@ -2800,20 +3034,20 @@ msgid "Edit User" msgstr "EDIT USER" -#: plinth/modules/users/views.py:113 +#: plinth/modules/users/views.py:120 #, python-brace-format msgid "User {user} deleted." msgstr "USER {user} DELETED." -#: plinth/modules/users/views.py:120 +#: plinth/modules/users/views.py:127 msgid "Deleting LDAP user failed." msgstr "DELETING LDAP USER FAILED." -#: plinth/modules/users/views.py:129 +#: plinth/modules/users/views.py:136 msgid "Change Password" msgstr "CHANGE PASSWORD" -#: plinth/modules/users/views.py:130 +#: plinth/modules/users/views.py:137 msgid "Password changed successfully." msgstr "PASSWORD CHANGED SUCCESSFULLY." @@ -2896,9 +3130,10 @@ msgid "Secure Shell (SSH) Server" msgstr "SECURE SHELL (SSH) SERVER" -#: plinth/service.py:78 -msgid "FreedomBox Web Interface (Plinth)" -msgstr "FREEDOMBOX WEB INTERFACE (PLINTH)" +#: plinth/service.py:79 +#, python-brace-format +msgid "{box_name} Web Interface (Plinth)" +msgstr "{box_name} WEB INTERFACE (PLINTH)" #: plinth/templates/404.html:25 msgid "404" @@ -2934,27 +3169,24 @@ "\">BUG TRACKER SO WE CAN FIX IT." #: plinth/templates/base.html:49 -msgid "Plinth administrative interface for the FreedomBox" -msgstr "PLINTH ADMINISTRATIVE INTERFACE FOR THE FREEDOMBOX" - -#: plinth/templates/base.html:52 plinth/templates/base.html.py:88 -msgid "FreedomBox" -msgstr "FREEDOMBOX" +#, python-format +msgid "Plinth administrative interface for the %(box_name)s" +msgstr "PLINTH ADMINISTRATIVE INTERFACE FOR THE %(box_name)s" -#: plinth/templates/base.html:81 +#: plinth/templates/base.html:83 msgid "Toggle navigation" msgstr "TOGGLE NAVIGATION" -#: plinth/templates/base.html:121 plinth/templates/base.html.py:122 +#: plinth/templates/base.html:125 plinth/templates/base.html.py:126 msgid "Change password" msgstr "CHANGE PASSWORD" -#: plinth/templates/base.html:125 plinth/templates/base.html.py:126 -#: plinth/templates/base.html:139 plinth/templates/base.html.py:141 +#: plinth/templates/base.html:129 plinth/templates/base.html.py:130 +#: plinth/templates/base.html:143 plinth/templates/base.html.py:145 msgid "Log out" msgstr "LOG OUT" -#: plinth/templates/base.html:131 plinth/templates/base.html.py:133 +#: plinth/templates/base.html:135 plinth/templates/base.html.py:137 msgid "Log in" msgstr "LOG IN" @@ -2996,6 +3228,87 @@ msgid "%(percentage)s%% complete" msgstr "%(percentage)s%% COMPLETE" +#~ msgid "Tor enabled" +#~ msgstr "TOR ENABLED" + +#~ msgid "Tor disabled" +#~ msgstr "TOR DISABLED" + +#~ msgid "Tor hidden service enabled" +#~ msgstr "TOR HIDDEN SERVICE ENABLED" + +#~ msgid "Tor hidden service disabled" +#~ msgstr "TOR HIDDEN SERVICE DISABLED" + +#~ msgid "Enabled package download over Tor" +#~ msgstr "ENABLED PACKAGE DOWNLOAD OVER TOR" + +#~ msgid "Disabled package download over Tor" +#~ msgstr "DISABLED PACKAGE DOWNLOAD OVER TOR" + +#~ msgid "The following is the current status:" +#~ msgstr "THE FOLLOWING IS THE CURRENT STATUS:" + +#~ msgid "Create Wiki/Blog" +#~ msgstr "CREATE WIKI/BLOG" + +#~ msgid "show password" +#~ msgstr "SHOW PASSWORD" + +#~ msgid "Congratulations! Your FreedomBox is up and running!" +#~ msgstr "CONGRATULATIONS! YOUR FREEDOMBOX IS UP AND RUNNING!" + +#~ msgid "" +#~ "Please provide the following basic information to complete the setup " +#~ "process." +#~ msgstr "" +#~ "PLEASE PROVIDE THE FOLLOWING BASIC INFORMATION TO COMPLETE THE SETUP " +#~ "PROCESS." + +#~ msgid "Next" +#~ msgstr "NEXT" + +#~ msgid "FreedomBox Manual" +#~ msgstr "FREEDOMBOX MANUAL" + +#~ msgid "" +#~ "Many FreedomBox contributors and users are also available on the " +#~ "#freedombox channel of the irc.oftc.net IRC network." +#~ msgstr "" +#~ "MANY FREEDOMBOX CONTRIBUTORS AND USERS ARE ALSO AVAILABLE ON THE " +#~ "#FREEDOMBOX CHANNEL OF THE IRC.OFTC.NET IRC NETWORK." + +#~ msgid "" +#~ "Select Automatic (DHCP) if you are connecting to an existing wireless " +#~ "network. Shared mode is useful when running an Access Point." +#~ msgstr "" +#~ "SELECT AUTOMATIC (DHCP) IF YOU ARE CONNECTING TO AN EXISTING WIRELESS " +#~ "NETWORK. SHARED MODE IS USEFUL WHEN RUNNING AN ACCESS POINT." + +#~ msgid "There was an error while upgrading." +#~ msgstr "THERE WAS AN ERROR WHILE UPGRADING." + +#~ msgid "Output from unattended-upgrades:" +#~ msgstr "OUTPUT FROM UNATTENDED-UPGRADES:" + +#~ msgid "The operating system is up to date now.  " +#~ msgstr "THE OPERATING SYSTEM IS UP TO DATE NOW.  " + +#~ msgid "Show Details" +#~ msgstr "SHOW DETAILS" + +#~ msgid "" +#~ "This will run unattended-upgrades, which will attempt to upgrade your " +#~ "system with the latest Debian packages. It may take a few minutes to " +#~ "complete." +#~ msgstr "" +#~ "THIS WILL RUN UNATTENDED-UPGRADES, WHICH WILL ATTEMPT TO UPGRADE YOUR " +#~ "SYSTEM WITH THE LATEST DEBIAN PACKAGES. IT MAY TAKE A FEW MINUTES TO " +#~ "COMPLETE." + +#~ msgid "System is being upgraded." +#~ msgstr "SYSTEM IS BEING UPGRADED." + #~ msgid "" #~ "You can install and run various services and applications on your " #~ "%(box_name)s." diff -Nru plinth-0.7.2/plinth/locale/fr/LC_MESSAGES/django.po plinth-0.8.1/plinth/locale/fr/LC_MESSAGES/django.po --- plinth-0.7.2/plinth/locale/fr/LC_MESSAGES/django.po 2015-12-23 11:34:40.000000000 +0000 +++ plinth-0.8.1/plinth/locale/fr/LC_MESSAGES/django.po 2016-02-16 03:55:53.000000000 +0000 @@ -8,11 +8,11 @@ msgstr "" "Project-Id-Version: FreedomBox UI\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-12-20 13:58+0530\n" -"PO-Revision-Date: 2015-12-20 18:04+0000\n" -"Last-Translator: Philippe Baret \n" -"Language-Team: French " -"\n" +"POT-Creation-Date: 2016-01-31 22:19+0530\n" +"PO-Revision-Date: 2016-01-15 21:18+0000\n" +"Last-Translator: Caly \n" +"Language-Team: French \n" "Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -23,12 +23,12 @@ #: plinth/action_utils.py:203 #, python-brace-format msgid "Listening on {kind} port {listen_address}:{port}" -msgstr "Ecoute sur le port {listen_address}:{port} ({kind})" +msgstr "Écoute sur le port {listen_address}:{port} ({kind})" #: plinth/action_utils.py:206 #, python-brace-format msgid "Listening on {kind} port {port}" -msgstr "Ecoute sur le port {port}, type {kind}" +msgstr "Écoute sur le port {port}, type {kind}" #: plinth/action_utils.py:287 #, python-brace-format @@ -50,11 +50,15 @@ msgid "Cannot connect to {host}:{port}" msgstr "Impossible de se connecter à {host}:{port}" +#: plinth/context_processors.py:36 +msgid "FreedomBox" +msgstr "FreedomBox" + #: plinth/modules/apps/apps.py:26 msgid "Apps" msgstr "Applis" -#: plinth/modules/apps/apps.py:32 plinth/templates/base.html.py:90 +#: plinth/modules/apps/apps.py:32 plinth/templates/base.html.py:93 msgid "Applications" msgstr "Applications" @@ -95,10 +99,18 @@ msgstr "Activer la découverte de services" #: plinth/modules/avahi/templates/avahi.html:29 -msgid "" -"Service discovery allows other machines on the network to discover your " -"FreedomBox and services running on it. It also allows FreedomBox to " -"discover other machines and services running on your local network. Service " +#, fuzzy, python-format +#| msgid "" +#| "Service discovery allows other machines on the network to discover your " +#| "FreedomBox and services running on it. It also allows FreedomBox to " +#| "discover other machines and services running on your local network. " +#| "Service discovery is not essential and works only on internal networks. " +#| "It may be disabled to improve security especially when connecting to a " +#| "hostile local network." +msgid "" +"Service discovery allows other devices on the network to discover your " +"%(box_name)s and services running on it. It also allows %(box_name)s to " +"discover other devices and services running on your local network. Service " "discovery is not essential and works only on internal networks. It may be " "disabled to improve security especially when connecting to a hostile local " "network." @@ -113,14 +125,15 @@ #: plinth/modules/avahi/templates/avahi.html:40 #: plinth/modules/datetime/templates/datetime.html:35 #: plinth/modules/deluge/templates/deluge.html:39 -#: plinth/modules/dynamicdns/dynamicdns.py:38 +#: plinth/modules/dynamicdns/dynamicdns.py:39 #: plinth/modules/firewall/templates/firewall.html:57 #: plinth/modules/mumble/templates/mumble.html:44 #: plinth/modules/networks/templates/connection_show.html:261 #: plinth/modules/openvpn/templates/openvpn.html:81 #: plinth/modules/privoxy/templates/privoxy.html:48 #: plinth/modules/quassel/templates/quassel.html:50 -#: plinth/modules/tor/templates/tor.html:39 +#: plinth/modules/repro/templates/repro.html:58 +#: plinth/modules/tor/templates/tor.html:48 #: plinth/modules/transmission/templates/transmission.html:42 #: plinth/modules/xmpp/templates/xmpp.html:58 msgid "Status" @@ -143,9 +156,10 @@ #: plinth/modules/owncloud/templates/owncloud.html:51 #: plinth/modules/privoxy/templates/privoxy.html:62 #: plinth/modules/quassel/templates/quassel.html:65 +#: plinth/modules/repro/templates/repro.html:72 #: plinth/modules/roundcube/templates/roundcube.html:62 #: plinth/modules/shaarli/templates/shaarli.html:40 -#: plinth/modules/tor/templates/tor.html:74 +#: plinth/modules/tor/templates/tor.html:92 #: plinth/modules/transmission/templates/transmission.html:56 #: plinth/modules/xmpp/templates/xmpp.html:72 msgid "Configuration" @@ -161,10 +175,11 @@ #: plinth/modules/openvpn/templates/openvpn.html:138 #: plinth/modules/privoxy/templates/privoxy.html:70 #: plinth/modules/quassel/templates/quassel.html:73 +#: plinth/modules/repro/templates/repro.html:80 #: plinth/modules/restore/templates/restore_index.html:54 #: plinth/modules/roundcube/templates/roundcube.html:70 #: plinth/modules/shaarli/templates/shaarli.html:48 -#: plinth/modules/tor/templates/tor.html:82 +#: plinth/modules/tor/templates/tor.html:100 #: plinth/modules/transmission/templates/transmission.html:64 #: plinth/modules/upgrades/templates/upgrades_configure.html:34 #: plinth/modules/xmpp/templates/xmpp.html:80 @@ -173,12 +188,13 @@ #: plinth/modules/avahi/views.py:73 plinth/modules/datetime/views.py:85 #: plinth/modules/deluge/views.py:80 -#: plinth/modules/dynamicdns/dynamicdns.py:368 +#: plinth/modules/dynamicdns/dynamicdns.py:371 #: plinth/modules/ikiwiki/views.py:95 plinth/modules/mumble/views.py:80 #: plinth/modules/openvpn/views.py:142 plinth/modules/privoxy/views.py:83 -#: plinth/modules/quassel/views.py:76 plinth/modules/restore/views.py:68 -#: plinth/modules/roundcube/views.py:84 plinth/modules/shaarli/views.py:74 -#: plinth/modules/transmission/views.py:105 plinth/modules/xmpp/views.py:100 +#: plinth/modules/quassel/views.py:76 plinth/modules/repro/views.py:77 +#: plinth/modules/restore/views.py:68 plinth/modules/roundcube/views.py:84 +#: plinth/modules/shaarli/views.py:74 plinth/modules/transmission/views.py:109 +#: plinth/modules/xmpp/views.py:100 msgid "Configuration updated" msgstr "Configuration actualisée" @@ -186,27 +202,34 @@ #: plinth/modules/deluge/views.py:82 plinth/modules/ikiwiki/views.py:97 #: plinth/modules/mumble/views.py:82 plinth/modules/openvpn/views.py:144 #: plinth/modules/owncloud/owncloud.py:93 plinth/modules/privoxy/views.py:85 -#: plinth/modules/quassel/views.py:78 plinth/modules/restore/views.py:70 -#: plinth/modules/roundcube/views.py:86 plinth/modules/shaarli/views.py:76 -#: plinth/modules/tor/tor.py:250 plinth/modules/transmission/views.py:107 -#: plinth/modules/upgrades/views.py:103 plinth/modules/xmpp/views.py:102 +#: plinth/modules/quassel/views.py:78 plinth/modules/repro/views.py:79 +#: plinth/modules/restore/views.py:70 plinth/modules/roundcube/views.py:86 +#: plinth/modules/shaarli/views.py:76 plinth/modules/tor/views.py:111 +#: plinth/modules/transmission/views.py:111 +#: plinth/modules/upgrades/views.py:118 plinth/modules/xmpp/views.py:102 msgid "Setting unchanged" msgstr "Paramètres inchangés" -#: plinth/modules/config/config.py:83 plinth/modules/config/config.py:120 -#: plinth/modules/dynamicdns/dynamicdns.py:145 +#: plinth/modules/config/config.py:84 plinth/modules/config/config.py:121 +#: plinth/modules/dynamicdns/dynamicdns.py:148 msgid "Invalid domain name" msgstr "Nom de domaine invalide" -#: plinth/modules/config/config.py:94 +#: plinth/modules/config/config.py:95 msgid "Hostname" msgstr "Nom de Machine" -#: plinth/modules/config/config.py:96 -msgid "" -"Hostname is the local name by which other machines on the local network " -"reach your machine. It must start and end with an alphabet or a digit and " -"have as interior characters only alphabets, digits and hyphens. Total " +#: plinth/modules/config/config.py:97 +#, fuzzy, python-brace-format +#| msgid "" +#| "Hostname is the local name by which other machines on the local network " +#| "reach your machine. It must start and end with an alphabet or a digit " +#| "and have as interior characters only alphabets, digits and hyphens. " +#| "Total length must be 63 characters or less." +msgid "" +"Hostname is the local name by which other devices on the local network can " +"reach your {box_name}. It must start and end with an alphabet or a digit " +"and have as interior characters only alphabets, digits and hyphens. Total " "length must be 63 characters or less." msgstr "" "Le Nom de Machine est le nom local par lequel les autres machines sur le " @@ -215,24 +238,32 @@ "fin seulement des lettres de l'alphabet, des chiffres ou des traits d’union " "« - ». Sa longueur maximum est de 63 signes." -#: plinth/modules/config/config.py:104 +#: plinth/modules/config/config.py:105 msgid "Invalid hostname" msgstr "Nom de machine invalide" -#: plinth/modules/config/config.py:107 plinth/modules/config/config.py:153 +#: plinth/modules/config/config.py:108 plinth/modules/config/config.py:153 #: plinth/modules/config/config.py:265 -#: plinth/modules/dynamicdns/dynamicdns.py:140 +#: plinth/modules/dynamicdns/dynamicdns.py:143 msgid "Domain Name" msgstr "Nom de Domaine" -#: plinth/modules/config/config.py:109 -msgid "" -"Domain name is the global name by which other machines on the Internet can " -"reach you. It must consist of labels separated by dots. Each label must " -"start and end with an alphabet or a digit and have as interior characters " -"only alphabets, digits and hyphens. Length of each label must be 63 " -"characters or less. Total length of domain name must be 253 characters or " -"less." +#: plinth/modules/config/config.py:110 +#, fuzzy, python-brace-format +#| msgid "" +#| "Domain name is the global name by which other machines on the Internet " +#| "can reach you. It must consist of labels separated by dots. Each label " +#| "must start and end with an alphabet or a digit and have as interior " +#| "characters only alphabets, digits and hyphens. Length of each label must " +#| "be 63 characters or less. Total length of domain name must be 253 " +#| "characters or less." +msgid "" +"Domain name is the global name by which other devices on the Internet can " +"reach your {box_name}. It must consist of labels separated by dots. Each " +"label must start and end with an alphabet or a digit and have as interior " +"characters only alphabets, digits and hyphens. Length of each label must be " +"63 characters or less. Total length of domain name must be 253 characters " +"or less." msgstr "" "Le Nom de Domaine est le nom global par lequel les autres machines sur " "Internet peuvent atteindre votre machine. Le nom ne doit contenir que des " @@ -243,16 +274,18 @@ "63 signes. La longueur totale du nom de domaine ne doit pas excéder 253 " "signes." -#: plinth/modules/config/config.py:124 +#: plinth/modules/config/config.py:125 msgid "Language" msgstr "Langue" -#: plinth/modules/config/config.py:126 -msgid "Language for this FreedomBox web administration interface" +#: plinth/modules/config/config.py:127 +#, fuzzy +#| msgid "Language for this FreedomBox web administration interface" +msgid "Language for this web administration interface" msgstr "Langue de l'interface Web de votre FreedomBox" #: plinth/modules/config/config.py:135 -#: plinth/modules/dynamicdns/dynamicdns.py:36 +#: plinth/modules/dynamicdns/dynamicdns.py:37 #: plinth/modules/ikiwiki/views.py:36 msgid "Configure" msgstr "Configurer" @@ -300,7 +333,7 @@ #: plinth/modules/datetime/__init__.py:44 msgid "Network Time Server" -msgstr "Serveur de Temps Réseau" +msgstr "Serveur de temps réseau" #: plinth/modules/datetime/__init__.py:76 msgid "NTP client in contact with servers" @@ -450,16 +483,16 @@ msgid "Result" msgstr "Résultat" -#: plinth/modules/dynamicdns/dynamicdns.py:34 plinth/modules/help/help.py:40 +#: plinth/modules/dynamicdns/dynamicdns.py:35 plinth/modules/help/help.py:40 msgid "About" msgstr "À propos" -#: plinth/modules/dynamicdns/dynamicdns.py:44 -#: plinth/modules/dynamicdns/dynamicdns.py:53 +#: plinth/modules/dynamicdns/dynamicdns.py:45 +#: plinth/modules/dynamicdns/dynamicdns.py:54 msgid "Dynamic DNS" msgstr "DNS Dynamique" -#: plinth/modules/dynamicdns/dynamicdns.py:70 +#: plinth/modules/dynamicdns/dynamicdns.py:71 msgid "" "The Variables <User>, <Pass>, <Ip>, <Domain> may be " "used within the URL. For details see the update URL templates of the example " @@ -469,7 +502,7 @@ "être utilisées dans l'URL. Pour plus de détails, voir les modèles d'URL mis " "à jour pour un exemple de fournisseurs." -#: plinth/modules/dynamicdns/dynamicdns.py:74 +#: plinth/modules/dynamicdns/dynamicdns.py:75 msgid "" "Please choose an update protocol according to your provider. If your " "provider does not support the GnudIP protocol or your provider is not listed " @@ -480,26 +513,32 @@ "votre fournisseur n'est pas listé, vous pouvez utiliser la mise à jour URL " "de votre fournisseur." -#: plinth/modules/dynamicdns/dynamicdns.py:79 +#: plinth/modules/dynamicdns/dynamicdns.py:80 +#, fuzzy +#| msgid "" +#| "Please do not enter a URL here (like \"https://example.com/\") but only " +#| "the hostname of the GnuDIP server (like \"example.pcom\")." msgid "" "Please do not enter a URL here (like \"https://example.com/\") but only the " -"hostname of the GnuDIP server (like \"example.pcom\")." +"hostname of the GnuDIP server (like \"example.com\")." msgstr "" "Ne saisissez pas une URL (comme \"https://example.com/\"), seulement le nom " -"de machine du serveur GnuDIP (comme \"example.pcom\")." +"de machine du serveur GnuDIP (comme \"example.com\")." -#: plinth/modules/dynamicdns/dynamicdns.py:83 -msgid "The public domain name you want use to reach your box." +#: plinth/modules/dynamicdns/dynamicdns.py:84 +#, fuzzy, python-brace-format +#| msgid "The public domain name you want use to reach your box." +msgid "The public domain name you want use to reach your {box_name}." msgstr "" "Le nom de domaine public que vous désirez utiliser pour atteindre votre " "FreedomBox." -#: plinth/modules/dynamicdns/dynamicdns.py:85 +#: plinth/modules/dynamicdns/dynamicdns.py:87 msgid "Use this option if your provider uses self signed certificates." msgstr "" "Utilisez ce choix si votre fournisseur utilise des certificats auto-signés." -#: plinth/modules/dynamicdns/dynamicdns.py:88 +#: plinth/modules/dynamicdns/dynamicdns.py:90 msgid "" "If this option is selected, your username and password will be used for HTTP " "basic authentication." @@ -507,27 +546,33 @@ "Si ce choix est sélectionné, votre nom d'utilisateur et votre mot de passe " "seront utilisés pour une authentification HTTP de base." -#: plinth/modules/dynamicdns/dynamicdns.py:91 +#: plinth/modules/dynamicdns/dynamicdns.py:93 msgid "" "Leave this field empty if you want to keep your previous configured password." msgstr "" "Laissez ce champ vide si vous désirez garder la configuration précédente de " "votre mot de passe." -#: plinth/modules/dynamicdns/dynamicdns.py:94 +#: plinth/modules/dynamicdns/dynamicdns.py:96 +#, fuzzy, python-brace-format +#| msgid "" +#| "Optional Value. If your FreedomBox is not connected directly to the " +#| "Internet (i.e. connected to a NAT router) this URL is used to figure out " +#| "the real Internet IP. The URL should simply return the IP wherethe client " +#| "comes from. Example: http://myip.datasystems24.de" msgid "" -"Optional Value. If your FreedomBox is not connected directly to the Internet " +"Optional Value. If your {box_name} is not connected directly to the Internet " "(i.e. connected to a NAT router) this URL is used to figure out the real " -"Internet IP. The URL should simply return the IP wherethe client comes from. " -"Example: http://myip.datasystems24.de" +"Internet IP. The URL should simply return the IP where the client comes from " +"(example: http://myip.datasystems24.de)." msgstr "" "Valeur Optionnelle. Si votre FreedomBox n'est pas connectée directement à " "l'Internet (si par exemple votre routeur fait du \"NAT\" Network Address " "Translation), cette URL est utilisée pour trouver l'IP Internet réelle. " "L'URL doit retourner l'IP correspondante à l'endroit où le client se trouve. " -"Example: http://myip.datasystems24.de" +"Exemple : http://myip.datasystems24.de" -#: plinth/modules/dynamicdns/dynamicdns.py:101 +#: plinth/modules/dynamicdns/dynamicdns.py:104 msgid "" "You should have been requested to select a username when you created the " "account." @@ -535,85 +580,98 @@ "Vous devez avoir été sollicité pour sélectionner un nom d'utilisateur " "lorsque vous avez créé le compte." -#: plinth/modules/dynamicdns/dynamicdns.py:112 +#: plinth/modules/dynamicdns/dynamicdns.py:115 msgid "Enable Dynamic DNS" msgstr "Activer le DNS Dynamique" -#: plinth/modules/dynamicdns/dynamicdns.py:115 +#: plinth/modules/dynamicdns/dynamicdns.py:118 msgid "Service type" msgstr "Type de service" -#: plinth/modules/dynamicdns/dynamicdns.py:120 +#: plinth/modules/dynamicdns/dynamicdns.py:123 msgid "GnudIP Server Address" msgstr "Adresse Serveur GnudIP" -#: plinth/modules/dynamicdns/dynamicdns.py:125 +#: plinth/modules/dynamicdns/dynamicdns.py:128 msgid "Invalid server name" msgstr "Nom de serveur invalide" -#: plinth/modules/dynamicdns/dynamicdns.py:128 +#: plinth/modules/dynamicdns/dynamicdns.py:131 msgid "Update URL" msgstr "Actualiser l'URL" -#: plinth/modules/dynamicdns/dynamicdns.py:132 -msgid "accept all SSL certificates" +#: plinth/modules/dynamicdns/dynamicdns.py:135 +#, fuzzy +#| msgid "accept all SSL certificates" +msgid "Accept all SSL certificates" msgstr "accepte tous les certificats SSL" -#: plinth/modules/dynamicdns/dynamicdns.py:136 -msgid "use HTTP basic authentication" +#: plinth/modules/dynamicdns/dynamicdns.py:139 +#, fuzzy +#| msgid "use HTTP basic authentication" +msgid "Use HTTP basic authentication" msgstr "utilise une authentification HTTP basique" -#: plinth/modules/dynamicdns/dynamicdns.py:148 -#: plinth/modules/networks/forms.py:118 plinth/modules/transmission/forms.py:39 +#: plinth/modules/dynamicdns/dynamicdns.py:151 +#: plinth/modules/networks/forms.py:146 plinth/modules/transmission/forms.py:39 msgid "Username" msgstr "Nom Utilisateur" -#: plinth/modules/dynamicdns/dynamicdns.py:151 -#: plinth/modules/networks/forms.py:119 plinth/modules/transmission/forms.py:43 +#: plinth/modules/dynamicdns/dynamicdns.py:154 +#: plinth/modules/networks/forms.py:147 plinth/modules/transmission/forms.py:43 msgid "Password" msgstr "Mot de passe" -#: plinth/modules/dynamicdns/dynamicdns.py:154 -msgid "show password" -msgstr "montrer le mot de passe" +#: plinth/modules/dynamicdns/dynamicdns.py:157 +#: plinth/modules/networks/forms.py:149 +msgid "Show password" +msgstr "Montrer le mot de passe" -#: plinth/modules/dynamicdns/dynamicdns.py:158 +#: plinth/modules/dynamicdns/dynamicdns.py:161 msgid "IP check URL" msgstr "Résolution IP/URL" -#: plinth/modules/dynamicdns/dynamicdns.py:184 +#: plinth/modules/dynamicdns/dynamicdns.py:187 msgid "Please provide update URL or a GnuDIP Server" msgstr "Fournir une mise à jour URL ou un serveur GnuDIP" -#: plinth/modules/dynamicdns/dynamicdns.py:187 +#: plinth/modules/dynamicdns/dynamicdns.py:190 msgid "Please provide GnuDIP username" msgstr "Fournir un nom d'utilisateur GnuDIP" -#: plinth/modules/dynamicdns/dynamicdns.py:190 +#: plinth/modules/dynamicdns/dynamicdns.py:193 msgid "Please provide GnuDIP domain" msgstr "Fournir un nom de domaine GnuDIP" -#: plinth/modules/dynamicdns/dynamicdns.py:195 +#: plinth/modules/dynamicdns/dynamicdns.py:198 msgid "Please provide a password" msgstr "Fournir un mot de passe" -#: plinth/modules/dynamicdns/dynamicdns.py:214 +#: plinth/modules/dynamicdns/dynamicdns.py:217 msgid "Configure Dynamic DNS" msgstr "Configurer le DNS Dynamique" -#: plinth/modules/dynamicdns/dynamicdns.py:236 +#: plinth/modules/dynamicdns/dynamicdns.py:239 msgid "Status of Dynamic DNS" -msgstr "Etat du DNS Dynamique" +msgstr "État du DNS Dynamique" #: plinth/modules/dynamicdns/templates/dynamicdns.html:25 -msgid "DynamicDNS client" +#, fuzzy +#| msgid "DynamicDNS client" +msgid "Dynamic DNS Client" msgstr "Client DynamicDNS" #: plinth/modules/dynamicdns/templates/dynamicdns.html:28 +#, fuzzy, python-format +#| msgid "" +#| "If your internet provider changes your IP address periodic (i.e. every " +#| "24h) it may be hard for others to find you in the WEB. And for this " +#| "reason nobody may find the services which are provided by FreedomBox " +#| "(like your ownCloud)." msgid "" "If your internet provider changes your IP address periodic (i.e. every 24h) " "it may be hard for others to find you in the WEB. And for this reason nobody " -"may find the services which are provided by FreedomBox (like your ownCloud)." +"may find the services which are provided by %(box_name)s, such as ownCloud." msgstr "" "Si votre fournisseur d'accès change régulièrement votre adresse IP (par ex. " "toutes les 24h), il peut être difficile pour les autres de vous trouver sur " @@ -621,13 +679,22 @@ "les services fournis par FreedomBox (comme ownCloud)." #: plinth/modules/dynamicdns/templates/dynamicdns.html:37 +#, fuzzy +#| msgid "" +#| "The solution is to assign a DNS name to your IP address and update the " +#| "DNS name every time your IP is changed by your Internet provider. Dynamic " +#| "DNS allows you to push your current public IP address to an gnudip " +#| "server. Afterwards the Server will assign your DNS name with the new IP " +#| "and if someone from the internet asks for your DNS name he will get your " +#| "current IP answered." msgid "" "The solution is to assign a DNS name to your IP address and update the DNS " "name every time your IP is changed by your Internet provider. Dynamic DNS " "allows you to push your current public IP address to an gnudip server. Afterwards " "the Server will assign your DNS name with the new IP and if someone from the " -"internet asks for your DNS name he will get your current IP answered." +"Internet asks for your DNS name he will get your current IP answered." msgstr "" "La solution est d'assigner un nom DNS à votre adresse IP et d'actualiser le " "nom DNS à chaque fois que votre IP est modifiée par votre fournisseur " @@ -651,10 +718,14 @@ "org." #: plinth/modules/dynamicdns/templates/dynamicdns.html:61 +#, fuzzy, python-format +#| msgid "" +#| "If your freedombox is connected behind some NAT router, don't forget to " +#| "add portforwarding (i.e. forward some standard ports like 80 and 443) to " +#| "your freedombox device." msgid "" -"If your freedombox is connected behind some NAT router, don't forget to add " -"portforwarding (i.e. forward some standard ports like 80 and 443) to your " -"freedombox device." +"If your %(box_name)s is connected behind some NAT router, don't forget to " +"add port forwarding (i.e. forward some standard ports like 80 and 443)." msgstr "" "Si votre FreedomBox est connectée derrière un routeur réalisant du NAT, " "n'oubliez pas d'ajouter la redirection de port (« portforwarding », par " @@ -684,20 +755,27 @@ "de NAT." #: plinth/modules/dynamicdns/templates/dynamicdns_status.html:35 -msgid "Direct connection to the internet." +#, fuzzy +#| msgid "Direct connection to the internet." +msgid "Direct connection to the Internet." msgstr "Connexion directe à l'Internet." #: plinth/modules/dynamicdns/templates/dynamicdns_status.html:37 -#, python-format -msgid "" -"Behind NAT, this means that dynamic DNS service will poll the \"IP check URL" -"\" for changes (we need the \"IP check URL\" for this reason - otherwise we " -"will not detect IP changes). It may take up to %(timer)s minutes until we " -"update your DNS entry in case of WAN IP change." +#, fuzzy, python-format +#| msgid "" +#| "Behind NAT, this means that dynamic DNS service will poll the \"IP check " +#| "URL\" for changes (we need the \"IP check URL\" for this reason - " +#| "otherwise we will not detect IP changes). It may take up to %(timer)s " +#| "minutes until we update your DNS entry in case of WAN IP change." +msgid "" +"Behind NAT. This means that Dynamic DNS service will poll the \"IP check URL" +"\" for changes (the \"IP check URL\" entry is needed for this - otherwise IP " +"changes will not be detected). In case the WAN IP changes, it may take up " +"to %(timer)s minutes until your DNS entry is updated." msgstr "" "Derrière le NAT, un service DNS dynamique sondera la résolution IP/URL ou " "\"IP check URL\" pour vérifier des modifications (nous avons besoin de la " -"résoultion \"IP check URL\" pour cette raison - sinon, nous ne détecterons " +"résolution \"IP check URL\" pour cette raison - sinon, nous ne détecterons " "pas les modifications de l'IP). Cela pourrait prendre jusque %(timer)s " "minutes avant de mettre à jour votre entrée DNS en cas de modification de " "l'IP WAN." @@ -713,11 +791,15 @@ msgstr "Pare-feu" #: plinth/modules/firewall/templates/firewall.html:28 -#, python-format -msgid "" -"Firewall is a network security system that controls the incoming and " -"outgoing network traffic on your %(box_name)s. Keeping a firewall enabled " -"and properly configured reduces risk of security threat from the Internet." +#, fuzzy, python-format +#| msgid "" +#| "Firewall is a network security system that controls the incoming and " +#| "outgoing network traffic on your %(box_name)s. Keeping a firewall enabled " +#| "and properly configured reduces risk of security threat from the Internet." +msgid "" +"Firewall is a security system that controls the incoming and outgoing " +"network traffic on your %(box_name)s. Keeping a firewall enabled and " +"properly configured reduces risk of security threat from the Internet." msgstr "" "Un Pare-feu ou « Firewall » est un système de sécurité réseau permettant de " "contrôler le trafic entrant et sortant sur %(box_name)s. Garder un pare-feu " @@ -725,8 +807,8 @@ "Internet." #: plinth/modules/firewall/templates/firewall.html:36 -msgid "The following is the current status:" -msgstr "Voici l'état actuel :" +msgid "Current status:" +msgstr "" #: plinth/modules/firewall/templates/firewall.html:41 #, python-format @@ -747,11 +829,13 @@ msgstr "Service/Port" #: plinth/modules/firewall/templates/firewall.html:67 +#: plinth/modules/letsencrypt/templates/letsencrypt.html:91 #: plinth/modules/names/templates/names.html:51 msgid "Enabled" msgstr "Activé" #: plinth/modules/firewall/templates/firewall.html:70 +#: plinth/modules/letsencrypt/templates/letsencrypt.html:93 #: plinth/modules/names/templates/names.html:53 msgid "Disabled" msgstr "Désactivé" @@ -773,10 +857,15 @@ msgstr "Bloqué" #: plinth/modules/firewall/templates/firewall.html:103 +#, fuzzy +#| msgid "" +#| "The operation of the firewall is automatic. When you enable a service it " +#| "is automatically permitted in the firewall and you disable a service is " +#| "automatically disabled in the firewall." msgid "" "The operation of the firewall is automatic. When you enable a service it is " -"automatically permitted in the firewall and you disable a service is " -"automatically disabled in the firewall." +"also permitted in the firewall and when you disable a service it is also " +"disabled in the firewall." msgstr "" "Le fonctionnement du pare-feu est automatique. Lorsque vous activez un " "service, il est automatiquement permis par le pare-feu, si vous le " @@ -794,30 +883,30 @@ msgid "User account created, you are now logged in" msgstr "Compte utilisateur créé, vous êtes maintenant connecté." -#: plinth/modules/first_boot/templates/firstboot_state0.html:50 -msgid "Congratulations! Your FreedomBox is up and running!" -msgstr "Félicitations ! Votre FreedomBox fonctionne !" +#: plinth/modules/first_boot/templates/firstboot_navbar.html:23 +#: plinth/modules/help/templates/help_index.html:25 +#: plinth/templates/base.html:102 +msgid "Help" +msgstr "Aide" + +#: plinth/modules/first_boot/templates/firstboot_state0.html:45 +#, fuzzy +#| msgid "Start setup" +msgid "Start Setup" +msgstr "Démarrer l'Installation" -#: plinth/modules/first_boot/templates/firstboot_state0.html:54 +#: plinth/modules/first_boot/templates/firstboot_state0.html:49 +#, python-format msgid "" -"Please provide the following basic information to complete the setup process." +"To complete the setup of your %(box_name)s, please provide some basic " +"information." msgstr "" -"Cliquer sur « Suivant» pour achever la configuration en enregistrant les " -"informations de base." -#: plinth/modules/first_boot/templates/firstboot_state0.html:62 -msgid "Next" -msgstr "Suivant" - -#: plinth/modules/first_boot/templates/firstboot_state1.html:39 +#: plinth/modules/first_boot/templates/firstboot_state1.html:41 msgid "Administrator Account" msgstr "Compte administrateur" -#: plinth/modules/first_boot/templates/firstboot_state1.html:42 -#| msgid "" -#| "Choose a username and password to access this web interface. The password " -#| "can be changed and other users can be added later. An LDAP user with " -#| "administrative privileges (sudo) is also created." +#: plinth/modules/first_boot/templates/firstboot_state1.html:44 msgid "" "Choose a username and password to access this web interface. The password " "can be changed later. This user will be granted administrative privileges. " @@ -828,7 +917,7 @@ "de privilèges administrateur. Les autres utilisateurs peuvent être créés " "plus tard." -#: plinth/modules/first_boot/templates/firstboot_state1.html:55 +#: plinth/modules/first_boot/templates/firstboot_state1.html:57 msgid "Box it up!" msgstr "Enregistrer et lancer FreedomBox !" @@ -837,36 +926,47 @@ msgstr "Configuration terminée !" #: plinth/modules/first_boot/templates/firstboot_state10.html:32 +#, fuzzy, python-format +#| msgid "" +#| "To make your FreedomBox functional, you need some applications. " +#| "Applications will be installed the first time you access them." msgid "" -"FreedomBox setup is now complete. However, you should check the network " -"setup and modify it if necessary. Do not forget to change the default Wi-Fi " -"passwords." -msgstr "" -"La configuration de la FreedomBox est achevée. Toutefois, vous devriez " -"vérifier la configuration réseau et la modifier si nécessaire. N'oubliez pas " -"de modifier les mots de passe Wi-Fi par défaut." - -#: plinth/modules/first_boot/templates/firstboot_state10.html:40 -msgid "" -"To make your FreedomBox functional, you need some applications. " -"Applications will be installed the first time you access them." +"%(box_name)s setup is now complete. To make your %(box_name)s functional, " +"you need some applications. They will be installed the first time you " +"access them." msgstr "" "Pour faire fonctionner votre FreedomBox, vous avez besoin d'applications. " "Les applications seront installées lorsque vous y accéderez pour la première " "fois." -#: plinth/modules/first_boot/templates/firstboot_state10.html:47 -msgid "Network Configuration" +#: plinth/modules/first_boot/templates/firstboot_state10.html:41 +msgid "Go to Apps" +msgstr "Aller aux Applis" + +#: plinth/modules/first_boot/templates/firstboot_state10.html:44 +#, fuzzy +#| msgid "Network Configuration" +msgid "Current Network Configuration" msgstr "Configuration Réseau" -#: plinth/modules/first_boot/templates/firstboot_state10.html:54 +#: plinth/modules/first_boot/templates/firstboot_state10.html:47 +#, fuzzy +#| msgid "" +#| "FreedomBox setup is now complete. However, you should check the network " +#| "setup and modify it if necessary. Do not forget to change the default Wi-" +#| "Fi passwords." +msgid "" +"You should check the network setup and modify it if necessary. Do not forget " +"to change the default Wi-Fi passwords!" +msgstr "" +"La configuration de la FreedomBox est achevée. Toutefois, vous devriez " +"vérifier la configuration réseau et la modifier si nécessaire. N'oubliez pas " +"de modifier les mots de passe Wi-Fi par défaut." + +#: plinth/modules/first_boot/templates/firstboot_state10.html:57 msgid "Go to Networks" msgstr "Aller aux Réseaux" -#: plinth/modules/first_boot/templates/firstboot_state10.html:59 -msgid "Go to Apps" -msgstr "Aller aux Applis" - #: plinth/modules/first_boot/views.py:60 msgid "Setup Complete" msgstr "Installation Achevée" @@ -879,9 +979,9 @@ msgid "Where to Get Help" msgstr "Où Obtenir de l'Aide" -#: plinth/modules/help/help.py:38 plinth/modules/help/help.py:72 -msgid "FreedomBox Manual" -msgstr "Manuel FreedomBox" +#: plinth/modules/help/help.py:38 +msgid "Manual" +msgstr "" #: plinth/modules/help/help.py:48 msgid "Documentation and FAQ" @@ -890,17 +990,32 @@ #: plinth/modules/help/help.py:55 #, python-brace-format msgid "About {box_name}" -msgstr "A Propos de {box_name}" +msgstr "À Propos de {box_name}" + +#: plinth/modules/help/help.py:73 +#, fuzzy, python-brace-format +#| msgid "About {box_name}" +msgid "{box_name} Manual" +msgstr "À Propos de {box_name}" #: plinth/modules/help/templates/help_about.html:30 +#, fuzzy, python-format +#| msgid "" +#| "FreedomBox is a community project to develop, design and promote personal " +#| "servers running free software for private, personal communications. It " +#| "is a networking appliance designed to allow interfacing with the rest of " +#| "the Internet under conditions of protected privacy and data security. It " +#| "hosts applications such as blog, wiki, website, social network, email, " +#| "web proxy and a Tor relay on a device that can replace your Wi-Fi router " +#| "so that your data stays with you." msgid "" -"FreedomBox is a community project to develop, design and promote personal " +"%(box_name)s is a community project to develop, design and promote personal " "servers running free software for private, personal communications. It is a " "networking appliance designed to allow interfacing with the rest of the " "Internet under conditions of protected privacy and data security. It hosts " "applications such as blog, wiki, website, social network, email, web proxy " -"and a Tor relay on a device that can replace your Wi-Fi router so that your " -"data stays with you." +"and a Tor relay, on a device that can replace your Wi-Fi router, so that " +"your data stays with you." msgstr "" "FreedomBox est un projet communautaire consacré au développement, au design " "et à la promotion de serveurs personnels utilisant des logiciels libres pour " @@ -908,7 +1023,7 @@ "interface entre vous et le reste de l'Internet afin de protéger votre vie " "privée et vos données. FreedomBox intègre des applications permettant " "notamment de publier un blog, un wiki, un site Internet, un réseau social, " -"de gérer des emails, un proxy Web et un relai Tor sur une machine pouvant " +"de gérer des emails, un proxy Web et un relais Tor sur une machine pouvant " "remplacer votre routeur Wi-Fi. Vos données restent donc avec vous." #: plinth/modules/help/templates/help_about.html:43 @@ -929,86 +1044,116 @@ "à l'architecture pair-à-pair qui a présidé à sa conception." #: plinth/modules/help/templates/help_about.html:56 +#, fuzzy, python-format +#| msgid "" +#| "There are a number of projects working to realize a future of distributed " +#| "services; FreedomBox aims to bring them all together in a convenient " +#| "package." msgid "" "There are a number of projects working to realize a future of distributed " -"services; FreedomBox aims to bring them all together in a convenient package." +"services; %(box_name)s aims to bring them all together in a convenient " +"package." msgstr "" "Il existe de nombreux projets dont le but est de développer une architecture " "distribuée de l'Internet. FreedomBox vise à les réunir sur des serveurs " "personnels." #: plinth/modules/help/templates/help_about.html:64 +#, fuzzy, python-format +#| msgid "" +#| "For more information about the FreedomBox project, see the FreedomBox Wiki." msgid "" -"For more information about the FreedomBox project, see the FreedomBox Wiki." +"For more information about the %(box_name)s project, see the %(box_name)s Wiki." msgstr "" "Pour plus d'informations sur le projet FreedomBox, visiter le site Wiki FreedomBox." -#: plinth/modules/help/templates/help_about.html:72 +#: plinth/modules/help/templates/help_about.html:73 msgid "Learn more »" msgstr "En savoir plus" -#: plinth/modules/help/templates/help_about.html:75 +#: plinth/modules/help/templates/help_about.html:76 #, python-format msgid "You are running Plinth version %(version)s." msgstr "Vous utilisez Plinth, version %(version)s." -#: plinth/modules/help/templates/help_index.html:25 -#: plinth/templates/base.html:98 -msgid "Help" -msgstr "Aide" +#: plinth/modules/help/templates/help_base.html:36 +#, python-format +msgid "%(box_name)s Setup" +msgstr "" #: plinth/modules/help/templates/help_index.html:29 -#, python-format +#, fuzzy, python-format +#| msgid "" +#| "The FreedomBox Manual is the best place to " +#| "start for information regarding %(box_name)s." msgid "" -"The FreedomBox Manual is the best place to " +"The %(box_name)s Manual is the best place to " "start for information regarding %(box_name)s." msgstr "" "Le Manuel FreedomBox propose des informations " -"des informations de base sur %(box_name)s." +"de base sur %(box_name)s." #: plinth/modules/help/templates/help_index.html:36 +#, fuzzy, python-format +#| msgid "" +#| " " +#| "FreedomBox project wiki contains further information." msgid "" -" FreedomBox " -"project wiki contains further information." +" " +"%(box_name)s project wiki contains further information." msgstr "" "Vous trouverez sur le site wiki FreedomBox des instructions supplémentaires en " "plusieurs langues." #: plinth/modules/help/templates/help_index.html:43 -msgid "" -"To seek help from FreedomBox community, queries may be posted on the " -"mailing list. The list archives also contain information about problems " -"faced by other users and possible solutions." +#, fuzzy, python-format +#| msgid "" +#| "To seek help from FreedomBox community, queries may be posted on the mailing list. The list archives also contain information about " +#| "problems faced by other users and possible solutions." +msgid "" +"To seek help from %(box_name)s community, queries may be posted on the mailing list. The list archives also contain information about " +"problems faced by other users and possible solutions." msgstr "" "Si vous avez besoin d'une aide supplémentaire, vous pouvez poser vos " -"questions en anglais sur la liste " -"de discussion du projet. Les archives de la liste contiennent aussi des " -"informations sur les problèmes rencontrés par les utilisateurs ainsi que les " -"solutions probablement apportées." +"questions en anglais sur la liste de discussion du projet. " +"Les archives de la liste contiennent aussi des informations sur les " +"problèmes rencontrés par les utilisateurs ainsi que les solutions " +"probablement apportées." #: plinth/modules/help/templates/help_index.html:53 +#, python-format msgid "" -"Many FreedomBox contributors and users are also available on the #freedombox " -"channel of the irc.oftc.net IRC network." +"Many %(box_name)s contributors and users are also available on the irc.oftc." +"net IRC network. Join and request help on the #freedombox " +"channel using the IRC web interface." msgstr "" -"Un bon nombre de contributeurs et d'utilisateurs de la FreedomBox sont " -"également accessibles sur le canal IRC #freedombox du réseau irc.oftc.net." #: plinth/modules/ikiwiki/__init__.py:38 -msgid "Wiki & Blog (Ikiwiki)" +#, fuzzy +#| msgid "Wiki & Blog (Ikiwiki)" +msgid "Wiki and Blog (ikiwiki)" msgstr "Wiki et Blogue (Ikiwiki)" #: plinth/modules/ikiwiki/__init__.py:43 -msgid "Ikiwiki wikis and blogs" +#, fuzzy +#| msgid "Ikiwiki wikis and blogs" +msgid "ikiwiki wikis and blogs" msgstr "Wikis et blogues Ikiwiki" #: plinth/modules/ikiwiki/forms.py:29 -msgid "Enable Ikiwiki" +#, fuzzy +#| msgid "Enable Ikiwiki" +msgid "Enable ikiwiki" msgstr "Activer Ikiwiki" #: plinth/modules/ikiwiki/forms.py:36 @@ -1038,25 +1183,31 @@ "ikiwiki\">/ikiwiki." #: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:27 -#, python-format -msgid "Delete Wiki/Blog %(name)s" +#, fuzzy, python-format +#| msgid "Delete Wiki/Blog %(name)s" +msgid "Delete Wiki or Blog %(name)s" msgstr "Supprimer le Wiki/Blogue %(name)s" #: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:33 +#, fuzzy +#| msgid "" +#| "This action will remove all the posts, pages and comments including " +#| "revision history. Delete this wiki/blog permanently?" msgid "" "This action will remove all the posts, pages and comments including revision " -"history. Delete this wiki/blog permanently?" +"history. Delete this wiki or blog permanently?" msgstr "" "Cette action aura pour effet de supprimer tous les posts, les pages et les " "commentaires, tout comme l'historique des révisions. Voulez-vous supprimer " "ce Wiki/Blogue de façon permanente ?" -#: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:43 +#: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:44 #, python-format msgid "Delete %(name)s" msgstr "Supprimer %(name)s" -#: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:46 +#: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:47 +#: plinth/modules/monkeysphere/templates/monkeysphere.html:60 #: plinth/modules/networks/templates/connections_delete.html:41 #: plinth/modules/users/templates/users_delete.html:41 msgid "Cancel" @@ -1089,7 +1240,9 @@ msgstr "Créer" #: plinth/modules/ikiwiki/views.py:73 -msgid "Wiki & Blog" +#, fuzzy +#| msgid "Wiki & Blog" +msgid "Wiki and Blog" msgstr "Wiki et Blogue" #: plinth/modules/ikiwiki/views.py:106 @@ -1097,8 +1250,10 @@ msgstr "Gestion Wikis et Blogues" #: plinth/modules/ikiwiki/views.py:132 -msgid "Create Wiki/Blog" -msgstr "Créer Wiki/Blogue" +#, fuzzy +#| msgid "Create a Wiki or Blog" +msgid "Create Wiki or Blog" +msgstr "Créer un Wiki ou un Blogue" #: plinth/modules/ikiwiki/views.py:145 #, python-brace-format @@ -1128,11 +1283,156 @@ #: plinth/modules/ikiwiki/views.py:176 #, python-brace-format msgid "Could not delete {name}: {error}" -msgstr "La supression de {name} n'a pas abouti : {error}" +msgstr "La suppression de {name} n'a pas abouti : {error}" #: plinth/modules/ikiwiki/views.py:182 -msgid "Delete Wiki/Blog" -msgstr "Suprimer Wiki/Blogue" +#, fuzzy +#| msgid "Delete Wiki/Blog" +msgid "Delete Wiki or Blog" +msgstr "Supprimer Wiki/Blogue" + +#: plinth/modules/letsencrypt/__init__.py:43 +#: plinth/modules/letsencrypt/templates/letsencrypt.html:38 +#: plinth/modules/letsencrypt/views.py:45 +msgid "Certificates (Let's Encrypt)" +msgstr "" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:41 +#, python-format +msgid "" +"A digital certficate allows users of a web service to verify the identity of " +"the service and to securely communicate with it. %(box_name)s can " +"automatically obtain and setup digital certificates for each available " +"domain. It does so by proving itself to be the owner of a domain to Let's " +"Encrypt, a certficate authority (CA)." +msgstr "" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:52 +msgid "" +"Let's Encrypt is a free, automated, and open certificate authority, run for " +"the public’s benefit by the Internet Security Research Group (ISRG). Please " +"read and agree with the Let's Encrypt Subscriber Agreement before using this service." +msgstr "" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:66 +#: plinth/modules/monkeysphere/templates/monkeysphere.html:70 +#, fuzzy +#| msgid "Domain Name" +msgid "Domain" +msgstr "Nom de Domaine" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:67 +msgid "Certificate Status" +msgstr "" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:68 +#, fuzzy +#| msgid "Security" +msgid "Website Security" +msgstr "Sécurité" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:69 +#: plinth/modules/monkeysphere/templates/monkeysphere.html:72 +#, fuzzy +#| msgid "Applications" +msgid "Actions" +msgstr "Applications" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:79 +#, python-format +msgid "Expires on %(expiry_date)s" +msgstr "" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:85 +msgid "No certficate" +msgstr "" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:102 +msgid "Revoke" +msgstr "" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:108 +msgid "Re-obtain" +msgstr "" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:115 +msgid "Obtain" +msgstr "" + +#: plinth/modules/letsencrypt/views.py:55 +#, python-brace-format +msgid "Certificate successfully revoked for domain {domain}" +msgstr "" + +#: plinth/modules/letsencrypt/views.py:60 +#, python-brace-format +msgid "Failed to revoke certificate for domain {domain}: {error}" +msgstr "" + +#: plinth/modules/letsencrypt/views.py:72 +#, python-brace-format +msgid "Certificate successfully obtained for domain {domain}" +msgstr "" + +#: plinth/modules/letsencrypt/views.py:77 +#, python-brace-format +msgid "Failed to obtain certificate for domain {domain}: {error}" +msgstr "" + +#: plinth/modules/monkeysphere/__init__.py:32 +#: plinth/modules/monkeysphere/templates/monkeysphere.html:35 +#: plinth/modules/monkeysphere/views.py:44 +msgid "Monkeysphere" +msgstr "" + +#: plinth/modules/monkeysphere/templates/monkeysphere.html:38 +msgid "" +"With Monkeysphere, a PGP key can be generated for each configured domain " +"serving SSH. The PGP public key can then be uploaded to the PGP keyservers. " +"Users connecting to this machine through SSH can verify that they are " +"connecting to the correct host. For users to trust the key, at least one " +"person (usually the machine owner) must sign the key using the regular PGP " +"key signing process. See the Monkeysphere SSH documentation for more details." +msgstr "" + +#: plinth/modules/monkeysphere/templates/monkeysphere.html:53 +msgid "Publishing key to keyserver..." +msgstr "" + +#: plinth/modules/monkeysphere/templates/monkeysphere.html:71 +msgid "GPG Fingerprint" +msgstr "" + +#: plinth/modules/monkeysphere/templates/monkeysphere.html:83 +#: plinth/modules/names/views.py:45 +msgid "Not Available" +msgstr "Indisponible" + +#: plinth/modules/monkeysphere/templates/monkeysphere.html:93 +msgid "Generate PGP Key" +msgstr "" + +#: plinth/modules/monkeysphere/templates/monkeysphere.html:101 +msgid "Publish Key" +msgstr "" + +#: plinth/modules/monkeysphere/views.py:58 +msgid "Generated PGP key." +msgstr "" + +#: plinth/modules/monkeysphere/views.py:83 +msgid "Cancelled key publishing." +msgstr "" + +#: plinth/modules/monkeysphere/views.py:120 +msgid "Published key to keyserver." +msgstr "" + +#: plinth/modules/monkeysphere/views.py:122 +msgid "Error occurred while publishing key." +msgstr "" #: plinth/modules/mumble/__init__.py:38 #: plinth/modules/mumble/templates/mumble.html:26 @@ -1153,7 +1453,7 @@ "Mumble is an open source, low-latency, encrypted, high quality voice chat " "software." msgstr "" -"Mumble est un logiciel de chat vocal de haute qualité, open source, encrypté " +"Mumble est un logiciel de chat vocal de haute qualité, open source, crypté " "et à faible temps de latence." #: plinth/modules/mumble/templates/mumble.html:36 @@ -1175,61 +1475,48 @@ msgid "Mumble server is not running" msgstr "Le serveur Mumble n'est pas actif" -#: plinth/modules/names/__init__.py:30 +#: plinth/modules/names/__init__.py:29 msgid "HTTP" msgstr "HTTP" -#: plinth/modules/names/__init__.py:31 +#: plinth/modules/names/__init__.py:30 msgid "HTTPS" msgstr "HTTPS" -#: plinth/modules/names/__init__.py:32 +#: plinth/modules/names/__init__.py:31 msgid "SSH" msgstr "SSH" -#: plinth/modules/names/__init__.py:46 plinth/modules/names/views.py:34 +#: plinth/modules/names/__init__.py:45 plinth/modules/names/views.py:34 msgid "Name Services" msgstr "Serveur de Noms" -#: plinth/modules/names/__init__.py:107 -msgid "Not Available" -msgstr "Indisponible" - #: plinth/modules/networks/__init__.py:108 #, python-brace-format msgid "Using DNSSEC on IPv{kind}" msgstr "Utilise DNSSEC sur IPv{kind}" #: plinth/modules/networks/forms.py:30 -msgid "-- select --" -msgstr "-- sélectionner --" - -#: plinth/modules/networks/forms.py:42 msgid "Connection Type" msgstr "Type de Connexion" -#: plinth/modules/networks/forms.py:49 plinth/modules/networks/forms.py:106 -#: plinth/modules/networks/forms.py:133 +#: plinth/modules/networks/forms.py:37 msgid "Connection Name" msgstr "Nom Connexion" -#: plinth/modules/networks/forms.py:51 plinth/modules/networks/forms.py:108 -#: plinth/modules/networks/forms.py:135 +#: plinth/modules/networks/forms.py:39 msgid "Physical Interface" msgstr "Interface Physique" -#: plinth/modules/networks/forms.py:53 plinth/modules/networks/forms.py:110 -#: plinth/modules/networks/forms.py:137 +#: plinth/modules/networks/forms.py:41 msgid "The network device that this connection should be bound to." msgstr "L'appareil réseau auquel cette connexion devrait être liée." -#: plinth/modules/networks/forms.py:56 plinth/modules/networks/forms.py:113 -#: plinth/modules/networks/forms.py:140 +#: plinth/modules/networks/forms.py:44 msgid "Firewall Zone" -msgstr "Zone Pare-Feu" +msgstr "Zone pare-feu" -#: plinth/modules/networks/forms.py:57 plinth/modules/networks/forms.py:114 -#: plinth/modules/networks/forms.py:141 +#: plinth/modules/networks/forms.py:45 msgid "" "The firewall zone will control which services are available over this " "interfaces. Select Internal only for trusted networks." @@ -1237,11 +1524,11 @@ "La zone pare-feu contrôlera quels services sont disponibles via ces " "interfaces. Sélectionnez « Interne » seulement pour des réseaux de confiance." -#: plinth/modules/networks/forms.py:61 plinth/modules/networks/forms.py:162 +#: plinth/modules/networks/forms.py:49 msgid "IPv4 Addressing Method" msgstr "Méthode d'adressage IPv4" -#: plinth/modules/networks/forms.py:62 +#: plinth/modules/networks/forms.py:50 msgid "" "\"Shared\" method will start a DHCP server and \"Automatic\" method will " "acquire configuration from a DHCP server." @@ -1249,15 +1536,15 @@ "La méthode « partagée » démarre un serveur DHCP. La méthode « Automatique » " "importe une configuration d'un serveur DHCP." -#: plinth/modules/networks/forms.py:68 plinth/modules/networks/forms.py:170 +#: plinth/modules/networks/forms.py:56 msgid "Address" msgstr "Adresse" -#: plinth/modules/networks/forms.py:72 plinth/modules/networks/forms.py:174 +#: plinth/modules/networks/forms.py:60 msgid "Netmask" msgstr "Masque sous-réseau" -#: plinth/modules/networks/forms.py:73 plinth/modules/networks/forms.py:175 +#: plinth/modules/networks/forms.py:61 msgid "" "Optional value. If left blank, a default netmask based on the address will " "be used." @@ -1265,21 +1552,21 @@ "Valeur optionnelle. Si laissée vide, un masque de sous-réseau basé sur " "l'adresse sera utilisé par défaut." -#: plinth/modules/networks/forms.py:78 plinth/modules/networks/forms.py:180 +#: plinth/modules/networks/forms.py:66 #: plinth/modules/networks/templates/connection_show.html:202 #: plinth/modules/networks/templates/connection_show.html:241 msgid "Gateway" msgstr "Passerelle" -#: plinth/modules/networks/forms.py:79 plinth/modules/networks/forms.py:181 +#: plinth/modules/networks/forms.py:67 msgid "Optional value." msgstr "Valeur optionnelle." -#: plinth/modules/networks/forms.py:83 plinth/modules/networks/forms.py:185 +#: plinth/modules/networks/forms.py:71 msgid "DNS Server" msgstr "Serveur DNS" -#: plinth/modules/networks/forms.py:84 plinth/modules/networks/forms.py:186 +#: plinth/modules/networks/forms.py:72 msgid "" "Optional value. If this value is given and IPv4 addressing method is " "\"Automatic\", the DNS Servers provided by a DHCP server will be ignored." @@ -1288,11 +1575,11 @@ "d'adressage IPv4 est « Automatique », les serveurs DNS fournis par le " "serveur DHCP seront ignorés." -#: plinth/modules/networks/forms.py:90 plinth/modules/networks/forms.py:192 +#: plinth/modules/networks/forms.py:78 msgid "Second DNS Server" msgstr "Second Serveur DNS" -#: plinth/modules/networks/forms.py:91 plinth/modules/networks/forms.py:193 +#: plinth/modules/networks/forms.py:79 msgid "" "Optional value. If this value is given and IPv4 Addressing Method is " "\"Automatic\", the DNS Servers provided by a DHCP server will be ignored." @@ -1301,29 +1588,29 @@ "d'adressage IPv4 est « Automatique », les serveurs DNS fournis par le " "serveur DHCP seront ignorés." -#: plinth/modules/networks/forms.py:121 -msgid "Show password" -msgstr "Montrer le mot de passe" +#: plinth/modules/networks/forms.py:89 +msgid "-- select --" +msgstr "-- sélectionner --" -#: plinth/modules/networks/forms.py:145 +#: plinth/modules/networks/forms.py:175 #: plinth/modules/networks/templates/connection_show.html:144 msgid "SSID" msgstr "SSID" -#: plinth/modules/networks/forms.py:146 +#: plinth/modules/networks/forms.py:176 msgid "The visible name of the network." msgstr "Le nom visible du réseau." -#: plinth/modules/networks/forms.py:148 +#: plinth/modules/networks/forms.py:178 #: plinth/modules/networks/templates/connection_show.html:157 msgid "Mode" msgstr "Mode" -#: plinth/modules/networks/forms.py:153 +#: plinth/modules/networks/forms.py:183 msgid "Authentication Mode" msgstr "Mode Authentification" -#: plinth/modules/networks/forms.py:154 +#: plinth/modules/networks/forms.py:184 msgid "" "Select WPA if the wireless network is secured and requires clients to have " "the password to connect." @@ -1331,17 +1618,9 @@ "Sélectionner WPA si votre réseau sans fil est sécurisé et s'il demande aux " "clients un mot de passe pour se connecter." -#: plinth/modules/networks/forms.py:158 +#: plinth/modules/networks/forms.py:188 msgid "Passphrase" -msgstr "Phrase Secrète" - -#: plinth/modules/networks/forms.py:166 -msgid "" -"Select Automatic (DHCP) if you are connecting to an existing wireless " -"network. Shared mode is useful when running an Access Point." -msgstr "" -"Sélectionner automatique (DHCP) si vous vous connectez à un réseau sans fil " -"existant. Le mode partagé est utile en cas de Point d'accès." +msgstr "Phrase secrète" #: plinth/modules/networks/networks.py:36 #: plinth/modules/networks/networks.py:56 @@ -1349,14 +1628,14 @@ msgstr "Connexions Réseau" #: plinth/modules/networks/networks.py:38 -#: plinth/modules/networks/networks.py:273 +#: plinth/modules/networks/networks.py:242 msgid "Nearby Wi-Fi Networks" msgstr "Réseaux Wi-Fi à Proximité" #: plinth/modules/networks/networks.py:40 -#: plinth/modules/networks/networks.py:295 +#: plinth/modules/networks/networks.py:264 msgid "Add Connection" -msgstr "Ajouter Connection" +msgstr "Ajouter connexion" #: plinth/modules/networks/networks.py:46 msgid "Networks" @@ -1368,70 +1647,70 @@ #: plinth/modules/networks/networks.py:100 msgid "Show Connection information" -msgstr "Montrer les informations sur la connection" +msgstr "Montrer les informations sur la connexion" #: plinth/modules/networks/networks.py:113 msgid "Cannot edit connection: Connection not found." -msgstr "Impossible de modifier la connection : connexion introuvable." +msgstr "Impossible de modifier la connexion : connexion introuvable." #: plinth/modules/networks/networks.py:119 msgid "This type of connection is not yet understood." -msgstr "Ce type de connection n'est pas encore intelligible." +msgstr "Ce type de connexion n'est pas encore intelligible." -#: plinth/modules/networks/networks.py:170 -#: plinth/modules/networks/networks.py:229 +#: plinth/modules/networks/networks.py:139 +#: plinth/modules/networks/networks.py:198 #: plinth/modules/networks/templates/connections_edit.html:34 msgid "Edit Connection" -msgstr "Modifier Connexion" +msgstr "Modifier connexion" -#: plinth/modules/networks/networks.py:240 +#: plinth/modules/networks/networks.py:209 #, python-brace-format msgid "Activated connection {name}." msgstr "Connexion {name} activée." -#: plinth/modules/networks/networks.py:243 +#: plinth/modules/networks/networks.py:212 msgid "Failed to activate connection: Connection not found." msgstr "Échec de l'activation de la connexion : connexion introuvable." -#: plinth/modules/networks/networks.py:247 +#: plinth/modules/networks/networks.py:216 #, python-brace-format msgid "Failed to activate connection {name}: No suitable device is available." msgstr "" -"Echec de l'activation de la connexion {name} : pas d'appareil adequat " +"Échec de l'activation de la connexion {name} : pas d'appareil adéquat " "disponible." -#: plinth/modules/networks/networks.py:260 +#: plinth/modules/networks/networks.py:229 #, python-brace-format msgid "Deactivated connection {name}." msgstr "Connexion {name} désactivée." -#: plinth/modules/networks/networks.py:263 +#: plinth/modules/networks/networks.py:232 msgid "Failed to de-activate connection: Connection not found." msgstr "Échec de la désactivation de la connexion : connexion introuvable." -#: plinth/modules/networks/networks.py:325 +#: plinth/modules/networks/networks.py:282 msgid "Adding New Ethernet Connection" msgstr "Ajouter Nouvelle Connexion Ethernet" -#: plinth/modules/networks/networks.py:350 +#: plinth/modules/networks/networks.py:300 msgid "Adding New PPPoE Connection" msgstr "Ajouter Nouvelle Connexion PPPoE" -#: plinth/modules/networks/networks.py:399 +#: plinth/modules/networks/networks.py:332 msgid "Adding New Wi-Fi Connection" msgstr "Ajouter Nouvelle Connexion Wi-Fi" -#: plinth/modules/networks/networks.py:413 +#: plinth/modules/networks/networks.py:346 #, python-brace-format msgid "Connection {name} deleted." msgstr "Connexion {name} supprimée." -#: plinth/modules/networks/networks.py:416 -#: plinth/modules/networks/networks.py:425 +#: plinth/modules/networks/networks.py:349 +#: plinth/modules/networks/networks.py:358 msgid "Failed to delete connection: Connection not found." msgstr "Échec de la suppression de la connexion : connexion introuvable." -#: plinth/modules/networks/networks.py:430 +#: plinth/modules/networks/networks.py:363 #: plinth/modules/networks/templates/connections_delete.html:26 msgid "Delete Connection" msgstr "Supprimer Connexion" @@ -1441,7 +1720,7 @@ msgstr "Modifier Connexion" #: plinth/modules/networks/templates/connection_show.html:43 -#: plinth/templates/base.html:119 +#: plinth/templates/base.html:123 msgid "Edit" msgstr "Modifier" @@ -1487,7 +1766,7 @@ #: plinth/modules/networks/templates/connection_show.html:88 msgid "State" -msgstr "Etat" +msgstr "État" #: plinth/modules/networks/templates/connection_show.html:93 msgid "State reason" @@ -1511,7 +1790,7 @@ #: plinth/modules/networks/templates/connection_show.html:121 msgid "Link state" -msgstr "Etat du lien" +msgstr "État du lien" #: plinth/modules/networks/templates/connection_show.html:125 msgid "cable is connected" @@ -1587,10 +1866,16 @@ msgstr "Zone pare-feu" #: plinth/modules/networks/templates/connection_show.html:280 -msgid "" -"This interface should be connected to local network/machine. If you connect " -"this interface to a public network, services meant to be available only " -"internally will become available externally. This is a security risk." +#, fuzzy +#| msgid "" +#| "This interface should be connected to local network/machine. If you " +#| "connect this interface to a public network, services meant to be " +#| "available only internally will become available externally. This is a " +#| "security risk." +msgid "" +"This interface should be connected to a local network/machine. If you " +"connect this interface to a public network, services meant to be available " +"only internally will become available externally. This is a security risk." msgstr "" "L'interface doit être connectée à la machine ou au réseau local. Si vous " "connectez cette interface au réseau public, les services destinés à une " @@ -1598,20 +1883,31 @@ "une faille de sécurité." #: plinth/modules/networks/templates/connection_show.html:300 -msgid "" -"This interface should receive your Internet connection. If you connect it " -"your a local network/machine, many services meant to available only " -"internally will not be available." +#, fuzzy +#| msgid "" +#| "This interface should receive your Internet connection. If you connect it " +#| "your a local network/machine, many services meant to available only " +#| "internally will not be available." +msgid "" +"This interface should receive your Internet connection. If you connect it to " +"a local network/machine, many services meant to available only internally " +"will not be available." msgstr "" -"Cette inferface doit recevoir votre connexion internet. Si vous la connectez " +"Cette interface doit recevoir votre connexion internet. Si vous la connectez " "à une machine ou un réseau local, beaucoup de services conçus pour un usage " "interne ne seront pas disponibles." #: plinth/modules/networks/templates/connection_show.html:319 -msgid "" -"This interface is not maintained by FreedomBox. Its security status is " -"unknown to FreedomBox. Many FreedomBox services may not be available on " -"this interface. It is recommended that you deactivate/delete this " +#, fuzzy, python-format +#| msgid "" +#| "This interface is not maintained by FreedomBox. Its security status is " +#| "unknown to FreedomBox. Many FreedomBox services may not be available on " +#| "this interface. It is recommended that you deactivate/delete this " +#| "connection and re-configure it." +msgid "" +"This interface is not maintained by %(box_name)s. Its security status is " +"unknown to %(box_name)s. Many %(box_name)s services may not be available on " +"this interface. It is recommended that you deactivate or delete this " "connection and re-configure it." msgstr "" "Cette interface n'est pas maintenue par FreedomBox. L'état de sa sécurité " @@ -1704,10 +2000,17 @@ msgstr "Activer le serveur OpenVPN" #: plinth/modules/openvpn/templates/openvpn.html:38 -#, python-format +#, fuzzy, python-format +#| msgid "" +#| "Virtual Private Network (VPN) is a technique for securely connecting two " +#| "machines in order to access resources of a private network. While you " +#| "are away from home, you can connect to your %(box_name)s in order to join " +#| "your home network and access private/internal services provided by " +#| "%(box_name)s. You can also access the rest of the Internet via " +#| "%(box_name)s for added security and anonymity." msgid "" "Virtual Private Network (VPN) is a technique for securely connecting two " -"machines in order to access resources of a private network. While you are " +"devices in order to access resources of a private network. While you are " "away from home, you can connect to your %(box_name)s in order to join your " "home network and access private/internal services provided by %(box_name)s. " "You can also access the rest of the Internet via %(box_name)s for added " @@ -1725,12 +2028,19 @@ msgstr "Profil" #: plinth/modules/openvpn/templates/openvpn.html:54 -#, python-format +#, fuzzy, python-format +#| msgid "" +#| "To connect to %(box_name)s's VPN, you need to download a profile and feed " +#| "it to an OpenVPN client on your mobile or desktop machine. OpenVPN " +#| "Clients are available for most platforms. See documentation on recommended clients and instructions on how to " +#| "configure them." msgid "" "To connect to %(box_name)s's VPN, you need to download a profile and feed it " "to an OpenVPN client on your mobile or desktop machine. OpenVPN Clients are " "available for most platforms. See documentation on recommended clients and instructions on how to " "configure them." msgstr "" @@ -1795,7 +2105,7 @@ #: plinth/modules/openvpn/views.py:126 msgid "Setup failed." -msgstr "Echec de l'installation." +msgstr "Échec de l'installation." #: plinth/modules/owncloud/owncloud.py:38 msgid "Enable ownCloud" @@ -1867,7 +2177,7 @@ "Select your pagekite server. Set \"pagekite.net\" to use the default " "pagekite.net server." msgstr "" -"Sélectionner votre serveur pagekite. Etablir \"pagekite.net\" pour une " +"Sélectionner votre serveur pagekite. Établir \"pagekite.net\" pour une " "utilisation par défaut du serveur pagekite.net." #: plinth/modules/pagekite/forms.py:55 @@ -1876,7 +2186,7 @@ #: plinth/modules/pagekite/forms.py:56 msgid "Port of your pagekite server (default: 80)" -msgstr "Port de votre serveur pagekite (default: 80)" +msgstr "Port de votre serveur pagekite (par défaut : 80)" #: plinth/modules/pagekite/forms.py:58 msgid "Kite name" @@ -1884,7 +2194,7 @@ #: plinth/modules/pagekite/forms.py:59 msgid "Example: mybox.pagekite.me" -msgstr "Example: monpc.pagekite.me" +msgstr "Exemple : monpc.pagekite.me" #: plinth/modules/pagekite/forms.py:62 msgid "Invalid kite name" @@ -2031,7 +2341,7 @@ msgid "" "%(box_name)s is connected to a (wireless) router which you don't control." msgstr "" -"%(box_name)s est connecté à un réseau (sans fil) que vous ne contrôlez pas." +"%(box_name)s est connecté à un réseau (sans fil) que vous ne contrôlez pas." #: plinth/modules/pagekite/templates/pagekite_introduction.html:50 msgid "" @@ -2130,7 +2440,7 @@ #: plinth/modules/pagekite/views.py:34 msgid "About PageKite" -msgstr "A propos de PageKite" +msgstr "À propos de PageKite" #: plinth/modules/pagekite/views.py:38 msgid "Standard Services" @@ -2288,6 +2598,64 @@ msgid "Quassel core service is not running" msgstr "Quassel core n'est pas actif" +#: plinth/modules/repro/__init__.py:36 +#: plinth/modules/repro/templates/repro.html:26 +#: plinth/modules/repro/views.py:55 +#, fuzzy +#| msgid "Server port" +msgid "SIP Server (repro)" +msgstr "Port serveur" + +#: plinth/modules/repro/__init__.py:41 +#, fuzzy +#| msgid "Second DNS Server" +msgid "repro SIP Server" +msgstr "Second Serveur DNS" + +#: plinth/modules/repro/forms.py:29 +#, fuzzy +#| msgid "Enable Quassel core service" +msgid "Enable repro service" +msgstr "Activer le cœur Quassel" + +#: plinth/modules/repro/templates/repro.html:29 +msgid "" +"repro provides various SIP services that a SIP softphone can utilize to " +"provide audio and video calls as well as presence and instant messaging. " +"repro provides a server and SIP user accounts that clients can use to let " +"their presence known. It also acts as a proxy to federate SIP " +"communications to other servers on the Internet similar to email." +msgstr "" + +#: plinth/modules/repro/templates/repro.html:39 +msgid "" +"To make SIP calls, a client application is needed. Available clients include " +"Jitsi (for computers) and CSipSimple (for Android phones)." +msgstr "" + +#: plinth/modules/repro/templates/repro.html:48 +msgid "" +"Note: Before using repro, domains and users will need to " +"be configured using the web-based " +"configuration panel. Users in the admin group will be able to " +"log in to the repro configuration panel. After setting the domain, it is " +"required to restart the repro service. Disable the service and re-enable it." +msgstr "" + +#: plinth/modules/repro/templates/repro.html:63 +#, fuzzy +#| msgid "Quassel core service is running" +msgid "repro service is running" +msgstr "Quassel core est actif" + +#: plinth/modules/repro/templates/repro.html:66 +#, fuzzy +#| msgid "Quassel core service is not running" +msgid "repro service is not running" +msgstr "Quassel core n'est pas actif" + #: plinth/modules/restore/__init__.py:36 #: plinth/modules/restore/templates/restore_index.html:26 #: plinth/modules/restore/views.py:46 @@ -2303,13 +2671,19 @@ msgstr "Activer reStore" #: plinth/modules/restore/templates/restore_index.html:29 -#, python-format +#, fuzzy, python-format +#| msgid "" +#| "reStore is a server for unhosted web " +#| "applications. The idea is to uncouple web applications from data. No " +#| "matter where a web application is served from, the data can be stored on " +#| "an unhosted storage server of user's choice. With reStore, your " +#| "%(cfg.box_name)s becomes your unhosted storage server." msgid "" "reStore is a server for unhosted web " "applications. The idea is to uncouple web applications from data. No " "matter where a web application is served from, the data can be stored on an " -"unhosted storage server of user's choice. With reStore, your " -"%(cfg.box_name)s becomes your unhosted storage server." +"unhosted storage server of user's choice. With reStore, your %(box_name)s " +"becomes your unhosted storage server." msgstr "" "reStore est un serveur pour applications Web non hébergées. L'idée est de découpler les applications Web des " @@ -2360,7 +2734,7 @@ "server field like imaps://imap.example.com." msgstr "" "Vous pouvez accéder à RoundCube depuis /roundcube. Rensigner le nom d'utilisateur et le mot de passe de votre compte de " +"a>. Renseigner le nom d'utilisateur et le mot de passe de votre compte de " "courrier électronique auquel vous souhaitez accéder, suivis du nom de " "domaine du serveur IMAP de votre fournisseur d'email, comme imap." "example.com. Pour de l'IMAP sur du SSL (recommandé), remplissez les " @@ -2417,7 +2791,7 @@ #: plinth/modules/system/system.py:33 #: plinth/modules/system/templates/system.html:25 -#: plinth/templates/base.html:105 +#: plinth/templates/base.html:109 msgid "System Configuration" msgstr "Configuration Système" @@ -2436,33 +2810,81 @@ "Ces options affectent %(box_name)s à son niveau le plus général, faites " "attention." -#: plinth/modules/tor/__init__.py:50 -msgid "Tor relay port available" -msgstr "Port du relai Tor disponible" +#: plinth/modules/tor/__init__.py:48 plinth/modules/tor/templates/tor.html:35 +msgid "Anonymity Network (Tor)" +msgstr "Réseau Anonyme (Tor)" + +#: plinth/modules/tor/__init__.py:53 +#, fuzzy +#| msgid "Anonymity Network (Tor)" +msgid "Tor Anonymity Network" +msgstr "Réseau Anonyme (Tor)" #: plinth/modules/tor/__init__.py:58 +msgid "Tor Bridge Relay" +msgstr "" + +#: plinth/modules/tor/__init__.py:76 plinth/modules/tor/views.py:144 +msgid "Tor Hidden Service" +msgstr "Service Caché Tor" + +#: plinth/modules/tor/__init__.py:222 +msgid "Tor relay port available" +msgstr "Port du relais Tor disponible" + +#: plinth/modules/tor/__init__.py:230 msgid "Obfs3 transport registered" msgstr "Transport Obfs3 enregistré" -#: plinth/modules/tor/__init__.py:64 +#: plinth/modules/tor/__init__.py:236 msgid "Obfs4 transport registered" msgstr "Transport Obfs4 enregistré" -#: plinth/modules/tor/__init__.py:101 +#: plinth/modules/tor/__init__.py:273 #, python-brace-format msgid "Access URL {url} on tcp{kind} via Tor" msgstr "Accédez à l'URL {url} sur tcp{kind} via Tor" -#: plinth/modules/tor/__init__.py:112 +#: plinth/modules/tor/__init__.py:284 #, python-brace-format msgid "Confirm Tor usage at {url} on tcp{kind}" msgstr "Confirmez l'utilisation de Tor pour {url} sur tcp{kind}" -#: plinth/modules/tor/templates/tor.html:26 plinth/modules/tor/tor.py:66 -msgid "Anonymity Network (Tor)" -msgstr "Réseau Anonyme (Tor)" +#: plinth/modules/tor/forms.py:32 +msgid "Enable Tor" +msgstr "Activer Tor" + +#: plinth/modules/tor/forms.py:35 +msgid "Enable Tor Hidden Service" +msgstr "Activer les Services Cachés Tor" -#: plinth/modules/tor/templates/tor.html:29 +#: plinth/modules/tor/forms.py:38 +#, fuzzy, python-brace-format +#| msgid "" +#| "A hidden service will allow FreedomBox to provide selected services (such " +#| "as ownCloud or Chat) without revealing its location." +msgid "" +"A hidden service will allow {box_name} to provide selected services (such as " +"ownCloud or chat) without revealing its location." +msgstr "" +"Un service caché permettra à FreedomBox de proposer les services " +"sélectionnés (comme ownCloud ou Chat) sans révéler votre emplacement." + +#: plinth/modules/tor/forms.py:42 +msgid "Download software packages over Tor" +msgstr "Téléchargez les logiciels via Tor" + +#: plinth/modules/tor/forms.py:44 +msgid "" +"When enabled, software will be downloaded over the Tor network for " +"installations and upgrades. This adds a degree of privacy and security " +"during software downloads." +msgstr "" +"Lorsqu'activé, le logiciel sera téléchargé via le réseau Tor pour " +"installation et mises à niveau. Ce processus ajoute un degré de sécurité et " +"de confidentialité durant le téléchargement des logiciels." + +#: plinth/modules/tor/templates/tor.html:38 msgid "" "Tor is an anonymous communication system. You can learn more about it from " "the Tor Project website. For " @@ -2476,28 +2898,34 @@ "recommande l'utilisation du Navigateur Tor." -#: plinth/modules/tor/templates/tor.html:44 +#: plinth/modules/tor/templates/tor.html:54 +#, fuzzy +#| msgid "Configuration updated" +msgid "Tor configuration is being updated" +msgstr "Configuration actualisée" + +#: plinth/modules/tor/templates/tor.html:62 msgid "Tor is running" msgstr "Tor est actif" -#: plinth/modules/tor/templates/tor.html:47 +#: plinth/modules/tor/templates/tor.html:65 msgid "Tor is not running" msgstr "Tot n'est pas actif" -#: plinth/modules/tor/templates/tor.html:59 +#: plinth/modules/tor/templates/tor.html:77 msgid "Hidden Service" msgstr "Services Cachés" -#: plinth/modules/tor/templates/tor.html:60 -#: plinth/modules/tor/templates/tor.html:102 +#: plinth/modules/tor/templates/tor.html:78 +#: plinth/modules/tor/templates/tor.html:120 msgid "Port" msgstr "Port" -#: plinth/modules/tor/templates/tor.html:85 +#: plinth/modules/tor/templates/tor.html:103 msgid "Bridge" msgstr "Pont" -#: plinth/modules/tor/templates/tor.html:88 +#: plinth/modules/tor/templates/tor.html:106 #, python-format msgid "" "Your %(box_name)s is configured as a Tor bridge with obfsproxy, so it can " @@ -2510,90 +2938,42 @@ "routeur ou un pare-feu, vous devez vous assurer que les ports suivants " "soient ouverts et réacheminés si nécessaire :" -#: plinth/modules/tor/templates/tor.html:101 +#: plinth/modules/tor/templates/tor.html:119 msgid "Service" msgstr "Service" -#: plinth/modules/tor/templates/tor.html:117 +#: plinth/modules/tor/templates/tor.html:135 msgid "SOCKS" msgstr "SOCKS" -#: plinth/modules/tor/templates/tor.html:120 +#: plinth/modules/tor/templates/tor.html:138 #, python-format msgid "A Tor SOCKS port is available on your %(box_name)s on TCP port 9050." msgstr "" "Un port SOCKS pour Tor est accessible pour %(box_name)s sur le port TCP 9050." -#: plinth/modules/tor/tor.py:46 -msgid "Enable Tor" -msgstr "Activer Tor" - -#: plinth/modules/tor/tor.py:49 -msgid "Enable Tor Hidden Service" -msgstr "Activer les Services Cachés Tor" - -#: plinth/modules/tor/tor.py:51 -msgid "" -"A hidden service will allow FreedomBox to provide selected services (such as " -"ownCloud or Chat) without revealing its location." -msgstr "" -"Un service caché permettra à FreedomBox de proposer les services " -"sélectionnés (comme ownCloud ou Chat) sans révéler votre emplacement." - -#: plinth/modules/tor/tor.py:55 -msgid "Download software packages over Tor" -msgstr "Téléchargez les logiciels via Tor" - -#: plinth/modules/tor/tor.py:57 -msgid "" -"When enabled, software will be downloaded over the Tor network for " -"installations and upgrades. This adds a degree of privacy and security " -"during software downloads." -msgstr "" -"Lorsqu'activé, le logiciel sera téléchargé via le réseau Tor pour " -"installation et mises à niveau. Ce processus ajoute un degré de sécurité et " -"de confidentialité durant le téléchargement des logiciels." - -#: plinth/modules/tor/tor.py:85 plinth/modules/tor/tor.py:285 -msgid "Tor Hidden Service" -msgstr "Service Caché Tor" - -#: plinth/modules/tor/tor.py:115 +#: plinth/modules/tor/views.py:68 msgid "Tor Control Panel" msgstr "Panneau de configuration Tor" -#: plinth/modules/tor/tor.py:240 +#: plinth/modules/tor/views.py:79 #, python-brace-format msgid "Action error: {0} [{1}] [{2}]" msgstr "Erreur sur action : {0} [{1}] [{2}]" -#: plinth/modules/tor/tor.py:256 -msgid "Tor enabled" -msgstr "Tor activé" - -#: plinth/modules/tor/tor.py:259 -msgid "Tor disabled" -msgstr "Tor désactivé" - -#: plinth/modules/tor/tor.py:264 -msgid "Tor hidden service enabled" -msgstr "Services cachés Tor activés" - -#: plinth/modules/tor/tor.py:267 -msgid "Tor hidden service disabled" -msgstr "Services cachés Tor désactivés" - -#: plinth/modules/tor/tor.py:292 -msgid "Enabled package download over Tor" -msgstr "Téléchargement de paquets via Tor activé" - -#: plinth/modules/tor/tor.py:295 -msgid "Disabled package download over Tor" -msgstr "Téléchargement de paquets via Tor désactivé" +#: plinth/modules/tor/views.py:148 +#, fuzzy +#| msgid "Configuration updated" +msgid "Configuration updated." +msgstr "Configuration actualisée" + +#: plinth/modules/tor/views.py:150 +msgid "An error occurred during configuration." +msgstr "" #: plinth/modules/transmission/__init__.py:38 #: plinth/modules/transmission/templates/transmission.html:26 -#: plinth/modules/transmission/views.py:63 +#: plinth/modules/transmission/views.py:67 msgid "BitTorrent (Transmission)" msgstr "BitTorrent (Transmission)" @@ -2610,10 +2990,6 @@ msgstr "Répertoire de téléchargement" #: plinth/modules/transmission/forms.py:34 -#| msgid "" -#| "Directory where downloads are saved. If you change the default " -#| "directory, ensure that the new directory exists and is writable by " -#| "\"debian-tramission\" user." msgid "" "Directory where downloads are saved. If you change the default directory, " "ensure that the new directory exists and is writable by \"debian-transmission" @@ -2672,75 +3048,75 @@ "When enabled, the unattended-upgrades program will be run once per day. It " "will attempt to perform any package upgrades that are available." msgstr "" -"Lorsqu'activé, le programme unattended-upgrades sera mis en oeuvre une fois " +"Lorsqu'activé, le programme unattended-upgrades sera mis en œuvre une fois " "par jour. Il essayera de réaliser l'ensemble des mises à niveau disponibles." -#: plinth/modules/upgrades/templates/upgrades.html:40 -msgid "There was an error while upgrading." -msgstr "Une erreur est survenue durant la mise à niveau." - -#: plinth/modules/upgrades/templates/upgrades.html:43 -#: plinth/modules/upgrades/templates/upgrades.html:59 -msgid "Output from unattended-upgrades:" -msgstr "Résultat pour unattended-upgrades :" - -#: plinth/modules/upgrades/templates/upgrades.html:50 -msgid "The operating system is up to date now.  " -msgstr "Le système d'exploitation est à jour.  " - -#: plinth/modules/upgrades/templates/upgrades.html:53 -msgid "Show Details" -msgstr "Montrer les détails" +#: plinth/modules/upgrades/templates/upgrades.html:37 +msgid "" +"Upgrades install the latest software and security updates. When automatic " +"upgrades are enabled, upgrades are automatically run every night. You don't " +"normally need to start the upgrade process." +msgstr "" -#: plinth/modules/upgrades/templates/upgrades.html:69 +#: plinth/modules/upgrades/templates/upgrades.html:45 msgid "" -"This will run unattended-upgrades, which will attempt to upgrade your system " -"with the latest Debian packages. It may take a few minutes to complete." +"Depending on the number of packages to install, this may take a long time to " +"complete. While upgrades are in progress, you will not be able to install " +"other packages. During the upgrade, this web interface may be temporarily " +"unavailable and show an error. Refresh the page to continue." msgstr "" -"Vous allez démarrer unattended-upgrades qui a pour but de mettre à niveau " -"votre système avec les derniers paquets Debian." -#: plinth/modules/upgrades/templates/upgrades.html:80 +#: plinth/modules/upgrades/templates/upgrades.html:58 msgid "Upgrade now »" msgstr "Mettre à niveau »" -#: plinth/modules/upgrades/templates/upgrades.html:87 -msgid "System is being upgraded." -msgstr "Le système est en cours de mise à niveau." +#: plinth/modules/upgrades/templates/upgrades.html:65 +#, fuzzy +#| msgid "ejabberd is running" +msgid "A package manager is running." +msgstr "ejabberd est actif" + +#: plinth/modules/upgrades/templates/upgrades.html:70 +msgid "Recent log from upgrades:" +msgstr "" -#: plinth/modules/upgrades/views.py:35 plinth/modules/upgrades/views.py:64 +#: plinth/modules/upgrades/views.py:36 plinth/modules/upgrades/views.py:66 msgid "Automatic Upgrades" msgstr "Mises à niveau automatiques" -#: plinth/modules/upgrades/views.py:37 +#: plinth/modules/upgrades/views.py:38 msgid "Upgrade Packages" msgstr "Mise à Niveau Paquets" -#: plinth/modules/upgrades/views.py:75 +#: plinth/modules/upgrades/views.py:96 +#, fuzzy +#| msgid "Upgrade completed." +msgid "Upgrade process started." +msgstr "Mise à niveau terminée." + +#: plinth/modules/upgrades/views.py:99 +#, fuzzy +#| msgid "Upgrade failed." +msgid "Starting upgrade failed." +msgstr "Échec de la mise à niveau." + +#: plinth/modules/upgrades/views.py:102 msgid "Package Upgrades" msgstr "Paquets Mis à Niveau" -#: plinth/modules/upgrades/views.py:116 +#: plinth/modules/upgrades/views.py:131 #, python-brace-format msgid "Error when configuring unattended-upgrades: {error}" msgstr "Erreur lors de la configuration de unattended-upgrades : {error}" -#: plinth/modules/upgrades/views.py:121 +#: plinth/modules/upgrades/views.py:136 msgid "Automatic upgrades enabled" msgstr "Mises à niveau automatiques activées" -#: plinth/modules/upgrades/views.py:123 +#: plinth/modules/upgrades/views.py:138 msgid "Automatic upgrades disabled" msgstr "Mises à niveau automatiques désactivées" -#: plinth/modules/upgrades/views.py:142 -msgid "Upgrade completed." -msgstr "Mise à niveau terminée." - -#: plinth/modules/upgrades/views.py:144 -msgid "Upgrade failed." -msgstr "Échec de la mise à niveau." - #: plinth/modules/users/__init__.py:36 msgid "Users and Groups" msgstr "Utilisateurs et Groupes" @@ -2780,21 +3156,32 @@ #: plinth/modules/users/forms.py:80 #, python-brace-format msgid "Failed to add new user to {group} group." -msgstr "Echec de l'ajout d'un nouvel utilisateur au groupe {group}." +msgstr "Échec de l'ajout d'un nouvel utilisateur au groupe {group}." + +#: plinth/modules/users/forms.py:92 +msgid "SSH Keys" +msgstr "" -#: plinth/modules/users/forms.py:126 +#: plinth/modules/users/forms.py:96 +msgid "" +"Setting an SSH public key will allow this user to securely log in to the " +"system without using a password. You may enter multiple keys, one on each " +"line. Blank lines and lines starting with # will be ignored." +msgstr "" + +#: plinth/modules/users/forms.py:136 msgid "Renaming LDAP user failed." msgstr "Le changement du nom LDAP de l'utilisateur a échoué." -#: plinth/modules/users/forms.py:138 +#: plinth/modules/users/forms.py:148 msgid "Failed to remove user from group." msgstr "Échec du retrait de l'utilisateur du groupe." -#: plinth/modules/users/forms.py:149 +#: plinth/modules/users/forms.py:159 msgid "Failed to add user to group." msgstr "Échec de l'ajout de l'utilisateur au groupe." -#: plinth/modules/users/forms.py:174 +#: plinth/modules/users/forms.py:188 msgid "Changing LDAP user password failed." msgstr "Le changement de mot de passe pour l'utilisateur LDAP a échoué." @@ -2813,7 +3200,7 @@ msgstr "Créer Utilisateur" #: plinth/modules/users/templates/users_delete.html:26 -#: plinth/modules/users/views.py:103 +#: plinth/modules/users/views.py:110 msgid "Delete User" msgstr "Supprimer Utilisateur" @@ -2868,22 +3255,22 @@ msgid "Edit User" msgstr "Modifier Utilisateur" -#: plinth/modules/users/views.py:113 +#: plinth/modules/users/views.py:120 #, python-brace-format msgid "User {user} deleted." msgstr "Utilisateur {user} supprimé." -#: plinth/modules/users/views.py:120 +#: plinth/modules/users/views.py:127 msgid "Deleting LDAP user failed." msgstr "La suppression de l'utilisateur LDAP a échoué." -#: plinth/modules/users/views.py:129 +#: plinth/modules/users/views.py:136 msgid "Change Password" msgstr "Changer Mot de Passe" -#: plinth/modules/users/views.py:130 +#: plinth/modules/users/views.py:137 msgid "Password changed successfully." -msgstr "Mot de passe changé avec succés." +msgstr "Mot de passe changé avec succès." #: plinth/modules/xmpp/__init__.py:41 plinth/modules/xmpp/__init__.py:46 #: plinth/modules/xmpp/templates/xmpp.html:26 plinth/modules/xmpp/views.py:75 @@ -2965,8 +3352,10 @@ msgid "Secure Shell (SSH) Server" msgstr "Serveur Secure Shell (SSH)" -#: plinth/service.py:78 -msgid "FreedomBox Web Interface (Plinth)" +#: plinth/service.py:79 +#, fuzzy, python-brace-format +#| msgid "FreedomBox Web Interface (Plinth)" +msgid "{box_name} Web Interface (Plinth)" msgstr "Interface web Freedombox (Plinth)" #: plinth/templates/404.html:25 @@ -3004,27 +3393,25 @@ "traitement et réparation." #: plinth/templates/base.html:49 -msgid "Plinth administrative interface for the FreedomBox" +#, fuzzy, python-format +#| msgid "Plinth administrative interface for the FreedomBox" +msgid "Plinth administrative interface for the %(box_name)s" msgstr "Interface d'administration Plinth pour FreedomBox" -#: plinth/templates/base.html:52 plinth/templates/base.html.py:88 -msgid "FreedomBox" -msgstr "FreedomBox" - -#: plinth/templates/base.html:81 +#: plinth/templates/base.html:83 msgid "Toggle navigation" msgstr "Basculer Navigation" -#: plinth/templates/base.html:121 plinth/templates/base.html.py:122 +#: plinth/templates/base.html:125 plinth/templates/base.html.py:126 msgid "Change password" msgstr "Changer le mot de passe" -#: plinth/templates/base.html:125 plinth/templates/base.html.py:126 -#: plinth/templates/base.html:139 plinth/templates/base.html.py:141 +#: plinth/templates/base.html:129 plinth/templates/base.html.py:130 +#: plinth/templates/base.html:143 plinth/templates/base.html.py:145 msgid "Log out" msgstr "Se déconnecter" -#: plinth/templates/base.html:131 plinth/templates/base.html.py:133 +#: plinth/templates/base.html:135 plinth/templates/base.html.py:137 msgid "Log in" msgstr "S'identifier" @@ -3065,6 +3452,86 @@ msgid "%(percentage)s%% complete" msgstr "%(percentage)s%% effectué" +#~ msgid "show password" +#~ msgstr "montrer le mot de passe" + +#~ msgid "The following is the current status:" +#~ msgstr "Voici l'état actuel :" + +#~ msgid "Congratulations! Your FreedomBox is up and running!" +#~ msgstr "Félicitations ! Votre FreedomBox fonctionne !" + +#~ msgid "" +#~ "Please provide the following basic information to complete the setup " +#~ "process." +#~ msgstr "" +#~ "Cliquer sur « Suivant » pour achever la configuration en enregistrant les " +#~ "informations de base." + +#~ msgid "Next" +#~ msgstr "Suivant" + +#~ msgid "FreedomBox Manual" +#~ msgstr "Manuel FreedomBox" + +#~ msgid "" +#~ "Many FreedomBox contributors and users are also available on the " +#~ "#freedombox channel of the irc.oftc.net IRC network." +#~ msgstr "" +#~ "Un bon nombre de contributeurs et d'utilisateurs de la FreedomBox sont " +#~ "également accessibles sur le canal IRC #freedombox du réseau irc.oftc.net." + +#~ msgid "Create Wiki/Blog" +#~ msgstr "Créer Wiki/Blogue" + +#~ msgid "" +#~ "Select Automatic (DHCP) if you are connecting to an existing wireless " +#~ "network. Shared mode is useful when running an Access Point." +#~ msgstr "" +#~ "Sélectionner automatique (DHCP) si vous vous connectez à un réseau sans " +#~ "fil existant. Le mode partagé est utile en cas de Point d'accès." + +#~ msgid "Tor enabled" +#~ msgstr "Tor activé" + +#~ msgid "Tor disabled" +#~ msgstr "Tor désactivé" + +#~ msgid "Tor hidden service enabled" +#~ msgstr "Services cachés Tor activés" + +#~ msgid "Tor hidden service disabled" +#~ msgstr "Services cachés Tor désactivés" + +#~ msgid "Enabled package download over Tor" +#~ msgstr "Téléchargement de paquets via Tor activé" + +#~ msgid "Disabled package download over Tor" +#~ msgstr "Téléchargement de paquets via Tor désactivé" + +#~ msgid "There was an error while upgrading." +#~ msgstr "Une erreur est survenue durant la mise à niveau." + +#~ msgid "Output from unattended-upgrades:" +#~ msgstr "Résultat pour unattended-upgrades :" + +#~ msgid "The operating system is up to date now.  " +#~ msgstr "Le système d'exploitation est à jour.  " + +#~ msgid "Show Details" +#~ msgstr "Montrer les détails" + +#~ msgid "" +#~ "This will run unattended-upgrades, which will attempt to upgrade your " +#~ "system with the latest Debian packages. It may take a few minutes to " +#~ "complete." +#~ msgstr "" +#~ "Vous allez démarrer unattended-upgrades qui a pour but de mettre à niveau " +#~ "votre système avec les derniers paquets Debian." + +#~ msgid "System is being upgraded." +#~ msgstr "Le système est en cours de mise à niveau." + #~ msgid "" #~ "You can install and run various services and applications on your " #~ "%(box_name)s." diff -Nru plinth-0.7.2/plinth/locale/it/LC_MESSAGES/django.po plinth-0.8.1/plinth/locale/it/LC_MESSAGES/django.po --- plinth-0.7.2/plinth/locale/it/LC_MESSAGES/django.po 2015-12-23 11:34:40.000000000 +0000 +++ plinth-0.8.1/plinth/locale/it/LC_MESSAGES/django.po 2016-02-16 03:55:53.000000000 +0000 @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-12-20 13:58+0530\n" +"POT-Creation-Date: 2016-01-31 22:19+0530\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -48,11 +48,15 @@ msgid "Cannot connect to {host}:{port}" msgstr "" +#: plinth/context_processors.py:36 +msgid "FreedomBox" +msgstr "" + #: plinth/modules/apps/apps.py:26 msgid "Apps" msgstr "" -#: plinth/modules/apps/apps.py:32 plinth/templates/base.html.py:90 +#: plinth/modules/apps/apps.py:32 plinth/templates/base.html.py:93 msgid "Applications" msgstr "" @@ -87,10 +91,11 @@ msgstr "" #: plinth/modules/avahi/templates/avahi.html:29 +#, python-format msgid "" -"Service discovery allows other machines on the network to discover your " -"FreedomBox and services running on it. It also allows FreedomBox to " -"discover other machines and services running on your local network. Service " +"Service discovery allows other devices on the network to discover your " +"%(box_name)s and services running on it. It also allows %(box_name)s to " +"discover other devices and services running on your local network. Service " "discovery is not essential and works only on internal networks. It may be " "disabled to improve security especially when connecting to a hostile local " "network." @@ -99,14 +104,15 @@ #: plinth/modules/avahi/templates/avahi.html:40 #: plinth/modules/datetime/templates/datetime.html:35 #: plinth/modules/deluge/templates/deluge.html:39 -#: plinth/modules/dynamicdns/dynamicdns.py:38 +#: plinth/modules/dynamicdns/dynamicdns.py:39 #: plinth/modules/firewall/templates/firewall.html:57 #: plinth/modules/mumble/templates/mumble.html:44 #: plinth/modules/networks/templates/connection_show.html:261 #: plinth/modules/openvpn/templates/openvpn.html:81 #: plinth/modules/privoxy/templates/privoxy.html:48 #: plinth/modules/quassel/templates/quassel.html:50 -#: plinth/modules/tor/templates/tor.html:39 +#: plinth/modules/repro/templates/repro.html:58 +#: plinth/modules/tor/templates/tor.html:48 #: plinth/modules/transmission/templates/transmission.html:42 #: plinth/modules/xmpp/templates/xmpp.html:58 msgid "Status" @@ -129,9 +135,10 @@ #: plinth/modules/owncloud/templates/owncloud.html:51 #: plinth/modules/privoxy/templates/privoxy.html:62 #: plinth/modules/quassel/templates/quassel.html:65 +#: plinth/modules/repro/templates/repro.html:72 #: plinth/modules/roundcube/templates/roundcube.html:62 #: plinth/modules/shaarli/templates/shaarli.html:40 -#: plinth/modules/tor/templates/tor.html:74 +#: plinth/modules/tor/templates/tor.html:92 #: plinth/modules/transmission/templates/transmission.html:56 #: plinth/modules/xmpp/templates/xmpp.html:72 msgid "Configuration" @@ -147,10 +154,11 @@ #: plinth/modules/openvpn/templates/openvpn.html:138 #: plinth/modules/privoxy/templates/privoxy.html:70 #: plinth/modules/quassel/templates/quassel.html:73 +#: plinth/modules/repro/templates/repro.html:80 #: plinth/modules/restore/templates/restore_index.html:54 #: plinth/modules/roundcube/templates/roundcube.html:70 #: plinth/modules/shaarli/templates/shaarli.html:48 -#: plinth/modules/tor/templates/tor.html:82 +#: plinth/modules/tor/templates/tor.html:100 #: plinth/modules/transmission/templates/transmission.html:64 #: plinth/modules/upgrades/templates/upgrades_configure.html:34 #: plinth/modules/xmpp/templates/xmpp.html:80 @@ -159,12 +167,13 @@ #: plinth/modules/avahi/views.py:73 plinth/modules/datetime/views.py:85 #: plinth/modules/deluge/views.py:80 -#: plinth/modules/dynamicdns/dynamicdns.py:368 +#: plinth/modules/dynamicdns/dynamicdns.py:371 #: plinth/modules/ikiwiki/views.py:95 plinth/modules/mumble/views.py:80 #: plinth/modules/openvpn/views.py:142 plinth/modules/privoxy/views.py:83 -#: plinth/modules/quassel/views.py:76 plinth/modules/restore/views.py:68 -#: plinth/modules/roundcube/views.py:84 plinth/modules/shaarli/views.py:74 -#: plinth/modules/transmission/views.py:105 plinth/modules/xmpp/views.py:100 +#: plinth/modules/quassel/views.py:76 plinth/modules/repro/views.py:77 +#: plinth/modules/restore/views.py:68 plinth/modules/roundcube/views.py:84 +#: plinth/modules/shaarli/views.py:74 plinth/modules/transmission/views.py:109 +#: plinth/modules/xmpp/views.py:100 msgid "Configuration updated" msgstr "" @@ -172,60 +181,63 @@ #: plinth/modules/deluge/views.py:82 plinth/modules/ikiwiki/views.py:97 #: plinth/modules/mumble/views.py:82 plinth/modules/openvpn/views.py:144 #: plinth/modules/owncloud/owncloud.py:93 plinth/modules/privoxy/views.py:85 -#: plinth/modules/quassel/views.py:78 plinth/modules/restore/views.py:70 -#: plinth/modules/roundcube/views.py:86 plinth/modules/shaarli/views.py:76 -#: plinth/modules/tor/tor.py:250 plinth/modules/transmission/views.py:107 -#: plinth/modules/upgrades/views.py:103 plinth/modules/xmpp/views.py:102 +#: plinth/modules/quassel/views.py:78 plinth/modules/repro/views.py:79 +#: plinth/modules/restore/views.py:70 plinth/modules/roundcube/views.py:86 +#: plinth/modules/shaarli/views.py:76 plinth/modules/tor/views.py:111 +#: plinth/modules/transmission/views.py:111 +#: plinth/modules/upgrades/views.py:118 plinth/modules/xmpp/views.py:102 msgid "Setting unchanged" msgstr "" -#: plinth/modules/config/config.py:83 plinth/modules/config/config.py:120 -#: plinth/modules/dynamicdns/dynamicdns.py:145 +#: plinth/modules/config/config.py:84 plinth/modules/config/config.py:121 +#: plinth/modules/dynamicdns/dynamicdns.py:148 msgid "Invalid domain name" msgstr "" -#: plinth/modules/config/config.py:94 +#: plinth/modules/config/config.py:95 msgid "Hostname" msgstr "" -#: plinth/modules/config/config.py:96 +#: plinth/modules/config/config.py:97 +#, python-brace-format msgid "" -"Hostname is the local name by which other machines on the local network " -"reach your machine. It must start and end with an alphabet or a digit and " -"have as interior characters only alphabets, digits and hyphens. Total " +"Hostname is the local name by which other devices on the local network can " +"reach your {box_name}. It must start and end with an alphabet or a digit " +"and have as interior characters only alphabets, digits and hyphens. Total " "length must be 63 characters or less." msgstr "" -#: plinth/modules/config/config.py:104 +#: plinth/modules/config/config.py:105 msgid "Invalid hostname" msgstr "" -#: plinth/modules/config/config.py:107 plinth/modules/config/config.py:153 +#: plinth/modules/config/config.py:108 plinth/modules/config/config.py:153 #: plinth/modules/config/config.py:265 -#: plinth/modules/dynamicdns/dynamicdns.py:140 +#: plinth/modules/dynamicdns/dynamicdns.py:143 msgid "Domain Name" msgstr "" -#: plinth/modules/config/config.py:109 +#: plinth/modules/config/config.py:110 +#, python-brace-format msgid "" -"Domain name is the global name by which other machines on the Internet can " -"reach you. It must consist of labels separated by dots. Each label must " -"start and end with an alphabet or a digit and have as interior characters " -"only alphabets, digits and hyphens. Length of each label must be 63 " -"characters or less. Total length of domain name must be 253 characters or " -"less." +"Domain name is the global name by which other devices on the Internet can " +"reach your {box_name}. It must consist of labels separated by dots. Each " +"label must start and end with an alphabet or a digit and have as interior " +"characters only alphabets, digits and hyphens. Length of each label must be " +"63 characters or less. Total length of domain name must be 253 characters " +"or less." msgstr "" -#: plinth/modules/config/config.py:124 +#: plinth/modules/config/config.py:125 msgid "Language" msgstr "" -#: plinth/modules/config/config.py:126 -msgid "Language for this FreedomBox web administration interface" +#: plinth/modules/config/config.py:127 +msgid "Language for this web administration interface" msgstr "" #: plinth/modules/config/config.py:135 -#: plinth/modules/dynamicdns/dynamicdns.py:36 +#: plinth/modules/dynamicdns/dynamicdns.py:37 #: plinth/modules/ikiwiki/views.py:36 msgid "Configure" msgstr "" @@ -412,147 +424,151 @@ msgid "Result" msgstr "" -#: plinth/modules/dynamicdns/dynamicdns.py:34 plinth/modules/help/help.py:40 +#: plinth/modules/dynamicdns/dynamicdns.py:35 plinth/modules/help/help.py:40 msgid "About" msgstr "" -#: plinth/modules/dynamicdns/dynamicdns.py:44 -#: plinth/modules/dynamicdns/dynamicdns.py:53 +#: plinth/modules/dynamicdns/dynamicdns.py:45 +#: plinth/modules/dynamicdns/dynamicdns.py:54 msgid "Dynamic DNS" msgstr "" -#: plinth/modules/dynamicdns/dynamicdns.py:70 +#: plinth/modules/dynamicdns/dynamicdns.py:71 msgid "" "The Variables <User>, <Pass>, <Ip>, <Domain> may be " "used within the URL. For details see the update URL templates of the example " "providers." msgstr "" -#: plinth/modules/dynamicdns/dynamicdns.py:74 +#: plinth/modules/dynamicdns/dynamicdns.py:75 msgid "" "Please choose an update protocol according to your provider. If your " "provider does not support the GnudIP protocol or your provider is not listed " "you may use the update URL of your provider." msgstr "" -#: plinth/modules/dynamicdns/dynamicdns.py:79 +#: plinth/modules/dynamicdns/dynamicdns.py:80 msgid "" "Please do not enter a URL here (like \"https://example.com/\") but only the " -"hostname of the GnuDIP server (like \"example.pcom\")." +"hostname of the GnuDIP server (like \"example.com\")." msgstr "" -#: plinth/modules/dynamicdns/dynamicdns.py:83 -msgid "The public domain name you want use to reach your box." +#: plinth/modules/dynamicdns/dynamicdns.py:84 +#, python-brace-format +msgid "The public domain name you want use to reach your {box_name}." msgstr "" -#: plinth/modules/dynamicdns/dynamicdns.py:85 +#: plinth/modules/dynamicdns/dynamicdns.py:87 msgid "Use this option if your provider uses self signed certificates." msgstr "" -#: plinth/modules/dynamicdns/dynamicdns.py:88 +#: plinth/modules/dynamicdns/dynamicdns.py:90 msgid "" "If this option is selected, your username and password will be used for HTTP " "basic authentication." msgstr "" -#: plinth/modules/dynamicdns/dynamicdns.py:91 +#: plinth/modules/dynamicdns/dynamicdns.py:93 msgid "" "Leave this field empty if you want to keep your previous configured password." msgstr "" -#: plinth/modules/dynamicdns/dynamicdns.py:94 +#: plinth/modules/dynamicdns/dynamicdns.py:96 +#, python-brace-format msgid "" -"Optional Value. If your FreedomBox is not connected directly to the Internet " +"Optional Value. If your {box_name} is not connected directly to the Internet " "(i.e. connected to a NAT router) this URL is used to figure out the real " -"Internet IP. The URL should simply return the IP wherethe client comes from. " -"Example: http://myip.datasystems24.de" +"Internet IP. The URL should simply return the IP where the client comes from " +"(example: http://myip.datasystems24.de)." msgstr "" -#: plinth/modules/dynamicdns/dynamicdns.py:101 +#: plinth/modules/dynamicdns/dynamicdns.py:104 msgid "" "You should have been requested to select a username when you created the " "account." msgstr "" -#: plinth/modules/dynamicdns/dynamicdns.py:112 +#: plinth/modules/dynamicdns/dynamicdns.py:115 msgid "Enable Dynamic DNS" msgstr "" -#: plinth/modules/dynamicdns/dynamicdns.py:115 +#: plinth/modules/dynamicdns/dynamicdns.py:118 msgid "Service type" msgstr "" -#: plinth/modules/dynamicdns/dynamicdns.py:120 +#: plinth/modules/dynamicdns/dynamicdns.py:123 msgid "GnudIP Server Address" msgstr "" -#: plinth/modules/dynamicdns/dynamicdns.py:125 +#: plinth/modules/dynamicdns/dynamicdns.py:128 msgid "Invalid server name" msgstr "" -#: plinth/modules/dynamicdns/dynamicdns.py:128 +#: plinth/modules/dynamicdns/dynamicdns.py:131 msgid "Update URL" msgstr "" -#: plinth/modules/dynamicdns/dynamicdns.py:132 -msgid "accept all SSL certificates" +#: plinth/modules/dynamicdns/dynamicdns.py:135 +msgid "Accept all SSL certificates" msgstr "" -#: plinth/modules/dynamicdns/dynamicdns.py:136 -msgid "use HTTP basic authentication" +#: plinth/modules/dynamicdns/dynamicdns.py:139 +msgid "Use HTTP basic authentication" msgstr "" -#: plinth/modules/dynamicdns/dynamicdns.py:148 -#: plinth/modules/networks/forms.py:118 plinth/modules/transmission/forms.py:39 +#: plinth/modules/dynamicdns/dynamicdns.py:151 +#: plinth/modules/networks/forms.py:146 plinth/modules/transmission/forms.py:39 msgid "Username" msgstr "" -#: plinth/modules/dynamicdns/dynamicdns.py:151 -#: plinth/modules/networks/forms.py:119 plinth/modules/transmission/forms.py:43 +#: plinth/modules/dynamicdns/dynamicdns.py:154 +#: plinth/modules/networks/forms.py:147 plinth/modules/transmission/forms.py:43 msgid "Password" msgstr "" -#: plinth/modules/dynamicdns/dynamicdns.py:154 -msgid "show password" +#: plinth/modules/dynamicdns/dynamicdns.py:157 +#: plinth/modules/networks/forms.py:149 +msgid "Show password" msgstr "" -#: plinth/modules/dynamicdns/dynamicdns.py:158 +#: plinth/modules/dynamicdns/dynamicdns.py:161 msgid "IP check URL" msgstr "" -#: plinth/modules/dynamicdns/dynamicdns.py:184 +#: plinth/modules/dynamicdns/dynamicdns.py:187 msgid "Please provide update URL or a GnuDIP Server" msgstr "" -#: plinth/modules/dynamicdns/dynamicdns.py:187 +#: plinth/modules/dynamicdns/dynamicdns.py:190 msgid "Please provide GnuDIP username" msgstr "" -#: plinth/modules/dynamicdns/dynamicdns.py:190 +#: plinth/modules/dynamicdns/dynamicdns.py:193 msgid "Please provide GnuDIP domain" msgstr "" -#: plinth/modules/dynamicdns/dynamicdns.py:195 +#: plinth/modules/dynamicdns/dynamicdns.py:198 msgid "Please provide a password" msgstr "" -#: plinth/modules/dynamicdns/dynamicdns.py:214 +#: plinth/modules/dynamicdns/dynamicdns.py:217 msgid "Configure Dynamic DNS" msgstr "" -#: plinth/modules/dynamicdns/dynamicdns.py:236 +#: plinth/modules/dynamicdns/dynamicdns.py:239 msgid "Status of Dynamic DNS" msgstr "" #: plinth/modules/dynamicdns/templates/dynamicdns.html:25 -msgid "DynamicDNS client" +msgid "Dynamic DNS Client" msgstr "" #: plinth/modules/dynamicdns/templates/dynamicdns.html:28 +#, python-format msgid "" "If your internet provider changes your IP address periodic (i.e. every 24h) " "it may be hard for others to find you in the WEB. And for this reason nobody " -"may find the services which are provided by FreedomBox (like your ownCloud)." +"may find the services which are provided by %(box_name)s, such as ownCloud." msgstr "" #: plinth/modules/dynamicdns/templates/dynamicdns.html:37 @@ -562,7 +578,7 @@ "allows you to push your current public IP address to an gnudip server. Afterwards " "the Server will assign your DNS name with the new IP and if someone from the " -"internet asks for your DNS name he will get your current IP answered." +"Internet asks for your DNS name he will get your current IP answered." msgstr "" #: plinth/modules/dynamicdns/templates/dynamicdns.html:50 @@ -575,10 +591,10 @@ msgstr "" #: plinth/modules/dynamicdns/templates/dynamicdns.html:61 +#, python-format msgid "" -"If your freedombox is connected behind some NAT router, don't forget to add " -"portforwarding (i.e. forward some standard ports like 80 and 443) to your " -"freedombox device." +"If your %(box_name)s is connected behind some NAT router, don't forget to " +"add port forwarding (i.e. forward some standard ports like 80 and 443)." msgstr "" #: plinth/modules/dynamicdns/templates/dynamicdns_configure.html:30 @@ -598,16 +614,16 @@ msgstr "" #: plinth/modules/dynamicdns/templates/dynamicdns_status.html:35 -msgid "Direct connection to the internet." +msgid "Direct connection to the Internet." msgstr "" #: plinth/modules/dynamicdns/templates/dynamicdns_status.html:37 #, python-format msgid "" -"Behind NAT, this means that dynamic DNS service will poll the \"IP check URL" -"\" for changes (we need the \"IP check URL\" for this reason - otherwise we " -"will not detect IP changes). It may take up to %(timer)s minutes until we " -"update your DNS entry in case of WAN IP change." +"Behind NAT. This means that Dynamic DNS service will poll the \"IP check URL" +"\" for changes (the \"IP check URL\" entry is needed for this - otherwise IP " +"changes will not be detected). In case the WAN IP changes, it may take up " +"to %(timer)s minutes until your DNS entry is updated." msgstr "" #: plinth/modules/dynamicdns/templates/dynamicdns_status.html:48 @@ -623,13 +639,13 @@ #: plinth/modules/firewall/templates/firewall.html:28 #, python-format msgid "" -"Firewall is a network security system that controls the incoming and " -"outgoing network traffic on your %(box_name)s. Keeping a firewall enabled " -"and properly configured reduces risk of security threat from the Internet." +"Firewall is a security system that controls the incoming and outgoing " +"network traffic on your %(box_name)s. Keeping a firewall enabled and " +"properly configured reduces risk of security threat from the Internet." msgstr "" #: plinth/modules/firewall/templates/firewall.html:36 -msgid "The following is the current status:" +msgid "Current status:" msgstr "" #: plinth/modules/firewall/templates/firewall.html:41 @@ -646,11 +662,13 @@ msgstr "" #: plinth/modules/firewall/templates/firewall.html:67 +#: plinth/modules/letsencrypt/templates/letsencrypt.html:91 #: plinth/modules/names/templates/names.html:51 msgid "Enabled" msgstr "" #: plinth/modules/firewall/templates/firewall.html:70 +#: plinth/modules/letsencrypt/templates/letsencrypt.html:93 #: plinth/modules/names/templates/names.html:53 msgid "Disabled" msgstr "" @@ -674,8 +692,8 @@ #: plinth/modules/firewall/templates/firewall.html:103 msgid "" "The operation of the firewall is automatic. When you enable a service it is " -"automatically permitted in the firewall and you disable a service is " -"automatically disabled in the firewall." +"also permitted in the firewall and when you disable a service it is also " +"disabled in the firewall." msgstr "" #: plinth/modules/first_boot/forms.py:48 plinth/modules/users/forms.py:70 @@ -690,31 +708,35 @@ msgid "User account created, you are now logged in" msgstr "" -#: plinth/modules/first_boot/templates/firstboot_state0.html:50 -msgid "Congratulations! Your FreedomBox is up and running!" +#: plinth/modules/first_boot/templates/firstboot_navbar.html:23 +#: plinth/modules/help/templates/help_index.html:25 +#: plinth/templates/base.html:102 +msgid "Help" msgstr "" -#: plinth/modules/first_boot/templates/firstboot_state0.html:54 -msgid "" -"Please provide the following basic information to complete the setup process." +#: plinth/modules/first_boot/templates/firstboot_state0.html:45 +msgid "Start Setup" msgstr "" -#: plinth/modules/first_boot/templates/firstboot_state0.html:62 -msgid "Next" +#: plinth/modules/first_boot/templates/firstboot_state0.html:49 +#, python-format +msgid "" +"To complete the setup of your %(box_name)s, please provide some basic " +"information." msgstr "" -#: plinth/modules/first_boot/templates/firstboot_state1.html:39 +#: plinth/modules/first_boot/templates/firstboot_state1.html:41 msgid "Administrator Account" msgstr "" -#: plinth/modules/first_boot/templates/firstboot_state1.html:42 +#: plinth/modules/first_boot/templates/firstboot_state1.html:44 msgid "" "Choose a username and password to access this web interface. The password " "can be changed later. This user will be granted administrative privileges. " "Other users can be added later." msgstr "" -#: plinth/modules/first_boot/templates/firstboot_state1.html:55 +#: plinth/modules/first_boot/templates/firstboot_state1.html:57 msgid "Box it up!" msgstr "" @@ -723,28 +745,29 @@ msgstr "" #: plinth/modules/first_boot/templates/firstboot_state10.html:32 +#, python-format msgid "" -"FreedomBox setup is now complete. However, you should check the network " -"setup and modify it if necessary. Do not forget to change the default Wi-Fi " -"passwords." +"%(box_name)s setup is now complete. To make your %(box_name)s functional, " +"you need some applications. They will be installed the first time you " +"access them." msgstr "" -#: plinth/modules/first_boot/templates/firstboot_state10.html:40 -msgid "" -"To make your FreedomBox functional, you need some applications. " -"Applications will be installed the first time you access them." +#: plinth/modules/first_boot/templates/firstboot_state10.html:41 +msgid "Go to Apps" msgstr "" -#: plinth/modules/first_boot/templates/firstboot_state10.html:47 -msgid "Network Configuration" +#: plinth/modules/first_boot/templates/firstboot_state10.html:44 +msgid "Current Network Configuration" msgstr "" -#: plinth/modules/first_boot/templates/firstboot_state10.html:54 -msgid "Go to Networks" +#: plinth/modules/first_boot/templates/firstboot_state10.html:47 +msgid "" +"You should check the network setup and modify it if necessary. Do not forget " +"to change the default Wi-Fi passwords!" msgstr "" -#: plinth/modules/first_boot/templates/firstboot_state10.html:59 -msgid "Go to Apps" +#: plinth/modules/first_boot/templates/firstboot_state10.html:57 +msgid "Go to Networks" msgstr "" #: plinth/modules/first_boot/views.py:60 @@ -759,8 +782,8 @@ msgid "Where to Get Help" msgstr "" -#: plinth/modules/help/help.py:38 plinth/modules/help/help.py:72 -msgid "FreedomBox Manual" +#: plinth/modules/help/help.py:38 +msgid "Manual" msgstr "" #: plinth/modules/help/help.py:48 @@ -772,15 +795,21 @@ msgid "About {box_name}" msgstr "" +#: plinth/modules/help/help.py:73 +#, python-brace-format +msgid "{box_name} Manual" +msgstr "" + #: plinth/modules/help/templates/help_about.html:30 +#, python-format msgid "" -"FreedomBox is a community project to develop, design and promote personal " +"%(box_name)s is a community project to develop, design and promote personal " "servers running free software for private, personal communications. It is a " "networking appliance designed to allow interfacing with the rest of the " "Internet under conditions of protected privacy and data security. It hosts " "applications such as blog, wiki, website, social network, email, web proxy " -"and a Tor relay on a device that can replace your Wi-Fi router so that your " -"data stays with you." +"and a Tor relay, on a device that can replace your Wi-Fi router, so that " +"your data stays with you." msgstr "" #: plinth/modules/help/templates/help_about.html:43 @@ -794,68 +823,76 @@ msgstr "" #: plinth/modules/help/templates/help_about.html:56 +#, python-format msgid "" "There are a number of projects working to realize a future of distributed " -"services; FreedomBox aims to bring them all together in a convenient package." +"services; %(box_name)s aims to bring them all together in a convenient " +"package." msgstr "" #: plinth/modules/help/templates/help_about.html:64 +#, python-format msgid "" -"For more information about the FreedomBox project, see the FreedomBox Wiki." +"For more information about the %(box_name)s project, see the %(box_name)s Wiki." msgstr "" -#: plinth/modules/help/templates/help_about.html:72 +#: plinth/modules/help/templates/help_about.html:73 msgid "Learn more »" msgstr "" -#: plinth/modules/help/templates/help_about.html:75 +#: plinth/modules/help/templates/help_about.html:76 #, python-format msgid "You are running Plinth version %(version)s." msgstr "" -#: plinth/modules/help/templates/help_index.html:25 -#: plinth/templates/base.html:98 -msgid "Help" +#: plinth/modules/help/templates/help_base.html:36 +#, python-format +msgid "%(box_name)s Setup" msgstr "" #: plinth/modules/help/templates/help_index.html:29 #, python-format msgid "" -"The FreedomBox Manual is the best place to " +"The %(box_name)s Manual is the best place to " "start for information regarding %(box_name)s." msgstr "" #: plinth/modules/help/templates/help_index.html:36 +#, python-format msgid "" -" FreedomBox " -"project wiki contains further information." +" " +"%(box_name)s project wiki contains further information." msgstr "" #: plinth/modules/help/templates/help_index.html:43 +#, python-format msgid "" -"To seek help from FreedomBox community, queries may be posted on the " -"mailing list. The list archives also contain information about problems " -"faced by other users and possible solutions." +"To seek help from %(box_name)s community, queries may be posted on the mailing list. The list archives also contain information about " +"problems faced by other users and possible solutions." msgstr "" #: plinth/modules/help/templates/help_index.html:53 +#, python-format msgid "" -"Many FreedomBox contributors and users are also available on the #freedombox " -"channel of the irc.oftc.net IRC network." +"Many %(box_name)s contributors and users are also available on the irc.oftc." +"net IRC network. Join and request help on the #freedombox " +"channel using the IRC web interface." msgstr "" #: plinth/modules/ikiwiki/__init__.py:38 -msgid "Wiki & Blog (Ikiwiki)" +msgid "Wiki and Blog (ikiwiki)" msgstr "" #: plinth/modules/ikiwiki/__init__.py:43 -msgid "Ikiwiki wikis and blogs" +msgid "ikiwiki wikis and blogs" msgstr "" #: plinth/modules/ikiwiki/forms.py:29 -msgid "Enable Ikiwiki" +msgid "Enable ikiwiki" msgstr "" #: plinth/modules/ikiwiki/forms.py:36 @@ -884,21 +921,22 @@ #: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:27 #, python-format -msgid "Delete Wiki/Blog %(name)s" +msgid "Delete Wiki or Blog %(name)s" msgstr "" #: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:33 msgid "" "This action will remove all the posts, pages and comments including revision " -"history. Delete this wiki/blog permanently?" +"history. Delete this wiki or blog permanently?" msgstr "" -#: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:43 +#: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:44 #, python-format msgid "Delete %(name)s" msgstr "" -#: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:46 +#: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:47 +#: plinth/modules/monkeysphere/templates/monkeysphere.html:60 #: plinth/modules/networks/templates/connections_delete.html:41 #: plinth/modules/users/templates/users_delete.html:41 msgid "Cancel" @@ -931,7 +969,7 @@ msgstr "" #: plinth/modules/ikiwiki/views.py:73 -msgid "Wiki & Blog" +msgid "Wiki and Blog" msgstr "" #: plinth/modules/ikiwiki/views.py:106 @@ -939,7 +977,7 @@ msgstr "" #: plinth/modules/ikiwiki/views.py:132 -msgid "Create Wiki/Blog" +msgid "Create Wiki or Blog" msgstr "" #: plinth/modules/ikiwiki/views.py:145 @@ -973,7 +1011,144 @@ msgstr "" #: plinth/modules/ikiwiki/views.py:182 -msgid "Delete Wiki/Blog" +msgid "Delete Wiki or Blog" +msgstr "" + +#: plinth/modules/letsencrypt/__init__.py:43 +#: plinth/modules/letsencrypt/templates/letsencrypt.html:38 +#: plinth/modules/letsencrypt/views.py:45 +msgid "Certificates (Let's Encrypt)" +msgstr "" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:41 +#, python-format +msgid "" +"A digital certficate allows users of a web service to verify the identity of " +"the service and to securely communicate with it. %(box_name)s can " +"automatically obtain and setup digital certificates for each available " +"domain. It does so by proving itself to be the owner of a domain to Let's " +"Encrypt, a certficate authority (CA)." +msgstr "" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:52 +msgid "" +"Let's Encrypt is a free, automated, and open certificate authority, run for " +"the public’s benefit by the Internet Security Research Group (ISRG). Please " +"read and agree with the Let's Encrypt Subscriber Agreement before using this service." +msgstr "" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:66 +#: plinth/modules/monkeysphere/templates/monkeysphere.html:70 +msgid "Domain" +msgstr "" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:67 +msgid "Certificate Status" +msgstr "" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:68 +msgid "Website Security" +msgstr "" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:69 +#: plinth/modules/monkeysphere/templates/monkeysphere.html:72 +msgid "Actions" +msgstr "" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:79 +#, python-format +msgid "Expires on %(expiry_date)s" +msgstr "" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:85 +msgid "No certficate" +msgstr "" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:102 +msgid "Revoke" +msgstr "" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:108 +msgid "Re-obtain" +msgstr "" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:115 +msgid "Obtain" +msgstr "" + +#: plinth/modules/letsencrypt/views.py:55 +#, python-brace-format +msgid "Certificate successfully revoked for domain {domain}" +msgstr "" + +#: plinth/modules/letsencrypt/views.py:60 +#, python-brace-format +msgid "Failed to revoke certificate for domain {domain}: {error}" +msgstr "" + +#: plinth/modules/letsencrypt/views.py:72 +#, python-brace-format +msgid "Certificate successfully obtained for domain {domain}" +msgstr "" + +#: plinth/modules/letsencrypt/views.py:77 +#, python-brace-format +msgid "Failed to obtain certificate for domain {domain}: {error}" +msgstr "" + +#: plinth/modules/monkeysphere/__init__.py:32 +#: plinth/modules/monkeysphere/templates/monkeysphere.html:35 +#: plinth/modules/monkeysphere/views.py:44 +msgid "Monkeysphere" +msgstr "" + +#: plinth/modules/monkeysphere/templates/monkeysphere.html:38 +msgid "" +"With Monkeysphere, a PGP key can be generated for each configured domain " +"serving SSH. The PGP public key can then be uploaded to the PGP keyservers. " +"Users connecting to this machine through SSH can verify that they are " +"connecting to the correct host. For users to trust the key, at least one " +"person (usually the machine owner) must sign the key using the regular PGP " +"key signing process. See the Monkeysphere SSH documentation for more details." +msgstr "" + +#: plinth/modules/monkeysphere/templates/monkeysphere.html:53 +msgid "Publishing key to keyserver..." +msgstr "" + +#: plinth/modules/monkeysphere/templates/monkeysphere.html:71 +msgid "GPG Fingerprint" +msgstr "" + +#: plinth/modules/monkeysphere/templates/monkeysphere.html:83 +#: plinth/modules/names/views.py:45 +msgid "Not Available" +msgstr "" + +#: plinth/modules/monkeysphere/templates/monkeysphere.html:93 +msgid "Generate PGP Key" +msgstr "" + +#: plinth/modules/monkeysphere/templates/monkeysphere.html:101 +msgid "Publish Key" +msgstr "" + +#: plinth/modules/monkeysphere/views.py:58 +msgid "Generated PGP key." +msgstr "" + +#: plinth/modules/monkeysphere/views.py:83 +msgid "Cancelled key publishing." +msgstr "" + +#: plinth/modules/monkeysphere/views.py:120 +msgid "Published key to keyserver." +msgstr "" + +#: plinth/modules/monkeysphere/views.py:122 +msgid "Error occurred while publishing key." msgstr "" #: plinth/modules/mumble/__init__.py:38 @@ -1011,170 +1186,151 @@ msgid "Mumble server is not running" msgstr "" -#: plinth/modules/names/__init__.py:30 +#: plinth/modules/names/__init__.py:29 msgid "HTTP" msgstr "" -#: plinth/modules/names/__init__.py:31 +#: plinth/modules/names/__init__.py:30 msgid "HTTPS" msgstr "" -#: plinth/modules/names/__init__.py:32 +#: plinth/modules/names/__init__.py:31 msgid "SSH" msgstr "" -#: plinth/modules/names/__init__.py:46 plinth/modules/names/views.py:34 +#: plinth/modules/names/__init__.py:45 plinth/modules/names/views.py:34 msgid "Name Services" msgstr "" -#: plinth/modules/names/__init__.py:107 -msgid "Not Available" -msgstr "" - #: plinth/modules/networks/__init__.py:108 #, python-brace-format msgid "Using DNSSEC on IPv{kind}" msgstr "" #: plinth/modules/networks/forms.py:30 -msgid "-- select --" -msgstr "" - -#: plinth/modules/networks/forms.py:42 msgid "Connection Type" msgstr "" -#: plinth/modules/networks/forms.py:49 plinth/modules/networks/forms.py:106 -#: plinth/modules/networks/forms.py:133 +#: plinth/modules/networks/forms.py:37 msgid "Connection Name" msgstr "" -#: plinth/modules/networks/forms.py:51 plinth/modules/networks/forms.py:108 -#: plinth/modules/networks/forms.py:135 +#: plinth/modules/networks/forms.py:39 msgid "Physical Interface" msgstr "" -#: plinth/modules/networks/forms.py:53 plinth/modules/networks/forms.py:110 -#: plinth/modules/networks/forms.py:137 +#: plinth/modules/networks/forms.py:41 msgid "The network device that this connection should be bound to." msgstr "" -#: plinth/modules/networks/forms.py:56 plinth/modules/networks/forms.py:113 -#: plinth/modules/networks/forms.py:140 +#: plinth/modules/networks/forms.py:44 msgid "Firewall Zone" msgstr "" -#: plinth/modules/networks/forms.py:57 plinth/modules/networks/forms.py:114 -#: plinth/modules/networks/forms.py:141 +#: plinth/modules/networks/forms.py:45 msgid "" "The firewall zone will control which services are available over this " "interfaces. Select Internal only for trusted networks." msgstr "" -#: plinth/modules/networks/forms.py:61 plinth/modules/networks/forms.py:162 +#: plinth/modules/networks/forms.py:49 msgid "IPv4 Addressing Method" msgstr "" -#: plinth/modules/networks/forms.py:62 +#: plinth/modules/networks/forms.py:50 msgid "" "\"Shared\" method will start a DHCP server and \"Automatic\" method will " "acquire configuration from a DHCP server." msgstr "" -#: plinth/modules/networks/forms.py:68 plinth/modules/networks/forms.py:170 +#: plinth/modules/networks/forms.py:56 msgid "Address" msgstr "" -#: plinth/modules/networks/forms.py:72 plinth/modules/networks/forms.py:174 +#: plinth/modules/networks/forms.py:60 msgid "Netmask" msgstr "" -#: plinth/modules/networks/forms.py:73 plinth/modules/networks/forms.py:175 +#: plinth/modules/networks/forms.py:61 msgid "" "Optional value. If left blank, a default netmask based on the address will " "be used." msgstr "" -#: plinth/modules/networks/forms.py:78 plinth/modules/networks/forms.py:180 +#: plinth/modules/networks/forms.py:66 #: plinth/modules/networks/templates/connection_show.html:202 #: plinth/modules/networks/templates/connection_show.html:241 msgid "Gateway" msgstr "" -#: plinth/modules/networks/forms.py:79 plinth/modules/networks/forms.py:181 +#: plinth/modules/networks/forms.py:67 msgid "Optional value." msgstr "" -#: plinth/modules/networks/forms.py:83 plinth/modules/networks/forms.py:185 +#: plinth/modules/networks/forms.py:71 msgid "DNS Server" msgstr "" -#: plinth/modules/networks/forms.py:84 plinth/modules/networks/forms.py:186 +#: plinth/modules/networks/forms.py:72 msgid "" "Optional value. If this value is given and IPv4 addressing method is " "\"Automatic\", the DNS Servers provided by a DHCP server will be ignored." msgstr "" -#: plinth/modules/networks/forms.py:90 plinth/modules/networks/forms.py:192 +#: plinth/modules/networks/forms.py:78 msgid "Second DNS Server" msgstr "" -#: plinth/modules/networks/forms.py:91 plinth/modules/networks/forms.py:193 +#: plinth/modules/networks/forms.py:79 msgid "" "Optional value. If this value is given and IPv4 Addressing Method is " "\"Automatic\", the DNS Servers provided by a DHCP server will be ignored." msgstr "" -#: plinth/modules/networks/forms.py:121 -msgid "Show password" +#: plinth/modules/networks/forms.py:89 +msgid "-- select --" msgstr "" -#: plinth/modules/networks/forms.py:145 +#: plinth/modules/networks/forms.py:175 #: plinth/modules/networks/templates/connection_show.html:144 msgid "SSID" msgstr "" -#: plinth/modules/networks/forms.py:146 +#: plinth/modules/networks/forms.py:176 msgid "The visible name of the network." msgstr "" -#: plinth/modules/networks/forms.py:148 +#: plinth/modules/networks/forms.py:178 #: plinth/modules/networks/templates/connection_show.html:157 msgid "Mode" msgstr "" -#: plinth/modules/networks/forms.py:153 +#: plinth/modules/networks/forms.py:183 msgid "Authentication Mode" msgstr "" -#: plinth/modules/networks/forms.py:154 +#: plinth/modules/networks/forms.py:184 msgid "" "Select WPA if the wireless network is secured and requires clients to have " "the password to connect." msgstr "" -#: plinth/modules/networks/forms.py:158 +#: plinth/modules/networks/forms.py:188 msgid "Passphrase" msgstr "" -#: plinth/modules/networks/forms.py:166 -msgid "" -"Select Automatic (DHCP) if you are connecting to an existing wireless " -"network. Shared mode is useful when running an Access Point." -msgstr "" - #: plinth/modules/networks/networks.py:36 #: plinth/modules/networks/networks.py:56 msgid "Network Connections" msgstr "" #: plinth/modules/networks/networks.py:38 -#: plinth/modules/networks/networks.py:273 +#: plinth/modules/networks/networks.py:242 msgid "Nearby Wi-Fi Networks" msgstr "" #: plinth/modules/networks/networks.py:40 -#: plinth/modules/networks/networks.py:295 +#: plinth/modules/networks/networks.py:264 msgid "Add Connection" msgstr "" @@ -1198,58 +1354,58 @@ msgid "This type of connection is not yet understood." msgstr "" -#: plinth/modules/networks/networks.py:170 -#: plinth/modules/networks/networks.py:229 +#: plinth/modules/networks/networks.py:139 +#: plinth/modules/networks/networks.py:198 #: plinth/modules/networks/templates/connections_edit.html:34 msgid "Edit Connection" msgstr "" -#: plinth/modules/networks/networks.py:240 +#: plinth/modules/networks/networks.py:209 #, python-brace-format msgid "Activated connection {name}." msgstr "" -#: plinth/modules/networks/networks.py:243 +#: plinth/modules/networks/networks.py:212 msgid "Failed to activate connection: Connection not found." msgstr "" -#: plinth/modules/networks/networks.py:247 +#: plinth/modules/networks/networks.py:216 #, python-brace-format msgid "Failed to activate connection {name}: No suitable device is available." msgstr "" -#: plinth/modules/networks/networks.py:260 +#: plinth/modules/networks/networks.py:229 #, python-brace-format msgid "Deactivated connection {name}." msgstr "" -#: plinth/modules/networks/networks.py:263 +#: plinth/modules/networks/networks.py:232 msgid "Failed to de-activate connection: Connection not found." msgstr "" -#: plinth/modules/networks/networks.py:325 +#: plinth/modules/networks/networks.py:282 msgid "Adding New Ethernet Connection" msgstr "" -#: plinth/modules/networks/networks.py:350 +#: plinth/modules/networks/networks.py:300 msgid "Adding New PPPoE Connection" msgstr "" -#: plinth/modules/networks/networks.py:399 +#: plinth/modules/networks/networks.py:332 msgid "Adding New Wi-Fi Connection" msgstr "" -#: plinth/modules/networks/networks.py:413 +#: plinth/modules/networks/networks.py:346 #, python-brace-format msgid "Connection {name} deleted." msgstr "" -#: plinth/modules/networks/networks.py:416 -#: plinth/modules/networks/networks.py:425 +#: plinth/modules/networks/networks.py:349 +#: plinth/modules/networks/networks.py:358 msgid "Failed to delete connection: Connection not found." msgstr "" -#: plinth/modules/networks/networks.py:430 +#: plinth/modules/networks/networks.py:363 #: plinth/modules/networks/templates/connections_delete.html:26 msgid "Delete Connection" msgstr "" @@ -1259,7 +1415,7 @@ msgstr "" #: plinth/modules/networks/templates/connection_show.html:43 -#: plinth/templates/base.html:119 +#: plinth/templates/base.html:123 msgid "Edit" msgstr "" @@ -1406,23 +1562,24 @@ #: plinth/modules/networks/templates/connection_show.html:280 msgid "" -"This interface should be connected to local network/machine. If you connect " -"this interface to a public network, services meant to be available only " -"internally will become available externally. This is a security risk." +"This interface should be connected to a local network/machine. If you " +"connect this interface to a public network, services meant to be available " +"only internally will become available externally. This is a security risk." msgstr "" #: plinth/modules/networks/templates/connection_show.html:300 msgid "" -"This interface should receive your Internet connection. If you connect it " -"your a local network/machine, many services meant to available only " -"internally will not be available." +"This interface should receive your Internet connection. If you connect it to " +"a local network/machine, many services meant to available only internally " +"will not be available." msgstr "" #: plinth/modules/networks/templates/connection_show.html:319 +#, python-format msgid "" -"This interface is not maintained by FreedomBox. Its security status is " -"unknown to FreedomBox. Many FreedomBox services may not be available on " -"this interface. It is recommended that you deactivate/delete this " +"This interface is not maintained by %(box_name)s. Its security status is " +"unknown to %(box_name)s. Many %(box_name)s services may not be available on " +"this interface. It is recommended that you deactivate or delete this " "connection and re-configure it." msgstr "" @@ -1514,7 +1671,7 @@ #, python-format msgid "" "Virtual Private Network (VPN) is a technique for securely connecting two " -"machines in order to access resources of a private network. While you are " +"devices in order to access resources of a private network. While you are " "away from home, you can connect to your %(box_name)s in order to join your " "home network and access private/internal services provided by %(box_name)s. " "You can also access the rest of the Internet via %(box_name)s for added " @@ -1531,7 +1688,7 @@ "To connect to %(box_name)s's VPN, you need to download a profile and feed it " "to an OpenVPN client on your mobile or desktop machine. OpenVPN Clients are " "available for most platforms. See documentation on recommended clients and instructions on how to " "configure them." msgstr "" @@ -2009,6 +2166,54 @@ msgid "Quassel core service is not running" msgstr "" +#: plinth/modules/repro/__init__.py:36 +#: plinth/modules/repro/templates/repro.html:26 +#: plinth/modules/repro/views.py:55 +msgid "SIP Server (repro)" +msgstr "" + +#: plinth/modules/repro/__init__.py:41 +msgid "repro SIP Server" +msgstr "" + +#: plinth/modules/repro/forms.py:29 +msgid "Enable repro service" +msgstr "" + +#: plinth/modules/repro/templates/repro.html:29 +msgid "" +"repro provides various SIP services that a SIP softphone can utilize to " +"provide audio and video calls as well as presence and instant messaging. " +"repro provides a server and SIP user accounts that clients can use to let " +"their presence known. It also acts as a proxy to federate SIP " +"communications to other servers on the Internet similar to email." +msgstr "" + +#: plinth/modules/repro/templates/repro.html:39 +msgid "" +"To make SIP calls, a client application is needed. Available clients include " +"Jitsi (for computers) and CSipSimple (for Android phones)." +msgstr "" + +#: plinth/modules/repro/templates/repro.html:48 +msgid "" +"Note: Before using repro, domains and users will need to " +"be configured using the web-based " +"configuration panel. Users in the admin group will be able to " +"log in to the repro configuration panel. After setting the domain, it is " +"required to restart the repro service. Disable the service and re-enable it." +msgstr "" + +#: plinth/modules/repro/templates/repro.html:63 +msgid "repro service is running" +msgstr "" + +#: plinth/modules/repro/templates/repro.html:66 +msgid "repro service is not running" +msgstr "" + #: plinth/modules/restore/__init__.py:36 #: plinth/modules/restore/templates/restore_index.html:26 #: plinth/modules/restore/views.py:46 @@ -2029,8 +2234,8 @@ "reStore is a server for unhosted web " "applications. The idea is to uncouple web applications from data. No " "matter where a web application is served from, the data can be stored on an " -"unhosted storage server of user's choice. With reStore, your " -"%(cfg.box_name)s becomes your unhosted storage server." +"unhosted storage server of user's choice. With reStore, your %(box_name)s " +"becomes your unhosted storage server." msgstr "" #: plinth/modules/restore/templates/restore_index.html:40 @@ -2107,7 +2312,7 @@ #: plinth/modules/system/system.py:33 #: plinth/modules/system/templates/system.html:25 -#: plinth/templates/base.html:105 +#: plinth/templates/base.html:109 msgid "System Configuration" msgstr "" @@ -2122,33 +2327,71 @@ "The options affect the %(box_name)s at its most general level, so be careful!" msgstr "" -#: plinth/modules/tor/__init__.py:50 -msgid "Tor relay port available" +#: plinth/modules/tor/__init__.py:48 plinth/modules/tor/templates/tor.html:35 +msgid "Anonymity Network (Tor)" +msgstr "" + +#: plinth/modules/tor/__init__.py:53 +msgid "Tor Anonymity Network" msgstr "" #: plinth/modules/tor/__init__.py:58 +msgid "Tor Bridge Relay" +msgstr "" + +#: plinth/modules/tor/__init__.py:76 plinth/modules/tor/views.py:144 +msgid "Tor Hidden Service" +msgstr "" + +#: plinth/modules/tor/__init__.py:222 +msgid "Tor relay port available" +msgstr "" + +#: plinth/modules/tor/__init__.py:230 msgid "Obfs3 transport registered" msgstr "" -#: plinth/modules/tor/__init__.py:64 +#: plinth/modules/tor/__init__.py:236 msgid "Obfs4 transport registered" msgstr "" -#: plinth/modules/tor/__init__.py:101 +#: plinth/modules/tor/__init__.py:273 #, python-brace-format msgid "Access URL {url} on tcp{kind} via Tor" msgstr "" -#: plinth/modules/tor/__init__.py:112 +#: plinth/modules/tor/__init__.py:284 #, python-brace-format msgid "Confirm Tor usage at {url} on tcp{kind}" msgstr "" -#: plinth/modules/tor/templates/tor.html:26 plinth/modules/tor/tor.py:66 -msgid "Anonymity Network (Tor)" +#: plinth/modules/tor/forms.py:32 +msgid "Enable Tor" +msgstr "" + +#: plinth/modules/tor/forms.py:35 +msgid "Enable Tor Hidden Service" +msgstr "" + +#: plinth/modules/tor/forms.py:38 +#, python-brace-format +msgid "" +"A hidden service will allow {box_name} to provide selected services (such as " +"ownCloud or chat) without revealing its location." +msgstr "" + +#: plinth/modules/tor/forms.py:42 +msgid "Download software packages over Tor" +msgstr "" + +#: plinth/modules/tor/forms.py:44 +msgid "" +"When enabled, software will be downloaded over the Tor network for " +"installations and upgrades. This adds a degree of privacy and security " +"during software downloads." msgstr "" -#: plinth/modules/tor/templates/tor.html:29 +#: plinth/modules/tor/templates/tor.html:38 msgid "" "Tor is an anonymous communication system. You can learn more about it from " "the Tor Project website. For " @@ -2157,28 +2400,32 @@ "Tor Browser." msgstr "" -#: plinth/modules/tor/templates/tor.html:44 +#: plinth/modules/tor/templates/tor.html:54 +msgid "Tor configuration is being updated" +msgstr "" + +#: plinth/modules/tor/templates/tor.html:62 msgid "Tor is running" msgstr "" -#: plinth/modules/tor/templates/tor.html:47 +#: plinth/modules/tor/templates/tor.html:65 msgid "Tor is not running" msgstr "" -#: plinth/modules/tor/templates/tor.html:59 +#: plinth/modules/tor/templates/tor.html:77 msgid "Hidden Service" msgstr "" -#: plinth/modules/tor/templates/tor.html:60 -#: plinth/modules/tor/templates/tor.html:102 +#: plinth/modules/tor/templates/tor.html:78 +#: plinth/modules/tor/templates/tor.html:120 msgid "Port" msgstr "" -#: plinth/modules/tor/templates/tor.html:85 +#: plinth/modules/tor/templates/tor.html:103 msgid "Bridge" msgstr "" -#: plinth/modules/tor/templates/tor.html:88 +#: plinth/modules/tor/templates/tor.html:106 #, python-format msgid "" "Your %(box_name)s is configured as a Tor bridge with obfsproxy, so it can " @@ -2187,84 +2434,39 @@ "forwarded, if necessary:" msgstr "" -#: plinth/modules/tor/templates/tor.html:101 +#: plinth/modules/tor/templates/tor.html:119 msgid "Service" msgstr "" -#: plinth/modules/tor/templates/tor.html:117 +#: plinth/modules/tor/templates/tor.html:135 msgid "SOCKS" msgstr "" -#: plinth/modules/tor/templates/tor.html:120 +#: plinth/modules/tor/templates/tor.html:138 #, python-format msgid "A Tor SOCKS port is available on your %(box_name)s on TCP port 9050." msgstr "" -#: plinth/modules/tor/tor.py:46 -msgid "Enable Tor" -msgstr "" - -#: plinth/modules/tor/tor.py:49 -msgid "Enable Tor Hidden Service" -msgstr "" - -#: plinth/modules/tor/tor.py:51 -msgid "" -"A hidden service will allow FreedomBox to provide selected services (such as " -"ownCloud or Chat) without revealing its location." -msgstr "" - -#: plinth/modules/tor/tor.py:55 -msgid "Download software packages over Tor" -msgstr "" - -#: plinth/modules/tor/tor.py:57 -msgid "" -"When enabled, software will be downloaded over the Tor network for " -"installations and upgrades. This adds a degree of privacy and security " -"during software downloads." -msgstr "" - -#: plinth/modules/tor/tor.py:85 plinth/modules/tor/tor.py:285 -msgid "Tor Hidden Service" -msgstr "" - -#: plinth/modules/tor/tor.py:115 +#: plinth/modules/tor/views.py:68 msgid "Tor Control Panel" msgstr "" -#: plinth/modules/tor/tor.py:240 +#: plinth/modules/tor/views.py:79 #, python-brace-format msgid "Action error: {0} [{1}] [{2}]" msgstr "" -#: plinth/modules/tor/tor.py:256 -msgid "Tor enabled" -msgstr "" - -#: plinth/modules/tor/tor.py:259 -msgid "Tor disabled" -msgstr "" - -#: plinth/modules/tor/tor.py:264 -msgid "Tor hidden service enabled" -msgstr "" - -#: plinth/modules/tor/tor.py:267 -msgid "Tor hidden service disabled" -msgstr "" - -#: plinth/modules/tor/tor.py:292 -msgid "Enabled package download over Tor" +#: plinth/modules/tor/views.py:148 +msgid "Configuration updated." msgstr "" -#: plinth/modules/tor/tor.py:295 -msgid "Disabled package download over Tor" +#: plinth/modules/tor/views.py:150 +msgid "An error occurred during configuration." msgstr "" #: plinth/modules/transmission/__init__.py:38 #: plinth/modules/transmission/templates/transmission.html:26 -#: plinth/modules/transmission/views.py:63 +#: plinth/modules/transmission/views.py:67 msgid "BitTorrent (Transmission)" msgstr "" @@ -2330,70 +2532,66 @@ "will attempt to perform any package upgrades that are available." msgstr "" -#: plinth/modules/upgrades/templates/upgrades.html:40 -msgid "There was an error while upgrading." +#: plinth/modules/upgrades/templates/upgrades.html:37 +msgid "" +"Upgrades install the latest software and security updates. When automatic " +"upgrades are enabled, upgrades are automatically run every night. You don't " +"normally need to start the upgrade process." msgstr "" -#: plinth/modules/upgrades/templates/upgrades.html:43 -#: plinth/modules/upgrades/templates/upgrades.html:59 -msgid "Output from unattended-upgrades:" +#: plinth/modules/upgrades/templates/upgrades.html:45 +msgid "" +"Depending on the number of packages to install, this may take a long time to " +"complete. While upgrades are in progress, you will not be able to install " +"other packages. During the upgrade, this web interface may be temporarily " +"unavailable and show an error. Refresh the page to continue." msgstr "" -#: plinth/modules/upgrades/templates/upgrades.html:50 -msgid "The operating system is up to date now.  " +#: plinth/modules/upgrades/templates/upgrades.html:58 +msgid "Upgrade now »" msgstr "" -#: plinth/modules/upgrades/templates/upgrades.html:53 -msgid "Show Details" +#: plinth/modules/upgrades/templates/upgrades.html:65 +msgid "A package manager is running." msgstr "" -#: plinth/modules/upgrades/templates/upgrades.html:69 -msgid "" -"This will run unattended-upgrades, which will attempt to upgrade your system " -"with the latest Debian packages. It may take a few minutes to complete." +#: plinth/modules/upgrades/templates/upgrades.html:70 +msgid "Recent log from upgrades:" msgstr "" -#: plinth/modules/upgrades/templates/upgrades.html:80 -msgid "Upgrade now »" +#: plinth/modules/upgrades/views.py:36 plinth/modules/upgrades/views.py:66 +msgid "Automatic Upgrades" msgstr "" -#: plinth/modules/upgrades/templates/upgrades.html:87 -msgid "System is being upgraded." +#: plinth/modules/upgrades/views.py:38 +msgid "Upgrade Packages" msgstr "" -#: plinth/modules/upgrades/views.py:35 plinth/modules/upgrades/views.py:64 -msgid "Automatic Upgrades" +#: plinth/modules/upgrades/views.py:96 +msgid "Upgrade process started." msgstr "" -#: plinth/modules/upgrades/views.py:37 -msgid "Upgrade Packages" +#: plinth/modules/upgrades/views.py:99 +msgid "Starting upgrade failed." msgstr "" -#: plinth/modules/upgrades/views.py:75 +#: plinth/modules/upgrades/views.py:102 msgid "Package Upgrades" msgstr "" -#: plinth/modules/upgrades/views.py:116 +#: plinth/modules/upgrades/views.py:131 #, python-brace-format msgid "Error when configuring unattended-upgrades: {error}" msgstr "" -#: plinth/modules/upgrades/views.py:121 +#: plinth/modules/upgrades/views.py:136 msgid "Automatic upgrades enabled" msgstr "" -#: plinth/modules/upgrades/views.py:123 +#: plinth/modules/upgrades/views.py:138 msgid "Automatic upgrades disabled" msgstr "" -#: plinth/modules/upgrades/views.py:142 -msgid "Upgrade completed." -msgstr "" - -#: plinth/modules/upgrades/views.py:144 -msgid "Upgrade failed." -msgstr "" - #: plinth/modules/users/__init__.py:36 msgid "Users and Groups" msgstr "" @@ -2429,19 +2627,30 @@ msgid "Failed to add new user to {group} group." msgstr "" -#: plinth/modules/users/forms.py:126 +#: plinth/modules/users/forms.py:92 +msgid "SSH Keys" +msgstr "" + +#: plinth/modules/users/forms.py:96 +msgid "" +"Setting an SSH public key will allow this user to securely log in to the " +"system without using a password. You may enter multiple keys, one on each " +"line. Blank lines and lines starting with # will be ignored." +msgstr "" + +#: plinth/modules/users/forms.py:136 msgid "Renaming LDAP user failed." msgstr "" -#: plinth/modules/users/forms.py:138 +#: plinth/modules/users/forms.py:148 msgid "Failed to remove user from group." msgstr "" -#: plinth/modules/users/forms.py:149 +#: plinth/modules/users/forms.py:159 msgid "Failed to add user to group." msgstr "" -#: plinth/modules/users/forms.py:174 +#: plinth/modules/users/forms.py:188 msgid "Changing LDAP user password failed." msgstr "" @@ -2460,7 +2669,7 @@ msgstr "" #: plinth/modules/users/templates/users_delete.html:26 -#: plinth/modules/users/views.py:103 +#: plinth/modules/users/views.py:110 msgid "Delete User" msgstr "" @@ -2513,20 +2722,20 @@ msgid "Edit User" msgstr "" -#: plinth/modules/users/views.py:113 +#: plinth/modules/users/views.py:120 #, python-brace-format msgid "User {user} deleted." msgstr "" -#: plinth/modules/users/views.py:120 +#: plinth/modules/users/views.py:127 msgid "Deleting LDAP user failed." msgstr "" -#: plinth/modules/users/views.py:129 +#: plinth/modules/users/views.py:136 msgid "Change Password" msgstr "" -#: plinth/modules/users/views.py:130 +#: plinth/modules/users/views.py:137 msgid "Password changed successfully." msgstr "" @@ -2601,8 +2810,9 @@ msgid "Secure Shell (SSH) Server" msgstr "" -#: plinth/service.py:78 -msgid "FreedomBox Web Interface (Plinth)" +#: plinth/service.py:79 +#, python-brace-format +msgid "{box_name} Web Interface (Plinth)" msgstr "" #: plinth/templates/404.html:25 @@ -2633,27 +2843,24 @@ msgstr "" #: plinth/templates/base.html:49 -msgid "Plinth administrative interface for the FreedomBox" -msgstr "" - -#: plinth/templates/base.html:52 plinth/templates/base.html.py:88 -msgid "FreedomBox" +#, python-format +msgid "Plinth administrative interface for the %(box_name)s" msgstr "" -#: plinth/templates/base.html:81 +#: plinth/templates/base.html:83 msgid "Toggle navigation" msgstr "" -#: plinth/templates/base.html:121 plinth/templates/base.html.py:122 +#: plinth/templates/base.html:125 plinth/templates/base.html.py:126 msgid "Change password" msgstr "" -#: plinth/templates/base.html:125 plinth/templates/base.html.py:126 -#: plinth/templates/base.html:139 plinth/templates/base.html.py:141 +#: plinth/templates/base.html:129 plinth/templates/base.html.py:130 +#: plinth/templates/base.html:143 plinth/templates/base.html.py:145 msgid "Log out" msgstr "" -#: plinth/templates/base.html:131 plinth/templates/base.html.py:133 +#: plinth/templates/base.html:135 plinth/templates/base.html.py:137 msgid "Log in" msgstr "" diff -Nru plinth-0.7.2/plinth/locale/nb/LC_MESSAGES/django.po plinth-0.8.1/plinth/locale/nb/LC_MESSAGES/django.po --- plinth-0.7.2/plinth/locale/nb/LC_MESSAGES/django.po 2015-12-23 11:34:40.000000000 +0000 +++ plinth-0.8.1/plinth/locale/nb/LC_MESSAGES/django.po 2016-02-16 03:55:53.000000000 +0000 @@ -4,26 +4,28 @@ # # Translators: # abjectio, 2015 +# Ingrid Yrvin , 2015-2016 # Ingrid Yrvin , 2015 -# Ingrid Yrvin , 2015 -# oeyrvin , 2015 -# pere , 2015 +# Ole-Erik Yrvin , 2015 +# Ole-Erik Yrvin , 2016 +# pere , 2015-2016 # Petter Reinholdtsen , 2015 # Philippe Baret , 2015 msgid "" msgstr "" "Project-Id-Version: FreedomBox UI\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-12-23 11:51+0530\n" -"PO-Revision-Date: 2015-12-20 14:20+0000\n" -"Last-Translator: pere \n" -"Language-Team: Norwegian Bokmål (http://www.transifex.com/freedombox/plinth/" -"language/nb/)\n" +"POT-Creation-Date: 2016-02-07 11:29+0530\n" +"PO-Revision-Date: 2016-02-13 10:11+0000\n" +"Last-Translator: Dietmar \n" +"Language-Team: Norwegian Bokmål " +"\n" "Language: nb\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 2.5-dev\n" #: plinth/action_utils.py:203 #, python-brace-format @@ -55,11 +57,15 @@ msgid "Cannot connect to {host}:{port}" msgstr "Kan ikke koble til {host}:{port}" +#: plinth/context_processors.py:36 +msgid "FreedomBox" +msgstr "FreedomBox" + #: plinth/modules/apps/apps.py:26 msgid "Apps" msgstr "Apper" -#: plinth/modules/apps/apps.py:32 plinth/templates/base.html.py:90 +#: plinth/modules/apps/apps.py:32 plinth/templates/base.html.py:93 msgid "Applications" msgstr "Anvendelser" @@ -101,32 +107,34 @@ msgstr "Aktivere finne tjenesten (Service Discovery)" #: plinth/modules/avahi/templates/avahi.html:29 +#, python-format msgid "" -"Service discovery allows other machines on the network to discover your " -"FreedomBox and services running on it. It also allows FreedomBox to " -"discover other machines and services running on your local network. Service " +"Service discovery allows other devices on the network to discover your " +"%(box_name)s and services running on it. It also allows %(box_name)s to " +"discover other devices and services running on your local network. Service " "discovery is not essential and works only on internal networks. It may be " "disabled to improve security especially when connecting to a hostile local " "network." msgstr "" -"Finne tjenester (tjenesten Discovery) tillater andre maskiner i nettverket å " -"finne din FreedomBox og tjenester som kjører på den. Den tillater også " -"FreedomBox å oppdage andre maskiner og tjenester som kjører på det lokale " -"nettverket. Å finne tjenesten er ikke avgjørende, og virker bare i interne " -"nettverk. Det kan være deaktivert for å bedre sikkerheten, spesielt når du " -"kobler til et fremmed lokalt nettverk." +"Finne tjenester (tjenesten Discovery) tillater andre enheter i nettverket å " +"oppdage din %(box_name)s og tjenester som kjører på den. Den tillater også " +"%(box_name)s å oppdage andre enheter og tjenester som kjører på det lokale " +"nettverket. Discovery er ikke avgjørende, og virker bare på interne " +"nettverk. De kan deaktiveres for å bedre sikkerheten, spesielt når du kobler " +"til et fremmed lokalt nettverk." #: plinth/modules/avahi/templates/avahi.html:40 #: plinth/modules/datetime/templates/datetime.html:35 #: plinth/modules/deluge/templates/deluge.html:39 -#: plinth/modules/dynamicdns/dynamicdns.py:38 +#: plinth/modules/dynamicdns/dynamicdns.py:39 #: plinth/modules/firewall/templates/firewall.html:57 #: plinth/modules/mumble/templates/mumble.html:44 #: plinth/modules/networks/templates/connection_show.html:261 #: plinth/modules/openvpn/templates/openvpn.html:81 #: plinth/modules/privoxy/templates/privoxy.html:48 #: plinth/modules/quassel/templates/quassel.html:50 -#: plinth/modules/tor/templates/tor.html:39 +#: plinth/modules/repro/templates/repro.html:58 +#: plinth/modules/tor/templates/tor.html:48 #: plinth/modules/transmission/templates/transmission.html:42 #: plinth/modules/xmpp/templates/xmpp.html:58 msgid "Status" @@ -149,9 +157,10 @@ #: plinth/modules/owncloud/templates/owncloud.html:51 #: plinth/modules/privoxy/templates/privoxy.html:62 #: plinth/modules/quassel/templates/quassel.html:65 +#: plinth/modules/repro/templates/repro.html:72 #: plinth/modules/roundcube/templates/roundcube.html:62 #: plinth/modules/shaarli/templates/shaarli.html:40 -#: plinth/modules/tor/templates/tor.html:74 +#: plinth/modules/tor/templates/tor.html:92 #: plinth/modules/transmission/templates/transmission.html:56 #: plinth/modules/xmpp/templates/xmpp.html:72 msgid "Configuration" @@ -167,10 +176,11 @@ #: plinth/modules/openvpn/templates/openvpn.html:138 #: plinth/modules/privoxy/templates/privoxy.html:70 #: plinth/modules/quassel/templates/quassel.html:73 +#: plinth/modules/repro/templates/repro.html:80 #: plinth/modules/restore/templates/restore_index.html:54 #: plinth/modules/roundcube/templates/roundcube.html:70 #: plinth/modules/shaarli/templates/shaarli.html:48 -#: plinth/modules/tor/templates/tor.html:82 +#: plinth/modules/tor/templates/tor.html:100 #: plinth/modules/transmission/templates/transmission.html:64 #: plinth/modules/upgrades/templates/upgrades_configure.html:34 #: plinth/modules/xmpp/templates/xmpp.html:80 @@ -179,12 +189,13 @@ #: plinth/modules/avahi/views.py:73 plinth/modules/datetime/views.py:85 #: plinth/modules/deluge/views.py:80 -#: plinth/modules/dynamicdns/dynamicdns.py:368 +#: plinth/modules/dynamicdns/dynamicdns.py:371 #: plinth/modules/ikiwiki/views.py:95 plinth/modules/mumble/views.py:80 #: plinth/modules/openvpn/views.py:142 plinth/modules/privoxy/views.py:83 -#: plinth/modules/quassel/views.py:76 plinth/modules/restore/views.py:68 -#: plinth/modules/roundcube/views.py:84 plinth/modules/shaarli/views.py:74 -#: plinth/modules/transmission/views.py:105 plinth/modules/xmpp/views.py:100 +#: plinth/modules/quassel/views.py:76 plinth/modules/repro/views.py:77 +#: plinth/modules/restore/views.py:68 plinth/modules/roundcube/views.py:84 +#: plinth/modules/shaarli/views.py:74 plinth/modules/transmission/views.py:109 +#: plinth/modules/xmpp/views.py:100 msgid "Configuration updated" msgstr "Oppsett oppdatert" @@ -192,70 +203,72 @@ #: plinth/modules/deluge/views.py:82 plinth/modules/ikiwiki/views.py:97 #: plinth/modules/mumble/views.py:82 plinth/modules/openvpn/views.py:144 #: plinth/modules/owncloud/owncloud.py:93 plinth/modules/privoxy/views.py:85 -#: plinth/modules/quassel/views.py:78 plinth/modules/restore/views.py:70 -#: plinth/modules/roundcube/views.py:86 plinth/modules/shaarli/views.py:76 -#: plinth/modules/tor/tor.py:250 plinth/modules/transmission/views.py:107 -#: plinth/modules/upgrades/views.py:103 plinth/modules/xmpp/views.py:102 +#: plinth/modules/quassel/views.py:78 plinth/modules/repro/views.py:79 +#: plinth/modules/restore/views.py:70 plinth/modules/roundcube/views.py:86 +#: plinth/modules/shaarli/views.py:76 plinth/modules/tor/views.py:111 +#: plinth/modules/transmission/views.py:111 +#: plinth/modules/upgrades/views.py:118 plinth/modules/xmpp/views.py:102 msgid "Setting unchanged" msgstr "Oppsett uendret" -#: plinth/modules/config/config.py:83 plinth/modules/config/config.py:120 -#: plinth/modules/dynamicdns/dynamicdns.py:145 +#: plinth/modules/config/config.py:84 plinth/modules/config/config.py:121 +#: plinth/modules/dynamicdns/dynamicdns.py:148 msgid "Invalid domain name" msgstr "Ugyldig domenenavn" -#: plinth/modules/config/config.py:94 +#: plinth/modules/config/config.py:95 msgid "Hostname" msgstr "Vertsnavn" -#: plinth/modules/config/config.py:96 +#: plinth/modules/config/config.py:97 +#, python-brace-format msgid "" -"Hostname is the local name by which other machines on the local network " -"reach your machine. It must start and end with an alphabet or a digit and " -"have as interior characters only alphabets, digits and hyphens. Total " +"Hostname is the local name by which other devices on the local network can " +"reach your {box_name}. It must start and end with an alphabet or a digit " +"and have as interior characters only alphabets, digits and hyphens. Total " "length must be 63 characters or less." msgstr "" -"Vertsnavn er det lokale navnet som andre maskiner på ditt lokalnett bruker " -"for å nå din maskin. Det må starte og slutte med en bokstav eller et " -"siffer, og som interne tegn kun ha bokstaver, siffer eller bindestrek. " -"Total lengde må være 63 tegn eller mindre." +"Vertsnavn er det lokale navnet som andre enheter i det lokale nettverket kan " +"nå ditt {box_name} med. Det må starte og avslutte med en bokstav eller et " +"tall, og inneholde bokstaver tall eller bindrestreker. Lengden må være 63 " +"tegn eller mindre." -#: plinth/modules/config/config.py:104 +#: plinth/modules/config/config.py:105 msgid "Invalid hostname" msgstr "Ugyldig vertsnavn" -#: plinth/modules/config/config.py:107 plinth/modules/config/config.py:153 +#: plinth/modules/config/config.py:108 plinth/modules/config/config.py:153 #: plinth/modules/config/config.py:265 -#: plinth/modules/dynamicdns/dynamicdns.py:140 +#: plinth/modules/dynamicdns/dynamicdns.py:143 msgid "Domain Name" msgstr "Domenenavn" -#: plinth/modules/config/config.py:109 +#: plinth/modules/config/config.py:110 +#, python-brace-format msgid "" -"Domain name is the global name by which other machines on the Internet can " -"reach you. It must consist of labels separated by dots. Each label must " -"start and end with an alphabet or a digit and have as interior characters " -"only alphabets, digits and hyphens. Length of each label must be 63 " -"characters or less. Total length of domain name must be 253 characters or " -"less." -msgstr "" -"Domenenavn er det globale navnet som andre maskiner på Internett bruker for " -"å nå din maskin. Det må bestå av delnavn med punktum mellom seg. Hvert " -"delnavn må starte og slutte med en bokstav eller et siffer, og som interne " -"tegn kun ha bokstaver, siffer eller bindestrek. Lengden på hvert delnavn må " -"være 63 tegn eller færre. Total lengde for domenenavnet må være 253 tegn " -"eller færre." +"Domain name is the global name by which other devices on the Internet can " +"reach your {box_name}. It must consist of labels separated by dots. Each " +"label must start and end with an alphabet or a digit and have as interior " +"characters only alphabets, digits and hyphens. Length of each label must be " +"63 characters or less. Total length of domain name must be 253 characters " +"or less." +msgstr "" +"Domenenavnet er det globale navnet som andre enheter på Internettet kan nå " +"ditt {box_name} med. Det må bestå av merkelapper atskilt med punktum. Hver " +"merkelapp må starte og avslutte med en bokstav eller et tall, og imellom " +"bare bokstaver, tall og bindestreker. Lengden på hver merkelapp må være 63 " +"tegn, eller mindre. Lengden på domenenavnet må være 253 tegn, eller mindre." -#: plinth/modules/config/config.py:124 +#: plinth/modules/config/config.py:125 msgid "Language" msgstr "Språk" -#: plinth/modules/config/config.py:126 -msgid "Language for this FreedomBox web administration interface" -msgstr "Språk for webadministrasjonsgrensesnittet til denne FreedomBox-en" +#: plinth/modules/config/config.py:127 +msgid "Language for this web administration interface" +msgstr "Språk i denne nettadministrasjonens brukergrensesnitt. " #: plinth/modules/config/config.py:135 -#: plinth/modules/dynamicdns/dynamicdns.py:36 +#: plinth/modules/dynamicdns/dynamicdns.py:37 #: plinth/modules/ikiwiki/views.py:36 msgid "Configure" msgstr "Sette opp" @@ -303,15 +316,15 @@ #: plinth/modules/datetime/__init__.py:44 msgid "Network Time Server" -msgstr "Nettverkets tidstjener " +msgstr "Nettverktidstjener" #: plinth/modules/datetime/__init__.py:76 msgid "NTP client in contact with servers" -msgstr "NTP-klient i kontakt med server" +msgstr "NTP-klient har kontakt med tjenere" #: plinth/modules/datetime/forms.py:31 msgid "Enable network time" -msgstr "Aktiver nettverkstid" +msgstr "Aktiver nettverktid" #: plinth/modules/datetime/forms.py:35 msgid "Time Zone" @@ -334,16 +347,16 @@ "Network time server is a program that maintians the system time in " "synchronization with servers on the Internet." msgstr "" -"Nettverkstidstjeneren er et program som synkroniserer systemets tid med " -"servere på Internettet." +"Nettverktidstjeneren er et program som synkroniserer systemets klokke med " +"tjenere på Internettet." #: plinth/modules/datetime/templates/datetime.html:40 msgid "Network time server is running" -msgstr "Nettverkstidsserver kjører" +msgstr "Nettverktidstjeneren kjører" #: plinth/modules/datetime/templates/datetime.html:43 msgid "Network time server is not running" -msgstr "Nettverkstidsserver kjører ikke" +msgstr "Nettverktidstjeneren kjører ikke" #: plinth/modules/datetime/views.py:93 #, python-brace-format @@ -380,10 +393,10 @@ "\">/deluge path on the web server. The default password is 'deluge', but " "you should log in and change it immediately after enabling this service." msgstr "" -"Når den er aktivert, vil Deluge nett-tjeneren være tilgjengelig fra /deluge \n" -"på nettserveren. Standardpassordet er 'deluge', men du bør logge inn og " -"endre det umiddelbart etter at denne tjenesten er aktivert. " +"Når den er aktivert, vil Deluge nett-klienten være tilgjengelig fra /deluge på netttjeneren. Standardpassordet er 'deluge', men " +"du bør logge inn og endre det umiddelbart etter at denne tjenesten er " +"aktivert." #: plinth/modules/deluge/templates/deluge.html:44 msgid "deluge-web is running" @@ -452,16 +465,16 @@ msgid "Result" msgstr "Resultat" -#: plinth/modules/dynamicdns/dynamicdns.py:34 plinth/modules/help/help.py:40 +#: plinth/modules/dynamicdns/dynamicdns.py:35 plinth/modules/help/help.py:40 msgid "About" msgstr "Om" -#: plinth/modules/dynamicdns/dynamicdns.py:44 -#: plinth/modules/dynamicdns/dynamicdns.py:53 +#: plinth/modules/dynamicdns/dynamicdns.py:45 +#: plinth/modules/dynamicdns/dynamicdns.py:54 msgid "Dynamic DNS" msgstr "Dynamisk DNS (Domain Name System)" -#: plinth/modules/dynamicdns/dynamicdns.py:70 +#: plinth/modules/dynamicdns/dynamicdns.py:71 msgid "" "The Variables <User>, <Pass>, <Ip>, <Domain> may be " "used within the URL. For details see the update URL templates of the example " @@ -471,7 +484,7 @@ "i nettadressen. For detaljer, se de oppdaterte nettadressemalene fra " "eksempel-leverandørene." -#: plinth/modules/dynamicdns/dynamicdns.py:74 +#: plinth/modules/dynamicdns/dynamicdns.py:75 msgid "" "Please choose an update protocol according to your provider. If your " "provider does not support the GnudIP protocol or your provider is not listed " @@ -479,28 +492,27 @@ msgstr "" "Velg en oppdateringsprotokoll i samsvar med din leverandør. Hvis " "leverandøren ikke støtter GnudIP-protokollen, eller leverandøren din ikke er " -"oppført, kan du bruke leverandørens nettadresse for oppdatering. " +"oppført, kan du bruke leverandørens nettadresse for oppdatering." -#: plinth/modules/dynamicdns/dynamicdns.py:79 +#: plinth/modules/dynamicdns/dynamicdns.py:80 msgid "" "Please do not enter a URL here (like \"https://example.com/\") but only the " -"hostname of the GnuDIP server (like \"example.pcom\")." +"hostname of the GnuDIP server (like \"example.com\")." msgstr "" -"Vennligst ikke kjør en nettadresse her (som \"https://example.com/\") men " -"bare vertsnavnet til GnuDIP-tjeneren (som \"example.pcom\")." +"Vennligst ikke kjør en nettadresse her (som \"https://example.com/\"), men " +"bare vertsnavnet til GnuDIP-serveren (som \"example.com\")." -#: plinth/modules/dynamicdns/dynamicdns.py:83 -msgid "The public domain name you want use to reach your box." -msgstr "" -"The public domain navnet (det offentlige domenenavnet) du vil bruke for å nå " -"mottakeren." +#: plinth/modules/dynamicdns/dynamicdns.py:84 +#, python-brace-format +msgid "The public domain name you want use to reach your {box_name}." +msgstr "Det offentlige domenenavnet du vil bruke for å nå ditt {box_name}." -#: plinth/modules/dynamicdns/dynamicdns.py:85 +#: plinth/modules/dynamicdns/dynamicdns.py:87 msgid "Use this option if your provider uses self signed certificates." msgstr "" "Bruk dette alternativet hvis leverandøren bruker selvsignerte sertifikater." -#: plinth/modules/dynamicdns/dynamicdns.py:88 +#: plinth/modules/dynamicdns/dynamicdns.py:90 msgid "" "If this option is selected, your username and password will be used for HTTP " "basic authentication." @@ -508,113 +520,116 @@ "Hvis dette alternativet velges, vil ditt brukernavn og passord brukes for " "enkel godkjenning i HTTP." -#: plinth/modules/dynamicdns/dynamicdns.py:91 +#: plinth/modules/dynamicdns/dynamicdns.py:93 msgid "" "Leave this field empty if you want to keep your previous configured password." msgstr "La dette feltet stå tomt hvis du vil beholde ditt forrige passord." -#: plinth/modules/dynamicdns/dynamicdns.py:94 +#: plinth/modules/dynamicdns/dynamicdns.py:96 +#, python-brace-format msgid "" -"Optional Value. If your FreedomBox is not connected directly to the Internet " +"Optional Value. If your {box_name} is not connected directly to the Internet " "(i.e. connected to a NAT router) this URL is used to figure out the real " -"Internet IP. The URL should simply return the IP wherethe client comes from. " -"Example: http://myip.datasystems24.de" +"Internet IP. The URL should simply return the IP where the client comes from " +"(example: http://myip.datasystems24.de)." msgstr "" -"Valgfri verdi. Hvis din FreedomBox ikke er koblet direkte til Internett " -"(dvs. koblet til en NAT-ruter) brukes denne nettadressen til å finne den " -"virkelige Internett-IP. Nettadressen skal bare returnere IP-en som klienten " -"kommer fra. Eksempel: http://myip.datasystems24.de" +"Valgfri verdi. Hvis ditt {box_name} ikke er koblet direkte til Internett (" +"dvs. koblet til en NAT-ruter), blir denne nettadressen brukt til å finne den " +"virkelige Internett-IP-en. Nettadressen skal bare returnere IP-en som " +"tjeneren kommer fra (eksempelvis: http://myip.datasystems24.de)." -#: plinth/modules/dynamicdns/dynamicdns.py:101 +#: plinth/modules/dynamicdns/dynamicdns.py:104 msgid "" "You should have been requested to select a username when you created the " "account." msgstr "Du skulle blitt bedt om å velge et brukernavn da du opprettet kontoen." -#: plinth/modules/dynamicdns/dynamicdns.py:112 +#: plinth/modules/dynamicdns/dynamicdns.py:115 msgid "Enable Dynamic DNS" msgstr "Aktiver dynamisk DNS (Dynamic DNS)" -#: plinth/modules/dynamicdns/dynamicdns.py:115 +#: plinth/modules/dynamicdns/dynamicdns.py:118 msgid "Service type" msgstr "Tjenestetype" -#: plinth/modules/dynamicdns/dynamicdns.py:120 +#: plinth/modules/dynamicdns/dynamicdns.py:123 msgid "GnudIP Server Address" msgstr "GnudIP-tjeneradresse" -#: plinth/modules/dynamicdns/dynamicdns.py:125 +#: plinth/modules/dynamicdns/dynamicdns.py:128 msgid "Invalid server name" msgstr "Ugyldig tjenernavn" -#: plinth/modules/dynamicdns/dynamicdns.py:128 +#: plinth/modules/dynamicdns/dynamicdns.py:131 msgid "Update URL" msgstr "Oppdater URL" -#: plinth/modules/dynamicdns/dynamicdns.py:132 -msgid "accept all SSL certificates" -msgstr "godta alle SSL-sertifikater" - -#: plinth/modules/dynamicdns/dynamicdns.py:136 -msgid "use HTTP basic authentication" -msgstr "benytt HTTP grunnleggende autentisering" +#: plinth/modules/dynamicdns/dynamicdns.py:135 +msgid "Accept all SSL certificates" +msgstr "Godta alle SSL-sertifikater" + +#: plinth/modules/dynamicdns/dynamicdns.py:139 +msgid "Use HTTP basic authentication" +msgstr "Bruk HTTP basisgodkjenning" -#: plinth/modules/dynamicdns/dynamicdns.py:148 -#: plinth/modules/networks/forms.py:118 plinth/modules/transmission/forms.py:39 +#: plinth/modules/dynamicdns/dynamicdns.py:151 +#: plinth/modules/networks/forms.py:146 plinth/modules/transmission/forms.py:39 msgid "Username" msgstr "Brukernavn" -#: plinth/modules/dynamicdns/dynamicdns.py:151 -#: plinth/modules/networks/forms.py:119 plinth/modules/transmission/forms.py:43 +#: plinth/modules/dynamicdns/dynamicdns.py:154 +#: plinth/modules/networks/forms.py:147 plinth/modules/transmission/forms.py:43 msgid "Password" msgstr "Passord" -#: plinth/modules/dynamicdns/dynamicdns.py:154 -msgid "show password" -msgstr "vis passord" +#: plinth/modules/dynamicdns/dynamicdns.py:157 +#: plinth/modules/networks/forms.py:149 +msgid "Show password" +msgstr "Vis passord" -#: plinth/modules/dynamicdns/dynamicdns.py:158 +#: plinth/modules/dynamicdns/dynamicdns.py:161 msgid "IP check URL" msgstr "URL for IP-sjekk" -#: plinth/modules/dynamicdns/dynamicdns.py:184 +#: plinth/modules/dynamicdns/dynamicdns.py:187 msgid "Please provide update URL or a GnuDIP Server" msgstr "Vennligst oppgi oppdatert nettadresse eller en GnuDIP-tjener" -#: plinth/modules/dynamicdns/dynamicdns.py:187 +#: plinth/modules/dynamicdns/dynamicdns.py:190 msgid "Please provide GnuDIP username" msgstr "Vennligst oppgi GnuDIP-brukernavn" -#: plinth/modules/dynamicdns/dynamicdns.py:190 +#: plinth/modules/dynamicdns/dynamicdns.py:193 msgid "Please provide GnuDIP domain" msgstr "Vennligst oppgi GnuDIP-domene" -#: plinth/modules/dynamicdns/dynamicdns.py:195 +#: plinth/modules/dynamicdns/dynamicdns.py:198 msgid "Please provide a password" msgstr "Vennligst oppgi et passord" -#: plinth/modules/dynamicdns/dynamicdns.py:214 +#: plinth/modules/dynamicdns/dynamicdns.py:217 msgid "Configure Dynamic DNS" msgstr "Konfigurer dynamisk DNS" -#: plinth/modules/dynamicdns/dynamicdns.py:236 +#: plinth/modules/dynamicdns/dynamicdns.py:239 msgid "Status of Dynamic DNS" msgstr "Status for dynamisk DNS" #: plinth/modules/dynamicdns/templates/dynamicdns.html:25 -msgid "DynamicDNS client" +msgid "Dynamic DNS Client" msgstr "Dynamisk DNS-klient" #: plinth/modules/dynamicdns/templates/dynamicdns.html:28 +#, python-format msgid "" "If your internet provider changes your IP address periodic (i.e. every 24h) " "it may be hard for others to find you in the WEB. And for this reason nobody " -"may find the services which are provided by FreedomBox (like your ownCloud)." +"may find the services which are provided by %(box_name)s, such as ownCloud." msgstr "" -"Hvis Internett-leverandøren endrer din IP-adresse periodisk (dvs. hver 24h/ " -"hver 24 time) kan det være vanskelig for andre å finne deg på Internett. Og " -"av den grunn kan ingen finne de tjenestene som leveres av FreedomBox (som " -"din ownCloud)." +"Hvis Internett-leverandøren endrer din IP-adresse periodisk (for eksempel " +"hver 24. time), kan det være vanskelig for andre å finne deg på Internettet. " +"Av denne grunn kan ingen finne tjenestene som leveres av %(box_name)s, som " +"for eksempel av ownCloud." #: plinth/modules/dynamicdns/templates/dynamicdns.html:37 msgid "" @@ -623,13 +638,14 @@ "allows you to push your current public IP address to an gnudip server. Afterwards " "the Server will assign your DNS name with the new IP and if someone from the " -"internet asks for your DNS name he will get your current IP answered." +"Internet asks for your DNS name he will get your current IP answered." msgstr "" -"Hvis IP endres av din internettleverandør, tillater dynamisk DNS å presse " -"din nåværende offentlige IP-adressen til en gnudip -tjener. Nå vil tjeneren " -"tildele ditt DNS-navn med den nye IP-en, og hvis noen fra Internettet ber om " -"ditt DNS-navn blir din nåværende IP besvart." +"Løsningen er å tildele et DNS-navn til din IP-adresse, og oppdatere DNS-" +"navnet hver gang din IP endres av din Internett-leverandør. Dynamisk DNS kan " +"du presse din nåværende offentlige IP-adressen til en gnudip -tjener. Nå vil " +"tjeneren tildele ditt DNS-navn med den nye IP-en, og hvis noen fra " +"Internettet ber om ditt DNS-navn, blir din nåværende IP besvart." #: plinth/modules/dynamicdns/templates/dynamicdns.html:50 msgid "" @@ -646,14 +662,14 @@ "target=\"_blank\"> freedns.afraid.org ." #: plinth/modules/dynamicdns/templates/dynamicdns.html:61 +#, python-format msgid "" -"If your freedombox is connected behind some NAT router, don't forget to add " -"portforwarding (i.e. forward some standard ports like 80 and 443) to your " -"freedombox device." -msgstr "" -"Hvis FreedomBox er koblet bak en NAT-ruter, ikke glem å legge videresending " -"av porten (dvs. videresende noen standard porter som 80 og 443) til din " -"FreedomBox enhet." +"If your %(box_name)s is connected behind some NAT router, don't forget to " +"add port forwarding (i.e. forward some standard ports like 80 and 443)." +msgstr "" +"Hvis din %(box_name)s er tilkoblet bak en NAT-ruter, ikke glem å legge til " +"port for å videresende (dvs. videresende til noen standard porter som 80 og " +"443)." #: plinth/modules/dynamicdns/templates/dynamicdns_configure.html:30 msgid "" @@ -676,21 +692,21 @@ "vi ikke oppdage NAT-typen." #: plinth/modules/dynamicdns/templates/dynamicdns_status.html:35 -msgid "Direct connection to the internet." -msgstr "Direkte kobling til Internett." +msgid "Direct connection to the Internet." +msgstr "Direkte forbindelse til Internettet." #: plinth/modules/dynamicdns/templates/dynamicdns_status.html:37 #, python-format msgid "" -"Behind NAT, this means that dynamic DNS service will poll the \"IP check URL" -"\" for changes (we need the \"IP check URL\" for this reason - otherwise we " -"will not detect IP changes). It may take up to %(timer)s minutes until we " -"update your DNS entry in case of WAN IP change." -msgstr "" -"Bak NAT, betyr dette at den dynamiske DNS-tjenesten vil spørre etter «IP " -"sjekk URL» etter endringer (vi trenger «IP sjekk URL» på grunn av dette - " -"ellers vil vi ikke oppdage IP-endringer). Det kan ta opptil %(timer)s " -"minutter før vi oppdaterer din DNS-inngang i tilfelle av endring av WAN IP." +"Behind NAT. This means that Dynamic DNS service will poll the \"IP check URL" +"\" for changes (the \"IP check URL\" entry is needed for this - otherwise IP " +"changes will not be detected). In case the WAN IP changes, it may take up " +"to %(timer)s minutes until your DNS entry is updated." +msgstr "" +"Bak NAT. Dette betyr at Dynamic DNS-tjenesten vil undersøke endringene i «IP " +"check URL» («check URL IP»-adgangen er nødvendig - ellers vil ikke IP-" +"endringene bli oppdaget). I tilfelle WAN IP endres, kan det ta opp til " +"%(timer)s minutter til DNS-adgangen er oppdatert. " #: plinth/modules/dynamicdns/templates/dynamicdns_status.html:48 msgid "Last update" @@ -705,17 +721,17 @@ #: plinth/modules/firewall/templates/firewall.html:28 #, python-format msgid "" -"Firewall is a network security system that controls the incoming and " -"outgoing network traffic on your %(box_name)s. Keeping a firewall enabled " -"and properly configured reduces risk of security threat from the Internet." -msgstr "" -"Firewall er et sikkerhetssystem for nettverk som styrer innkommende og " -"utgående nettverkstrafikk på %(box_name)s. Å holde en brannmur aktivert og " -"riktig konfigurert, reduserer risikoen for sikkerhetstrusler fra Internett." +"Firewall is a security system that controls the incoming and outgoing " +"network traffic on your %(box_name)s. Keeping a firewall enabled and " +"properly configured reduces risk of security threat from the Internet." +msgstr "" +"Firewall er et sikkerhetssystem som styrer innkommende og utgående " +"nettverkstrafikk på din %(box_name)s. Å holde en brannmur aktivert og riktig " +"oppsatt reduserer risikoen for sikkerhetstrusler fra Internett." #: plinth/modules/firewall/templates/firewall.html:36 -msgid "The following is the current status:" -msgstr "Følgende er nåværende status:" +msgid "Current status:" +msgstr "Nåværende status:" #: plinth/modules/firewall/templates/firewall.html:41 #, python-format @@ -725,8 +741,8 @@ "you may run it using the command 'service firewalld start' or in case of a " "system with systemd 'systemctl start firewalld'." msgstr "" -"Brannmurnissen kjører ikke. Kjør den. Brannmuren kommer som standard " -"aktivert på %(box_name)s. På et Debian-basert system (slik som " +"Brannmur-bakgrunnsprosessen kjører ikke. Den må kjøre. Brannmuren kommer som " +"standard aktivert på %(box_name)s. På et Debian-basert system (slik som " "%(box_name)s), kan du kjøre den med kommandoen «service firewalld start\" " "eller alternativt i et system med systemd, «systemctl start firewalld»." @@ -735,11 +751,13 @@ msgstr "Tjeneste/Port" #: plinth/modules/firewall/templates/firewall.html:67 +#: plinth/modules/letsencrypt/templates/letsencrypt.html:91 #: plinth/modules/names/templates/names.html:51 msgid "Enabled" msgstr "Aktivert" #: plinth/modules/firewall/templates/firewall.html:70 +#: plinth/modules/letsencrypt/templates/letsencrypt.html:93 #: plinth/modules/names/templates/names.html:53 msgid "Disabled" msgstr "Deaktivert" @@ -763,12 +781,12 @@ #: plinth/modules/firewall/templates/firewall.html:103 msgid "" "The operation of the firewall is automatic. When you enable a service it is " -"automatically permitted in the firewall and you disable a service is " -"automatically disabled in the firewall." +"also permitted in the firewall and when you disable a service it is also " +"disabled in the firewall." msgstr "" -"Driften av brannmuren er automatisk. Når du aktiverer en tjeneste, blir den " -"automatisk tillatt i brannmuren, og hvis du deaktiverer en tjeneste, blir " -"den automatisk deaktivert i brannmuren." +"Driften av brannmuren er automatisk. Når du aktiverer en tjeneste, er den " +"også tillatt i brannmuren, og når du deaktiverer en tjeneste, er den også " +"deaktivert i brannmuren." #: plinth/modules/first_boot/forms.py:48 plinth/modules/users/forms.py:70 msgid "Creating LDAP user failed." @@ -782,26 +800,30 @@ msgid "User account created, you are now logged in" msgstr "Brukerkonto er opprettet, du er nå logget inn" -#: plinth/modules/first_boot/templates/firstboot_state0.html:50 -msgid "Congratulations! Your FreedomBox is up and running!" -msgstr "Gratulerer! Din FreedomBox er oppe og går!" +#: plinth/modules/first_boot/templates/firstboot_navbar.html:23 +#: plinth/modules/help/templates/help_index.html:25 +#: plinth/templates/base.html:102 +msgid "Help" +msgstr "Hjelp" + +#: plinth/modules/first_boot/templates/firstboot_state0.html:45 +msgid "Start Setup" +msgstr "Start Setup" -#: plinth/modules/first_boot/templates/firstboot_state0.html:54 +#: plinth/modules/first_boot/templates/firstboot_state0.html:49 +#, python-format msgid "" -"Please provide the following basic information to complete the setup process." +"To complete the setup of your %(box_name)s, please provide some basic " +"information." msgstr "" -"Vennligst oppgi følgende grunnleggende informasjon for å fullføre " -"installasjonsprosessen." +"For å fullføre oppsettet til din %(box_name)s, trengs det noen " +"basisinformasjoner." -#: plinth/modules/first_boot/templates/firstboot_state0.html:62 -msgid "Next" -msgstr "Neste" - -#: plinth/modules/first_boot/templates/firstboot_state1.html:39 +#: plinth/modules/first_boot/templates/firstboot_state1.html:41 msgid "Administrator Account" msgstr "Administratorkonto" -#: plinth/modules/first_boot/templates/firstboot_state1.html:42 +#: plinth/modules/first_boot/templates/firstboot_state1.html:44 msgid "" "Choose a username and password to access this web interface. The password " "can be changed later. This user will be granted administrative privileges. " @@ -811,7 +833,7 @@ "nettgrensesnittet. Passordet kan endres senere. Denne brukeren vil bli " "innvilget administrative rettigheter. Andre brukere kan legges til senere." -#: plinth/modules/first_boot/templates/firstboot_state1.html:55 +#: plinth/modules/first_boot/templates/firstboot_state1.html:57 msgid "Box it up!" msgstr "Pakk det sammen!" @@ -820,34 +842,35 @@ msgstr "Oppsett komplett!" #: plinth/modules/first_boot/templates/firstboot_state10.html:32 +#, python-format msgid "" -"FreedomBox setup is now complete. However, you should check the network " -"setup and modify it if necessary. Do not forget to change the default Wi-Fi " -"passwords." +"%(box_name)s setup is now complete. To make your %(box_name)s functional, " +"you need some applications. They will be installed the first time you " +"access them." msgstr "" -"FreedomBox-oppsettet er nå fullført. Men du bør sjekke nettverksoppsettet og " -"endre det om nødvendig. Ikke glem å endre standard Wi-Fi-passordene." +"%(box_name)s-oppsettet er nå fullført. For å få din %(box_name)s funksjonell " +"trenger du noen programmer. De vil bli installert første gang du åpner dem. " -#: plinth/modules/first_boot/templates/firstboot_state10.html:40 -msgid "" -"To make your FreedomBox functional, you need some applications. " -"Applications will be installed the first time you access them." -msgstr "" -"For å gjøre din FreedomBox funksjonell trenger du noen programmer. De vil " -"bli installert første gang du bruker dem." +#: plinth/modules/first_boot/templates/firstboot_state10.html:41 +msgid "Go to Apps" +msgstr "Gå til applikasjoner" + +#: plinth/modules/first_boot/templates/firstboot_state10.html:44 +msgid "Current Network Configuration" +msgstr "Nåværende nettverksoppsett" #: plinth/modules/first_boot/templates/firstboot_state10.html:47 -msgid "Network Configuration" -msgstr "Nettverkskonfigurering" +msgid "" +"You should check the network setup and modify it if necessary. Do not forget " +"to change the default Wi-Fi passwords!" +msgstr "" +"Du bør sjekke nettverksoppsettet, og endre det om nødvendig. Ikke glem å " +"endre standard Wi-Fi-passordene!" -#: plinth/modules/first_boot/templates/firstboot_state10.html:54 +#: plinth/modules/first_boot/templates/firstboot_state10.html:57 msgid "Go to Networks" msgstr "Gå til nettverk" -#: plinth/modules/first_boot/templates/firstboot_state10.html:59 -msgid "Go to Apps" -msgstr "Gå til applikasjoner" - #: plinth/modules/first_boot/views.py:60 msgid "Setup Complete" msgstr "Oppsett ferdig" @@ -860,9 +883,9 @@ msgid "Where to Get Help" msgstr "Hvor kan en få hjelp" -#: plinth/modules/help/help.py:38 plinth/modules/help/help.py:72 -msgid "FreedomBox Manual" -msgstr "Håndbok for FreedomBox" +#: plinth/modules/help/help.py:38 +msgid "Manual" +msgstr "Manual" #: plinth/modules/help/help.py:48 msgid "Documentation and FAQ" @@ -873,23 +896,29 @@ msgid "About {box_name}" msgstr "Om {box_name}" +#: plinth/modules/help/help.py:73 +#, python-brace-format +msgid "{box_name} Manual" +msgstr "{box_name} Manual" + #: plinth/modules/help/templates/help_about.html:30 +#, python-format msgid "" -"FreedomBox is a community project to develop, design and promote personal " +"%(box_name)s is a community project to develop, design and promote personal " "servers running free software for private, personal communications. It is a " "networking appliance designed to allow interfacing with the rest of the " "Internet under conditions of protected privacy and data security. It hosts " "applications such as blog, wiki, website, social network, email, web proxy " -"and a Tor relay on a device that can replace your Wi-Fi router so that your " -"data stays with you." +"and a Tor relay, on a device that can replace your Wi-Fi router, so that " +"your data stays with you." msgstr "" -"FreedomBox er et fellesskapsprosjekt for å utvikle, designe og fremme " -"personlige servere som kjører gratis programvare for privat, personlig " -"kommunikasjon. Det er et nettverksprogram utviklet for å tillate samvirke " -"med resten av Internett med beskyttet personvern og datasikkerhet. Det har " -"applikasjoner som blogg, wiki, hjemmeside, sosiale nettverk, e-post, " -"nettmellomtjener og et Tor relé på en enhet som kan erstatte din Wi-Fi-" -"ruter, slik at dataene blir hos deg." +"%(box_name)s er et communityprosjekt (fellesskapsprosjekt) for å utvikle, " +"designe og fremme personlige servere som kjører gratis programvare for " +"privat, personlig kommunikasjon. Det er en nettverksanvendelse utviklet for " +"å tillate samvirke med resten av Internettet med beskyttet personvern og " +"datasikkerhet. Det omfatter programmer som blogg, wiki, hjemmeside, sosiale " +"nettverk, e-post, mellomtjener for nett og et Tor relé, samlet på en enhet " +"som kan erstatte din Wi-Fi-ruter, slik at dataene dine blir hos deg." #: plinth/modules/help/templates/help_about.html:43 msgid "" @@ -909,83 +938,94 @@ "arkitektur." #: plinth/modules/help/templates/help_about.html:56 +#, python-format msgid "" "There are a number of projects working to realize a future of distributed " -"services; FreedomBox aims to bring them all together in a convenient package." +"services; %(box_name)s aims to bring them all together in a convenient " +"package." msgstr "" -"En rekke prosjekter arbeider for å realisere en fremtid med distribuerte " -"tjenester; FreedomBoxs mål er å bringe alle sammen i en praktisk pakke." +"Det er en rekke prosjekter som arbeider for å realisere en fremtid med " +"distribuerte tjenester; %(box_name)s mål er å bringe dem sammen i en " +"praktisk pakke." #: plinth/modules/help/templates/help_about.html:64 +#, python-format msgid "" -"For more information about the FreedomBox project, see the FreedomBox Wiki." +"For more information about the %(box_name)s project, see the %(box_name)s Wiki." msgstr "" -"For mer informasjon om FreedomBox prosjektet, se FreedomBox Wiki." +"For mer informasjon om %(box_name)s-prosjektet, se %(box_name)s Wiki." -#: plinth/modules/help/templates/help_about.html:72 +#: plinth/modules/help/templates/help_about.html:73 msgid "Learn more »" msgstr "Lær mer »" -#: plinth/modules/help/templates/help_about.html:75 +#: plinth/modules/help/templates/help_about.html:76 #, python-format msgid "You are running Plinth version %(version)s." msgstr "Du benytter Plinth versjon %(version)s." -#: plinth/modules/help/templates/help_index.html:25 -#: plinth/templates/base.html:98 -msgid "Help" -msgstr "Hjelp" +#: plinth/modules/help/templates/help_base.html:36 +#, python-format +msgid "%(box_name)s Setup" +msgstr "%(box_name)s Oppsett" #: plinth/modules/help/templates/help_index.html:29 #, python-format msgid "" -"The FreedomBox Manual is the best place to " +"The %(box_name)s Manual is the best place to " "start for information regarding %(box_name)s." msgstr "" -"FreedomBox Manual \n" -"er det beste stedet å starte for informasjon om %(box_name)s." +"Det beste stedet å starte for å få informasjon om %(box_name)s er %(box_name)s Manual." #: plinth/modules/help/templates/help_index.html:36 +#, python-format msgid "" -" FreedomBox " -"project wiki contains further information." +" " +"%(box_name)s project wiki contains further information." msgstr "" -" FreedomBox " -"prosjekt wiki har ytterligere informasjon." +" " +"%(box_name)s project wiki har mer informasjon." #: plinth/modules/help/templates/help_index.html:43 +#, python-format msgid "" -"To seek help from FreedomBox community, queries may be posted on the " -"mailing list. The list archives also contain information about problems " -"faced by other users and possible solutions." -msgstr "" -"Å søke hjelp fra fellesskapet til FreedomBox-fellesskapet, kan spørsmål " -"legges ut på mailing list. Listen har også informasjon om " -"problemer andre brukere møter, og mulige løsninger." +"To seek help from %(box_name)s community, queries may be posted on the mailing list. The list archives also contain information about " +"problems faced by other users and possible solutions." +msgstr "" +"For å få hjelp fra %(box_name)s community, kan henvendelser legges inn på mailing list. Listen inneholder også informasjon om problemer andre " +"brukere har møtt, og mulige løsninger." #: plinth/modules/help/templates/help_index.html:53 +#, python-format msgid "" -"Many FreedomBox contributors and users are also available on the #freedombox " -"channel of the irc.oftc.net IRC network." -msgstr "" -"Mange FreedomBox bidragsytere og brukere er også tilgjengelig på #freedombox " -"kanalen til irc.oftc.net IRC-nettverk." +"Many %(box_name)s contributors and users are also available on the irc.oftc." +"net IRC network. Join and request help on the #freedombox " +"channel using the IRC web interface." +msgstr "" +"Mange %(box_name)s bidragsytere og brukere er også tilgjengelige i irc.oftc." +"net IRC-nettverket. Delta og be om hjelp på #freedombox-kanalen " +"ved å bruke IRC-nettbrukergrensesnittet. " #: plinth/modules/ikiwiki/__init__.py:38 -msgid "Wiki & Blog (Ikiwiki)" -msgstr "Wiki og blogg (Ikiwiki)" +msgid "Wiki and Blog (ikiwiki)" +msgstr "Wiki og blogg (ikiwiki)" #: plinth/modules/ikiwiki/__init__.py:43 -msgid "Ikiwiki wikis and blogs" -msgstr "Ikiwiki wikier og blogger" +msgid "ikiwiki wikis and blogs" +msgstr "ikiwiki wikis og blogger" #: plinth/modules/ikiwiki/forms.py:29 -msgid "Enable Ikiwiki" -msgstr "Aktiver Ikiwiki" +msgid "Enable ikiwiki" +msgstr "Aktiver ikiwiki" #: plinth/modules/ikiwiki/forms.py:36 #: plinth/modules/networks/templates/connection_show.html:98 @@ -1011,27 +1051,28 @@ "\">/ikiwiki." msgstr "" "Aktivert, blir bloggene og wikiene tilgjengelig fra /" -"ikiwiki" +"ikiwiki." #: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:27 #, python-format -msgid "Delete Wiki/Blog %(name)s" -msgstr "Slett Wiki/Blogg %(name)s" +msgid "Delete Wiki or Blog %(name)s" +msgstr "Slette wiki eller blogg %(name)s" #: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:33 msgid "" "This action will remove all the posts, pages and comments including revision " -"history. Delete this wiki/blog permanently?" +"history. Delete this wiki or blog permanently?" msgstr "" -"Denne handlingen vil fjerne alle innlegg, sider og kommentarer, medregnet " -"endringshistorikken. Slette wiki/blogg permanent?" +"Denne handlingen vil fjerne alle poster, sider og kommentarer inkludert " +"revisjonshistorien. Skal denne wiki eller bloggen slettes permanent?" -#: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:43 +#: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:44 #, python-format msgid "Delete %(name)s" msgstr "Slette %(name)s" -#: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:46 +#: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:47 +#: plinth/modules/monkeysphere/templates/monkeysphere.html:60 #: plinth/modules/networks/templates/connections_delete.html:41 #: plinth/modules/users/templates/users_delete.html:41 msgid "Cancel" @@ -1039,11 +1080,11 @@ #: plinth/modules/ikiwiki/templates/ikiwiki_manage.html:41 msgid "No wikis or blogs available." -msgstr "Ingen wikier eller blogger tilgjengelig." +msgstr "Ingen wikis eller blogger tilgjengelig." #: plinth/modules/ikiwiki/templates/ikiwiki_manage.html:45 msgid "Create a Wiki or Blog" -msgstr "Opprett en Wiki eller blogg" +msgstr "Opprett en Wiki eller Blogg" #: plinth/modules/ikiwiki/templates/ikiwiki_manage.html:55 #, python-format @@ -1064,16 +1105,16 @@ msgstr "Opprett" #: plinth/modules/ikiwiki/views.py:73 -msgid "Wiki & Blog" -msgstr "Wiki og blogg" +msgid "Wiki and Blog" +msgstr "Wiki og Blogg" #: plinth/modules/ikiwiki/views.py:106 msgid "Manage Wikis and Blogs" -msgstr "Vedlikehold Wiki og blogg" +msgstr "Vedlikehold Wiki og Blogg" #: plinth/modules/ikiwiki/views.py:132 -msgid "Create Wiki/Blog" -msgstr "Opprett Wiki/blogg" +msgid "Create Wiki or Blog" +msgstr "Lage Wiki eller Blogg" #: plinth/modules/ikiwiki/views.py:145 #, python-brace-format @@ -1083,7 +1124,7 @@ #: plinth/modules/ikiwiki/views.py:147 #, python-brace-format msgid "Could not create wiki: {error}" -msgstr "Kunne ikke opprette Wiki: {error}" +msgstr "Kunne ikke opprette wiki: {error}" #: plinth/modules/ikiwiki/views.py:159 #, python-brace-format @@ -1106,8 +1147,162 @@ msgstr "Kunne ikke slette {name}: {error}" #: plinth/modules/ikiwiki/views.py:182 -msgid "Delete Wiki/Blog" -msgstr "Slette Wiki/blogg" +msgid "Delete Wiki or Blog" +msgstr "Slette wiki eller blogg" + +#: plinth/modules/letsencrypt/__init__.py:43 +#: plinth/modules/letsencrypt/templates/letsencrypt.html:38 +#: plinth/modules/letsencrypt/views.py:45 +msgid "Certificates (Let's Encrypt)" +msgstr "Sertifikater (Let's Encrypt)" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:41 +#, python-format +msgid "" +"A digital certficate allows users of a web service to verify the identity of " +"the service and to securely communicate with it. %(box_name)s can " +"automatically obtain and setup digital certificates for each available " +"domain. It does so by proving itself to be the owner of a domain to Let's " +"Encrypt, a certficate authority (CA)." +msgstr "" +"Et digitalt sertifikat lar brukere av en nettjeneste bekrefte identiteten " +"til tjenesten, og til å kommunisere sikkert med den. %(box_name)s kan " +"automatisk få, og sette opp digitale sertifikater for hvert tilgjengelige " +"domene. Det gjøres ved å bekrefte eierskapet til et domene til " +"sertifiseringsinstansen (CA): Let's Encrypt." + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:52 +msgid "" +"Let's Encrypt is a free, automated, and open certificate authority, run for " +"the public’s benefit by the Internet Security Research Group (ISRG). Please " +"read and agree with the Let's Encrypt Subscriber Agreement before using this service." +msgstr "" +"Let's Encrypt er en gratis, automatisert, og åpen sertifiseringsinstans, til " +"allmenn nytte, laget av Internet Security Research Group (ISRG). Vennligst " +"les og aksepter Let's " +"Encrypt Subscriber Agreement før tjenesten brukes." + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:66 +#: plinth/modules/monkeysphere/templates/monkeysphere.html:70 +msgid "Domain" +msgstr "Domene" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:67 +msgid "Certificate Status" +msgstr "Sertifikatsstatus" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:68 +msgid "Website Security" +msgstr "Nettstedssikkerhet " + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:69 +#: plinth/modules/monkeysphere/templates/monkeysphere.html:72 +msgid "Actions" +msgstr "Handlinger" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:79 +#, python-format +msgid "Expires on %(expiry_date)s" +msgstr "Utløper %(expiry_date)s" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:85 +msgid "No certficate" +msgstr "Sertifikat mangler" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:102 +msgid "Revoke" +msgstr "Inndra" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:108 +msgid "Re-obtain" +msgstr "Gjeninnhente" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:115 +msgid "Obtain" +msgstr "Innhente" + +#: plinth/modules/letsencrypt/views.py:55 +#, python-brace-format +msgid "Certificate successfully revoked for domain {domain}" +msgstr "Sertifikat vellykket tilbakekalt for domenet {domain}" + +#: plinth/modules/letsencrypt/views.py:60 +#, python-brace-format +msgid "Failed to revoke certificate for domain {domain}: {error}" +msgstr "Klarte ikke å inndra sertifikatet for domenet {domain}: {error}" + +#: plinth/modules/letsencrypt/views.py:72 +#, python-brace-format +msgid "Certificate successfully obtained for domain {domain}" +msgstr "Sertifikat vellykket innhentet til domene {domain}" + +#: plinth/modules/letsencrypt/views.py:77 +#, python-brace-format +msgid "Failed to obtain certificate for domain {domain}: {error}" +msgstr "Klarte ikke å oppnå sertifikat til domene {domain}: {error}" + +#: plinth/modules/monkeysphere/__init__.py:32 +#: plinth/modules/monkeysphere/templates/monkeysphere.html:35 +#: plinth/modules/monkeysphere/views.py:44 +msgid "Monkeysphere" +msgstr "Monkeysphere" + +#: plinth/modules/monkeysphere/templates/monkeysphere.html:38 +msgid "" +"With Monkeysphere, a PGP key can be generated for each configured domain " +"serving SSH. The PGP public key can then be uploaded to the PGP keyservers. " +"Users connecting to this machine through SSH can verify that they are " +"connecting to the correct host. For users to trust the key, at least one " +"person (usually the machine owner) must sign the key using the regular PGP " +"key signing process. See the Monkeysphere SSH documentation for more details." +msgstr "" +"Med Monkeysphere kan en PGP-nøkkel genereres for hvert konfigurert domene " +"som tjener (server) SSH. En offentlig PGP-nøkkel kan deretter lastes opp til " +"PGP-nøkkeltjenerne. Brukere som kobler til denne maskinen via SSH kan få " +"bekreftet at de kobler til riktig vert. For at brukerne skal stole på " +"nøkkelen, må minst en person (vanligvis maskinens eier) signere nøkkelen med " +"en vanlig PGP-nøkkel-godkjenningsprosess. Se Monkeysphere SSH documentation for flere detaljer." + +#: plinth/modules/monkeysphere/templates/monkeysphere.html:53 +msgid "Publishing key to keyserver..." +msgstr "Legge ut nøkkel til nøkkeltjenere" + +#: plinth/modules/monkeysphere/templates/monkeysphere.html:71 +msgid "GPG Fingerprint" +msgstr "GPG-fingeravtrykk" + +#: plinth/modules/monkeysphere/templates/monkeysphere.html:83 +#: plinth/modules/names/views.py:45 +msgid "Not Available" +msgstr "Ikke tilgjengelig" + +#: plinth/modules/monkeysphere/templates/monkeysphere.html:93 +msgid "Generate PGP Key" +msgstr "Generere PGP-nøkkel" + +#: plinth/modules/monkeysphere/templates/monkeysphere.html:101 +msgid "Publish Key" +msgstr "Legge ut nøkkel" + +#: plinth/modules/monkeysphere/views.py:58 +msgid "Generated PGP key." +msgstr "Generere PGP-nøkkel" + +#: plinth/modules/monkeysphere/views.py:83 +msgid "Cancelled key publishing." +msgstr "Avbrutt nøkkelutlegging" + +#: plinth/modules/monkeysphere/views.py:120 +msgid "Published key to keyserver." +msgstr "Publisert nøkkel til nøkkeltjener" + +#: plinth/modules/monkeysphere/views.py:122 +msgid "Error occurred while publishing key." +msgstr "Feil oppstått under utlegging av nøkkel." #: plinth/modules/mumble/__init__.py:38 #: plinth/modules/mumble/templates/mumble.html:26 @@ -1137,8 +1332,8 @@ "href=\"http://mumble.info\">Clients to connect to Mumble from your " "desktop and Android devices are available." msgstr "" -"Du kan koble til din Mumble-server på den vanlige Mumble-port 64738. Clients for å koble til Mumble når skrivebordet " +"Du kan koble til din Mumble-tjener på den vanlige Mumble-port 64738. Klienter for å koble til Mumble når skrivebordet " "og/eller Android-enheter er tilgjengelige." #: plinth/modules/mumble/templates/mumble.html:49 @@ -1149,61 +1344,48 @@ msgid "Mumble server is not running" msgstr "Mumble-tjener kjører ikke" -#: plinth/modules/names/__init__.py:30 +#: plinth/modules/names/__init__.py:29 msgid "HTTP" msgstr "HTTP" -#: plinth/modules/names/__init__.py:31 +#: plinth/modules/names/__init__.py:30 msgid "HTTPS" msgstr "HTTPS" -#: plinth/modules/names/__init__.py:32 +#: plinth/modules/names/__init__.py:31 msgid "SSH" msgstr "SSH" -#: plinth/modules/names/__init__.py:46 plinth/modules/names/views.py:34 +#: plinth/modules/names/__init__.py:45 plinth/modules/names/views.py:34 msgid "Name Services" msgstr "Navnetjenester" -#: plinth/modules/names/__init__.py:107 -msgid "Not Available" -msgstr "Ikke tilgjengelig" - #: plinth/modules/networks/__init__.py:108 #, python-brace-format msgid "Using DNSSEC on IPv{kind}" msgstr "Bruker DNSSEC på IPv{kind}" #: plinth/modules/networks/forms.py:30 -msgid "-- select --" -msgstr " – velg – " - -#: plinth/modules/networks/forms.py:42 msgid "Connection Type" msgstr "Oppkoblingstype" -#: plinth/modules/networks/forms.py:49 plinth/modules/networks/forms.py:106 -#: plinth/modules/networks/forms.py:133 +#: plinth/modules/networks/forms.py:37 msgid "Connection Name" msgstr "Oppkoblingsnavn" -#: plinth/modules/networks/forms.py:51 plinth/modules/networks/forms.py:108 -#: plinth/modules/networks/forms.py:135 +#: plinth/modules/networks/forms.py:39 msgid "Physical Interface" msgstr "Fysisk grensesnitt" -#: plinth/modules/networks/forms.py:53 plinth/modules/networks/forms.py:110 -#: plinth/modules/networks/forms.py:137 +#: plinth/modules/networks/forms.py:41 msgid "The network device that this connection should be bound to." msgstr "Nettverksenheten som denne forbindelsen bør være bundet til." -#: plinth/modules/networks/forms.py:56 plinth/modules/networks/forms.py:113 -#: plinth/modules/networks/forms.py:140 +#: plinth/modules/networks/forms.py:44 msgid "Firewall Zone" msgstr "Brannmursone" -#: plinth/modules/networks/forms.py:57 plinth/modules/networks/forms.py:114 -#: plinth/modules/networks/forms.py:141 +#: plinth/modules/networks/forms.py:45 msgid "" "The firewall zone will control which services are available over this " "interfaces. Select Internal only for trusted networks." @@ -1211,27 +1393,27 @@ "Brannmuren vil kontrollere hvilke tjenester som er tilgjengelig over dette " "grensesnitt. Velg Internal bare for klarerte nettverk." -#: plinth/modules/networks/forms.py:61 plinth/modules/networks/forms.py:162 +#: plinth/modules/networks/forms.py:49 msgid "IPv4 Addressing Method" msgstr "IPv4 adresseringsmetode" -#: plinth/modules/networks/forms.py:62 +#: plinth/modules/networks/forms.py:50 msgid "" "\"Shared\" method will start a DHCP server and \"Automatic\" method will " "acquire configuration from a DHCP server." msgstr "" -"«Shared»-metoden vil starte en DHCP-server, og «Automatic»-metoden vil hente " +"«Shared»-metoden vil starte en DHCP-tjener, og «Automatic»-metoden vil hente " "konfigurasjon fra en DHCP-tjener." -#: plinth/modules/networks/forms.py:68 plinth/modules/networks/forms.py:170 +#: plinth/modules/networks/forms.py:56 msgid "Address" msgstr "Adresse" -#: plinth/modules/networks/forms.py:72 plinth/modules/networks/forms.py:174 +#: plinth/modules/networks/forms.py:60 msgid "Netmask" msgstr "Netmaske" -#: plinth/modules/networks/forms.py:73 plinth/modules/networks/forms.py:175 +#: plinth/modules/networks/forms.py:61 msgid "" "Optional value. If left blank, a default netmask based on the address will " "be used." @@ -1239,63 +1421,63 @@ "Valgfri verdi. Om det står tomt, vil en standard nettmaske, basert på " "adressen, bli brukt." -#: plinth/modules/networks/forms.py:78 plinth/modules/networks/forms.py:180 +#: plinth/modules/networks/forms.py:66 #: plinth/modules/networks/templates/connection_show.html:202 #: plinth/modules/networks/templates/connection_show.html:241 msgid "Gateway" msgstr "Inngangsport" -#: plinth/modules/networks/forms.py:79 plinth/modules/networks/forms.py:181 +#: plinth/modules/networks/forms.py:67 msgid "Optional value." msgstr "Valgfri verdi." -#: plinth/modules/networks/forms.py:83 plinth/modules/networks/forms.py:185 +#: plinth/modules/networks/forms.py:71 msgid "DNS Server" msgstr "DNS-tjener" -#: plinth/modules/networks/forms.py:84 plinth/modules/networks/forms.py:186 +#: plinth/modules/networks/forms.py:72 msgid "" "Optional value. If this value is given and IPv4 addressing method is " "\"Automatic\", the DNS Servers provided by a DHCP server will be ignored." msgstr "" "Valgfri verdi. Hvis denne verdien er gitt, og IPv4 adresseringsmetoden er " -"«Automatic», vil DNS-tjenere levert av en DHCP-server, bli ignorert." +"«Automatic», vil DNS-tjenere levert av en DHCP-tjener, bli ignorert." -#: plinth/modules/networks/forms.py:90 plinth/modules/networks/forms.py:192 +#: plinth/modules/networks/forms.py:78 msgid "Second DNS Server" msgstr "Andre DNS-tjener" -#: plinth/modules/networks/forms.py:91 plinth/modules/networks/forms.py:193 +#: plinth/modules/networks/forms.py:79 msgid "" "Optional value. If this value is given and IPv4 Addressing Method is " "\"Automatic\", the DNS Servers provided by a DHCP server will be ignored." msgstr "" "Valgfri verdi. Hvis denne verdien er gitt, og IPv4 adresseringsmetoden er " -"«Automatic», vil DNS-servere som tilbys av en DHCP-server, bli ignorert." +"«Automatic», vil DNS-servere som tilbys av en DHCP-tjener, bli ignorert." -#: plinth/modules/networks/forms.py:121 -msgid "Show password" -msgstr "Vis passord" +#: plinth/modules/networks/forms.py:89 +msgid "-- select --" +msgstr "-- velg --" -#: plinth/modules/networks/forms.py:145 +#: plinth/modules/networks/forms.py:175 #: plinth/modules/networks/templates/connection_show.html:144 msgid "SSID" -msgstr "SSID (Service Set Identifier) " +msgstr "SSID" -#: plinth/modules/networks/forms.py:146 +#: plinth/modules/networks/forms.py:176 msgid "The visible name of the network." msgstr "Det synlige navnet på nettverket." -#: plinth/modules/networks/forms.py:148 +#: plinth/modules/networks/forms.py:178 #: plinth/modules/networks/templates/connection_show.html:157 msgid "Mode" msgstr "Modus" -#: plinth/modules/networks/forms.py:153 +#: plinth/modules/networks/forms.py:183 msgid "Authentication Mode" msgstr "Autentiseringsmodus" -#: plinth/modules/networks/forms.py:154 +#: plinth/modules/networks/forms.py:184 msgid "" "Select WPA if the wireless network is secured and requires clients to have " "the password to connect." @@ -1303,30 +1485,22 @@ "Velg WPA (Works Progress Administration) hvis det trådløse nettverket er " "sikret og krever at brukerne har passordet for å koble til." -#: plinth/modules/networks/forms.py:158 +#: plinth/modules/networks/forms.py:188 msgid "Passphrase" msgstr "Passfrase" -#: plinth/modules/networks/forms.py:166 -msgid "" -"Select Automatic (DHCP) if you are connecting to an existing wireless " -"network. Shared mode is useful when running an Access Point." -msgstr "" -"Velg Automatisk (DHCP) hvis du kobler til et eksisterende trådløst nettverk. " -"Felles modus er nyttig når du kjører et Access Point." - #: plinth/modules/networks/networks.py:36 #: plinth/modules/networks/networks.py:56 msgid "Network Connections" msgstr "Nettverksoppkoblinger" #: plinth/modules/networks/networks.py:38 -#: plinth/modules/networks/networks.py:273 +#: plinth/modules/networks/networks.py:242 msgid "Nearby Wi-Fi Networks" msgstr "Wi-Fi-nettverk i nærheten" #: plinth/modules/networks/networks.py:40 -#: plinth/modules/networks/networks.py:295 +#: plinth/modules/networks/networks.py:264 msgid "Add Connection" msgstr "Legg til tilkobling" @@ -1350,59 +1524,59 @@ msgid "This type of connection is not yet understood." msgstr "Denne typen tilkobling er ennå ikke forstått." -#: plinth/modules/networks/networks.py:170 -#: plinth/modules/networks/networks.py:229 +#: plinth/modules/networks/networks.py:139 +#: plinth/modules/networks/networks.py:198 #: plinth/modules/networks/templates/connections_edit.html:34 msgid "Edit Connection" msgstr "Endre oppkobling" -#: plinth/modules/networks/networks.py:240 +#: plinth/modules/networks/networks.py:209 #, python-brace-format msgid "Activated connection {name}." msgstr "Aktiverte tilkobling {name}." -#: plinth/modules/networks/networks.py:243 +#: plinth/modules/networks/networks.py:212 msgid "Failed to activate connection: Connection not found." msgstr "Kunne ikke aktivere tilkobling: Tilkobling ikke funnet." -#: plinth/modules/networks/networks.py:247 +#: plinth/modules/networks/networks.py:216 #, python-brace-format msgid "Failed to activate connection {name}: No suitable device is available." msgstr "" "Klarte ikke aktivere tilkobling {name}: Ingen passende enhet er tilgjengelig." -#: plinth/modules/networks/networks.py:260 +#: plinth/modules/networks/networks.py:229 #, python-brace-format msgid "Deactivated connection {name}." msgstr "Deaktivert forbindelse {name}." -#: plinth/modules/networks/networks.py:263 +#: plinth/modules/networks/networks.py:232 msgid "Failed to de-activate connection: Connection not found." msgstr "Kunne ikke deaktivere tilkobling: Tilkobling ikke funnet." -#: plinth/modules/networks/networks.py:325 +#: plinth/modules/networks/networks.py:282 msgid "Adding New Ethernet Connection" msgstr "Legge til nye Ethernet-tilkoblinger" -#: plinth/modules/networks/networks.py:350 +#: plinth/modules/networks/networks.py:300 msgid "Adding New PPPoE Connection" msgstr "Legge til ny PPPoE-forbindelse" -#: plinth/modules/networks/networks.py:399 +#: plinth/modules/networks/networks.py:332 msgid "Adding New Wi-Fi Connection" msgstr "Legge til ny Wi-Fi-forbindelse" -#: plinth/modules/networks/networks.py:413 +#: plinth/modules/networks/networks.py:346 #, python-brace-format msgid "Connection {name} deleted." msgstr "Forbindelse {name} slettet." -#: plinth/modules/networks/networks.py:416 -#: plinth/modules/networks/networks.py:425 +#: plinth/modules/networks/networks.py:349 +#: plinth/modules/networks/networks.py:358 msgid "Failed to delete connection: Connection not found." msgstr "Kunne ikke slette tilkobling: Tilkobling ikke funnet." -#: plinth/modules/networks/networks.py:430 +#: plinth/modules/networks/networks.py:363 #: plinth/modules/networks/templates/connections_delete.html:26 msgid "Delete Connection" msgstr "Slett tilkobling" @@ -1412,7 +1586,7 @@ msgstr "Rediger tilkobling" #: plinth/modules/networks/templates/connection_show.html:43 -#: plinth/templates/base.html:119 +#: plinth/templates/base.html:123 msgid "Edit" msgstr "Rediger" @@ -1559,36 +1733,38 @@ #: plinth/modules/networks/templates/connection_show.html:280 msgid "" -"This interface should be connected to local network/machine. If you connect " -"this interface to a public network, services meant to be available only " -"internally will become available externally. This is a security risk." -msgstr "" -"Dette grensesnittet skal kobles til lokalt nettverk/maskin. Hvis du kobler " -"det til et offentlig nettverk, vil tjenester som er ment å bare være " -"tilgjengelig internt, bli tilgjengelig eksternt. Dette er en " -"sikkerhetsrisiko." +"This interface should be connected to a local network/machine. If you " +"connect this interface to a public network, services meant to be available " +"only internally will become available externally. This is a security risk." +msgstr "" +"Dette grensesnittet skal kobles til et lokalt nettverk/maskin. Hvis du " +"kobler dette grensesnittet til et offentlig nettverk, vil tjenester som er " +"ment å bare være tilgjengelig internt, bli tilgjengelig eksternt. Dette er " +"en sikkerhetsrisiko." #: plinth/modules/networks/templates/connection_show.html:300 msgid "" -"This interface should receive your Internet connection. If you connect it " -"your a local network/machine, many services meant to available only " -"internally will not be available." -msgstr "" -"Dette grensesnittet skal motta din Internett-forbindelse. Hvis du kobler den " -"til et lokalt nettverk/maskin, vil mange tjenester som er ment å kun være " -"tilgjengelig internt, ikke være tilgjengelige." +"This interface should receive your Internet connection. If you connect it to " +"a local network/machine, many services meant to available only internally " +"will not be available." +msgstr "" +"Dette grensesnittet skal motta din Internett-forbindelse. Hvis du kobler det " +"til et lokalt nettverk/maskin, vil mange tjenester som er ment å være " +"tilgjengelig internt ikke være tilgjengelige." #: plinth/modules/networks/templates/connection_show.html:319 +#, python-format msgid "" -"This interface is not maintained by FreedomBox. Its security status is " -"unknown to FreedomBox. Many FreedomBox services may not be available on " -"this interface. It is recommended that you deactivate/delete this " +"This interface is not maintained by %(box_name)s. Its security status is " +"unknown to %(box_name)s. Many %(box_name)s services may not be available on " +"this interface. It is recommended that you deactivate or delete this " "connection and re-configure it." msgstr "" -"Dette grensesnittet er ikke vedlikeholdt av FreedomBox. FreedomBox kjenner " -"derfor ikke sikkerhetsstatusen. Mange FreedomBox-tjenester blir kanskje " -"ikke tilgjengelige i dette grensesnittet. Det anbefales at du deaktiverer/" -"sletter denne forbindelsen og rekonfigurerer." +"Dette grensesnittet er ikke vedlikeholdt av %(box_name)s, og " +"sikkerhetsstatusen er ikke kjent for %(box_name)s. Mange %(box_name)s-" +"tjenester blir kanskje ikke tilgjengelige i dette grensesnittet. Det " +"anbefales derfor at du deaktiverer/sletter denne forbindelsen, og " +"rekonfigurerer." #: plinth/modules/networks/templates/connections_add.html:34 #: plinth/modules/networks/templates/connections_type_select.html:34 @@ -1678,16 +1854,16 @@ #, python-format msgid "" "Virtual Private Network (VPN) is a technique for securely connecting two " -"machines in order to access resources of a private network. While you are " +"devices in order to access resources of a private network. While you are " "away from home, you can connect to your %(box_name)s in order to join your " "home network and access private/internal services provided by %(box_name)s. " "You can also access the rest of the Internet via %(box_name)s for added " "security and anonymity." msgstr "" "Virtual Private Network (VPN) er en teknikk for sikker tilkobling av to " -"maskiner for å få tilgang til ressurser fra et privat nettverk. Mens du er " +"maskiner for å få tilgang til ressurser i et privat nettverk. Mens du er " "borte hjemmefra, kan du koble til din %(box_name)s \n" -"til ditt hjemmenettverk, og få tilgang til privat/interne tjenester i " +"til ditt hjemmenettverk, og få tilgang til dine private/interne tjenester i " "%(box_name)s. \n" "Du kan også få tilgang til resten av Internettet via %(box_name)s for ekstra " "sikkerhet og anonymitet." @@ -1702,16 +1878,16 @@ "To connect to %(box_name)s's VPN, you need to download a profile and feed it " "to an OpenVPN client on your mobile or desktop machine. OpenVPN Clients are " "available for most platforms. See documentation on recommended clients and instructions on how to " "configure them." msgstr "" -"For å koble til %(box_name)s VPN, må du laste ned en profil og legge den til " -"en OpenVPN-klient på mobilen eller på en stasjonære maskin. OpenVPN-klienter " +"For å koble til %(box_name)s VPN må du laste ned en profil og legge den til " +"en OpenVPN-klient på mobilen eller på en stasjonær maskin. OpenVPN-klienter " "er tilgjengelig for de fleste plattformer. Se " -"documentation om anbefate klienter og instruksjoner om hvordan de " -"settes opp. " +"org/FreedomBox/Manual/OpenVPN\" title=\"%(box_name)s Manual - OpenVPN" +"\">documentation om anbefalte klienter, og instruksjoner om hvordan de " +"settes opp." #: plinth/modules/openvpn/templates/openvpn.html:66 #, python-format @@ -1733,7 +1909,7 @@ msgstr "" "OpenVPN er ennå ikke satt opp. Å utføre et sikkert oppsett tar svært lang " "tid. Avhengig av hvor fort din %(box_name)s er, kan det hende at det tar " -"timer. Hvis oppsettingen blir avbrutt, kan du starte den igjen. " +"timer. Hvis oppsettingen blir avbrutt, kan du starte den igjen." #: plinth/modules/openvpn/templates/openvpn.html:97 msgid "Start setup" @@ -1848,7 +2024,7 @@ #: plinth/modules/pagekite/forms.py:56 msgid "Port of your pagekite server (default: 80)" -msgstr " Overføre din PageKite tjener (default: 80)" +msgstr "Port for din PageKitetjener (default: 80)" #: plinth/modules/pagekite/forms.py:58 msgid "Kite name" @@ -2053,12 +2229,7 @@ msgstr "" "Åpne tjenester på Internett er tilgjengelige og kan angripes og skades." -#: plinth/modules/pagekite/templates/pagekite_standard_services.html:50 -msgid "Exposing SSH with the default password for 'fbx' is a VERY BAD idea." -msgstr "" -"Å eksponere SSH med standardpassordet for «fbx»er en VELDIG DÅRLIG idé." - -#: plinth/modules/pagekite/templates/pagekite_standard_services.html:65 +#: plinth/modules/pagekite/templates/pagekite_standard_services.html:58 msgid "Save Services" msgstr "Lagre tjenester" @@ -2125,7 +2296,7 @@ #: plinth/modules/power/templates/power.html:37 msgid "Shut Down »" -msgstr "Slå av " +msgstr "Slå av »" #: plinth/modules/power/templates/power_restart.html:29 msgid "" @@ -2208,11 +2379,11 @@ #: plinth/modules/quassel/templates/quassel.html:26 #: plinth/modules/quassel/views.py:54 msgid "IRC Client (Quassel)" -msgstr "IRC Client (Quassel)" +msgstr "IRC-klient (Quassel)" #: plinth/modules/quassel/__init__.py:41 msgid "Quassel IRC Client" -msgstr "Quassel IRC Client" +msgstr "Quassel IRC-klient" #: plinth/modules/quassel/forms.py:29 msgid "Enable Quassel core service" @@ -2229,7 +2400,7 @@ "connect and disconnect from it." msgstr "" "Quassel er et IRC-applikasjon som er delt i to deler, en «kjerne» og en " -"«klient». Dette tillater kjernen å være koblet til IRC-servere, og for å " +"«klient». Dette tillater kjernen å være koblet til IRC-tjenere, og for å " "fortsette å motta meldinger, selv når klienten er frakoblet. %(box_name)s " "kan kjøre Quassel kjernetjeneste, og holder deg alltid på nettet, og en " "eller flere Quassel-klienter kan brukes fra et skrivebord, eller mobilt til " @@ -2255,6 +2426,68 @@ msgid "Quassel core service is not running" msgstr "Quassel kjernetjeneste kjører ikke" +#: plinth/modules/repro/__init__.py:36 +#: plinth/modules/repro/templates/repro.html:26 +#: plinth/modules/repro/views.py:55 +msgid "SIP Server (repro)" +msgstr "SIP Server (repro)" + +#: plinth/modules/repro/__init__.py:41 +msgid "repro SIP Server" +msgstr "repro SIP Server" + +#: plinth/modules/repro/forms.py:29 +msgid "Enable repro service" +msgstr "Aktiver repro service" + +#: plinth/modules/repro/templates/repro.html:29 +msgid "" +"repro provides various SIP services that a SIP softphone can utilize to " +"provide audio and video calls as well as presence and instant messaging. " +"repro provides a server and SIP user accounts that clients can use to let " +"their presence known. It also acts as a proxy to federate SIP " +"communications to other servers on the Internet similar to email." +msgstr "" +"repro gir ulike SIP-tjenester som en SIP softphone kan bruke for å gi lyd- " +"og videosamtaler, tilstedeværelse og direktemeldinger. repro gir en server " +"og SIP-brukerkontoer som klientene kan bruke til å vise sin tilstedeværelse. " +"Den fungerer også som en mellomtjener for å forene SIP-kommunikasjon til " +"andre servere på Internett på samme måte som e-post." + +#: plinth/modules/repro/templates/repro.html:39 +msgid "" +"To make SIP calls, a client application is needed. Available clients include " +"Jitsi (for computers) and CSipSimple (for Android phones)." +msgstr "" +"Til SIP-samtaler, trengs et klientprogram. Tilgjengelige klienter omfatter <" +"a href=\"https://jitsi.org/\">Jitsi (for datamaskiner) og CSipSimple " +"(for Android telefoner)." + +#: plinth/modules/repro/templates/repro.html:48 +msgid "" +"Note: Before using repro, domains and users will need to " +"be configured using the web-based " +"configuration panel. Users in the admin group will be able to " +"log in to the repro configuration panel. After setting the domain, it is " +"required to restart the repro service. Disable the service and re-enable it." +msgstr "" +"Note: Før du bruker repro, domener og brukere, må det " +"konfigureres ved hjelp av web-based " +"configuration panel. Brukere i admin gruppen kan logge seg inn " +"i repros konfigureringspanel. Etter innstillingen av domenet, er det " +"nødvendig å restarte repro-tjenesten. Deaktiver tjenesten og reaktiver den." + +#: plinth/modules/repro/templates/repro.html:63 +msgid "repro service is running" +msgstr "repro-tjenesten kjører" + +#: plinth/modules/repro/templates/repro.html:66 +msgid "repro service is not running" +msgstr "repro-tjenesten kjører ikke" + #: plinth/modules/restore/__init__.py:36 #: plinth/modules/restore/templates/restore_index.html:26 #: plinth/modules/restore/views.py:46 @@ -2275,14 +2508,14 @@ "reStore is a server for unhosted web " "applications. The idea is to uncouple web applications from data. No " "matter where a web application is served from, the data can be stored on an " -"unhosted storage server of user's choice. With reStore, your " -"%(cfg.box_name)s becomes your unhosted storage server." +"unhosted storage server of user's choice. With reStore, your %(box_name)s " +"becomes your unhosted storage server." msgstr "" -"reStore er en tjener for vertsløse web-" -"anvendelser. Ideen er å fjerne koblingen mellom web-anvendelser og data. " -"Uansett hvor web-anvendelsen kommer fra, så kan datasettet være lagret på en " -"vertsløs lagringstjener etter brukerens valg. Med reStore blir din " -"%(cfg.box_name)s en vertsløs lagringstjener." +"reStore er en tjener for vertsfrie " +"nettprogrammer. Ideen er å frikoble nettprogrammer fra data. Uansett hvor " +"en nettapplikasjon betjenes fra, kan dataene lagres på en vertsfri " +"lagringsserver etter brukerens valg. Med reStore, blir %(box_name)s din " +"vertsfrie lagringsserver. " #: plinth/modules/restore/templates/restore_index.html:40 msgid "" @@ -2379,7 +2612,7 @@ #: plinth/modules/system/system.py:33 #: plinth/modules/system/templates/system.html:25 -#: plinth/templates/base.html:105 +#: plinth/templates/base.html:109 msgid "System Configuration" msgstr "Systemoppsett" @@ -2395,35 +2628,78 @@ "The options affect the %(box_name)s at its most general level, so be careful!" msgstr "" "Mulighetene som berører %(box_name)s er oftet på generelt nivå, så vær " -"forsiktig! " +"forsiktig!" + +#: plinth/modules/tor/__init__.py:48 plinth/modules/tor/templates/tor.html:35 +msgid "Anonymity Network (Tor)" +msgstr "Anonymitetsnettverk (Tor)" + +#: plinth/modules/tor/__init__.py:53 +msgid "Tor Anonymity Network" +msgstr "Tor Anonymity Network" + +#: plinth/modules/tor/__init__.py:58 +msgid "Tor Bridge Relay" +msgstr "Tor Bridge Relay" -#: plinth/modules/tor/__init__.py:50 +#: plinth/modules/tor/__init__.py:76 plinth/modules/tor/views.py:144 +msgid "Tor Hidden Service" +msgstr "Skjult Tor-tjeneste" + +#: plinth/modules/tor/__init__.py:222 msgid "Tor relay port available" msgstr "Tor relay port tilgjengelig" -#: plinth/modules/tor/__init__.py:58 +#: plinth/modules/tor/__init__.py:230 msgid "Obfs3 transport registered" msgstr "Obfs3-transport registrert" -#: plinth/modules/tor/__init__.py:64 +#: plinth/modules/tor/__init__.py:236 msgid "Obfs4 transport registered" msgstr "Obfs4-transport registrert" -#: plinth/modules/tor/__init__.py:101 +#: plinth/modules/tor/__init__.py:273 #, python-brace-format msgid "Access URL {url} on tcp{kind} via Tor" -msgstr " Adgang til URL {url} på tcp{kind} via Tor" +msgstr "Adgang til URL {url} på tcp{kind} via Tor" -#: plinth/modules/tor/__init__.py:112 +#: plinth/modules/tor/__init__.py:284 #, python-brace-format msgid "Confirm Tor usage at {url} on tcp{kind}" msgstr "Bekreft Tor-bruk på {url} via tcp{kind}" -#: plinth/modules/tor/templates/tor.html:26 plinth/modules/tor/tor.py:66 -msgid "Anonymity Network (Tor)" -msgstr "Anonymity Network (Tor)" +#: plinth/modules/tor/forms.py:32 +msgid "Enable Tor" +msgstr "Aktiver Tor" + +#: plinth/modules/tor/forms.py:35 +msgid "Enable Tor Hidden Service" +msgstr "Aktiver skjulte Tor-tjenester" + +#: plinth/modules/tor/forms.py:38 +#, python-brace-format +msgid "" +"A hidden service will allow {box_name} to provide selected services (such as " +"ownCloud or chat) without revealing its location." +msgstr "" +"En skjult tjeneste som vil tillate {box_name} å gi valgte tjenester (slike " +"som ownCloud eller chat) uten å avsløre sin beliggenhet." + +#: plinth/modules/tor/forms.py:42 +msgid "Download software packages over Tor" +msgstr "Last ned programpakker via Tor" + +#: plinth/modules/tor/forms.py:44 +msgid "" +"When enabled, software will be downloaded over the Tor network for " +"installations and upgrades. This adds a degree of privacy and security " +"during software downloads." +msgstr "" +"Når den er aktivert, vil programvaren lastes ned over Tor-nettverket for " +"installasjoner og oppgraderinger. Dette legger til en viss grad privatliv og " +"sikkerhet under nedlasting av programvare." -#: plinth/modules/tor/templates/tor.html:29 +#: plinth/modules/tor/templates/tor.html:38 msgid "" "Tor is an anonymous communication system. You can learn more about it from " "the Tor Project website. For " @@ -2437,28 +2713,32 @@ "href=\"https://www.torproject.org/download/download-easy.html.en\"> Tor " "Browser." -#: plinth/modules/tor/templates/tor.html:44 +#: plinth/modules/tor/templates/tor.html:54 +msgid "Tor configuration is being updated" +msgstr "Tor-konfigureringen blir oppdatert. " + +#: plinth/modules/tor/templates/tor.html:62 msgid "Tor is running" msgstr "Tor kjører" -#: plinth/modules/tor/templates/tor.html:47 +#: plinth/modules/tor/templates/tor.html:65 msgid "Tor is not running" msgstr "Tor kjører ikke" -#: plinth/modules/tor/templates/tor.html:59 +#: plinth/modules/tor/templates/tor.html:77 msgid "Hidden Service" msgstr "Skjult tjeneste" -#: plinth/modules/tor/templates/tor.html:60 -#: plinth/modules/tor/templates/tor.html:102 +#: plinth/modules/tor/templates/tor.html:78 +#: plinth/modules/tor/templates/tor.html:120 msgid "Port" msgstr "Port" -#: plinth/modules/tor/templates/tor.html:85 +#: plinth/modules/tor/templates/tor.html:103 msgid "Bridge" msgstr "Bro" -#: plinth/modules/tor/templates/tor.html:88 +#: plinth/modules/tor/templates/tor.html:106 #, python-format msgid "" "Your %(box_name)s is configured as a Tor bridge with obfsproxy, so it can " @@ -2466,97 +2746,47 @@ "firewall, you should make sure the following ports are open, and port-" "forwarded, if necessary:" msgstr "" -"Ditt %(box_name)s er satt opp som en Tor-bro med obfsproxy, så det kan " -"hjelpe til med å komme forbi sensur. Hvis din %(box_name)s er bak en ruter " -"eller brannvegg, må du forsikre deg om at de følgende portene er åpne, og " -"port-videre (videreportert), om nødvendig:" +"Ditt %(box_name)s er satt opp som en Tor-bro med obfsproxy, så det kan bidra " +"med å motvirke sensur. Hvis din %(box_name)s er bak en ruter eller " +"brannvegg, må du forsikre deg om at de følgende portene er åpne, og at " +"portene er videresendt, om nødvendig:" -#: plinth/modules/tor/templates/tor.html:101 +#: plinth/modules/tor/templates/tor.html:119 msgid "Service" msgstr "Tjeneste" -#: plinth/modules/tor/templates/tor.html:117 +#: plinth/modules/tor/templates/tor.html:135 msgid "SOCKS" msgstr "SOCKS" -#: plinth/modules/tor/templates/tor.html:120 +#: plinth/modules/tor/templates/tor.html:138 #, python-format msgid "A Tor SOCKS port is available on your %(box_name)s on TCP port 9050." msgstr "" "En Tor SOCKS port er tilgjengelig på din %(box_name)s på TCP port 9050." -#: plinth/modules/tor/tor.py:46 -msgid "Enable Tor" -msgstr "Aktiver Tor" - -#: plinth/modules/tor/tor.py:49 -msgid "Enable Tor Hidden Service" -msgstr "Aktiver skjulte Tor-tjenester" - -#: plinth/modules/tor/tor.py:51 -msgid "" -"A hidden service will allow FreedomBox to provide selected services (such as " -"ownCloud or Chat) without revealing its location." -msgstr "" -"En skjult tjeneste vil tillate FreedomBox å levere valgte tjenester (for " -"eksempel ownCloud eller Chat) uten å avsløre sin beliggenhet." - -#: plinth/modules/tor/tor.py:55 -msgid "Download software packages over Tor" -msgstr "Last ned programpakker via Tor" - -#: plinth/modules/tor/tor.py:57 -msgid "" -"When enabled, software will be downloaded over the Tor network for " -"installations and upgrades. This adds a degree of privacy and security " -"during software downloads." -msgstr "" -"Når den er aktivert, vil programvaren lastes ned over Tor-nettverket for " -"installasjoner og oppgraderinger. Dette legger til en viss grad privatliv og " -"sikkerhet under nedlasting av programvare." - -#: plinth/modules/tor/tor.py:85 plinth/modules/tor/tor.py:285 -msgid "Tor Hidden Service" -msgstr "Skjult Tor-tjeneste" - -#: plinth/modules/tor/tor.py:115 +#: plinth/modules/tor/views.py:68 msgid "Tor Control Panel" msgstr "Tor Control Panel (Kontrollpanel)" -#: plinth/modules/tor/tor.py:240 +#: plinth/modules/tor/views.py:79 #, python-brace-format msgid "Action error: {0} [{1}] [{2}]" msgstr "Handlingsfeil: {0} [{1}] [{2}]" -#: plinth/modules/tor/tor.py:256 -msgid "Tor enabled" -msgstr "Tor aktivert" - -#: plinth/modules/tor/tor.py:259 -msgid "Tor disabled" -msgstr "Tor deaktivert" - -#: plinth/modules/tor/tor.py:264 -msgid "Tor hidden service enabled" -msgstr "Skjult Tor-tjeneste aktivert" - -#: plinth/modules/tor/tor.py:267 -msgid "Tor hidden service disabled" -msgstr "Tor skjult tjeneste deaktivert" - -#: plinth/modules/tor/tor.py:292 -msgid "Enabled package download over Tor" -msgstr "Aktivert pakkenedlasting over Tor" - -#: plinth/modules/tor/tor.py:295 -msgid "Disabled package download over Tor" -msgstr "Deaktivert pakke lastet ned over Tor" +#: plinth/modules/tor/views.py:148 +msgid "Configuration updated." +msgstr "Konfigurering oppdatert." + +#: plinth/modules/tor/views.py:150 +msgid "An error occurred during configuration." +msgstr "En feil oppsto under konfigureringen." #: plinth/modules/transmission/__init__.py:38 #: plinth/modules/transmission/templates/transmission.html:26 -#: plinth/modules/transmission/views.py:63 +#: plinth/modules/transmission/views.py:67 msgid "BitTorrent (Transmission)" -msgstr "BitTorrent (Transmission) (Transmission: Overføring)" +msgstr "BitTorrent (Transmission)" #: plinth/modules/transmission/__init__.py:43 msgid "Transmission BitTorrent" @@ -2564,7 +2794,7 @@ #: plinth/modules/transmission/forms.py:29 msgid "Enable Transmission daemon" -msgstr "Aktiver Transmission (overføring) i bakgrunnen" +msgstr "Aktiver bakgrunnsprosess for Transmission" #: plinth/modules/transmission/forms.py:33 msgid "Download directory" @@ -2597,8 +2827,8 @@ "BitTorrent is a peer-to-peer file sharing protocol. Transmission daemon " "handles Bitorrent file sharing. Note that BitTorrent is not anonymous." msgstr "" -"BitTorrent er en like-til-like fildelingsprotokoll. Transmission i " -"bakgrunnen håndterer BitTorrent fildeling. Merk at BitTorrent er ikke anonym." +"BitTorrent er en like-til-like fildelingsprotokoll. Transmission håndterer " +"BitTorrent-fildeling i bakgrunnen. Merk at BitTorrent er ikke anonym." #: plinth/modules/transmission/templates/transmission.html:37 msgid "" @@ -2613,7 +2843,7 @@ #: plinth/modules/transmission/templates/transmission.html:50 msgid "Transmission daemon is not running." -msgstr "Transmission-nissen kjører ikke." +msgstr "Transmission kjører ikke i bakgrunnen." #: plinth/modules/upgrades/__init__.py:33 msgid "Software Upgrades" @@ -2628,75 +2858,76 @@ "When enabled, the unattended-upgrades program will be run once per day. It " "will attempt to perform any package upgrades that are available." msgstr "" -"Når den er aktivert, vil oppgraderingsprogrammet uten tilyn kjøres én gang " -"per dag. Det vil søke å utføre de pakkeoppgraderinger som er tilgjengelige." - -#: plinth/modules/upgrades/templates/upgrades.html:40 -msgid "There was an error while upgrading." -msgstr "Det var en feil under oppgradering." - -#: plinth/modules/upgrades/templates/upgrades.html:43 -#: plinth/modules/upgrades/templates/upgrades.html:59 -msgid "Output from unattended-upgrades:" -msgstr "Resultat fra oppgraderinger uten tilsyn" - -#: plinth/modules/upgrades/templates/upgrades.html:50 -msgid "The operating system is up to date now.  " -msgstr "Operativsystemet er oppdatert nå.  " +"Når den er aktivert, vil oppgraderingsprogrammet kjøres én gang per dag uten " +"tilsyn. Det vil forsøke å utføre de pakkeoppgraderinger som er tilgjengelige." -#: plinth/modules/upgrades/templates/upgrades.html:53 -msgid "Show Details" -msgstr "Vis detaljer" +#: plinth/modules/upgrades/templates/upgrades.html:37 +msgid "" +"Upgrades install the latest software and security updates. When automatic " +"upgrades are enabled, upgrades are automatically run every night. You don't " +"normally need to start the upgrade process." +msgstr "" +"Upgrades installerer de nyeste programvare- og sikkerhetsoppdateringene. Når " +"automatiske oppgraderinger er aktivert, blir de kjørt automatisk hver natt. " +"Vanligvis trenger du ikke å starte oppdateringsprosessen." -#: plinth/modules/upgrades/templates/upgrades.html:69 +#: plinth/modules/upgrades/templates/upgrades.html:45 msgid "" -"This will run unattended-upgrades, which will attempt to upgrade your system " -"with the latest Debian packages. It may take a few minutes to complete." +"Depending on the number of packages to install, this may take a long time to " +"complete. While upgrades are in progress, you will not be able to install " +"other packages. During the upgrade, this web interface may be temporarily " +"unavailable and show an error. Refresh the page to continue." msgstr "" -"Dette vil kjøre oppgraderinger uten tilsyn, og søke å oppgradere systemet " -"ditt med de nyeste Debian-pakkene. Det kan ta noen minutter å fullføre." +"Avhengig av hvor mange pakker som skal installeres, kan fullføringen ta lang " +"tid. Mens oppgraderingen pågår, kan du ikke installere andre pakker. Under " +"oppgraderingen kan dette nettgrensesnittet være midlertidig utilgjengelig, " +"og vise en feil. Oppdater siden for å fortsette." -#: plinth/modules/upgrades/templates/upgrades.html:80 +#: plinth/modules/upgrades/templates/upgrades.html:58 msgid "Upgrade now »" msgstr "Oppgradere nå »" -#: plinth/modules/upgrades/templates/upgrades.html:87 -msgid "System is being upgraded." -msgstr "Systemet blir oppgradert." +#: plinth/modules/upgrades/templates/upgrades.html:65 +msgid "A package manager is running." +msgstr "En pakkebehandler kjører." + +#: plinth/modules/upgrades/templates/upgrades.html:70 +msgid "Recent log from upgrades:" +msgstr "Seneste logg fra upgrades (oppdateringer):" -#: plinth/modules/upgrades/views.py:35 plinth/modules/upgrades/views.py:64 +#: plinth/modules/upgrades/views.py:36 plinth/modules/upgrades/views.py:66 msgid "Automatic Upgrades" msgstr "Automatiske oppgraderinger" -#: plinth/modules/upgrades/views.py:37 +#: plinth/modules/upgrades/views.py:38 msgid "Upgrade Packages" msgstr "Oppgrader pakker" -#: plinth/modules/upgrades/views.py:75 +#: plinth/modules/upgrades/views.py:96 +msgid "Upgrade process started." +msgstr "Upgrade-prosessen har startet." + +#: plinth/modules/upgrades/views.py:99 +msgid "Starting upgrade failed." +msgstr "Å starte upgrade feilet." + +#: plinth/modules/upgrades/views.py:102 msgid "Package Upgrades" msgstr "Pakkeoppgraderinger" -#: plinth/modules/upgrades/views.py:116 +#: plinth/modules/upgrades/views.py:131 #, python-brace-format msgid "Error when configuring unattended-upgrades: {error}" msgstr "Feil ved oppsett av unattended-upgrades: {error}" -#: plinth/modules/upgrades/views.py:121 +#: plinth/modules/upgrades/views.py:136 msgid "Automatic upgrades enabled" msgstr "Automatiske oppgraderinger aktiv" -#: plinth/modules/upgrades/views.py:123 +#: plinth/modules/upgrades/views.py:138 msgid "Automatic upgrades disabled" msgstr "Automatiske oppgraderinger avslått" -#: plinth/modules/upgrades/views.py:142 -msgid "Upgrade completed." -msgstr "Oppgradering fullført." - -#: plinth/modules/upgrades/views.py:144 -msgid "Upgrade failed." -msgstr "Oppgradering feilet." - #: plinth/modules/users/__init__.py:36 msgid "Users and Groups" msgstr "Brukere og grupper" @@ -2737,19 +2968,33 @@ msgid "Failed to add new user to {group} group." msgstr "Klarte ikke legge ny bruker til gruppe {group}." -#: plinth/modules/users/forms.py:126 +#: plinth/modules/users/forms.py:92 +msgid "SSH Keys" +msgstr "SSH-nøkler" + +#: plinth/modules/users/forms.py:96 +msgid "" +"Setting an SSH public key will allow this user to securely log in to the " +"system without using a password. You may enter multiple keys, one on each " +"line. Blank lines and lines starting with # will be ignored." +msgstr "" +"Å sette en SSH offentlig nøkkel vil tillate denne brukeren å logge sikkert " +"på systemet uten å bruke passord. Du kan legge inn multiple nøkler, én på " +"hver linje. Blanke linjer og linjer som starter med # vil bli ignorert." + +#: plinth/modules/users/forms.py:136 msgid "Renaming LDAP user failed." msgstr "Klarte ikke bytte navn på LDAP-bruker." -#: plinth/modules/users/forms.py:138 +#: plinth/modules/users/forms.py:148 msgid "Failed to remove user from group." msgstr "Klarte ikke slette bruker fra gruppe." -#: plinth/modules/users/forms.py:149 +#: plinth/modules/users/forms.py:159 msgid "Failed to add user to group." msgstr "Klarte ikke legge bruker til gruppe." -#: plinth/modules/users/forms.py:174 +#: plinth/modules/users/forms.py:188 msgid "Changing LDAP user password failed." msgstr "Klarte ikke å bytte passord for LDAP-bruker." @@ -2768,7 +3013,7 @@ msgstr "Opprett bruker" #: plinth/modules/users/templates/users_delete.html:26 -#: plinth/modules/users/views.py:103 +#: plinth/modules/users/views.py:110 msgid "Delete User" msgstr "Slett bruker" @@ -2823,22 +3068,22 @@ msgid "Edit User" msgstr "Rediger bruker" -#: plinth/modules/users/views.py:113 +#: plinth/modules/users/views.py:120 #, python-brace-format msgid "User {user} deleted." msgstr "Bruker {user} slettet." -#: plinth/modules/users/views.py:120 +#: plinth/modules/users/views.py:127 msgid "Deleting LDAP user failed." msgstr "Klarte ikke slette LDAP-bruker." -#: plinth/modules/users/views.py:129 +#: plinth/modules/users/views.py:136 msgid "Change Password" msgstr "Endre passord" -#: plinth/modules/users/views.py:130 +#: plinth/modules/users/views.py:137 msgid "Password changed successfully." -msgstr "Vellykket passordbytte" +msgstr "Vellykket passordbytte." #: plinth/modules/xmpp/__init__.py:41 plinth/modules/xmpp/__init__.py:46 #: plinth/modules/xmpp/templates/xmpp.html:26 plinth/modules/xmpp/views.py:75 @@ -2863,9 +3108,9 @@ "any other XMPP client." msgstr "" -"For faktisk å kommunisere, kan du bruke web client eller hvilken som helst annen XMPP client ." +"For faktisk å kommunisere, kan du bruke webklient " +"eller hvilken som helst annen XMPP client." #: plinth/modules/xmpp/templates/xmpp.html:45 #, python-format @@ -2909,7 +3154,7 @@ #: plinth/service.py:73 msgid "Web Server" -msgstr "Webserver" +msgstr "Nettjener" #: plinth/service.py:74 msgid "Web Server over Secure Socket Layer" @@ -2919,9 +3164,10 @@ msgid "Secure Shell (SSH) Server" msgstr "Secure Shell (SSH) tjener" -#: plinth/service.py:78 -msgid "FreedomBox Web Interface (Plinth)" -msgstr "FreedomBox Web Interface (grensesnitt) (Plinth)" +#: plinth/service.py:79 +#, python-brace-format +msgid "{box_name} Web Interface (Plinth)" +msgstr "{box_name} Web Interface (Plinth)" #: plinth/templates/404.html:25 msgid "404" @@ -2957,27 +3203,24 @@ "issues\"> bug tracker så det kan bli ordnet." #: plinth/templates/base.html:49 -msgid "Plinth administrative interface for the FreedomBox" -msgstr "Plinth administrative brukergrensesnitt for FreedomBox" - -#: plinth/templates/base.html:52 plinth/templates/base.html.py:88 -msgid "FreedomBox" -msgstr "FreedomBox" +#, python-format +msgid "Plinth administrative interface for the %(box_name)s" +msgstr "Plinth administrativt brukergrensesnitt for %(box_name)s" -#: plinth/templates/base.html:81 +#: plinth/templates/base.html:83 msgid "Toggle navigation" msgstr "Toggle navigasjon" -#: plinth/templates/base.html:121 plinth/templates/base.html.py:122 +#: plinth/templates/base.html:125 plinth/templates/base.html.py:126 msgid "Change password" msgstr "Endre passord" -#: plinth/templates/base.html:125 plinth/templates/base.html.py:126 -#: plinth/templates/base.html:139 plinth/templates/base.html.py:141 +#: plinth/templates/base.html:129 plinth/templates/base.html.py:130 +#: plinth/templates/base.html:143 plinth/templates/base.html.py:145 msgid "Log out" msgstr "Logg ut" -#: plinth/templates/base.html:131 plinth/templates/base.html.py:133 +#: plinth/templates/base.html:135 plinth/templates/base.html.py:137 msgid "Log in" msgstr "Logg inn" @@ -3017,3 +3260,7 @@ #, python-format msgid "%(percentage)s%% complete" msgstr "%(percentage)s%% fullført" + +#~ msgid "Exposing SSH with the default password for 'fbx' is a VERY BAD idea." +#~ msgstr "" +#~ "Å eksponere SSH med standardpassordet for «fbx»er en VELDIG DÅRLIG idé." diff -Nru plinth-0.7.2/plinth/locale/nl/LC_MESSAGES/django.po plinth-0.8.1/plinth/locale/nl/LC_MESSAGES/django.po --- plinth-0.7.2/plinth/locale/nl/LC_MESSAGES/django.po 2015-12-23 11:34:40.000000000 +0000 +++ plinth-0.8.1/plinth/locale/nl/LC_MESSAGES/django.po 2016-02-16 03:55:53.000000000 +0000 @@ -7,11 +7,11 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-12-20 13:58+0530\n" +"POT-Creation-Date: 2016-01-31 22:19+0530\n" "PO-Revision-Date: 2015-12-20 09:35+0000\n" "Last-Translator: ikmaak \n" -"Language-Team: Dutch " -"\n" +"Language-Team: Dutch \n" "Language: nl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -51,11 +51,15 @@ msgid "Cannot connect to {host}:{port}" msgstr "Kan niet verbinden met {host}:{port}" +#: plinth/context_processors.py:36 +msgid "FreedomBox" +msgstr "FreedomBox" + #: plinth/modules/apps/apps.py:26 msgid "Apps" msgstr "Apps" -#: plinth/modules/apps/apps.py:32 plinth/templates/base.html.py:90 +#: plinth/modules/apps/apps.py:32 plinth/templates/base.html.py:93 msgid "Applications" msgstr "Programma's" @@ -97,10 +101,18 @@ msgstr "Service Discovery Inschakelen" #: plinth/modules/avahi/templates/avahi.html:29 -msgid "" -"Service discovery allows other machines on the network to discover your " -"FreedomBox and services running on it. It also allows FreedomBox to " -"discover other machines and services running on your local network. Service " +#, fuzzy, python-format +#| msgid "" +#| "Service discovery allows other machines on the network to discover your " +#| "FreedomBox and services running on it. It also allows FreedomBox to " +#| "discover other machines and services running on your local network. " +#| "Service discovery is not essential and works only on internal networks. " +#| "It may be disabled to improve security especially when connecting to a " +#| "hostile local network." +msgid "" +"Service discovery allows other devices on the network to discover your " +"%(box_name)s and services running on it. It also allows %(box_name)s to " +"discover other devices and services running on your local network. Service " "discovery is not essential and works only on internal networks. It may be " "disabled to improve security especially when connecting to a hostile local " "network." @@ -115,14 +127,15 @@ #: plinth/modules/avahi/templates/avahi.html:40 #: plinth/modules/datetime/templates/datetime.html:35 #: plinth/modules/deluge/templates/deluge.html:39 -#: plinth/modules/dynamicdns/dynamicdns.py:38 +#: plinth/modules/dynamicdns/dynamicdns.py:39 #: plinth/modules/firewall/templates/firewall.html:57 #: plinth/modules/mumble/templates/mumble.html:44 #: plinth/modules/networks/templates/connection_show.html:261 #: plinth/modules/openvpn/templates/openvpn.html:81 #: plinth/modules/privoxy/templates/privoxy.html:48 #: plinth/modules/quassel/templates/quassel.html:50 -#: plinth/modules/tor/templates/tor.html:39 +#: plinth/modules/repro/templates/repro.html:58 +#: plinth/modules/tor/templates/tor.html:48 #: plinth/modules/transmission/templates/transmission.html:42 #: plinth/modules/xmpp/templates/xmpp.html:58 msgid "Status" @@ -145,9 +158,10 @@ #: plinth/modules/owncloud/templates/owncloud.html:51 #: plinth/modules/privoxy/templates/privoxy.html:62 #: plinth/modules/quassel/templates/quassel.html:65 +#: plinth/modules/repro/templates/repro.html:72 #: plinth/modules/roundcube/templates/roundcube.html:62 #: plinth/modules/shaarli/templates/shaarli.html:40 -#: plinth/modules/tor/templates/tor.html:74 +#: plinth/modules/tor/templates/tor.html:92 #: plinth/modules/transmission/templates/transmission.html:56 #: plinth/modules/xmpp/templates/xmpp.html:72 msgid "Configuration" @@ -163,10 +177,11 @@ #: plinth/modules/openvpn/templates/openvpn.html:138 #: plinth/modules/privoxy/templates/privoxy.html:70 #: plinth/modules/quassel/templates/quassel.html:73 +#: plinth/modules/repro/templates/repro.html:80 #: plinth/modules/restore/templates/restore_index.html:54 #: plinth/modules/roundcube/templates/roundcube.html:70 #: plinth/modules/shaarli/templates/shaarli.html:48 -#: plinth/modules/tor/templates/tor.html:82 +#: plinth/modules/tor/templates/tor.html:100 #: plinth/modules/transmission/templates/transmission.html:64 #: plinth/modules/upgrades/templates/upgrades_configure.html:34 #: plinth/modules/xmpp/templates/xmpp.html:80 @@ -175,12 +190,13 @@ #: plinth/modules/avahi/views.py:73 plinth/modules/datetime/views.py:85 #: plinth/modules/deluge/views.py:80 -#: plinth/modules/dynamicdns/dynamicdns.py:368 +#: plinth/modules/dynamicdns/dynamicdns.py:371 #: plinth/modules/ikiwiki/views.py:95 plinth/modules/mumble/views.py:80 #: plinth/modules/openvpn/views.py:142 plinth/modules/privoxy/views.py:83 -#: plinth/modules/quassel/views.py:76 plinth/modules/restore/views.py:68 -#: plinth/modules/roundcube/views.py:84 plinth/modules/shaarli/views.py:74 -#: plinth/modules/transmission/views.py:105 plinth/modules/xmpp/views.py:100 +#: plinth/modules/quassel/views.py:76 plinth/modules/repro/views.py:77 +#: plinth/modules/restore/views.py:68 plinth/modules/roundcube/views.py:84 +#: plinth/modules/shaarli/views.py:74 plinth/modules/transmission/views.py:109 +#: plinth/modules/xmpp/views.py:100 msgid "Configuration updated" msgstr "Configuratie bijgewerkt" @@ -188,27 +204,34 @@ #: plinth/modules/deluge/views.py:82 plinth/modules/ikiwiki/views.py:97 #: plinth/modules/mumble/views.py:82 plinth/modules/openvpn/views.py:144 #: plinth/modules/owncloud/owncloud.py:93 plinth/modules/privoxy/views.py:85 -#: plinth/modules/quassel/views.py:78 plinth/modules/restore/views.py:70 -#: plinth/modules/roundcube/views.py:86 plinth/modules/shaarli/views.py:76 -#: plinth/modules/tor/tor.py:250 plinth/modules/transmission/views.py:107 -#: plinth/modules/upgrades/views.py:103 plinth/modules/xmpp/views.py:102 +#: plinth/modules/quassel/views.py:78 plinth/modules/repro/views.py:79 +#: plinth/modules/restore/views.py:70 plinth/modules/roundcube/views.py:86 +#: plinth/modules/shaarli/views.py:76 plinth/modules/tor/views.py:111 +#: plinth/modules/transmission/views.py:111 +#: plinth/modules/upgrades/views.py:118 plinth/modules/xmpp/views.py:102 msgid "Setting unchanged" msgstr "Instelling onveranderd" -#: plinth/modules/config/config.py:83 plinth/modules/config/config.py:120 -#: plinth/modules/dynamicdns/dynamicdns.py:145 +#: plinth/modules/config/config.py:84 plinth/modules/config/config.py:121 +#: plinth/modules/dynamicdns/dynamicdns.py:148 msgid "Invalid domain name" msgstr "Foutieve domeinnaam" -#: plinth/modules/config/config.py:94 +#: plinth/modules/config/config.py:95 msgid "Hostname" msgstr "Hostnaam" -#: plinth/modules/config/config.py:96 -msgid "" -"Hostname is the local name by which other machines on the local network " -"reach your machine. It must start and end with an alphabet or a digit and " -"have as interior characters only alphabets, digits and hyphens. Total " +#: plinth/modules/config/config.py:97 +#, fuzzy, python-brace-format +#| msgid "" +#| "Hostname is the local name by which other machines on the local network " +#| "reach your machine. It must start and end with an alphabet or a digit " +#| "and have as interior characters only alphabets, digits and hyphens. " +#| "Total length must be 63 characters or less." +msgid "" +"Hostname is the local name by which other devices on the local network can " +"reach your {box_name}. It must start and end with an alphabet or a digit " +"and have as interior characters only alphabets, digits and hyphens. Total " "length must be 63 characters or less." msgstr "" "De hostnaam is de lokale naam waarmee ander machines in het LAN deze machine " @@ -216,24 +239,32 @@ "cijfer, er tussenin mogen ook koppeltekens. De totale lengte mag niet langer " "zijn dan 63 tekens." -#: plinth/modules/config/config.py:104 +#: plinth/modules/config/config.py:105 msgid "Invalid hostname" msgstr "Foutieve hostnaam" -#: plinth/modules/config/config.py:107 plinth/modules/config/config.py:153 +#: plinth/modules/config/config.py:108 plinth/modules/config/config.py:153 #: plinth/modules/config/config.py:265 -#: plinth/modules/dynamicdns/dynamicdns.py:140 +#: plinth/modules/dynamicdns/dynamicdns.py:143 msgid "Domain Name" msgstr "Domeinnaam" -#: plinth/modules/config/config.py:109 -msgid "" -"Domain name is the global name by which other machines on the Internet can " -"reach you. It must consist of labels separated by dots. Each label must " -"start and end with an alphabet or a digit and have as interior characters " -"only alphabets, digits and hyphens. Length of each label must be 63 " -"characters or less. Total length of domain name must be 253 characters or " -"less." +#: plinth/modules/config/config.py:110 +#, fuzzy, python-brace-format +#| msgid "" +#| "Domain name is the global name by which other machines on the Internet " +#| "can reach you. It must consist of labels separated by dots. Each label " +#| "must start and end with an alphabet or a digit and have as interior " +#| "characters only alphabets, digits and hyphens. Length of each label must " +#| "be 63 characters or less. Total length of domain name must be 253 " +#| "characters or less." +msgid "" +"Domain name is the global name by which other devices on the Internet can " +"reach your {box_name}. It must consist of labels separated by dots. Each " +"label must start and end with an alphabet or a digit and have as interior " +"characters only alphabets, digits and hyphens. Length of each label must be " +"63 characters or less. Total length of domain name must be 253 characters " +"or less." msgstr "" "Een domeinnaam is de globaal bereikbare naam waarmee andere computers op het " "internet deze machine kan bereiken. Het moet bestaan uit namen, gescheiden " @@ -242,16 +273,18 @@ "niet langer zijn dan 63 tekens. De totale domeinnaamlengte mag niet langer " "zijn dan 253 tekens." -#: plinth/modules/config/config.py:124 +#: plinth/modules/config/config.py:125 msgid "Language" msgstr "Taal" -#: plinth/modules/config/config.py:126 -msgid "Language for this FreedomBox web administration interface" +#: plinth/modules/config/config.py:127 +#, fuzzy +#| msgid "Language for this FreedomBox web administration interface" +msgid "Language for this web administration interface" msgstr "Taalkeuze voor deze FreedomBox web administratie" #: plinth/modules/config/config.py:135 -#: plinth/modules/dynamicdns/dynamicdns.py:36 +#: plinth/modules/dynamicdns/dynamicdns.py:37 #: plinth/modules/ikiwiki/views.py:36 msgid "Configure" msgstr "Configureer" @@ -446,16 +479,16 @@ msgid "Result" msgstr "Resultaat" -#: plinth/modules/dynamicdns/dynamicdns.py:34 plinth/modules/help/help.py:40 +#: plinth/modules/dynamicdns/dynamicdns.py:35 plinth/modules/help/help.py:40 msgid "About" msgstr "Over" -#: plinth/modules/dynamicdns/dynamicdns.py:44 -#: plinth/modules/dynamicdns/dynamicdns.py:53 +#: plinth/modules/dynamicdns/dynamicdns.py:45 +#: plinth/modules/dynamicdns/dynamicdns.py:54 msgid "Dynamic DNS" msgstr "Dynamic DNS" -#: plinth/modules/dynamicdns/dynamicdns.py:70 +#: plinth/modules/dynamicdns/dynamicdns.py:71 msgid "" "The Variables <User>, <Pass>, <Ip>, <Domain> may be " "used within the URL. For details see the update URL templates of the example " @@ -465,7 +498,7 @@ "worden gebruikt in de URL. Zie voor details de update URL voorbeelden van de " "voorbeeld providers." -#: plinth/modules/dynamicdns/dynamicdns.py:74 +#: plinth/modules/dynamicdns/dynamicdns.py:75 msgid "" "Please choose an update protocol according to your provider. If your " "provider does not support the GnudIP protocol or your provider is not listed " @@ -475,25 +508,31 @@ "GnudIP protocol gebruikt of de provider staat niet in de lijst, gebruik dan " "de update URL van de provider." -#: plinth/modules/dynamicdns/dynamicdns.py:79 +#: plinth/modules/dynamicdns/dynamicdns.py:80 +#, fuzzy +#| msgid "" +#| "Please do not enter a URL here (like \"https://example.com/\") but only " +#| "the hostname of the GnuDIP server (like \"example.pcom\")." msgid "" "Please do not enter a URL here (like \"https://example.com/\") but only the " -"hostname of the GnuDIP server (like \"example.pcom\")." +"hostname of the GnuDIP server (like \"example.com\")." msgstr "" "Voer hier geen complete URL in (zoals \"https://example.com/\") maar alleen " "de hostnaam van de GnuDIP server (zoals \"example.com\")." -#: plinth/modules/dynamicdns/dynamicdns.py:83 -msgid "The public domain name you want use to reach your box." +#: plinth/modules/dynamicdns/dynamicdns.py:84 +#, fuzzy, python-brace-format +#| msgid "The public domain name you want use to reach your box." +msgid "The public domain name you want use to reach your {box_name}." msgstr "De publieke domeinnaam die gebruikt wordt om deze box aan te spreken." -#: plinth/modules/dynamicdns/dynamicdns.py:85 +#: plinth/modules/dynamicdns/dynamicdns.py:87 msgid "Use this option if your provider uses self signed certificates." msgstr "" "Gebruik deze functie indien de provider gebruik maakt van self-signed " "certificaten." -#: plinth/modules/dynamicdns/dynamicdns.py:88 +#: plinth/modules/dynamicdns/dynamicdns.py:90 msgid "" "If this option is selected, your username and password will be used for HTTP " "basic authentication." @@ -501,24 +540,30 @@ "Als deze optie is geselecteerd wordt de gebruikersnaam en wachtwoord " "gebruikt voor HTTP basic authentificatie." -#: plinth/modules/dynamicdns/dynamicdns.py:91 +#: plinth/modules/dynamicdns/dynamicdns.py:93 msgid "" "Leave this field empty if you want to keep your previous configured password." msgstr "Laat dit veld leeg om het vooraf ingestelde wachtwoord te behouden." -#: plinth/modules/dynamicdns/dynamicdns.py:94 +#: plinth/modules/dynamicdns/dynamicdns.py:96 +#, fuzzy, python-brace-format +#| msgid "" +#| "Optional Value. If your FreedomBox is not connected directly to the " +#| "Internet (i.e. connected to a NAT router) this URL is used to figure out " +#| "the real Internet IP. The URL should simply return the IP wherethe client " +#| "comes from. Example: http://myip.datasystems24.de" msgid "" -"Optional Value. If your FreedomBox is not connected directly to the Internet " +"Optional Value. If your {box_name} is not connected directly to the Internet " "(i.e. connected to a NAT router) this URL is used to figure out the real " -"Internet IP. The URL should simply return the IP wherethe client comes from. " -"Example: http://myip.datasystems24.de" +"Internet IP. The URL should simply return the IP where the client comes from " +"(example: http://myip.datasystems24.de)." msgstr "" "Optionele waarde. Als de FreedomBox niet direct is verbonden met het " "internet (maar verbonden met een NAT router), wordt deze URL gebruikt om het " "echte Internet IP adres te vinden. Het antwoord op het aanroepen van deze " "URL zou het IP adres moeten zijn. Voorbeeld: http://myip.datasystems24.de" -#: plinth/modules/dynamicdns/dynamicdns.py:101 +#: plinth/modules/dynamicdns/dynamicdns.py:104 msgid "" "You should have been requested to select a username when you created the " "account." @@ -526,85 +571,98 @@ "Er zou een keuze voor de gebruikersnaam moeten zijn geweest tijdens het " "aanmaken van de account." -#: plinth/modules/dynamicdns/dynamicdns.py:112 +#: plinth/modules/dynamicdns/dynamicdns.py:115 msgid "Enable Dynamic DNS" msgstr "Dynamic DNS Inschakelen" -#: plinth/modules/dynamicdns/dynamicdns.py:115 +#: plinth/modules/dynamicdns/dynamicdns.py:118 msgid "Service type" msgstr "Dienst type" -#: plinth/modules/dynamicdns/dynamicdns.py:120 +#: plinth/modules/dynamicdns/dynamicdns.py:123 msgid "GnudIP Server Address" msgstr "GnudIP Serveradres" -#: plinth/modules/dynamicdns/dynamicdns.py:125 +#: plinth/modules/dynamicdns/dynamicdns.py:128 msgid "Invalid server name" msgstr "Foute servernaam" -#: plinth/modules/dynamicdns/dynamicdns.py:128 +#: plinth/modules/dynamicdns/dynamicdns.py:131 msgid "Update URL" msgstr "URL bijwerken" -#: plinth/modules/dynamicdns/dynamicdns.py:132 -msgid "accept all SSL certificates" +#: plinth/modules/dynamicdns/dynamicdns.py:135 +#, fuzzy +#| msgid "accept all SSL certificates" +msgid "Accept all SSL certificates" msgstr "accepteer alle SSL certificaten" -#: plinth/modules/dynamicdns/dynamicdns.py:136 -msgid "use HTTP basic authentication" +#: plinth/modules/dynamicdns/dynamicdns.py:139 +#, fuzzy +#| msgid "use HTTP basic authentication" +msgid "Use HTTP basic authentication" msgstr "gebruik HTTP basic authentificatie" -#: plinth/modules/dynamicdns/dynamicdns.py:148 -#: plinth/modules/networks/forms.py:118 plinth/modules/transmission/forms.py:39 +#: plinth/modules/dynamicdns/dynamicdns.py:151 +#: plinth/modules/networks/forms.py:146 plinth/modules/transmission/forms.py:39 msgid "Username" msgstr "Gebruikersnaam" -#: plinth/modules/dynamicdns/dynamicdns.py:151 -#: plinth/modules/networks/forms.py:119 plinth/modules/transmission/forms.py:43 +#: plinth/modules/dynamicdns/dynamicdns.py:154 +#: plinth/modules/networks/forms.py:147 plinth/modules/transmission/forms.py:43 msgid "Password" msgstr "Wachtwoord" -#: plinth/modules/dynamicdns/dynamicdns.py:154 -msgid "show password" -msgstr "toon wachtwoord" +#: plinth/modules/dynamicdns/dynamicdns.py:157 +#: plinth/modules/networks/forms.py:149 +msgid "Show password" +msgstr "Toon wachtwoord" -#: plinth/modules/dynamicdns/dynamicdns.py:158 +#: plinth/modules/dynamicdns/dynamicdns.py:161 msgid "IP check URL" msgstr "IP test URL" -#: plinth/modules/dynamicdns/dynamicdns.py:184 +#: plinth/modules/dynamicdns/dynamicdns.py:187 msgid "Please provide update URL or a GnuDIP Server" msgstr "Voer een update URL of GnuDIP Server in" -#: plinth/modules/dynamicdns/dynamicdns.py:187 +#: plinth/modules/dynamicdns/dynamicdns.py:190 msgid "Please provide GnuDIP username" msgstr "Voer een GnuDIP gebruikersnaam in" -#: plinth/modules/dynamicdns/dynamicdns.py:190 +#: plinth/modules/dynamicdns/dynamicdns.py:193 msgid "Please provide GnuDIP domain" msgstr "Voer een GnuDIP domein in" -#: plinth/modules/dynamicdns/dynamicdns.py:195 +#: plinth/modules/dynamicdns/dynamicdns.py:198 msgid "Please provide a password" msgstr "Voer een wachtwoord in" -#: plinth/modules/dynamicdns/dynamicdns.py:214 +#: plinth/modules/dynamicdns/dynamicdns.py:217 msgid "Configure Dynamic DNS" msgstr "Instellen Dynamic DNS" -#: plinth/modules/dynamicdns/dynamicdns.py:236 +#: plinth/modules/dynamicdns/dynamicdns.py:239 msgid "Status of Dynamic DNS" msgstr "Status van Dynamic DNS" #: plinth/modules/dynamicdns/templates/dynamicdns.html:25 -msgid "DynamicDNS client" +#, fuzzy +#| msgid "DynamicDNS client" +msgid "Dynamic DNS Client" msgstr "DynamicDNS cliënt" #: plinth/modules/dynamicdns/templates/dynamicdns.html:28 +#, fuzzy, python-format +#| msgid "" +#| "If your internet provider changes your IP address periodic (i.e. every " +#| "24h) it may be hard for others to find you in the WEB. And for this " +#| "reason nobody may find the services which are provided by FreedomBox " +#| "(like your ownCloud)." msgid "" "If your internet provider changes your IP address periodic (i.e. every 24h) " "it may be hard for others to find you in the WEB. And for this reason nobody " -"may find the services which are provided by FreedomBox (like your ownCloud)." +"may find the services which are provided by %(box_name)s, such as ownCloud." msgstr "" "Als de internetprovider het adres regelmatig wisselt, (bijvoorbeeld iedere " "24 uur) kan het voor anderen moeilijk zijn om deze machine te vinden vanaf " @@ -612,13 +670,22 @@ "ownCloud) vaak onmogelijk." #: plinth/modules/dynamicdns/templates/dynamicdns.html:37 +#, fuzzy +#| msgid "" +#| "The solution is to assign a DNS name to your IP address and update the " +#| "DNS name every time your IP is changed by your Internet provider. Dynamic " +#| "DNS allows you to push your current public IP address to an gnudip " +#| "server. Afterwards the Server will assign your DNS name with the new IP " +#| "and if someone from the internet asks for your DNS name he will get your " +#| "current IP answered." msgid "" "The solution is to assign a DNS name to your IP address and update the DNS " "name every time your IP is changed by your Internet provider. Dynamic DNS " "allows you to push your current public IP address to an gnudip server. Afterwards " "the Server will assign your DNS name with the new IP and if someone from the " -"internet asks for your DNS name he will get your current IP answered." +"Internet asks for your DNS name he will get your current IP answered." msgstr "" "De oplossing is om een DNS naam aan het publieke adres toe te wijzen en de " "DNS server iedere keer bij te werken als het IP adres is gewijzigd door de " @@ -643,10 +710,14 @@ "target='_blank'> freedns.afraid.org." #: plinth/modules/dynamicdns/templates/dynamicdns.html:61 +#, fuzzy, python-format +#| msgid "" +#| "If your freedombox is connected behind some NAT router, don't forget to " +#| "add portforwarding (i.e. forward some standard ports like 80 and 443) to " +#| "your freedombox device." msgid "" -"If your freedombox is connected behind some NAT router, don't forget to add " -"portforwarding (i.e. forward some standard ports like 80 and 443) to your " -"freedombox device." +"If your %(box_name)s is connected behind some NAT router, don't forget to " +"add port forwarding (i.e. forward some standard ports like 80 and 443)." msgstr "" "Als deze FreedomBox is verbonden door middel van een vorm van NAT-routing, " "vergeet dan niet om port-forwarding te gebruiken om standaardpoorten " @@ -673,16 +744,23 @@ "het niet mogelijk om het type te herkennen." #: plinth/modules/dynamicdns/templates/dynamicdns_status.html:35 -msgid "Direct connection to the internet." +#, fuzzy +#| msgid "Direct connection to the internet." +msgid "Direct connection to the Internet." msgstr "Directe verbinding met internet." #: plinth/modules/dynamicdns/templates/dynamicdns_status.html:37 -#, python-format -msgid "" -"Behind NAT, this means that dynamic DNS service will poll the \"IP check URL" -"\" for changes (we need the \"IP check URL\" for this reason - otherwise we " -"will not detect IP changes). It may take up to %(timer)s minutes until we " -"update your DNS entry in case of WAN IP change." +#, fuzzy, python-format +#| msgid "" +#| "Behind NAT, this means that dynamic DNS service will poll the \"IP check " +#| "URL\" for changes (we need the \"IP check URL\" for this reason - " +#| "otherwise we will not detect IP changes). It may take up to %(timer)s " +#| "minutes until we update your DNS entry in case of WAN IP change." +msgid "" +"Behind NAT. This means that Dynamic DNS service will poll the \"IP check URL" +"\" for changes (the \"IP check URL\" entry is needed for this - otherwise IP " +"changes will not be detected). In case the WAN IP changes, it may take up " +"to %(timer)s minutes until your DNS entry is updated." msgstr "" "Achter NAT, dit betekent dat de dynamic DNS dienst regelmatig het IP adres " "controleert op wijzigingen (hiervoor is de \"IP check URL\" nodig, anders " @@ -701,19 +779,23 @@ msgstr "Firewall" #: plinth/modules/firewall/templates/firewall.html:28 -#, python-format -msgid "" -"Firewall is a network security system that controls the incoming and " -"outgoing network traffic on your %(box_name)s. Keeping a firewall enabled " -"and properly configured reduces risk of security threat from the Internet." +#, fuzzy, python-format +#| msgid "" +#| "Firewall is a network security system that controls the incoming and " +#| "outgoing network traffic on your %(box_name)s. Keeping a firewall enabled " +#| "and properly configured reduces risk of security threat from the Internet." +msgid "" +"Firewall is a security system that controls the incoming and outgoing " +"network traffic on your %(box_name)s. Keeping a firewall enabled and " +"properly configured reduces risk of security threat from the Internet." msgstr "" "Een Firewall is een netwerk-beveiligingssysteem dat de inkomende en " "uitgaande gegevens van %(box_name)s stuurt. Een goed geïnstalleerde en " "geactiveerde firewall vermindert het risico van internet besmetting." #: plinth/modules/firewall/templates/firewall.html:36 -msgid "The following is the current status:" -msgstr "De huidige status is als volgt:" +msgid "Current status:" +msgstr "" #: plinth/modules/firewall/templates/firewall.html:41 #, python-format @@ -733,11 +815,13 @@ msgstr "Dienst/Poort" #: plinth/modules/firewall/templates/firewall.html:67 +#: plinth/modules/letsencrypt/templates/letsencrypt.html:91 #: plinth/modules/names/templates/names.html:51 msgid "Enabled" msgstr "Ingeschakeld" #: plinth/modules/firewall/templates/firewall.html:70 +#: plinth/modules/letsencrypt/templates/letsencrypt.html:93 #: plinth/modules/names/templates/names.html:53 msgid "Disabled" msgstr "Uitgeschakeld" @@ -759,10 +843,15 @@ msgstr "Geblokkeerd" #: plinth/modules/firewall/templates/firewall.html:103 +#, fuzzy +#| msgid "" +#| "The operation of the firewall is automatic. When you enable a service it " +#| "is automatically permitted in the firewall and you disable a service is " +#| "automatically disabled in the firewall." msgid "" "The operation of the firewall is automatic. When you enable a service it is " -"automatically permitted in the firewall and you disable a service is " -"automatically disabled in the firewall." +"also permitted in the firewall and when you disable a service it is also " +"disabled in the firewall." msgstr "" "De firewall wordt automatisch ingesteld. Als een dienst wordt ingeschakeld " "wordt deze automatisch toegevoegd aan de firewall, en als een dienst wordt " @@ -780,28 +869,30 @@ msgid "User account created, you are now logged in" msgstr "Gebruikersaccount aangemaakt, U bent nu ingelogd" -#: plinth/modules/first_boot/templates/firstboot_state0.html:50 -msgid "Congratulations! Your FreedomBox is up and running!" -msgstr "Gefeliciteerd, De FreedomBox is gereed!" +#: plinth/modules/first_boot/templates/firstboot_navbar.html:23 +#: plinth/modules/help/templates/help_index.html:25 +#: plinth/templates/base.html:102 +msgid "Help" +msgstr "Hulp" -#: plinth/modules/first_boot/templates/firstboot_state0.html:54 -msgid "" -"Please provide the following basic information to complete the setup process." -msgstr "Beantwoord de volgende vragen om het installatieproces te voltooien." +#: plinth/modules/first_boot/templates/firstboot_state0.html:45 +#, fuzzy +#| msgid "Start setup" +msgid "Start Setup" +msgstr "Setup starten" -#: plinth/modules/first_boot/templates/firstboot_state0.html:62 -msgid "Next" -msgstr "Volgende" +#: plinth/modules/first_boot/templates/firstboot_state0.html:49 +#, python-format +msgid "" +"To complete the setup of your %(box_name)s, please provide some basic " +"information." +msgstr "" -#: plinth/modules/first_boot/templates/firstboot_state1.html:39 +#: plinth/modules/first_boot/templates/firstboot_state1.html:41 msgid "Administrator Account" msgstr "Beheerdersaccount" -#: plinth/modules/first_boot/templates/firstboot_state1.html:42 -#| msgid "" -#| "Choose a username and password to access this web interface. The password " -#| "can be changed and other users can be added later. An LDAP user with " -#| "administrative privileges (sudo) is also created." +#: plinth/modules/first_boot/templates/firstboot_state1.html:44 msgid "" "Choose a username and password to access this web interface. The password " "can be changed later. This user will be granted administrative privileges. " @@ -811,7 +902,7 @@ "wachtwoord kan later worden veranderd. Deze gebruiker krijgt administratieve " "rechten. Andere gebruikers kunnen later worden toegevoegd." -#: plinth/modules/first_boot/templates/firstboot_state1.html:55 +#: plinth/modules/first_boot/templates/firstboot_state1.html:57 msgid "Box it up!" msgstr "Zet 'm op!" @@ -820,35 +911,46 @@ msgstr "Instelling voltooid!" #: plinth/modules/first_boot/templates/firstboot_state10.html:32 +#, fuzzy, python-format +#| msgid "" +#| "To make your FreedomBox functional, you need some applications. " +#| "Applications will be installed the first time you access them." msgid "" -"FreedomBox setup is now complete. However, you should check the network " -"setup and modify it if necessary. Do not forget to change the default Wi-Fi " -"passwords." -msgstr "" -"De FreedomBox installatie is nu voltooid. Het is aan te raden de " -"netwerkinstellingen te controleren, en zo nodig aan te passen. Vergeet niet " -"de standaard WiFi wachtwoorden te veranderen." - -#: plinth/modules/first_boot/templates/firstboot_state10.html:40 -msgid "" -"To make your FreedomBox functional, you need some applications. " -"Applications will be installed the first time you access them." +"%(box_name)s setup is now complete. To make your %(box_name)s functional, " +"you need some applications. They will be installed the first time you " +"access them." msgstr "" "Om deze FreedomBox functioneel te maken, zijn een aantal programma's " "vereist. Programma's worden bij activering eerst geïnstalleerd." -#: plinth/modules/first_boot/templates/firstboot_state10.html:47 -msgid "Network Configuration" +#: plinth/modules/first_boot/templates/firstboot_state10.html:41 +msgid "Go to Apps" +msgstr "Ga naar Apps" + +#: plinth/modules/first_boot/templates/firstboot_state10.html:44 +#, fuzzy +#| msgid "Network Configuration" +msgid "Current Network Configuration" msgstr "Netwerkconfiguratie" -#: plinth/modules/first_boot/templates/firstboot_state10.html:54 +#: plinth/modules/first_boot/templates/firstboot_state10.html:47 +#, fuzzy +#| msgid "" +#| "FreedomBox setup is now complete. However, you should check the network " +#| "setup and modify it if necessary. Do not forget to change the default Wi-" +#| "Fi passwords." +msgid "" +"You should check the network setup and modify it if necessary. Do not forget " +"to change the default Wi-Fi passwords!" +msgstr "" +"De FreedomBox installatie is nu voltooid. Het is aan te raden de " +"netwerkinstellingen te controleren, en zo nodig aan te passen. Vergeet niet " +"de standaard WiFi wachtwoorden te veranderen." + +#: plinth/modules/first_boot/templates/firstboot_state10.html:57 msgid "Go to Networks" msgstr "Ga naar Netwerken" -#: plinth/modules/first_boot/templates/firstboot_state10.html:59 -msgid "Go to Apps" -msgstr "Ga naar Apps" - #: plinth/modules/first_boot/views.py:60 msgid "Setup Complete" msgstr "Instelling voltooid" @@ -861,9 +963,9 @@ msgid "Where to Get Help" msgstr "Hulp Verkrijgen" -#: plinth/modules/help/help.py:38 plinth/modules/help/help.py:72 -msgid "FreedomBox Manual" -msgstr "FreedomBox Handleiding" +#: plinth/modules/help/help.py:38 +msgid "Manual" +msgstr "" #: plinth/modules/help/help.py:48 msgid "Documentation and FAQ" @@ -874,15 +976,30 @@ msgid "About {box_name}" msgstr "Over {box_name}" +#: plinth/modules/help/help.py:73 +#, fuzzy, python-brace-format +#| msgid "About {box_name}" +msgid "{box_name} Manual" +msgstr "Over {box_name}" + #: plinth/modules/help/templates/help_about.html:30 +#, fuzzy, python-format +#| msgid "" +#| "FreedomBox is a community project to develop, design and promote personal " +#| "servers running free software for private, personal communications. It " +#| "is a networking appliance designed to allow interfacing with the rest of " +#| "the Internet under conditions of protected privacy and data security. It " +#| "hosts applications such as blog, wiki, website, social network, email, " +#| "web proxy and a Tor relay on a device that can replace your Wi-Fi router " +#| "so that your data stays with you." msgid "" -"FreedomBox is a community project to develop, design and promote personal " +"%(box_name)s is a community project to develop, design and promote personal " "servers running free software for private, personal communications. It is a " "networking appliance designed to allow interfacing with the rest of the " "Internet under conditions of protected privacy and data security. It hosts " "applications such as blog, wiki, website, social network, email, web proxy " -"and a Tor relay on a device that can replace your Wi-Fi router so that your " -"data stays with you." +"and a Tor relay, on a device that can replace your Wi-Fi router, so that " +"your data stays with you." msgstr "" "FreedomBox is een communityproject om persoonlijke servers met uitsluitend " "vrije software te ontwikkelen, ontwerpen en promoten. Het is een netwerk-" @@ -911,58 +1028,81 @@ "ontworpen en bedoeld." #: plinth/modules/help/templates/help_about.html:56 +#, fuzzy, python-format +#| msgid "" +#| "There are a number of projects working to realize a future of distributed " +#| "services; FreedomBox aims to bring them all together in a convenient " +#| "package." msgid "" "There are a number of projects working to realize a future of distributed " -"services; FreedomBox aims to bring them all together in a convenient package." +"services; %(box_name)s aims to bring them all together in a convenient " +"package." msgstr "" "Er zijn een aantal projecten die een toekomst vol gedecentraliseerde " "diensten; FreedomBox probeert deze allemaal te verpakken in een enkel pakket." #: plinth/modules/help/templates/help_about.html:64 +#, fuzzy, python-format +#| msgid "" +#| "For more information about the FreedomBox project, see the FreedomBox Wiki." msgid "" -"For more information about the FreedomBox project, see the FreedomBox Wiki." +"For more information about the %(box_name)s project, see the %(box_name)s Wiki." msgstr "" "Zie voor meer informatie over het FreedomBox project de FreedomBox Wiki." -#: plinth/modules/help/templates/help_about.html:72 +#: plinth/modules/help/templates/help_about.html:73 msgid "Learn more »" msgstr "Leer meer »" -#: plinth/modules/help/templates/help_about.html:75 +#: plinth/modules/help/templates/help_about.html:76 #, python-format msgid "You are running Plinth version %(version)s." msgstr "Dit is Plinth versie %(version)s." -#: plinth/modules/help/templates/help_index.html:25 -#: plinth/templates/base.html:98 -msgid "Help" -msgstr "Hulp" +#: plinth/modules/help/templates/help_base.html:36 +#, python-format +msgid "%(box_name)s Setup" +msgstr "" #: plinth/modules/help/templates/help_index.html:29 -#, python-format +#, fuzzy, python-format +#| msgid "" +#| "The FreedomBox Manual is the best place to " +#| "start for information regarding %(box_name)s." msgid "" -"The FreedomBox Manual is the best place to " +"The %(box_name)s Manual is the best place to " "start for information regarding %(box_name)s." msgstr "" "Het FreedomBox Handboek (Engelstalig) is de " "beste manier om meer te weten te komen meer informatie over %(box_name)s." #: plinth/modules/help/templates/help_index.html:36 +#, fuzzy, python-format +#| msgid "" +#| " " +#| "FreedomBox project wiki contains further information." msgid "" -" FreedomBox " -"project wiki contains further information." +" " +"%(box_name)s project wiki contains further information." msgstr "" "Zie " "FreedomBox project wiki voor meer informatie." #: plinth/modules/help/templates/help_index.html:43 -msgid "" -"To seek help from FreedomBox community, queries may be posted on the " -"mailing list. The list archives also contain information about problems " -"faced by other users and possible solutions." +#, fuzzy, python-format +#| msgid "" +#| "To seek help from FreedomBox community, queries may be posted on the mailing list. The list archives also contain information about " +#| "problems faced by other users and possible solutions." +msgid "" +"To seek help from %(box_name)s community, queries may be posted on the mailing list. The list archives also contain information about " +"problems faced by other users and possible solutions." msgstr "" "Om meer informatie te krijgen vanuit de FreedomBox community, kunnen vragen " "worden gesteld op de #freedombox " +"channel using the IRC web interface." msgstr "" -"Veel FreedomBox deelnemers en gebruikers zijn ook te vinden op het " -"#freedombox kanaal op het irc.oftc.net IRC netwerk." #: plinth/modules/ikiwiki/__init__.py:38 -msgid "Wiki & Blog (Ikiwiki)" +#, fuzzy +#| msgid "Wiki & Blog (Ikiwiki)" +msgid "Wiki and Blog (ikiwiki)" msgstr "Wiki & Blog (Ikiwiki)" #: plinth/modules/ikiwiki/__init__.py:43 -msgid "Ikiwiki wikis and blogs" +#, fuzzy +#| msgid "Ikiwiki wikis and blogs" +msgid "ikiwiki wikis and blogs" msgstr "Ikiwiki wiki's en blogs" #: plinth/modules/ikiwiki/forms.py:29 -msgid "Enable Ikiwiki" +#, fuzzy +#| msgid "Enable Ikiwiki" +msgid "Enable ikiwiki" msgstr "Ikiwiki Inschakelen" #: plinth/modules/ikiwiki/forms.py:36 @@ -1017,24 +1164,30 @@ "\">/ikiwiki." #: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:27 -#, python-format -msgid "Delete Wiki/Blog %(name)s" +#, fuzzy, python-format +#| msgid "Delete Wiki/Blog %(name)s" +msgid "Delete Wiki or Blog %(name)s" msgstr "Verwijder Wiki/Blog %(name)s" #: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:33 +#, fuzzy +#| msgid "" +#| "This action will remove all the posts, pages and comments including " +#| "revision history. Delete this wiki/blog permanently?" msgid "" "This action will remove all the posts, pages and comments including revision " -"history. Delete this wiki/blog permanently?" +"history. Delete this wiki or blog permanently?" msgstr "" "Deze actie zal alle bijdragen, pagina's, en commentaar inclusief revisie-" "historie. Deze wiki/blog permanent verwijderen?" -#: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:43 +#: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:44 #, python-format msgid "Delete %(name)s" msgstr "%(name)s verwijderen" -#: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:46 +#: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:47 +#: plinth/modules/monkeysphere/templates/monkeysphere.html:60 #: plinth/modules/networks/templates/connections_delete.html:41 #: plinth/modules/users/templates/users_delete.html:41 msgid "Cancel" @@ -1067,7 +1220,9 @@ msgstr "Maak" #: plinth/modules/ikiwiki/views.py:73 -msgid "Wiki & Blog" +#, fuzzy +#| msgid "Wiki & Blog" +msgid "Wiki and Blog" msgstr "Wiki & Blog" #: plinth/modules/ikiwiki/views.py:106 @@ -1075,8 +1230,10 @@ msgstr "Stel Wiki's en Blog's in" #: plinth/modules/ikiwiki/views.py:132 -msgid "Create Wiki/Blog" -msgstr "Nieuwe Wiki/Blog" +#, fuzzy +#| msgid "Create a Wiki or Blog" +msgid "Create Wiki or Blog" +msgstr "Maak een Wiki of Blog" #: plinth/modules/ikiwiki/views.py:145 #, python-brace-format @@ -1109,9 +1266,154 @@ msgstr "Verwijderen van {name} mislukt: {error}" #: plinth/modules/ikiwiki/views.py:182 -msgid "Delete Wiki/Blog" +#, fuzzy +#| msgid "Delete Wiki/Blog" +msgid "Delete Wiki or Blog" msgstr "Verwijder Wiki/Blog" +#: plinth/modules/letsencrypt/__init__.py:43 +#: plinth/modules/letsencrypt/templates/letsencrypt.html:38 +#: plinth/modules/letsencrypt/views.py:45 +msgid "Certificates (Let's Encrypt)" +msgstr "" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:41 +#, python-format +msgid "" +"A digital certficate allows users of a web service to verify the identity of " +"the service and to securely communicate with it. %(box_name)s can " +"automatically obtain and setup digital certificates for each available " +"domain. It does so by proving itself to be the owner of a domain to Let's " +"Encrypt, a certficate authority (CA)." +msgstr "" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:52 +msgid "" +"Let's Encrypt is a free, automated, and open certificate authority, run for " +"the public’s benefit by the Internet Security Research Group (ISRG). Please " +"read and agree with the Let's Encrypt Subscriber Agreement before using this service." +msgstr "" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:66 +#: plinth/modules/monkeysphere/templates/monkeysphere.html:70 +#, fuzzy +#| msgid "Domain Name" +msgid "Domain" +msgstr "Domeinnaam" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:67 +msgid "Certificate Status" +msgstr "" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:68 +#, fuzzy +#| msgid "Security" +msgid "Website Security" +msgstr "Security" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:69 +#: plinth/modules/monkeysphere/templates/monkeysphere.html:72 +#, fuzzy +#| msgid "Applications" +msgid "Actions" +msgstr "Programma's" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:79 +#, python-format +msgid "Expires on %(expiry_date)s" +msgstr "" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:85 +msgid "No certficate" +msgstr "" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:102 +msgid "Revoke" +msgstr "" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:108 +msgid "Re-obtain" +msgstr "" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:115 +msgid "Obtain" +msgstr "" + +#: plinth/modules/letsencrypt/views.py:55 +#, python-brace-format +msgid "Certificate successfully revoked for domain {domain}" +msgstr "" + +#: plinth/modules/letsencrypt/views.py:60 +#, python-brace-format +msgid "Failed to revoke certificate for domain {domain}: {error}" +msgstr "" + +#: plinth/modules/letsencrypt/views.py:72 +#, python-brace-format +msgid "Certificate successfully obtained for domain {domain}" +msgstr "" + +#: plinth/modules/letsencrypt/views.py:77 +#, python-brace-format +msgid "Failed to obtain certificate for domain {domain}: {error}" +msgstr "" + +#: plinth/modules/monkeysphere/__init__.py:32 +#: plinth/modules/monkeysphere/templates/monkeysphere.html:35 +#: plinth/modules/monkeysphere/views.py:44 +msgid "Monkeysphere" +msgstr "" + +#: plinth/modules/monkeysphere/templates/monkeysphere.html:38 +msgid "" +"With Monkeysphere, a PGP key can be generated for each configured domain " +"serving SSH. The PGP public key can then be uploaded to the PGP keyservers. " +"Users connecting to this machine through SSH can verify that they are " +"connecting to the correct host. For users to trust the key, at least one " +"person (usually the machine owner) must sign the key using the regular PGP " +"key signing process. See the Monkeysphere SSH documentation for more details." +msgstr "" + +#: plinth/modules/monkeysphere/templates/monkeysphere.html:53 +msgid "Publishing key to keyserver..." +msgstr "" + +#: plinth/modules/monkeysphere/templates/monkeysphere.html:71 +msgid "GPG Fingerprint" +msgstr "" + +#: plinth/modules/monkeysphere/templates/monkeysphere.html:83 +#: plinth/modules/names/views.py:45 +msgid "Not Available" +msgstr "Niet Beschikbaar" + +#: plinth/modules/monkeysphere/templates/monkeysphere.html:93 +msgid "Generate PGP Key" +msgstr "" + +#: plinth/modules/monkeysphere/templates/monkeysphere.html:101 +msgid "Publish Key" +msgstr "" + +#: plinth/modules/monkeysphere/views.py:58 +msgid "Generated PGP key." +msgstr "" + +#: plinth/modules/monkeysphere/views.py:83 +msgid "Cancelled key publishing." +msgstr "" + +#: plinth/modules/monkeysphere/views.py:120 +msgid "Published key to keyserver." +msgstr "" + +#: plinth/modules/monkeysphere/views.py:122 +msgid "Error occurred while publishing key." +msgstr "" + #: plinth/modules/mumble/__init__.py:38 #: plinth/modules/mumble/templates/mumble.html:26 #: plinth/modules/mumble/views.py:58 @@ -1153,61 +1455,48 @@ msgid "Mumble server is not running" msgstr "Mumble server draait niet" -#: plinth/modules/names/__init__.py:30 +#: plinth/modules/names/__init__.py:29 msgid "HTTP" msgstr "HTTP" -#: plinth/modules/names/__init__.py:31 +#: plinth/modules/names/__init__.py:30 msgid "HTTPS" msgstr "HTTPS" -#: plinth/modules/names/__init__.py:32 +#: plinth/modules/names/__init__.py:31 msgid "SSH" msgstr "SSH" -#: plinth/modules/names/__init__.py:46 plinth/modules/names/views.py:34 +#: plinth/modules/names/__init__.py:45 plinth/modules/names/views.py:34 msgid "Name Services" msgstr "Domeinnamen" -#: plinth/modules/names/__init__.py:107 -msgid "Not Available" -msgstr "Niet Beschikbaar" - #: plinth/modules/networks/__init__.py:108 #, python-brace-format msgid "Using DNSSEC on IPv{kind}" msgstr "Gebruikt DNSSEC op IPv{kind}" #: plinth/modules/networks/forms.py:30 -msgid "-- select --" -msgstr "-- selecteer --" - -#: plinth/modules/networks/forms.py:42 msgid "Connection Type" msgstr "Verbindingssoort" -#: plinth/modules/networks/forms.py:49 plinth/modules/networks/forms.py:106 -#: plinth/modules/networks/forms.py:133 +#: plinth/modules/networks/forms.py:37 msgid "Connection Name" msgstr "Verbindingsnaam" -#: plinth/modules/networks/forms.py:51 plinth/modules/networks/forms.py:108 -#: plinth/modules/networks/forms.py:135 +#: plinth/modules/networks/forms.py:39 msgid "Physical Interface" msgstr "Fysieke Interface" -#: plinth/modules/networks/forms.py:53 plinth/modules/networks/forms.py:110 -#: plinth/modules/networks/forms.py:137 +#: plinth/modules/networks/forms.py:41 msgid "The network device that this connection should be bound to." msgstr "De netwerkapparatuur waar deze verbinding mee moet worden verbonden." -#: plinth/modules/networks/forms.py:56 plinth/modules/networks/forms.py:113 -#: plinth/modules/networks/forms.py:140 +#: plinth/modules/networks/forms.py:44 msgid "Firewall Zone" msgstr "Firewall Zone" -#: plinth/modules/networks/forms.py:57 plinth/modules/networks/forms.py:114 -#: plinth/modules/networks/forms.py:141 +#: plinth/modules/networks/forms.py:45 msgid "" "The firewall zone will control which services are available over this " "interfaces. Select Internal only for trusted networks." @@ -1215,11 +1504,11 @@ "De firewall zone controleert welke machines beschikbaar zijn via deze " "verbinding. Selecteer \"Allen Intern\" voor vertrouwde netwerken." -#: plinth/modules/networks/forms.py:61 plinth/modules/networks/forms.py:162 +#: plinth/modules/networks/forms.py:49 msgid "IPv4 Addressing Method" msgstr "IPv4 Adresseringsmethode" -#: plinth/modules/networks/forms.py:62 +#: plinth/modules/networks/forms.py:50 msgid "" "\"Shared\" method will start a DHCP server and \"Automatic\" method will " "acquire configuration from a DHCP server." @@ -1227,15 +1516,15 @@ "De 'Shared' methode zal een DHCP-server inschakelen en bij de \"Automatic\" " "methode komt de configuratie van een DHCP-server." -#: plinth/modules/networks/forms.py:68 plinth/modules/networks/forms.py:170 +#: plinth/modules/networks/forms.py:56 msgid "Address" msgstr "Adres" -#: plinth/modules/networks/forms.py:72 plinth/modules/networks/forms.py:174 +#: plinth/modules/networks/forms.py:60 msgid "Netmask" msgstr "Netmask" -#: plinth/modules/networks/forms.py:73 plinth/modules/networks/forms.py:175 +#: plinth/modules/networks/forms.py:61 msgid "" "Optional value. If left blank, a default netmask based on the address will " "be used." @@ -1243,21 +1532,21 @@ "Optionele waarde. Indien leeg, zal een standaard netmask op basis van het " "adres worden gebruikt." -#: plinth/modules/networks/forms.py:78 plinth/modules/networks/forms.py:180 +#: plinth/modules/networks/forms.py:66 #: plinth/modules/networks/templates/connection_show.html:202 #: plinth/modules/networks/templates/connection_show.html:241 msgid "Gateway" msgstr "Gateway" -#: plinth/modules/networks/forms.py:79 plinth/modules/networks/forms.py:181 +#: plinth/modules/networks/forms.py:67 msgid "Optional value." msgstr "Optionele waarde." -#: plinth/modules/networks/forms.py:83 plinth/modules/networks/forms.py:185 +#: plinth/modules/networks/forms.py:71 msgid "DNS Server" msgstr "DNS Server" -#: plinth/modules/networks/forms.py:84 plinth/modules/networks/forms.py:186 +#: plinth/modules/networks/forms.py:72 msgid "" "Optional value. If this value is given and IPv4 addressing method is " "\"Automatic\", the DNS Servers provided by a DHCP server will be ignored." @@ -1266,11 +1555,11 @@ "adresseringsmethode is \"Automatisch\", zullen de DNS-Servers van de DHCP-" "server worden genegeerd." -#: plinth/modules/networks/forms.py:90 plinth/modules/networks/forms.py:192 +#: plinth/modules/networks/forms.py:78 msgid "Second DNS Server" msgstr "Tweede DNS Server" -#: plinth/modules/networks/forms.py:91 plinth/modules/networks/forms.py:193 +#: plinth/modules/networks/forms.py:79 msgid "" "Optional value. If this value is given and IPv4 Addressing Method is " "\"Automatic\", the DNS Servers provided by a DHCP server will be ignored." @@ -1279,29 +1568,29 @@ "methode is \"Automatisch\", zullen de DNS-Servers van de DHCP-server worden " "genegeerd." -#: plinth/modules/networks/forms.py:121 -msgid "Show password" -msgstr "Toon wachtwoord" +#: plinth/modules/networks/forms.py:89 +msgid "-- select --" +msgstr "-- selecteer --" -#: plinth/modules/networks/forms.py:145 +#: plinth/modules/networks/forms.py:175 #: plinth/modules/networks/templates/connection_show.html:144 msgid "SSID" msgstr "SSID" -#: plinth/modules/networks/forms.py:146 +#: plinth/modules/networks/forms.py:176 msgid "The visible name of the network." msgstr "De zichtbare netwerknaam." -#: plinth/modules/networks/forms.py:148 +#: plinth/modules/networks/forms.py:178 #: plinth/modules/networks/templates/connection_show.html:157 msgid "Mode" msgstr "Modus" -#: plinth/modules/networks/forms.py:153 +#: plinth/modules/networks/forms.py:183 msgid "Authentication Mode" msgstr "Authentificatiemodus" -#: plinth/modules/networks/forms.py:154 +#: plinth/modules/networks/forms.py:184 msgid "" "Select WPA if the wireless network is secured and requires clients to have " "the password to connect." @@ -1309,31 +1598,22 @@ "Selecteer WPA indien het netwerk beveiligd is en gebruikerswachtwoorden " "gebruikt om te verbinden." -#: plinth/modules/networks/forms.py:158 +#: plinth/modules/networks/forms.py:188 msgid "Passphrase" msgstr "Wachtwoordzin" -#: plinth/modules/networks/forms.py:166 -msgid "" -"Select Automatic (DHCP) if you are connecting to an existing wireless " -"network. Shared mode is useful when running an Access Point." -msgstr "" -"Selecteer Automatisch (DHCP) als een verbinding met een bestaand draadloos " -"netwerk wordt gemaakt. Shared Mode is handig als hiermee een Acces Point " -"wordt gemaakt." - #: plinth/modules/networks/networks.py:36 #: plinth/modules/networks/networks.py:56 msgid "Network Connections" msgstr "Netwerkverbindingen" #: plinth/modules/networks/networks.py:38 -#: plinth/modules/networks/networks.py:273 +#: plinth/modules/networks/networks.py:242 msgid "Nearby Wi-Fi Networks" msgstr "Wi-Fi Netwerken dichtbij" #: plinth/modules/networks/networks.py:40 -#: plinth/modules/networks/networks.py:295 +#: plinth/modules/networks/networks.py:264 msgid "Add Connection" msgstr "Verbinding toevoegen" @@ -1357,58 +1637,58 @@ msgid "This type of connection is not yet understood." msgstr "Deze verbindingsmethode is (nog) niet bekend." -#: plinth/modules/networks/networks.py:170 -#: plinth/modules/networks/networks.py:229 +#: plinth/modules/networks/networks.py:139 +#: plinth/modules/networks/networks.py:198 #: plinth/modules/networks/templates/connections_edit.html:34 msgid "Edit Connection" msgstr "Wijzig verbinding" -#: plinth/modules/networks/networks.py:240 +#: plinth/modules/networks/networks.py:209 #, python-brace-format msgid "Activated connection {name}." msgstr "Geactiveerde verbinding {name}." -#: plinth/modules/networks/networks.py:243 +#: plinth/modules/networks/networks.py:212 msgid "Failed to activate connection: Connection not found." msgstr "Kan verbinding niet inschakelen: Verbinding niet gevonden." -#: plinth/modules/networks/networks.py:247 +#: plinth/modules/networks/networks.py:216 #, python-brace-format msgid "Failed to activate connection {name}: No suitable device is available." msgstr "Kan verbinding {name} niet inschakelen: Verbinding niet gevonden." -#: plinth/modules/networks/networks.py:260 +#: plinth/modules/networks/networks.py:229 #, python-brace-format msgid "Deactivated connection {name}." msgstr "Verbinding {name} uitgeschakeld." -#: plinth/modules/networks/networks.py:263 +#: plinth/modules/networks/networks.py:232 msgid "Failed to de-activate connection: Connection not found." msgstr "Kan verbinding niet uitschakelen: Verbinding niet gevonden." -#: plinth/modules/networks/networks.py:325 +#: plinth/modules/networks/networks.py:282 msgid "Adding New Ethernet Connection" msgstr "Toevoegen nieuwe Ethernetverbinding" -#: plinth/modules/networks/networks.py:350 +#: plinth/modules/networks/networks.py:300 msgid "Adding New PPPoE Connection" msgstr "Toevoegen nieuwe PPPoE verbinding" -#: plinth/modules/networks/networks.py:399 +#: plinth/modules/networks/networks.py:332 msgid "Adding New Wi-Fi Connection" msgstr "Toevoegen nieuwe W-Fi verbinding" -#: plinth/modules/networks/networks.py:413 +#: plinth/modules/networks/networks.py:346 #, python-brace-format msgid "Connection {name} deleted." msgstr "Verbinding {name} verwijderd." -#: plinth/modules/networks/networks.py:416 -#: plinth/modules/networks/networks.py:425 +#: plinth/modules/networks/networks.py:349 +#: plinth/modules/networks/networks.py:358 msgid "Failed to delete connection: Connection not found." msgstr "Kan verbinding niet verwijderen: Verbinding niet gevonden." -#: plinth/modules/networks/networks.py:430 +#: plinth/modules/networks/networks.py:363 #: plinth/modules/networks/templates/connections_delete.html:26 msgid "Delete Connection" msgstr "Verwijder verbinding" @@ -1418,7 +1698,7 @@ msgstr "Wijzig verbinding" #: plinth/modules/networks/templates/connection_show.html:43 -#: plinth/templates/base.html:119 +#: plinth/templates/base.html:123 msgid "Edit" msgstr "Wijzig" @@ -1564,10 +1844,16 @@ msgstr "Firewall zone" #: plinth/modules/networks/templates/connection_show.html:280 -msgid "" -"This interface should be connected to local network/machine. If you connect " -"this interface to a public network, services meant to be available only " -"internally will become available externally. This is a security risk." +#, fuzzy +#| msgid "" +#| "This interface should be connected to local network/machine. If you " +#| "connect this interface to a public network, services meant to be " +#| "available only internally will become available externally. This is a " +#| "security risk." +msgid "" +"This interface should be connected to a local network/machine. If you " +"connect this interface to a public network, services meant to be available " +"only internally will become available externally. This is a security risk." msgstr "" "Deze verbinding zou met een lokaal netwerk/machine verbonden moeten zijn. " "Als deze verbonden wordt met een publiek netwerk, worden diensten die " @@ -1575,20 +1861,31 @@ "een veiligheidsrisico." #: plinth/modules/networks/templates/connection_show.html:300 -msgid "" -"This interface should receive your Internet connection. If you connect it " -"your a local network/machine, many services meant to available only " -"internally will not be available." +#, fuzzy +#| msgid "" +#| "This interface should receive your Internet connection. If you connect it " +#| "your a local network/machine, many services meant to available only " +#| "internally will not be available." +msgid "" +"This interface should receive your Internet connection. If you connect it to " +"a local network/machine, many services meant to available only internally " +"will not be available." msgstr "" "Deze verbinding hoort de internetverbinding te ontvangen. Als het verbonden " "wordt met een lokaal netwerk/machine, zijn veel diensten die alleen lokaal " "beschikbaar zijn niet bereikbaar." #: plinth/modules/networks/templates/connection_show.html:319 -msgid "" -"This interface is not maintained by FreedomBox. Its security status is " -"unknown to FreedomBox. Many FreedomBox services may not be available on " -"this interface. It is recommended that you deactivate/delete this " +#, fuzzy, python-format +#| msgid "" +#| "This interface is not maintained by FreedomBox. Its security status is " +#| "unknown to FreedomBox. Many FreedomBox services may not be available on " +#| "this interface. It is recommended that you deactivate/delete this " +#| "connection and re-configure it." +msgid "" +"This interface is not maintained by %(box_name)s. Its security status is " +"unknown to %(box_name)s. Many %(box_name)s services may not be available on " +"this interface. It is recommended that you deactivate or delete this " "connection and re-configure it." msgstr "" "Deze verbinding wordt niet door FreedomBox beheerd. De veiligheid ervan is " @@ -1681,10 +1978,17 @@ msgstr "OpenVPN server Inschakelen" #: plinth/modules/openvpn/templates/openvpn.html:38 -#, python-format +#, fuzzy, python-format +#| msgid "" +#| "Virtual Private Network (VPN) is a technique for securely connecting two " +#| "machines in order to access resources of a private network. While you " +#| "are away from home, you can connect to your %(box_name)s in order to join " +#| "your home network and access private/internal services provided by " +#| "%(box_name)s. You can also access the rest of the Internet via " +#| "%(box_name)s for added security and anonymity." msgid "" "Virtual Private Network (VPN) is a technique for securely connecting two " -"machines in order to access resources of a private network. While you are " +"devices in order to access resources of a private network. While you are " "away from home, you can connect to your %(box_name)s in order to join your " "home network and access private/internal services provided by %(box_name)s. " "You can also access the rest of the Internet via %(box_name)s for added " @@ -1703,12 +2007,19 @@ msgstr "Profiel" #: plinth/modules/openvpn/templates/openvpn.html:54 -#, python-format +#, fuzzy, python-format +#| msgid "" +#| "To connect to %(box_name)s's VPN, you need to download a profile and feed " +#| "it to an OpenVPN client on your mobile or desktop machine. OpenVPN " +#| "Clients are available for most platforms. See documentation on recommended clients and instructions on how to " +#| "configure them." msgid "" "To connect to %(box_name)s's VPN, you need to download a profile and feed it " "to an OpenVPN client on your mobile or desktop machine. OpenVPN Clients are " "available for most platforms. See documentation on recommended clients and instructions on how to " "configure them." msgstr "" @@ -2264,6 +2575,64 @@ msgid "Quassel core service is not running" msgstr "Quassel-core server draait niet" +#: plinth/modules/repro/__init__.py:36 +#: plinth/modules/repro/templates/repro.html:26 +#: plinth/modules/repro/views.py:55 +#, fuzzy +#| msgid "Server port" +msgid "SIP Server (repro)" +msgstr "Serverpoort" + +#: plinth/modules/repro/__init__.py:41 +#, fuzzy +#| msgid "Second DNS Server" +msgid "repro SIP Server" +msgstr "Tweede DNS Server" + +#: plinth/modules/repro/forms.py:29 +#, fuzzy +#| msgid "Enable Quassel core service" +msgid "Enable repro service" +msgstr "Quassel-core service inschakelen" + +#: plinth/modules/repro/templates/repro.html:29 +msgid "" +"repro provides various SIP services that a SIP softphone can utilize to " +"provide audio and video calls as well as presence and instant messaging. " +"repro provides a server and SIP user accounts that clients can use to let " +"their presence known. It also acts as a proxy to federate SIP " +"communications to other servers on the Internet similar to email." +msgstr "" + +#: plinth/modules/repro/templates/repro.html:39 +msgid "" +"To make SIP calls, a client application is needed. Available clients include " +"Jitsi (for computers) and CSipSimple (for Android phones)." +msgstr "" + +#: plinth/modules/repro/templates/repro.html:48 +msgid "" +"Note: Before using repro, domains and users will need to " +"be configured using the web-based " +"configuration panel. Users in the admin group will be able to " +"log in to the repro configuration panel. After setting the domain, it is " +"required to restart the repro service. Disable the service and re-enable it." +msgstr "" + +#: plinth/modules/repro/templates/repro.html:63 +#, fuzzy +#| msgid "Quassel core service is running" +msgid "repro service is running" +msgstr "Quassel-core server draait" + +#: plinth/modules/repro/templates/repro.html:66 +#, fuzzy +#| msgid "Quassel core service is not running" +msgid "repro service is not running" +msgstr "Quassel-core server draait niet" + #: plinth/modules/restore/__init__.py:36 #: plinth/modules/restore/templates/restore_index.html:26 #: plinth/modules/restore/views.py:46 @@ -2279,13 +2648,19 @@ msgstr "reStore Inschakelen" #: plinth/modules/restore/templates/restore_index.html:29 -#, python-format +#, fuzzy, python-format +#| msgid "" +#| "reStore is a server for unhosted web " +#| "applications. The idea is to uncouple web applications from data. No " +#| "matter where a web application is served from, the data can be stored on " +#| "an unhosted storage server of user's choice. With reStore, your " +#| "%(cfg.box_name)s becomes your unhosted storage server." msgid "" "reStore is a server for unhosted web " "applications. The idea is to uncouple web applications from data. No " "matter where a web application is served from, the data can be stored on an " -"unhosted storage server of user's choice. With reStore, your " -"%(cfg.box_name)s becomes your unhosted storage server." +"unhosted storage server of user's choice. With reStore, your %(box_name)s " +"becomes your unhosted storage server." msgstr "" "reStore is een server voor unhosted web " "applicaties. Het idee is om webapplicaties en data te scheiden. Het maakt " @@ -2387,7 +2762,7 @@ #: plinth/modules/system/system.py:33 #: plinth/modules/system/templates/system.html:25 -#: plinth/templates/base.html:105 +#: plinth/templates/base.html:109 msgid "System Configuration" msgstr "Systeeminstelling" @@ -2404,33 +2779,81 @@ "Deze mogelijkheden veranderen de basis van %(box_name)s, dus wees " "gewaarschuwd!" -#: plinth/modules/tor/__init__.py:50 +#: plinth/modules/tor/__init__.py:48 plinth/modules/tor/templates/tor.html:35 +msgid "Anonymity Network (Tor)" +msgstr "Anonimiteitsnetwerk (Tor)" + +#: plinth/modules/tor/__init__.py:53 +#, fuzzy +#| msgid "Anonymity Network (Tor)" +msgid "Tor Anonymity Network" +msgstr "Anonimiteitsnetwerk (Tor)" + +#: plinth/modules/tor/__init__.py:58 +msgid "Tor Bridge Relay" +msgstr "" + +#: plinth/modules/tor/__init__.py:76 plinth/modules/tor/views.py:144 +msgid "Tor Hidden Service" +msgstr "Tor-Hidden Service" + +#: plinth/modules/tor/__init__.py:222 msgid "Tor relay port available" msgstr "Tor relay poort beschikbaar" -#: plinth/modules/tor/__init__.py:58 +#: plinth/modules/tor/__init__.py:230 msgid "Obfs3 transport registered" msgstr "Obfs3 transport geregistreerd" -#: plinth/modules/tor/__init__.py:64 +#: plinth/modules/tor/__init__.py:236 msgid "Obfs4 transport registered" msgstr "Obfs4 transport geregistreerd" -#: plinth/modules/tor/__init__.py:101 +#: plinth/modules/tor/__init__.py:273 #, python-brace-format msgid "Access URL {url} on tcp{kind} via Tor" msgstr "Gebruik URL {url} op tcp{kind} via Tor" -#: plinth/modules/tor/__init__.py:112 +#: plinth/modules/tor/__init__.py:284 #, python-brace-format msgid "Confirm Tor usage at {url} on tcp{kind}" msgstr "Bevestig Tor gebruik met {url} via tcp{kind}" -#: plinth/modules/tor/templates/tor.html:26 plinth/modules/tor/tor.py:66 -msgid "Anonymity Network (Tor)" -msgstr "Anonimiteitsnetwerk (Tor)" +#: plinth/modules/tor/forms.py:32 +msgid "Enable Tor" +msgstr "Tor Inschakelen" + +#: plinth/modules/tor/forms.py:35 +msgid "Enable Tor Hidden Service" +msgstr "Tor Hidden Service Inschakelen" -#: plinth/modules/tor/templates/tor.html:29 +#: plinth/modules/tor/forms.py:38 +#, fuzzy, python-brace-format +#| msgid "" +#| "A hidden service will allow FreedomBox to provide selected services (such " +#| "as ownCloud or Chat) without revealing its location." +msgid "" +"A hidden service will allow {box_name} to provide selected services (such as " +"ownCloud or chat) without revealing its location." +msgstr "" +"Een \"hidden service\" zorgt ervoor dat Freedombox geselecteerde diensten " +"(zoals ownCloud of Chat) kan aanbieden zonder de locatie te onthullen." + +#: plinth/modules/tor/forms.py:42 +msgid "Download software packages over Tor" +msgstr "Download Softwarepakketen via Tor" + +#: plinth/modules/tor/forms.py:44 +msgid "" +"When enabled, software will be downloaded over the Tor network for " +"installations and upgrades. This adds a degree of privacy and security " +"during software downloads." +msgstr "" +"Indien ingeschakeld, wordt software door middel van het Tor netwerk " +"binnengehaald. Dit voegt een mate van privacy en veiligheid tijdens software " +"downloads toe." + +#: plinth/modules/tor/templates/tor.html:38 msgid "" "Tor is an anonymous communication system. You can learn more about it from " "the Tor Project website. For " @@ -2444,28 +2867,34 @@ "de " "Tor Browser aan." -#: plinth/modules/tor/templates/tor.html:44 +#: plinth/modules/tor/templates/tor.html:54 +#, fuzzy +#| msgid "Configuration updated" +msgid "Tor configuration is being updated" +msgstr "Configuratie bijgewerkt" + +#: plinth/modules/tor/templates/tor.html:62 msgid "Tor is running" msgstr "Tor draait" -#: plinth/modules/tor/templates/tor.html:47 +#: plinth/modules/tor/templates/tor.html:65 msgid "Tor is not running" msgstr "Tor draait niet" -#: plinth/modules/tor/templates/tor.html:59 +#: plinth/modules/tor/templates/tor.html:77 msgid "Hidden Service" msgstr "Hidden Service" -#: plinth/modules/tor/templates/tor.html:60 -#: plinth/modules/tor/templates/tor.html:102 +#: plinth/modules/tor/templates/tor.html:78 +#: plinth/modules/tor/templates/tor.html:120 msgid "Port" msgstr "Poort" -#: plinth/modules/tor/templates/tor.html:85 +#: plinth/modules/tor/templates/tor.html:103 msgid "Bridge" msgstr "Bridge" -#: plinth/modules/tor/templates/tor.html:88 +#: plinth/modules/tor/templates/tor.html:106 #, python-format msgid "" "Your %(box_name)s is configured as a Tor bridge with obfsproxy, so it can " @@ -2478,89 +2907,41 @@ "router of firewall bevindt, is het belangrijk te zorgen dat de volgende " "poorten open staan en indien nodig worden doorgeleid:" -#: plinth/modules/tor/templates/tor.html:101 +#: plinth/modules/tor/templates/tor.html:119 msgid "Service" msgstr "Dienst" -#: plinth/modules/tor/templates/tor.html:117 +#: plinth/modules/tor/templates/tor.html:135 msgid "SOCKS" msgstr "SOCKS" -#: plinth/modules/tor/templates/tor.html:120 +#: plinth/modules/tor/templates/tor.html:138 #, python-format msgid "A Tor SOCKS port is available on your %(box_name)s on TCP port 9050." msgstr "Een Tor SOCKS poort is beschikbaar op %(box_name)s, op TCP poort 9050." -#: plinth/modules/tor/tor.py:46 -msgid "Enable Tor" -msgstr "Tor Inschakelen" - -#: plinth/modules/tor/tor.py:49 -msgid "Enable Tor Hidden Service" -msgstr "Tor Hidden Service Inschakelen" - -#: plinth/modules/tor/tor.py:51 -msgid "" -"A hidden service will allow FreedomBox to provide selected services (such as " -"ownCloud or Chat) without revealing its location." -msgstr "" -"Een \"hidden service\" zorgt ervoor dat Freedombox geselecteerde diensten " -"(zoals ownCloud of Chat) kan aanbieden zonder de locatie te onthullen." - -#: plinth/modules/tor/tor.py:55 -msgid "Download software packages over Tor" -msgstr "Download Softwarepakketen via Tor" - -#: plinth/modules/tor/tor.py:57 -msgid "" -"When enabled, software will be downloaded over the Tor network for " -"installations and upgrades. This adds a degree of privacy and security " -"during software downloads." -msgstr "" -"Indien ingeschakeld, wordt software door middel van het Tor netwerk " -"binnengehaald. Dit voegt een mate van privacy en veiligheid tijdens software " -"downloads toe." - -#: plinth/modules/tor/tor.py:85 plinth/modules/tor/tor.py:285 -msgid "Tor Hidden Service" -msgstr "Tor-Hidden Service" - -#: plinth/modules/tor/tor.py:115 +#: plinth/modules/tor/views.py:68 msgid "Tor Control Panel" msgstr "Tor Controlepaneel" -#: plinth/modules/tor/tor.py:240 +#: plinth/modules/tor/views.py:79 #, python-brace-format msgid "Action error: {0} [{1}] [{2}]" msgstr "Actiefout: {0} [{1}] [{2}]" -#: plinth/modules/tor/tor.py:256 -msgid "Tor enabled" -msgstr "Tor ingeschakeld" - -#: plinth/modules/tor/tor.py:259 -msgid "Tor disabled" -msgstr "Tor uitgeschakeld" - -#: plinth/modules/tor/tor.py:264 -msgid "Tor hidden service enabled" -msgstr "Tor hidden service ingeschakeld" - -#: plinth/modules/tor/tor.py:267 -msgid "Tor hidden service disabled" -msgstr "Tor hidden service uitgeschakeld" - -#: plinth/modules/tor/tor.py:292 -msgid "Enabled package download over Tor" -msgstr "Pakket download via Tor Inschakelen" - -#: plinth/modules/tor/tor.py:295 -msgid "Disabled package download over Tor" -msgstr "Pakket download via Tor Uitschakelen" +#: plinth/modules/tor/views.py:148 +#, fuzzy +#| msgid "Configuration updated" +msgid "Configuration updated." +msgstr "Configuratie bijgewerkt" + +#: plinth/modules/tor/views.py:150 +msgid "An error occurred during configuration." +msgstr "" #: plinth/modules/transmission/__init__.py:38 #: plinth/modules/transmission/templates/transmission.html:26 -#: plinth/modules/transmission/views.py:63 +#: plinth/modules/transmission/views.py:67 msgid "BitTorrent (Transmission)" msgstr "BitTorrent (Transmission)" @@ -2577,10 +2958,6 @@ msgstr "Opslagmap" #: plinth/modules/transmission/forms.py:34 -#| msgid "" -#| "Directory where downloads are saved. If you change the default " -#| "directory, ensure that the new directory exists and is writable by " -#| "\"debian-tramission\" user." msgid "" "Directory where downloads are saved. If you change the default directory, " "ensure that the new directory exists and is writable by \"debian-transmission" @@ -2642,73 +3019,72 @@ "Indien ingeschakeld, wordt het automatische updateprogramma eens per dag " "gedraaid. Het zal proberen alle beschikbare updates bij te werken." -#: plinth/modules/upgrades/templates/upgrades.html:40 -msgid "There was an error while upgrading." -msgstr "Er was een fout tijdens het bijwerken." - -#: plinth/modules/upgrades/templates/upgrades.html:43 -#: plinth/modules/upgrades/templates/upgrades.html:59 -msgid "Output from unattended-upgrades:" -msgstr "Uitvoer van automatische upgrades:" - -#: plinth/modules/upgrades/templates/upgrades.html:50 -msgid "The operating system is up to date now.  " -msgstr "Het besturingssysteem is nu bijgewerkt.  " - -#: plinth/modules/upgrades/templates/upgrades.html:53 -msgid "Show Details" -msgstr "Toon Details" +#: plinth/modules/upgrades/templates/upgrades.html:37 +msgid "" +"Upgrades install the latest software and security updates. When automatic " +"upgrades are enabled, upgrades are automatically run every night. You don't " +"normally need to start the upgrade process." +msgstr "" -#: plinth/modules/upgrades/templates/upgrades.html:69 +#: plinth/modules/upgrades/templates/upgrades.html:45 msgid "" -"This will run unattended-upgrades, which will attempt to upgrade your system " -"with the latest Debian packages. It may take a few minutes to complete." +"Depending on the number of packages to install, this may take a long time to " +"complete. While upgrades are in progress, you will not be able to install " +"other packages. During the upgrade, this web interface may be temporarily " +"unavailable and show an error. Refresh the page to continue." msgstr "" -"Dit zal het automatische updateprogramma draaien. Het zal proberen het " -"systeem bij te werken met de nieuwste Debian pakketten. Dit kan enige " -"minuten duren." -#: plinth/modules/upgrades/templates/upgrades.html:80 +#: plinth/modules/upgrades/templates/upgrades.html:58 msgid "Upgrade now »" msgstr "Nu bijwerken »" -#: plinth/modules/upgrades/templates/upgrades.html:87 -msgid "System is being upgraded." -msgstr "Het systeem wordt bijgewerkt." +#: plinth/modules/upgrades/templates/upgrades.html:65 +#, fuzzy +#| msgid "ejabberd is running" +msgid "A package manager is running." +msgstr "ejabberd draait" + +#: plinth/modules/upgrades/templates/upgrades.html:70 +msgid "Recent log from upgrades:" +msgstr "" -#: plinth/modules/upgrades/views.py:35 plinth/modules/upgrades/views.py:64 +#: plinth/modules/upgrades/views.py:36 plinth/modules/upgrades/views.py:66 msgid "Automatic Upgrades" msgstr "Automatisch bijwerken" -#: plinth/modules/upgrades/views.py:37 +#: plinth/modules/upgrades/views.py:38 msgid "Upgrade Packages" msgstr "Pakketten Bijwerken" -#: plinth/modules/upgrades/views.py:75 +#: plinth/modules/upgrades/views.py:96 +#, fuzzy +#| msgid "Upgrade completed." +msgid "Upgrade process started." +msgstr "Bijwerken voltooid." + +#: plinth/modules/upgrades/views.py:99 +#, fuzzy +#| msgid "Upgrade failed." +msgid "Starting upgrade failed." +msgstr "Bijwerken mislukt." + +#: plinth/modules/upgrades/views.py:102 msgid "Package Upgrades" msgstr "Bijwerkbare Pakketten" -#: plinth/modules/upgrades/views.py:116 +#: plinth/modules/upgrades/views.py:131 #, python-brace-format msgid "Error when configuring unattended-upgrades: {error}" msgstr "Fout bij het instellen van automatische upgrades: {error}" -#: plinth/modules/upgrades/views.py:121 +#: plinth/modules/upgrades/views.py:136 msgid "Automatic upgrades enabled" msgstr "Automatisch bijwerken ingeschakeld" -#: plinth/modules/upgrades/views.py:123 +#: plinth/modules/upgrades/views.py:138 msgid "Automatic upgrades disabled" msgstr "Automatisch bijwerken uitgeschakeld" -#: plinth/modules/upgrades/views.py:142 -msgid "Upgrade completed." -msgstr "Bijwerken voltooid." - -#: plinth/modules/upgrades/views.py:144 -msgid "Upgrade failed." -msgstr "Bijwerken mislukt." - #: plinth/modules/users/__init__.py:36 msgid "Users and Groups" msgstr "Gebruikers en Groepen" @@ -2750,19 +3126,30 @@ msgid "Failed to add new user to {group} group." msgstr "Nieuwe gebruiker aan groep {group} toevoegen mislukt." -#: plinth/modules/users/forms.py:126 +#: plinth/modules/users/forms.py:92 +msgid "SSH Keys" +msgstr "" + +#: plinth/modules/users/forms.py:96 +msgid "" +"Setting an SSH public key will allow this user to securely log in to the " +"system without using a password. You may enter multiple keys, one on each " +"line. Blank lines and lines starting with # will be ignored." +msgstr "" + +#: plinth/modules/users/forms.py:136 msgid "Renaming LDAP user failed." msgstr "LDAP gebruiker hernoemen mislukt." -#: plinth/modules/users/forms.py:138 +#: plinth/modules/users/forms.py:148 msgid "Failed to remove user from group." msgstr "Gebruiker uit groep verwijderen mislukt." -#: plinth/modules/users/forms.py:149 +#: plinth/modules/users/forms.py:159 msgid "Failed to add user to group." msgstr "Gebruiker aan groep toevoegen mislukt." -#: plinth/modules/users/forms.py:174 +#: plinth/modules/users/forms.py:188 msgid "Changing LDAP user password failed." msgstr "Wijzigen LDAP gebruikerswachtwoord mislukt." @@ -2781,7 +3168,7 @@ msgstr "Maak gebruiker" #: plinth/modules/users/templates/users_delete.html:26 -#: plinth/modules/users/views.py:103 +#: plinth/modules/users/views.py:110 msgid "Delete User" msgstr "Gebruiker verwijderen" @@ -2836,20 +3223,20 @@ msgid "Edit User" msgstr "Gebruiker wijzigen" -#: plinth/modules/users/views.py:113 +#: plinth/modules/users/views.py:120 #, python-brace-format msgid "User {user} deleted." msgstr "Gebruiker {user} verwijderd." -#: plinth/modules/users/views.py:120 +#: plinth/modules/users/views.py:127 msgid "Deleting LDAP user failed." msgstr "Verwijderen van LDAP gebruiker mislukt." -#: plinth/modules/users/views.py:129 +#: plinth/modules/users/views.py:136 msgid "Change Password" msgstr "Wijzig wachtwoord" -#: plinth/modules/users/views.py:130 +#: plinth/modules/users/views.py:137 msgid "Password changed successfully." msgstr "Wachtwoord succesvol gewijzigd." @@ -2932,8 +3319,10 @@ msgid "Secure Shell (SSH) Server" msgstr "Secure Shell (SSH) Server" -#: plinth/service.py:78 -msgid "FreedomBox Web Interface (Plinth)" +#: plinth/service.py:79 +#, fuzzy, python-brace-format +#| msgid "FreedomBox Web Interface (Plinth)" +msgid "{box_name} Web Interface (Plinth)" msgstr "FreedomBox Web Interface (Plinth)" #: plinth/templates/404.html:25 @@ -2971,27 +3360,25 @@ "a> zodat we deze kunnen verhelpen." #: plinth/templates/base.html:49 -msgid "Plinth administrative interface for the FreedomBox" +#, fuzzy, python-format +#| msgid "Plinth administrative interface for the FreedomBox" +msgid "Plinth administrative interface for the %(box_name)s" msgstr "Plinth Instellingspagina voor deze FreedomBox" -#: plinth/templates/base.html:52 plinth/templates/base.html.py:88 -msgid "FreedomBox" -msgstr "FreedomBox" - -#: plinth/templates/base.html:81 +#: plinth/templates/base.html:83 msgid "Toggle navigation" msgstr "Navigatie in/uitschakelen" -#: plinth/templates/base.html:121 plinth/templates/base.html.py:122 +#: plinth/templates/base.html:125 plinth/templates/base.html.py:126 msgid "Change password" msgstr "Wijzig wachtwoord" -#: plinth/templates/base.html:125 plinth/templates/base.html.py:126 -#: plinth/templates/base.html:139 plinth/templates/base.html.py:141 +#: plinth/templates/base.html:129 plinth/templates/base.html.py:130 +#: plinth/templates/base.html:143 plinth/templates/base.html.py:145 msgid "Log out" msgstr "Afmelden" -#: plinth/templates/base.html:131 plinth/templates/base.html.py:133 +#: plinth/templates/base.html:135 plinth/templates/base.html.py:137 msgid "Log in" msgstr "Aanmelden" @@ -3033,6 +3420,87 @@ msgid "%(percentage)s%% complete" msgstr "%(percentage)s%% voltooid" +#~ msgid "show password" +#~ msgstr "toon wachtwoord" + +#~ msgid "The following is the current status:" +#~ msgstr "De huidige status is als volgt:" + +#~ msgid "Congratulations! Your FreedomBox is up and running!" +#~ msgstr "Gefeliciteerd, De FreedomBox is gereed!" + +#~ msgid "" +#~ "Please provide the following basic information to complete the setup " +#~ "process." +#~ msgstr "" +#~ "Beantwoord de volgende vragen om het installatieproces te voltooien." + +#~ msgid "Next" +#~ msgstr "Volgende" + +#~ msgid "FreedomBox Manual" +#~ msgstr "FreedomBox Handleiding" + +#~ msgid "" +#~ "Many FreedomBox contributors and users are also available on the " +#~ "#freedombox channel of the irc.oftc.net IRC network." +#~ msgstr "" +#~ "Veel FreedomBox deelnemers en gebruikers zijn ook te vinden op het " +#~ "#freedombox kanaal op het irc.oftc.net IRC netwerk." + +#~ msgid "Create Wiki/Blog" +#~ msgstr "Nieuwe Wiki/Blog" + +#~ msgid "" +#~ "Select Automatic (DHCP) if you are connecting to an existing wireless " +#~ "network. Shared mode is useful when running an Access Point." +#~ msgstr "" +#~ "Selecteer Automatisch (DHCP) als een verbinding met een bestaand " +#~ "draadloos netwerk wordt gemaakt. Shared Mode is handig als hiermee een " +#~ "Acces Point wordt gemaakt." + +#~ msgid "Tor enabled" +#~ msgstr "Tor ingeschakeld" + +#~ msgid "Tor disabled" +#~ msgstr "Tor uitgeschakeld" + +#~ msgid "Tor hidden service enabled" +#~ msgstr "Tor hidden service ingeschakeld" + +#~ msgid "Tor hidden service disabled" +#~ msgstr "Tor hidden service uitgeschakeld" + +#~ msgid "Enabled package download over Tor" +#~ msgstr "Pakket download via Tor Inschakelen" + +#~ msgid "Disabled package download over Tor" +#~ msgstr "Pakket download via Tor Uitschakelen" + +#~ msgid "There was an error while upgrading." +#~ msgstr "Er was een fout tijdens het bijwerken." + +#~ msgid "Output from unattended-upgrades:" +#~ msgstr "Uitvoer van automatische upgrades:" + +#~ msgid "The operating system is up to date now.  " +#~ msgstr "Het besturingssysteem is nu bijgewerkt.  " + +#~ msgid "Show Details" +#~ msgstr "Toon Details" + +#~ msgid "" +#~ "This will run unattended-upgrades, which will attempt to upgrade your " +#~ "system with the latest Debian packages. It may take a few minutes to " +#~ "complete." +#~ msgstr "" +#~ "Dit zal het automatische updateprogramma draaien. Het zal proberen het " +#~ "systeem bij te werken met de nieuwste Debian pakketten. Dit kan enige " +#~ "minuten duren." + +#~ msgid "System is being upgraded." +#~ msgstr "Het systeem wordt bijgewerkt." + #~ msgid "" #~ "You can install and run various services and applications on your " #~ "%(box_name)s." diff -Nru plinth-0.7.2/plinth/locale/pt/LC_MESSAGES/django.po plinth-0.8.1/plinth/locale/pt/LC_MESSAGES/django.po --- plinth-0.7.2/plinth/locale/pt/LC_MESSAGES/django.po 2015-12-23 11:34:40.000000000 +0000 +++ plinth-0.8.1/plinth/locale/pt/LC_MESSAGES/django.po 2016-02-16 03:55:53.000000000 +0000 @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-12-20 13:58+0530\n" +"POT-Creation-Date: 2016-01-31 22:19+0530\n" "PO-Revision-Date: 2015-12-15 01:08+0000\n" "Last-Translator: Daniel Sousa \n" "Language-Team: Portuguese gnudip server. Afterwards " "the Server will assign your DNS name with the new IP and if someone from the " -"internet asks for your DNS name he will get your current IP answered." +"Internet asks for your DNS name he will get your current IP answered." msgstr "" #: plinth/modules/dynamicdns/templates/dynamicdns.html:50 @@ -592,10 +637,10 @@ msgstr "" #: plinth/modules/dynamicdns/templates/dynamicdns.html:61 +#, python-format msgid "" -"If your freedombox is connected behind some NAT router, don't forget to add " -"portforwarding (i.e. forward some standard ports like 80 and 443) to your " -"freedombox device." +"If your %(box_name)s is connected behind some NAT router, don't forget to " +"add port forwarding (i.e. forward some standard ports like 80 and 443)." msgstr "" #: plinth/modules/dynamicdns/templates/dynamicdns_configure.html:30 @@ -615,16 +660,16 @@ msgstr "" #: plinth/modules/dynamicdns/templates/dynamicdns_status.html:35 -msgid "Direct connection to the internet." +msgid "Direct connection to the Internet." msgstr "" #: plinth/modules/dynamicdns/templates/dynamicdns_status.html:37 #, python-format msgid "" -"Behind NAT, this means that dynamic DNS service will poll the \"IP check URL" -"\" for changes (we need the \"IP check URL\" for this reason - otherwise we " -"will not detect IP changes). It may take up to %(timer)s minutes until we " -"update your DNS entry in case of WAN IP change." +"Behind NAT. This means that Dynamic DNS service will poll the \"IP check URL" +"\" for changes (the \"IP check URL\" entry is needed for this - otherwise IP " +"changes will not be detected). In case the WAN IP changes, it may take up " +"to %(timer)s minutes until your DNS entry is updated." msgstr "" #: plinth/modules/dynamicdns/templates/dynamicdns_status.html:48 @@ -640,13 +685,13 @@ #: plinth/modules/firewall/templates/firewall.html:28 #, python-format msgid "" -"Firewall is a network security system that controls the incoming and " -"outgoing network traffic on your %(box_name)s. Keeping a firewall enabled " -"and properly configured reduces risk of security threat from the Internet." +"Firewall is a security system that controls the incoming and outgoing " +"network traffic on your %(box_name)s. Keeping a firewall enabled and " +"properly configured reduces risk of security threat from the Internet." msgstr "" #: plinth/modules/firewall/templates/firewall.html:36 -msgid "The following is the current status:" +msgid "Current status:" msgstr "" #: plinth/modules/firewall/templates/firewall.html:41 @@ -663,11 +708,13 @@ msgstr "" #: plinth/modules/firewall/templates/firewall.html:67 +#: plinth/modules/letsencrypt/templates/letsencrypt.html:91 #: plinth/modules/names/templates/names.html:51 msgid "Enabled" msgstr "" #: plinth/modules/firewall/templates/firewall.html:70 +#: plinth/modules/letsencrypt/templates/letsencrypt.html:93 #: plinth/modules/names/templates/names.html:53 msgid "Disabled" msgstr "" @@ -691,8 +738,8 @@ #: plinth/modules/firewall/templates/firewall.html:103 msgid "" "The operation of the firewall is automatic. When you enable a service it is " -"automatically permitted in the firewall and you disable a service is " -"automatically disabled in the firewall." +"also permitted in the firewall and when you disable a service it is also " +"disabled in the firewall." msgstr "" #: plinth/modules/first_boot/forms.py:48 plinth/modules/users/forms.py:70 @@ -707,31 +754,35 @@ msgid "User account created, you are now logged in" msgstr "" -#: plinth/modules/first_boot/templates/firstboot_state0.html:50 -msgid "Congratulations! Your FreedomBox is up and running!" +#: plinth/modules/first_boot/templates/firstboot_navbar.html:23 +#: plinth/modules/help/templates/help_index.html:25 +#: plinth/templates/base.html:102 +msgid "Help" msgstr "" -#: plinth/modules/first_boot/templates/firstboot_state0.html:54 -msgid "" -"Please provide the following basic information to complete the setup process." +#: plinth/modules/first_boot/templates/firstboot_state0.html:45 +msgid "Start Setup" msgstr "" -#: plinth/modules/first_boot/templates/firstboot_state0.html:62 -msgid "Next" +#: plinth/modules/first_boot/templates/firstboot_state0.html:49 +#, python-format +msgid "" +"To complete the setup of your %(box_name)s, please provide some basic " +"information." msgstr "" -#: plinth/modules/first_boot/templates/firstboot_state1.html:39 +#: plinth/modules/first_boot/templates/firstboot_state1.html:41 msgid "Administrator Account" msgstr "" -#: plinth/modules/first_boot/templates/firstboot_state1.html:42 +#: plinth/modules/first_boot/templates/firstboot_state1.html:44 msgid "" "Choose a username and password to access this web interface. The password " "can be changed later. This user will be granted administrative privileges. " "Other users can be added later." msgstr "" -#: plinth/modules/first_boot/templates/firstboot_state1.html:55 +#: plinth/modules/first_boot/templates/firstboot_state1.html:57 msgid "Box it up!" msgstr "" @@ -740,30 +791,33 @@ msgstr "" #: plinth/modules/first_boot/templates/firstboot_state10.html:32 +#, python-format msgid "" -"FreedomBox setup is now complete. However, you should check the network " -"setup and modify it if necessary. Do not forget to change the default Wi-Fi " -"passwords." +"%(box_name)s setup is now complete. To make your %(box_name)s functional, " +"you need some applications. They will be installed the first time you " +"access them." msgstr "" -#: plinth/modules/first_boot/templates/firstboot_state10.html:40 -msgid "" -"To make your FreedomBox functional, you need some applications. " -"Applications will be installed the first time you access them." +#: plinth/modules/first_boot/templates/firstboot_state10.html:41 +msgid "Go to Apps" msgstr "" +#: plinth/modules/first_boot/templates/firstboot_state10.html:44 +#, fuzzy +#| msgid "General Configuration" +msgid "Current Network Configuration" +msgstr "Configuração Geral" + #: plinth/modules/first_boot/templates/firstboot_state10.html:47 -msgid "Network Configuration" +msgid "" +"You should check the network setup and modify it if necessary. Do not forget " +"to change the default Wi-Fi passwords!" msgstr "" -#: plinth/modules/first_boot/templates/firstboot_state10.html:54 +#: plinth/modules/first_boot/templates/firstboot_state10.html:57 msgid "Go to Networks" msgstr "" -#: plinth/modules/first_boot/templates/firstboot_state10.html:59 -msgid "Go to Apps" -msgstr "" - #: plinth/modules/first_boot/views.py:60 msgid "Setup Complete" msgstr "" @@ -776,8 +830,8 @@ msgid "Where to Get Help" msgstr "" -#: plinth/modules/help/help.py:38 plinth/modules/help/help.py:72 -msgid "FreedomBox Manual" +#: plinth/modules/help/help.py:38 +msgid "Manual" msgstr "" #: plinth/modules/help/help.py:48 @@ -789,15 +843,21 @@ msgid "About {box_name}" msgstr "" +#: plinth/modules/help/help.py:73 +#, python-brace-format +msgid "{box_name} Manual" +msgstr "" + #: plinth/modules/help/templates/help_about.html:30 +#, python-format msgid "" -"FreedomBox is a community project to develop, design and promote personal " +"%(box_name)s is a community project to develop, design and promote personal " "servers running free software for private, personal communications. It is a " "networking appliance designed to allow interfacing with the rest of the " "Internet under conditions of protected privacy and data security. It hosts " "applications such as blog, wiki, website, social network, email, web proxy " -"and a Tor relay on a device that can replace your Wi-Fi router so that your " -"data stays with you." +"and a Tor relay, on a device that can replace your Wi-Fi router, so that " +"your data stays with you." msgstr "" #: plinth/modules/help/templates/help_about.html:43 @@ -811,69 +871,79 @@ msgstr "" #: plinth/modules/help/templates/help_about.html:56 +#, python-format msgid "" "There are a number of projects working to realize a future of distributed " -"services; FreedomBox aims to bring them all together in a convenient package." +"services; %(box_name)s aims to bring them all together in a convenient " +"package." msgstr "" #: plinth/modules/help/templates/help_about.html:64 +#, python-format msgid "" -"For more information about the FreedomBox project, see the FreedomBox Wiki." +"For more information about the %(box_name)s project, see the %(box_name)s Wiki." msgstr "" -#: plinth/modules/help/templates/help_about.html:72 +#: plinth/modules/help/templates/help_about.html:73 msgid "Learn more »" msgstr "" -#: plinth/modules/help/templates/help_about.html:75 +#: plinth/modules/help/templates/help_about.html:76 #, python-format msgid "You are running Plinth version %(version)s." msgstr "" -#: plinth/modules/help/templates/help_index.html:25 -#: plinth/templates/base.html:98 -msgid "Help" +#: plinth/modules/help/templates/help_base.html:36 +#, python-format +msgid "%(box_name)s Setup" msgstr "" #: plinth/modules/help/templates/help_index.html:29 #, python-format msgid "" -"The FreedomBox Manual is the best place to " +"The %(box_name)s Manual is the best place to " "start for information regarding %(box_name)s." msgstr "" #: plinth/modules/help/templates/help_index.html:36 +#, python-format msgid "" -" FreedomBox " -"project wiki contains further information." +" " +"%(box_name)s project wiki contains further information." msgstr "" #: plinth/modules/help/templates/help_index.html:43 +#, python-format msgid "" -"To seek help from FreedomBox community, queries may be posted on the " -"mailing list. The list archives also contain information about problems " -"faced by other users and possible solutions." +"To seek help from %(box_name)s community, queries may be posted on the mailing list. The list archives also contain information about " +"problems faced by other users and possible solutions." msgstr "" #: plinth/modules/help/templates/help_index.html:53 +#, python-format msgid "" -"Many FreedomBox contributors and users are also available on the #freedombox " -"channel of the irc.oftc.net IRC network." +"Many %(box_name)s contributors and users are also available on the irc.oftc." +"net IRC network. Join and request help on the #freedombox " +"channel using the IRC web interface." msgstr "" #: plinth/modules/ikiwiki/__init__.py:38 -msgid "Wiki & Blog (Ikiwiki)" +msgid "Wiki and Blog (ikiwiki)" msgstr "" #: plinth/modules/ikiwiki/__init__.py:43 -msgid "Ikiwiki wikis and blogs" +msgid "ikiwiki wikis and blogs" msgstr "" #: plinth/modules/ikiwiki/forms.py:29 -msgid "Enable Ikiwiki" -msgstr "" +#, fuzzy +#| msgid "Enable network time" +msgid "Enable ikiwiki" +msgstr "Ativar tempo da rede" #: plinth/modules/ikiwiki/forms.py:36 #: plinth/modules/networks/templates/connection_show.html:98 @@ -901,21 +971,22 @@ #: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:27 #, python-format -msgid "Delete Wiki/Blog %(name)s" +msgid "Delete Wiki or Blog %(name)s" msgstr "" #: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:33 msgid "" "This action will remove all the posts, pages and comments including revision " -"history. Delete this wiki/blog permanently?" +"history. Delete this wiki or blog permanently?" msgstr "" -#: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:43 +#: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:44 #, python-format msgid "Delete %(name)s" msgstr "" -#: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:46 +#: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:47 +#: plinth/modules/monkeysphere/templates/monkeysphere.html:60 #: plinth/modules/networks/templates/connections_delete.html:41 #: plinth/modules/users/templates/users_delete.html:41 msgid "Cancel" @@ -948,7 +1019,7 @@ msgstr "" #: plinth/modules/ikiwiki/views.py:73 -msgid "Wiki & Blog" +msgid "Wiki and Blog" msgstr "" #: plinth/modules/ikiwiki/views.py:106 @@ -956,7 +1027,7 @@ msgstr "" #: plinth/modules/ikiwiki/views.py:132 -msgid "Create Wiki/Blog" +msgid "Create Wiki or Blog" msgstr "" #: plinth/modules/ikiwiki/views.py:145 @@ -990,7 +1061,148 @@ msgstr "" #: plinth/modules/ikiwiki/views.py:182 -msgid "Delete Wiki/Blog" +msgid "Delete Wiki or Blog" +msgstr "" + +#: plinth/modules/letsencrypt/__init__.py:43 +#: plinth/modules/letsencrypt/templates/letsencrypt.html:38 +#: plinth/modules/letsencrypt/views.py:45 +msgid "Certificates (Let's Encrypt)" +msgstr "" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:41 +#, python-format +msgid "" +"A digital certficate allows users of a web service to verify the identity of " +"the service and to securely communicate with it. %(box_name)s can " +"automatically obtain and setup digital certificates for each available " +"domain. It does so by proving itself to be the owner of a domain to Let's " +"Encrypt, a certficate authority (CA)." +msgstr "" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:52 +msgid "" +"Let's Encrypt is a free, automated, and open certificate authority, run for " +"the public’s benefit by the Internet Security Research Group (ISRG). Please " +"read and agree with the Let's Encrypt Subscriber Agreement before using this service." +msgstr "" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:66 +#: plinth/modules/monkeysphere/templates/monkeysphere.html:70 +#, fuzzy +#| msgid "Domain Name" +msgid "Domain" +msgstr "Nome de Domínio" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:67 +msgid "Certificate Status" +msgstr "" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:68 +msgid "Website Security" +msgstr "" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:69 +#: plinth/modules/monkeysphere/templates/monkeysphere.html:72 +#, fuzzy +#| msgid "Applications" +msgid "Actions" +msgstr "Aplicações" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:79 +#, python-format +msgid "Expires on %(expiry_date)s" +msgstr "" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:85 +msgid "No certficate" +msgstr "" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:102 +msgid "Revoke" +msgstr "" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:108 +msgid "Re-obtain" +msgstr "" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:115 +msgid "Obtain" +msgstr "" + +#: plinth/modules/letsencrypt/views.py:55 +#, python-brace-format +msgid "Certificate successfully revoked for domain {domain}" +msgstr "" + +#: plinth/modules/letsencrypt/views.py:60 +#, python-brace-format +msgid "Failed to revoke certificate for domain {domain}: {error}" +msgstr "" + +#: plinth/modules/letsencrypt/views.py:72 +#, python-brace-format +msgid "Certificate successfully obtained for domain {domain}" +msgstr "" + +#: plinth/modules/letsencrypt/views.py:77 +#, python-brace-format +msgid "Failed to obtain certificate for domain {domain}: {error}" +msgstr "" + +#: plinth/modules/monkeysphere/__init__.py:32 +#: plinth/modules/monkeysphere/templates/monkeysphere.html:35 +#: plinth/modules/monkeysphere/views.py:44 +msgid "Monkeysphere" +msgstr "" + +#: plinth/modules/monkeysphere/templates/monkeysphere.html:38 +msgid "" +"With Monkeysphere, a PGP key can be generated for each configured domain " +"serving SSH. The PGP public key can then be uploaded to the PGP keyservers. " +"Users connecting to this machine through SSH can verify that they are " +"connecting to the correct host. For users to trust the key, at least one " +"person (usually the machine owner) must sign the key using the regular PGP " +"key signing process. See the Monkeysphere SSH documentation for more details." +msgstr "" + +#: plinth/modules/monkeysphere/templates/monkeysphere.html:53 +msgid "Publishing key to keyserver..." +msgstr "" + +#: plinth/modules/monkeysphere/templates/monkeysphere.html:71 +msgid "GPG Fingerprint" +msgstr "" + +#: plinth/modules/monkeysphere/templates/monkeysphere.html:83 +#: plinth/modules/names/views.py:45 +msgid "Not Available" +msgstr "" + +#: plinth/modules/monkeysphere/templates/monkeysphere.html:93 +msgid "Generate PGP Key" +msgstr "" + +#: plinth/modules/monkeysphere/templates/monkeysphere.html:101 +msgid "Publish Key" +msgstr "" + +#: plinth/modules/monkeysphere/views.py:58 +msgid "Generated PGP key." +msgstr "" + +#: plinth/modules/monkeysphere/views.py:83 +msgid "Cancelled key publishing." +msgstr "" + +#: plinth/modules/monkeysphere/views.py:120 +msgid "Published key to keyserver." +msgstr "" + +#: plinth/modules/monkeysphere/views.py:122 +msgid "Error occurred while publishing key." msgstr "" #: plinth/modules/mumble/__init__.py:38 @@ -1028,170 +1240,151 @@ msgid "Mumble server is not running" msgstr "" -#: plinth/modules/names/__init__.py:30 +#: plinth/modules/names/__init__.py:29 msgid "HTTP" msgstr "" -#: plinth/modules/names/__init__.py:31 +#: plinth/modules/names/__init__.py:30 msgid "HTTPS" msgstr "" -#: plinth/modules/names/__init__.py:32 +#: plinth/modules/names/__init__.py:31 msgid "SSH" msgstr "" -#: plinth/modules/names/__init__.py:46 plinth/modules/names/views.py:34 +#: plinth/modules/names/__init__.py:45 plinth/modules/names/views.py:34 msgid "Name Services" msgstr "" -#: plinth/modules/names/__init__.py:107 -msgid "Not Available" -msgstr "" - #: plinth/modules/networks/__init__.py:108 #, python-brace-format msgid "Using DNSSEC on IPv{kind}" msgstr "" #: plinth/modules/networks/forms.py:30 -msgid "-- select --" -msgstr "" - -#: plinth/modules/networks/forms.py:42 msgid "Connection Type" msgstr "" -#: plinth/modules/networks/forms.py:49 plinth/modules/networks/forms.py:106 -#: plinth/modules/networks/forms.py:133 +#: plinth/modules/networks/forms.py:37 msgid "Connection Name" msgstr "" -#: plinth/modules/networks/forms.py:51 plinth/modules/networks/forms.py:108 -#: plinth/modules/networks/forms.py:135 +#: plinth/modules/networks/forms.py:39 msgid "Physical Interface" msgstr "" -#: plinth/modules/networks/forms.py:53 plinth/modules/networks/forms.py:110 -#: plinth/modules/networks/forms.py:137 +#: plinth/modules/networks/forms.py:41 msgid "The network device that this connection should be bound to." msgstr "" -#: plinth/modules/networks/forms.py:56 plinth/modules/networks/forms.py:113 -#: plinth/modules/networks/forms.py:140 +#: plinth/modules/networks/forms.py:44 msgid "Firewall Zone" msgstr "" -#: plinth/modules/networks/forms.py:57 plinth/modules/networks/forms.py:114 -#: plinth/modules/networks/forms.py:141 +#: plinth/modules/networks/forms.py:45 msgid "" "The firewall zone will control which services are available over this " "interfaces. Select Internal only for trusted networks." msgstr "" -#: plinth/modules/networks/forms.py:61 plinth/modules/networks/forms.py:162 +#: plinth/modules/networks/forms.py:49 msgid "IPv4 Addressing Method" msgstr "" -#: plinth/modules/networks/forms.py:62 +#: plinth/modules/networks/forms.py:50 msgid "" "\"Shared\" method will start a DHCP server and \"Automatic\" method will " "acquire configuration from a DHCP server." msgstr "" -#: plinth/modules/networks/forms.py:68 plinth/modules/networks/forms.py:170 +#: plinth/modules/networks/forms.py:56 msgid "Address" msgstr "" -#: plinth/modules/networks/forms.py:72 plinth/modules/networks/forms.py:174 +#: plinth/modules/networks/forms.py:60 msgid "Netmask" msgstr "" -#: plinth/modules/networks/forms.py:73 plinth/modules/networks/forms.py:175 +#: plinth/modules/networks/forms.py:61 msgid "" "Optional value. If left blank, a default netmask based on the address will " "be used." msgstr "" -#: plinth/modules/networks/forms.py:78 plinth/modules/networks/forms.py:180 +#: plinth/modules/networks/forms.py:66 #: plinth/modules/networks/templates/connection_show.html:202 #: plinth/modules/networks/templates/connection_show.html:241 msgid "Gateway" msgstr "" -#: plinth/modules/networks/forms.py:79 plinth/modules/networks/forms.py:181 +#: plinth/modules/networks/forms.py:67 msgid "Optional value." msgstr "" -#: plinth/modules/networks/forms.py:83 plinth/modules/networks/forms.py:185 +#: plinth/modules/networks/forms.py:71 msgid "DNS Server" msgstr "" -#: plinth/modules/networks/forms.py:84 plinth/modules/networks/forms.py:186 +#: plinth/modules/networks/forms.py:72 msgid "" "Optional value. If this value is given and IPv4 addressing method is " "\"Automatic\", the DNS Servers provided by a DHCP server will be ignored." msgstr "" -#: plinth/modules/networks/forms.py:90 plinth/modules/networks/forms.py:192 +#: plinth/modules/networks/forms.py:78 msgid "Second DNS Server" msgstr "" -#: plinth/modules/networks/forms.py:91 plinth/modules/networks/forms.py:193 +#: plinth/modules/networks/forms.py:79 msgid "" "Optional value. If this value is given and IPv4 Addressing Method is " "\"Automatic\", the DNS Servers provided by a DHCP server will be ignored." msgstr "" -#: plinth/modules/networks/forms.py:121 -msgid "Show password" +#: plinth/modules/networks/forms.py:89 +msgid "-- select --" msgstr "" -#: plinth/modules/networks/forms.py:145 +#: plinth/modules/networks/forms.py:175 #: plinth/modules/networks/templates/connection_show.html:144 msgid "SSID" msgstr "" -#: plinth/modules/networks/forms.py:146 +#: plinth/modules/networks/forms.py:176 msgid "The visible name of the network." msgstr "" -#: plinth/modules/networks/forms.py:148 +#: plinth/modules/networks/forms.py:178 #: plinth/modules/networks/templates/connection_show.html:157 msgid "Mode" msgstr "" -#: plinth/modules/networks/forms.py:153 +#: plinth/modules/networks/forms.py:183 msgid "Authentication Mode" msgstr "" -#: plinth/modules/networks/forms.py:154 +#: plinth/modules/networks/forms.py:184 msgid "" "Select WPA if the wireless network is secured and requires clients to have " "the password to connect." msgstr "" -#: plinth/modules/networks/forms.py:158 +#: plinth/modules/networks/forms.py:188 msgid "Passphrase" msgstr "" -#: plinth/modules/networks/forms.py:166 -msgid "" -"Select Automatic (DHCP) if you are connecting to an existing wireless " -"network. Shared mode is useful when running an Access Point." -msgstr "" - #: plinth/modules/networks/networks.py:36 #: plinth/modules/networks/networks.py:56 msgid "Network Connections" msgstr "" #: plinth/modules/networks/networks.py:38 -#: plinth/modules/networks/networks.py:273 +#: plinth/modules/networks/networks.py:242 msgid "Nearby Wi-Fi Networks" msgstr "" #: plinth/modules/networks/networks.py:40 -#: plinth/modules/networks/networks.py:295 +#: plinth/modules/networks/networks.py:264 msgid "Add Connection" msgstr "" @@ -1215,58 +1408,58 @@ msgid "This type of connection is not yet understood." msgstr "" -#: plinth/modules/networks/networks.py:170 -#: plinth/modules/networks/networks.py:229 +#: plinth/modules/networks/networks.py:139 +#: plinth/modules/networks/networks.py:198 #: plinth/modules/networks/templates/connections_edit.html:34 msgid "Edit Connection" msgstr "" -#: plinth/modules/networks/networks.py:240 +#: plinth/modules/networks/networks.py:209 #, python-brace-format msgid "Activated connection {name}." msgstr "" -#: plinth/modules/networks/networks.py:243 +#: plinth/modules/networks/networks.py:212 msgid "Failed to activate connection: Connection not found." msgstr "" -#: plinth/modules/networks/networks.py:247 +#: plinth/modules/networks/networks.py:216 #, python-brace-format msgid "Failed to activate connection {name}: No suitable device is available." msgstr "" -#: plinth/modules/networks/networks.py:260 +#: plinth/modules/networks/networks.py:229 #, python-brace-format msgid "Deactivated connection {name}." msgstr "" -#: plinth/modules/networks/networks.py:263 +#: plinth/modules/networks/networks.py:232 msgid "Failed to de-activate connection: Connection not found." msgstr "" -#: plinth/modules/networks/networks.py:325 +#: plinth/modules/networks/networks.py:282 msgid "Adding New Ethernet Connection" msgstr "" -#: plinth/modules/networks/networks.py:350 +#: plinth/modules/networks/networks.py:300 msgid "Adding New PPPoE Connection" msgstr "" -#: plinth/modules/networks/networks.py:399 +#: plinth/modules/networks/networks.py:332 msgid "Adding New Wi-Fi Connection" msgstr "" -#: plinth/modules/networks/networks.py:413 +#: plinth/modules/networks/networks.py:346 #, python-brace-format msgid "Connection {name} deleted." msgstr "" -#: plinth/modules/networks/networks.py:416 -#: plinth/modules/networks/networks.py:425 +#: plinth/modules/networks/networks.py:349 +#: plinth/modules/networks/networks.py:358 msgid "Failed to delete connection: Connection not found." msgstr "" -#: plinth/modules/networks/networks.py:430 +#: plinth/modules/networks/networks.py:363 #: plinth/modules/networks/templates/connections_delete.html:26 msgid "Delete Connection" msgstr "" @@ -1276,7 +1469,7 @@ msgstr "" #: plinth/modules/networks/templates/connection_show.html:43 -#: plinth/templates/base.html:119 +#: plinth/templates/base.html:123 msgid "Edit" msgstr "" @@ -1423,23 +1616,24 @@ #: plinth/modules/networks/templates/connection_show.html:280 msgid "" -"This interface should be connected to local network/machine. If you connect " -"this interface to a public network, services meant to be available only " -"internally will become available externally. This is a security risk." +"This interface should be connected to a local network/machine. If you " +"connect this interface to a public network, services meant to be available " +"only internally will become available externally. This is a security risk." msgstr "" #: plinth/modules/networks/templates/connection_show.html:300 msgid "" -"This interface should receive your Internet connection. If you connect it " -"your a local network/machine, many services meant to available only " -"internally will not be available." +"This interface should receive your Internet connection. If you connect it to " +"a local network/machine, many services meant to available only internally " +"will not be available." msgstr "" #: plinth/modules/networks/templates/connection_show.html:319 +#, python-format msgid "" -"This interface is not maintained by FreedomBox. Its security status is " -"unknown to FreedomBox. Many FreedomBox services may not be available on " -"this interface. It is recommended that you deactivate/delete this " +"This interface is not maintained by %(box_name)s. Its security status is " +"unknown to %(box_name)s. Many %(box_name)s services may not be available on " +"this interface. It is recommended that you deactivate or delete this " "connection and re-configure it." msgstr "" @@ -1531,7 +1725,7 @@ #, python-format msgid "" "Virtual Private Network (VPN) is a technique for securely connecting two " -"machines in order to access resources of a private network. While you are " +"devices in order to access resources of a private network. While you are " "away from home, you can connect to your %(box_name)s in order to join your " "home network and access private/internal services provided by %(box_name)s. " "You can also access the rest of the Internet via %(box_name)s for added " @@ -1548,7 +1742,7 @@ "To connect to %(box_name)s's VPN, you need to download a profile and feed it " "to an OpenVPN client on your mobile or desktop machine. OpenVPN Clients are " "available for most platforms. See documentation on recommended clients and instructions on how to " "configure them." msgstr "" @@ -2026,6 +2220,60 @@ msgid "Quassel core service is not running" msgstr "" +#: plinth/modules/repro/__init__.py:36 +#: plinth/modules/repro/templates/repro.html:26 +#: plinth/modules/repro/views.py:55 +msgid "SIP Server (repro)" +msgstr "" + +#: plinth/modules/repro/__init__.py:41 +msgid "repro SIP Server" +msgstr "" + +#: plinth/modules/repro/forms.py:29 +#, fuzzy +#| msgid "Enable service discovery" +msgid "Enable repro service" +msgstr "Permitir descoberta do serviço" + +#: plinth/modules/repro/templates/repro.html:29 +msgid "" +"repro provides various SIP services that a SIP softphone can utilize to " +"provide audio and video calls as well as presence and instant messaging. " +"repro provides a server and SIP user accounts that clients can use to let " +"their presence known. It also acts as a proxy to federate SIP " +"communications to other servers on the Internet similar to email." +msgstr "" + +#: plinth/modules/repro/templates/repro.html:39 +msgid "" +"To make SIP calls, a client application is needed. Available clients include " +"Jitsi (for computers) and CSipSimple (for Android phones)." +msgstr "" + +#: plinth/modules/repro/templates/repro.html:48 +msgid "" +"Note: Before using repro, domains and users will need to " +"be configured using the web-based " +"configuration panel. Users in the admin group will be able to " +"log in to the repro configuration panel. After setting the domain, it is " +"required to restart the repro service. Disable the service and re-enable it." +msgstr "" + +#: plinth/modules/repro/templates/repro.html:63 +#, fuzzy +#| msgid "Service discovery server is running" +msgid "repro service is running" +msgstr "O Servidor da descoberta do serviço está a correr" + +#: plinth/modules/repro/templates/repro.html:66 +#, fuzzy +#| msgid "Service discovery server is not running" +msgid "repro service is not running" +msgstr "O Servidor da descoberta do serviço não está a correr" + #: plinth/modules/restore/__init__.py:36 #: plinth/modules/restore/templates/restore_index.html:26 #: plinth/modules/restore/views.py:46 @@ -2046,8 +2294,8 @@ "reStore is a server for unhosted web " "applications. The idea is to uncouple web applications from data. No " "matter where a web application is served from, the data can be stored on an " -"unhosted storage server of user's choice. With reStore, your " -"%(cfg.box_name)s becomes your unhosted storage server." +"unhosted storage server of user's choice. With reStore, your %(box_name)s " +"becomes your unhosted storage server." msgstr "" #: plinth/modules/restore/templates/restore_index.html:40 @@ -2124,7 +2372,7 @@ #: plinth/modules/system/system.py:33 #: plinth/modules/system/templates/system.html:25 -#: plinth/templates/base.html:105 +#: plinth/templates/base.html:109 msgid "System Configuration" msgstr "" @@ -2139,33 +2387,71 @@ "The options affect the %(box_name)s at its most general level, so be careful!" msgstr "" -#: plinth/modules/tor/__init__.py:50 -msgid "Tor relay port available" +#: plinth/modules/tor/__init__.py:48 plinth/modules/tor/templates/tor.html:35 +msgid "Anonymity Network (Tor)" +msgstr "" + +#: plinth/modules/tor/__init__.py:53 +msgid "Tor Anonymity Network" msgstr "" #: plinth/modules/tor/__init__.py:58 +msgid "Tor Bridge Relay" +msgstr "" + +#: plinth/modules/tor/__init__.py:76 plinth/modules/tor/views.py:144 +msgid "Tor Hidden Service" +msgstr "" + +#: plinth/modules/tor/__init__.py:222 +msgid "Tor relay port available" +msgstr "" + +#: plinth/modules/tor/__init__.py:230 msgid "Obfs3 transport registered" msgstr "" -#: plinth/modules/tor/__init__.py:64 +#: plinth/modules/tor/__init__.py:236 msgid "Obfs4 transport registered" msgstr "" -#: plinth/modules/tor/__init__.py:101 +#: plinth/modules/tor/__init__.py:273 #, python-brace-format msgid "Access URL {url} on tcp{kind} via Tor" msgstr "" -#: plinth/modules/tor/__init__.py:112 +#: plinth/modules/tor/__init__.py:284 #, python-brace-format msgid "Confirm Tor usage at {url} on tcp{kind}" msgstr "" -#: plinth/modules/tor/templates/tor.html:26 plinth/modules/tor/tor.py:66 -msgid "Anonymity Network (Tor)" +#: plinth/modules/tor/forms.py:32 +msgid "Enable Tor" +msgstr "" + +#: plinth/modules/tor/forms.py:35 +msgid "Enable Tor Hidden Service" +msgstr "" + +#: plinth/modules/tor/forms.py:38 +#, python-brace-format +msgid "" +"A hidden service will allow {box_name} to provide selected services (such as " +"ownCloud or chat) without revealing its location." +msgstr "" + +#: plinth/modules/tor/forms.py:42 +msgid "Download software packages over Tor" +msgstr "" + +#: plinth/modules/tor/forms.py:44 +msgid "" +"When enabled, software will be downloaded over the Tor network for " +"installations and upgrades. This adds a degree of privacy and security " +"during software downloads." msgstr "" -#: plinth/modules/tor/templates/tor.html:29 +#: plinth/modules/tor/templates/tor.html:38 msgid "" "Tor is an anonymous communication system. You can learn more about it from " "the Tor Project website. For " @@ -2174,28 +2460,34 @@ "Tor Browser." msgstr "" -#: plinth/modules/tor/templates/tor.html:44 +#: plinth/modules/tor/templates/tor.html:54 +#, fuzzy +#| msgid "Configuration updated" +msgid "Tor configuration is being updated" +msgstr "Configuração atualizada" + +#: plinth/modules/tor/templates/tor.html:62 msgid "Tor is running" msgstr "" -#: plinth/modules/tor/templates/tor.html:47 +#: plinth/modules/tor/templates/tor.html:65 msgid "Tor is not running" msgstr "" -#: plinth/modules/tor/templates/tor.html:59 +#: plinth/modules/tor/templates/tor.html:77 msgid "Hidden Service" msgstr "" -#: plinth/modules/tor/templates/tor.html:60 -#: plinth/modules/tor/templates/tor.html:102 +#: plinth/modules/tor/templates/tor.html:78 +#: plinth/modules/tor/templates/tor.html:120 msgid "Port" msgstr "" -#: plinth/modules/tor/templates/tor.html:85 +#: plinth/modules/tor/templates/tor.html:103 msgid "Bridge" msgstr "" -#: plinth/modules/tor/templates/tor.html:88 +#: plinth/modules/tor/templates/tor.html:106 #, python-format msgid "" "Your %(box_name)s is configured as a Tor bridge with obfsproxy, so it can " @@ -2204,84 +2496,41 @@ "forwarded, if necessary:" msgstr "" -#: plinth/modules/tor/templates/tor.html:101 +#: plinth/modules/tor/templates/tor.html:119 msgid "Service" msgstr "" -#: plinth/modules/tor/templates/tor.html:117 +#: plinth/modules/tor/templates/tor.html:135 msgid "SOCKS" msgstr "" -#: plinth/modules/tor/templates/tor.html:120 +#: plinth/modules/tor/templates/tor.html:138 #, python-format msgid "A Tor SOCKS port is available on your %(box_name)s on TCP port 9050." msgstr "" -#: plinth/modules/tor/tor.py:46 -msgid "Enable Tor" -msgstr "" - -#: plinth/modules/tor/tor.py:49 -msgid "Enable Tor Hidden Service" -msgstr "" - -#: plinth/modules/tor/tor.py:51 -msgid "" -"A hidden service will allow FreedomBox to provide selected services (such as " -"ownCloud or Chat) without revealing its location." -msgstr "" - -#: plinth/modules/tor/tor.py:55 -msgid "Download software packages over Tor" -msgstr "" - -#: plinth/modules/tor/tor.py:57 -msgid "" -"When enabled, software will be downloaded over the Tor network for " -"installations and upgrades. This adds a degree of privacy and security " -"during software downloads." -msgstr "" - -#: plinth/modules/tor/tor.py:85 plinth/modules/tor/tor.py:285 -msgid "Tor Hidden Service" -msgstr "" - -#: plinth/modules/tor/tor.py:115 +#: plinth/modules/tor/views.py:68 msgid "Tor Control Panel" msgstr "" -#: plinth/modules/tor/tor.py:240 +#: plinth/modules/tor/views.py:79 #, python-brace-format msgid "Action error: {0} [{1}] [{2}]" msgstr "" -#: plinth/modules/tor/tor.py:256 -msgid "Tor enabled" -msgstr "" - -#: plinth/modules/tor/tor.py:259 -msgid "Tor disabled" -msgstr "" - -#: plinth/modules/tor/tor.py:264 -msgid "Tor hidden service enabled" -msgstr "" - -#: plinth/modules/tor/tor.py:267 -msgid "Tor hidden service disabled" -msgstr "" - -#: plinth/modules/tor/tor.py:292 -msgid "Enabled package download over Tor" -msgstr "" +#: plinth/modules/tor/views.py:148 +#, fuzzy +#| msgid "Configuration updated" +msgid "Configuration updated." +msgstr "Configuração atualizada" -#: plinth/modules/tor/tor.py:295 -msgid "Disabled package download over Tor" +#: plinth/modules/tor/views.py:150 +msgid "An error occurred during configuration." msgstr "" #: plinth/modules/transmission/__init__.py:38 #: plinth/modules/transmission/templates/transmission.html:26 -#: plinth/modules/transmission/views.py:63 +#: plinth/modules/transmission/views.py:67 msgid "BitTorrent (Transmission)" msgstr "" @@ -2347,70 +2596,66 @@ "will attempt to perform any package upgrades that are available." msgstr "" -#: plinth/modules/upgrades/templates/upgrades.html:40 -msgid "There was an error while upgrading." +#: plinth/modules/upgrades/templates/upgrades.html:37 +msgid "" +"Upgrades install the latest software and security updates. When automatic " +"upgrades are enabled, upgrades are automatically run every night. You don't " +"normally need to start the upgrade process." msgstr "" -#: plinth/modules/upgrades/templates/upgrades.html:43 -#: plinth/modules/upgrades/templates/upgrades.html:59 -msgid "Output from unattended-upgrades:" +#: plinth/modules/upgrades/templates/upgrades.html:45 +msgid "" +"Depending on the number of packages to install, this may take a long time to " +"complete. While upgrades are in progress, you will not be able to install " +"other packages. During the upgrade, this web interface may be temporarily " +"unavailable and show an error. Refresh the page to continue." msgstr "" -#: plinth/modules/upgrades/templates/upgrades.html:50 -msgid "The operating system is up to date now.  " +#: plinth/modules/upgrades/templates/upgrades.html:58 +msgid "Upgrade now »" msgstr "" -#: plinth/modules/upgrades/templates/upgrades.html:53 -msgid "Show Details" +#: plinth/modules/upgrades/templates/upgrades.html:65 +msgid "A package manager is running." msgstr "" -#: plinth/modules/upgrades/templates/upgrades.html:69 -msgid "" -"This will run unattended-upgrades, which will attempt to upgrade your system " -"with the latest Debian packages. It may take a few minutes to complete." +#: plinth/modules/upgrades/templates/upgrades.html:70 +msgid "Recent log from upgrades:" msgstr "" -#: plinth/modules/upgrades/templates/upgrades.html:80 -msgid "Upgrade now »" +#: plinth/modules/upgrades/views.py:36 plinth/modules/upgrades/views.py:66 +msgid "Automatic Upgrades" msgstr "" -#: plinth/modules/upgrades/templates/upgrades.html:87 -msgid "System is being upgraded." +#: plinth/modules/upgrades/views.py:38 +msgid "Upgrade Packages" msgstr "" -#: plinth/modules/upgrades/views.py:35 plinth/modules/upgrades/views.py:64 -msgid "Automatic Upgrades" +#: plinth/modules/upgrades/views.py:96 +msgid "Upgrade process started." msgstr "" -#: plinth/modules/upgrades/views.py:37 -msgid "Upgrade Packages" +#: plinth/modules/upgrades/views.py:99 +msgid "Starting upgrade failed." msgstr "" -#: plinth/modules/upgrades/views.py:75 +#: plinth/modules/upgrades/views.py:102 msgid "Package Upgrades" msgstr "" -#: plinth/modules/upgrades/views.py:116 +#: plinth/modules/upgrades/views.py:131 #, python-brace-format msgid "Error when configuring unattended-upgrades: {error}" msgstr "" -#: plinth/modules/upgrades/views.py:121 +#: plinth/modules/upgrades/views.py:136 msgid "Automatic upgrades enabled" msgstr "" -#: plinth/modules/upgrades/views.py:123 +#: plinth/modules/upgrades/views.py:138 msgid "Automatic upgrades disabled" msgstr "" -#: plinth/modules/upgrades/views.py:142 -msgid "Upgrade completed." -msgstr "" - -#: plinth/modules/upgrades/views.py:144 -msgid "Upgrade failed." -msgstr "" - #: plinth/modules/users/__init__.py:36 msgid "Users and Groups" msgstr "" @@ -2446,19 +2691,30 @@ msgid "Failed to add new user to {group} group." msgstr "" -#: plinth/modules/users/forms.py:126 +#: plinth/modules/users/forms.py:92 +msgid "SSH Keys" +msgstr "" + +#: plinth/modules/users/forms.py:96 +msgid "" +"Setting an SSH public key will allow this user to securely log in to the " +"system without using a password. You may enter multiple keys, one on each " +"line. Blank lines and lines starting with # will be ignored." +msgstr "" + +#: plinth/modules/users/forms.py:136 msgid "Renaming LDAP user failed." msgstr "" -#: plinth/modules/users/forms.py:138 +#: plinth/modules/users/forms.py:148 msgid "Failed to remove user from group." msgstr "" -#: plinth/modules/users/forms.py:149 +#: plinth/modules/users/forms.py:159 msgid "Failed to add user to group." msgstr "" -#: plinth/modules/users/forms.py:174 +#: plinth/modules/users/forms.py:188 msgid "Changing LDAP user password failed." msgstr "" @@ -2477,7 +2733,7 @@ msgstr "" #: plinth/modules/users/templates/users_delete.html:26 -#: plinth/modules/users/views.py:103 +#: plinth/modules/users/views.py:110 msgid "Delete User" msgstr "" @@ -2530,20 +2786,20 @@ msgid "Edit User" msgstr "" -#: plinth/modules/users/views.py:113 +#: plinth/modules/users/views.py:120 #, python-brace-format msgid "User {user} deleted." msgstr "" -#: plinth/modules/users/views.py:120 +#: plinth/modules/users/views.py:127 msgid "Deleting LDAP user failed." msgstr "" -#: plinth/modules/users/views.py:129 +#: plinth/modules/users/views.py:136 msgid "Change Password" msgstr "" -#: plinth/modules/users/views.py:130 +#: plinth/modules/users/views.py:137 msgid "Password changed successfully." msgstr "" @@ -2618,8 +2874,9 @@ msgid "Secure Shell (SSH) Server" msgstr "" -#: plinth/service.py:78 -msgid "FreedomBox Web Interface (Plinth)" +#: plinth/service.py:79 +#, python-brace-format +msgid "{box_name} Web Interface (Plinth)" msgstr "" #: plinth/templates/404.html:25 @@ -2650,27 +2907,24 @@ msgstr "" #: plinth/templates/base.html:49 -msgid "Plinth administrative interface for the FreedomBox" -msgstr "" - -#: plinth/templates/base.html:52 plinth/templates/base.html.py:88 -msgid "FreedomBox" +#, python-format +msgid "Plinth administrative interface for the %(box_name)s" msgstr "" -#: plinth/templates/base.html:81 +#: plinth/templates/base.html:83 msgid "Toggle navigation" msgstr "" -#: plinth/templates/base.html:121 plinth/templates/base.html.py:122 +#: plinth/templates/base.html:125 plinth/templates/base.html.py:126 msgid "Change password" msgstr "" -#: plinth/templates/base.html:125 plinth/templates/base.html.py:126 -#: plinth/templates/base.html:139 plinth/templates/base.html.py:141 +#: plinth/templates/base.html:129 plinth/templates/base.html.py:130 +#: plinth/templates/base.html:143 plinth/templates/base.html.py:145 msgid "Log out" msgstr "" -#: plinth/templates/base.html:131 plinth/templates/base.html.py:133 +#: plinth/templates/base.html:135 plinth/templates/base.html.py:137 msgid "Log in" msgstr "" diff -Nru plinth-0.7.2/plinth/locale/ru/LC_MESSAGES/django.po plinth-0.8.1/plinth/locale/ru/LC_MESSAGES/django.po --- plinth-0.7.2/plinth/locale/ru/LC_MESSAGES/django.po 1970-01-01 00:00:00.000000000 +0000 +++ plinth-0.8.1/plinth/locale/ru/LC_MESSAGES/django.po 2016-02-16 03:55:53.000000000 +0000 @@ -0,0 +1,3258 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-02-06 14:44+0530\n" +"PO-Revision-Date: 2016-02-14 08:36+0000\n" +"Last-Translator: the29a \n" +"Language-Team: Russian " +"\n" +"Language: ru\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=" +"4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" +"X-Generator: Weblate 2.5-dev\n" + +#: plinth/action_utils.py:203 +#, python-brace-format +msgid "Listening on {kind} port {listen_address}:{port}" +msgstr "Слушать на {kind} порт {listen_address}{port}" + +#: plinth/action_utils.py:206 +#, python-brace-format +msgid "Listening on {kind} port {port}" +msgstr "Слушать порт {port} на {kind}" + +#: plinth/action_utils.py:287 +#, python-brace-format +msgid "Access URL {url} on tcp{kind}" +msgstr "Доступ к URL {url} по tcp {kind}" + +#: plinth/action_utils.py:290 +#, python-brace-format +msgid "Access URL {url}" +msgstr "Доступ к URL {url}" + +#: plinth/action_utils.py:321 +#, python-brace-format +msgid "Connect to {host}:{port}" +msgstr "Подключение к {host}:{port}" + +#: plinth/action_utils.py:324 +#, python-brace-format +msgid "Cannot connect to {host}:{port}" +msgstr "Невозможно подключиться к {host}{port}" + +#: plinth/context_processors.py:36 +msgid "FreedomBox" +msgstr "FrеedomBox" + +#: plinth/modules/apps/apps.py:26 +msgid "Apps" +msgstr "Приложения" + +#: plinth/modules/apps/apps.py:32 plinth/templates/base.html.py:93 +msgid "Applications" +msgstr "Приложения" + +#: plinth/modules/apps/templates/apps.html:25 +msgid "Services and Applications" +msgstr "Службы и Приложения" + +#: plinth/modules/apps/templates/apps.html:28 +#, fuzzy, python-format +msgid "" +"You can install and run various services and applications on your " +"%(box_name)s. Click on any app page link on the left to read a description " +"of the application and choose to install it." +msgstr "" +"Вы можете установить и запустить различные службы и приложения на вашем " +"%(box_name)s. Нажмите на любую страницу приложения слева, чтобы прочитать " +"описание приложения и выбрать для установки." + +#: plinth/modules/apps/templates/apps.html:36 +#, fuzzy +msgid "" +"This box can be your photo sharing site, your instant messaging site, your " +"social networking site, your news site. Remember web portals? We can be " +"one of those too. Many of the services you use on the web could soon be on " +"site and under your control!" +msgstr "" +"Эта коробка может быть вашим средством обмена фотографиями, обмена " +"мгновенными сообщениями, вашей социальной сетью, вашей новостной лентой. " +"Помните Web-порталы? Вы можете быть одним из них. Многие службы, которыми " +"пользуетесь Вы, могут быть в этой коробке и под Вашим контролем!" + +#: plinth/modules/avahi/__init__.py:40 plinth/modules/avahi/__init__.py:45 +#: plinth/modules/avahi/templates/avahi.html:26 +#: plinth/modules/avahi/views.py:53 +msgid "Service Discovery" +msgstr "Обнаружение служб" + +#: plinth/modules/avahi/forms.py:29 +msgid "Enable service discovery" +msgstr "Включить обнаружение служб" + +#: plinth/modules/avahi/templates/avahi.html:29 +#, python-format +msgid "" +"Service discovery allows other devices on the network to discover your " +"%(box_name)s and services running on it. It also allows %(box_name)s to " +"discover other devices and services running on your local network. Service " +"discovery is not essential and works only on internal networks. It may be " +"disabled to improve security especially when connecting to a hostile local " +"network." +msgstr "" +"Обнаружение служб позволяет другим устройствам в сети обнаруживать ваш " +"%(box_name)s и службы, запущенные на нем. Это так же позволяет %(box_name)s " +"находить другие устройства и службы запущенные в вашей локальной сети. " +"Обнаружение служб не является существенным и работает только внутри вашей " +"сети. Она может быть отключена в целях повышения безопасности, особенно при " +"подключении к вражеской сети." + +#: plinth/modules/avahi/templates/avahi.html:40 +#: plinth/modules/datetime/templates/datetime.html:35 +#: plinth/modules/deluge/templates/deluge.html:39 +#: plinth/modules/dynamicdns/dynamicdns.py:39 +#: plinth/modules/firewall/templates/firewall.html:57 +#: plinth/modules/mumble/templates/mumble.html:44 +#: plinth/modules/networks/templates/connection_show.html:261 +#: plinth/modules/openvpn/templates/openvpn.html:81 +#: plinth/modules/privoxy/templates/privoxy.html:48 +#: plinth/modules/quassel/templates/quassel.html:50 +#: plinth/modules/repro/templates/repro.html:58 +#: plinth/modules/tor/templates/tor.html:48 +#: plinth/modules/transmission/templates/transmission.html:42 +#: plinth/modules/xmpp/templates/xmpp.html:58 +msgid "Status" +msgstr "Статус" + +#: plinth/modules/avahi/templates/avahi.html:45 +msgid "Service discovery server is running" +msgstr "Выполняется служба обнаружения сервера" + +#: plinth/modules/avahi/templates/avahi.html:48 +msgid "Service discovery server is not running" +msgstr "Не запущена служба обнаружения сервера" + +#: plinth/modules/avahi/templates/avahi.html:52 +#: plinth/modules/datetime/templates/datetime.html:48 +#: plinth/modules/deluge/templates/deluge.html:53 +#: plinth/modules/ikiwiki/templates/ikiwiki.html:35 +#: plinth/modules/mumble/templates/mumble.html:59 +#: plinth/modules/openvpn/templates/openvpn.html:130 +#: plinth/modules/owncloud/templates/owncloud.html:51 +#: plinth/modules/privoxy/templates/privoxy.html:62 +#: plinth/modules/quassel/templates/quassel.html:65 +#: plinth/modules/repro/templates/repro.html:72 +#: plinth/modules/roundcube/templates/roundcube.html:62 +#: plinth/modules/shaarli/templates/shaarli.html:40 +#: plinth/modules/tor/templates/tor.html:92 +#: plinth/modules/transmission/templates/transmission.html:56 +#: plinth/modules/xmpp/templates/xmpp.html:72 +msgid "Configuration" +msgstr "Конфигурация" + +#: plinth/modules/avahi/templates/avahi.html:60 +#: plinth/modules/datetime/templates/datetime.html:56 +#: plinth/modules/deluge/templates/deluge.html:61 +#: plinth/modules/dynamicdns/templates/dynamicdns_configure.html:40 +#: plinth/modules/ikiwiki/templates/ikiwiki.html:43 +#: plinth/modules/ikiwiki/templates/ikiwiki_create.html:32 +#: plinth/modules/mumble/templates/mumble.html:67 +#: plinth/modules/openvpn/templates/openvpn.html:138 +#: plinth/modules/privoxy/templates/privoxy.html:70 +#: plinth/modules/quassel/templates/quassel.html:73 +#: plinth/modules/repro/templates/repro.html:80 +#: plinth/modules/restore/templates/restore_index.html:54 +#: plinth/modules/roundcube/templates/roundcube.html:70 +#: plinth/modules/shaarli/templates/shaarli.html:48 +#: plinth/modules/tor/templates/tor.html:100 +#: plinth/modules/transmission/templates/transmission.html:64 +#: plinth/modules/upgrades/templates/upgrades_configure.html:34 +#: plinth/modules/xmpp/templates/xmpp.html:80 +msgid "Update setup" +msgstr "Обновление установки" + +#: plinth/modules/avahi/views.py:73 plinth/modules/datetime/views.py:85 +#: plinth/modules/deluge/views.py:80 +#: plinth/modules/dynamicdns/dynamicdns.py:371 +#: plinth/modules/ikiwiki/views.py:95 plinth/modules/mumble/views.py:80 +#: plinth/modules/openvpn/views.py:142 plinth/modules/privoxy/views.py:83 +#: plinth/modules/quassel/views.py:76 plinth/modules/repro/views.py:77 +#: plinth/modules/restore/views.py:68 plinth/modules/roundcube/views.py:84 +#: plinth/modules/shaarli/views.py:74 plinth/modules/transmission/views.py:109 +#: plinth/modules/xmpp/views.py:100 +msgid "Configuration updated" +msgstr "Конфигурация обновлена" + +#: plinth/modules/avahi/views.py:76 plinth/modules/datetime/views.py:99 +#: plinth/modules/deluge/views.py:82 plinth/modules/ikiwiki/views.py:97 +#: plinth/modules/mumble/views.py:82 plinth/modules/openvpn/views.py:144 +#: plinth/modules/owncloud/owncloud.py:93 plinth/modules/privoxy/views.py:85 +#: plinth/modules/quassel/views.py:78 plinth/modules/repro/views.py:79 +#: plinth/modules/restore/views.py:70 plinth/modules/roundcube/views.py:86 +#: plinth/modules/shaarli/views.py:76 plinth/modules/tor/views.py:111 +#: plinth/modules/transmission/views.py:111 +#: plinth/modules/upgrades/views.py:118 plinth/modules/xmpp/views.py:102 +msgid "Setting unchanged" +msgstr "Настройки без изменений" + +#: plinth/modules/config/config.py:84 plinth/modules/config/config.py:121 +#: plinth/modules/dynamicdns/dynamicdns.py:148 +msgid "Invalid domain name" +msgstr "Недопустимое имя домена" + +#: plinth/modules/config/config.py:95 +msgid "Hostname" +msgstr "Имя хоста" + +#: plinth/modules/config/config.py:97 +#, python-brace-format +msgid "" +"Hostname is the local name by which other devices on the local network can " +"reach your {box_name}. It must start and end with an alphabet or a digit " +"and have as interior characters only alphabets, digits and hyphens. Total " +"length must be 63 characters or less." +msgstr "" +"Имя узла это локальное имя, по которому другие устройства в локальной сети " +"могут достигнуть ваш {box_name}. Оно должно начинаться и заканчиваться с " +"букв или цифр, внутри так же могут быть цифры, буквы или дефисы. Общая " +"длинна должна быть не более 63 символов." + +#: plinth/modules/config/config.py:105 +msgid "Invalid hostname" +msgstr "Недопустимое имя хоста" + +#: plinth/modules/config/config.py:108 plinth/modules/config/config.py:153 +#: plinth/modules/config/config.py:265 +#: plinth/modules/dynamicdns/dynamicdns.py:143 +msgid "Domain Name" +msgstr "Доменное имя" + +#: plinth/modules/config/config.py:110 +#, python-brace-format +msgid "" +"Domain name is the global name by which other devices on the Internet can " +"reach your {box_name}. It must consist of labels separated by dots. Each " +"label must start and end with an alphabet or a digit and have as interior " +"characters only alphabets, digits and hyphens. Length of each label must be " +"63 characters or less. Total length of domain name must be 253 characters " +"or less." +msgstr "" +"Доменное имя это глобальное имя, по которому другие устройства в интернете " +"могут обнаруживать {box_name}. Оно должно состоять из меток, разделенных " +"точками. Каждая метка должна состоять из букв или цифр, Длина каждой метки " +"должны быть 63 символов или меньше. Общая длина имени домена должно быть 253 " +"символов или меньше." + +#: plinth/modules/config/config.py:125 +msgid "Language" +msgstr "Язык" + +#: plinth/modules/config/config.py:127 +msgid "Language for this web administration interface" +msgstr "Язык для этого веб-интерфейса администрирования" + +#: plinth/modules/config/config.py:135 +#: plinth/modules/dynamicdns/dynamicdns.py:37 +#: plinth/modules/ikiwiki/views.py:36 +msgid "Configure" +msgstr "Настроить" + +#: plinth/modules/config/config.py:176 +msgid "General Configuration" +msgstr "Общие настройки" + +#: plinth/modules/config/config.py:193 +#, python-brace-format +msgid "Error setting hostname: {exception}" +msgstr "Ошибка параметра hostname: {exception}" + +#: plinth/modules/config/config.py:196 +msgid "Hostname set" +msgstr "Смена имени хоста" + +#: plinth/modules/config/config.py:202 +#, python-brace-format +msgid "Error setting domain name: {exception}" +msgstr "Ошибка параметра имени домена: {exception}" + +#: plinth/modules/config/config.py:205 +msgid "Domain name set" +msgstr "Смена доменного имени" + +#: plinth/modules/config/config.py:213 +#, python-brace-format +msgid "Error setting language: {exception}" +msgstr "Ошибка настройки языка: {exception}" + +#: plinth/modules/config/config.py:216 +msgid "Language changed" +msgstr "Язык изменен" + +#: plinth/modules/config/templates/config.html:32 +msgid "Submit" +msgstr "Отправить" + +#: plinth/modules/datetime/__init__.py:39 +#: plinth/modules/datetime/templates/datetime.html:26 +#: plinth/modules/datetime/views.py:58 +msgid "Date & Time" +msgstr "Дата и Время" + +#: plinth/modules/datetime/__init__.py:44 +msgid "Network Time Server" +msgstr "Сетевой сервер времени" + +#: plinth/modules/datetime/__init__.py:76 +msgid "NTP client in contact with servers" +msgstr "NTP-клиент в контакте с серверами" + +#: plinth/modules/datetime/forms.py:31 +msgid "Enable network time" +msgstr "Включить время сети" + +#: plinth/modules/datetime/forms.py:35 +msgid "Time Zone" +msgstr "Часовой пояс" + +#: plinth/modules/datetime/forms.py:36 +msgid "" +"Set your time zone to get accurate timestamps. This will set the systemwide " +"time zone." +msgstr "" +"Задайте свой часовой пояс, чтобы получить точные временные метки. Это " +"позволит установить общесистемный часовой пояс." + +#: plinth/modules/datetime/forms.py:47 +msgid "-- no time zone set --" +msgstr "-- не выбран часовой пояс --" + +#: plinth/modules/datetime/templates/datetime.html:29 +msgid "" +"Network time server is a program that maintians the system time in " +"synchronization with servers on the Internet." +msgstr "" +"Сервер сетевого времени это программа позволяющая системе синхронизировать " +"время с серверами в Интернете." + +#: plinth/modules/datetime/templates/datetime.html:40 +msgid "Network time server is running" +msgstr "Сетевой сервер времени выполняется" + +#: plinth/modules/datetime/templates/datetime.html:43 +msgid "Network time server is not running" +msgstr "Сетевой сервер времени не выполняется" + +#: plinth/modules/datetime/views.py:93 +#, python-brace-format +msgid "Error setting time zone: {exception}" +msgstr "Ошибка установки часового пояса: {exception}" + +#: plinth/modules/datetime/views.py:96 +msgid "Time zone set" +msgstr "Смена часового пояса" + +#: plinth/modules/deluge/__init__.py:38 plinth/modules/deluge/views.py:56 +msgid "BitTorrent (Deluge)" +msgstr "БитТоррент (Deluge)" + +#: plinth/modules/deluge/__init__.py:43 +msgid "Deluge BitTorrent" +msgstr "Deluge БитТоррент" + +#: plinth/modules/deluge/forms.py:29 +msgid "Enable Deluge" +msgstr "Включить Deluge" + +#: plinth/modules/deluge/templates/deluge.html:26 +msgid "BitTorrent Web Client (Deluge)" +msgstr "BitTorrent Веб Клиент (Deluge)" + +#: plinth/modules/deluge/templates/deluge.html:28 +msgid "Deluge is a BitTorrent client that features a Web UI." +msgstr "Deluge это клиент BitTorrent, имеющий веб-интерфейс." + +#: plinth/modules/deluge/templates/deluge.html:31 +msgid "" +"When enabled, the Deluge web client will be available from /deluge path on the web server. The default password is 'deluge', but " +"you should log in and change it immediately after enabling this service." +msgstr "" +"Когда запущен, Deluge веб-клиент доступен по адресу: /deluge на веб-сервере. Пароль по умолчанию 'deluge', но вы должны " +"войти и изменить его сразу же после включения этой службы." + +#: plinth/modules/deluge/templates/deluge.html:44 +msgid "deluge-web is running" +msgstr "deluge-web выполняется" + +#: plinth/modules/deluge/templates/deluge.html:47 +msgid "deluge-web is not running" +msgstr "deluge-web не выполняется" + +#: plinth/modules/diagnostics/diagnostics.py:45 +msgid "Diagnostics" +msgstr "Диагностика" + +#: plinth/modules/diagnostics/diagnostics.py:55 +msgid "System Diagnostics" +msgstr "Диагностика системы" + +#: plinth/modules/diagnostics/diagnostics.py:78 +msgid "Diagnostic Test" +msgstr "Диагностический тест" + +#: plinth/modules/diagnostics/templates/diagnostics.html:37 +msgid "" +"The system diagnostic test will run a number of checks on your system to " +"confirm that applications and services are working as expected." +msgstr "" +"Диагностический тест системы проведет ряд проверок, чтобы убедиться, что " +"приложения и службы работают, как ожидалось." + +#: plinth/modules/diagnostics/templates/diagnostics.html:50 +#: plinth/modules/diagnostics/templates/diagnostics_button.html:27 +msgid "Run Diagnostics" +msgstr "Запуск диагностики" + +#: plinth/modules/diagnostics/templates/diagnostics.html:53 +msgid "Diagnotics test is currently running" +msgstr "В настоящее время диагностический тес запущен" + +#: plinth/modules/diagnostics/templates/diagnostics.html:66 +msgid "Results" +msgstr "Результаты" + +#: plinth/modules/diagnostics/templates/diagnostics.html:74 +#, python-format +msgid "Module: %(module)s" +msgstr "Модуль: %(module)s" + +#: plinth/modules/diagnostics/templates/diagnostics_module.html:25 +msgid "Diagnostic Results" +msgstr "Результаты диагностики" + +#: plinth/modules/diagnostics/templates/diagnostics_module.html:27 +#, python-format +msgid "Module: %(module_name)s" +msgstr "Модуль: %(module_name)s" + +#: plinth/modules/diagnostics/templates/diagnostics_module.html:32 +msgid "This module does not support diagnostics" +msgstr "Этот модуль не поддерживает диагностику" + +#: plinth/modules/diagnostics/templates/diagnostics_results.html:27 +msgid "Test" +msgstr "Тест" + +#: plinth/modules/diagnostics/templates/diagnostics_results.html:28 +msgid "Result" +msgstr "Результат" + +#: plinth/modules/dynamicdns/dynamicdns.py:35 plinth/modules/help/help.py:40 +msgid "About" +msgstr "О службе" + +#: plinth/modules/dynamicdns/dynamicdns.py:45 +#: plinth/modules/dynamicdns/dynamicdns.py:54 +msgid "Dynamic DNS" +msgstr "Динамический DNS" + +#: plinth/modules/dynamicdns/dynamicdns.py:71 +#, fuzzy +msgid "" +"The Variables <User>, <Pass>, <Ip>, <Domain> may be " +"used within the URL. For details see the update URL templates of the example " +"providers." +msgstr "" +"Переменные < User >, < Pass >, < lp >, < Domain > " +"могут использоваться в URL-адресе. Для примеров смотрите обновление URL " +"поставщика примеров." + +#: plinth/modules/dynamicdns/dynamicdns.py:75 +#, fuzzy +msgid "" +"Please choose an update protocol according to your provider. If your " +"provider does not support the GnudIP protocol or your provider is not listed " +"you may use the update URL of your provider." +msgstr "" +"Пожалуйста, выберите протокол обновления согласно вашего провайдера. Если " +"ваш провайдер не поддерживает протокол GnudIP или поставщик не указан, вы " +"можете использовать URL-адрес обновления вашего провайдера." + +#: plinth/modules/dynamicdns/dynamicdns.py:80 +msgid "" +"Please do not enter a URL here (like \"https://example.com/\") but only the " +"hostname of the GnuDIP server (like \"example.com\")." +msgstr "" +"Пожалуйста, не вводите URL здесь (как «https://example.com/»), только имя " +"хоста сервера GnuDIP (как \"example.com\")." + +#: plinth/modules/dynamicdns/dynamicdns.py:84 +#, fuzzy, python-brace-format +msgid "The public domain name you want use to reach your {box_name}." +msgstr "" +"Общее доменное имя вы хотите использовать для достижения ваших {box_name}" + +#: plinth/modules/dynamicdns/dynamicdns.py:87 +msgid "Use this option if your provider uses self signed certificates." +msgstr "" +"Используйте этот параметр, если ваш провайдер использует самостоятельно " +"подписанные сертификаты." + +#: plinth/modules/dynamicdns/dynamicdns.py:90 +msgid "" +"If this option is selected, your username and password will be used for HTTP " +"basic authentication." +msgstr "" +"Если выбран этот параметр, будет использоваться имя пользователя и пароль " +"для обычной проверки подлинности HTTP." + +#: plinth/modules/dynamicdns/dynamicdns.py:93 +msgid "" +"Leave this field empty if you want to keep your previous configured password." +msgstr "" +"Оставьте это поле пустым, если вы хотите сохранить ваш предыдущий " +"настроенный пароль." + +#: plinth/modules/dynamicdns/dynamicdns.py:96 +#, fuzzy, python-brace-format +msgid "" +"Optional Value. If your {box_name} is not connected directly to the Internet " +"(i.e. connected to a NAT router) this URL is used to figure out the real " +"Internet IP. The URL should simply return the IP where the client comes from " +"(example: http://myip.datasystems24.de)." +msgstr "" +"Необязательное значение. Если ваш {box_name} не подключен непосредственно к " +"Интернету, (т.е. подключенный к маршрутизатору) этот URL-адрес используется " +"для получения \"белого\" IP. URL-адрес должен просто вернуть IP (пример: " +"http://myip.datasystems24.de)" + +#: plinth/modules/dynamicdns/dynamicdns.py:104 +msgid "" +"You should have been requested to select a username when you created the " +"account." +msgstr "Вы должны выбрать имя пользователя для создания учетной записи." + +#: plinth/modules/dynamicdns/dynamicdns.py:115 +msgid "Enable Dynamic DNS" +msgstr "Включение динамического DNS" + +#: plinth/modules/dynamicdns/dynamicdns.py:118 +msgid "Service type" +msgstr "Тип службы" + +#: plinth/modules/dynamicdns/dynamicdns.py:123 +msgid "GnudIP Server Address" +msgstr "Адрес сервера GnudIP" + +#: plinth/modules/dynamicdns/dynamicdns.py:128 +msgid "Invalid server name" +msgstr "Недопустимое имя сервера" + +#: plinth/modules/dynamicdns/dynamicdns.py:131 +msgid "Update URL" +msgstr "Обновление URL-адреса" + +#: plinth/modules/dynamicdns/dynamicdns.py:135 +msgid "Accept all SSL certificates" +msgstr "Принимать все SSL-сертификаты" + +#: plinth/modules/dynamicdns/dynamicdns.py:139 +msgid "Use HTTP basic authentication" +msgstr "Использовать базовую аутентификацию HTTP" + +#: plinth/modules/dynamicdns/dynamicdns.py:151 +#: plinth/modules/networks/forms.py:146 plinth/modules/transmission/forms.py:39 +msgid "Username" +msgstr "Имя пользователя" + +#: plinth/modules/dynamicdns/dynamicdns.py:154 +#: plinth/modules/networks/forms.py:147 plinth/modules/transmission/forms.py:43 +msgid "Password" +msgstr "Пароль" + +#: plinth/modules/dynamicdns/dynamicdns.py:157 +#: plinth/modules/networks/forms.py:149 +msgid "Show password" +msgstr "Показать пароль" + +#: plinth/modules/dynamicdns/dynamicdns.py:161 +msgid "IP check URL" +msgstr "IP проверить URL-адрес" + +#: plinth/modules/dynamicdns/dynamicdns.py:187 +msgid "Please provide update URL or a GnuDIP Server" +msgstr "Просьба представить обновление URL-адреса или сервера GnuDIP" + +#: plinth/modules/dynamicdns/dynamicdns.py:190 +msgid "Please provide GnuDIP username" +msgstr "Просьба представить имя пользователя GnuDIP" + +#: plinth/modules/dynamicdns/dynamicdns.py:193 +msgid "Please provide GnuDIP domain" +msgstr "Просьба представить домен GnuDIP" + +#: plinth/modules/dynamicdns/dynamicdns.py:198 +msgid "Please provide a password" +msgstr "Введите пароль" + +#: plinth/modules/dynamicdns/dynamicdns.py:217 +msgid "Configure Dynamic DNS" +msgstr "Настройка динамического DNS" + +#: plinth/modules/dynamicdns/dynamicdns.py:239 +msgid "Status of Dynamic DNS" +msgstr "Состояние динамического DNS" + +#: plinth/modules/dynamicdns/templates/dynamicdns.html:25 +msgid "Dynamic DNS Client" +msgstr "Клиент динамического DNS" + +#: plinth/modules/dynamicdns/templates/dynamicdns.html:28 +#, python-format +msgid "" +"If your internet provider changes your IP address periodic (i.e. every 24h) " +"it may be hard for others to find you in the WEB. And for this reason nobody " +"may find the services which are provided by %(box_name)s, such as ownCloud." +msgstr "" +"Если ваш Интернет-провайдер меняет ваш IP-адрес периодически, это может " +"стать препятствиям, чтобы найти вас в сети. И по этой причине никто не может " +"найти услуги, которые предоставляются %(box_name)s, например ownCloud." + +#: plinth/modules/dynamicdns/templates/dynamicdns.html:37 +msgid "" +"The solution is to assign a DNS name to your IP address and update the DNS " +"name every time your IP is changed by your Internet provider. Dynamic DNS " +"allows you to push your current public IP address to an gnudip server. Afterwards " +"the Server will assign your DNS name with the new IP and if someone from the " +"Internet asks for your DNS name he will get your current IP answered." +msgstr "" +"Решение заключается в назначении имени DNS к вашему IP адресу и обновлять " +"DNS имя каждый раз, как будет изменен ваш IP адрес. Динамический DNS " +"позволяет вам публиковать ваш текущий публичный IP адрес gnudip сервере. " +"После этого сервер будет назначать DNS имя с новым IP и если кто-то из " +"Интернет запрашивает DNS-имя, он получит ваш текущий IP." + +#: plinth/modules/dynamicdns/templates/dynamicdns.html:50 +#, fuzzy +msgid "" +"If you are looking for a free dynamic DNS account, you may find a free " +"GnuDIP service at gnudip.datasystems24.net or you may find free update URL " +"based services on " +"freedns.afraid.org." +msgstr "" +"Если вы ищете бесплатный сервер динамического DNS, вы можете найти " +"бесплатный сервис GnuDIP на gnudip.datasystems24.net или вы можете найти беслатную " +"службу обновления URL-адреса на freedns.afraid.org" + +#: plinth/modules/dynamicdns/templates/dynamicdns.html:61 +#, python-format +msgid "" +"If your %(box_name)s is connected behind some NAT router, don't forget to " +"add port forwarding (i.e. forward some standard ports like 80 and 443)." +msgstr "" +"Если ваш %(box_name)s) подключен за NAT-маршрутизатором, не забудьте " +"добавить перенаправление портов (например, стандартные 80 или 443)." + +#: plinth/modules/dynamicdns/templates/dynamicdns_configure.html:30 +msgid "" +"You have disabled Javascript. Dynamic form mode is disabled and some helper " +"functions may not work (but the main functionality should work)." +msgstr "" +"Вы отключили Javascript. Динамические элементы отключены и некоторые " +"вспомогательные функции могут не работать (но основные функции должны " +"работать)." + +#: plinth/modules/dynamicdns/templates/dynamicdns_status.html:25 +msgid "NAT type" +msgstr "Тип NAT" + +#: plinth/modules/dynamicdns/templates/dynamicdns_status.html:29 +#, fuzzy +msgid "" +"NAT type not detected yet, if you do not provide a \"IP check URL\" we will " +"not detect a NAT type." +msgstr "" +"Тип NAT не обнаружен, если вы не предоставляете «IP проверить URL» мы не " +"можем определить тип NAT." + +#: plinth/modules/dynamicdns/templates/dynamicdns_status.html:35 +msgid "Direct connection to the Internet." +msgstr "Прямое подключение к Интернету." + +#: plinth/modules/dynamicdns/templates/dynamicdns_status.html:37 +#, python-format +msgid "" +"Behind NAT. This means that Dynamic DNS service will poll the \"IP check URL" +"\" for changes (the \"IP check URL\" entry is needed for this - otherwise IP " +"changes will not be detected). In case the WAN IP changes, it may take up " +"to %(timer)s minutes until your DNS entry is updated." +msgstr "" +"За NAT. Это означает, что служба динамического DNS будет опрашивать «IP " +"проверить URL-адрес» для изменения (для этого необходима запись «IP " +"проверить URL-адрес» - в противном случае не будет обнаружено изменение IP )" +". В случае, если WAN IP меняется, это может занять до %(timer)s минут до тех " +"пор, пока ваш DNS-запись обновляется." + +#: plinth/modules/dynamicdns/templates/dynamicdns_status.html:48 +msgid "Last update" +msgstr "Последнее обновление" + +#: plinth/modules/firewall/firewall.py:39 +#: plinth/modules/firewall/firewall.py:49 +#: plinth/modules/firewall/firewall.py:57 +msgid "Firewall" +msgstr "Брандмауэр" + +#: plinth/modules/firewall/templates/firewall.html:28 +#, python-format +msgid "" +"Firewall is a security system that controls the incoming and outgoing " +"network traffic on your %(box_name)s. Keeping a firewall enabled and " +"properly configured reduces risk of security threat from the Internet." +msgstr "" +"Брандмауэр — система безопасности, которая контролирует входящий и исходящий " +"сетевой трафик на вашем %(box_name)s. Держите брандмауэр включенным и " +"правильно настроенным, чтобы уменьшить риск информационной опасности из " +"Интернета." + +#: plinth/modules/firewall/templates/firewall.html:36 +msgid "Current status:" +msgstr "Текущий статус:" + +#: plinth/modules/firewall/templates/firewall.html:41 +#, python-format +msgid "" +"Firewall daemon is not running. Please run it. Firewall comes enabled by " +"default on %(box_name)s. On any Debian based system (such as %(box_name)s) " +"you may run it using the command 'service firewalld start' or in case of a " +"system with systemd 'systemctl start firewalld'." +msgstr "" +"Демон брандмауэра не выполняется. Пожалуйста, запустите его. На %(box_name)s " +"межсетевой экран включен по умолчанию. На любюй системе, базирующейся на " +"Debian (как и %(box_name)s) которые вы можете запустить его с помощью " +"команды 'service firewalld start' или в случае системы с systemd 'systemctl " +"start firewalld'." + +#: plinth/modules/firewall/templates/firewall.html:56 +msgid "Service/Port" +msgstr "Служба/Порт" + +#: plinth/modules/firewall/templates/firewall.html:67 +#: plinth/modules/letsencrypt/templates/letsencrypt.html:91 +#: plinth/modules/names/templates/names.html:51 +msgid "Enabled" +msgstr "Включено" + +#: plinth/modules/firewall/templates/firewall.html:70 +#: plinth/modules/letsencrypt/templates/letsencrypt.html:93 +#: plinth/modules/names/templates/names.html:53 +msgid "Disabled" +msgstr "Выключено" + +#: plinth/modules/firewall/templates/firewall.html:81 +msgid "Permitted" +msgstr "Разрешено" + +#: plinth/modules/firewall/templates/firewall.html:84 +msgid "Permitted (internal only)" +msgstr "Разрешено (только внутренние)" + +#: plinth/modules/firewall/templates/firewall.html:87 +msgid "Permitted (external only)" +msgstr "Разрешено (только внешние)" + +#: plinth/modules/firewall/templates/firewall.html:90 +msgid "Blocked" +msgstr "Заблокировано" + +#: plinth/modules/firewall/templates/firewall.html:103 +msgid "" +"The operation of the firewall is automatic. When you enable a service it is " +"also permitted in the firewall and when you disable a service it is also " +"disabled in the firewall." +msgstr "" +"Действия брандмауэр автоматические. При включении службы, она также " +"разрешается в брандмауэре и при отключении службы она также запрещается в " +"брандмауэре." + +#: plinth/modules/first_boot/forms.py:48 plinth/modules/users/forms.py:70 +msgid "Creating LDAP user failed." +msgstr "Создание пользователя LDAP не удалось." + +#: plinth/modules/first_boot/forms.py:56 +msgid "Failed to add new user to admin group." +msgstr "Не удалось добавить нового пользователя в группу администратора." + +#: plinth/modules/first_boot/forms.py:78 +msgid "User account created, you are now logged in" +msgstr "Учетная запись пользователя создана, теперь вы вошли" + +#: plinth/modules/first_boot/templates/firstboot_navbar.html:23 +#: plinth/modules/help/templates/help_index.html:25 +#: plinth/templates/base.html:102 +msgid "Help" +msgstr "Справка" + +#: plinth/modules/first_boot/templates/firstboot_state0.html:45 +msgid "Start Setup" +msgstr "Запуск программы установки" + +#: plinth/modules/first_boot/templates/firstboot_state0.html:49 +#, python-format +msgid "" +"To complete the setup of your %(box_name)s, please provide some basic " +"information." +msgstr "" +"Для завершения установки вашей %(box_name)s, просьба представьте некоторую " +"базовую информацию." + +#: plinth/modules/first_boot/templates/firstboot_state1.html:41 +msgid "Administrator Account" +msgstr "Учетная запись администратора" + +#: plinth/modules/first_boot/templates/firstboot_state1.html:44 +msgid "" +"Choose a username and password to access this web interface. The password " +"can be changed later. This user will be granted administrative privileges. " +"Other users can be added later." +msgstr "" +"Выберите имя пользователя и пароль для доступа к веб-интерфейсу. Пароль " +"можно изменить позднее. Этому пользователю будут предоставляться " +"административные привилегии. Другие пользователи могут быть добавлены позже." + +#: plinth/modules/first_boot/templates/firstboot_state1.html:57 +msgid "Box it up!" +msgstr "Box-it up!" + +#: plinth/modules/first_boot/templates/firstboot_state10.html:29 +msgid "Setup Complete!" +msgstr "Установка Завершена!" + +#: plinth/modules/first_boot/templates/firstboot_state10.html:32 +#, python-format +msgid "" +"%(box_name)s setup is now complete. To make your %(box_name)s functional, " +"you need some applications. They will be installed the first time you " +"access them." +msgstr "" +"Установка %(box_name)s Завершена. Чтобы сделать ваш %(box_name)s " +"функциональным, вам нужны некоторые приложения. Они могут быть по первому " +"доступу к ним." + +#: plinth/modules/first_boot/templates/firstboot_state10.html:41 +msgid "Go to Apps" +msgstr "Перейдите в раздел приложения" + +#: plinth/modules/first_boot/templates/firstboot_state10.html:44 +msgid "Current Network Configuration" +msgstr "Текущая конфигурация сети" + +#: plinth/modules/first_boot/templates/firstboot_state10.html:47 +msgid "" +"You should check the network setup and modify it if necessary. Do not forget " +"to change the default Wi-Fi passwords!" +msgstr "" +"Вам необходимо проверить настройки сети и изменить их при необходимости. Не " +"забудьте изменить пароли Wi-Fi по умолчанию!" + +#: plinth/modules/first_boot/templates/firstboot_state10.html:57 +msgid "Go to Networks" +msgstr "Перейти к сетям" + +#: plinth/modules/first_boot/views.py:60 +msgid "Setup Complete" +msgstr "Установка Завершена" + +#: plinth/modules/help/help.py:34 +msgid "Documentation" +msgstr "Документация" + +#: plinth/modules/help/help.py:36 +msgid "Where to Get Help" +msgstr "Где получить помощь" + +#: plinth/modules/help/help.py:38 +msgid "Manual" +msgstr "Вручную" + +#: plinth/modules/help/help.py:48 +msgid "Documentation and FAQ" +msgstr "Документация и FAQ" + +#: plinth/modules/help/help.py:55 +#, python-brace-format +msgid "About {box_name}" +msgstr "О {box_name}" + +#: plinth/modules/help/help.py:73 +#, python-brace-format +msgid "{box_name} Manual" +msgstr "Руководство {box_name}" + +#: plinth/modules/help/templates/help_about.html:30 +#, python-format +msgid "" +"%(box_name)s is a community project to develop, design and promote personal " +"servers running free software for private, personal communications. It is a " +"networking appliance designed to allow interfacing with the rest of the " +"Internet under conditions of protected privacy and data security. It hosts " +"applications such as blog, wiki, website, social network, email, web proxy " +"and a Tor relay, on a device that can replace your Wi-Fi router, so that " +"your data stays with you." +msgstr "" +"%(box_name)s - это проект сообщества для разработки, дизайна и поощрения " +"личных серверов под управлением свободного программного обеспечения для " +"частных, личных сообщений. Это сетевое устройство, предназначенное разрешить " +"взаимодействие с остальной частью Интернета в условиях защиты " +"конфиденциальности и безопасности данных. Он содержит различные приложения, " +"такие как блог, вики, веб-сайт, социальную сеть, электронную почту, Web-" +"прокси и сервер Tor, на устройстве, которое может заменить ваш маршрутизатор " +"Wi-Fi, так что ваши данные остаются с вами." + +#: plinth/modules/help/templates/help_about.html:43 +msgid "" +"We live in a world where our use of the network is mediated by those who " +"often do not have our best interests at heart. By building software that " +"does not rely on a central service, we can regain control and privacy. By " +"keeping our data in our homes, we gain useful legal protections over it. By " +"giving back power to the users over their networks and machines, we are " +"returning the Internet to its intended peer-to-peer architecture." +msgstr "" +"Мы живем в мире, сетями владеют те, с кем у нас не всегда общие интересы. " +"Путем создания программного обеспечения, которое не полагается на " +"центральную службу, мы можем восстановить контроль и конфиденциальность. " +"Сохраняя наши данные в наших домах, мы получаем полезную правовую защиту над " +"ними. Давая обратно власть пользователям в их сетях и машины, мы " +"возвращаемся к его предполагаемую архитектуру Интернета peer-to-peer." + +#: plinth/modules/help/templates/help_about.html:56 +#, python-format +msgid "" +"There are a number of projects working to realize a future of distributed " +"services; %(box_name)s aims to bring them all together in a convenient " +"package." +msgstr "" +"Существует ряд проектов, которые работают в сторону реализации будущего " +"распределенных служб, %(box_name)s стремится объединить их в удобном пакете." + +#: plinth/modules/help/templates/help_about.html:64 +#, python-format +msgid "" +"For more information about the %(box_name)s project, see the %(box_name)s Wiki." +msgstr "" +"Дополнительные сведения о проекте %(box_name)s смотрите в Wiki ." + +#: plinth/modules/help/templates/help_about.html:73 +msgid "Learn more »" +msgstr "Подробнее »" + +#: plinth/modules/help/templates/help_about.html:76 +#, python-format +msgid "You are running Plinth version %(version)s." +msgstr "Вы используете Plinth версии %(version)s." + +#: plinth/modules/help/templates/help_base.html:36 +#, python-format +msgid "%(box_name)s Setup" +msgstr "Установка %(box_name)s" + +#: plinth/modules/help/templates/help_index.html:29 +#, python-format +msgid "" +"The %(box_name)s Manual is the best place to " +"start for information regarding %(box_name)s." +msgstr "" +"Руководство %(box_name)s это лучшее место для " +"получения информации о %(box_name)s." + +#: plinth/modules/help/templates/help_index.html:36 +#, python-format +msgid "" +" " +"%(box_name)s project wiki contains further information." +msgstr "" +"Вики проекта %(box_name)s содержит исчерпывающую информацию." + +#: plinth/modules/help/templates/help_index.html:43 +#, python-format +msgid "" +"To seek help from %(box_name)s community, queries may be posted on the mailing list. The list archives also contain information about " +"problems faced by other users and possible solutions." +msgstr "" +"Если вам нужна помощь сообщества %(box_name)s, вопросы можно задавать в " +"списке рассылок Архивный лист так же содержит информацию о " +"проблемах и возможных путях решения." + +#: plinth/modules/help/templates/help_index.html:53 +#, python-format +msgid "" +"Many %(box_name)s contributors and users are also available on the irc.oftc." +"net IRC network. Join and request help on the #freedombox " +"channel using the IRC web interface." +msgstr "" +"Множество разработчиков и пользователей %(box_name)s так же доступны в IRC " +"сети irc.oftc.net. Подключайтесь и спросите помощи на канале " +"#freedombox используя веб-интерфейс." + +#: plinth/modules/ikiwiki/__init__.py:38 +msgid "Wiki and Blog (ikiwiki)" +msgstr "Вики и Блог (ikiwiki)" + +#: plinth/modules/ikiwiki/__init__.py:43 +msgid "ikiwiki wikis and blogs" +msgstr "ikiwiki вики и блоги" + +#: plinth/modules/ikiwiki/forms.py:29 +msgid "Enable ikiwiki" +msgstr "Включить ikiwiki" + +#: plinth/modules/ikiwiki/forms.py:36 +#: plinth/modules/networks/templates/connection_show.html:98 +msgid "Type" +msgstr "Тип" + +#: plinth/modules/ikiwiki/forms.py:39 +#: plinth/modules/networks/templates/connection_show.html:78 +msgid "Name" +msgstr "Имя" + +#: plinth/modules/ikiwiki/forms.py:41 +msgid "Admin Account Name" +msgstr "Имя учетной записи администратора" + +#: plinth/modules/ikiwiki/forms.py:44 +msgid "Admin Account Password" +msgstr "Пароль учетной записи администратора" + +#: plinth/modules/ikiwiki/templates/ikiwiki.html:27 +msgid "" +"When enabled, the blogs and wikis will be available from /ikiwiki." +msgstr "" +"Когда включен, блоги и вики-сайты будут доступны на /ikiwiki." + +#: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:27 +#, python-format +msgid "Delete Wiki or Blog %(name)s" +msgstr "Удалить Вики или Блог %(name)s" + +#: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:33 +msgid "" +"This action will remove all the posts, pages and comments including revision " +"history. Delete this wiki or blog permanently?" +msgstr "" +"Это действие приведет к удалению всех постов, страниц и комментариев, " +"включая историю изменений. Окончательно удалить это вики или блог?" + +#: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:44 +#, python-format +msgid "Delete %(name)s" +msgstr "Удаление %(name)s" + +#: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:47 +#: plinth/modules/monkeysphere/templates/monkeysphere.html:60 +#: plinth/modules/networks/templates/connections_delete.html:41 +#: plinth/modules/users/templates/users_delete.html:41 +msgid "Cancel" +msgstr "Отмена" + +#: plinth/modules/ikiwiki/templates/ikiwiki_manage.html:41 +msgid "No wikis or blogs available." +msgstr "Нет доступных вики или блогов." + +#: plinth/modules/ikiwiki/templates/ikiwiki_manage.html:45 +msgid "Create a Wiki or Blog" +msgstr "Создать Вики или Блог" + +#: plinth/modules/ikiwiki/templates/ikiwiki_manage.html:55 +#, python-format +msgid "Delete site %(site)s" +msgstr "Удаление узла %(site)s" + +#: plinth/modules/ikiwiki/templates/ikiwiki_manage.html:61 +#, python-format +msgid "Go to site %(site)s" +msgstr "Перейти к %(site)s" + +#: plinth/modules/ikiwiki/views.py:38 +msgid "Manage" +msgstr "Управление" + +#: plinth/modules/ikiwiki/views.py:40 +msgid "Create" +msgstr "Создать" + +#: plinth/modules/ikiwiki/views.py:73 +msgid "Wiki and Blog" +msgstr "Вики и Блог" + +#: plinth/modules/ikiwiki/views.py:106 +msgid "Manage Wikis and Blogs" +msgstr "Управление Блогами и Вики" + +#: plinth/modules/ikiwiki/views.py:132 +msgid "Create Wiki or Blog" +msgstr "Создать Блог или Вики" + +#: plinth/modules/ikiwiki/views.py:145 +#, python-brace-format +msgid "Created wiki {name}." +msgstr "Создать вики {name}." + +#: plinth/modules/ikiwiki/views.py:147 +#, python-brace-format +msgid "Could not create wiki: {error}" +msgstr "Не удалось создать вики: {error}" + +#: plinth/modules/ikiwiki/views.py:159 +#, python-brace-format +msgid "Created blog {name}." +msgstr "Созданный блог {name}." + +#: plinth/modules/ikiwiki/views.py:161 +#, python-brace-format +msgid "Could not create blog: {error}" +msgstr "Не удалось создать блог: {error}" + +#: plinth/modules/ikiwiki/views.py:174 +#, python-brace-format +msgid "{name} deleted." +msgstr "{name} удален." + +#: plinth/modules/ikiwiki/views.py:176 +#, python-brace-format +msgid "Could not delete {name}: {error}" +msgstr "Не удалось удалить {name}: {error}" + +#: plinth/modules/ikiwiki/views.py:182 +msgid "Delete Wiki or Blog" +msgstr "Удаление блога или вики" + +#: plinth/modules/letsencrypt/__init__.py:43 +#: plinth/modules/letsencrypt/templates/letsencrypt.html:38 +#: plinth/modules/letsencrypt/views.py:45 +msgid "Certificates (Let's Encrypt)" +msgstr "Сертификаты (Let's Encrypt)" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:41 +#, fuzzy, python-format +msgid "" +"A digital certficate allows users of a web service to verify the identity of " +"the service and to securely communicate with it. %(box_name)s can " +"automatically obtain and setup digital certificates for each available " +"domain. It does so by proving itself to be the owner of a domain to Let's " +"Encrypt, a certficate authority (CA)." +msgstr "" +"Цифровой сертификат позволяет пользователям веб-сервиса проверять " +"идентичность службы и безопасно взаимодействовать с ней. %(box_name)s может " +"автоматически получать и устанавливать цифровые сертификаты для каждого " +"доступного домена." + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:52 +msgid "" +"Let's Encrypt is a free, automated, and open certificate authority, run for " +"the public’s benefit by the Internet Security Research Group (ISRG). Please " +"read and agree with the Let's Encrypt Subscriber Agreement before using this service." +msgstr "" +"Let's Encrypt это свободная, автоматизированная и открытая сертификация, " +"запущенная на благо общественности группой nternet Security Research Group " +"(ISRG). Пожалуйста, прочитайте Let's Encrypt Subscriber Agreemen перед использованием этой службы." + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:66 +#: plinth/modules/monkeysphere/templates/monkeysphere.html:70 +msgid "Domain" +msgstr "Домен" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:67 +msgid "Certificate Status" +msgstr "Статус сертификата" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:68 +msgid "Website Security" +msgstr "Безопасность Веб-сайта" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:69 +#: plinth/modules/monkeysphere/templates/monkeysphere.html:72 +msgid "Actions" +msgstr "Действия" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:79 +#, python-format +msgid "Expires on %(expiry_date)s" +msgstr "Истекает %(expiry_date)s" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:85 +msgid "No certficate" +msgstr "Не сертификата" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:102 +msgid "Revoke" +msgstr "Отменить" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:108 +msgid "Re-obtain" +msgstr "Получить повторно" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:115 +msgid "Obtain" +msgstr "Получить" + +#: plinth/modules/letsencrypt/views.py:55 +#, python-brace-format +msgid "Certificate successfully revoked for domain {domain}" +msgstr "Сертификат успешно отменен для домена {domain}" + +#: plinth/modules/letsencrypt/views.py:60 +#, python-brace-format +msgid "Failed to revoke certificate for domain {domain}: {error}" +msgstr "Не удалось отозвать сертификат для домена {domain}: {error}" + +#: plinth/modules/letsencrypt/views.py:72 +#, python-brace-format +msgid "Certificate successfully obtained for domain {domain}" +msgstr "Сертификат успешно получен для домена {domain}" + +#: plinth/modules/letsencrypt/views.py:77 +#, python-brace-format +msgid "Failed to obtain certificate for domain {domain}: {error}" +msgstr "Не удалось получить сертификат для домена {domain}: {error}" + +#: plinth/modules/monkeysphere/__init__.py:32 +#: plinth/modules/monkeysphere/templates/monkeysphere.html:35 +#: plinth/modules/monkeysphere/views.py:44 +msgid "Monkeysphere" +msgstr "MonkeySphere" + +#: plinth/modules/monkeysphere/templates/monkeysphere.html:38 +msgid "" +"With Monkeysphere, a PGP key can be generated for each configured domain " +"serving SSH. The PGP public key can then be uploaded to the PGP keyservers. " +"Users connecting to this machine through SSH can verify that they are " +"connecting to the correct host. For users to trust the key, at least one " +"person (usually the machine owner) must sign the key using the regular PGP " +"key signing process. See the Monkeysphere SSH documentation for more details." +msgstr "" +"С Monkeysphere PGP ключ может быть создан для каждого настроенного домена, " +"доступного по SSH. Открытый ключ PGP затем может быть загружен на сервер " +"ключей PGP. Пользователи, которые подключаются к этой машине через SSH могуу " +"проверить, что они подключаются к правильному хосту. Для использования, ключ " +"должен быть подписан. Смотрите Monkeysphere SSH documentation для подробностей." + +#: plinth/modules/monkeysphere/templates/monkeysphere.html:53 +msgid "Publishing key to keyserver..." +msgstr "Публикация ключа на сервер ключей..." + +#: plinth/modules/monkeysphere/templates/monkeysphere.html:71 +msgid "GPG Fingerprint" +msgstr "GPG отпечаток" + +#: plinth/modules/monkeysphere/templates/monkeysphere.html:83 +#: plinth/modules/names/views.py:45 +msgid "Not Available" +msgstr "Не доступно" + +#: plinth/modules/monkeysphere/templates/monkeysphere.html:93 +msgid "Generate PGP Key" +msgstr "Генерировать ключ PGP" + +#: plinth/modules/monkeysphere/templates/monkeysphere.html:101 +msgid "Publish Key" +msgstr "Опубликовать ключ" + +#: plinth/modules/monkeysphere/views.py:58 +msgid "Generated PGP key." +msgstr "Сгенерированный ключ PGP." + +#: plinth/modules/monkeysphere/views.py:83 +msgid "Cancelled key publishing." +msgstr "Отменена публикация ключа." + +#: plinth/modules/monkeysphere/views.py:120 +msgid "Published key to keyserver." +msgstr "Опубликованый ключ на сервере ключей." + +#: plinth/modules/monkeysphere/views.py:122 +msgid "Error occurred while publishing key." +msgstr "Произошла ошибка при публикации ключа." + +#: plinth/modules/mumble/__init__.py:38 +#: plinth/modules/mumble/templates/mumble.html:26 +#: plinth/modules/mumble/views.py:58 +msgid "Voice Chat (Mumble)" +msgstr "Голосовой чат (Mumble)" + +#: plinth/modules/mumble/__init__.py:43 +msgid "Mumble Voice Chat Server" +msgstr "Mumble Сервер Голосового Чата" + +#: plinth/modules/mumble/forms.py:29 +msgid "Enable Mumble daemon" +msgstr "Включить Mumble как демон" + +#: plinth/modules/mumble/templates/mumble.html:29 +msgid "" +"Mumble is an open source, low-latency, encrypted, high quality voice chat " +"software." +msgstr "" +"Mumble это шифрованый чат с высоким качеством голоса, низкой задержкой и " +"открытым исходным кодом." + +#: plinth/modules/mumble/templates/mumble.html:36 +msgid "" +"You can connect to your Mumble server on the regular Mumble port 64738. Clients to connect to Mumble from your " +"desktop and Android devices are available." +msgstr "" +"Вы можете подключится к серверу Mumble используя стандартный для него порт: " +"64738. На Клиенты вы можете найти " +"клиенты для вашего компьютера и Android устройств." + +#: plinth/modules/mumble/templates/mumble.html:49 +msgid "Mumble server is running" +msgstr "Mumble сервер запущен" + +#: plinth/modules/mumble/templates/mumble.html:52 +msgid "Mumble server is not running" +msgstr "Mumble сервер не запущен" + +#: plinth/modules/names/__init__.py:29 +msgid "HTTP" +msgstr "HTTP" + +#: plinth/modules/names/__init__.py:30 +msgid "HTTPS" +msgstr "HTTPS" + +#: plinth/modules/names/__init__.py:31 +msgid "SSH" +msgstr "SSH" + +#: plinth/modules/names/__init__.py:45 plinth/modules/names/views.py:34 +msgid "Name Services" +msgstr "Название услуги" + +#: plinth/modules/networks/__init__.py:108 +#, python-brace-format +msgid "Using DNSSEC on IPv{kind}" +msgstr "Использовать DNSSEC на IPv{kind}" + +#: plinth/modules/networks/forms.py:30 +msgid "Connection Type" +msgstr "Тип подключения" + +#: plinth/modules/networks/forms.py:37 +msgid "Connection Name" +msgstr "Имя подключения" + +#: plinth/modules/networks/forms.py:39 +msgid "Physical Interface" +msgstr "Физический интерфейс" + +#: plinth/modules/networks/forms.py:41 +msgid "The network device that this connection should be bound to." +msgstr "К этому подключению должно быть привязано сетевое устройство." + +#: plinth/modules/networks/forms.py:44 +msgid "Firewall Zone" +msgstr "Зона Брандмауэра" + +#: plinth/modules/networks/forms.py:45 +msgid "" +"The firewall zone will control which services are available over this " +"interfaces. Select Internal only for trusted networks." +msgstr "" +"Зона брандмауэра будет контролировать службы, доступные через этот " +"интерфейс. Выбирайте Внутренний только в доверенных сетях." + +#: plinth/modules/networks/forms.py:49 +msgid "IPv4 Addressing Method" +msgstr "Метод адресации IPv4" + +#: plinth/modules/networks/forms.py:50 +msgid "" +"\"Shared\" method will start a DHCP server and \"Automatic\" method will " +"acquire configuration from a DHCP server." +msgstr "" +"\"Общий\" метод запускает DHCP сервер и \"Автоматический\" метод будет " +"получать настройки от DHCP сервера." + +#: plinth/modules/networks/forms.py:56 +msgid "Address" +msgstr "Адрес" + +#: plinth/modules/networks/forms.py:60 +msgid "Netmask" +msgstr "Маска сети" + +#: plinth/modules/networks/forms.py:61 +msgid "" +"Optional value. If left blank, a default netmask based on the address will " +"be used." +msgstr "" +"Необязательное значение. Если оставить пустым, будет использоваться маска " +"подсети по умолчанию, основанная на адресе." + +#: plinth/modules/networks/forms.py:66 +#: plinth/modules/networks/templates/connection_show.html:202 +#: plinth/modules/networks/templates/connection_show.html:241 +msgid "Gateway" +msgstr "Шлюз" + +#: plinth/modules/networks/forms.py:67 +msgid "Optional value." +msgstr "Необязательное значение." + +#: plinth/modules/networks/forms.py:71 +msgid "DNS Server" +msgstr "DNS-сервер" + +#: plinth/modules/networks/forms.py:72 +msgid "" +"Optional value. If this value is given and IPv4 addressing method is " +"\"Automatic\", the DNS Servers provided by a DHCP server will be ignored." +msgstr "" +"Необязательное значение. Если задано это значение, и метод адресации IPv4 " +"«Автомат», предоставляемые DHCP-сервером DNS-серверы будут игнорироваться." + +#: plinth/modules/networks/forms.py:78 +msgid "Second DNS Server" +msgstr "Второй DNS-сервер" + +#: plinth/modules/networks/forms.py:79 +msgid "" +"Optional value. If this value is given and IPv4 Addressing Method is " +"\"Automatic\", the DNS Servers provided by a DHCP server will be ignored." +msgstr "" +"Необязательное значение. Если задано это значение и метод адресации IPv4 " +"«Автомат», предоставляемые DHCP-сервером DNS-серверы будут игнорироваться." + +#: plinth/modules/networks/forms.py:89 +msgid "-- select --" +msgstr "-- Выберите --" + +#: plinth/modules/networks/forms.py:175 +#: plinth/modules/networks/templates/connection_show.html:144 +msgid "SSID" +msgstr "SSID" + +#: plinth/modules/networks/forms.py:176 +msgid "The visible name of the network." +msgstr "Отображаемое имя сети." + +#: plinth/modules/networks/forms.py:178 +#: plinth/modules/networks/templates/connection_show.html:157 +msgid "Mode" +msgstr "Режим" + +#: plinth/modules/networks/forms.py:183 +msgid "Authentication Mode" +msgstr "Режим проверки подлинности" + +#: plinth/modules/networks/forms.py:184 +msgid "" +"Select WPA if the wireless network is secured and requires clients to have " +"the password to connect." +msgstr "" +"Выберите WPA, если беспроводная сеть защищена и требует от клиентов пароль " +"для подключения." + +#: plinth/modules/networks/forms.py:188 +msgid "Passphrase" +msgstr "Парольная фраза" + +#: plinth/modules/networks/networks.py:36 +#: plinth/modules/networks/networks.py:56 +msgid "Network Connections" +msgstr "Сетевые подключения" + +#: plinth/modules/networks/networks.py:38 +#: plinth/modules/networks/networks.py:242 +msgid "Nearby Wi-Fi Networks" +msgstr "Соседние сети Wi-Fi" + +#: plinth/modules/networks/networks.py:40 +#: plinth/modules/networks/networks.py:264 +msgid "Add Connection" +msgstr "Добавить подключение" + +#: plinth/modules/networks/networks.py:46 +msgid "Networks" +msgstr "Сети" + +#: plinth/modules/networks/networks.py:66 +msgid "Cannot show connection: Connection not found." +msgstr "Не удается показать подключение: соединение не найдено." + +#: plinth/modules/networks/networks.py:100 +msgid "Show Connection information" +msgstr "Показать сведения о подключении" + +#: plinth/modules/networks/networks.py:113 +msgid "Cannot edit connection: Connection not found." +msgstr "Нельзя редактировать подключение: подключение не найдено." + +#: plinth/modules/networks/networks.py:119 +msgid "This type of connection is not yet understood." +msgstr "Этот тип подключения еще не понятен." + +#: plinth/modules/networks/networks.py:139 +#: plinth/modules/networks/networks.py:198 +#: plinth/modules/networks/templates/connections_edit.html:34 +msgid "Edit Connection" +msgstr "Редактирование подключения" + +#: plinth/modules/networks/networks.py:209 +#, python-brace-format +msgid "Activated connection {name}." +msgstr "Установленное подключение {name}." + +#: plinth/modules/networks/networks.py:212 +msgid "Failed to activate connection: Connection not found." +msgstr "Невозможно установить подключение: Поключение не найдено." + +#: plinth/modules/networks/networks.py:216 +#, python-brace-format +msgid "Failed to activate connection {name}: No suitable device is available." +msgstr "Не удалось установить подключение {name}: Нет подходящего устройства." + +#: plinth/modules/networks/networks.py:229 +#, python-brace-format +msgid "Deactivated connection {name}." +msgstr "Разорвано подключение {name}." + +#: plinth/modules/networks/networks.py:232 +msgid "Failed to de-activate connection: Connection not found." +msgstr "Не удалось разорвать подключение: соединение не найдено." + +#: plinth/modules/networks/networks.py:282 +msgid "Adding New Ethernet Connection" +msgstr "Добавление нового подключения Ethernet" + +#: plinth/modules/networks/networks.py:300 +msgid "Adding New PPPoE Connection" +msgstr "Добавление нового подключения PPPoE" + +#: plinth/modules/networks/networks.py:332 +msgid "Adding New Wi-Fi Connection" +msgstr "Добавление нового подключения Wi-Fi" + +#: plinth/modules/networks/networks.py:346 +#, python-brace-format +msgid "Connection {name} deleted." +msgstr "Подключение {name} удалено." + +#: plinth/modules/networks/networks.py:349 +#: plinth/modules/networks/networks.py:358 +msgid "Failed to delete connection: Connection not found." +msgstr "Не удалось удалить подключение: соединение не найдено." + +#: plinth/modules/networks/networks.py:363 +#: plinth/modules/networks/templates/connections_delete.html:26 +msgid "Delete Connection" +msgstr "Удаление подключения" + +#: plinth/modules/networks/templates/connection_show.html:43 +msgid "Edit connection" +msgstr "Редактирование подключения" + +#: plinth/modules/networks/templates/connection_show.html:43 +#: plinth/templates/base.html:123 +msgid "Edit" +msgstr "Редактировать" + +#: plinth/modules/networks/templates/connection_show.html:50 +#: plinth/modules/networks/templates/connections_list.html:78 +msgid "Deactivate" +msgstr "Отключить" + +#: plinth/modules/networks/templates/connection_show.html:57 +#: plinth/modules/networks/templates/connections_list.html:86 +msgid "Activate" +msgstr "Включить" + +#: plinth/modules/networks/templates/connection_show.html:63 +msgid "Delete connection" +msgstr "Удаление подключения" + +#: plinth/modules/networks/templates/connection_show.html:63 +msgid "Delete" +msgstr "Удалить" + +#: plinth/modules/networks/templates/connection_show.html:66 +#: plinth/modules/networks/templates/connections_diagram.html:73 +#: plinth/modules/networks/templates/connections_diagram.html:76 +#: plinth/modules/networks/templates/connections_diagram.html:105 +#: plinth/modules/networks/templates/connections_diagram.html:127 +msgid "Connection" +msgstr "Подключение" + +#: plinth/modules/networks/templates/connection_show.html:71 +msgid "Primary connection" +msgstr "Основное соединение" + +#: plinth/modules/networks/templates/connection_show.html:73 +#: plinth/modules/networks/templates/connection_show.html:217 +#: plinth/modules/networks/templates/connection_show.html:256 +msgid "yes" +msgstr "Да" + +#: plinth/modules/networks/templates/connection_show.html:84 +msgid "Device" +msgstr "Устройство" + +#: plinth/modules/networks/templates/connection_show.html:88 +msgid "State" +msgstr "Состояние" + +#: plinth/modules/networks/templates/connection_show.html:93 +#, fuzzy +msgid "State reason" +msgstr "Определение состояния" + +#: plinth/modules/networks/templates/connection_show.html:102 +msgid "MAC address" +msgstr "MAC-адрес" + +#: plinth/modules/networks/templates/connection_show.html:106 +msgid "Interface" +msgstr "Интерфейс" + +#: plinth/modules/networks/templates/connection_show.html:110 +msgid "Description" +msgstr "Описание" + +#: plinth/modules/networks/templates/connection_show.html:116 +msgid "Physical Link" +msgstr "Физическая связь" + +#: plinth/modules/networks/templates/connection_show.html:121 +msgid "Link state" +msgstr "Состояния связи" + +#: plinth/modules/networks/templates/connection_show.html:125 +msgid "cable is connected" +msgstr "кабель подключен" + +#: plinth/modules/networks/templates/connection_show.html:128 +msgid "please check cable" +msgstr "Проверьте кабель" + +#: plinth/modules/networks/templates/connection_show.html:133 +#: plinth/modules/networks/templates/connection_show.html:149 +msgid "Speed" +msgstr "Скорость" + +#: plinth/modules/networks/templates/connection_show.html:135 +#, python-format +msgid "%(ethernet_speed)s Mbit/s" +msgstr "%(ethernet_speed)s Мбит/сек" + +#: plinth/modules/networks/templates/connection_show.html:151 +#, python-format +msgid "%(wireless_bitrate)s Mbit/s" +msgstr "%(wireless_bitrate)s Мбит/сек" + +#: plinth/modules/networks/templates/connection_show.html:163 +msgid "Signal strength" +msgstr "Сила сигнала" + +#: plinth/modules/networks/templates/connection_show.html:173 +msgid "Channel" +msgstr "Канал" + +#: plinth/modules/networks/templates/connection_show.html:181 +msgid "IPv4" +msgstr "IРv4" + +#: plinth/modules/networks/templates/connection_show.html:186 +#: plinth/modules/networks/templates/connection_show.html:227 +msgid "Method" +msgstr "Метод" + +#: plinth/modules/networks/templates/connection_show.html:193 +#: plinth/modules/networks/templates/connection_show.html:234 +msgid "IP address" +msgstr "IP-адрес" + +#: plinth/modules/networks/templates/connection_show.html:209 +#: plinth/modules/networks/templates/connection_show.html:248 +msgid "DNS server" +msgstr "DNS-сервер" + +#: plinth/modules/networks/templates/connection_show.html:216 +#: plinth/modules/networks/templates/connection_show.html:255 +msgid "Default" +msgstr "По умолчанию" + +#: plinth/modules/networks/templates/connection_show.html:222 +msgid "IPv6" +msgstr "IРv6" + +#: plinth/modules/networks/templates/connection_show.html:263 +msgid "This connection is not active." +msgstr "Это подключение не активно." + +#: plinth/modules/networks/templates/connection_show.html:266 +msgid "Security" +msgstr "Безопасность" + +#: plinth/modules/networks/templates/connection_show.html:271 +#: plinth/modules/networks/templates/connection_show.html:291 +#: plinth/modules/networks/templates/connection_show.html:310 +msgid "Firewall zone" +msgstr "Зона Брандмауэра" + +#: plinth/modules/networks/templates/connection_show.html:280 +msgid "" +"This interface should be connected to a local network/machine. If you " +"connect this interface to a public network, services meant to be available " +"only internally will become available externally. This is a security risk." +msgstr "" +"Этот интерфейс должен быть подключен к локальной сети/машине. Если этот " +"интерфейс подключен к публичной сети, внутренние службы будут доступны " +"извне. Это представляет риск для безопасности." + +#: plinth/modules/networks/templates/connection_show.html:300 +msgid "" +"This interface should receive your Internet connection. If you connect it to " +"a local network/machine, many services meant to available only internally " +"will not be available." +msgstr "" +"Этот интерфейс должен получить подключение к Интернету. Если вы подключите " +"его к локальной сети/машине, многие внутренние службы будут не доступны." + +#: plinth/modules/networks/templates/connection_show.html:319 +#, python-format +msgid "" +"This interface is not maintained by %(box_name)s. Its security status is " +"unknown to %(box_name)s. Many %(box_name)s services may not be available on " +"this interface. It is recommended that you deactivate or delete this " +"connection and re-configure it." +msgstr "" +"Этот интерфейс не поддерживается %(box_name)s. Его статус безопасности " +"неизвестен для %(box_name)s. Много служб %(box_name)s могут быть недоступны " +"на этом интерфейсе. Мы рекомендуем вам отключить или удалить это подключение " +"и заново настроить его." + +#: plinth/modules/networks/templates/connections_add.html:34 +#: plinth/modules/networks/templates/connections_type_select.html:34 +msgid "Create..." +msgstr "Создать..." + +#: plinth/modules/networks/templates/connections_create.html:34 +msgid "Create Connection" +msgstr "Создание подключения" + +#: plinth/modules/networks/templates/connections_delete.html:29 +#, python-format +msgid "Delete connection %(name)s permanently?" +msgstr "Окончательно удалить подключение %(name)s?" + +#: plinth/modules/networks/templates/connections_diagram.html:65 +msgid "Internet" +msgstr "Интернет" + +#: plinth/modules/networks/templates/connections_diagram.html:70 +#: plinth/modules/networks/templates/connections_diagram.html:102 +msgid "Spacing" +msgstr "Интервал" + +#: plinth/modules/networks/templates/connections_diagram.html:78 +msgid "External" +msgstr "Внешний" + +#: plinth/modules/networks/templates/connections_diagram.html:83 +#: plinth/modules/networks/templates/connections_diagram.html:113 +#: plinth/network.py:37 +msgid "Ethernet" +msgstr "Ethernet" + +#: plinth/modules/networks/templates/connections_diagram.html:86 +#: plinth/modules/networks/templates/connections_diagram.html:116 +#: plinth/network.py:38 +msgid "Wi-Fi" +msgstr "Wi-Fi" + +#: plinth/modules/networks/templates/connections_diagram.html:89 +#, python-format +msgid "Show connection %(connection.name)s" +msgstr "Показать подключение %(connection.name)s" + +#: plinth/modules/networks/templates/connections_diagram.html:107 +msgid "Internal" +msgstr "Внутренний" + +#: plinth/modules/networks/templates/connections_diagram.html:119 +#, python-format +msgid "Show connection %(name)s" +msgstr "Показать подключение %(name)s" + +#: plinth/modules/networks/templates/connections_diagram.html:131 +msgid "Computer" +msgstr "Компьютер" + +#: plinth/modules/networks/templates/connections_list.html:67 +#, python-format +msgid "Delete connection %(name)s" +msgstr "Удалить подключение %(name)s" + +#: plinth/modules/networks/templates/connections_list.html:92 +msgid "Active" +msgstr "Активные" + +#: plinth/modules/networks/templates/connections_list.html:95 +msgid "Inactive" +msgstr "Неактивен" + +#: plinth/modules/openvpn/__init__.py:38 +#: plinth/modules/openvpn/templates/openvpn.html:35 +#: plinth/modules/openvpn/views.py:62 +msgid "Virtual Private Network (OpenVPN)" +msgstr "Виртуальная частная сеть (OpenVPN)" + +#: plinth/modules/openvpn/__init__.py:43 +msgid "OpenVPN" +msgstr "OpenVPN" + +#: plinth/modules/openvpn/forms.py:29 +msgid "Enable OpenVPN server" +msgstr "Включить сервер OpenVPN" + +#: plinth/modules/openvpn/templates/openvpn.html:38 +#, python-format +msgid "" +"Virtual Private Network (VPN) is a technique for securely connecting two " +"devices in order to access resources of a private network. While you are " +"away from home, you can connect to your %(box_name)s in order to join your " +"home network and access private/internal services provided by %(box_name)s. " +"You can also access the rest of the Internet via %(box_name)s for added " +"security and anonymity." +msgstr "" +"Виртуальные частные сети (VPN) — это метод для безопасного подключения двух " +"устройств для того, чтобы получить доступ к ресурсам частной сети. В то " +"время как вы находитесь вдали от дома, можно подключиться к вашей %(box_name)" +"s для того, чтобы присоединиться к вашей домашней сети и доступа к закрытым/" +"внутренним службам, предоставляемые %(box_name)s. Вы можете также получить " +"доступ к остальной части Интернет через %(box_name)s для дополнительной " +"безопасности и анонимности." + +#: plinth/modules/openvpn/templates/openvpn.html:51 +msgid "Profile" +msgstr "Профиль" + +#: plinth/modules/openvpn/templates/openvpn.html:54 +#, python-format +msgid "" +"To connect to %(box_name)s's VPN, you need to download a profile and feed it " +"to an OpenVPN client on your mobile or desktop machine. OpenVPN Clients are " +"available for most platforms. See documentation on recommended clients and instructions on how to " +"configure them." +msgstr "" +"Для подключения к %(box_name)s по VPN, вам надо скачать профиль для OpenVPN-" +"клиента. OpenVPN клиенты доступны для большинства платформ. 2documentation для инструкций и рекомендаций по " +"настройке." + +#: plinth/modules/openvpn/templates/openvpn.html:66 +#, python-format +msgid "Profile is specific to each user of %(box_name)s. Keep it a secret." +msgstr "" +"Профиль специфичен для каждого пользователя %(box_name)s. Держите профиль в " +"тайне." + +#: plinth/modules/openvpn/templates/openvpn.html:76 +msgid "Download my profile" +msgstr "Скачать мой профиль" + +#: plinth/modules/openvpn/templates/openvpn.html:85 +#, python-format +msgid "" +"OpenVPN has not yet been setup. Performing a secure setup takes a very long " +"time. Depending on how fast your %(box_name)s is, it may even take hours. " +"If the setup is interrupted, you may start it again." +msgstr "" +"OpenVPN еще не настроен. ыполнение безопасной установки занимает очень много " +"времени. В зависимости от мощности вашего %(box_name)s, это может занять " +"продолжительное время. Если установка прерывается, вы можете начать её снова." + +#: plinth/modules/openvpn/templates/openvpn.html:97 +msgid "Start setup" +msgstr "Запуск программы установки" + +#: plinth/modules/openvpn/templates/openvpn.html:104 +msgid "OpenVPN setup is running" +msgstr "Выполняется установка OpenVPN" + +#: plinth/modules/openvpn/templates/openvpn.html:108 +#, python-format +msgid "" +"To perform a secure setup, this process takes a very long time. Depending " +"on how fast your %(box_name)s is, it may even take hours. If the setup is " +"interrupted, you may start it again." +msgstr "" +"Чтобы выполнить безопасной установки, выполнение безопасной установки " +"занимает очень много времени. В зависимости от мощности вашего %(box_name)s, " +"это может занять продолжительное время. Если установка прерывается, вы " +"можете начать её снова." + +#: plinth/modules/openvpn/templates/openvpn.html:121 +msgid "OpenVPN server is running" +msgstr "Сервер OpenVPN выполняется" + +#: plinth/modules/openvpn/templates/openvpn.html:124 +msgid "OpenVPN server is not running" +msgstr "OpenVPN сервер не выполняется" + +#: plinth/modules/openvpn/views.py:124 +msgid "Setup completed." +msgstr "Установка завершена." + +#: plinth/modules/openvpn/views.py:126 +msgid "Setup failed." +msgstr "Установка не удалась." + +#: plinth/modules/owncloud/owncloud.py:38 +msgid "Enable ownCloud" +msgstr "Включить ownCloud" + +#: plinth/modules/owncloud/owncloud.py:44 +#: plinth/modules/owncloud/templates/owncloud.html:26 +msgid "File Hosting (ownCloud)" +msgstr "Файловый хостинг (ownCloud)" + +#: plinth/modules/owncloud/owncloud.py:51 +#: plinth/modules/owncloud/owncloud.py:80 +msgid "ownCloud" +msgstr "оwnCloud" + +#: plinth/modules/owncloud/owncloud.py:97 +msgid "ownCloud enabled" +msgstr "ownCloud включен" + +#: plinth/modules/owncloud/owncloud.py:100 +msgid "ownCloud disabled" +msgstr "ownCloud выключен" + +#: plinth/modules/owncloud/templates/owncloud.html:29 +msgid "" +"ownCloud gives you universal access to your files through a web interface or " +"WebDAV. It also provides a platform to easily view & sync your contacts, " +"calendars and bookmarks across all your devices and enables basic editing " +"right on the web. Installation has minimal server requirements, doesn't need " +"special permissions and is quick. ownCloud is extendable via a simple but " +"powerful API for applications and plugins." +msgstr "" +"ownCloud дает вам всеобщий доступ к вашим файлам через веб-интерфейс или " +"WebDAV. Он также предоставляет платформу для простого просмотра и " +"синхронизации ваших контактов, календарей и закладок между вашими " +"устройствами и включает базовое редактирование онлайн. Установка имеет " +"минимальные системные требования, не требует особых разрешений и быстра. " +"ownCloud расширяется за счет простых, но мощных приложений и плагинов." + +#: plinth/modules/owncloud/templates/owncloud.html:41 +msgid "" +"When enabled, the ownCloud installation will be available from /owncloud path on the web server. Visit this URL to set up " +"the initial administration account for ownCloud." +msgstr "" +"Когда включен, установка ownCloud доступна по адресу /owncloud на веб-сервере. Посетите данный URL для начальной настройки " +"администратора ownCloud." + +#: plinth/modules/owncloud/templates/owncloud.html:59 +msgid "Apply changes" +msgstr "Применить изменения" + +#: plinth/modules/pagekite/__init__.py:35 plinth/modules/pagekite/views.py:46 +msgid "Public Visibility (PageKite)" +msgstr "Открытая видимость (PageKite)" + +#: plinth/modules/pagekite/forms.py:46 +msgid "Enable PageKite" +msgstr "Включить PageKite" + +#: plinth/modules/pagekite/forms.py:49 +msgid "Server domain" +msgstr "Домен сервера" + +#: plinth/modules/pagekite/forms.py:51 +msgid "" +"Select your pagekite server. Set \"pagekite.net\" to use the default " +"pagekite.net server." +msgstr "" +"Выберите ваш сервер pagekite. Введите «pagekite.net», чтобы использовать " +"стандартный веб-сервер pagekite.net." + +#: plinth/modules/pagekite/forms.py:55 +msgid "Server port" +msgstr "Порт сервера" + +#: plinth/modules/pagekite/forms.py:56 +msgid "Port of your pagekite server (default: 80)" +msgstr "Порт сервера pagekite (по умолчанию: 80)" + +#: plinth/modules/pagekite/forms.py:58 +msgid "Kite name" +msgstr "Имя Kite" + +#: plinth/modules/pagekite/forms.py:59 +msgid "Example: mybox.pagekite.me" +msgstr "Пример: mybox.pagekite.me" + +#: plinth/modules/pagekite/forms.py:62 +msgid "Invalid kite name" +msgstr "Недопустимое имя kite" + +#: plinth/modules/pagekite/forms.py:65 +msgid "Kite secret" +msgstr "Кайт секрет" + +#: plinth/modules/pagekite/forms.py:67 +msgid "" +"A secret associated with the kite or the default secret for your account if " +"no secret is set on the kite." +msgstr "" +"Секрет, связанный с kite или секрет по умолчанию для вашей учетной записи, " +"если не секрет устанавливается на kite." + +#: plinth/modules/pagekite/forms.py:83 +msgid "Kite details set" +msgstr "Kite изменить детали" + +#: plinth/modules/pagekite/forms.py:90 +msgid "Pagekite server set" +msgstr "Смена сервера Pagekite" + +#: plinth/modules/pagekite/forms.py:96 +msgid "PageKite enabled" +msgstr "PageKite включен" + +#: plinth/modules/pagekite/forms.py:99 +msgid "PageKite disabled" +msgstr "PageKite выключен" + +#: plinth/modules/pagekite/forms.py:135 +#, python-brace-format +msgid "Service enabled: {name}" +msgstr "Включена служба: {name}" + +#: plinth/modules/pagekite/forms.py:139 +#, python-brace-format +msgid "Service disabled: {name}" +msgstr "Служба выключена: {name}" + +#: plinth/modules/pagekite/forms.py:150 +msgid "protocol" +msgstr "протокол" + +#: plinth/modules/pagekite/forms.py:153 +msgid "external (frontend) port" +msgstr "внешний (frontend) порт" + +#: plinth/modules/pagekite/forms.py:156 +msgid "internal (freedombox) port" +msgstr "Внутренний (freedombox) порт" + +#: plinth/modules/pagekite/forms.py:158 +msgid "Enable Subdomains" +msgstr "Включить поддомены" + +#: plinth/modules/pagekite/forms.py:191 +msgid "Deleted custom service" +msgstr "Удалить пользовательские службы" + +#: plinth/modules/pagekite/forms.py:225 +msgid "" +"This service is available as a standard service. Please use the \"Standard " +"Services\" page to enable it." +msgstr "" +"Этот сервис доступна как стандартная служба. Пожалуйста, использутей " +"страницу \"Стандартные службы\" чтобы включить её." + +#: plinth/modules/pagekite/forms.py:234 +msgid "Added custom service" +msgstr "Добавить пользовательскую службу" + +#: plinth/modules/pagekite/forms.py:237 +msgid "This service already exists" +msgstr "Эта служба уже существует" + +#: plinth/modules/pagekite/templates/pagekite_configure.html:33 +msgid "PageKite Account" +msgstr "Учетная запись PageKite" + +#: plinth/modules/pagekite/templates/pagekite_configure.html:41 +msgid "Save settings" +msgstr "Сохранить настройки" + +#: plinth/modules/pagekite/templates/pagekite_custom_services.html:44 +msgid "" +"Warning:
Your PageKite frontend server may not support all the " +"protocol/port combinations that you are able to define here. For example, " +"HTTPS on ports other than 443 is known to cause problems." +msgstr "" +"Предупреждение:
Ваш PageKite frontend сервер может не " +"поддерживать все комбинаци порта протокола, которые вы ввели здесь. Например " +"HTTPS на порты, отличные от 443 могут вызвать проблемы." + +#: plinth/modules/pagekite/templates/pagekite_custom_services.html:56 +msgid "Create a custom service" +msgstr "Создание пользовательской службы" + +#: plinth/modules/pagekite/templates/pagekite_custom_services.html:64 +msgid "Add Service" +msgstr "Добавление службы" + +#: plinth/modules/pagekite/templates/pagekite_custom_services.html:71 +msgid "Existing custom services" +msgstr "Существующие пользовательские службы" + +#: plinth/modules/pagekite/templates/pagekite_custom_services.html:74 +msgid "You don't have any Custom Services enabled" +msgstr "У вас нет включенных пользовательских служб" + +#: plinth/modules/pagekite/templates/pagekite_custom_services.html:89 +#, python-format +msgid "connected to %(backend_host)s:%(backend_port)s" +msgstr "Подключен к %(backend_host)s%(backend_port)s" + +#: plinth/modules/pagekite/templates/pagekite_custom_services.html:101 +msgid "Delete this service" +msgstr "Удалить эту службу" + +#: plinth/modules/pagekite/templates/pagekite_introduction.html:26 +#, python-format +msgid "" +"PageKite is a system for exposing %(box_name)s services when you don't have " +"a direct connection to the Internet. You only need this if your %(box_name)s " +"services are unreachable from the rest of the Internet. This includes the " +"following situations:" +msgstr "" +"PageKite это система для предоставления служб %(box_name)s, когда вы не " +"имеет прямого доступа к интернету. Вам нужно это если службы %(box_name)s " +"недоступны от остальной части интернета. Это включает в себя следующие " +"ситуации:" + +#: plinth/modules/pagekite/templates/pagekite_introduction.html:37 +#, python-format +msgid "%(box_name)s is behind a restricted firewall." +msgstr "%(box_name)s ограничены брандмауэром." + +#: plinth/modules/pagekite/templates/pagekite_introduction.html:43 +#, python-format +msgid "" +"%(box_name)s is connected to a (wireless) router which you don't control." +msgstr "" +"%(box_name)s подключен к маршрутизатору (беспроводному), который вы не " +"контролируете." + +#: plinth/modules/pagekite/templates/pagekite_introduction.html:50 +msgid "" +"Your ISP does not provide you an external IP address and instead provides " +"Internet connection through NAT." +msgstr "" +"Ваш провайдер не предоставляет вам внешний IP-адрес и вместо этого " +"обеспечивает подключение к Интернету через NAT." + +#: plinth/modules/pagekite/templates/pagekite_introduction.html:57 +msgid "" +"Your ISP does not provide you a static IP address and your IP address " +"changes evertime you connect to Internet." +msgstr "" +"Ваш провайдер не предоставляет вам статический IP-адрес и ваш IP адрес " +"изменяется каждый раз при подключении к Интернету." + +#: plinth/modules/pagekite/templates/pagekite_introduction.html:63 +msgid "Your ISP limits incoming connections." +msgstr "Ваш провайдер ограничивает входящие соединения." + +#: plinth/modules/pagekite/templates/pagekite_introduction.html:67 +#, python-format +msgid "" +"PageKite works around NAT, firewalls and IP-address limitations by using a " +"combination of tunnels and reverse proxies. You can use any pagekite service " +"provider, for example pagekite.net. In " +"future it might be possible to use your buddy's %(box_name)s for this." +msgstr "" +"PageKite работает вокруг NAT, брандмауэра и ограничения IP-адреса, используя " +"комбинацию туннелей и обратного прокси. Можно использовать любого поставщик " +"услуг pagekite, например pagekite.net/ " +"В будущем, для этого возможно будет использовать %(box_name)s вашего " +"приятеля." + +#: plinth/modules/pagekite/templates/pagekite_introduction.html:78 +#: plinth/modules/pagekite/views.py:36 +msgid "Configure PageKite" +msgstr "Настройка PageKite" + +#: plinth/modules/pagekite/templates/pagekite_standard_services.html:40 +msgid "Warning:
" +msgstr "Предупреждение
" + +#: plinth/modules/pagekite/templates/pagekite_standard_services.html:43 +msgid "" +"Published services are accessible and attackable from the evil internet." +msgstr "Публичные службы доступны и уязвимы из злого интернета." + +#: plinth/modules/pagekite/templates/pagekite_standard_services.html:58 +msgid "Save Services" +msgstr "Сохранить службы" + +#: plinth/modules/pagekite/utils.py:53 +msgid "Web Server (HTTP)" +msgstr "Веб-сервер (HTTP)" + +#: plinth/modules/pagekite/utils.py:54 +#, python-brace-format +msgid "Site will be available at http://{0}" +msgstr "Сайт будет доступен на http://{0}" + +#: plinth/modules/pagekite/utils.py:63 +msgid "Web Server (HTTPS)" +msgstr "Веб-сервер (HTTPS)" + +#: plinth/modules/pagekite/utils.py:64 +#, python-brace-format +msgid "Site will be available at https://{0}" +msgstr "Сайт будет доступен на https://{0}" + +#: plinth/modules/pagekite/utils.py:73 +msgid "Secure Shell (SSH)" +msgstr "Sеcure Shell (SSH)" + +#: plinth/modules/pagekite/utils.py:74 +msgid "" +"See SSH client setup instructions" +msgstr "" +"Смотрите инструкции SSH клиента" + +#: plinth/modules/pagekite/utils.py:276 +msgid "Pagekite" +msgstr "Pаgekite" + +#: plinth/modules/pagekite/views.py:34 +msgid "About PageKite" +msgstr "О PageKite" + +#: plinth/modules/pagekite/views.py:38 +msgid "Standard Services" +msgstr "Стандартные службы" + +#: plinth/modules/pagekite/views.py:40 +msgid "Custom Services" +msgstr "Пользовательские службы" + +#: plinth/modules/power/__init__.py:32 plinth/modules/power/views.py:33 +#: plinth/modules/power/views.py:47 plinth/modules/power/views.py:62 +msgid "Power" +msgstr "Pоwer" + +#: plinth/modules/power/templates/power.html:29 +msgid "Restart or shut down the system." +msgstr "Перезагрузка или завершение работы системы." + +#: plinth/modules/power/templates/power.html:34 +msgid "Restart »" +msgstr "Рестарт »" + +#: plinth/modules/power/templates/power.html:37 +msgid "Shut Down »" +msgstr "Выключить »" + +#: plinth/modules/power/templates/power_restart.html:29 +msgid "" +"Are you sure you want to restart? You will not be able to access this web " +"interface for a few minutes until the system is restarted." +msgstr "" +"Вы действительно хотите перезагрузиться? Вы не будете иметь доступ к веб-" +"интерфейсу на время перезагрузки системы." + +#: plinth/modules/power/templates/power_restart.html:42 +msgid "Restart Now" +msgstr "Перезагрузить сейчас" + +#: plinth/modules/power/templates/power_shutdown.html:29 +msgid "" +"Are you sure you want to shut down? You will not be able to access this web " +"interface after shut down." +msgstr "" +"Вы действительно хотите выключить. Вы не будете иметь доступ к веб-" +"интерфейсу после выключения." + +#: plinth/modules/power/templates/power_shutdown.html:41 +msgid "Shut Down Now" +msgstr "Завершить работу сейчас" + +#: plinth/modules/privoxy/__init__.py:39 +#: plinth/modules/privoxy/templates/privoxy.html:26 +#: plinth/modules/privoxy/views.py:59 +msgid "Web Proxy (Privoxy)" +msgstr "Веб-прокси (Privoxy)" + +#: plinth/modules/privoxy/__init__.py:44 +msgid "Privoxy Web Proxy" +msgstr "Privoxy Web-прокси" + +#: plinth/modules/privoxy/__init__.py:86 +#, python-brace-format +msgid "Access {url} with proxy {proxy} on tcp{kind}" +msgstr "Доступ к {url} с прокси {proxy} на tcp {kind}" + +#: plinth/modules/privoxy/forms.py:29 +msgid "Enable Privoxy" +msgstr "Включить Privoxy" + +#: plinth/modules/privoxy/templates/privoxy.html:29 +msgid "" +"Privoxy is a non-caching web proxy with advanced filtering capabilities for " +"enhancing privacy, modifying web page data and HTTP headers, controlling " +"access, and removing ads and other obnoxious Internet junk." +msgstr "" +"Privoxy это не-кеширующий веб-прокси с расширенными возможностями фильтрации " +"для повышения конфиденциальности, изменения веб-страницы данных и заголовков " +"HTTP, контроля доступа и удаления рекламы и прочего неприятного мусора в " +"интернете." + +#: plinth/modules/privoxy/templates/privoxy.html:38 +#, python-format +msgid "" +"You can use Privoxy by modifying your browser proxy settings to your " +"%(box_name)s hostname (or IP address) with port 8118. While using Privoxy, " +"you can see its configuration details and documentation at http://config.privoxy.org/ or http://p.p." +msgstr "" +"Вы можете использовать Privoxy, изменив настройки прокси в вашем браузере на " +"имя хоста %(box_name)s (или IP адрес) с портом 8118. При использовании " +"Privoxy вы можете увидеть его детали настройки и документацию на http://config.privoxy.org или http://p.p." + +#: plinth/modules/privoxy/templates/privoxy.html:53 +msgid "Privoxy is running" +msgstr "Privoxy выполняется" + +#: plinth/modules/privoxy/templates/privoxy.html:56 +msgid "Privoxy is not running" +msgstr "Privoxy не запущена" + +#: plinth/modules/quassel/__init__.py:36 +#: plinth/modules/quassel/templates/quassel.html:26 +#: plinth/modules/quassel/views.py:54 +msgid "IRC Client (Quassel)" +msgstr "IRC-клиент (Quassel)" + +#: plinth/modules/quassel/__init__.py:41 +msgid "Quassel IRC Client" +msgstr "Quassel IRC-клиент" + +#: plinth/modules/quassel/forms.py:29 +msgid "Enable Quassel core service" +msgstr "Включение службы ядра Quassel" + +#: plinth/modules/quassel/templates/quassel.html:29 +#, python-format +msgid "" +"Quassel is an IRC application that is split into two parts, a \"core\" and a " +"\"client\". This allows the core to remain connected to IRC servers, and to " +"continue receiving messages, even when the client is disconnected. " +"%(box_name)s can run the Quassel core service keeping you always online and " +"one or more Quassel clients from a desktop or a mobile can be used to " +"connect and disconnect from it." +msgstr "" +"Quassel это приложение IRC, разделено на две части, \"ядро\" и \"клиент\". " +"Это позволяет ядру чтобы оставаться подключенным к IRC серверу и продолжать " +"получать сообщения, даже при отключении клиента. %(box_name)s может " +"запустить ядро службы Quassel, держа всегда онлайн один или несколько " +"клиентов. Для этого могут использоваться как клиенты настольного компьютера, " +"так и мобильные версии." + +#: plinth/modules/quassel/templates/quassel.html:41 +msgid "" +"You can connect to your Quassel core on the default Quassel port 4242. " +"Clients to connect to Quassel from your desktop and mobile devices are available." +msgstr "" +"Порт Quassel для подключения по умолчанию является 4242. Клиенты для " +"подключения к Quassel доступны по адресу для десктопов и мобильных устройств." + +#: plinth/modules/quassel/templates/quassel.html:55 +msgid "Quassel core service is running" +msgstr "Основная служба Quassel запущена" + +#: plinth/modules/quassel/templates/quassel.html:58 +msgid "Quassel core service is not running" +msgstr "Основная служба Quassel не запущена" + +#: plinth/modules/repro/__init__.py:36 +#: plinth/modules/repro/templates/repro.html:26 +#: plinth/modules/repro/views.py:55 +msgid "SIP Server (repro)" +msgstr "Сервер SIP (repro)" + +#: plinth/modules/repro/__init__.py:41 +msgid "repro SIP Server" +msgstr "repro SIP Сервер" + +#: plinth/modules/repro/forms.py:29 +msgid "Enable repro service" +msgstr "Включить службу repro" + +#: plinth/modules/repro/templates/repro.html:29 +#, fuzzy +msgid "" +"repro provides various SIP services that a SIP softphone can utilize to " +"provide audio and video calls as well as presence and instant messaging. " +"repro provides a server and SIP user accounts that clients can use to let " +"their presence known. It also acts as a proxy to federate SIP " +"communications to other servers on the Internet similar to email." +msgstr "" +"repro предоставляет различные услуги SIP, SIP софтфон можно использовать для " +"предоставления аудио и видео звонков, для мгновенных сообщений. repro " +"предоставляет сервер и пользовательскую учетную запись SIP. Он также " +"действует как прокси-сервер федерации SIP сообщения на другие серверы в " +"Интернете, похож на электронную почту." + +#: plinth/modules/repro/templates/repro.html:39 +msgid "" +"To make SIP calls, a client application is needed. Available clients include " +"Jitsi (for computers) and CSipSimple (for Android phones)." +msgstr "" +"Чтобы сделать SIP звонки, требуется клиентское приложение. Доступные " +"клиенты включают Jitsi (для компьютеров) " +"и CSipSimple (для Android телефонов)." + +#: plinth/modules/repro/templates/repro.html:48 +msgid "" +"Note: Before using repro, domains and users will need to " +"be configured using the web-based " +"configuration panel. Users in the admin group will be able to " +"log in to the repro configuration panel. After setting the domain, it is " +"required to restart the repro service. Disable the service and re-enable it." +msgstr "" +"Примечание Перед использованием repro. домены и " +"пользователей необходиимо настроить с помощью веб-панель настроек Пользователей в группе admin могут иметь " +"доступ к панели настроек repro. Аосле настройки домена, необходимо " +"перезапустить службу repro. Отключить и снова включить её." + +#: plinth/modules/repro/templates/repro.html:63 +msgid "repro service is running" +msgstr "служба repro запущена" + +#: plinth/modules/repro/templates/repro.html:66 +msgid "repro service is not running" +msgstr "служба repro не запущена" + +#: plinth/modules/restore/__init__.py:36 +#: plinth/modules/restore/templates/restore_index.html:26 +#: plinth/modules/restore/views.py:46 +msgid "Unhosted Storage (reStore)" +msgstr "Unhosted хранилище (reStore)" + +#: plinth/modules/restore/__init__.py:41 +msgid "reStore" +msgstr "rеStore" + +#: plinth/modules/restore/forms.py:29 +msgid "Enable reStore" +msgstr "Включить reStore" + +#: plinth/modules/restore/templates/restore_index.html:29 +#, python-format +msgid "" +"reStore is a server for unhosted web " +"applications. The idea is to uncouple web applications from data. No " +"matter where a web application is served from, the data can be stored on an " +"unhosted storage server of user's choice. With reStore, your %(box_name)s " +"becomes your unhosted storage server." +msgstr "" +"reStore это сервер для unhosted веб-" +"приложений. Идея заключается в том, чтобы расцепить веб-приложений от " +"данных. Независимо от того, где веб-приложение выполняется, данные могут " +"храниться на сервере хранения по выбору пользователя. С reStore, ваш " +"%(box_name)s становится сервером хранения unhosted." + +#: plinth/modules/restore/templates/restore_index.html:40 +msgid "" +"You can create and edit accounts in the reStore web-" +"interface." +msgstr "" +"Можно создавать и редактировать учетные записи в веб-" +"интерфейс reStore." + +#: plinth/modules/roundcube/__init__.py:36 +#: plinth/modules/roundcube/templates/roundcube.html:26 +#: plinth/modules/roundcube/views.py:64 +msgid "Email Client (Roundcube)" +msgstr "Почтовый клиент (Roundcube)" + +#: plinth/modules/roundcube/forms.py:29 +msgid "Enable Roundcube" +msgstr "Включить Roundcube" + +#: plinth/modules/roundcube/templates/roundcube.html:29 +msgid "" +"Roundcube webmail is a browser-based multilingual IMAP client with an " +"application-like user interface. It provides full functionality you expect " +"from an email client, including MIME support, address book, folder " +"manipulation, message searching and spell checking." +msgstr "" +"Roundcube webmail это осованый на браузере многоязычный IMAP клиент с " +"пользовательским интерфейсом. Это предоставляет полную функциональность, " +"которую вы ожидаете от почтового клиента, включая поддержку MIME, адресную " +"книгу, управление папками, поиск сообщений и проверку орфографии." + +#: plinth/modules/roundcube/templates/roundcube.html:39 +msgid "" +"You can access Roundcube from /roundcube. Provide " +"the username and password of the email account you wish to access followed " +"by the domain name of the IMAP server for your email provider, like " +"imap.example.com. For IMAP over SSL (recommended), fill the " +"server field like imaps://imap.example.com." +msgstr "" +"Вы можете получить доступ к Roundcube на /roundcube. Предоставьте имя пользователя и пароль от учетной записи " +"электронной почты с указанием доменного имени IMAP сервера вашего провайдера " +"электронной почты, например imap.example.com Для IMAP оver SSL " +"(рекомендуется) заполните поле сервера, например " +"imaps://imap.example.com." + +#: plinth/modules/roundcube/templates/roundcube.html:50 +msgid "" +"For Gmail, username will be your Gmail address, password will be your Google " +"account password and server will be imaps://imap.gmail.com. " +"Note that you will also need to enable \"Less secure apps\" in your Google " +"account settings (https://www.google.com/settings/security/lesssecureapps)." +msgstr "" +"Для Gmail имя пользователя будет ваш адрес Gmail, пароль будет пароль " +"учетной записи Google, и сервер будет imaps://imap.gmail.com. " +"Обратите внимание, что вам также нужно включить \"Less secure apps\" в в " +"настройках аккаунта Google (https://www.google.com/settings/security/lesssecureapps)." + +#: plinth/modules/shaarli/__init__.py:37 +#: plinth/modules/shaarli/templates/shaarli.html:26 +#: plinth/modules/shaarli/views.py:52 +msgid "Bookmarks (Shaarli)" +msgstr "Закладки (Shaarli)" + +#: plinth/modules/shaarli/__init__.py:42 +msgid "Shaarli" +msgstr "Shаarli" + +#: plinth/modules/shaarli/forms.py:29 +msgid "Enable Shaarli" +msgstr "Включить Shaarli" + +#: plinth/modules/shaarli/templates/shaarli.html:28 +msgid "Shaarli allows you to save and share bookmarks." +msgstr "Shaarli позволяет вам сохранять и обмениваться закладками." + +#: plinth/modules/shaarli/templates/shaarli.html:31 +msgid "" +"When enabled, Shaarli will be available from /shaarli path on the web server. Note that Shaarli only supports a single user " +"account, which you will need to setup on the initial visit." +msgstr "" +"Когда включен, Shaarli будет доступен на /shaarli " +"на веб-сервере. Обратите внимание, что Shaarli поддерживает только одну " +"учетную запись для начальной установки." + +#: plinth/modules/system/system.py:26 +msgid "System" +msgstr "Система" + +#: plinth/modules/system/system.py:33 +#: plinth/modules/system/templates/system.html:25 +#: plinth/templates/base.html:109 +msgid "System Configuration" +msgstr "Конфигурация системы" + +#: plinth/modules/system/templates/system.html:28 +#, python-format +msgid "Here you can administrate the underlying system of your %(box_name)s." +msgstr "Здесь вы можете администрировать базовую систему вашего %(box_name)s." + +#: plinth/modules/system/templates/system.html:35 +#, python-format +msgid "" +"The options affect the %(box_name)s at its most general level, so be careful!" +msgstr "" +"Параметры влияют на %(box_name)s на основном уровне, так что будьте " +"осторожны!" + +#: plinth/modules/tor/__init__.py:48 plinth/modules/tor/templates/tor.html:35 +msgid "Anonymity Network (Tor)" +msgstr "Анонимная Сеть (Tor)" + +#: plinth/modules/tor/__init__.py:53 +msgid "Tor Anonymity Network" +msgstr "Tоr Anonymity Network" + +#: plinth/modules/tor/__init__.py:58 +msgid "Tor Bridge Relay" +msgstr "Ретранслятор Tor типа мост" + +#: plinth/modules/tor/__init__.py:76 plinth/modules/tor/views.py:144 +msgid "Tor Hidden Service" +msgstr "Скрытый сервис Tor" + +#: plinth/modules/tor/__init__.py:222 +msgid "Tor relay port available" +msgstr "Доступен порт трансляции Tor" + +#: plinth/modules/tor/__init__.py:230 +msgid "Obfs3 transport registered" +msgstr "Obfs3 транспорт зарегестрирован" + +#: plinth/modules/tor/__init__.py:236 +msgid "Obfs4 transport registered" +msgstr "Obfs4 транспорт зарегистрирован" + +#: plinth/modules/tor/__init__.py:273 +#, python-brace-format +msgid "Access URL {url} on tcp{kind} via Tor" +msgstr "Доступ к {url} по tcp{kind} через Tor" + +#: plinth/modules/tor/__init__.py:284 +#, python-brace-format +msgid "Confirm Tor usage at {url} on tcp{kind}" +msgstr "Подтверждение использования Tor в {url} по tcp {kind}" + +#: plinth/modules/tor/forms.py:32 +msgid "Enable Tor" +msgstr "Включить Tor" + +#: plinth/modules/tor/forms.py:35 +msgid "Enable Tor Hidden Service" +msgstr "Включить скрытый сервис Tor" + +#: plinth/modules/tor/forms.py:38 +#, python-brace-format +msgid "" +"A hidden service will allow {box_name} to provide selected services (such as " +"ownCloud or chat) without revealing its location." +msgstr "" +"Скрытый сервис позволит {box_name} предоставлять услуги, (например, ownCloud " +"или чат) не раскрывая его расположение." + +#: plinth/modules/tor/forms.py:42 +msgid "Download software packages over Tor" +msgstr "Скачать пакеты программного обеспечения через Tor" + +#: plinth/modules/tor/forms.py:44 +msgid "" +"When enabled, software will be downloaded over the Tor network for " +"installations and upgrades. This adds a degree of privacy and security " +"during software downloads." +msgstr "" +"Когда включен, программное обеспечение будет загруженно через сеть Tor для " +"установки и обновления. Это добавляет определенную степень безопасности и " +"конфиденциальности во время загрузки программного обеспечения." + +#: plinth/modules/tor/templates/tor.html:38 +msgid "" +"Tor is an anonymous communication system. You can learn more about it from " +"the Tor Project website. For " +"best protection when web surfing, the Tor Project recommends that you use " +"the " +"Tor Browser." +msgstr "" +"Tor-это система анонимного общения. Вы можете узнать больше об этом на веб-" +"сайте Tor Project. Для лучшей " +"защиты, когда веб-серфинга, проект Tor рекомендует использовать Tor Browser." + +#: plinth/modules/tor/templates/tor.html:54 +msgid "Tor configuration is being updated" +msgstr "В настоящее время обновляется конфигурация Tor" + +#: plinth/modules/tor/templates/tor.html:62 +msgid "Tor is running" +msgstr "Tor запущен" + +#: plinth/modules/tor/templates/tor.html:65 +msgid "Tor is not running" +msgstr "Tor не запущен" + +#: plinth/modules/tor/templates/tor.html:77 +msgid "Hidden Service" +msgstr "Скрытая Служба" + +#: plinth/modules/tor/templates/tor.html:78 +#: plinth/modules/tor/templates/tor.html:120 +msgid "Port" +msgstr "Порт" + +#: plinth/modules/tor/templates/tor.html:103 +msgid "Bridge" +msgstr "Мост" + +#: plinth/modules/tor/templates/tor.html:106 +#, python-format +msgid "" +"Your %(box_name)s is configured as a Tor bridge with obfsproxy, so it can " +"help circumvent censorship. If your %(box_name)s is behind a router or " +"firewall, you should make sure the following ports are open, and port-" +"forwarded, if necessary:" +msgstr "" +"Ваш %(box_name)s настроен как Tor-мост с obfsproxy, поэтому он может помочь " +"обойти цензуру. Если ваш %(box_name)s находится за маршрутизатором или " +"брандмауэром, вы должны убедиться, что следующие порты являются открытыми и " +"проброшены, если необходимо:" + +#: plinth/modules/tor/templates/tor.html:119 +msgid "Service" +msgstr "Служба" + +#: plinth/modules/tor/templates/tor.html:135 +msgid "SOCKS" +msgstr "SОCKS" + +#: plinth/modules/tor/templates/tor.html:138 +#, python-format +msgid "A Tor SOCKS port is available on your %(box_name)s on TCP port 9050." +msgstr "Порт Tor SOCKS вашего %(box_name)s доступен по TCP port 9050." + +#: plinth/modules/tor/views.py:68 +msgid "Tor Control Panel" +msgstr "Панель управления Tor" + +#: plinth/modules/tor/views.py:79 +#, python-brace-format +msgid "Action error: {0} [{1}] [{2}]" +msgstr "Ошибка действий: {0}{1}{2}" + +#: plinth/modules/tor/views.py:148 +msgid "Configuration updated." +msgstr "Конфигурация обновлена." + +#: plinth/modules/tor/views.py:150 +msgid "An error occurred during configuration." +msgstr "Произошла ошибка во время настройки." + +#: plinth/modules/transmission/__init__.py:38 +#: plinth/modules/transmission/templates/transmission.html:26 +#: plinth/modules/transmission/views.py:67 +msgid "BitTorrent (Transmission)" +msgstr "BitTorrent (Transmissiоn)" + +#: plinth/modules/transmission/__init__.py:43 +msgid "Transmission BitTorrent" +msgstr "BitTorrent Transmissiоn" + +#: plinth/modules/transmission/forms.py:29 +msgid "Enable Transmission daemon" +msgstr "Включить демона Transmission" + +#: plinth/modules/transmission/forms.py:33 +msgid "Download directory" +msgstr "Папка для загрузок" + +#: plinth/modules/transmission/forms.py:34 +msgid "" +"Directory where downloads are saved. If you change the default directory, " +"ensure that the new directory exists and is writable by \"debian-transmission" +"\" user." +msgstr "" +"Каталог, где хранятся загрузки. Если изменить каталог по умолчанию, " +"убедитесь, что новый каталог существует и доступен для записи пользователем " +"\"debian-transmission\" ." + +#: plinth/modules/transmission/forms.py:40 +msgid "Username to login to the web interface." +msgstr "Имя пользователя для входа на веб-интерфейс." + +#: plinth/modules/transmission/forms.py:44 +msgid "" +"Password to login to the web interface. Current password is shown in a " +"hashed format. To set a new password, enter the password in plain text." +msgstr "" +"Пароль для входа на веб-интерфейс. Текущий пароль отображается в " +"хэшированном формате. Чтобы задать новый пароль, введите пароль в виде " +"обычного текста." + +#: plinth/modules/transmission/templates/transmission.html:29 +msgid "" +"BitTorrent is a peer-to-peer file sharing protocol. Transmission daemon " +"handles Bitorrent file sharing. Note that BitTorrent is not anonymous." +msgstr "" +"BitTorrent является протокол обмена файлами peer-to-peer. Демон передачи " +"обрабатывает обмен файлами Bitorrent. Обратите внимание, что BitTorrent не " +"является анонимным." + +#: plinth/modules/transmission/templates/transmission.html:37 +msgid "" +"Access the web interface at /transmission." +msgstr "Доступ к веб-интерфейсу на /transmission." + +#: plinth/modules/transmission/templates/transmission.html:47 +msgid "Transmission daemon is running" +msgstr "Демон Transmission выполняется" + +#: plinth/modules/transmission/templates/transmission.html:50 +msgid "Transmission daemon is not running." +msgstr "Демон Transmission не выполняется." + +#: plinth/modules/upgrades/__init__.py:33 +msgid "Software Upgrades" +msgstr "Обновления программного обеспечения" + +#: plinth/modules/upgrades/forms.py:29 +msgid "Enable automatic upgrades" +msgstr "Включение автоматического обновления" + +#: plinth/modules/upgrades/forms.py:30 +msgid "" +"When enabled, the unattended-upgrades program will be run once per day. It " +"will attempt to perform any package upgrades that are available." +msgstr "" +"При включении автоматического обновления программа будет запускаться один " +"раз в день. Он будет пытаться обновить любой пакет. который будет доступен." + +#: plinth/modules/upgrades/templates/upgrades.html:37 +msgid "" +"Upgrades install the latest software and security updates. When automatic " +"upgrades are enabled, upgrades are automatically run every night. You don't " +"normally need to start the upgrade process." +msgstr "" +"Обновления устанавливает последнее программное обеспечение и обновления " +"безопасности. Когда включены автоматические обновления, они выполняются " +"каждую ночь. Обычно вам не нужно начать процесс обновления вручную." + +#: plinth/modules/upgrades/templates/upgrades.html:45 +msgid "" +"Depending on the number of packages to install, this may take a long time to " +"complete. While upgrades are in progress, you will not be able to install " +"other packages. During the upgrade, this web interface may be temporarily " +"unavailable and show an error. Refresh the page to continue." +msgstr "" +"В зависимости от количества пакетов для установки это может занять " +"продолжительное время до завершения. Во время обновления вы не сможете " +"установить другие пакеты. Во время обновления это веб-интерфейс может быть " +"временно недоступен и показывать ошибку. Обновите страницу, чтобы продолжить." + +#: plinth/modules/upgrades/templates/upgrades.html:58 +msgid "Upgrade now »" +msgstr "Обновить сейчас »" + +#: plinth/modules/upgrades/templates/upgrades.html:65 +msgid "A package manager is running." +msgstr "Диспетчер пакетов выполняется." + +#: plinth/modules/upgrades/templates/upgrades.html:70 +msgid "Recent log from upgrades:" +msgstr "Журнал обновлений:" + +#: plinth/modules/upgrades/views.py:36 plinth/modules/upgrades/views.py:66 +msgid "Automatic Upgrades" +msgstr "Автоматические обновления" + +#: plinth/modules/upgrades/views.py:38 +msgid "Upgrade Packages" +msgstr "Обновление пакетов" + +#: plinth/modules/upgrades/views.py:96 +msgid "Upgrade process started." +msgstr "Начался процесс обновления." + +#: plinth/modules/upgrades/views.py:99 +msgid "Starting upgrade failed." +msgstr "Сбой при запуске обновления." + +#: plinth/modules/upgrades/views.py:102 +msgid "Package Upgrades" +msgstr "Обновления Пакета" + +#: plinth/modules/upgrades/views.py:131 +#, python-brace-format +msgid "Error when configuring unattended-upgrades: {error}" +msgstr "Ошибка при настройке автоматического обновления: {error}" + +#: plinth/modules/upgrades/views.py:136 +msgid "Automatic upgrades enabled" +msgstr "Автоматические обновления включены" + +#: plinth/modules/upgrades/views.py:138 +msgid "Automatic upgrades disabled" +msgstr "Автоматические обновления отключены" + +#: plinth/modules/users/__init__.py:36 +msgid "Users and Groups" +msgstr "Пользователи и группы" + +#: plinth/modules/users/__init__.py:65 +#, python-brace-format +msgid "Check LDAP entry \"{search_item}\"" +msgstr "Проверьте запись LDAP \"{search_item}\"" + +#: plinth/modules/users/forms.py:28 +msgid "admin" +msgstr "admin" + +#: plinth/modules/users/forms.py:29 +msgid "wiki" +msgstr "Wiki" + +#: plinth/modules/users/forms.py:41 +msgid "Groups" +msgstr "Группы" + +#: plinth/modules/users/forms.py:45 +msgid "" +"Select which services should be available to the new user. The user will be " +"able to log in to services that support single sign-on through LDAP, if they " +"are in the appropriate group.

Users in the admin group will be " +"able to log in to all services. They can also log in to the system through " +"SSH and have administrative privileges (sudo)." +msgstr "" +"Выберите, какие службы должны быть доступны для нового пользователя. " +"Пользователь сможет войти в службы, которые поддерживают единый входа через " +"LDAP, если они находятся в соответствующих группах.

" +"Пользователи в группе администратора имеют доступ ко всем службам. Они также " +"могут войти в систему через SSH и иметь административные привилегии (sudo)." + +#: plinth/modules/users/forms.py:80 +#, python-brace-format +msgid "Failed to add new user to {group} group." +msgstr "Не удалось добавить нового пользователя в группу {group}." + +#: plinth/modules/users/forms.py:92 +msgid "SSH Keys" +msgstr "SSH ключи" + +#: plinth/modules/users/forms.py:96 +msgid "" +"Setting an SSH public key will allow this user to securely log in to the " +"system without using a password. You may enter multiple keys, one on each " +"line. Blank lines and lines starting with # will be ignored." +msgstr "" +"Установка открытого ключа SSH позволит пользователю безопасно войти в " +"систему, не используя пароль. Вы можете ввести несколько ключей, по одному " +"на каждой строке. Пустые строки и строки, начинающиеся с # будут " +"игнорироваться." + +#: plinth/modules/users/forms.py:136 +msgid "Renaming LDAP user failed." +msgstr "Переименование пользователя LDAP не удалось." + +#: plinth/modules/users/forms.py:148 +msgid "Failed to remove user from group." +msgstr "Не удалось удалить пользователя из группы." + +#: plinth/modules/users/forms.py:159 +msgid "Failed to add user to group." +msgstr "Не удалось добавить пользователя в группу." + +#: plinth/modules/users/forms.py:188 +msgid "Changing LDAP user password failed." +msgstr "Изменение LDAP пароля пользователя не удалось." + +#: plinth/modules/users/templates/users_change_password.html:27 +#, python-format +msgid "Change Password for %(username)s" +msgstr "Изменение пароля для %(username)s" + +#: plinth/modules/users/templates/users_change_password.html:40 +msgid "Save Password" +msgstr "Сохранить пароль" + +#: plinth/modules/users/templates/users_create.html:42 +#: plinth/modules/users/views.py:36 plinth/modules/users/views.py:56 +msgid "Create User" +msgstr "Создать пользователя" + +#: plinth/modules/users/templates/users_delete.html:26 +#: plinth/modules/users/views.py:110 +msgid "Delete User" +msgstr "Удаление пользователя" + +#: plinth/modules/users/templates/users_delete.html:29 +#, python-format +msgid "Delete user %(username)s permanently?" +msgstr "Окончательно удалить пользователя %(username)s?" + +#: plinth/modules/users/templates/users_delete.html:38 +#, python-format +msgid "Delete %(username)s" +msgstr "Удаление %(username)s" + +#: plinth/modules/users/templates/users_list.html:46 +#, python-format +msgid "Delete user %(username)s" +msgstr "Удалить пользователя %(username)s" + +#: plinth/modules/users/templates/users_list.html:53 +#, python-format +msgid "Edit user %(username)s" +msgstr "Редактирование пользователя %(username)s" + +#: plinth/modules/users/templates/users_update.html:39 +#, python-format +msgid "" +"Use the change password form to " +"change the password." +msgstr "" +"Используйте форму смены пароля для " +"смены пароля." + +#: plinth/modules/users/templates/users_update.html:53 +msgid "Save Changes" +msgstr "Сохранить изменения" + +#: plinth/modules/users/views.py:34 plinth/modules/users/views.py:69 +msgid "Users" +msgstr "Пользователи" + +#: plinth/modules/users/views.py:54 +#, python-format +msgid "User %(username)s created." +msgstr "Пользователь %(username)s создан." + +#: plinth/modules/users/views.py:78 +#, python-format +msgid "User %(username)s updated." +msgstr "Пользователь %(username)s обновлен." + +#: plinth/modules/users/views.py:79 +msgid "Edit User" +msgstr "Редактирование пользователя" + +#: plinth/modules/users/views.py:120 +#, python-brace-format +msgid "User {user} deleted." +msgstr "Пользователь {user} удален." + +#: plinth/modules/users/views.py:127 +msgid "Deleting LDAP user failed." +msgstr "Сбой при удалении LDAP пользователя." + +#: plinth/modules/users/views.py:136 +msgid "Change Password" +msgstr "Смена пароля" + +#: plinth/modules/users/views.py:137 +msgid "Password changed successfully." +msgstr "Пароль успешно изменен." + +#: plinth/modules/xmpp/__init__.py:41 plinth/modules/xmpp/__init__.py:46 +#: plinth/modules/xmpp/templates/xmpp.html:26 plinth/modules/xmpp/views.py:75 +msgid "Chat Server (XMPP)" +msgstr "Чат-сервер (XMPP)" + +#: plinth/modules/xmpp/forms.py:29 +msgid "Enable XMPP" +msgstr "Включить XMPP" + +#: plinth/modules/xmpp/templates/xmpp.html:29 +msgid "" +"XMPP is an open and standardized communication protocol. Here you can run " +"and configure your XMPP server, called ejabberd." +msgstr "" +"XMPP является открытым и стандартизированным коммуникационным протоколом. " +"Здесь вы можете запустить и настроить сервер XMPP, называемый ejabberd." + +#: plinth/modules/xmpp/templates/xmpp.html:36 +msgid "" +"To actually communicate, you can use the web client or " +"any other XMPP client." +msgstr "" +"Для общения вы можете использовать веб-клиент или иной " +"XMPP " +"клиент." + +#: plinth/modules/xmpp/templates/xmpp.html:45 +#, python-format +msgid "" +"Your XMPP server domain is set to %(domainname)s. User IDs will look " +"like username@%(domainname)s. You can setup your domain on the system " +"Configure page." +msgstr "" +"Ваш домен сервера XMPP имеет значение %(domainname)s Идентификаторы " +"пользователей будет выглядеть как username@%(domainname)s. Вы можете " +"настроить ваш домен на странице Настройка." + +#: plinth/modules/xmpp/templates/xmpp.html:55 +msgid "Launch web client" +msgstr "Запустить веб-клиент" + +#: plinth/modules/xmpp/templates/xmpp.html:63 +msgid "ejabberd is running" +msgstr "ejabberd запущен" + +#: plinth/modules/xmpp/templates/xmpp.html:66 +msgid "ejabberd is not running" +msgstr "ejabberd не запущен" + +#: plinth/network.py:39 +msgid "PPPoE" +msgstr "PPPоE" + +#: plinth/package.py:156 +msgid "packages not found" +msgstr "пакеты не найдены" + +#: plinth/package.py:263 +msgid "Installed and configured packages successfully." +msgstr "Установка и настройка пакетов завершена." + +#: plinth/package.py:268 +#, python-brace-format +msgid "Error installing packages: {string} {details}" +msgstr "Ошибка при установке пакетов: {string}{details}" + +#: plinth/service.py:73 +msgid "Web Server" +msgstr "Веб-сервер" + +#: plinth/service.py:74 +msgid "Web Server over Secure Socket Layer" +msgstr "Веб-сервер через Secure Socket Layer" + +#: plinth/service.py:76 +msgid "Secure Shell (SSH) Server" +msgstr "Secure Shell (SSH) сервер" + +#: plinth/service.py:79 +#, python-brace-format +msgid "{box_name} Web Interface (Plinth)" +msgstr "{box_name} Веб-интерфейс (Plinth)" + +#: plinth/templates/404.html:25 +msgid "404" +msgstr "404" + +#: plinth/templates/404.html:28 +#, python-format +msgid "Requested page %(request_path)s was not found." +msgstr "Запрошенная страница %(request_path)s не найдена." + +#: plinth/templates/404.html:34 +msgid "" +"If you believe this missing page should exist, please file a bug at the " +"Plinth project issue " +"tracker." +msgstr "" +"Если вы считаете, что эта недостающая страница должна существовать, " +"пожалуйста отправите сообщение об ошибке на issue tracker." + +#: plinth/templates/500.html:25 +msgid "500" +msgstr "500" + +#: plinth/templates/500.html:28 +msgid "" +"This is an internal error and not something you caused or can fix. Please " +"report the error on the bug tracker so we can fix it." +msgstr "" +"Это внутренняя ошибка, не Вы были её причиной и вряд ли можете её устранить. " +"Пожалуйста, сообщите об ошибке на bug tracker и мы исправим " +"это." + +#: plinth/templates/base.html:49 +#, python-format +msgid "Plinth administrative interface for the %(box_name)s" +msgstr "Административный интерфейс Plinth для %(box_name)s" + +#: plinth/templates/base.html:83 +msgid "Toggle navigation" +msgstr "Отображение навигации" + +#: plinth/templates/base.html:125 plinth/templates/base.html.py:126 +msgid "Change password" +msgstr "Смена пароля" + +#: plinth/templates/base.html:129 plinth/templates/base.html.py:130 +#: plinth/templates/base.html:143 plinth/templates/base.html.py:145 +msgid "Log out" +msgstr "Выход" + +#: plinth/templates/base.html:135 plinth/templates/base.html.py:137 +msgid "Log in" +msgstr "Войти" + +#: plinth/templates/login.html:35 +msgid "Login" +msgstr "Логин" + +#: plinth/templates/package_install.html:35 +msgid "Installation" +msgstr "Установка" + +#: plinth/templates/package_install.html:40 +msgid "" +"This feature requires addtional packages to be installed. Do you wish to " +"install them?" +msgstr "" +"Эта функция требует дополнительные пакеты для установки. Вы хотите их " +"установить?" + +#: plinth/templates/package_install.html:49 +msgid "Package" +msgstr "Пакет" + +#: plinth/templates/package_install.html:50 +msgid "Summary" +msgstr "Резюме" + +#: plinth/templates/package_install.html:67 +msgid "Install" +msgstr "Установка" + +#: plinth/templates/package_install.html:74 +#, python-format +msgid "Installing %(package_names)s: %(status)s" +msgstr "Установка %(package_names)s: %(status)s" + +#: plinth/templates/package_install.html:84 +#, python-format +msgid "%(percentage)s%% complete" +msgstr "%(percentage)s%% завершено" diff -Nru plinth-0.7.2/plinth/locale/sv/LC_MESSAGES/django.po plinth-0.8.1/plinth/locale/sv/LC_MESSAGES/django.po --- plinth-0.7.2/plinth/locale/sv/LC_MESSAGES/django.po 1970-01-01 00:00:00.000000000 +0000 +++ plinth-0.8.1/plinth/locale/sv/LC_MESSAGES/django.po 2016-02-16 03:55:53.000000000 +0000 @@ -0,0 +1,3200 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-01-15 19:42+0530\n" +"PO-Revision-Date: 2016-02-07 20:49+0000\n" +"Last-Translator: Caly \n" +"Language-Team: Swedish " +"\n" +"Language: sv\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 2.5-dev\n" + +#: plinth/action_utils.py:203 +#, python-brace-format +msgid "Listening on {kind} port {listen_address}:{port}" +msgstr "Lyssnar på {kind} port {listen_address}:{port}" + +#: plinth/action_utils.py:206 +#, python-brace-format +msgid "Listening on {kind} port {port}" +msgstr "Lyssnar på {kind} port {port}" + +#: plinth/action_utils.py:287 +#, python-brace-format +msgid "Access URL {url} on tcp{kind}" +msgstr "Ansluter till adress {url} on tcp{kind}" + +#: plinth/action_utils.py:290 +#, python-brace-format +msgid "Access URL {url}" +msgstr "Ansluter till adress {url}" + +#: plinth/action_utils.py:321 +#, python-brace-format +msgid "Connect to {host}:{port}" +msgstr "Anslut till {host}:{port}" + +#: plinth/action_utils.py:324 +#, python-brace-format +msgid "Cannot connect to {host}:{port}" +msgstr "Kan inte ansluta till {host}:{port}" + +#: plinth/context_processors.py:36 +msgid "FreedomBox" +msgstr "FreedomBox" + +#: plinth/modules/apps/apps.py:26 +msgid "Apps" +msgstr "Appar" + +#: plinth/modules/apps/apps.py:32 plinth/templates/base.html.py:93 +msgid "Applications" +msgstr "Applikationer" + +#: plinth/modules/apps/templates/apps.html:25 +msgid "Services and Applications" +msgstr "Tjänster och Applikationer" + +#: plinth/modules/apps/templates/apps.html:28 +#, python-format +msgid "" +"You can install and run various services and applications on your " +"%(box_name)s. Click on any app page link on the left to read a description " +"of the application and choose to install it." +msgstr "" +"Du kan installera och köra diverse tjänster och applikationer på din " +"%(box_name)s. Klicka på valfri länk till vänster för att läsa beskrivning av " +"applikationen och välja för att installera den." + +#: plinth/modules/apps/templates/apps.html:36 +msgid "" +"This box can be your photo sharing site, your instant messaging site, your " +"social networking site, your news site. Remember web portals? We can be " +"one of those too. Many of the services you use on the web could soon be on " +"site and under your control!" +msgstr "" +"FreedomBox kan vara din sida för att dela foton, din meddelandesida, din " +"sida för socialt nätverkande, eller din nyhetssida. Minns du webb-portaler? " +"Vi kan vara en sådan också. Många tjänster du använder på webben kan snart " +"vara på din egen sida, under din kontroll!" + +#: plinth/modules/avahi/__init__.py:40 plinth/modules/avahi/__init__.py:45 +#: plinth/modules/avahi/templates/avahi.html:26 +#: plinth/modules/avahi/views.py:53 +msgid "Service Discovery" +msgstr "Identifiera tjänster" + +#: plinth/modules/avahi/forms.py:29 +msgid "Enable service discovery" +msgstr "Aktivera tjänstidentifiering" + +#: plinth/modules/avahi/templates/avahi.html:29 +#, python-format +#| msgid "" +#| "Service discovery allows other machines on the network to discover your " +#| "FreedomBox and services running on it. It also allows FreedomBox to " +#| "discover other machines and services running on your local network. " +#| "Service discovery is not essential and works only on internal networks. " +#| "It may be disabled to improve security especially when connecting to a " +#| "hostile local network." +msgid "" +"Service discovery allows other devices on the network to discover your " +"%(box_name)s and services running on it. It also allows %(box_name)s to " +"discover other devices and services running on your local network. Service " +"discovery is not essential and works only on internal networks. It may be " +"disabled to improve security especially when connecting to a hostile local " +"network." +msgstr "" +"Tjänstidentifiering tillåter andra enheter i nätverket att upptäcka din " +"%(box_name)s och se vilka tjänster den kör. Det tillåter även din " +"%(box_name)s att upptäcka andra maskiner och vilka tjänster de kör på ditt " +"lokala nätverk. Tjänstidentifiering är inte nödvändigt och fungerar bara på " +"interna nätverk. Du kan låta den vara inaktiverad för att förbättra din " +"säkerhet, särskilt om du ansluter till ett osäkert lokalt nätverk." + +#: plinth/modules/avahi/templates/avahi.html:40 +#: plinth/modules/datetime/templates/datetime.html:35 +#: plinth/modules/deluge/templates/deluge.html:39 +#: plinth/modules/dynamicdns/dynamicdns.py:39 +#: plinth/modules/firewall/templates/firewall.html:57 +#: plinth/modules/mumble/templates/mumble.html:44 +#: plinth/modules/networks/templates/connection_show.html:261 +#: plinth/modules/openvpn/templates/openvpn.html:81 +#: plinth/modules/privoxy/templates/privoxy.html:48 +#: plinth/modules/quassel/templates/quassel.html:50 +#: plinth/modules/repro/templates/repro.html:58 +#: plinth/modules/tor/templates/tor.html:48 +#: plinth/modules/transmission/templates/transmission.html:42 +#: plinth/modules/xmpp/templates/xmpp.html:58 +msgid "Status" +msgstr "Status" + +#: plinth/modules/avahi/templates/avahi.html:45 +msgid "Service discovery server is running" +msgstr "Server för tjänsteidentifiering är aktiverad" + +#: plinth/modules/avahi/templates/avahi.html:48 +msgid "Service discovery server is not running" +msgstr "Server för tjänsteidentifiering är inaktiverad" + +#: plinth/modules/avahi/templates/avahi.html:52 +#: plinth/modules/datetime/templates/datetime.html:48 +#: plinth/modules/deluge/templates/deluge.html:53 +#: plinth/modules/ikiwiki/templates/ikiwiki.html:35 +#: plinth/modules/mumble/templates/mumble.html:59 +#: plinth/modules/openvpn/templates/openvpn.html:130 +#: plinth/modules/owncloud/templates/owncloud.html:51 +#: plinth/modules/privoxy/templates/privoxy.html:62 +#: plinth/modules/quassel/templates/quassel.html:65 +#: plinth/modules/repro/templates/repro.html:72 +#: plinth/modules/roundcube/templates/roundcube.html:62 +#: plinth/modules/shaarli/templates/shaarli.html:40 +#: plinth/modules/tor/templates/tor.html:92 +#: plinth/modules/transmission/templates/transmission.html:56 +#: plinth/modules/xmpp/templates/xmpp.html:72 +msgid "Configuration" +msgstr "Konfiguration" + +#: plinth/modules/avahi/templates/avahi.html:60 +#: plinth/modules/datetime/templates/datetime.html:56 +#: plinth/modules/deluge/templates/deluge.html:61 +#: plinth/modules/dynamicdns/templates/dynamicdns_configure.html:40 +#: plinth/modules/ikiwiki/templates/ikiwiki.html:43 +#: plinth/modules/ikiwiki/templates/ikiwiki_create.html:32 +#: plinth/modules/mumble/templates/mumble.html:67 +#: plinth/modules/openvpn/templates/openvpn.html:138 +#: plinth/modules/privoxy/templates/privoxy.html:70 +#: plinth/modules/quassel/templates/quassel.html:73 +#: plinth/modules/repro/templates/repro.html:80 +#: plinth/modules/restore/templates/restore_index.html:54 +#: plinth/modules/roundcube/templates/roundcube.html:70 +#: plinth/modules/shaarli/templates/shaarli.html:48 +#: plinth/modules/tor/templates/tor.html:100 +#: plinth/modules/transmission/templates/transmission.html:64 +#: plinth/modules/upgrades/templates/upgrades_configure.html:34 +#: plinth/modules/xmpp/templates/xmpp.html:80 +msgid "Update setup" +msgstr "Uppdatera inställningar" + +#: plinth/modules/avahi/views.py:73 plinth/modules/datetime/views.py:85 +#: plinth/modules/deluge/views.py:80 +#: plinth/modules/dynamicdns/dynamicdns.py:371 +#: plinth/modules/ikiwiki/views.py:95 plinth/modules/mumble/views.py:80 +#: plinth/modules/openvpn/views.py:142 plinth/modules/privoxy/views.py:83 +#: plinth/modules/quassel/views.py:76 plinth/modules/repro/views.py:77 +#: plinth/modules/restore/views.py:68 plinth/modules/roundcube/views.py:84 +#: plinth/modules/shaarli/views.py:74 plinth/modules/transmission/views.py:109 +#: plinth/modules/xmpp/views.py:100 +msgid "Configuration updated" +msgstr "Konfiguration uppdaterad" + +#: plinth/modules/avahi/views.py:76 plinth/modules/datetime/views.py:99 +#: plinth/modules/deluge/views.py:82 plinth/modules/ikiwiki/views.py:97 +#: plinth/modules/mumble/views.py:82 plinth/modules/openvpn/views.py:144 +#: plinth/modules/owncloud/owncloud.py:93 plinth/modules/privoxy/views.py:85 +#: plinth/modules/quassel/views.py:78 plinth/modules/repro/views.py:79 +#: plinth/modules/restore/views.py:70 plinth/modules/roundcube/views.py:86 +#: plinth/modules/shaarli/views.py:76 plinth/modules/tor/views.py:111 +#: plinth/modules/transmission/views.py:111 +#: plinth/modules/upgrades/views.py:118 plinth/modules/xmpp/views.py:102 +msgid "Setting unchanged" +msgstr "Instänllningar oförändrade" + +#: plinth/modules/config/config.py:84 plinth/modules/config/config.py:121 +#: plinth/modules/dynamicdns/dynamicdns.py:148 +msgid "Invalid domain name" +msgstr "Ogiltigt domännamn" + +#: plinth/modules/config/config.py:95 +msgid "Hostname" +msgstr "Värdnamn" + +#: plinth/modules/config/config.py:97 +#, python-brace-format +#| msgid "" +#| "Hostname is the local name by which other machines on the local network " +#| "reach your machine. It must start and end with an alphabet or a digit " +#| "and have as interior characters only alphabets, digits and hyphens. " +#| "Total length must be 63 characters or less." +msgid "" +"Hostname is the local name by which other devices on the local network can " +"reach your {box_name}. It must start and end with an alphabet or a digit " +"and have as interior characters only alphabets, digits and hyphens. Total " +"length must be 63 characters or less." +msgstr "" +"Värdnamn är namnet på din {box_name} som andra enheter i det lokala " +"nätverket kan nå dig via. Det får endast bestå av bokstäver, siffror och " +"bindestreck, men får inte börja eller sluta med bindestreck. Värdnamn får " +"vara max 63 tecken." + +#: plinth/modules/config/config.py:105 +msgid "Invalid hostname" +msgstr "Ogiltigt värdnamn" + +#: plinth/modules/config/config.py:108 plinth/modules/config/config.py:153 +#: plinth/modules/config/config.py:265 +#: plinth/modules/dynamicdns/dynamicdns.py:143 +msgid "Domain Name" +msgstr "Domännamn" + +#: plinth/modules/config/config.py:110 +#, python-brace-format +#| msgid "" +#| "Domain name is the global name by which other machines on the Internet " +#| "can reach you. It must consist of labels separated by dots. Each label " +#| "must start and end with an alphabet or a digit and have as interior " +#| "characters only alphabets, digits and hyphens. Length of each label must " +#| "be 63 characters or less. Total length of domain name must be 253 " +#| "characters or less." +msgid "" +"Domain name is the global name by which other devices on the Internet can " +"reach your {box_name}. It must consist of labels separated by dots. Each " +"label must start and end with an alphabet or a digit and have as interior " +"characters only alphabets, digits and hyphens. Length of each label must be " +"63 characters or less. Total length of domain name must be 253 characters " +"or less." +msgstr "" +"Domännamn är det globala namn som andra enheter på Internet kan nå din " +"{box_name} via. Det skall bestå av ord åtskilda av punkter. Varje ord får " +"endast bestå av bokstäver, siffror och bindestreck, men får inte börja eller " +"sluta med bindestreck. Varje ord får vara max 63 tecken. Total längd på " +"domännamnet får max vara 253 tecken." + +#: plinth/modules/config/config.py:125 +msgid "Language" +msgstr "Språkval" + +#: plinth/modules/config/config.py:127 +#| msgid "Language for this FreedomBox web administration interface" +msgid "Language for this web administration interface" +msgstr "Språkval för detta administrations-webbgränssnitt" + +#: plinth/modules/config/config.py:135 +#: plinth/modules/dynamicdns/dynamicdns.py:37 +#: plinth/modules/ikiwiki/views.py:36 +msgid "Configure" +msgstr "Konfigurera" + +#: plinth/modules/config/config.py:176 +msgid "General Configuration" +msgstr "Allmän Konfiguration" + +#: plinth/modules/config/config.py:193 +#, python-brace-format +msgid "Error setting hostname: {exception}" +msgstr "Fel inställning av värdnamn: {exception}" + +#: plinth/modules/config/config.py:196 +msgid "Hostname set" +msgstr "Värdnamn inställt" + +#: plinth/modules/config/config.py:202 +#, python-brace-format +msgid "Error setting domain name: {exception}" +msgstr "Fel inställning av domännamn: {exception}" + +#: plinth/modules/config/config.py:205 +msgid "Domain name set" +msgstr "Domännamn inställt" + +#: plinth/modules/config/config.py:213 +#, python-brace-format +msgid "Error setting language: {exception}" +msgstr "Fel i språkinställning: {exception}" + +#: plinth/modules/config/config.py:216 +msgid "Language changed" +msgstr "Språkval ändrat" + +#: plinth/modules/config/templates/config.html:32 +msgid "Submit" +msgstr "Sänd" + +#: plinth/modules/datetime/__init__.py:39 +#: plinth/modules/datetime/templates/datetime.html:26 +#: plinth/modules/datetime/views.py:58 +msgid "Date & Time" +msgstr "Datum & Tid" + +#: plinth/modules/datetime/__init__.py:44 +msgid "Network Time Server" +msgstr "Tidsserver för nätverket" + +#: plinth/modules/datetime/__init__.py:76 +msgid "NTP client in contact with servers" +msgstr "NTP-klient i kontakt med servrar" + +#: plinth/modules/datetime/forms.py:31 +msgid "Enable network time" +msgstr "Aktivera nätverkstid" + +#: plinth/modules/datetime/forms.py:35 +msgid "Time Zone" +msgstr "Tidszon" + +#: plinth/modules/datetime/forms.py:36 +msgid "" +"Set your time zone to get accurate timestamps. This will set the systemwide " +"time zone." +msgstr "" +"Ställ in din tidszon för att få korrekta tidsstämplar. Detta ställer in " +"tidszonen för hela systemet." + +#: plinth/modules/datetime/forms.py:47 +msgid "-- no time zone set --" +msgstr "-- ingen tidszon inställd --" + +#: plinth/modules/datetime/templates/datetime.html:29 +msgid "" +"Network time server is a program that maintians the system time in " +"synchronization with servers on the Internet." +msgstr "" +"Tidsserver för nätverket är ett program som sköter synkronisering av " +"systemtiden mot servrar på Internet." + +#: plinth/modules/datetime/templates/datetime.html:40 +msgid "Network time server is running" +msgstr "Tidsserver för nätverket är aktiverad" + +#: plinth/modules/datetime/templates/datetime.html:43 +msgid "Network time server is not running" +msgstr "Tidsserver för nätverket är inaktiverad" + +#: plinth/modules/datetime/views.py:93 +#, python-brace-format +msgid "Error setting time zone: {exception}" +msgstr "Fel i inställning av tidszon: {exception}" + +#: plinth/modules/datetime/views.py:96 +msgid "Time zone set" +msgstr "Tidszon inställd" + +#: plinth/modules/deluge/__init__.py:38 plinth/modules/deluge/views.py:56 +msgid "BitTorrent (Deluge)" +msgstr "BitTorrent (Deluge)" + +#: plinth/modules/deluge/__init__.py:43 +msgid "Deluge BitTorrent" +msgstr "Deluge BitTorrent" + +#: plinth/modules/deluge/forms.py:29 +msgid "Enable Deluge" +msgstr "Aktivera Deluge" + +#: plinth/modules/deluge/templates/deluge.html:26 +msgid "BitTorrent Web Client (Deluge)" +msgstr "BitTorrent Webbklient (Deluge)" + +#: plinth/modules/deluge/templates/deluge.html:28 +msgid "Deluge is a BitTorrent client that features a Web UI." +msgstr "" +"Deluge är en BitTorrentklient som inkluderar ett Webbaserat " +"användargränssnitt." + +#: plinth/modules/deluge/templates/deluge.html:31 +msgid "" +"When enabled, the Deluge web client will be available from /deluge path on the web server. The default password is 'deluge', but " +"you should log in and change it immediately after enabling this service." +msgstr "" +"När aktiverad blir Deluges webbklient tillgänglig via / " +"deluge address på webbservern. Standardlösenordet är \"deluge\", men du " +"bör logga in och ändra det omedelbart efter att du aktiverat tjänsten." + +#: plinth/modules/deluge/templates/deluge.html:44 +msgid "deluge-web is running" +msgstr "Deluges webbgränssnitt är aktiverat" + +#: plinth/modules/deluge/templates/deluge.html:47 +msgid "deluge-web is not running" +msgstr "Deluges webbgränssnitt är inaktiverat" + +#: plinth/modules/diagnostics/diagnostics.py:45 +msgid "Diagnostics" +msgstr "Diagnostik" + +#: plinth/modules/diagnostics/diagnostics.py:55 +msgid "System Diagnostics" +msgstr "Systemdiagnostik" + +#: plinth/modules/diagnostics/diagnostics.py:78 +msgid "Diagnostic Test" +msgstr "Diagnostiktest" + +#: plinth/modules/diagnostics/templates/diagnostics.html:37 +msgid "" +"The system diagnostic test will run a number of checks on your system to " +"confirm that applications and services are working as expected." +msgstr "" +"Systemets diagnostiktest utför ett antal kontroller av ditt system för att " +"bekräfta att program och tjänster fungerar som de ska." + +#: plinth/modules/diagnostics/templates/diagnostics.html:50 +#: plinth/modules/diagnostics/templates/diagnostics_button.html:27 +msgid "Run Diagnostics" +msgstr "Utför diagnostik" + +#: plinth/modules/diagnostics/templates/diagnostics.html:53 +msgid "Diagnotics test is currently running" +msgstr "Diagnotiktest körs för närvarande" + +#: plinth/modules/diagnostics/templates/diagnostics.html:66 +msgid "Results" +msgstr "Resultat" + +#: plinth/modules/diagnostics/templates/diagnostics.html:74 +#, python-format +msgid "Module: %(module)s" +msgstr "Modul: %(module)s" + +#: plinth/modules/diagnostics/templates/diagnostics_module.html:25 +msgid "Diagnostic Results" +msgstr "Diagnostikresultat" + +#: plinth/modules/diagnostics/templates/diagnostics_module.html:27 +#, python-format +msgid "Module: %(module_name)s" +msgstr "Modul: %(module_name)s" + +#: plinth/modules/diagnostics/templates/diagnostics_module.html:32 +msgid "This module does not support diagnostics" +msgstr "Denna modul har inte stöd för diagnostik" + +#: plinth/modules/diagnostics/templates/diagnostics_results.html:27 +msgid "Test" +msgstr "Test" + +#: plinth/modules/diagnostics/templates/diagnostics_results.html:28 +msgid "Result" +msgstr "Resultat" + +#: plinth/modules/dynamicdns/dynamicdns.py:35 plinth/modules/help/help.py:40 +msgid "About" +msgstr "Om" + +#: plinth/modules/dynamicdns/dynamicdns.py:45 +#: plinth/modules/dynamicdns/dynamicdns.py:54 +msgid "Dynamic DNS" +msgstr "Dynamisk DNS (DomänNamnsServer)" + +#: plinth/modules/dynamicdns/dynamicdns.py:71 +msgid "" +"The Variables <User>, <Pass>, <Ip>, <Domain> may be " +"used within the URL. For details see the update URL templates of the example " +"providers." +msgstr "" +"Variablerna <User>, <Pass>, <Ip>, <Domain> kan " +"användas i webbadressen. Se mallar från de olika tjänsteleverantörerna för " +"information om uppdateringsadress." + +#: plinth/modules/dynamicdns/dynamicdns.py:75 +msgid "" +"Please choose an update protocol according to your provider. If your " +"provider does not support the GnudIP protocol or your provider is not listed " +"you may use the update URL of your provider." +msgstr "" +"Välj ett uppdateringsprotokoll enligt din leverantör. Om din leverantör inte " +"stöder protokollet GnudIP, eller din leverantör saknas i listan, använd din " +"leverantörs uppdateringsadress." + +#: plinth/modules/dynamicdns/dynamicdns.py:80 +#| msgid "" +#| "Please do not enter a URL here (like \"https://example.com/\") but only " +#| "the hostname of the GnuDIP server (like \"example.pcom\")." +msgid "" +"Please do not enter a URL here (like \"https://example.com/\") but only the " +"hostname of the GnuDIP server (like \"example.com\")." +msgstr "" +"Skriv inte en full webbadress här (t.ex.: \"https://exempel.com/\"), utan " +"endast värdnamnet för GnuDIP servern (t.ex.: \"exempel.com\")." + +#: plinth/modules/dynamicdns/dynamicdns.py:84 +#, python-brace-format +#| msgid "The public domain name you want use to reach your box." +msgid "The public domain name you want use to reach your {box_name}." +msgstr "" +"Publikt domännamn du önskar använda för att ansluta till din {box_name}." + +#: plinth/modules/dynamicdns/dynamicdns.py:87 +msgid "Use this option if your provider uses self signed certificates." +msgstr "" +"Använd denna funktion om din tjänsteleverantör använder självsignerade " +"certifikat." + +#: plinth/modules/dynamicdns/dynamicdns.py:90 +msgid "" +"If this option is selected, your username and password will be used for HTTP " +"basic authentication." +msgstr "" +"Om detta alternativ är markerat, kommer ditt användarnamn och lösenord " +"användas för grundläggande HTTP autentisering." + +#: plinth/modules/dynamicdns/dynamicdns.py:93 +msgid "" +"Leave this field empty if you want to keep your previous configured password." +msgstr "Lämna fältet tomt om du vill behålla tidigare konfigurerat lösenord." + +#: plinth/modules/dynamicdns/dynamicdns.py:96 +#, python-brace-format +#| msgid "" +#| "Optional Value. If your FreedomBox is not connected directly to the " +#| "Internet (i.e. connected to a NAT router) this URL is used to figure out " +#| "the real Internet IP. The URL should simply return the IP wherethe client " +#| "comes from. Example: http://myip.datasystems24.de" +msgid "" +"Optional Value. If your {box_name} is not connected directly to the Internet " +"(i.e. connected to a NAT router) this URL is used to figure out the real " +"Internet IP. The URL should simply return the IP where the client comes from " +"(example: http://myip.datasystems24.de)." +msgstr "" +"Tillval. Om din {box_name} inte är direkt ansluten till Internet (dvs " +"anslutna via en NAT-router) används denna webbadress för att hitta korrekt " +"IP. Webbadressen ska helt enkelt returnera det IP som klienten kommer från. " +"(exempel: http://myip.datasystems24.de)." + +#: plinth/modules/dynamicdns/dynamicdns.py:104 +msgid "" +"You should have been requested to select a username when you created the " +"account." +msgstr "Du bör har uppmanats att välja ett användarnamn när du skapade kontot." + +#: plinth/modules/dynamicdns/dynamicdns.py:115 +msgid "Enable Dynamic DNS" +msgstr "Aktivera Dynamisk DNS" + +#: plinth/modules/dynamicdns/dynamicdns.py:118 +msgid "Service type" +msgstr "Typ av tjänst" + +#: plinth/modules/dynamicdns/dynamicdns.py:123 +msgid "GnudIP Server Address" +msgstr "GnudIP Serveradress" + +#: plinth/modules/dynamicdns/dynamicdns.py:128 +msgid "Invalid server name" +msgstr "Du har angett ett ogiltigt servernamn" + +#: plinth/modules/dynamicdns/dynamicdns.py:131 +msgid "Update URL" +msgstr "Adress för uppdateringar" + +#: plinth/modules/dynamicdns/dynamicdns.py:135 +#| msgid "accept all SSL certificates" +msgid "Accept all SSL certificates" +msgstr "Acceptera alla SSL-certifikat" + +#: plinth/modules/dynamicdns/dynamicdns.py:139 +#| msgid "use HTTP basic authentication" +msgid "Use HTTP basic authentication" +msgstr "Använd grundläggande HTTP-autentisering" + +#: plinth/modules/dynamicdns/dynamicdns.py:151 +#: plinth/modules/networks/forms.py:146 plinth/modules/transmission/forms.py:39 +msgid "Username" +msgstr "Användarnamn" + +#: plinth/modules/dynamicdns/dynamicdns.py:154 +#: plinth/modules/networks/forms.py:147 plinth/modules/transmission/forms.py:43 +msgid "Password" +msgstr "Lösenord" + +#: plinth/modules/dynamicdns/dynamicdns.py:157 +#: plinth/modules/networks/forms.py:149 +msgid "Show password" +msgstr "Visa lösenord" + +#: plinth/modules/dynamicdns/dynamicdns.py:161 +msgid "IP check URL" +msgstr "Webbadress för att kontrollera IP" + +#: plinth/modules/dynamicdns/dynamicdns.py:187 +msgid "Please provide update URL or a GnuDIP Server" +msgstr "Ange uppdateringsadress eller GnuDIP-server" + +#: plinth/modules/dynamicdns/dynamicdns.py:190 +msgid "Please provide GnuDIP username" +msgstr "Ange användarnamn för GnuDIP" + +#: plinth/modules/dynamicdns/dynamicdns.py:193 +msgid "Please provide GnuDIP domain" +msgstr "Ange GnuDIP-domän" + +#: plinth/modules/dynamicdns/dynamicdns.py:198 +msgid "Please provide a password" +msgstr "Ange ett lösenord" + +#: plinth/modules/dynamicdns/dynamicdns.py:217 +msgid "Configure Dynamic DNS" +msgstr "Konfigurera Dynamisk DNS" + +#: plinth/modules/dynamicdns/dynamicdns.py:239 +msgid "Status of Dynamic DNS" +msgstr "Status för Dynamisk DNS" + +#: plinth/modules/dynamicdns/templates/dynamicdns.html:25 +#| msgid "DynamicDNS client" +msgid "Dynamic DNS Client" +msgstr "Klient för Dynamisk DNS" + +#: plinth/modules/dynamicdns/templates/dynamicdns.html:28 +#, python-format +#| msgid "" +#| "If your internet provider changes your IP address periodic (i.e. every " +#| "24h) it may be hard for others to find you in the WEB. And for this " +#| "reason nobody may find the services which are provided by FreedomBox " +#| "(like your ownCloud)." +msgid "" +"If your internet provider changes your IP address periodic (i.e. every 24h) " +"it may be hard for others to find you in the WEB. And for this reason nobody " +"may find the services which are provided by %(box_name)s, such as ownCloud." +msgstr "" +"Om din Internetleverantör periodiskt ändrar din IP-adress (dvs varje 24h) " +"kan det vara svårt för andra att hitta dig på nätet. Då kan ingen hitta de " +"tjänster som tillhandahålls av %(box_name)s (tex. din ownCloud)." + +#: plinth/modules/dynamicdns/templates/dynamicdns.html:37 +#| msgid "" +#| "The solution is to assign a DNS name to your IP address and update the " +#| "DNS name every time your IP is changed by your Internet provider. Dynamic " +#| "DNS allows you to push your current public IP address to an gnudip " +#| "server. Afterwards the Server will assign your DNS name with the new IP " +#| "and if someone from the internet asks for your DNS name he will get your " +#| "current IP answered." +msgid "" +"The solution is to assign a DNS name to your IP address and update the DNS " +"name every time your IP is changed by your Internet provider. Dynamic DNS " +"allows you to push your current public IP address to an gnudip server. Afterwards " +"the Server will assign your DNS name with the new IP and if someone from the " +"Internet asks for your DNS name he will get your current IP answered." +msgstr "" +"Lösningen är att tilldela DNS-namn till din IP-adress och uppdatera DNS-namn " +"varje gång din IP ändras av din Internetleverantör. Dynamisk DNS kopplar din " +"nuvarande offentliga IP-adressen till en gnudip server. " +"Därefter tilldelar servern ditt DNS-namn med din nya IP, och om någon från " +"Internet ber om ditt DNS-namn, kommer han bli skickad till din aktuella IP." + +#: plinth/modules/dynamicdns/templates/dynamicdns.html:50 +msgid "" +"If you are looking for a free dynamic DNS account, you may find a free " +"GnuDIP service at gnudip.datasystems24.net or you may find free update URL " +"based services on " +"freedns.afraid.org." +msgstr "" +"Om du önskar ett gratis konto för dynamiskt DNS, kan du hitta en gratis " +"GnuDIP-tjänst på " +"gnudip.datasystems24.net eller så kan du hitta tjänster baserade på " +"gratis uppdateringsadress från freedns.afraid.org." + +#: plinth/modules/dynamicdns/templates/dynamicdns.html:61 +#, python-format +#| msgid "" +#| "If your freedombox is connected behind some NAT router, don't forget to " +#| "add portforwarding (i.e. forward some standard ports like 80 and 443) to " +#| "your freedombox device." +msgid "" +"If your %(box_name)s is connected behind some NAT router, don't forget to " +"add port forwarding (i.e. forward some standard ports like 80 and 443)." +msgstr "" +"Om din %(box_name)s är ansluten bakom en NAT-router, glöm inte att lägga " +"till port forwarding (dvs vidarebefordra några standardportar, såsom 80 och " +"443)." + +#: plinth/modules/dynamicdns/templates/dynamicdns_configure.html:30 +msgid "" +"You have disabled Javascript. Dynamic form mode is disabled and some helper " +"functions may not work (but the main functionality should work)." +msgstr "" +"Du har inaktiverat Javascript. Funktionen dynamiskt formulär är inaktiverat " +"och vissa hjälpfunktioner fungerar inte (men alla huvudfunktioner bör " +"fungera)." + +#: plinth/modules/dynamicdns/templates/dynamicdns_status.html:25 +msgid "NAT type" +msgstr "NAT-typ" + +#: plinth/modules/dynamicdns/templates/dynamicdns_status.html:29 +msgid "" +"NAT type not detected yet, if you do not provide a \"IP check URL\" we will " +"not detect a NAT type." +msgstr "" +"NAT-typ ännu inte upptäckt. Om du inte anger en \"IP-kontroll adress\" " +"kommer vi inte att upptäcka en NAT-typ." + +#: plinth/modules/dynamicdns/templates/dynamicdns_status.html:35 +#| msgid "Direct connection to the internet." +msgid "Direct connection to the Internet." +msgstr "Direktanslutning till Internet." + +#: plinth/modules/dynamicdns/templates/dynamicdns_status.html:37 +#, python-format +#| msgid "" +#| "Behind NAT, this means that dynamic DNS service will poll the \"IP check " +#| "URL\" for changes (we need the \"IP check URL\" for this reason - " +#| "otherwise we will not detect IP changes). It may take up to %(timer)s " +#| "minutes until we update your DNS entry in case of WAN IP change." +msgid "" +"Behind NAT. This means that Dynamic DNS service will poll the \"IP check URL" +"\" for changes (the \"IP check URL\" entry is needed for this - otherwise IP " +"changes will not be detected). In case the WAN IP changes, it may take up " +"to %(timer)s minutes until your DNS entry is updated." +msgstr "" +"Bakom NAT. Detta betyder att dynamisk DNS-tjänsten kommer att fråga \"IP-" +"kontrolladress\" om ändringar skett (\"IP-kontrolladress\" behöver därför " +"anges, annars kan inte ändringar av IP adress upptäckas). Det kan ta upp " +"till %(timer)s minuter tills din DNS-inställning uppdateras." + +#: plinth/modules/dynamicdns/templates/dynamicdns_status.html:48 +msgid "Last update" +msgstr "Senaste uppdatering" + +#: plinth/modules/firewall/firewall.py:39 +#: plinth/modules/firewall/firewall.py:49 +#: plinth/modules/firewall/firewall.py:57 +msgid "Firewall" +msgstr "Brandvägg" + +#: plinth/modules/firewall/templates/firewall.html:28 +#, python-format +#| msgid "" +#| "Firewall is a network security system that controls the incoming and " +#| "outgoing network traffic on your %(box_name)s. Keeping a firewall enabled " +#| "and properly configured reduces risk of security threat from the Internet." +msgid "" +"Firewall is a security system that controls the incoming and outgoing " +"network traffic on your %(box_name)s. Keeping a firewall enabled and " +"properly configured reduces risk of security threat from the Internet." +msgstr "" +"Brandväggen är ett säkerhetssystem som styr den inkommande och utgående " +"nätverkstrafiken på din %(box_name)s. Att ha en brandvägg aktiverad och " +"korrekt konfigurerad minskar risken för säkerhetshot från Internet." + +#: plinth/modules/firewall/templates/firewall.html:36 +msgid "Current status:" +msgstr "Nuvarande status:" + +#: plinth/modules/firewall/templates/firewall.html:41 +#, python-format +msgid "" +"Firewall daemon is not running. Please run it. Firewall comes enabled by " +"default on %(box_name)s. On any Debian based system (such as %(box_name)s) " +"you may run it using the command 'service firewalld start' or in case of a " +"system with systemd 'systemctl start firewalld'." +msgstr "" +"Brandväggsdemonen körs inte. Vänligen starta den. Brandväggen är aktiverad " +"som standard på %(box_name)s. På ett Debian-baserade system (till exempel " +"%(box_name)s) Du kan starta den med kommandot \"service firewalld start\", " +"alternativt, vid ett system med systemd \"systemctl start firewalld\"." + +#: plinth/modules/firewall/templates/firewall.html:56 +msgid "Service/Port" +msgstr "Service/Port" + +#: plinth/modules/firewall/templates/firewall.html:67 +#: plinth/modules/letsencrypt/templates/letsencrypt.html:91 +#: plinth/modules/names/templates/names.html:51 +msgid "Enabled" +msgstr "Aktiverad" + +#: plinth/modules/firewall/templates/firewall.html:70 +#: plinth/modules/letsencrypt/templates/letsencrypt.html:93 +#: plinth/modules/names/templates/names.html:53 +msgid "Disabled" +msgstr "Inaktiverad" + +#: plinth/modules/firewall/templates/firewall.html:81 +msgid "Permitted" +msgstr "Tillåtna" + +#: plinth/modules/firewall/templates/firewall.html:84 +msgid "Permitted (internal only)" +msgstr "Tillåtna (endast interna)" + +#: plinth/modules/firewall/templates/firewall.html:87 +msgid "Permitted (external only)" +msgstr "Tillåtna (endast externa)" + +#: plinth/modules/firewall/templates/firewall.html:90 +msgid "Blocked" +msgstr "Blockerade" + +#: plinth/modules/firewall/templates/firewall.html:103 +#| msgid "" +#| "The operation of the firewall is automatic. When you enable a service it " +#| "is automatically permitted in the firewall and you disable a service is " +#| "automatically disabled in the firewall." +msgid "" +"The operation of the firewall is automatic. When you enable a service it is " +"also permitted in the firewall and when you disable a service it is also " +"disabled in the firewall." +msgstr "" +"Brandväggen är automatisk. När du aktiverar en tjänst tillåts den " +"automatiskt i brandväggen och om du inaktiverar en tjänst, så inaktiveras " +"den även automatiskt i brandväggen." + +#: plinth/modules/first_boot/forms.py:48 plinth/modules/users/forms.py:70 +msgid "Creating LDAP user failed." +msgstr "Det gick inte att skapa LDAP-användare." + +#: plinth/modules/first_boot/forms.py:56 +msgid "Failed to add new user to admin group." +msgstr "Det gick inte att lägga till ny användare till administrationsgruppen." + +#: plinth/modules/first_boot/forms.py:78 +msgid "User account created, you are now logged in" +msgstr "Användarkonto skapat, du är nu inloggad" + +#: plinth/modules/first_boot/templates/firstboot_navbar.html:23 +#: plinth/modules/help/templates/help_index.html:25 +#: plinth/templates/base.html:102 +msgid "Help" +msgstr "Hjälp" + +#: plinth/modules/first_boot/templates/firstboot_state0.html:45 +msgid "Start Setup" +msgstr "Starta installationsprogrammet" + +#: plinth/modules/first_boot/templates/firstboot_state0.html:49 +#, python-format +msgid "" +"To complete the setup of your %(box_name)s, please provide some basic " +"information." +msgstr "" +"För att slutföra installationen av din %(box_name)s, ange grundläggande " +"information." + +#: plinth/modules/first_boot/templates/firstboot_state1.html:41 +msgid "Administrator Account" +msgstr "Administratörskonto" + +#: plinth/modules/first_boot/templates/firstboot_state1.html:44 +msgid "" +"Choose a username and password to access this web interface. The password " +"can be changed later. This user will be granted administrative privileges. " +"Other users can be added later." +msgstr "" +"Välja ett användarnamn och lösenord för att komma åt detta webbgränssnitt. " +"Lösenordet kan ändras senare. Denna användare kommer att beviljas " +"administrativa privilegier. Andra användare kan läggas till senare." + +#: plinth/modules/first_boot/templates/firstboot_state1.html:57 +msgid "Box it up!" +msgstr "Starta upp!" + +#: plinth/modules/first_boot/templates/firstboot_state10.html:29 +msgid "Setup Complete!" +msgstr "Installation klar!" + +#: plinth/modules/first_boot/templates/firstboot_state10.html:32 +#, python-format +#| msgid "" +#| "%(box_name)s setup is now complete. To make your %(box_name)s " +#| "functional, you need some applications. Applications will be installed " +#| "the first time you access them." +msgid "" +"%(box_name)s setup is now complete. To make your %(box_name)s functional, " +"you need some applications. They will be installed the first time you " +"access them." +msgstr "" +"Installationen av %(box_name)s är klar. För att göra din %(box_name)s " +"funktionell, behöver du några applikationer. De kommer att installeras " +"första gången du använder dem." + +#: plinth/modules/first_boot/templates/firstboot_state10.html:41 +msgid "Go to Apps" +msgstr "Gå till Applikationer" + +#: plinth/modules/first_boot/templates/firstboot_state10.html:44 +msgid "Current Network Configuration" +msgstr "Aktuell Nätverkskonfiguration" + +#: plinth/modules/first_boot/templates/firstboot_state10.html:47 +msgid "" +"You should check the network setup and modify it if necessary. Do not forget " +"to change the default Wi-Fi passwords!" +msgstr "" +"Du bör kontrollera nätverksinställningarna och ändra dom om det behövs. Glöm " +"inte att byta ut standardösenordet för WiFi!" + +#: plinth/modules/first_boot/templates/firstboot_state10.html:57 +msgid "Go to Networks" +msgstr "Gå till Nätverk" + +#: plinth/modules/first_boot/views.py:60 +msgid "Setup Complete" +msgstr "Installationen Klar" + +#: plinth/modules/help/help.py:34 +msgid "Documentation" +msgstr "Dokumentation" + +#: plinth/modules/help/help.py:36 +msgid "Where to Get Help" +msgstr "Vart Du Kan Få Hjälp" + +#: plinth/modules/help/help.py:38 +#, fuzzy +msgid "Manual" +msgstr "Manual" + +#: plinth/modules/help/help.py:48 +msgid "Documentation and FAQ" +msgstr "Dokumentation och Vanliga Frågor" + +#: plinth/modules/help/help.py:55 +#, python-brace-format +msgid "About {box_name}" +msgstr "Om {box_name}" + +#: plinth/modules/help/help.py:73 +#, python-brace-format +#| msgid "About {box_name}" +msgid "{box_name} Manual" +msgstr "{box_name} Manual" + +#: plinth/modules/help/templates/help_about.html:30 +#, python-format +#| msgid "" +#| "FreedomBox is a community project to develop, design and promote personal " +#| "servers running free software for private, personal communications. It " +#| "is a networking appliance designed to allow interfacing with the rest of " +#| "the Internet under conditions of protected privacy and data security. It " +#| "hosts applications such as blog, wiki, website, social network, email, " +#| "web proxy and a Tor relay on a device that can replace your Wi-Fi router " +#| "so that your data stays with you." +msgid "" +"%(box_name)s is a community project to develop, design and promote personal " +"servers running free software for private, personal communications. It is a " +"networking appliance designed to allow interfacing with the rest of the " +"Internet under conditions of protected privacy and data security. It hosts " +"applications such as blog, wiki, website, social network, email, web proxy " +"and a Tor relay, on a device that can replace your Wi-Fi router, so that " +"your data stays with you." +msgstr "" +"%(box_name)s är ett kollaborativt projekt för att utveckla, designa och " +"främja personliga servrar med fri programvara för privat och personlig " +"kommunikation. Det är en nätverksenhet gjord för att kommunicera med resten " +"av Internet under skyddad sekretess och hög datasäkerhet. Den har " +"applikationer såsom blogg, wiki, hemsida, sociala nätverk, e-post, webb-" +"proxy och en Tor-server, på en enhet som kan ersätta din Wi-Fi-router, så " +"att din personliga data alltid stannar hos dig och under din kontroll." + +#: plinth/modules/help/templates/help_about.html:43 +msgid "" +"We live in a world where our use of the network is mediated by those who " +"often do not have our best interests at heart. By building software that " +"does not rely on a central service, we can regain control and privacy. By " +"keeping our data in our homes, we gain useful legal protections over it. By " +"giving back power to the users over their networks and machines, we are " +"returning the Internet to its intended peer-to-peer architecture." +msgstr "" +"Vi lever i en värld där vår användning av Internet förmedlas av aktörer som " +"ofta inte har våra bästa intressen i åtanke. Genom att skapa programvara som " +"inte förlitar sig på en central tjänst, kan vi få kontroll och integritet. " +"Genom att lagra vår data i våra hem, få vi användbart rättsligt skydd över " +"den. Genom att ge kontrollen över nätverk och apparater tillbaka till " +"användare, återställer vi Internet till sin avsedda icke-hierarkiska peer-to-" +"peer-arkitektur." + +#: plinth/modules/help/templates/help_about.html:56 +#, python-format +#| msgid "" +#| "There are a number of projects working to realize a future of distributed " +#| "services; FreedomBox aims to bring them all together in a convenient " +#| "package." +msgid "" +"There are a number of projects working to realize a future of distributed " +"services; %(box_name)s aims to bring them all together in a convenient " +"package." +msgstr "" +"Det finns ett flertal projekt avsedda att förverkliga en framtid av " +"distribuerade tjänster. %(box_name)s avser att samla dem alla tillsammans i " +"ett enda praktiskt paket." + +#: plinth/modules/help/templates/help_about.html:64 +#, python-format +#| msgid "" +#| "For more information about the FreedomBox project, see the FreedomBox Wiki." +msgid "" +"For more information about the %(box_name)s project, see the %(box_name)s Wiki." +msgstr "" +"Mer information om %(box_name)s -projektet finns på %(box_name)s wiki." + +#: plinth/modules/help/templates/help_about.html:73 +msgid "Learn more »" +msgstr "Läs mer »" + +#: plinth/modules/help/templates/help_about.html:76 +#, python-format +msgid "You are running Plinth version %(version)s." +msgstr "Du använder Plinth version %(version)s." + +#: plinth/modules/help/templates/help_base.html:36 +#, python-format +msgid "%(box_name)s Setup" +msgstr "%(box_name)s Installation" + +#: plinth/modules/help/templates/help_index.html:29 +#, python-format +#| msgid "" +#| "The FreedomBox Manual is the best place to " +#| "start for information regarding %(box_name)s." +msgid "" +"The %(box_name)s Manual is the best place to " +"start for information regarding %(box_name)s." +msgstr "" +"%(box_name)s Manual är det bästa stället att " +"börja för aff få information om %(box_name)s." + +#: plinth/modules/help/templates/help_index.html:36 +#, python-format +#| msgid "" +#| " " +#| "FreedomBox project wiki contains further information." +msgid "" +" " +"%(box_name)s project wiki contains further information." +msgstr "" +" %(box_name)" +"s projekt-wiki innehåller ytterligare information." + +#: plinth/modules/help/templates/help_index.html:43 +#, python-format +#| msgid "" +#| "To seek help from FreedomBox community, queries may be posted on the mailing list. The list archives also contain information about " +#| "problems faced by other users and possible solutions." +msgid "" +"To seek help from %(box_name)s community, queries may be posted on the mailing list. The list archives also contain information about " +"problems faced by other users and possible solutions." +msgstr "" +"För att få hjälp från %(box_name)s användargrupp kan du ställa frågor på " +" e-post-lista. Arkiven innehåller även information om möjliga lösningar " +"på problem som andra användare haft." + +#: plinth/modules/help/templates/help_index.html:53 +#, python-format +#| msgid "" +#| "Many FreedomBox contributors and users are also available on the irc.oftc." +#| "net IRC network. Join and request help on the #freedombox " +#| "channel using the IRC web interface." +msgid "" +"Many %(box_name)s contributors and users are also available on the irc.oftc." +"net IRC network. Join and request help on the #freedombox " +"channel using the IRC web interface." +msgstr "" +"Många utvecklare och användare av %(box_name)s finns också tillgängliga på " +"IRC-nätverket irc.oftc.net. Gå med, ställ frågor och be om hjälp i " +"#freedombox kanal via webbchatten." + +#: plinth/modules/ikiwiki/__init__.py:38 +#| msgid "Wiki & Blog (Ikiwiki)" +msgid "Wiki and Blog (ikiwiki)" +msgstr "Wiki och Blogg (ikiwiki)" + +#: plinth/modules/ikiwiki/__init__.py:43 +#| msgid "Ikiwiki wikis and blogs" +msgid "ikiwiki wikis and blogs" +msgstr "ikiwiki wikis och bloggar" + +#: plinth/modules/ikiwiki/forms.py:29 +#| msgid "Enable Ikiwiki" +msgid "Enable ikiwiki" +msgstr "Aktivera ikiwiki" + +#: plinth/modules/ikiwiki/forms.py:36 +#: plinth/modules/networks/templates/connection_show.html:98 +msgid "Type" +msgstr "Typ" + +#: plinth/modules/ikiwiki/forms.py:39 +#: plinth/modules/networks/templates/connection_show.html:78 +msgid "Name" +msgstr "Namn" + +#: plinth/modules/ikiwiki/forms.py:41 +msgid "Admin Account Name" +msgstr "Namn på administratörskontot" + +#: plinth/modules/ikiwiki/forms.py:44 +msgid "Admin Account Password" +msgstr "Lösenord för administratörskontot" + +#: plinth/modules/ikiwiki/templates/ikiwiki.html:27 +msgid "" +"When enabled, the blogs and wikis will be available from /ikiwiki." +msgstr "" +"När aktiverade kommer bloggar och wikis att vara tillgänglig på /ikiwiki." + +#: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:27 +#, python-format +#| msgid "Delete Wiki/Blog %(name)s" +msgid "Delete Wiki or Blog %(name)s" +msgstr "Ta bort Wiki eller Blogg %(name)s" + +#: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:33 +#| msgid "" +#| "This action will remove all the posts, pages and comments including " +#| "revision history. Delete this wiki/blog permanently?" +msgid "" +"This action will remove all the posts, pages and comments including revision " +"history. Delete this wiki or blog permanently?" +msgstr "" +"Den här åtgärden tar bort alla inlägg, sidor och kommentarer, även " +"versionshistorik. Ta bort denna wiki eller blogg permanent?" + +#: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:44 +#, python-format +msgid "Delete %(name)s" +msgstr "Ta bort %(name)s" + +#: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:47 +#: plinth/modules/monkeysphere/templates/monkeysphere.html:60 +#: plinth/modules/networks/templates/connections_delete.html:41 +#: plinth/modules/users/templates/users_delete.html:41 +msgid "Cancel" +msgstr "Avbryt" + +#: plinth/modules/ikiwiki/templates/ikiwiki_manage.html:41 +msgid "No wikis or blogs available." +msgstr "Ingen wiki eller blogg tillgänglig." + +#: plinth/modules/ikiwiki/templates/ikiwiki_manage.html:45 +msgid "Create a Wiki or Blog" +msgstr "Skapa en wiki eller blogg" + +#: plinth/modules/ikiwiki/templates/ikiwiki_manage.html:55 +#, python-format +msgid "Delete site %(site)s" +msgstr "Ta bort webbsida %(site)s" + +#: plinth/modules/ikiwiki/templates/ikiwiki_manage.html:61 +#, python-format +msgid "Go to site %(site)s" +msgstr "Gå till webbsidan %(site)s" + +#: plinth/modules/ikiwiki/views.py:38 +msgid "Manage" +msgstr "Hantera" + +#: plinth/modules/ikiwiki/views.py:40 +msgid "Create" +msgstr "Skapa" + +#: plinth/modules/ikiwiki/views.py:73 +#| msgid "Wiki & Blog" +msgid "Wiki and Blog" +msgstr "Wiki och Blogg" + +#: plinth/modules/ikiwiki/views.py:106 +msgid "Manage Wikis and Blogs" +msgstr "Hantera wikis och bloggar" + +#: plinth/modules/ikiwiki/views.py:132 +#| msgid "Create a Wiki or Blog" +msgid "Create Wiki or Blog" +msgstr "Skapa en Wiki eller Blogg" + +#: plinth/modules/ikiwiki/views.py:145 +#, python-brace-format +msgid "Created wiki {name}." +msgstr "Skapade wiki {name}." + +#: plinth/modules/ikiwiki/views.py:147 +#, python-brace-format +msgid "Could not create wiki: {error}" +msgstr "Kunde inte skapa wiki: {error}" + +#: plinth/modules/ikiwiki/views.py:159 +#, python-brace-format +msgid "Created blog {name}." +msgstr "Blogg skapad {name}." + +#: plinth/modules/ikiwiki/views.py:161 +#, python-brace-format +msgid "Could not create blog: {error}" +msgstr "Kunde inte skapa blogg: {error}" + +#: plinth/modules/ikiwiki/views.py:174 +#, python-brace-format +msgid "{name} deleted." +msgstr "{name} borttagen." + +#: plinth/modules/ikiwiki/views.py:176 +#, python-brace-format +msgid "Could not delete {name}: {error}" +msgstr "Kunde inte ta bort {name}: {error}" + +#: plinth/modules/ikiwiki/views.py:182 +#| msgid "Delete Wiki/Blog" +msgid "Delete Wiki or Blog" +msgstr "Ta Bort Wiki eller Blogg" + +#: plinth/modules/letsencrypt/__init__.py:43 +#: plinth/modules/letsencrypt/templates/letsencrypt.html:38 +#: plinth/modules/letsencrypt/views.py:45 +msgid "Certificates (Let's Encrypt)" +msgstr "Certifikat (Let's Encrypt)" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:41 +#, python-format +msgid "" +"A digital certficate allows users of a web service to verify the identity of " +"the service and to securely communicate with it. %(box_name)s can " +"automatically obtain and setup digital certificates for each available " +"domain. It does so by proving itself to be the owner of a domain to Let's " +"Encrypt, a certficate authority (CA)." +msgstr "" +"Ett digitalt certifikat låter användare av en webbtjänst verifiera " +"identiteten på tjänsten och kommunicera säkert med den. %(box_name)s kan " +"automatiskt hämta och installera digitala certifikat för varje tillgänglig " +"domän. Detta sker genom att den bevisar sig vara ägare till en domän för " +"Let's Encrypt, en auktoriserad certifikatutfärdare ." + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:52 +msgid "" +"Let's Encrypt is a free, automated, and open certificate authority, run for " +"the public’s benefit by the Internet Security Research Group (ISRG). Please " +"read and agree with the Let's Encrypt Subscriber Agreement before using this service." +msgstr "" +"Let's Encrypt en är gratis, automatiserad och öppen certifikatutfärdare, " +"använd för allmänhetens nytta av Internet Security Research Group (ISRG). " +"Läs igenom och acceptera Let's Encryp användaravtal innan du använder denna tjänst." + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:66 +#: plinth/modules/monkeysphere/templates/monkeysphere.html:70 +msgid "Domain" +msgstr "Domän" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:67 +msgid "Certificate Status" +msgstr "Certifikatets status" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:68 +msgid "Website Security" +msgstr "Säkerhet för webbsida" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:69 +#: plinth/modules/monkeysphere/templates/monkeysphere.html:72 +msgid "Actions" +msgstr "Åtgärder" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:79 +#, python-format +msgid "Expires on %(expiry_date)s" +msgstr "Giltig tills %(expiry_date)s" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:85 +msgid "No certficate" +msgstr "Inget certfikat" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:102 +msgid "Revoke" +msgstr "Återkalla" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:108 +msgid "Re-obtain" +msgstr "Återfå" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:115 +msgid "Obtain" +msgstr "Skaffa" + +#: plinth/modules/letsencrypt/views.py:55 +#, python-brace-format +msgid "Certificate successfully revoked for domain {domain}" +msgstr "Certifikatet återkallat för domänen {domain}" + +#: plinth/modules/letsencrypt/views.py:60 +#, python-brace-format +msgid "Failed to revoke certificate for domain {domain}: {error}" +msgstr "Det gick inte att återkalla certifikatet för domänen {domain}: {error}" + +#: plinth/modules/letsencrypt/views.py:72 +#, python-brace-format +msgid "Certificate successfully obtained for domain {domain}" +msgstr "Certifikat erhållet för domänen {domain}" + +#: plinth/modules/letsencrypt/views.py:77 +#, python-brace-format +msgid "Failed to obtain certificate for domain {domain}: {error}" +msgstr "Det gick inte att erhålla certifikat för domänen {domain}: {error}" + +#: plinth/modules/monkeysphere/__init__.py:32 +#: plinth/modules/monkeysphere/templates/monkeysphere.html:35 +#: plinth/modules/monkeysphere/views.py:44 +msgid "Monkeysphere" +msgstr "Monkeysphere" + +#: plinth/modules/monkeysphere/templates/monkeysphere.html:38 +msgid "" +"With Monkeysphere, a PGP key can be generated for each configured domain " +"serving SSH. The PGP public key can then be uploaded to the PGP keyservers. " +"Users connecting to this machine through SSH can verify that they are " +"connecting to the correct host. For users to trust the key, at least one " +"person (usually the machine owner) must sign the key using the regular PGP " +"key signing process. See the Monkeysphere SSH documentation for more details." +msgstr "" +"Med Monkeysphere, kan en PGP-nyckel genereras för varje konfigurerad domän " +"som erbjuder SSH. Den offentliga PGP-nyckeln kan sedan laddas upp till PGP " +"nyckelservrar. Användare som ansluter till denna enhet via SSH kan verifiera " +"att de ansluter till rätt värd. För att användare ska kunna lita på " +"nyckeln, måste minst en person (vanligtvis enheytens ägare) signera nyckeln " +"genom att använda den normala processen för PGP-nyckel signering. Se Monkeysphere SSH " +"dokumentation för mer information." + +#: plinth/modules/monkeysphere/templates/monkeysphere.html:53 +msgid "Publishing key to keyserver..." +msgstr "Publicerar nyckeln till nyckelserver..." + +#: plinth/modules/monkeysphere/templates/monkeysphere.html:71 +msgid "GPG Fingerprint" +msgstr "GPG Fingeravtryck" + +#: plinth/modules/monkeysphere/templates/monkeysphere.html:83 +#: plinth/modules/names/views.py:45 +msgid "Not Available" +msgstr "Inte tillgänglig" + +#: plinth/modules/monkeysphere/templates/monkeysphere.html:93 +msgid "Generate PGP Key" +msgstr "Generera PGP-nyckel" + +#: plinth/modules/monkeysphere/templates/monkeysphere.html:101 +msgid "Publish Key" +msgstr "Publicera nyckel" + +#: plinth/modules/monkeysphere/views.py:58 +msgid "Generated PGP key." +msgstr "PGP-nyckel genererad." + +#: plinth/modules/monkeysphere/views.py:83 +msgid "Cancelled key publishing." +msgstr "Publicering av nyckel avbruten." + +#: plinth/modules/monkeysphere/views.py:120 +msgid "Published key to keyserver." +msgstr "Publicerade nyckeln till nyckelserver." + +#: plinth/modules/monkeysphere/views.py:122 +msgid "Error occurred while publishing key." +msgstr "Fel uppstod när nyckeln publicerades." + +#: plinth/modules/mumble/__init__.py:38 +#: plinth/modules/mumble/templates/mumble.html:26 +#: plinth/modules/mumble/views.py:58 +msgid "Voice Chat (Mumble)" +msgstr "Röstchatt (Mumble)" + +#: plinth/modules/mumble/__init__.py:43 +msgid "Mumble Voice Chat Server" +msgstr "Server för Mumble röstchatt" + +#: plinth/modules/mumble/forms.py:29 +msgid "Enable Mumble daemon" +msgstr "Aktivera Mumble-demon" + +#: plinth/modules/mumble/templates/mumble.html:29 +msgid "" +"Mumble is an open source, low-latency, encrypted, high quality voice chat " +"software." +msgstr "" +"Mumble är ett program för röstchatt med öppen källkod, låg latens, " +"kryptering och hög ljudkvalitet." + +#: plinth/modules/mumble/templates/mumble.html:36 +msgid "" +"You can connect to your Mumble server on the regular Mumble port 64738. Clients to connect to Mumble from your " +"desktop and Android devices are available." +msgstr "" +"Du kan ansluta till din Mumble-server på Mumbles standardport 64738. Appar finns för att ansluta till Mumble från din " +"dator- och Android-enheter." + +#: plinth/modules/mumble/templates/mumble.html:49 +msgid "Mumble server is running" +msgstr "Mumble-servern är aktiverad" + +#: plinth/modules/mumble/templates/mumble.html:52 +msgid "Mumble server is not running" +msgstr "Mumble-servern är inaktiverad" + +#: plinth/modules/names/__init__.py:29 +msgid "HTTP" +msgstr "HTTP" + +#: plinth/modules/names/__init__.py:30 +msgid "HTTPS" +msgstr "HTTPS" + +#: plinth/modules/names/__init__.py:31 +msgid "SSH" +msgstr "SSH" + +#: plinth/modules/names/__init__.py:45 plinth/modules/names/views.py:34 +msgid "Name Services" +msgstr "Namntjänster" + +#: plinth/modules/networks/__init__.py:108 +#, python-brace-format +msgid "Using DNSSEC on IPv{kind}" +msgstr "Använder DNSSEC på IPv{kind}" + +#: plinth/modules/networks/forms.py:30 +msgid "Connection Type" +msgstr "Anslutningstyp" + +#: plinth/modules/networks/forms.py:37 +msgid "Connection Name" +msgstr "Anslutningens namn" + +#: plinth/modules/networks/forms.py:39 +msgid "Physical Interface" +msgstr "Fysiskt gränssnitt" + +#: plinth/modules/networks/forms.py:41 +msgid "The network device that this connection should be bound to." +msgstr "Den nätverksenhet som denna anslutning ska knytas till." + +#: plinth/modules/networks/forms.py:44 +msgid "Firewall Zone" +msgstr "Brandväggs-zon" + +#: plinth/modules/networks/forms.py:45 +msgid "" +"The firewall zone will control which services are available over this " +"interfaces. Select Internal only for trusted networks." +msgstr "" +"Brandväggs-zonen bestämmer vilka tjänster är tillgängliga genom detta " +"gränssnitt. Välj endast interna för betrodda nätverk." + +#: plinth/modules/networks/forms.py:49 +msgid "IPv4 Addressing Method" +msgstr "Addresseringsmetod för IPv4" + +#: plinth/modules/networks/forms.py:50 +msgid "" +"\"Shared\" method will start a DHCP server and \"Automatic\" method will " +"acquire configuration from a DHCP server." +msgstr "" +"Metoden \"Delad\" kommer att starta en DHCP-server. Metoden \"Automatisk\" " +"kommer att hämta konfiguration från en DHCP-server." + +#: plinth/modules/networks/forms.py:56 +msgid "Address" +msgstr "Adress" + +#: plinth/modules/networks/forms.py:60 +msgid "Netmask" +msgstr "Nätmask" + +#: plinth/modules/networks/forms.py:61 +msgid "" +"Optional value. If left blank, a default netmask based on the address will " +"be used." +msgstr "" +"Valfritt värde. Om detta lämnas tomt kommer en standard nätmask baserad på " +"adressen användas." + +#: plinth/modules/networks/forms.py:66 +#: plinth/modules/networks/templates/connection_show.html:202 +#: plinth/modules/networks/templates/connection_show.html:241 +msgid "Gateway" +msgstr "Gateway" + +#: plinth/modules/networks/forms.py:67 +msgid "Optional value." +msgstr "Valfritt värde." + +#: plinth/modules/networks/forms.py:71 +msgid "DNS Server" +msgstr "DNS-Server" + +#: plinth/modules/networks/forms.py:72 +msgid "" +"Optional value. If this value is given and IPv4 addressing method is " +"\"Automatic\", the DNS Servers provided by a DHCP server will be ignored." +msgstr "" +"Valfritt värde. Om detta anges och IPv4-adresserings metod är satt till \"" +"Automatisk\", kommer DNS-servrar tillhandahållna av en DHCP-server att " +"ignoreras." + +#: plinth/modules/networks/forms.py:78 +msgid "Second DNS Server" +msgstr "Sekundär DNS-server" + +#: plinth/modules/networks/forms.py:79 +msgid "" +"Optional value. If this value is given and IPv4 Addressing Method is " +"\"Automatic\", the DNS Servers provided by a DHCP server will be ignored." +msgstr "" +"Valfritt värde. Om värde anges och IPv4-adresseringsmetod är \"Automatisk\", " +"kommer DNS-servrar tillhandahållna av en DHCP-server att ignoreras." + +#: plinth/modules/networks/forms.py:89 +msgid "-- select --" +msgstr "--Välj--" + +#: plinth/modules/networks/forms.py:175 +#: plinth/modules/networks/templates/connection_show.html:144 +msgid "SSID" +msgstr "SSID" + +#: plinth/modules/networks/forms.py:176 +msgid "The visible name of the network." +msgstr "Synligt namn för nätverket." + +#: plinth/modules/networks/forms.py:178 +#: plinth/modules/networks/templates/connection_show.html:157 +msgid "Mode" +msgstr "Läge" + +#: plinth/modules/networks/forms.py:183 +msgid "Authentication Mode" +msgstr "Autentiseringsläge" + +#: plinth/modules/networks/forms.py:184 +msgid "" +"Select WPA if the wireless network is secured and requires clients to have " +"the password to connect." +msgstr "" +"Välj WPA om det trådlösa nätverket är säkert och kräver att användare har " +"lösenord för att ansluta." + +#: plinth/modules/networks/forms.py:188 +msgid "Passphrase" +msgstr "Lösenord" + +#: plinth/modules/networks/networks.py:36 +#: plinth/modules/networks/networks.py:56 +msgid "Network Connections" +msgstr "Nätverksanslutningar" + +#: plinth/modules/networks/networks.py:38 +#: plinth/modules/networks/networks.py:242 +msgid "Nearby Wi-Fi Networks" +msgstr "Wi-Fi-nätverk i närheten" + +#: plinth/modules/networks/networks.py:40 +#: plinth/modules/networks/networks.py:264 +msgid "Add Connection" +msgstr "Lägg till Anslutning" + +#: plinth/modules/networks/networks.py:46 +msgid "Networks" +msgstr "Nätverk" + +#: plinth/modules/networks/networks.py:66 +msgid "Cannot show connection: Connection not found." +msgstr "Kan inte visa anslutning: Ingen anslutning hittades." + +#: plinth/modules/networks/networks.py:100 +msgid "Show Connection information" +msgstr "Visa Anslutningsinformation" + +#: plinth/modules/networks/networks.py:113 +msgid "Cannot edit connection: Connection not found." +msgstr "Kan inte redigera anslutning: Ingen anslutning hittades." + +#: plinth/modules/networks/networks.py:119 +msgid "This type of connection is not yet understood." +msgstr "Denna typ av anslutning är inte förstådd ännu." + +#: plinth/modules/networks/networks.py:139 +#: plinth/modules/networks/networks.py:198 +#: plinth/modules/networks/templates/connections_edit.html:34 +msgid "Edit Connection" +msgstr "Redigera Anslutning" + +#: plinth/modules/networks/networks.py:209 +#, python-brace-format +msgid "Activated connection {name}." +msgstr "Aktiverad anslutning {name}." + +#: plinth/modules/networks/networks.py:212 +msgid "Failed to activate connection: Connection not found." +msgstr "Det gick inte att aktivera anslutning: Ingen anslutning hittades." + +#: plinth/modules/networks/networks.py:216 +#, python-brace-format +msgid "Failed to activate connection {name}: No suitable device is available." +msgstr "" +"Det gick inte att aktivera anslutningen {name}: Ingen lämplig enhet är " +"tillgänglig." + +#: plinth/modules/networks/networks.py:229 +#, python-brace-format +msgid "Deactivated connection {name}." +msgstr "Inaktiverade anslutning {name}." + +#: plinth/modules/networks/networks.py:232 +msgid "Failed to de-activate connection: Connection not found." +msgstr "Kunde inte de-aktivera anslutning: Anslutning hittades inte." + +#: plinth/modules/networks/networks.py:282 +msgid "Adding New Ethernet Connection" +msgstr "Lägg Till Ny Ethernet-Anslutning" + +#: plinth/modules/networks/networks.py:300 +msgid "Adding New PPPoE Connection" +msgstr "Lägg Till Ny PPPoE-Anslutning" + +#: plinth/modules/networks/networks.py:332 +msgid "Adding New Wi-Fi Connection" +msgstr "Lägg Till Ny Wi-Fi-Anslutning" + +#: plinth/modules/networks/networks.py:346 +#, python-brace-format +msgid "Connection {name} deleted." +msgstr "Anslutning {name} borttagen." + +#: plinth/modules/networks/networks.py:349 +#: plinth/modules/networks/networks.py:358 +msgid "Failed to delete connection: Connection not found." +msgstr "Det gick inte att ta bort anslutning: Anslutning hittades inte." + +#: plinth/modules/networks/networks.py:363 +#: plinth/modules/networks/templates/connections_delete.html:26 +msgid "Delete Connection" +msgstr "Ta Bort Anslutning" + +#: plinth/modules/networks/templates/connection_show.html:43 +msgid "Edit connection" +msgstr "Redigera anslutning" + +#: plinth/modules/networks/templates/connection_show.html:43 +#: plinth/templates/base.html:123 +msgid "Edit" +msgstr "Redigera" + +#: plinth/modules/networks/templates/connection_show.html:50 +#: plinth/modules/networks/templates/connections_list.html:78 +msgid "Deactivate" +msgstr "Avaktivera" + +#: plinth/modules/networks/templates/connection_show.html:57 +#: plinth/modules/networks/templates/connections_list.html:86 +msgid "Activate" +msgstr "Aktivera" + +#: plinth/modules/networks/templates/connection_show.html:63 +msgid "Delete connection" +msgstr "Ta bort anslutning" + +#: plinth/modules/networks/templates/connection_show.html:63 +msgid "Delete" +msgstr "Ta bort" + +#: plinth/modules/networks/templates/connection_show.html:66 +#: plinth/modules/networks/templates/connections_diagram.html:73 +#: plinth/modules/networks/templates/connections_diagram.html:76 +#: plinth/modules/networks/templates/connections_diagram.html:105 +#: plinth/modules/networks/templates/connections_diagram.html:127 +msgid "Connection" +msgstr "Anslutning" + +#: plinth/modules/networks/templates/connection_show.html:71 +msgid "Primary connection" +msgstr "Primär anslutning" + +#: plinth/modules/networks/templates/connection_show.html:73 +#: plinth/modules/networks/templates/connection_show.html:217 +#: plinth/modules/networks/templates/connection_show.html:256 +msgid "yes" +msgstr "Ja" + +#: plinth/modules/networks/templates/connection_show.html:84 +msgid "Device" +msgstr "Enhet" + +#: plinth/modules/networks/templates/connection_show.html:88 +msgid "State" +msgstr "" + +#: plinth/modules/networks/templates/connection_show.html:93 +msgid "State reason" +msgstr "" + +#: plinth/modules/networks/templates/connection_show.html:102 +msgid "MAC address" +msgstr "" + +#: plinth/modules/networks/templates/connection_show.html:106 +msgid "Interface" +msgstr "" + +#: plinth/modules/networks/templates/connection_show.html:110 +msgid "Description" +msgstr "" + +#: plinth/modules/networks/templates/connection_show.html:116 +msgid "Physical Link" +msgstr "" + +#: plinth/modules/networks/templates/connection_show.html:121 +msgid "Link state" +msgstr "" + +#: plinth/modules/networks/templates/connection_show.html:125 +msgid "cable is connected" +msgstr "" + +#: plinth/modules/networks/templates/connection_show.html:128 +msgid "please check cable" +msgstr "" + +#: plinth/modules/networks/templates/connection_show.html:133 +#: plinth/modules/networks/templates/connection_show.html:149 +msgid "Speed" +msgstr "" + +#: plinth/modules/networks/templates/connection_show.html:135 +#, python-format +msgid "%(ethernet_speed)s Mbit/s" +msgstr "" + +#: plinth/modules/networks/templates/connection_show.html:151 +#, python-format +msgid "%(wireless_bitrate)s Mbit/s" +msgstr "" + +#: plinth/modules/networks/templates/connection_show.html:163 +msgid "Signal strength" +msgstr "" + +#: plinth/modules/networks/templates/connection_show.html:173 +msgid "Channel" +msgstr "" + +#: plinth/modules/networks/templates/connection_show.html:181 +msgid "IPv4" +msgstr "" + +#: plinth/modules/networks/templates/connection_show.html:186 +#: plinth/modules/networks/templates/connection_show.html:227 +msgid "Method" +msgstr "" + +#: plinth/modules/networks/templates/connection_show.html:193 +#: plinth/modules/networks/templates/connection_show.html:234 +msgid "IP address" +msgstr "" + +#: plinth/modules/networks/templates/connection_show.html:209 +#: plinth/modules/networks/templates/connection_show.html:248 +msgid "DNS server" +msgstr "" + +#: plinth/modules/networks/templates/connection_show.html:216 +#: plinth/modules/networks/templates/connection_show.html:255 +msgid "Default" +msgstr "" + +#: plinth/modules/networks/templates/connection_show.html:222 +msgid "IPv6" +msgstr "" + +#: plinth/modules/networks/templates/connection_show.html:263 +msgid "This connection is not active." +msgstr "" + +#: plinth/modules/networks/templates/connection_show.html:266 +msgid "Security" +msgstr "" + +#: plinth/modules/networks/templates/connection_show.html:271 +#: plinth/modules/networks/templates/connection_show.html:291 +#: plinth/modules/networks/templates/connection_show.html:310 +msgid "Firewall zone" +msgstr "" + +#: plinth/modules/networks/templates/connection_show.html:280 +msgid "" +"This interface should be connected to a local network/machine. If you " +"connect this interface to a public network, services meant to be available " +"only internally will become available externally. This is a security risk." +msgstr "" + +#: plinth/modules/networks/templates/connection_show.html:300 +msgid "" +"This interface should receive your Internet connection. If you connect it to " +"a local network/machine, many services meant to available only internally " +"will not be available." +msgstr "" + +#: plinth/modules/networks/templates/connection_show.html:319 +#, python-format +msgid "" +"This interface is not maintained by %(box_name)s. Its security status is " +"unknown to %(box_name)s. Many %(box_name)s services may not be available on " +"this interface. It is recommended that you deactivate or delete this " +"connection and re-configure it." +msgstr "" + +#: plinth/modules/networks/templates/connections_add.html:34 +#: plinth/modules/networks/templates/connections_type_select.html:34 +msgid "Create..." +msgstr "" + +#: plinth/modules/networks/templates/connections_create.html:34 +msgid "Create Connection" +msgstr "" + +#: plinth/modules/networks/templates/connections_delete.html:29 +#, python-format +msgid "Delete connection %(name)s permanently?" +msgstr "" + +#: plinth/modules/networks/templates/connections_diagram.html:65 +msgid "Internet" +msgstr "" + +#: plinth/modules/networks/templates/connections_diagram.html:70 +#: plinth/modules/networks/templates/connections_diagram.html:102 +msgid "Spacing" +msgstr "" + +#: plinth/modules/networks/templates/connections_diagram.html:78 +msgid "External" +msgstr "" + +#: plinth/modules/networks/templates/connections_diagram.html:83 +#: plinth/modules/networks/templates/connections_diagram.html:113 +#: plinth/network.py:37 +msgid "Ethernet" +msgstr "" + +#: plinth/modules/networks/templates/connections_diagram.html:86 +#: plinth/modules/networks/templates/connections_diagram.html:116 +#: plinth/network.py:38 +msgid "Wi-Fi" +msgstr "" + +#: plinth/modules/networks/templates/connections_diagram.html:89 +#, python-format +msgid "Show connection %(connection.name)s" +msgstr "" + +#: plinth/modules/networks/templates/connections_diagram.html:107 +msgid "Internal" +msgstr "" + +#: plinth/modules/networks/templates/connections_diagram.html:119 +#, python-format +msgid "Show connection %(name)s" +msgstr "" + +#: plinth/modules/networks/templates/connections_diagram.html:131 +msgid "Computer" +msgstr "" + +#: plinth/modules/networks/templates/connections_list.html:67 +#, python-format +msgid "Delete connection %(name)s" +msgstr "" + +#: plinth/modules/networks/templates/connections_list.html:92 +msgid "Active" +msgstr "" + +#: plinth/modules/networks/templates/connections_list.html:95 +msgid "Inactive" +msgstr "" + +#: plinth/modules/openvpn/__init__.py:38 +#: plinth/modules/openvpn/templates/openvpn.html:35 +#: plinth/modules/openvpn/views.py:62 +msgid "Virtual Private Network (OpenVPN)" +msgstr "" + +#: plinth/modules/openvpn/__init__.py:43 +msgid "OpenVPN" +msgstr "" + +#: plinth/modules/openvpn/forms.py:29 +msgid "Enable OpenVPN server" +msgstr "" + +#: plinth/modules/openvpn/templates/openvpn.html:38 +#, python-format +msgid "" +"Virtual Private Network (VPN) is a technique for securely connecting two " +"devices in order to access resources of a private network. While you are " +"away from home, you can connect to your %(box_name)s in order to join your " +"home network and access private/internal services provided by %(box_name)s. " +"You can also access the rest of the Internet via %(box_name)s for added " +"security and anonymity." +msgstr "" + +#: plinth/modules/openvpn/templates/openvpn.html:51 +msgid "Profile" +msgstr "" + +#: plinth/modules/openvpn/templates/openvpn.html:54 +#, python-format +msgid "" +"To connect to %(box_name)s's VPN, you need to download a profile and feed it " +"to an OpenVPN client on your mobile or desktop machine. OpenVPN Clients are " +"available for most platforms. See documentation on recommended clients and instructions on how to " +"configure them." +msgstr "" + +#: plinth/modules/openvpn/templates/openvpn.html:66 +#, python-format +msgid "Profile is specific to each user of %(box_name)s. Keep it a secret." +msgstr "" + +#: plinth/modules/openvpn/templates/openvpn.html:76 +msgid "Download my profile" +msgstr "" + +#: plinth/modules/openvpn/templates/openvpn.html:85 +#, python-format +msgid "" +"OpenVPN has not yet been setup. Performing a secure setup takes a very long " +"time. Depending on how fast your %(box_name)s is, it may even take hours. " +"If the setup is interrupted, you may start it again." +msgstr "" + +#: plinth/modules/openvpn/templates/openvpn.html:97 +msgid "Start setup" +msgstr "" + +#: plinth/modules/openvpn/templates/openvpn.html:104 +msgid "OpenVPN setup is running" +msgstr "" + +#: plinth/modules/openvpn/templates/openvpn.html:108 +#, python-format +msgid "" +"To perform a secure setup, this process takes a very long time. Depending " +"on how fast your %(box_name)s is, it may even take hours. If the setup is " +"interrupted, you may start it again." +msgstr "" + +#: plinth/modules/openvpn/templates/openvpn.html:121 +msgid "OpenVPN server is running" +msgstr "" + +#: plinth/modules/openvpn/templates/openvpn.html:124 +msgid "OpenVPN server is not running" +msgstr "" + +#: plinth/modules/openvpn/views.py:124 +msgid "Setup completed." +msgstr "" + +#: plinth/modules/openvpn/views.py:126 +msgid "Setup failed." +msgstr "" + +#: plinth/modules/owncloud/owncloud.py:38 +msgid "Enable ownCloud" +msgstr "" + +#: plinth/modules/owncloud/owncloud.py:44 +#: plinth/modules/owncloud/templates/owncloud.html:26 +msgid "File Hosting (ownCloud)" +msgstr "" + +#: plinth/modules/owncloud/owncloud.py:51 +#: plinth/modules/owncloud/owncloud.py:80 +msgid "ownCloud" +msgstr "" + +#: plinth/modules/owncloud/owncloud.py:97 +msgid "ownCloud enabled" +msgstr "" + +#: plinth/modules/owncloud/owncloud.py:100 +msgid "ownCloud disabled" +msgstr "" + +#: plinth/modules/owncloud/templates/owncloud.html:29 +msgid "" +"ownCloud gives you universal access to your files through a web interface or " +"WebDAV. It also provides a platform to easily view & sync your contacts, " +"calendars and bookmarks across all your devices and enables basic editing " +"right on the web. Installation has minimal server requirements, doesn't need " +"special permissions and is quick. ownCloud is extendable via a simple but " +"powerful API for applications and plugins." +msgstr "" + +#: plinth/modules/owncloud/templates/owncloud.html:41 +msgid "" +"When enabled, the ownCloud installation will be available from /owncloud path on the web server. Visit this URL to set up " +"the initial administration account for ownCloud." +msgstr "" + +#: plinth/modules/owncloud/templates/owncloud.html:59 +msgid "Apply changes" +msgstr "" + +#: plinth/modules/pagekite/__init__.py:35 plinth/modules/pagekite/views.py:46 +msgid "Public Visibility (PageKite)" +msgstr "" + +#: plinth/modules/pagekite/forms.py:46 +msgid "Enable PageKite" +msgstr "" + +#: plinth/modules/pagekite/forms.py:49 +msgid "Server domain" +msgstr "" + +#: plinth/modules/pagekite/forms.py:51 +msgid "" +"Select your pagekite server. Set \"pagekite.net\" to use the default " +"pagekite.net server." +msgstr "" + +#: plinth/modules/pagekite/forms.py:55 +msgid "Server port" +msgstr "" + +#: plinth/modules/pagekite/forms.py:56 +msgid "Port of your pagekite server (default: 80)" +msgstr "" + +#: plinth/modules/pagekite/forms.py:58 +msgid "Kite name" +msgstr "" + +#: plinth/modules/pagekite/forms.py:59 +msgid "Example: mybox.pagekite.me" +msgstr "" + +#: plinth/modules/pagekite/forms.py:62 +msgid "Invalid kite name" +msgstr "" + +#: plinth/modules/pagekite/forms.py:65 +msgid "Kite secret" +msgstr "" + +#: plinth/modules/pagekite/forms.py:67 +msgid "" +"A secret associated with the kite or the default secret for your account if " +"no secret is set on the kite." +msgstr "" + +#: plinth/modules/pagekite/forms.py:83 +msgid "Kite details set" +msgstr "" + +#: plinth/modules/pagekite/forms.py:90 +msgid "Pagekite server set" +msgstr "" + +#: plinth/modules/pagekite/forms.py:96 +msgid "PageKite enabled" +msgstr "" + +#: plinth/modules/pagekite/forms.py:99 +msgid "PageKite disabled" +msgstr "" + +#: plinth/modules/pagekite/forms.py:135 +#, python-brace-format +msgid "Service enabled: {name}" +msgstr "" + +#: plinth/modules/pagekite/forms.py:139 +#, python-brace-format +msgid "Service disabled: {name}" +msgstr "" + +#: plinth/modules/pagekite/forms.py:150 +msgid "protocol" +msgstr "" + +#: plinth/modules/pagekite/forms.py:153 +msgid "external (frontend) port" +msgstr "" + +#: plinth/modules/pagekite/forms.py:156 +msgid "internal (freedombox) port" +msgstr "" + +#: plinth/modules/pagekite/forms.py:158 +msgid "Enable Subdomains" +msgstr "" + +#: plinth/modules/pagekite/forms.py:191 +msgid "Deleted custom service" +msgstr "" + +#: plinth/modules/pagekite/forms.py:225 +msgid "" +"This service is available as a standard service. Please use the \"Standard " +"Services\" page to enable it." +msgstr "" + +#: plinth/modules/pagekite/forms.py:234 +msgid "Added custom service" +msgstr "" + +#: plinth/modules/pagekite/forms.py:237 +msgid "This service already exists" +msgstr "" + +#: plinth/modules/pagekite/templates/pagekite_configure.html:33 +msgid "PageKite Account" +msgstr "" + +#: plinth/modules/pagekite/templates/pagekite_configure.html:41 +msgid "Save settings" +msgstr "" + +#: plinth/modules/pagekite/templates/pagekite_custom_services.html:44 +msgid "" +"Warning:
Your PageKite frontend server may not support all the " +"protocol/port combinations that you are able to define here. For example, " +"HTTPS on ports other than 443 is known to cause problems." +msgstr "" + +#: plinth/modules/pagekite/templates/pagekite_custom_services.html:56 +msgid "Create a custom service" +msgstr "" + +#: plinth/modules/pagekite/templates/pagekite_custom_services.html:64 +msgid "Add Service" +msgstr "" + +#: plinth/modules/pagekite/templates/pagekite_custom_services.html:71 +msgid "Existing custom services" +msgstr "" + +#: plinth/modules/pagekite/templates/pagekite_custom_services.html:74 +msgid "You don't have any Custom Services enabled" +msgstr "" + +#: plinth/modules/pagekite/templates/pagekite_custom_services.html:89 +#, python-format +msgid "connected to %(backend_host)s:%(backend_port)s" +msgstr "" + +#: plinth/modules/pagekite/templates/pagekite_custom_services.html:101 +msgid "Delete this service" +msgstr "" + +#: plinth/modules/pagekite/templates/pagekite_introduction.html:26 +#, python-format +msgid "" +"PageKite is a system for exposing %(box_name)s services when you don't have " +"a direct connection to the Internet. You only need this if your %(box_name)s " +"services are unreachable from the rest of the Internet. This includes the " +"following situations:" +msgstr "" + +#: plinth/modules/pagekite/templates/pagekite_introduction.html:37 +#, python-format +msgid "%(box_name)s is behind a restricted firewall." +msgstr "" + +#: plinth/modules/pagekite/templates/pagekite_introduction.html:43 +#, python-format +msgid "" +"%(box_name)s is connected to a (wireless) router which you don't control." +msgstr "" + +#: plinth/modules/pagekite/templates/pagekite_introduction.html:50 +msgid "" +"Your ISP does not provide you an external IP address and instead provides " +"Internet connection through NAT." +msgstr "" + +#: plinth/modules/pagekite/templates/pagekite_introduction.html:57 +msgid "" +"Your ISP does not provide you a static IP address and your IP address " +"changes evertime you connect to Internet." +msgstr "" + +#: plinth/modules/pagekite/templates/pagekite_introduction.html:63 +msgid "Your ISP limits incoming connections." +msgstr "" + +#: plinth/modules/pagekite/templates/pagekite_introduction.html:67 +#, python-format +msgid "" +"PageKite works around NAT, firewalls and IP-address limitations by using a " +"combination of tunnels and reverse proxies. You can use any pagekite service " +"provider, for example pagekite.net. In " +"future it might be possible to use your buddy's %(box_name)s for this." +msgstr "" + +#: plinth/modules/pagekite/templates/pagekite_introduction.html:78 +#: plinth/modules/pagekite/views.py:36 +msgid "Configure PageKite" +msgstr "" + +#: plinth/modules/pagekite/templates/pagekite_standard_services.html:40 +msgid "Warning:
" +msgstr "" + +#: plinth/modules/pagekite/templates/pagekite_standard_services.html:43 +msgid "" +"Published services are accessible and attackable from the evil internet." +msgstr "" + +#: plinth/modules/pagekite/templates/pagekite_standard_services.html:50 +msgid "Exposing SSH with the default password for 'fbx' is a VERY BAD idea." +msgstr "" + +#: plinth/modules/pagekite/templates/pagekite_standard_services.html:65 +msgid "Save Services" +msgstr "" + +#: plinth/modules/pagekite/utils.py:53 +msgid "Web Server (HTTP)" +msgstr "" + +#: plinth/modules/pagekite/utils.py:54 +#, python-brace-format +msgid "Site will be available at http://{0}" +msgstr "" + +#: plinth/modules/pagekite/utils.py:63 +msgid "Web Server (HTTPS)" +msgstr "" + +#: plinth/modules/pagekite/utils.py:64 +#, python-brace-format +msgid "Site will be available at https://{0}" +msgstr "" + +#: plinth/modules/pagekite/utils.py:73 +msgid "Secure Shell (SSH)" +msgstr "" + +#: plinth/modules/pagekite/utils.py:74 +msgid "" +"See SSH client setup instructions" +msgstr "" + +#: plinth/modules/pagekite/utils.py:276 +msgid "Pagekite" +msgstr "" + +#: plinth/modules/pagekite/views.py:34 +msgid "About PageKite" +msgstr "" + +#: plinth/modules/pagekite/views.py:38 +msgid "Standard Services" +msgstr "" + +#: plinth/modules/pagekite/views.py:40 +msgid "Custom Services" +msgstr "" + +#: plinth/modules/power/__init__.py:32 plinth/modules/power/views.py:33 +#: plinth/modules/power/views.py:47 plinth/modules/power/views.py:62 +msgid "Power" +msgstr "" + +#: plinth/modules/power/templates/power.html:29 +msgid "Restart or shut down the system." +msgstr "" + +#: plinth/modules/power/templates/power.html:34 +msgid "Restart »" +msgstr "" + +#: plinth/modules/power/templates/power.html:37 +msgid "Shut Down »" +msgstr "" + +#: plinth/modules/power/templates/power_restart.html:29 +msgid "" +"Are you sure you want to restart? You will not be able to access this web " +"interface for a few minutes until the system is restarted." +msgstr "" + +#: plinth/modules/power/templates/power_restart.html:42 +msgid "Restart Now" +msgstr "" + +#: plinth/modules/power/templates/power_shutdown.html:29 +msgid "" +"Are you sure you want to shut down? You will not be able to access this web " +"interface after shut down." +msgstr "" + +#: plinth/modules/power/templates/power_shutdown.html:41 +msgid "Shut Down Now" +msgstr "" + +#: plinth/modules/privoxy/__init__.py:39 +#: plinth/modules/privoxy/templates/privoxy.html:26 +#: plinth/modules/privoxy/views.py:59 +msgid "Web Proxy (Privoxy)" +msgstr "" + +#: plinth/modules/privoxy/__init__.py:44 +msgid "Privoxy Web Proxy" +msgstr "" + +#: plinth/modules/privoxy/__init__.py:86 +#, python-brace-format +msgid "Access {url} with proxy {proxy} on tcp{kind}" +msgstr "" + +#: plinth/modules/privoxy/forms.py:29 +msgid "Enable Privoxy" +msgstr "" + +#: plinth/modules/privoxy/templates/privoxy.html:29 +msgid "" +"Privoxy is a non-caching web proxy with advanced filtering capabilities for " +"enhancing privacy, modifying web page data and HTTP headers, controlling " +"access, and removing ads and other obnoxious Internet junk." +msgstr "" + +#: plinth/modules/privoxy/templates/privoxy.html:38 +#, python-format +msgid "" +"You can use Privoxy by modifying your browser proxy settings to your " +"%(box_name)s hostname (or IP address) with port 8118. While using Privoxy, " +"you can see its configuration details and documentation at http://config.privoxy.org/ or http://p.p." +msgstr "" + +#: plinth/modules/privoxy/templates/privoxy.html:53 +msgid "Privoxy is running" +msgstr "" + +#: plinth/modules/privoxy/templates/privoxy.html:56 +msgid "Privoxy is not running" +msgstr "" + +#: plinth/modules/quassel/__init__.py:36 +#: plinth/modules/quassel/templates/quassel.html:26 +#: plinth/modules/quassel/views.py:54 +msgid "IRC Client (Quassel)" +msgstr "" + +#: plinth/modules/quassel/__init__.py:41 +msgid "Quassel IRC Client" +msgstr "" + +#: plinth/modules/quassel/forms.py:29 +msgid "Enable Quassel core service" +msgstr "" + +#: plinth/modules/quassel/templates/quassel.html:29 +#, python-format +msgid "" +"Quassel is an IRC application that is split into two parts, a \"core\" and a " +"\"client\". This allows the core to remain connected to IRC servers, and to " +"continue receiving messages, even when the client is disconnected. " +"%(box_name)s can run the Quassel core service keeping you always online and " +"one or more Quassel clients from a desktop or a mobile can be used to " +"connect and disconnect from it." +msgstr "" + +#: plinth/modules/quassel/templates/quassel.html:41 +msgid "" +"You can connect to your Quassel core on the default Quassel port 4242. " +"Clients to connect to Quassel from your desktop and mobile devices are available." +msgstr "" + +#: plinth/modules/quassel/templates/quassel.html:55 +msgid "Quassel core service is running" +msgstr "" + +#: plinth/modules/quassel/templates/quassel.html:58 +msgid "Quassel core service is not running" +msgstr "" + +#: plinth/modules/repro/__init__.py:36 +#: plinth/modules/repro/templates/repro.html:26 +#: plinth/modules/repro/views.py:55 +#| msgid "GnudIP Server Address" +msgid "SIP Server (repro)" +msgstr "SIP-Server (repro)" + +#: plinth/modules/repro/__init__.py:41 +msgid "repro SIP Server" +msgstr "" + +#: plinth/modules/repro/forms.py:29 +#| msgid "Enable service discovery" +msgid "Enable repro service" +msgstr "Aktivera tjänsten repro" + +#: plinth/modules/repro/templates/repro.html:29 +msgid "" +"repro provides various SIP services that a SIP softphone can utilize to " +"provide audio and video calls as well as presence and instant messaging. " +"repro provides a server and SIP user accounts that clients can use to let " +"their presence known. It also acts as a proxy to federate SIP " +"communications to other servers on the Internet similar to email." +msgstr "" + +#: plinth/modules/repro/templates/repro.html:39 +msgid "" +"To make SIP calls, a client application is needed. Available clients include " +"Jitsi (for computers) and CSipSimple (for Android phones)." +msgstr "" + +#: plinth/modules/repro/templates/repro.html:48 +msgid "" +"Note: Before using repro, domains and users will need to " +"be configured using the web-based " +"configuration panel. Users in the admin group will be able to " +"log in to the repro configuration panel. After setting the domain, it is " +"required to restart the repro service. Disable the service and re-enable it." +msgstr "" + +#: plinth/modules/repro/templates/repro.html:63 +#| msgid "Mumble server is running" +msgid "repro service is running" +msgstr "Tjänsten repro är aktiverad" + +#: plinth/modules/repro/templates/repro.html:66 +#| msgid "Mumble server is not running" +msgid "repro service is not running" +msgstr "Tjänsten repro är inaktiverad" + +#: plinth/modules/restore/__init__.py:36 +#: plinth/modules/restore/templates/restore_index.html:26 +#: plinth/modules/restore/views.py:46 +msgid "Unhosted Storage (reStore)" +msgstr "" + +#: plinth/modules/restore/__init__.py:41 +msgid "reStore" +msgstr "" + +#: plinth/modules/restore/forms.py:29 +msgid "Enable reStore" +msgstr "" + +#: plinth/modules/restore/templates/restore_index.html:29 +#, python-format +msgid "" +"reStore is a server for unhosted web " +"applications. The idea is to uncouple web applications from data. No " +"matter where a web application is served from, the data can be stored on an " +"unhosted storage server of user's choice. With reStore, your %(box_name)s " +"becomes your unhosted storage server." +msgstr "" + +#: plinth/modules/restore/templates/restore_index.html:40 +msgid "" +"You can create and edit accounts in the reStore web-" +"interface." +msgstr "" + +#: plinth/modules/roundcube/__init__.py:36 +#: plinth/modules/roundcube/templates/roundcube.html:26 +#: plinth/modules/roundcube/views.py:64 +msgid "Email Client (Roundcube)" +msgstr "" + +#: plinth/modules/roundcube/forms.py:29 +msgid "Enable Roundcube" +msgstr "" + +#: plinth/modules/roundcube/templates/roundcube.html:29 +msgid "" +"Roundcube webmail is a browser-based multilingual IMAP client with an " +"application-like user interface. It provides full functionality you expect " +"from an email client, including MIME support, address book, folder " +"manipulation, message searching and spell checking." +msgstr "" + +#: plinth/modules/roundcube/templates/roundcube.html:39 +msgid "" +"You can access Roundcube from /roundcube. Provide " +"the username and password of the email account you wish to access followed " +"by the domain name of the IMAP server for your email provider, like " +"imap.example.com. For IMAP over SSL (recommended), fill the " +"server field like imaps://imap.example.com." +msgstr "" + +#: plinth/modules/roundcube/templates/roundcube.html:50 +msgid "" +"For Gmail, username will be your Gmail address, password will be your Google " +"account password and server will be imaps://imap.gmail.com. " +"Note that you will also need to enable \"Less secure apps\" in your Google " +"account settings (https://www.google.com/settings/security/lesssecureapps)." +msgstr "" + +#: plinth/modules/shaarli/__init__.py:37 +#: plinth/modules/shaarli/templates/shaarli.html:26 +#: plinth/modules/shaarli/views.py:52 +msgid "Bookmarks (Shaarli)" +msgstr "" + +#: plinth/modules/shaarli/__init__.py:42 +msgid "Shaarli" +msgstr "" + +#: plinth/modules/shaarli/forms.py:29 +msgid "Enable Shaarli" +msgstr "" + +#: plinth/modules/shaarli/templates/shaarli.html:28 +msgid "Shaarli allows you to save and share bookmarks." +msgstr "" + +#: plinth/modules/shaarli/templates/shaarli.html:31 +msgid "" +"When enabled, Shaarli will be available from /shaarli path on the web server. Note that Shaarli only supports a single user " +"account, which you will need to setup on the initial visit." +msgstr "" + +#: plinth/modules/system/system.py:26 +msgid "System" +msgstr "" + +#: plinth/modules/system/system.py:33 +#: plinth/modules/system/templates/system.html:25 +#: plinth/templates/base.html:109 +msgid "System Configuration" +msgstr "" + +#: plinth/modules/system/templates/system.html:28 +#, python-format +msgid "Here you can administrate the underlying system of your %(box_name)s." +msgstr "" + +#: plinth/modules/system/templates/system.html:35 +#, python-format +msgid "" +"The options affect the %(box_name)s at its most general level, so be careful!" +msgstr "" + +#: plinth/modules/tor/__init__.py:48 plinth/modules/tor/templates/tor.html:35 +msgid "Anonymity Network (Tor)" +msgstr "" + +#: plinth/modules/tor/__init__.py:53 +#| msgid "Go to Networks" +msgid "Tor Anonymity Network" +msgstr "Tor Anonymitetsnätverk" + +#: plinth/modules/tor/__init__.py:58 +msgid "Tor Bridge Relay" +msgstr "" + +#: plinth/modules/tor/__init__.py:76 plinth/modules/tor/views.py:144 +msgid "Tor Hidden Service" +msgstr "" + +#: plinth/modules/tor/__init__.py:222 +msgid "Tor relay port available" +msgstr "" + +#: plinth/modules/tor/__init__.py:230 +msgid "Obfs3 transport registered" +msgstr "" + +#: plinth/modules/tor/__init__.py:236 +msgid "Obfs4 transport registered" +msgstr "" + +#: plinth/modules/tor/__init__.py:273 +#, python-brace-format +msgid "Access URL {url} on tcp{kind} via Tor" +msgstr "" + +#: plinth/modules/tor/__init__.py:284 +#, python-brace-format +msgid "Confirm Tor usage at {url} on tcp{kind}" +msgstr "" + +#: plinth/modules/tor/forms.py:32 +msgid "Enable Tor" +msgstr "" + +#: plinth/modules/tor/forms.py:35 +msgid "Enable Tor Hidden Service" +msgstr "" + +#: plinth/modules/tor/forms.py:38 +#, python-brace-format +msgid "" +"A hidden service will allow {box_name} to provide selected services (such as " +"ownCloud or chat) without revealing its location." +msgstr "" + +#: plinth/modules/tor/forms.py:42 +msgid "Download software packages over Tor" +msgstr "" + +#: plinth/modules/tor/forms.py:44 +msgid "" +"When enabled, software will be downloaded over the Tor network for " +"installations and upgrades. This adds a degree of privacy and security " +"during software downloads." +msgstr "" + +#: plinth/modules/tor/templates/tor.html:38 +msgid "" +"Tor is an anonymous communication system. You can learn more about it from " +"the Tor Project website. For " +"best protection when web surfing, the Tor Project recommends that you use " +"the " +"Tor Browser." +msgstr "" + +#: plinth/modules/tor/templates/tor.html:54 +#| msgid "Configuration updated" +msgid "Tor configuration is being updated" +msgstr "Konfigurationen av Tor uppdateras" + +#: plinth/modules/tor/templates/tor.html:62 +msgid "Tor is running" +msgstr "" + +#: plinth/modules/tor/templates/tor.html:65 +msgid "Tor is not running" +msgstr "" + +#: plinth/modules/tor/templates/tor.html:77 +msgid "Hidden Service" +msgstr "" + +#: plinth/modules/tor/templates/tor.html:78 +#: plinth/modules/tor/templates/tor.html:120 +msgid "Port" +msgstr "" + +#: plinth/modules/tor/templates/tor.html:103 +msgid "Bridge" +msgstr "" + +#: plinth/modules/tor/templates/tor.html:106 +#, python-format +msgid "" +"Your %(box_name)s is configured as a Tor bridge with obfsproxy, so it can " +"help circumvent censorship. If your %(box_name)s is behind a router or " +"firewall, you should make sure the following ports are open, and port-" +"forwarded, if necessary:" +msgstr "" + +#: plinth/modules/tor/templates/tor.html:119 +msgid "Service" +msgstr "" + +#: plinth/modules/tor/templates/tor.html:135 +msgid "SOCKS" +msgstr "" + +#: plinth/modules/tor/templates/tor.html:138 +#, python-format +msgid "A Tor SOCKS port is available on your %(box_name)s on TCP port 9050." +msgstr "" + +#: plinth/modules/tor/views.py:68 +msgid "Tor Control Panel" +msgstr "" + +#: plinth/modules/tor/views.py:79 +#, python-brace-format +msgid "Action error: {0} [{1}] [{2}]" +msgstr "" + +#: plinth/modules/tor/views.py:148 +#| msgid "Configuration updated" +msgid "Configuration updated." +msgstr "Konfiguration uppdaterad." + +#: plinth/modules/tor/views.py:150 +msgid "An error occurred during configuration." +msgstr "" + +#: plinth/modules/transmission/__init__.py:38 +#: plinth/modules/transmission/templates/transmission.html:26 +#: plinth/modules/transmission/views.py:67 +msgid "BitTorrent (Transmission)" +msgstr "" + +#: plinth/modules/transmission/__init__.py:43 +msgid "Transmission BitTorrent" +msgstr "" + +#: plinth/modules/transmission/forms.py:29 +msgid "Enable Transmission daemon" +msgstr "" + +#: plinth/modules/transmission/forms.py:33 +msgid "Download directory" +msgstr "" + +#: plinth/modules/transmission/forms.py:34 +msgid "" +"Directory where downloads are saved. If you change the default directory, " +"ensure that the new directory exists and is writable by \"debian-transmission" +"\" user." +msgstr "" + +#: plinth/modules/transmission/forms.py:40 +msgid "Username to login to the web interface." +msgstr "" + +#: plinth/modules/transmission/forms.py:44 +msgid "" +"Password to login to the web interface. Current password is shown in a " +"hashed format. To set a new password, enter the password in plain text." +msgstr "" + +#: plinth/modules/transmission/templates/transmission.html:29 +msgid "" +"BitTorrent is a peer-to-peer file sharing protocol. Transmission daemon " +"handles Bitorrent file sharing. Note that BitTorrent is not anonymous." +msgstr "" + +#: plinth/modules/transmission/templates/transmission.html:37 +msgid "" +"Access the web interface at /transmission." +msgstr "" + +#: plinth/modules/transmission/templates/transmission.html:47 +msgid "Transmission daemon is running" +msgstr "" + +#: plinth/modules/transmission/templates/transmission.html:50 +msgid "Transmission daemon is not running." +msgstr "" + +#: plinth/modules/upgrades/__init__.py:33 +msgid "Software Upgrades" +msgstr "" + +#: plinth/modules/upgrades/forms.py:29 +msgid "Enable automatic upgrades" +msgstr "" + +#: plinth/modules/upgrades/forms.py:30 +msgid "" +"When enabled, the unattended-upgrades program will be run once per day. It " +"will attempt to perform any package upgrades that are available." +msgstr "" + +#: plinth/modules/upgrades/templates/upgrades.html:37 +msgid "" +"Upgrades install the latest software and security updates. When automatic " +"upgrades are enabled, upgrades are automatically run every night. You don't " +"normally need to start the upgrade process." +msgstr "" + +#: plinth/modules/upgrades/templates/upgrades.html:45 +msgid "" +"Depending on the number of packages to install, this may take a long time to " +"complete. While upgrades are in progress, you will not be able to install " +"other packages. During the upgrade, this web interface may be temporarily " +"unavailable and show an error. Refresh the page to continue." +msgstr "" + +#: plinth/modules/upgrades/templates/upgrades.html:58 +msgid "Upgrade now »" +msgstr "" + +#: plinth/modules/upgrades/templates/upgrades.html:65 +msgid "A package manager is running." +msgstr "" + +#: plinth/modules/upgrades/templates/upgrades.html:70 +msgid "Recent log from upgrades:" +msgstr "" + +#: plinth/modules/upgrades/views.py:36 plinth/modules/upgrades/views.py:66 +msgid "Automatic Upgrades" +msgstr "" + +#: plinth/modules/upgrades/views.py:38 +msgid "Upgrade Packages" +msgstr "" + +#: plinth/modules/upgrades/views.py:96 +msgid "Upgrade process started." +msgstr "" + +#: plinth/modules/upgrades/views.py:99 +#| msgid "Creating LDAP user failed." +msgid "Starting upgrade failed." +msgstr "Det gick inte att starta uppgraderingen." + +#: plinth/modules/upgrades/views.py:102 +msgid "Package Upgrades" +msgstr "" + +#: plinth/modules/upgrades/views.py:131 +#, python-brace-format +msgid "Error when configuring unattended-upgrades: {error}" +msgstr "" + +#: plinth/modules/upgrades/views.py:136 +msgid "Automatic upgrades enabled" +msgstr "" + +#: plinth/modules/upgrades/views.py:138 +msgid "Automatic upgrades disabled" +msgstr "" + +#: plinth/modules/users/__init__.py:36 +msgid "Users and Groups" +msgstr "" + +#: plinth/modules/users/__init__.py:65 +#, python-brace-format +msgid "Check LDAP entry \"{search_item}\"" +msgstr "" + +#: plinth/modules/users/forms.py:28 +msgid "admin" +msgstr "" + +#: plinth/modules/users/forms.py:29 +msgid "wiki" +msgstr "" + +#: plinth/modules/users/forms.py:41 +msgid "Groups" +msgstr "" + +#: plinth/modules/users/forms.py:45 +msgid "" +"Select which services should be available to the new user. The user will be " +"able to log in to services that support single sign-on through LDAP, if they " +"are in the appropriate group.

Users in the admin group will be " +"able to log in to all services. They can also log in to the system through " +"SSH and have administrative privileges (sudo)." +msgstr "" + +#: plinth/modules/users/forms.py:80 +#, python-brace-format +msgid "Failed to add new user to {group} group." +msgstr "" + +#: plinth/modules/users/forms.py:92 +msgid "SSH Keys" +msgstr "" + +#: plinth/modules/users/forms.py:96 +msgid "" +"Setting an SSH public key will allow this user to securely log in to the " +"system without using a password. You may enter multiple keys, one on each " +"line. Blank lines and lines starting with # will be ignored." +msgstr "" + +#: plinth/modules/users/forms.py:136 +msgid "Renaming LDAP user failed." +msgstr "" + +#: plinth/modules/users/forms.py:148 +msgid "Failed to remove user from group." +msgstr "" + +#: plinth/modules/users/forms.py:159 +msgid "Failed to add user to group." +msgstr "" + +#: plinth/modules/users/forms.py:188 +msgid "Changing LDAP user password failed." +msgstr "" + +#: plinth/modules/users/templates/users_change_password.html:27 +#, python-format +msgid "Change Password for %(username)s" +msgstr "" + +#: plinth/modules/users/templates/users_change_password.html:40 +msgid "Save Password" +msgstr "" + +#: plinth/modules/users/templates/users_create.html:42 +#: plinth/modules/users/views.py:36 plinth/modules/users/views.py:56 +msgid "Create User" +msgstr "" + +#: plinth/modules/users/templates/users_delete.html:26 +#: plinth/modules/users/views.py:110 +msgid "Delete User" +msgstr "" + +#: plinth/modules/users/templates/users_delete.html:29 +#, python-format +msgid "Delete user %(username)s permanently?" +msgstr "" + +#: plinth/modules/users/templates/users_delete.html:38 +#, python-format +msgid "Delete %(username)s" +msgstr "" + +#: plinth/modules/users/templates/users_list.html:46 +#, python-format +msgid "Delete user %(username)s" +msgstr "" + +#: plinth/modules/users/templates/users_list.html:53 +#, python-format +msgid "Edit user %(username)s" +msgstr "" + +#: plinth/modules/users/templates/users_update.html:39 +#, python-format +msgid "" +"Use the change password form to " +"change the password." +msgstr "" + +#: plinth/modules/users/templates/users_update.html:53 +msgid "Save Changes" +msgstr "" + +#: plinth/modules/users/views.py:34 plinth/modules/users/views.py:69 +msgid "Users" +msgstr "" + +#: plinth/modules/users/views.py:54 +#, python-format +msgid "User %(username)s created." +msgstr "" + +#: plinth/modules/users/views.py:78 +#, python-format +msgid "User %(username)s updated." +msgstr "" + +#: plinth/modules/users/views.py:79 +msgid "Edit User" +msgstr "" + +#: plinth/modules/users/views.py:120 +#, python-brace-format +msgid "User {user} deleted." +msgstr "" + +#: plinth/modules/users/views.py:127 +msgid "Deleting LDAP user failed." +msgstr "" + +#: plinth/modules/users/views.py:136 +msgid "Change Password" +msgstr "" + +#: plinth/modules/users/views.py:137 +msgid "Password changed successfully." +msgstr "" + +#: plinth/modules/xmpp/__init__.py:41 plinth/modules/xmpp/__init__.py:46 +#: plinth/modules/xmpp/templates/xmpp.html:26 plinth/modules/xmpp/views.py:75 +msgid "Chat Server (XMPP)" +msgstr "" + +#: plinth/modules/xmpp/forms.py:29 +msgid "Enable XMPP" +msgstr "" + +#: plinth/modules/xmpp/templates/xmpp.html:29 +msgid "" +"XMPP is an open and standardized communication protocol. Here you can run " +"and configure your XMPP server, called ejabberd." +msgstr "" + +#: plinth/modules/xmpp/templates/xmpp.html:36 +msgid "" +"To actually communicate, you can use the web client or " +"any other XMPP client." +msgstr "" + +#: plinth/modules/xmpp/templates/xmpp.html:45 +#, python-format +msgid "" +"Your XMPP server domain is set to %(domainname)s. User IDs will look " +"like username@%(domainname)s. You can setup your domain on the system " +"Configure page." +msgstr "" + +#: plinth/modules/xmpp/templates/xmpp.html:55 +msgid "Launch web client" +msgstr "" + +#: plinth/modules/xmpp/templates/xmpp.html:63 +msgid "ejabberd is running" +msgstr "" + +#: plinth/modules/xmpp/templates/xmpp.html:66 +msgid "ejabberd is not running" +msgstr "" + +#: plinth/network.py:39 +msgid "PPPoE" +msgstr "" + +#: plinth/package.py:156 +msgid "packages not found" +msgstr "" + +#: plinth/package.py:263 +msgid "Installed and configured packages successfully." +msgstr "" + +#: plinth/package.py:268 +#, python-brace-format +msgid "Error installing packages: {string} {details}" +msgstr "" + +#: plinth/service.py:73 +msgid "Web Server" +msgstr "" + +#: plinth/service.py:74 +msgid "Web Server over Secure Socket Layer" +msgstr "" + +#: plinth/service.py:76 +msgid "Secure Shell (SSH) Server" +msgstr "" + +#: plinth/service.py:79 +#, python-brace-format +msgid "{box_name} Web Interface (Plinth)" +msgstr "" + +#: plinth/templates/404.html:25 +msgid "404" +msgstr "" + +#: plinth/templates/404.html:28 +#, python-format +msgid "Requested page %(request_path)s was not found." +msgstr "" + +#: plinth/templates/404.html:34 +msgid "" +"If you believe this missing page should exist, please file a bug at the " +"Plinth project issue " +"tracker." +msgstr "" + +#: plinth/templates/500.html:25 +msgid "500" +msgstr "" + +#: plinth/templates/500.html:28 +msgid "" +"This is an internal error and not something you caused or can fix. Please " +"report the error on the bug tracker so we can fix it." +msgstr "" + +#: plinth/templates/base.html:49 +#, python-format +msgid "Plinth administrative interface for the %(box_name)s" +msgstr "" + +#: plinth/templates/base.html:83 +msgid "Toggle navigation" +msgstr "" + +#: plinth/templates/base.html:125 plinth/templates/base.html.py:126 +msgid "Change password" +msgstr "" + +#: plinth/templates/base.html:129 plinth/templates/base.html.py:130 +#: plinth/templates/base.html:143 plinth/templates/base.html.py:145 +msgid "Log out" +msgstr "" + +#: plinth/templates/base.html:135 plinth/templates/base.html.py:137 +msgid "Log in" +msgstr "" + +#: plinth/templates/login.html:35 +msgid "Login" +msgstr "" + +#: plinth/templates/package_install.html:35 +msgid "Installation" +msgstr "" + +#: plinth/templates/package_install.html:40 +msgid "" +"This feature requires addtional packages to be installed. Do you wish to " +"install them?" +msgstr "" + +#: plinth/templates/package_install.html:49 +msgid "Package" +msgstr "" + +#: plinth/templates/package_install.html:50 +msgid "Summary" +msgstr "" + +#: plinth/templates/package_install.html:67 +msgid "Install" +msgstr "" + +#: plinth/templates/package_install.html:74 +#, python-format +msgid "Installing %(package_names)s: %(status)s" +msgstr "" + +#: plinth/templates/package_install.html:84 +#, python-format +msgid "%(percentage)s%% complete" +msgstr "" + +#~ msgid "show password" +#~ msgstr "Visa lösenord" + +#~ msgid "The following is the current status:" +#~ msgstr "Aktuell status:" + +#~ msgid "FreedomBox Manual" +#~ msgstr "FreedomBox Manual" + +#~ msgid "Create Wiki/Blog" +#~ msgstr "Skapa wiki eller blogg" diff -Nru plinth-0.7.2/plinth/locale/te/LC_MESSAGES/django.po plinth-0.8.1/plinth/locale/te/LC_MESSAGES/django.po --- plinth-0.7.2/plinth/locale/te/LC_MESSAGES/django.po 2015-12-23 11:34:40.000000000 +0000 +++ plinth-0.8.1/plinth/locale/te/LC_MESSAGES/django.po 2016-02-16 03:55:53.000000000 +0000 @@ -9,9 +9,9 @@ msgstr "" "Project-Id-Version: FreedomBox UI\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-12-20 13:58+0530\n" -"PO-Revision-Date: 2015-12-07 20:20+0000\n" -"Last-Translator: ikmaak \n" +"POT-Creation-Date: 2016-01-31 22:19+0530\n" +"PO-Revision-Date: 2016-01-16 02:37+0000\n" +"Last-Translator: Caly \n" "Language-Team: Telugu \n" "Language: te\n" @@ -51,11 +51,15 @@ msgid "Cannot connect to {host}:{port}" msgstr "అనుసంధానించండం సాధ్యంకాదు {host}:{port}" +#: plinth/context_processors.py:36 +msgid "FreedomBox" +msgstr "" + #: plinth/modules/apps/apps.py:26 msgid "Apps" msgstr "అనువర్తనాలు" -#: plinth/modules/apps/apps.py:32 plinth/templates/base.html.py:90 +#: plinth/modules/apps/apps.py:32 plinth/templates/base.html.py:93 msgid "Applications" msgstr "అనువర్తనాలు" @@ -90,10 +94,11 @@ msgstr "ఆవిష్కరణ సేవను అమలుచెయ్యి" #: plinth/modules/avahi/templates/avahi.html:29 +#, python-format msgid "" -"Service discovery allows other machines on the network to discover your " -"FreedomBox and services running on it. It also allows FreedomBox to " -"discover other machines and services running on your local network. Service " +"Service discovery allows other devices on the network to discover your " +"%(box_name)s and services running on it. It also allows %(box_name)s to " +"discover other devices and services running on your local network. Service " "discovery is not essential and works only on internal networks. It may be " "disabled to improve security especially when connecting to a hostile local " "network." @@ -102,14 +107,15 @@ #: plinth/modules/avahi/templates/avahi.html:40 #: plinth/modules/datetime/templates/datetime.html:35 #: plinth/modules/deluge/templates/deluge.html:39 -#: plinth/modules/dynamicdns/dynamicdns.py:38 +#: plinth/modules/dynamicdns/dynamicdns.py:39 #: plinth/modules/firewall/templates/firewall.html:57 #: plinth/modules/mumble/templates/mumble.html:44 #: plinth/modules/networks/templates/connection_show.html:261 #: plinth/modules/openvpn/templates/openvpn.html:81 #: plinth/modules/privoxy/templates/privoxy.html:48 #: plinth/modules/quassel/templates/quassel.html:50 -#: plinth/modules/tor/templates/tor.html:39 +#: plinth/modules/repro/templates/repro.html:58 +#: plinth/modules/tor/templates/tor.html:48 #: plinth/modules/transmission/templates/transmission.html:42 #: plinth/modules/xmpp/templates/xmpp.html:58 msgid "Status" @@ -132,9 +138,10 @@ #: plinth/modules/owncloud/templates/owncloud.html:51 #: plinth/modules/privoxy/templates/privoxy.html:62 #: plinth/modules/quassel/templates/quassel.html:65 +#: plinth/modules/repro/templates/repro.html:72 #: plinth/modules/roundcube/templates/roundcube.html:62 #: plinth/modules/shaarli/templates/shaarli.html:40 -#: plinth/modules/tor/templates/tor.html:74 +#: plinth/modules/tor/templates/tor.html:92 #: plinth/modules/transmission/templates/transmission.html:56 #: plinth/modules/xmpp/templates/xmpp.html:72 msgid "Configuration" @@ -150,10 +157,11 @@ #: plinth/modules/openvpn/templates/openvpn.html:138 #: plinth/modules/privoxy/templates/privoxy.html:70 #: plinth/modules/quassel/templates/quassel.html:73 +#: plinth/modules/repro/templates/repro.html:80 #: plinth/modules/restore/templates/restore_index.html:54 #: plinth/modules/roundcube/templates/roundcube.html:70 #: plinth/modules/shaarli/templates/shaarli.html:48 -#: plinth/modules/tor/templates/tor.html:82 +#: plinth/modules/tor/templates/tor.html:100 #: plinth/modules/transmission/templates/transmission.html:64 #: plinth/modules/upgrades/templates/upgrades_configure.html:34 #: plinth/modules/xmpp/templates/xmpp.html:80 @@ -162,12 +170,13 @@ #: plinth/modules/avahi/views.py:73 plinth/modules/datetime/views.py:85 #: plinth/modules/deluge/views.py:80 -#: plinth/modules/dynamicdns/dynamicdns.py:368 +#: plinth/modules/dynamicdns/dynamicdns.py:371 #: plinth/modules/ikiwiki/views.py:95 plinth/modules/mumble/views.py:80 #: plinth/modules/openvpn/views.py:142 plinth/modules/privoxy/views.py:83 -#: plinth/modules/quassel/views.py:76 plinth/modules/restore/views.py:68 -#: plinth/modules/roundcube/views.py:84 plinth/modules/shaarli/views.py:74 -#: plinth/modules/transmission/views.py:105 plinth/modules/xmpp/views.py:100 +#: plinth/modules/quassel/views.py:76 plinth/modules/repro/views.py:77 +#: plinth/modules/restore/views.py:68 plinth/modules/roundcube/views.py:84 +#: plinth/modules/shaarli/views.py:74 plinth/modules/transmission/views.py:109 +#: plinth/modules/xmpp/views.py:100 msgid "Configuration updated" msgstr "ఆకృతీకరణ తాజాపరుచింది" @@ -175,60 +184,63 @@ #: plinth/modules/deluge/views.py:82 plinth/modules/ikiwiki/views.py:97 #: plinth/modules/mumble/views.py:82 plinth/modules/openvpn/views.py:144 #: plinth/modules/owncloud/owncloud.py:93 plinth/modules/privoxy/views.py:85 -#: plinth/modules/quassel/views.py:78 plinth/modules/restore/views.py:70 -#: plinth/modules/roundcube/views.py:86 plinth/modules/shaarli/views.py:76 -#: plinth/modules/tor/tor.py:250 plinth/modules/transmission/views.py:107 -#: plinth/modules/upgrades/views.py:103 plinth/modules/xmpp/views.py:102 +#: plinth/modules/quassel/views.py:78 plinth/modules/repro/views.py:79 +#: plinth/modules/restore/views.py:70 plinth/modules/roundcube/views.py:86 +#: plinth/modules/shaarli/views.py:76 plinth/modules/tor/views.py:111 +#: plinth/modules/transmission/views.py:111 +#: plinth/modules/upgrades/views.py:118 plinth/modules/xmpp/views.py:102 msgid "Setting unchanged" msgstr "మారకుండా అమర్చుతోంది" -#: plinth/modules/config/config.py:83 plinth/modules/config/config.py:120 -#: plinth/modules/dynamicdns/dynamicdns.py:145 +#: plinth/modules/config/config.py:84 plinth/modules/config/config.py:121 +#: plinth/modules/dynamicdns/dynamicdns.py:148 msgid "Invalid domain name" msgstr "అధికారక్షేత్రం పేరు చెల్లదు" -#: plinth/modules/config/config.py:94 +#: plinth/modules/config/config.py:95 msgid "Hostname" msgstr "ఆహ్వానించువ్యక్తి పేరు" -#: plinth/modules/config/config.py:96 +#: plinth/modules/config/config.py:97 +#, python-brace-format msgid "" -"Hostname is the local name by which other machines on the local network " -"reach your machine. It must start and end with an alphabet or a digit and " -"have as interior characters only alphabets, digits and hyphens. Total " +"Hostname is the local name by which other devices on the local network can " +"reach your {box_name}. It must start and end with an alphabet or a digit " +"and have as interior characters only alphabets, digits and hyphens. Total " "length must be 63 characters or less." msgstr "" -#: plinth/modules/config/config.py:104 +#: plinth/modules/config/config.py:105 msgid "Invalid hostname" msgstr "ఆహ్వానించువ్యక్తి పేరు చెల్లదు" -#: plinth/modules/config/config.py:107 plinth/modules/config/config.py:153 +#: plinth/modules/config/config.py:108 plinth/modules/config/config.py:153 #: plinth/modules/config/config.py:265 -#: plinth/modules/dynamicdns/dynamicdns.py:140 +#: plinth/modules/dynamicdns/dynamicdns.py:143 msgid "Domain Name" msgstr "అధికారక్షేత్రం పేరు" -#: plinth/modules/config/config.py:109 +#: plinth/modules/config/config.py:110 +#, python-brace-format msgid "" -"Domain name is the global name by which other machines on the Internet can " -"reach you. It must consist of labels separated by dots. Each label must " -"start and end with an alphabet or a digit and have as interior characters " -"only alphabets, digits and hyphens. Length of each label must be 63 " -"characters or less. Total length of domain name must be 253 characters or " -"less." +"Domain name is the global name by which other devices on the Internet can " +"reach your {box_name}. It must consist of labels separated by dots. Each " +"label must start and end with an alphabet or a digit and have as interior " +"characters only alphabets, digits and hyphens. Length of each label must be " +"63 characters or less. Total length of domain name must be 253 characters " +"or less." msgstr "" -#: plinth/modules/config/config.py:124 +#: plinth/modules/config/config.py:125 msgid "Language" msgstr "" -#: plinth/modules/config/config.py:126 -msgid "Language for this FreedomBox web administration interface" +#: plinth/modules/config/config.py:127 +msgid "Language for this web administration interface" msgstr "" #: plinth/modules/config/config.py:135 -#: plinth/modules/dynamicdns/dynamicdns.py:36 +#: plinth/modules/dynamicdns/dynamicdns.py:37 #: plinth/modules/ikiwiki/views.py:36 msgid "Configure" msgstr "ఆకృతీకరణ" @@ -415,147 +427,155 @@ msgid "Result" msgstr "ఫలితం" -#: plinth/modules/dynamicdns/dynamicdns.py:34 plinth/modules/help/help.py:40 +#: plinth/modules/dynamicdns/dynamicdns.py:35 plinth/modules/help/help.py:40 msgid "About" msgstr "గురించి" -#: plinth/modules/dynamicdns/dynamicdns.py:44 -#: plinth/modules/dynamicdns/dynamicdns.py:53 +#: plinth/modules/dynamicdns/dynamicdns.py:45 +#: plinth/modules/dynamicdns/dynamicdns.py:54 msgid "Dynamic DNS" msgstr "చురుకైన DNS" -#: plinth/modules/dynamicdns/dynamicdns.py:70 +#: plinth/modules/dynamicdns/dynamicdns.py:71 msgid "" "The Variables <User>, <Pass>, <Ip>, <Domain> may be " "used within the URL. For details see the update URL templates of the example " "providers." msgstr "" -#: plinth/modules/dynamicdns/dynamicdns.py:74 +#: plinth/modules/dynamicdns/dynamicdns.py:75 msgid "" "Please choose an update protocol according to your provider. If your " "provider does not support the GnudIP protocol or your provider is not listed " "you may use the update URL of your provider." msgstr "" -#: plinth/modules/dynamicdns/dynamicdns.py:79 +#: plinth/modules/dynamicdns/dynamicdns.py:80 msgid "" "Please do not enter a URL here (like \"https://example.com/\") but only the " -"hostname of the GnuDIP server (like \"example.pcom\")." +"hostname of the GnuDIP server (like \"example.com\")." msgstr "" -#: plinth/modules/dynamicdns/dynamicdns.py:83 -msgid "The public domain name you want use to reach your box." +#: plinth/modules/dynamicdns/dynamicdns.py:84 +#, python-brace-format +msgid "The public domain name you want use to reach your {box_name}." msgstr "" -#: plinth/modules/dynamicdns/dynamicdns.py:85 +#: plinth/modules/dynamicdns/dynamicdns.py:87 msgid "Use this option if your provider uses self signed certificates." msgstr "" -#: plinth/modules/dynamicdns/dynamicdns.py:88 +#: plinth/modules/dynamicdns/dynamicdns.py:90 msgid "" "If this option is selected, your username and password will be used for HTTP " "basic authentication." msgstr "" -#: plinth/modules/dynamicdns/dynamicdns.py:91 +#: plinth/modules/dynamicdns/dynamicdns.py:93 msgid "" "Leave this field empty if you want to keep your previous configured password." msgstr "" -#: plinth/modules/dynamicdns/dynamicdns.py:94 +#: plinth/modules/dynamicdns/dynamicdns.py:96 +#, python-brace-format msgid "" -"Optional Value. If your FreedomBox is not connected directly to the Internet " +"Optional Value. If your {box_name} is not connected directly to the Internet " "(i.e. connected to a NAT router) this URL is used to figure out the real " -"Internet IP. The URL should simply return the IP wherethe client comes from. " -"Example: http://myip.datasystems24.de" +"Internet IP. The URL should simply return the IP where the client comes from " +"(example: http://myip.datasystems24.de)." msgstr "" -#: plinth/modules/dynamicdns/dynamicdns.py:101 +#: plinth/modules/dynamicdns/dynamicdns.py:104 msgid "" "You should have been requested to select a username when you created the " "account." msgstr "" -#: plinth/modules/dynamicdns/dynamicdns.py:112 +#: plinth/modules/dynamicdns/dynamicdns.py:115 msgid "Enable Dynamic DNS" msgstr "చురుకైన DNS అమలుచెయ్యి" -#: plinth/modules/dynamicdns/dynamicdns.py:115 +#: plinth/modules/dynamicdns/dynamicdns.py:118 msgid "Service type" msgstr "సేవ రకం" -#: plinth/modules/dynamicdns/dynamicdns.py:120 +#: plinth/modules/dynamicdns/dynamicdns.py:123 msgid "GnudIP Server Address" msgstr "సేవిక చిరునామా GnudIP" -#: plinth/modules/dynamicdns/dynamicdns.py:125 +#: plinth/modules/dynamicdns/dynamicdns.py:128 msgid "Invalid server name" msgstr "సేవిక పేరు చెలదు" -#: plinth/modules/dynamicdns/dynamicdns.py:128 +#: plinth/modules/dynamicdns/dynamicdns.py:131 msgid "Update URL" msgstr "URL నవీకరణ" -#: plinth/modules/dynamicdns/dynamicdns.py:132 -msgid "accept all SSL certificates" +#: plinth/modules/dynamicdns/dynamicdns.py:135 +msgid "Accept all SSL certificates" msgstr "" -#: plinth/modules/dynamicdns/dynamicdns.py:136 -msgid "use HTTP basic authentication" +#: plinth/modules/dynamicdns/dynamicdns.py:139 +#, fuzzy +#| msgid "use HTTP basic authentication" +msgid "Use HTTP basic authentication" msgstr "HTTP ప్రాథమిక ప్రమాణీకరణ ఉపయోగించు" -#: plinth/modules/dynamicdns/dynamicdns.py:148 -#: plinth/modules/networks/forms.py:118 plinth/modules/transmission/forms.py:39 +#: plinth/modules/dynamicdns/dynamicdns.py:151 +#: plinth/modules/networks/forms.py:146 plinth/modules/transmission/forms.py:39 msgid "Username" msgstr "వినియోగి పేరు" -#: plinth/modules/dynamicdns/dynamicdns.py:151 -#: plinth/modules/networks/forms.py:119 plinth/modules/transmission/forms.py:43 +#: plinth/modules/dynamicdns/dynamicdns.py:154 +#: plinth/modules/networks/forms.py:147 plinth/modules/transmission/forms.py:43 msgid "Password" msgstr "రహస్యపదం" -#: plinth/modules/dynamicdns/dynamicdns.py:154 -msgid "show password" -msgstr "రహస్యపదం చూపించు" +#: plinth/modules/dynamicdns/dynamicdns.py:157 +#: plinth/modules/networks/forms.py:149 +msgid "Show password" +msgstr "రహస్యపదం కనబర్చు" -#: plinth/modules/dynamicdns/dynamicdns.py:158 +#: plinth/modules/dynamicdns/dynamicdns.py:161 msgid "IP check URL" msgstr "IP తనిఖీ URL" -#: plinth/modules/dynamicdns/dynamicdns.py:184 +#: plinth/modules/dynamicdns/dynamicdns.py:187 msgid "Please provide update URL or a GnuDIP Server" msgstr "URL నవీకరణ దయచేసి అందించండి లేక ఒక GnuDIP సేవిక" -#: plinth/modules/dynamicdns/dynamicdns.py:187 +#: plinth/modules/dynamicdns/dynamicdns.py:190 msgid "Please provide GnuDIP username" msgstr "GnuDIPవాడుకరిపేరుని దయచేసి అందించండి" -#: plinth/modules/dynamicdns/dynamicdns.py:190 +#: plinth/modules/dynamicdns/dynamicdns.py:193 msgid "Please provide GnuDIP domain" msgstr "GnuDIP అధికారక్షేత్రం దయచేసి అందించండి" -#: plinth/modules/dynamicdns/dynamicdns.py:195 +#: plinth/modules/dynamicdns/dynamicdns.py:198 msgid "Please provide a password" msgstr "ఒక రహస్యపదం అందించండి దయచేసి" -#: plinth/modules/dynamicdns/dynamicdns.py:214 +#: plinth/modules/dynamicdns/dynamicdns.py:217 msgid "Configure Dynamic DNS" msgstr "చురుకైనDNS ఆకృతీకరించు" -#: plinth/modules/dynamicdns/dynamicdns.py:236 +#: plinth/modules/dynamicdns/dynamicdns.py:239 msgid "Status of Dynamic DNS" msgstr "చురుకైనDNS స్థితి" #: plinth/modules/dynamicdns/templates/dynamicdns.html:25 -msgid "DynamicDNS client" +#, fuzzy +#| msgid "DynamicDNS client" +msgid "Dynamic DNS Client" msgstr "చురుకైనDNS వినియోగదారుడు" #: plinth/modules/dynamicdns/templates/dynamicdns.html:28 +#, python-format msgid "" "If your internet provider changes your IP address periodic (i.e. every 24h) " "it may be hard for others to find you in the WEB. And for this reason nobody " -"may find the services which are provided by FreedomBox (like your ownCloud)." +"may find the services which are provided by %(box_name)s, such as ownCloud." msgstr "" #: plinth/modules/dynamicdns/templates/dynamicdns.html:37 @@ -565,7 +585,7 @@ "allows you to push your current public IP address to an gnudip server. Afterwards " "the Server will assign your DNS name with the new IP and if someone from the " -"internet asks for your DNS name he will get your current IP answered." +"Internet asks for your DNS name he will get your current IP answered." msgstr "" #: plinth/modules/dynamicdns/templates/dynamicdns.html:50 @@ -578,10 +598,10 @@ msgstr "" #: plinth/modules/dynamicdns/templates/dynamicdns.html:61 +#, python-format msgid "" -"If your freedombox is connected behind some NAT router, don't forget to add " -"portforwarding (i.e. forward some standard ports like 80 and 443) to your " -"freedombox device." +"If your %(box_name)s is connected behind some NAT router, don't forget to " +"add port forwarding (i.e. forward some standard ports like 80 and 443)." msgstr "" #: plinth/modules/dynamicdns/templates/dynamicdns_configure.html:30 @@ -601,16 +621,18 @@ msgstr "" #: plinth/modules/dynamicdns/templates/dynamicdns_status.html:35 -msgid "Direct connection to the internet." -msgstr "అంతర్జాలిక కు నేరుగా బంధం" +#, fuzzy +#| msgid "Direct connection to the internet." +msgid "Direct connection to the Internet." +msgstr "అంతర్జాలిక కు నేరుగా బంధం." #: plinth/modules/dynamicdns/templates/dynamicdns_status.html:37 #, python-format msgid "" -"Behind NAT, this means that dynamic DNS service will poll the \"IP check URL" -"\" for changes (we need the \"IP check URL\" for this reason - otherwise we " -"will not detect IP changes). It may take up to %(timer)s minutes until we " -"update your DNS entry in case of WAN IP change." +"Behind NAT. This means that Dynamic DNS service will poll the \"IP check URL" +"\" for changes (the \"IP check URL\" entry is needed for this - otherwise IP " +"changes will not be detected). In case the WAN IP changes, it may take up " +"to %(timer)s minutes until your DNS entry is updated." msgstr "" #: plinth/modules/dynamicdns/templates/dynamicdns_status.html:48 @@ -626,14 +648,14 @@ #: plinth/modules/firewall/templates/firewall.html:28 #, python-format msgid "" -"Firewall is a network security system that controls the incoming and " -"outgoing network traffic on your %(box_name)s. Keeping a firewall enabled " -"and properly configured reduces risk of security threat from the Internet." +"Firewall is a security system that controls the incoming and outgoing " +"network traffic on your %(box_name)s. Keeping a firewall enabled and " +"properly configured reduces risk of security threat from the Internet." msgstr "" #: plinth/modules/firewall/templates/firewall.html:36 -msgid "The following is the current status:" -msgstr "ఇది ప్రస్తుత స్థితి" +msgid "Current status:" +msgstr "" #: plinth/modules/firewall/templates/firewall.html:41 #, python-format @@ -649,11 +671,13 @@ msgstr "సేవ / పోర్ట్" #: plinth/modules/firewall/templates/firewall.html:67 +#: plinth/modules/letsencrypt/templates/letsencrypt.html:91 #: plinth/modules/names/templates/names.html:51 msgid "Enabled" msgstr "క్రియాశీలీ" #: plinth/modules/firewall/templates/firewall.html:70 +#: plinth/modules/letsencrypt/templates/letsencrypt.html:93 #: plinth/modules/names/templates/names.html:53 msgid "Disabled" msgstr "నిరుపయోగ" @@ -677,8 +701,8 @@ #: plinth/modules/firewall/templates/firewall.html:103 msgid "" "The operation of the firewall is automatic. When you enable a service it is " -"automatically permitted in the firewall and you disable a service is " -"automatically disabled in the firewall." +"also permitted in the firewall and when you disable a service it is also " +"disabled in the firewall." msgstr "" #: plinth/modules/first_boot/forms.py:48 plinth/modules/users/forms.py:70 @@ -693,31 +717,37 @@ msgid "User account created, you are now logged in" msgstr "" -#: plinth/modules/first_boot/templates/firstboot_state0.html:50 -msgid "Congratulations! Your FreedomBox is up and running!" -msgstr "" +#: plinth/modules/first_boot/templates/firstboot_navbar.html:23 +#: plinth/modules/help/templates/help_index.html:25 +#: plinth/templates/base.html:102 +msgid "Help" +msgstr "సహాయం" -#: plinth/modules/first_boot/templates/firstboot_state0.html:54 +#: plinth/modules/first_boot/templates/firstboot_state0.html:45 +#, fuzzy +#| msgid "Start setup" +msgid "Start Setup" +msgstr "అమర్చిపెట్టు ప్రారంభం" + +#: plinth/modules/first_boot/templates/firstboot_state0.html:49 +#, python-format msgid "" -"Please provide the following basic information to complete the setup process." +"To complete the setup of your %(box_name)s, please provide some basic " +"information." msgstr "" -#: plinth/modules/first_boot/templates/firstboot_state0.html:62 -msgid "Next" -msgstr "తర్వాత" - -#: plinth/modules/first_boot/templates/firstboot_state1.html:39 +#: plinth/modules/first_boot/templates/firstboot_state1.html:41 msgid "Administrator Account" msgstr "నిర్వాహక ఖాతా" -#: plinth/modules/first_boot/templates/firstboot_state1.html:42 +#: plinth/modules/first_boot/templates/firstboot_state1.html:44 msgid "" "Choose a username and password to access this web interface. The password " "can be changed later. This user will be granted administrative privileges. " "Other users can be added later." msgstr "" -#: plinth/modules/first_boot/templates/firstboot_state1.html:55 +#: plinth/modules/first_boot/templates/firstboot_state1.html:57 msgid "Box it up!" msgstr "ఇది పెట్టెపైకి!" @@ -726,30 +756,33 @@ msgstr "అమరక పూర్తయ్యింది!" #: plinth/modules/first_boot/templates/firstboot_state10.html:32 +#, python-format msgid "" -"FreedomBox setup is now complete. However, you should check the network " -"setup and modify it if necessary. Do not forget to change the default Wi-Fi " -"passwords." +"%(box_name)s setup is now complete. To make your %(box_name)s functional, " +"you need some applications. They will be installed the first time you " +"access them." msgstr "" -#: plinth/modules/first_boot/templates/firstboot_state10.html:40 -msgid "" -"To make your FreedomBox functional, you need some applications. " -"Applications will be installed the first time you access them." -msgstr "" +#: plinth/modules/first_boot/templates/firstboot_state10.html:41 +msgid "Go to Apps" +msgstr "అనువర్తనాల వైపు వెళ్ళండి" -#: plinth/modules/first_boot/templates/firstboot_state10.html:47 -msgid "Network Configuration" +#: plinth/modules/first_boot/templates/firstboot_state10.html:44 +#, fuzzy +#| msgid "Network Configuration" +msgid "Current Network Configuration" msgstr "అల్లిక రూపకరణ" -#: plinth/modules/first_boot/templates/firstboot_state10.html:54 +#: plinth/modules/first_boot/templates/firstboot_state10.html:47 +msgid "" +"You should check the network setup and modify it if necessary. Do not forget " +"to change the default Wi-Fi passwords!" +msgstr "" + +#: plinth/modules/first_boot/templates/firstboot_state10.html:57 msgid "Go to Networks" msgstr "అల్లిక వైపు వెళ్ళండి" -#: plinth/modules/first_boot/templates/firstboot_state10.html:59 -msgid "Go to Apps" -msgstr "అనువర్తనాల వైపు వెళ్ళండి" - #: plinth/modules/first_boot/views.py:60 msgid "Setup Complete" msgstr "అమరక పూర్తయ్యింది" @@ -762,9 +795,9 @@ msgid "Where to Get Help" msgstr "సహాయాం ఎక్కడ పొందగలం" -#: plinth/modules/help/help.py:38 plinth/modules/help/help.py:72 -msgid "FreedomBox Manual" -msgstr "ఫ్రీడమ్ బాక్స్ నిర్దేశిక" +#: plinth/modules/help/help.py:38 +msgid "Manual" +msgstr "" #: plinth/modules/help/help.py:48 msgid "Documentation and FAQ" @@ -775,15 +808,22 @@ msgid "About {box_name}" msgstr "{box_name} గురించి" +#: plinth/modules/help/help.py:73 +#, fuzzy, python-brace-format +#| msgid "About {box_name}" +msgid "{box_name} Manual" +msgstr "{box_name} గురించి" + #: plinth/modules/help/templates/help_about.html:30 +#, python-format msgid "" -"FreedomBox is a community project to develop, design and promote personal " +"%(box_name)s is a community project to develop, design and promote personal " "servers running free software for private, personal communications. It is a " "networking appliance designed to allow interfacing with the rest of the " "Internet under conditions of protected privacy and data security. It hosts " "applications such as blog, wiki, website, social network, email, web proxy " -"and a Tor relay on a device that can replace your Wi-Fi router so that your " -"data stays with you." +"and a Tor relay, on a device that can replace your Wi-Fi router, so that " +"your data stays with you." msgstr "" #: plinth/modules/help/templates/help_about.html:43 @@ -797,68 +837,82 @@ msgstr "" #: plinth/modules/help/templates/help_about.html:56 +#, python-format msgid "" "There are a number of projects working to realize a future of distributed " -"services; FreedomBox aims to bring them all together in a convenient package." +"services; %(box_name)s aims to bring them all together in a convenient " +"package." msgstr "" #: plinth/modules/help/templates/help_about.html:64 +#, python-format msgid "" -"For more information about the FreedomBox project, see the FreedomBox Wiki." +"For more information about the %(box_name)s project, see the %(box_name)s Wiki." msgstr "" -#: plinth/modules/help/templates/help_about.html:72 +#: plinth/modules/help/templates/help_about.html:73 msgid "Learn more »" msgstr "" -#: plinth/modules/help/templates/help_about.html:75 +#: plinth/modules/help/templates/help_about.html:76 #, python-format msgid "You are running Plinth version %(version)s." msgstr "" -#: plinth/modules/help/templates/help_index.html:25 -#: plinth/templates/base.html:98 -msgid "Help" -msgstr "సహాయం" +#: plinth/modules/help/templates/help_base.html:36 +#, python-format +msgid "%(box_name)s Setup" +msgstr "" #: plinth/modules/help/templates/help_index.html:29 #, python-format msgid "" -"The FreedomBox Manual is the best place to " +"The %(box_name)s Manual is the best place to " "start for information regarding %(box_name)s." msgstr "" #: plinth/modules/help/templates/help_index.html:36 +#, python-format msgid "" -" FreedomBox " -"project wiki contains further information." +" " +"%(box_name)s project wiki contains further information." msgstr "" #: plinth/modules/help/templates/help_index.html:43 +#, python-format msgid "" -"To seek help from FreedomBox community, queries may be posted on the " -"mailing list. The list archives also contain information about problems " -"faced by other users and possible solutions." +"To seek help from %(box_name)s community, queries may be posted on the mailing list. The list archives also contain information about " +"problems faced by other users and possible solutions." msgstr "" #: plinth/modules/help/templates/help_index.html:53 +#, python-format msgid "" -"Many FreedomBox contributors and users are also available on the #freedombox " -"channel of the irc.oftc.net IRC network." +"Many %(box_name)s contributors and users are also available on the irc.oftc." +"net IRC network. Join and request help on the #freedombox " +"channel using the IRC web interface." msgstr "" #: plinth/modules/ikiwiki/__init__.py:38 -msgid "Wiki & Blog (Ikiwiki)" +#, fuzzy +#| msgid "Wiki & Blog (Ikiwiki)" +msgid "Wiki and Blog (ikiwiki)" msgstr "వికీ&బ్లాగ్ (Ikiwiki)" #: plinth/modules/ikiwiki/__init__.py:43 -msgid "Ikiwiki wikis and blogs" +#, fuzzy +#| msgid "Ikiwiki wikis and blogs" +msgid "ikiwiki wikis and blogs" msgstr "వికీలు మరియు బ్లాగ్ లు Ikiwik" #: plinth/modules/ikiwiki/forms.py:29 -msgid "Enable Ikiwiki" +#, fuzzy +#| msgid "Enable Ikiwiki" +msgid "Enable ikiwiki" msgstr "Ikiwiki అమలుచెయ్యి" #: plinth/modules/ikiwiki/forms.py:36 @@ -886,22 +940,24 @@ msgstr "" #: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:27 -#, python-format -msgid "Delete Wiki/Blog %(name)s" -msgstr "" +#, fuzzy, python-format +#| msgid "Delete Connection %(name)s" +msgid "Delete Wiki or Blog %(name)s" +msgstr "అనుసంధానం తొలగించు %(name)s" #: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:33 msgid "" "This action will remove all the posts, pages and comments including revision " -"history. Delete this wiki/blog permanently?" +"history. Delete this wiki or blog permanently?" msgstr "" -#: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:43 +#: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:44 #, python-format msgid "Delete %(name)s" msgstr "తొలగించు %(name)s" -#: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:46 +#: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:47 +#: plinth/modules/monkeysphere/templates/monkeysphere.html:60 #: plinth/modules/networks/templates/connections_delete.html:41 #: plinth/modules/users/templates/users_delete.html:41 msgid "Cancel" @@ -934,7 +990,9 @@ msgstr "సృష్టించు" #: plinth/modules/ikiwiki/views.py:73 -msgid "Wiki & Blog" +#, fuzzy +#| msgid "Wiki & Blog" +msgid "Wiki and Blog" msgstr "వికీ & బ్లాగ్" #: plinth/modules/ikiwiki/views.py:106 @@ -942,8 +1000,10 @@ msgstr "వికీ మరియు బ్లాగ్ నిర్వహించండి" #: plinth/modules/ikiwiki/views.py:132 -msgid "Create Wiki/Blog" -msgstr "వికీ/బ్లాగ్ సృష్టించు" +#, fuzzy +#| msgid "Create a Wiki or Blog" +msgid "Create Wiki or Blog" +msgstr "ఒక వికీ లేదా బ్లాగ్ సృష్టించు" #: plinth/modules/ikiwiki/views.py:145 #, python-brace-format @@ -968,7 +1028,7 @@ #: plinth/modules/ikiwiki/views.py:174 #, python-brace-format msgid "{name} deleted." -msgstr "తొలగించు {name}" +msgstr "తొలగించు {name}." #: plinth/modules/ikiwiki/views.py:176 #, python-brace-format @@ -976,9 +1036,154 @@ msgstr "తొలగిమంచలేము {name}: {error}" #: plinth/modules/ikiwiki/views.py:182 -msgid "Delete Wiki/Blog" +#, fuzzy +#| msgid "Delete Wiki/Blog" +msgid "Delete Wiki or Blog" msgstr "వికీ/బ్లాగ్ తొలగించు" +#: plinth/modules/letsencrypt/__init__.py:43 +#: plinth/modules/letsencrypt/templates/letsencrypt.html:38 +#: plinth/modules/letsencrypt/views.py:45 +msgid "Certificates (Let's Encrypt)" +msgstr "" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:41 +#, python-format +msgid "" +"A digital certficate allows users of a web service to verify the identity of " +"the service and to securely communicate with it. %(box_name)s can " +"automatically obtain and setup digital certificates for each available " +"domain. It does so by proving itself to be the owner of a domain to Let's " +"Encrypt, a certficate authority (CA)." +msgstr "" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:52 +msgid "" +"Let's Encrypt is a free, automated, and open certificate authority, run for " +"the public’s benefit by the Internet Security Research Group (ISRG). Please " +"read and agree with the Let's Encrypt Subscriber Agreement before using this service." +msgstr "" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:66 +#: plinth/modules/monkeysphere/templates/monkeysphere.html:70 +#, fuzzy +#| msgid "Domain Name" +msgid "Domain" +msgstr "అధికారక్షేత్రం పేరు" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:67 +msgid "Certificate Status" +msgstr "" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:68 +#, fuzzy +#| msgid "Security" +msgid "Website Security" +msgstr "భద్రత" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:69 +#: plinth/modules/monkeysphere/templates/monkeysphere.html:72 +#, fuzzy +#| msgid "Applications" +msgid "Actions" +msgstr "అనువర్తనాలు" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:79 +#, python-format +msgid "Expires on %(expiry_date)s" +msgstr "" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:85 +msgid "No certficate" +msgstr "" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:102 +msgid "Revoke" +msgstr "" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:108 +msgid "Re-obtain" +msgstr "" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:115 +msgid "Obtain" +msgstr "" + +#: plinth/modules/letsencrypt/views.py:55 +#, python-brace-format +msgid "Certificate successfully revoked for domain {domain}" +msgstr "" + +#: plinth/modules/letsencrypt/views.py:60 +#, python-brace-format +msgid "Failed to revoke certificate for domain {domain}: {error}" +msgstr "" + +#: plinth/modules/letsencrypt/views.py:72 +#, python-brace-format +msgid "Certificate successfully obtained for domain {domain}" +msgstr "" + +#: plinth/modules/letsencrypt/views.py:77 +#, python-brace-format +msgid "Failed to obtain certificate for domain {domain}: {error}" +msgstr "" + +#: plinth/modules/monkeysphere/__init__.py:32 +#: plinth/modules/monkeysphere/templates/monkeysphere.html:35 +#: plinth/modules/monkeysphere/views.py:44 +msgid "Monkeysphere" +msgstr "" + +#: plinth/modules/monkeysphere/templates/monkeysphere.html:38 +msgid "" +"With Monkeysphere, a PGP key can be generated for each configured domain " +"serving SSH. The PGP public key can then be uploaded to the PGP keyservers. " +"Users connecting to this machine through SSH can verify that they are " +"connecting to the correct host. For users to trust the key, at least one " +"person (usually the machine owner) must sign the key using the regular PGP " +"key signing process. See the Monkeysphere SSH documentation for more details." +msgstr "" + +#: plinth/modules/monkeysphere/templates/monkeysphere.html:53 +msgid "Publishing key to keyserver..." +msgstr "" + +#: plinth/modules/monkeysphere/templates/monkeysphere.html:71 +msgid "GPG Fingerprint" +msgstr "" + +#: plinth/modules/monkeysphere/templates/monkeysphere.html:83 +#: plinth/modules/names/views.py:45 +msgid "Not Available" +msgstr "" + +#: plinth/modules/monkeysphere/templates/monkeysphere.html:93 +msgid "Generate PGP Key" +msgstr "" + +#: plinth/modules/monkeysphere/templates/monkeysphere.html:101 +msgid "Publish Key" +msgstr "" + +#: plinth/modules/monkeysphere/views.py:58 +msgid "Generated PGP key." +msgstr "" + +#: plinth/modules/monkeysphere/views.py:83 +msgid "Cancelled key publishing." +msgstr "" + +#: plinth/modules/monkeysphere/views.py:120 +msgid "Published key to keyserver." +msgstr "" + +#: plinth/modules/monkeysphere/views.py:122 +msgid "Error occurred while publishing key." +msgstr "" + #: plinth/modules/mumble/__init__.py:38 #: plinth/modules/mumble/templates/mumble.html:26 #: plinth/modules/mumble/views.py:58 @@ -1014,174 +1219,155 @@ msgid "Mumble server is not running" msgstr "మంబ్లు సేవిక నడవంలేదు" -#: plinth/modules/names/__init__.py:30 +#: plinth/modules/names/__init__.py:29 msgid "HTTP" msgstr "" -#: plinth/modules/names/__init__.py:31 +#: plinth/modules/names/__init__.py:30 msgid "HTTPS" msgstr "" -#: plinth/modules/names/__init__.py:32 +#: plinth/modules/names/__init__.py:31 msgid "SSH" msgstr "" -#: plinth/modules/names/__init__.py:46 plinth/modules/names/views.py:34 +#: plinth/modules/names/__init__.py:45 plinth/modules/names/views.py:34 msgid "Name Services" msgstr "" -#: plinth/modules/names/__init__.py:107 -msgid "Not Available" -msgstr "" - #: plinth/modules/networks/__init__.py:108 #, python-brace-format msgid "Using DNSSEC on IPv{kind}" msgstr "IPv{kind} పై DNSSEC ఉపయోగించు" #: plinth/modules/networks/forms.py:30 -msgid "-- select --" -msgstr "--ఎంచుకొ--" - -#: plinth/modules/networks/forms.py:42 msgid "Connection Type" msgstr "సంధాన రకం" -#: plinth/modules/networks/forms.py:49 plinth/modules/networks/forms.py:106 -#: plinth/modules/networks/forms.py:133 +#: plinth/modules/networks/forms.py:37 msgid "Connection Name" msgstr "సంధాన పేరు" -#: plinth/modules/networks/forms.py:51 plinth/modules/networks/forms.py:108 -#: plinth/modules/networks/forms.py:135 +#: plinth/modules/networks/forms.py:39 msgid "Physical Interface" msgstr "శారీరక సంవిధానం" -#: plinth/modules/networks/forms.py:53 plinth/modules/networks/forms.py:110 -#: plinth/modules/networks/forms.py:137 +#: plinth/modules/networks/forms.py:41 msgid "The network device that this connection should be bound to." msgstr "" -#: plinth/modules/networks/forms.py:56 plinth/modules/networks/forms.py:113 -#: plinth/modules/networks/forms.py:140 +#: plinth/modules/networks/forms.py:44 msgid "Firewall Zone" msgstr "ఫైర్వాల్ క్షేత్రాం" -#: plinth/modules/networks/forms.py:57 plinth/modules/networks/forms.py:114 -#: plinth/modules/networks/forms.py:141 +#: plinth/modules/networks/forms.py:45 msgid "" "The firewall zone will control which services are available over this " "interfaces. Select Internal only for trusted networks." msgstr "" -#: plinth/modules/networks/forms.py:61 plinth/modules/networks/forms.py:162 +#: plinth/modules/networks/forms.py:49 msgid "IPv4 Addressing Method" msgstr "IPv4 చిరునామాయిచు పద్దతి" -#: plinth/modules/networks/forms.py:62 +#: plinth/modules/networks/forms.py:50 msgid "" "\"Shared\" method will start a DHCP server and \"Automatic\" method will " "acquire configuration from a DHCP server." msgstr "" -#: plinth/modules/networks/forms.py:68 plinth/modules/networks/forms.py:170 +#: plinth/modules/networks/forms.py:56 msgid "Address" msgstr "చిరునామా" -#: plinth/modules/networks/forms.py:72 plinth/modules/networks/forms.py:174 +#: plinth/modules/networks/forms.py:60 msgid "Netmask" msgstr "" -#: plinth/modules/networks/forms.py:73 plinth/modules/networks/forms.py:175 +#: plinth/modules/networks/forms.py:61 msgid "" "Optional value. If left blank, a default netmask based on the address will " "be used." msgstr "" -#: plinth/modules/networks/forms.py:78 plinth/modules/networks/forms.py:180 +#: plinth/modules/networks/forms.py:66 #: plinth/modules/networks/templates/connection_show.html:202 #: plinth/modules/networks/templates/connection_show.html:241 msgid "Gateway" msgstr "గేట్వే" -#: plinth/modules/networks/forms.py:79 plinth/modules/networks/forms.py:181 +#: plinth/modules/networks/forms.py:67 msgid "Optional value." msgstr "" -#: plinth/modules/networks/forms.py:83 plinth/modules/networks/forms.py:185 +#: plinth/modules/networks/forms.py:71 #, fuzzy #| msgid "DNS server" msgid "DNS Server" msgstr "సేవిక" -#: plinth/modules/networks/forms.py:84 plinth/modules/networks/forms.py:186 +#: plinth/modules/networks/forms.py:72 msgid "" "Optional value. If this value is given and IPv4 addressing method is " "\"Automatic\", the DNS Servers provided by a DHCP server will be ignored." msgstr "" -#: plinth/modules/networks/forms.py:90 plinth/modules/networks/forms.py:192 +#: plinth/modules/networks/forms.py:78 #, fuzzy #| msgid "DNS server" msgid "Second DNS Server" msgstr "సేవిక" -#: plinth/modules/networks/forms.py:91 plinth/modules/networks/forms.py:193 +#: plinth/modules/networks/forms.py:79 msgid "" "Optional value. If this value is given and IPv4 Addressing Method is " "\"Automatic\", the DNS Servers provided by a DHCP server will be ignored." msgstr "" -#: plinth/modules/networks/forms.py:121 -msgid "Show password" -msgstr "రహస్యపదం కనబర్చు" +#: plinth/modules/networks/forms.py:89 +msgid "-- select --" +msgstr "--ఎంచుకొ--" -#: plinth/modules/networks/forms.py:145 +#: plinth/modules/networks/forms.py:175 #: plinth/modules/networks/templates/connection_show.html:144 msgid "SSID" msgstr "SSID" -#: plinth/modules/networks/forms.py:146 +#: plinth/modules/networks/forms.py:176 msgid "The visible name of the network." msgstr "అల్లిక యొక్క కనిపించే పేరు." -#: plinth/modules/networks/forms.py:148 +#: plinth/modules/networks/forms.py:178 #: plinth/modules/networks/templates/connection_show.html:157 msgid "Mode" msgstr "విధం" -#: plinth/modules/networks/forms.py:153 +#: plinth/modules/networks/forms.py:183 msgid "Authentication Mode" msgstr "ప్రామాణీకరణ విధం" -#: plinth/modules/networks/forms.py:154 +#: plinth/modules/networks/forms.py:184 msgid "" "Select WPA if the wireless network is secured and requires clients to have " "the password to connect." msgstr "" -#: plinth/modules/networks/forms.py:158 +#: plinth/modules/networks/forms.py:188 msgid "Passphrase" msgstr "రహస్య పదం" -#: plinth/modules/networks/forms.py:166 -msgid "" -"Select Automatic (DHCP) if you are connecting to an existing wireless " -"network. Shared mode is useful when running an Access Point." -msgstr "" - #: plinth/modules/networks/networks.py:36 #: plinth/modules/networks/networks.py:56 msgid "Network Connections" msgstr "అల్లిక అనుసంధానములు" #: plinth/modules/networks/networks.py:38 -#: plinth/modules/networks/networks.py:273 +#: plinth/modules/networks/networks.py:242 msgid "Nearby Wi-Fi Networks" msgstr "సమీపంలో Wi-Fi అల్లిక" #: plinth/modules/networks/networks.py:40 -#: plinth/modules/networks/networks.py:295 +#: plinth/modules/networks/networks.py:264 msgid "Add Connection" msgstr "అనుసంధానం జతచేయుండి" @@ -1205,68 +1391,68 @@ msgid "This type of connection is not yet understood." msgstr "అనుసంధాన రకం ఇంకా అర్థంకాలేదు." -#: plinth/modules/networks/networks.py:170 -#: plinth/modules/networks/networks.py:229 +#: plinth/modules/networks/networks.py:139 +#: plinth/modules/networks/networks.py:198 #: plinth/modules/networks/templates/connections_edit.html:34 msgid "Edit Connection" msgstr "అనుసంధానని సవరించడం" -#: plinth/modules/networks/networks.py:240 +#: plinth/modules/networks/networks.py:209 #, python-brace-format msgid "Activated connection {name}." msgstr "అనుసంధానం ఉత్తేజపరిచింది {name}." -#: plinth/modules/networks/networks.py:243 +#: plinth/modules/networks/networks.py:212 msgid "Failed to activate connection: Connection not found." msgstr "అనుసంధానాన్ని ఉత్తేజపరచటంలొ విఫలమైంది: అనుసంధానం దొరకలేదు." -#: plinth/modules/networks/networks.py:247 +#: plinth/modules/networks/networks.py:216 #, python-brace-format msgid "Failed to activate connection {name}: No suitable device is available." msgstr "అనుసంధానాన్ని ఉత్తేజపరచటంలొ విఫలమైంది {name}: సరైన పరికరం అందుబాటులో లేదు." -#: plinth/modules/networks/networks.py:260 +#: plinth/modules/networks/networks.py:229 #, python-brace-format msgid "Deactivated connection {name}." msgstr "క్రియారహిత అనుసంధానం {name}." -#: plinth/modules/networks/networks.py:263 +#: plinth/modules/networks/networks.py:232 msgid "Failed to de-activate connection: Connection not found." msgstr "అనుసంధానం క్రియారహితం విఫలమైంది: కనెక్షన్ దొరకలేదు." -#: plinth/modules/networks/networks.py:325 +#: plinth/modules/networks/networks.py:282 msgid "Adding New Ethernet Connection" msgstr "కొత్త ఈథర్నెట్ అనుసంధానన్ని కలుపుతోంది" -#: plinth/modules/networks/networks.py:350 +#: plinth/modules/networks/networks.py:300 msgid "Adding New PPPoE Connection" msgstr "కొత్త PPPoE అనుసంధానన్ని కలుపుతోంది" -#: plinth/modules/networks/networks.py:399 +#: plinth/modules/networks/networks.py:332 msgid "Adding New Wi-Fi Connection" msgstr "కొత్త Wi-Fi అనుసంధానన్ని కలుపుతోంది" -#: plinth/modules/networks/networks.py:413 +#: plinth/modules/networks/networks.py:346 #, python-brace-format msgid "Connection {name} deleted." msgstr "అనుసంధానం {name} తొలగించారు." -#: plinth/modules/networks/networks.py:416 -#: plinth/modules/networks/networks.py:425 +#: plinth/modules/networks/networks.py:349 +#: plinth/modules/networks/networks.py:358 msgid "Failed to delete connection: Connection not found." msgstr "అనుసంధానం తొలగించడం విఫలమైంది: అనుసంధానం దొరకలేదు." -#: plinth/modules/networks/networks.py:430 +#: plinth/modules/networks/networks.py:363 #: plinth/modules/networks/templates/connections_delete.html:26 msgid "Delete Connection" -msgstr "అనుసంధానం తొలగించారు." +msgstr "అనుసంధానం తొలగించారు" #: plinth/modules/networks/templates/connection_show.html:43 msgid "Edit connection" msgstr "అనుసంధానన్ని సవరించు" #: plinth/modules/networks/templates/connection_show.html:43 -#: plinth/templates/base.html:119 +#: plinth/templates/base.html:123 msgid "Edit" msgstr "సవరించు" @@ -1413,34 +1599,35 @@ #: plinth/modules/networks/templates/connection_show.html:280 msgid "" -"This interface should be connected to local network/machine. If you connect " -"this interface to a public network, services meant to be available only " -"internally will become available externally. This is a security risk." +"This interface should be connected to a local network/machine. If you " +"connect this interface to a public network, services meant to be available " +"only internally will become available externally. This is a security risk." msgstr "" #: plinth/modules/networks/templates/connection_show.html:300 msgid "" -"This interface should receive your Internet connection. If you connect it " -"your a local network/machine, many services meant to available only " -"internally will not be available." +"This interface should receive your Internet connection. If you connect it to " +"a local network/machine, many services meant to available only internally " +"will not be available." msgstr "" #: plinth/modules/networks/templates/connection_show.html:319 +#, python-format msgid "" -"This interface is not maintained by FreedomBox. Its security status is " -"unknown to FreedomBox. Many FreedomBox services may not be available on " -"this interface. It is recommended that you deactivate/delete this " +"This interface is not maintained by %(box_name)s. Its security status is " +"unknown to %(box_name)s. Many %(box_name)s services may not be available on " +"this interface. It is recommended that you deactivate or delete this " "connection and re-configure it." msgstr "" #: plinth/modules/networks/templates/connections_add.html:34 #: plinth/modules/networks/templates/connections_type_select.html:34 msgid "Create..." -msgstr "సృష్టించు" +msgstr "సృష్టించు..." #: plinth/modules/networks/templates/connections_create.html:34 msgid "Create Connection" -msgstr "అనుసంధానం సృష్టించు." +msgstr "అనుసంధానం సృష్టించు" #: plinth/modules/networks/templates/connections_delete.html:29 #, fuzzy, python-format @@ -1522,7 +1709,7 @@ #, python-format msgid "" "Virtual Private Network (VPN) is a technique for securely connecting two " -"machines in order to access resources of a private network. While you are " +"devices in order to access resources of a private network. While you are " "away from home, you can connect to your %(box_name)s in order to join your " "home network and access private/internal services provided by %(box_name)s. " "You can also access the rest of the Internet via %(box_name)s for added " @@ -1539,7 +1726,7 @@ "To connect to %(box_name)s's VPN, you need to download a profile and feed it " "to an OpenVPN client on your mobile or desktop machine. OpenVPN Clients are " "available for most platforms. See documentation on recommended clients and instructions on how to " "configure them." msgstr "" @@ -1587,11 +1774,11 @@ #: plinth/modules/openvpn/views.py:124 msgid "Setup completed." -msgstr "అమరక పూర్తయ్యింది" +msgstr "అమరక పూర్తయ్యింది." #: plinth/modules/openvpn/views.py:126 msgid "Setup failed." -msgstr "అమరక విఫలమైంది" +msgstr "అమరక విఫలమైంది." #: plinth/modules/owncloud/owncloud.py:38 msgid "Enable ownCloud" @@ -2021,6 +2208,64 @@ msgid "Quassel core service is not running" msgstr "మంబ్లు సేవిక నడవంలేదు" +#: plinth/modules/repro/__init__.py:36 +#: plinth/modules/repro/templates/repro.html:26 +#: plinth/modules/repro/views.py:55 +#, fuzzy +#| msgid "GnudIP Server Address" +msgid "SIP Server (repro)" +msgstr "సేవిక చిరునామా GnudIP" + +#: plinth/modules/repro/__init__.py:41 +#, fuzzy +#| msgid "DNS server" +msgid "repro SIP Server" +msgstr "సేవిక" + +#: plinth/modules/repro/forms.py:29 +#, fuzzy +#| msgid "Enable OpenVPN server" +msgid "Enable repro service" +msgstr "సేవిక తెరవండిVPN అమలుచెయ్యి" + +#: plinth/modules/repro/templates/repro.html:29 +msgid "" +"repro provides various SIP services that a SIP softphone can utilize to " +"provide audio and video calls as well as presence and instant messaging. " +"repro provides a server and SIP user accounts that clients can use to let " +"their presence known. It also acts as a proxy to federate SIP " +"communications to other servers on the Internet similar to email." +msgstr "" + +#: plinth/modules/repro/templates/repro.html:39 +msgid "" +"To make SIP calls, a client application is needed. Available clients include " +"Jitsi (for computers) and CSipSimple (for Android phones)." +msgstr "" + +#: plinth/modules/repro/templates/repro.html:48 +msgid "" +"Note: Before using repro, domains and users will need to " +"be configured using the web-based " +"configuration panel. Users in the admin group will be able to " +"log in to the repro configuration panel. After setting the domain, it is " +"required to restart the repro service. Disable the service and re-enable it." +msgstr "" + +#: plinth/modules/repro/templates/repro.html:63 +#, fuzzy +#| msgid "Mumble server is running" +msgid "repro service is running" +msgstr "మంబ్లు సేవిక నడుస్తుంది" + +#: plinth/modules/repro/templates/repro.html:66 +#, fuzzy +#| msgid "Mumble server is not running" +msgid "repro service is not running" +msgstr "మంబ్లు సేవిక నడవంలేదు" + #: plinth/modules/restore/__init__.py:36 #: plinth/modules/restore/templates/restore_index.html:26 #: plinth/modules/restore/views.py:46 @@ -2041,8 +2286,8 @@ "reStore is a server for unhosted web " "applications. The idea is to uncouple web applications from data. No " "matter where a web application is served from, the data can be stored on an " -"unhosted storage server of user's choice. With reStore, your " -"%(cfg.box_name)s becomes your unhosted storage server." +"unhosted storage server of user's choice. With reStore, your %(box_name)s " +"becomes your unhosted storage server." msgstr "" #: plinth/modules/restore/templates/restore_index.html:40 @@ -2119,7 +2364,7 @@ #: plinth/modules/system/system.py:33 #: plinth/modules/system/templates/system.html:25 -#: plinth/templates/base.html:105 +#: plinth/templates/base.html:109 msgid "System Configuration" msgstr "" @@ -2134,33 +2379,73 @@ "The options affect the %(box_name)s at its most general level, so be careful!" msgstr "" -#: plinth/modules/tor/__init__.py:50 -msgid "Tor relay port available" +#: plinth/modules/tor/__init__.py:48 plinth/modules/tor/templates/tor.html:35 +msgid "Anonymity Network (Tor)" msgstr "" +#: plinth/modules/tor/__init__.py:53 +#, fuzzy +#| msgid "Go to Networks" +msgid "Tor Anonymity Network" +msgstr "అల్లిక వైపు వెళ్ళండి" + #: plinth/modules/tor/__init__.py:58 +msgid "Tor Bridge Relay" +msgstr "" + +#: plinth/modules/tor/__init__.py:76 plinth/modules/tor/views.py:144 +msgid "Tor Hidden Service" +msgstr "" + +#: plinth/modules/tor/__init__.py:222 +msgid "Tor relay port available" +msgstr "" + +#: plinth/modules/tor/__init__.py:230 msgid "Obfs3 transport registered" msgstr "" -#: plinth/modules/tor/__init__.py:64 +#: plinth/modules/tor/__init__.py:236 msgid "Obfs4 transport registered" msgstr "" -#: plinth/modules/tor/__init__.py:101 +#: plinth/modules/tor/__init__.py:273 #, python-brace-format msgid "Access URL {url} on tcp{kind} via Tor" msgstr "" -#: plinth/modules/tor/__init__.py:112 +#: plinth/modules/tor/__init__.py:284 #, python-brace-format msgid "Confirm Tor usage at {url} on tcp{kind}" msgstr "" -#: plinth/modules/tor/templates/tor.html:26 plinth/modules/tor/tor.py:66 -msgid "Anonymity Network (Tor)" +#: plinth/modules/tor/forms.py:32 +msgid "Enable Tor" +msgstr "" + +#: plinth/modules/tor/forms.py:35 +msgid "Enable Tor Hidden Service" +msgstr "" + +#: plinth/modules/tor/forms.py:38 +#, python-brace-format +msgid "" +"A hidden service will allow {box_name} to provide selected services (such as " +"ownCloud or chat) without revealing its location." +msgstr "" + +#: plinth/modules/tor/forms.py:42 +msgid "Download software packages over Tor" msgstr "" -#: plinth/modules/tor/templates/tor.html:29 +#: plinth/modules/tor/forms.py:44 +msgid "" +"When enabled, software will be downloaded over the Tor network for " +"installations and upgrades. This adds a degree of privacy and security " +"during software downloads." +msgstr "" + +#: plinth/modules/tor/templates/tor.html:38 msgid "" "Tor is an anonymous communication system. You can learn more about it from " "the Tor Project website. For " @@ -2169,28 +2454,34 @@ "Tor Browser." msgstr "" -#: plinth/modules/tor/templates/tor.html:44 +#: plinth/modules/tor/templates/tor.html:54 +#, fuzzy +#| msgid "Configuration updated" +msgid "Tor configuration is being updated" +msgstr "ఆకృతీకరణ తాజాపరుచింది" + +#: plinth/modules/tor/templates/tor.html:62 msgid "Tor is running" msgstr "" -#: plinth/modules/tor/templates/tor.html:47 +#: plinth/modules/tor/templates/tor.html:65 msgid "Tor is not running" msgstr "" -#: plinth/modules/tor/templates/tor.html:59 +#: plinth/modules/tor/templates/tor.html:77 msgid "Hidden Service" msgstr "" -#: plinth/modules/tor/templates/tor.html:60 -#: plinth/modules/tor/templates/tor.html:102 +#: plinth/modules/tor/templates/tor.html:78 +#: plinth/modules/tor/templates/tor.html:120 msgid "Port" msgstr "" -#: plinth/modules/tor/templates/tor.html:85 +#: plinth/modules/tor/templates/tor.html:103 msgid "Bridge" msgstr "" -#: plinth/modules/tor/templates/tor.html:88 +#: plinth/modules/tor/templates/tor.html:106 #, python-format msgid "" "Your %(box_name)s is configured as a Tor bridge with obfsproxy, so it can " @@ -2199,84 +2490,41 @@ "forwarded, if necessary:" msgstr "" -#: plinth/modules/tor/templates/tor.html:101 +#: plinth/modules/tor/templates/tor.html:119 msgid "Service" msgstr "" -#: plinth/modules/tor/templates/tor.html:117 +#: plinth/modules/tor/templates/tor.html:135 msgid "SOCKS" msgstr "" -#: plinth/modules/tor/templates/tor.html:120 +#: plinth/modules/tor/templates/tor.html:138 #, python-format msgid "A Tor SOCKS port is available on your %(box_name)s on TCP port 9050." msgstr "" -#: plinth/modules/tor/tor.py:46 -msgid "Enable Tor" -msgstr "" - -#: plinth/modules/tor/tor.py:49 -msgid "Enable Tor Hidden Service" -msgstr "" - -#: plinth/modules/tor/tor.py:51 -msgid "" -"A hidden service will allow FreedomBox to provide selected services (such as " -"ownCloud or Chat) without revealing its location." -msgstr "" - -#: plinth/modules/tor/tor.py:55 -msgid "Download software packages over Tor" -msgstr "" - -#: plinth/modules/tor/tor.py:57 -msgid "" -"When enabled, software will be downloaded over the Tor network for " -"installations and upgrades. This adds a degree of privacy and security " -"during software downloads." -msgstr "" - -#: plinth/modules/tor/tor.py:85 plinth/modules/tor/tor.py:285 -msgid "Tor Hidden Service" -msgstr "" - -#: plinth/modules/tor/tor.py:115 +#: plinth/modules/tor/views.py:68 msgid "Tor Control Panel" msgstr "" -#: plinth/modules/tor/tor.py:240 +#: plinth/modules/tor/views.py:79 #, python-brace-format msgid "Action error: {0} [{1}] [{2}]" msgstr "" -#: plinth/modules/tor/tor.py:256 -msgid "Tor enabled" -msgstr "" - -#: plinth/modules/tor/tor.py:259 -msgid "Tor disabled" -msgstr "" - -#: plinth/modules/tor/tor.py:264 -msgid "Tor hidden service enabled" -msgstr "" - -#: plinth/modules/tor/tor.py:267 -msgid "Tor hidden service disabled" -msgstr "" - -#: plinth/modules/tor/tor.py:292 -msgid "Enabled package download over Tor" -msgstr "" +#: plinth/modules/tor/views.py:148 +#, fuzzy +#| msgid "Configuration updated" +msgid "Configuration updated." +msgstr "ఆకృతీకరణ తాజాపరుచింది" -#: plinth/modules/tor/tor.py:295 -msgid "Disabled package download over Tor" +#: plinth/modules/tor/views.py:150 +msgid "An error occurred during configuration." msgstr "" #: plinth/modules/transmission/__init__.py:38 #: plinth/modules/transmission/templates/transmission.html:26 -#: plinth/modules/transmission/views.py:63 +#: plinth/modules/transmission/views.py:67 msgid "BitTorrent (Transmission)" msgstr "" @@ -2344,70 +2592,68 @@ "will attempt to perform any package upgrades that are available." msgstr "" -#: plinth/modules/upgrades/templates/upgrades.html:40 -msgid "There was an error while upgrading." +#: plinth/modules/upgrades/templates/upgrades.html:37 +msgid "" +"Upgrades install the latest software and security updates. When automatic " +"upgrades are enabled, upgrades are automatically run every night. You don't " +"normally need to start the upgrade process." msgstr "" -#: plinth/modules/upgrades/templates/upgrades.html:43 -#: plinth/modules/upgrades/templates/upgrades.html:59 -msgid "Output from unattended-upgrades:" +#: plinth/modules/upgrades/templates/upgrades.html:45 +msgid "" +"Depending on the number of packages to install, this may take a long time to " +"complete. While upgrades are in progress, you will not be able to install " +"other packages. During the upgrade, this web interface may be temporarily " +"unavailable and show an error. Refresh the page to continue." msgstr "" -#: plinth/modules/upgrades/templates/upgrades.html:50 -msgid "The operating system is up to date now.  " +#: plinth/modules/upgrades/templates/upgrades.html:58 +msgid "Upgrade now »" msgstr "" -#: plinth/modules/upgrades/templates/upgrades.html:53 -msgid "Show Details" +#: plinth/modules/upgrades/templates/upgrades.html:65 +msgid "A package manager is running." msgstr "" -#: plinth/modules/upgrades/templates/upgrades.html:69 -msgid "" -"This will run unattended-upgrades, which will attempt to upgrade your system " -"with the latest Debian packages. It may take a few minutes to complete." +#: plinth/modules/upgrades/templates/upgrades.html:70 +msgid "Recent log from upgrades:" msgstr "" -#: plinth/modules/upgrades/templates/upgrades.html:80 -msgid "Upgrade now »" +#: plinth/modules/upgrades/views.py:36 plinth/modules/upgrades/views.py:66 +msgid "Automatic Upgrades" msgstr "" -#: plinth/modules/upgrades/templates/upgrades.html:87 -msgid "System is being upgraded." +#: plinth/modules/upgrades/views.py:38 +msgid "Upgrade Packages" msgstr "" -#: plinth/modules/upgrades/views.py:35 plinth/modules/upgrades/views.py:64 -msgid "Automatic Upgrades" +#: plinth/modules/upgrades/views.py:96 +msgid "Upgrade process started." msgstr "" -#: plinth/modules/upgrades/views.py:37 -msgid "Upgrade Packages" -msgstr "" +#: plinth/modules/upgrades/views.py:99 +#, fuzzy +#| msgid "Setup failed." +msgid "Starting upgrade failed." +msgstr "అమరక విఫలమైంది." -#: plinth/modules/upgrades/views.py:75 +#: plinth/modules/upgrades/views.py:102 msgid "Package Upgrades" msgstr "" -#: plinth/modules/upgrades/views.py:116 +#: plinth/modules/upgrades/views.py:131 #, python-brace-format msgid "Error when configuring unattended-upgrades: {error}" msgstr "" -#: plinth/modules/upgrades/views.py:121 +#: plinth/modules/upgrades/views.py:136 msgid "Automatic upgrades enabled" msgstr "" -#: plinth/modules/upgrades/views.py:123 +#: plinth/modules/upgrades/views.py:138 msgid "Automatic upgrades disabled" msgstr "" -#: plinth/modules/upgrades/views.py:142 -msgid "Upgrade completed." -msgstr "" - -#: plinth/modules/upgrades/views.py:144 -msgid "Upgrade failed." -msgstr "" - #: plinth/modules/users/__init__.py:36 msgid "Users and Groups" msgstr "" @@ -2443,19 +2689,30 @@ msgid "Failed to add new user to {group} group." msgstr "" -#: plinth/modules/users/forms.py:126 +#: plinth/modules/users/forms.py:92 +msgid "SSH Keys" +msgstr "" + +#: plinth/modules/users/forms.py:96 +msgid "" +"Setting an SSH public key will allow this user to securely log in to the " +"system without using a password. You may enter multiple keys, one on each " +"line. Blank lines and lines starting with # will be ignored." +msgstr "" + +#: plinth/modules/users/forms.py:136 msgid "Renaming LDAP user failed." msgstr "" -#: plinth/modules/users/forms.py:138 +#: plinth/modules/users/forms.py:148 msgid "Failed to remove user from group." msgstr "" -#: plinth/modules/users/forms.py:149 +#: plinth/modules/users/forms.py:159 msgid "Failed to add user to group." msgstr "" -#: plinth/modules/users/forms.py:174 +#: plinth/modules/users/forms.py:188 msgid "Changing LDAP user password failed." msgstr "" @@ -2474,7 +2731,7 @@ msgstr "" #: plinth/modules/users/templates/users_delete.html:26 -#: plinth/modules/users/views.py:103 +#: plinth/modules/users/views.py:110 msgid "Delete User" msgstr "" @@ -2528,20 +2785,20 @@ msgid "Edit User" msgstr "" -#: plinth/modules/users/views.py:113 +#: plinth/modules/users/views.py:120 #, python-brace-format msgid "User {user} deleted." msgstr "" -#: plinth/modules/users/views.py:120 +#: plinth/modules/users/views.py:127 msgid "Deleting LDAP user failed." msgstr "" -#: plinth/modules/users/views.py:129 +#: plinth/modules/users/views.py:136 msgid "Change Password" msgstr "" -#: plinth/modules/users/views.py:130 +#: plinth/modules/users/views.py:137 msgid "Password changed successfully." msgstr "" @@ -2616,8 +2873,9 @@ msgid "Secure Shell (SSH) Server" msgstr "" -#: plinth/service.py:78 -msgid "FreedomBox Web Interface (Plinth)" +#: plinth/service.py:79 +#, python-brace-format +msgid "{box_name} Web Interface (Plinth)" msgstr "" #: plinth/templates/404.html:25 @@ -2648,27 +2906,24 @@ msgstr "" #: plinth/templates/base.html:49 -msgid "Plinth administrative interface for the FreedomBox" -msgstr "" - -#: plinth/templates/base.html:52 plinth/templates/base.html.py:88 -msgid "FreedomBox" +#, python-format +msgid "Plinth administrative interface for the %(box_name)s" msgstr "" -#: plinth/templates/base.html:81 +#: plinth/templates/base.html:83 msgid "Toggle navigation" msgstr "" -#: plinth/templates/base.html:121 plinth/templates/base.html.py:122 +#: plinth/templates/base.html:125 plinth/templates/base.html.py:126 msgid "Change password" msgstr "" -#: plinth/templates/base.html:125 plinth/templates/base.html.py:126 -#: plinth/templates/base.html:139 plinth/templates/base.html.py:141 +#: plinth/templates/base.html:129 plinth/templates/base.html.py:130 +#: plinth/templates/base.html:143 plinth/templates/base.html.py:145 msgid "Log out" msgstr "" -#: plinth/templates/base.html:131 plinth/templates/base.html.py:133 +#: plinth/templates/base.html:135 plinth/templates/base.html.py:137 msgid "Log in" msgstr "" @@ -2708,8 +2963,20 @@ msgid "%(percentage)s%% complete" msgstr "" +#~ msgid "show password" +#~ msgstr "రహస్యపదం చూపించు" + +#~ msgid "The following is the current status:" +#~ msgstr "ఇది ప్రస్తుత స్థితి:" + +#~ msgid "Next" +#~ msgstr "తర్వాత" + +#~ msgid "FreedomBox Manual" +#~ msgstr "ఫ్రీడమ్ బాక్స్ నిర్దేశిక" + +#~ msgid "Create Wiki/Blog" +#~ msgstr "వికీ/బ్లాగ్ సృష్టించు" + #~ msgid "Physical interface" #~ msgstr "శారీరక సంవిధానం" - -#~ msgid "Delete Connection %(name)s" -#~ msgstr "అనుసంధానం తొలగించు %(name)s" diff -Nru plinth-0.7.2/plinth/locale/tr/LC_MESSAGES/django.po plinth-0.8.1/plinth/locale/tr/LC_MESSAGES/django.po --- plinth-0.7.2/plinth/locale/tr/LC_MESSAGES/django.po 1970-01-01 00:00:00.000000000 +0000 +++ plinth-0.8.1/plinth/locale/tr/LC_MESSAGES/django.po 2016-02-16 03:55:53.000000000 +0000 @@ -0,0 +1,3498 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +msgid "" +msgstr "" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-01-31 22:19+0530\n" +"PO-Revision-Date: 2016-02-02 19:24+0000\n" +"Last-Translator: ultrapeer \n" +"Language-Team: Turkish " +"\n" +"Language: tr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 2.5-dev\n" + +#: plinth/action_utils.py:203 +#, python-brace-format +msgid "Listening on {kind} port {listen_address}:{port}" +msgstr "{kind} port {listen_address}:{port} dinleniyor" + +#: plinth/action_utils.py:206 +#, python-brace-format +msgid "Listening on {kind} port {port}" +msgstr "{kind} port {port} dinleniyor" + +#: plinth/action_utils.py:287 +#, python-brace-format +msgid "Access URL {url} on tcp{kind}" +msgstr "tcp{kind} üzerinden {url} bağlantısına eriş" + +#: plinth/action_utils.py:290 +#, python-brace-format +msgid "Access URL {url}" +msgstr "{url} bağlantısına eriş" + +#: plinth/action_utils.py:321 +#, python-brace-format +msgid "Connect to {host}:{port}" +msgstr "{host}:{port} konumuna bağlan" + +#: plinth/action_utils.py:324 +#, python-brace-format +msgid "Cannot connect to {host}:{port}" +msgstr "{host}:{port} konumuna bağlanılamadı" + +#: plinth/context_processors.py:36 +msgid "FreedomBox" +msgstr "FreedomBox" + +#: plinth/modules/apps/apps.py:26 +msgid "Apps" +msgstr "Uygulamalar" + +#: plinth/modules/apps/apps.py:32 plinth/templates/base.html.py:93 +msgid "Applications" +msgstr "Uygulamalar" + +#: plinth/modules/apps/templates/apps.html:25 +msgid "Services and Applications" +msgstr "Servisler ve Uygulamalar" + +#: plinth/modules/apps/templates/apps.html:28 +#, python-format +msgid "" +"You can install and run various services and applications on your " +"%(box_name)s. Click on any app page link on the left to read a description " +"of the application and choose to install it." +msgstr "" +"%(box_name)s kutunuza çeşitli servis ve uygulamalar kurup " +"çalıştırabilirsiniz. Herhangi bir uygulamanın açıklamasını okuyup onu " +"kurmayı seçmek için sol taraftaki uygulama sayfası bağlantısına tıklayın." + +#: plinth/modules/apps/templates/apps.html:36 +msgid "" +"This box can be your photo sharing site, your instant messaging site, your " +"social networking site, your news site. Remember web portals? We can be " +"one of those too. Many of the services you use on the web could soon be on " +"site and under your control!" +msgstr "" +"Bu kutu fotoğraf paylaşma siteniz, anında mesajlaşma siteniz, sosyal ağ " +"siteniz, haberler siteniz olabilir. Ağ portallarını hatırlıyor musunuz? " +"Onlardan biri de olabiliriz. Web üzerinde kullandığınız servislerin birçoğu " +"yakında sizin evinizde ve sizin kontrolünüzde olabileceklerdir!" + +#: plinth/modules/avahi/__init__.py:40 plinth/modules/avahi/__init__.py:45 +#: plinth/modules/avahi/templates/avahi.html:26 +#: plinth/modules/avahi/views.py:53 +msgid "Service Discovery" +msgstr "Servis Keşfi" + +#: plinth/modules/avahi/forms.py:29 +msgid "Enable service discovery" +msgstr "Servis keşfini etkinleştir" + +#: plinth/modules/avahi/templates/avahi.html:29 +#, python-format +#| msgid "" +#| "Service discovery allows other machines on the network to discover your " +#| "FreedomBox and services running on it. It also allows FreedomBox to " +#| "discover other machines and services running on your local network. " +#| "Service discovery is not essential and works only on internal networks. " +#| "It may be disabled to improve security especially when connecting to a " +#| "hostile local network." +msgid "" +"Service discovery allows other devices on the network to discover your " +"%(box_name)s and services running on it. It also allows %(box_name)s to " +"discover other devices and services running on your local network. Service " +"discovery is not essential and works only on internal networks. It may be " +"disabled to improve security especially when connecting to a hostile local " +"network." +msgstr "" +"Servis keşfi şebekedeki diğer makinelerin sizin %(box_name)s kutunuzu ve " +"onun üzerinde çalışan servisleri keşfetmelerine yarar. Buna ek olarak " +"%(box_name)s kutusunun yerel ağınızdaki diğer makineleri ve etkin servisleri " +"keşfetmesine de yarar. Servis keşfi mutlaka gerekli değildir ve sadece " +"dahili şebekelerde çalışır. Özellikle düşman yerel bir ağa bağlanıldığında " +"güvenliği arttırmak için devre dışı bırakılabilir." + +#: plinth/modules/avahi/templates/avahi.html:40 +#: plinth/modules/datetime/templates/datetime.html:35 +#: plinth/modules/deluge/templates/deluge.html:39 +#: plinth/modules/dynamicdns/dynamicdns.py:39 +#: plinth/modules/firewall/templates/firewall.html:57 +#: plinth/modules/mumble/templates/mumble.html:44 +#: plinth/modules/networks/templates/connection_show.html:261 +#: plinth/modules/openvpn/templates/openvpn.html:81 +#: plinth/modules/privoxy/templates/privoxy.html:48 +#: plinth/modules/quassel/templates/quassel.html:50 +#: plinth/modules/repro/templates/repro.html:58 +#: plinth/modules/tor/templates/tor.html:48 +#: plinth/modules/transmission/templates/transmission.html:42 +#: plinth/modules/xmpp/templates/xmpp.html:58 +msgid "Status" +msgstr "Durum" + +#: plinth/modules/avahi/templates/avahi.html:45 +msgid "Service discovery server is running" +msgstr "Servis keşfi sunucusu çalışmaktadır" + +#: plinth/modules/avahi/templates/avahi.html:48 +msgid "Service discovery server is not running" +msgstr "Servis keşfi sunucusu çalışmamaktadır" + +#: plinth/modules/avahi/templates/avahi.html:52 +#: plinth/modules/datetime/templates/datetime.html:48 +#: plinth/modules/deluge/templates/deluge.html:53 +#: plinth/modules/ikiwiki/templates/ikiwiki.html:35 +#: plinth/modules/mumble/templates/mumble.html:59 +#: plinth/modules/openvpn/templates/openvpn.html:130 +#: plinth/modules/owncloud/templates/owncloud.html:51 +#: plinth/modules/privoxy/templates/privoxy.html:62 +#: plinth/modules/quassel/templates/quassel.html:65 +#: plinth/modules/repro/templates/repro.html:72 +#: plinth/modules/roundcube/templates/roundcube.html:62 +#: plinth/modules/shaarli/templates/shaarli.html:40 +#: plinth/modules/tor/templates/tor.html:92 +#: plinth/modules/transmission/templates/transmission.html:56 +#: plinth/modules/xmpp/templates/xmpp.html:72 +msgid "Configuration" +msgstr "Yapılandırma" + +#: plinth/modules/avahi/templates/avahi.html:60 +#: plinth/modules/datetime/templates/datetime.html:56 +#: plinth/modules/deluge/templates/deluge.html:61 +#: plinth/modules/dynamicdns/templates/dynamicdns_configure.html:40 +#: plinth/modules/ikiwiki/templates/ikiwiki.html:43 +#: plinth/modules/ikiwiki/templates/ikiwiki_create.html:32 +#: plinth/modules/mumble/templates/mumble.html:67 +#: plinth/modules/openvpn/templates/openvpn.html:138 +#: plinth/modules/privoxy/templates/privoxy.html:70 +#: plinth/modules/quassel/templates/quassel.html:73 +#: plinth/modules/repro/templates/repro.html:80 +#: plinth/modules/restore/templates/restore_index.html:54 +#: plinth/modules/roundcube/templates/roundcube.html:70 +#: plinth/modules/shaarli/templates/shaarli.html:48 +#: plinth/modules/tor/templates/tor.html:100 +#: plinth/modules/transmission/templates/transmission.html:64 +#: plinth/modules/upgrades/templates/upgrades_configure.html:34 +#: plinth/modules/xmpp/templates/xmpp.html:80 +msgid "Update setup" +msgstr "Kurulumu güncelle" + +#: plinth/modules/avahi/views.py:73 plinth/modules/datetime/views.py:85 +#: plinth/modules/deluge/views.py:80 +#: plinth/modules/dynamicdns/dynamicdns.py:371 +#: plinth/modules/ikiwiki/views.py:95 plinth/modules/mumble/views.py:80 +#: plinth/modules/openvpn/views.py:142 plinth/modules/privoxy/views.py:83 +#: plinth/modules/quassel/views.py:76 plinth/modules/repro/views.py:77 +#: plinth/modules/restore/views.py:68 plinth/modules/roundcube/views.py:84 +#: plinth/modules/shaarli/views.py:74 plinth/modules/transmission/views.py:109 +#: plinth/modules/xmpp/views.py:100 +msgid "Configuration updated" +msgstr "Kurulum güncellendi" + +#: plinth/modules/avahi/views.py:76 plinth/modules/datetime/views.py:99 +#: plinth/modules/deluge/views.py:82 plinth/modules/ikiwiki/views.py:97 +#: plinth/modules/mumble/views.py:82 plinth/modules/openvpn/views.py:144 +#: plinth/modules/owncloud/owncloud.py:93 plinth/modules/privoxy/views.py:85 +#: plinth/modules/quassel/views.py:78 plinth/modules/repro/views.py:79 +#: plinth/modules/restore/views.py:70 plinth/modules/roundcube/views.py:86 +#: plinth/modules/shaarli/views.py:76 plinth/modules/tor/views.py:111 +#: plinth/modules/transmission/views.py:111 +#: plinth/modules/upgrades/views.py:118 plinth/modules/xmpp/views.py:102 +msgid "Setting unchanged" +msgstr "Ayar değiştirilmedi" + +#: plinth/modules/config/config.py:84 plinth/modules/config/config.py:121 +#: plinth/modules/dynamicdns/dynamicdns.py:148 +msgid "Invalid domain name" +msgstr "Geçersiz alan ismi" + +#: plinth/modules/config/config.py:95 +msgid "Hostname" +msgstr "Makine ismi" + +#: plinth/modules/config/config.py:97 +#, python-brace-format +#| msgid "" +#| "Hostname is the local name by which other machines on the local network " +#| "reach your machine. It must start and end with an alphabet or a digit " +#| "and have as interior characters only alphabets, digits and hyphens. " +#| "Total length must be 63 characters or less." +msgid "" +"Hostname is the local name by which other devices on the local network can " +"reach your {box_name}. It must start and end with an alphabet or a digit " +"and have as interior characters only alphabets, digits and hyphens. Total " +"length must be 63 characters or less." +msgstr "" +"Makine ismi yerel şebekedeki diğer cihazların sizin {box_name} kutunuza " +"erişmebilmek için kullanacakları yerel isimdir. Bir harf ya da sayı ile " +"başlayıp sona ermesi gerekir ve sadece alfabe harfleri, sayılar ve tireler " +"içerebilir. Toplam uzunluğun 63 karakter veya daha azı olması gerekmektedir." + +#: plinth/modules/config/config.py:105 +msgid "Invalid hostname" +msgstr "Geçersiz makine ismi" + +#: plinth/modules/config/config.py:108 plinth/modules/config/config.py:153 +#: plinth/modules/config/config.py:265 +#: plinth/modules/dynamicdns/dynamicdns.py:143 +msgid "Domain Name" +msgstr "Alan Adı" + +#: plinth/modules/config/config.py:110 +#, python-brace-format +#| msgid "" +#| "Domain name is the global name by which other machines on the Internet " +#| "can reach you. It must consist of labels separated by dots. Each label " +#| "must start and end with an alphabet or a digit and have as interior " +#| "characters only alphabets, digits and hyphens. Length of each label must " +#| "be 63 characters or less. Total length of domain name must be 253 " +#| "characters or less." +msgid "" +"Domain name is the global name by which other devices on the Internet can " +"reach your {box_name}. It must consist of labels separated by dots. Each " +"label must start and end with an alphabet or a digit and have as interior " +"characters only alphabets, digits and hyphens. Length of each label must be " +"63 characters or less. Total length of domain name must be 253 characters " +"or less." +msgstr "" +"Alan adı, İnternet'teki diğer cihazların sizin {box_name} kutunuza erişmek " +"için kullanacakları global isimdir. Noktalarla ayrılmış gruplardan " +"oluşmalıdır. Her grubun bir alfabe harfi ya da bir sayı ile başlaması ve " +"sona ermesi gerekir ve içerik harfler, sayılar ve tireler ile sınırlı " +"kalmalıdır. Her grubun uzunluğu 63 karakter ya da daha azı olmalıdır. Alan " +"adının toplam uzunluğu 253 karakter ya da daha azı olmalıdır." + +#: plinth/modules/config/config.py:125 +msgid "Language" +msgstr "Lisan" + +#: plinth/modules/config/config.py:127 +#| msgid "Language for this FreedomBox web administration interface" +msgid "Language for this web administration interface" +msgstr "Bu web yönetim arayüzü için kullanılacak dil" + +#: plinth/modules/config/config.py:135 +#: plinth/modules/dynamicdns/dynamicdns.py:37 +#: plinth/modules/ikiwiki/views.py:36 +msgid "Configure" +msgstr "Yapılandır" + +#: plinth/modules/config/config.py:176 +msgid "General Configuration" +msgstr "Genel Yapılandırma" + +#: plinth/modules/config/config.py:193 +#, python-brace-format +msgid "Error setting hostname: {exception}" +msgstr "Makine isminin ayarlanmasında hata: {exception}" + +#: plinth/modules/config/config.py:196 +msgid "Hostname set" +msgstr "Makine ismi ayarlandı" + +#: plinth/modules/config/config.py:202 +#, python-brace-format +msgid "Error setting domain name: {exception}" +msgstr "Alan adının ayarlanmasında hata: {exception}" + +#: plinth/modules/config/config.py:205 +msgid "Domain name set" +msgstr "Alan adı ayarlandı" + +#: plinth/modules/config/config.py:213 +#, python-brace-format +msgid "Error setting language: {exception}" +msgstr "Dilin ayarlanmasında hata: {exception}" + +#: plinth/modules/config/config.py:216 +msgid "Language changed" +msgstr "Dil değiştirildi" + +#: plinth/modules/config/templates/config.html:32 +msgid "Submit" +msgstr "İbraz Et" + +#: plinth/modules/datetime/__init__.py:39 +#: plinth/modules/datetime/templates/datetime.html:26 +#: plinth/modules/datetime/views.py:58 +msgid "Date & Time" +msgstr "Tarih & Zaman" + +#: plinth/modules/datetime/__init__.py:44 +msgid "Network Time Server" +msgstr "Ağ Zaman Sunucusu" + +#: plinth/modules/datetime/__init__.py:76 +msgid "NTP client in contact with servers" +msgstr "Sunucularla iletişimde NTP istemcisi" + +#: plinth/modules/datetime/forms.py:31 +msgid "Enable network time" +msgstr "Ağ zamanını etkinleştir" + +#: plinth/modules/datetime/forms.py:35 +msgid "Time Zone" +msgstr "Saat Dilimi" + +#: plinth/modules/datetime/forms.py:36 +msgid "" +"Set your time zone to get accurate timestamps. This will set the systemwide " +"time zone." +msgstr "" +"Zaman damgalarının doğru olması için saat diliminizi ayarlayın. Bu, tüm " +"sistem için saat dilimini ayarlayacaktır." + +#: plinth/modules/datetime/forms.py:47 +msgid "-- no time zone set --" +msgstr "-- hiçbir saat dilimi girilmemiştir --" + +#: plinth/modules/datetime/templates/datetime.html:29 +msgid "" +"Network time server is a program that maintians the system time in " +"synchronization with servers on the Internet." +msgstr "" +"Ağ zaman sunucusu, İnternet'teki sunucular ile sistem zamanını eş tutan bir " +"programdır." + +#: plinth/modules/datetime/templates/datetime.html:40 +msgid "Network time server is running" +msgstr "Ağ zaman sunucusu çalışmaktadır" + +#: plinth/modules/datetime/templates/datetime.html:43 +msgid "Network time server is not running" +msgstr "Ağ zaman sunucusu çalışmamaktadır" + +#: plinth/modules/datetime/views.py:93 +#, python-brace-format +msgid "Error setting time zone: {exception}" +msgstr "Saat diliminin ayarlanmasında hata: {exception}" + +#: plinth/modules/datetime/views.py:96 +msgid "Time zone set" +msgstr "Saat dilimi ayarlandı" + +#: plinth/modules/deluge/__init__.py:38 plinth/modules/deluge/views.py:56 +msgid "BitTorrent (Deluge)" +msgstr "BitTorrent (Deluge)" + +#: plinth/modules/deluge/__init__.py:43 +msgid "Deluge BitTorrent" +msgstr "Deluge BitTorrent" + +#: plinth/modules/deluge/forms.py:29 +msgid "Enable Deluge" +msgstr "Deluge'ü Etkinleştir" + +#: plinth/modules/deluge/templates/deluge.html:26 +msgid "BitTorrent Web Client (Deluge)" +msgstr "BitTorrent Web İstemcisi (Deluge)" + +#: plinth/modules/deluge/templates/deluge.html:28 +msgid "Deluge is a BitTorrent client that features a Web UI." +msgstr "Deluge, ağ arayüzü sunan bir BitTorrent istemcisidir." + +#: plinth/modules/deluge/templates/deluge.html:31 +msgid "" +"When enabled, the Deluge web client will be available from /deluge path on the web server. The default password is 'deluge', but " +"you should log in and change it immediately after enabling this service." +msgstr "" +"Etkinleştirildiğinde, Deluge ağ istemcisine erişim ağ (web) sunucusunda /deluge yolundan mümkün olacaktır. Varsayılan parola " +"şudur: 'deluge'. Ancak servisi etkinleştirdikten sonra giriş yapıp onu " +"derhal değiştirmeniz gerekmektedir." + +#: plinth/modules/deluge/templates/deluge.html:44 +msgid "deluge-web is running" +msgstr "deluge-web çalışmaktadır" + +#: plinth/modules/deluge/templates/deluge.html:47 +msgid "deluge-web is not running" +msgstr "deluge-web çalışmamaktadır" + +#: plinth/modules/diagnostics/diagnostics.py:45 +msgid "Diagnostics" +msgstr "Teşhisler" + +#: plinth/modules/diagnostics/diagnostics.py:55 +msgid "System Diagnostics" +msgstr "Sistem Teşhisleri" + +#: plinth/modules/diagnostics/diagnostics.py:78 +msgid "Diagnostic Test" +msgstr "Teşhis Testi" + +#: plinth/modules/diagnostics/templates/diagnostics.html:37 +msgid "" +"The system diagnostic test will run a number of checks on your system to " +"confirm that applications and services are working as expected." +msgstr "" +"Sistem teşhis testi uygulamaların ve servislerin beklenildiği gibi " +"çalıştıklarını teyit etmek için sisteminizde bir takım kontroller yapacaktır." + +#: plinth/modules/diagnostics/templates/diagnostics.html:50 +#: plinth/modules/diagnostics/templates/diagnostics_button.html:27 +msgid "Run Diagnostics" +msgstr "Teşhisleri Çalıştır" + +#: plinth/modules/diagnostics/templates/diagnostics.html:53 +msgid "Diagnotics test is currently running" +msgstr "Teşhis testi şu anda çalışmaktadır" + +#: plinth/modules/diagnostics/templates/diagnostics.html:66 +msgid "Results" +msgstr "Sonuçlar" + +#: plinth/modules/diagnostics/templates/diagnostics.html:74 +#, python-format +msgid "Module: %(module)s" +msgstr "Öbek: %(module)s" + +#: plinth/modules/diagnostics/templates/diagnostics_module.html:25 +msgid "Diagnostic Results" +msgstr "Teşhis Sonuçları" + +#: plinth/modules/diagnostics/templates/diagnostics_module.html:27 +#, python-format +msgid "Module: %(module_name)s" +msgstr "Öbek: %(module_name)s" + +#: plinth/modules/diagnostics/templates/diagnostics_module.html:32 +msgid "This module does not support diagnostics" +msgstr "Bu öbek teşhisleri desteklememektedir" + +#: plinth/modules/diagnostics/templates/diagnostics_results.html:27 +msgid "Test" +msgstr "Test" + +#: plinth/modules/diagnostics/templates/diagnostics_results.html:28 +msgid "Result" +msgstr "Sonuç" + +#: plinth/modules/dynamicdns/dynamicdns.py:35 plinth/modules/help/help.py:40 +msgid "About" +msgstr "Hakkında" + +#: plinth/modules/dynamicdns/dynamicdns.py:45 +#: plinth/modules/dynamicdns/dynamicdns.py:54 +msgid "Dynamic DNS" +msgstr "Dinamik DNS" + +#: plinth/modules/dynamicdns/dynamicdns.py:71 +msgid "" +"The Variables <User>, <Pass>, <Ip>, <Domain> may be " +"used within the URL. For details see the update URL templates of the example " +"providers." +msgstr "" +"<User>, <Pass>, <Ip>, <Domain> değişkenleri URL'de " +"(bağlantıda) kullanılabilir. Ayrıntılar için örnek sunucuların URL " +"güncelleme şablonlarına bakınız." + +#: plinth/modules/dynamicdns/dynamicdns.py:75 +msgid "" +"Please choose an update protocol according to your provider. If your " +"provider does not support the GnudIP protocol or your provider is not listed " +"you may use the update URL of your provider." +msgstr "" +"Lütfen sağlayıcınızla uyumlu bir güncelleme protokolü seçin. Eğer " +"sağlayıcınız GnudIP protokolünü desteklemiyorsa ya da listelenmemişse " +"sağlayıcınızın güncelleme bağlantısını (URL) kullanabilirsiniz." + +#: plinth/modules/dynamicdns/dynamicdns.py:80 +#| msgid "" +#| "Please do not enter a URL here (like \"https://example.com/\") but only " +#| "the hostname of the GnuDIP server (like \"example.pcom\")." +msgid "" +"Please do not enter a URL here (like \"https://example.com/\") but only the " +"hostname of the GnuDIP server (like \"example.com\")." +msgstr "" +"Buraya lütfen \"https://example.com/\" gibi bir URL girmeyin, sadece GnuDIP " +"sunucusunun makine ismini girin (\"example.com\" gibi)." + +#: plinth/modules/dynamicdns/dynamicdns.py:84 +#, python-brace-format +#| msgid "The public domain name you want use to reach your box." +msgid "The public domain name you want use to reach your {box_name}." +msgstr "" +"{box_name} kutunuza erişilmesi için kullanmak istediğiniz herkese açık alan " +"ismi." + +#: plinth/modules/dynamicdns/dynamicdns.py:87 +msgid "Use this option if your provider uses self signed certificates." +msgstr "" +"Sağlayıcınız kendi imzaladığı sertifikalar kullanıyorsa bu seçeneği kullanın." + +#: plinth/modules/dynamicdns/dynamicdns.py:90 +msgid "" +"If this option is selected, your username and password will be used for HTTP " +"basic authentication." +msgstr "" +"Eğer bu seçenek seçiliyse, kullanıcı isminiz ve parolanız temel HTTP kimlik " +"doğrulaması için kullanılacaktır." + +#: plinth/modules/dynamicdns/dynamicdns.py:93 +msgid "" +"Leave this field empty if you want to keep your previous configured password." +msgstr "" +"Önceki yapılandırılmış parolanızı tutmak istiyorsanız bu alanı boş bırakın." + +#: plinth/modules/dynamicdns/dynamicdns.py:96 +#, python-brace-format +#| msgid "" +#| "Optional Value. If your FreedomBox is not connected directly to the " +#| "Internet (i.e. connected to a NAT router) this URL is used to figure out " +#| "the real Internet IP. The URL should simply return the IP wherethe client " +#| "comes from. Example: http://myip.datasystems24.de" +msgid "" +"Optional Value. If your {box_name} is not connected directly to the Internet " +"(i.e. connected to a NAT router) this URL is used to figure out the real " +"Internet IP. The URL should simply return the IP where the client comes from " +"(example: http://myip.datasystems24.de)." +msgstr "" +"Seçeneğe bağlı değer. {box_name} kutunuz İnternet'e doğrudan bağlı değilse (" +"yani bir NAT yönlendiricisine bağlıysa) bu URL gerçek İnternet IP adresini " +"bulmak için kullanılır. URL sadece istemcinin bulunduğu yerin IP'sini " +"vermelidir (mesela: http://myip.datasystems24.de)." + +#: plinth/modules/dynamicdns/dynamicdns.py:104 +msgid "" +"You should have been requested to select a username when you created the " +"account." +msgstr "" +"Hesabı oluşturduğunuzda bir kullanıcı ismi seçmeniz talep edilmiş olmalıydı." + +#: plinth/modules/dynamicdns/dynamicdns.py:115 +msgid "Enable Dynamic DNS" +msgstr "Dinamik DNS'i Etkinleştir" + +#: plinth/modules/dynamicdns/dynamicdns.py:118 +msgid "Service type" +msgstr "Servis türü" + +#: plinth/modules/dynamicdns/dynamicdns.py:123 +msgid "GnudIP Server Address" +msgstr "GnudIP Sunucu Adresi" + +#: plinth/modules/dynamicdns/dynamicdns.py:128 +msgid "Invalid server name" +msgstr "Geçersiz sunucu ismi" + +#: plinth/modules/dynamicdns/dynamicdns.py:131 +msgid "Update URL" +msgstr "URL'i Güncelle" + +#: plinth/modules/dynamicdns/dynamicdns.py:135 +#| msgid "accept all SSL certificates" +msgid "Accept all SSL certificates" +msgstr "Tüm SSL sertifikalarını kabul et" + +#: plinth/modules/dynamicdns/dynamicdns.py:139 +#| msgid "use HTTP basic authentication" +msgid "Use HTTP basic authentication" +msgstr "Temel HTTP kimlik doğrulamasını kullan" + +#: plinth/modules/dynamicdns/dynamicdns.py:151 +#: plinth/modules/networks/forms.py:146 plinth/modules/transmission/forms.py:39 +msgid "Username" +msgstr "Kullanıcı ismi" + +#: plinth/modules/dynamicdns/dynamicdns.py:154 +#: plinth/modules/networks/forms.py:147 plinth/modules/transmission/forms.py:43 +msgid "Password" +msgstr "Parola" + +#: plinth/modules/dynamicdns/dynamicdns.py:157 +#: plinth/modules/networks/forms.py:149 +msgid "Show password" +msgstr "Parolayı göster" + +#: plinth/modules/dynamicdns/dynamicdns.py:161 +msgid "IP check URL" +msgstr "IP kontrol bağlantısı" + +#: plinth/modules/dynamicdns/dynamicdns.py:187 +msgid "Please provide update URL or a GnuDIP Server" +msgstr "Lütfen bir güncelleme URL'i ya da GnuDIP Sunucusu belirtin" + +#: plinth/modules/dynamicdns/dynamicdns.py:190 +msgid "Please provide GnuDIP username" +msgstr "Lütfen GnuDIP kullanıcı ismi belirtin" + +#: plinth/modules/dynamicdns/dynamicdns.py:193 +msgid "Please provide GnuDIP domain" +msgstr "Lütfen GnuDIP alanı belirtin" + +#: plinth/modules/dynamicdns/dynamicdns.py:198 +msgid "Please provide a password" +msgstr "Lütfen bir parola girin" + +#: plinth/modules/dynamicdns/dynamicdns.py:217 +msgid "Configure Dynamic DNS" +msgstr "Dİnamik DNS'i Yapılandır" + +#: plinth/modules/dynamicdns/dynamicdns.py:239 +msgid "Status of Dynamic DNS" +msgstr "Dinamik DNS Durumu" + +#: plinth/modules/dynamicdns/templates/dynamicdns.html:25 +#| msgid "DynamicDNS client" +msgid "Dynamic DNS Client" +msgstr "Dinamik DNS istemcisi" + +#: plinth/modules/dynamicdns/templates/dynamicdns.html:28 +#, python-format +#| msgid "" +#| "If your internet provider changes your IP address periodic (i.e. every " +#| "24h) it may be hard for others to find you in the WEB. And for this " +#| "reason nobody may find the services which are provided by FreedomBox " +#| "(like your ownCloud)." +msgid "" +"If your internet provider changes your IP address periodic (i.e. every 24h) " +"it may be hard for others to find you in the WEB. And for this reason nobody " +"may find the services which are provided by %(box_name)s, such as ownCloud." +msgstr "" +"Eğer İnternet erişim sağlayıcınız IP adresinizi periyodik bir şekilde (" +"mesela her 24 saatte bir) değiştiriyorsa diğer kişiler sizi ağda bulmakta " +"zorlanabilir. Ve bu sebeple kimse sizin ownCloud'unuz gibi %(box_name)s " +"tarafından sunulan servisleri bulamayabilir." + +#: plinth/modules/dynamicdns/templates/dynamicdns.html:37 +#| msgid "" +#| "The solution is to assign a DNS name to your IP address and update the " +#| "DNS name every time your IP is changed by your Internet provider. Dynamic " +#| "DNS allows you to push your current public IP address to an gnudip " +#| "server. Afterwards the Server will assign your DNS name with the new IP " +#| "and if someone from the internet asks for your DNS name he will get your " +#| "current IP answered." +msgid "" +"The solution is to assign a DNS name to your IP address and update the DNS " +"name every time your IP is changed by your Internet provider. Dynamic DNS " +"allows you to push your current public IP address to an gnudip server. Afterwards " +"the Server will assign your DNS name with the new IP and if someone from the " +"Internet asks for your DNS name he will get your current IP answered." +msgstr "" +"Çözüm, IP adresinize bir DNS ismi atamak ve DNS ismini IP adresiniz İnternet " +"erişim sağlayıcınız tarafından her değiştirildiğinde güncellemektir. Dinamik " +"DNS güncel genel İnternet adresinizi bir gnudip " +"sunucusuna gönderir. Bunun ardından sunucu DNS isminizi yeni IP adresi ile " +"ilişkilendirecek ve İnternet'te birisi DNS isminizi sorguladığında güncel IP " +"adresinizi elde edebilecektir." + +#: plinth/modules/dynamicdns/templates/dynamicdns.html:50 +msgid "" +"If you are looking for a free dynamic DNS account, you may find a free " +"GnuDIP service at gnudip.datasystems24.net or you may find free update URL " +"based services on " +"freedns.afraid.org." +msgstr "" +"Eğer ücretsiz bir dinamik DNS hesabı arıyorsanız, bedava bir GnuDIP " +"servisini gnudip." +"datasystems24.net adresinde ya da ücretsiz URL güncelleme temelli " +"servisleri freedns." +"afraid.org adresinde bulabilirsiniz." + +#: plinth/modules/dynamicdns/templates/dynamicdns.html:61 +#, python-format +#| msgid "" +#| "If your freedombox is connected behind some NAT router, don't forget to " +#| "add portforwarding (i.e. forward some standard ports like 80 and 443) to " +#| "your freedombox device." +msgid "" +"If your %(box_name)s is connected behind some NAT router, don't forget to " +"add port forwarding (i.e. forward some standard ports like 80 and 443)." +msgstr "" +"Eğer %(box_name)s kutunuz bir NAT yönlendiriciye bağlıysa, port yönlendirme (" +"yani 80 ve 443 gibi bazı standart portları yönlendirmeyi) eklemeyi " +"unutmayınız." + +#: plinth/modules/dynamicdns/templates/dynamicdns_configure.html:30 +msgid "" +"You have disabled Javascript. Dynamic form mode is disabled and some helper " +"functions may not work (but the main functionality should work)." +msgstr "" +"Javascript'i devre dışı bırakmışsınız. Dinamik form kipi devre dışıdır ve " +"bazı yardımcı işlevler çalışmayabilir (fakat ana işlevler çalışmalıdır)." + +#: plinth/modules/dynamicdns/templates/dynamicdns_status.html:25 +msgid "NAT type" +msgstr "NAT türü" + +#: plinth/modules/dynamicdns/templates/dynamicdns_status.html:29 +msgid "" +"NAT type not detected yet, if you do not provide a \"IP check URL\" we will " +"not detect a NAT type." +msgstr "" +"NAT türü henüz tespit edilmemiştir, eğer bir \"IP kontrolü bağlantısı\" " +"girmezseniz NAT türü tespit edilmeyecektir." + +#: plinth/modules/dynamicdns/templates/dynamicdns_status.html:35 +#| msgid "Direct connection to the internet." +msgid "Direct connection to the Internet." +msgstr "İnternet'e doğrudan bağlantı." + +#: plinth/modules/dynamicdns/templates/dynamicdns_status.html:37 +#, python-format +#| msgid "" +#| "Behind NAT, this means that dynamic DNS service will poll the \"IP check " +#| "URL\" for changes (we need the \"IP check URL\" for this reason - " +#| "otherwise we will not detect IP changes). It may take up to %(timer)s " +#| "minutes until we update your DNS entry in case of WAN IP change." +msgid "" +"Behind NAT. This means that Dynamic DNS service will poll the \"IP check URL" +"\" for changes (the \"IP check URL\" entry is needed for this - otherwise IP " +"changes will not be detected). In case the WAN IP changes, it may take up " +"to %(timer)s minutes until your DNS entry is updated." +msgstr "" +"NAT arkasında. Bu, dinamik DNS servisinin \"IP kontrolü bağlantısını\" " +"değişiklikler için yoklayacağı anlamına gelir (\"IP kontrolü bağlantısı\" bu " +"sebeple gereklidir - aksi takdirde IP değişiklikleri tespit edilemez). WAN " +"IP değişikliği durumunda DNS girdinizin güncellenmesi %(timer)s dakika " +"alabilir." + +#: plinth/modules/dynamicdns/templates/dynamicdns_status.html:48 +msgid "Last update" +msgstr "Son güncelleme" + +#: plinth/modules/firewall/firewall.py:39 +#: plinth/modules/firewall/firewall.py:49 +#: plinth/modules/firewall/firewall.py:57 +msgid "Firewall" +msgstr "Güvenlik Duvarı" + +#: plinth/modules/firewall/templates/firewall.html:28 +#, python-format +#| msgid "" +#| "Firewall is a network security system that controls the incoming and " +#| "outgoing network traffic on your %(box_name)s. Keeping a firewall enabled " +#| "and properly configured reduces risk of security threat from the Internet." +msgid "" +"Firewall is a security system that controls the incoming and outgoing " +"network traffic on your %(box_name)s. Keeping a firewall enabled and " +"properly configured reduces risk of security threat from the Internet." +msgstr "" +"Güvenlik duvarı %(box_name)s kutunuzda içeri gelen ve dışarı giden şebeke " +"trafiğini kontrol eden bir güvenlik sistemidir. Güvenlik duvarını " +"etkinleştirip gerektiği gibi yapılandırmak İnternet'ten gelen güvenlik " +"tehditlerini azaltır." + +#: plinth/modules/firewall/templates/firewall.html:36 +msgid "Current status:" +msgstr "Güncel durum:" + +#: plinth/modules/firewall/templates/firewall.html:41 +#, python-format +msgid "" +"Firewall daemon is not running. Please run it. Firewall comes enabled by " +"default on %(box_name)s. On any Debian based system (such as %(box_name)s) " +"you may run it using the command 'service firewalld start' or in case of a " +"system with systemd 'systemctl start firewalld'." +msgstr "" +"Güvenlik duvarı servisi çalışmamaktadır. Lütfen çalıştırın. Güvenlik duvarı " +"%(box_name)s kutusunda varsayılan değer olarak etkindir. Debian temelli " +"herhangi bir sistemde (%(box_name)s gibi) güvenlik duvarını 'service " +"firewalld start' komutunu çalıştırarak ya da systemd bulunan bir sistemde " +"'systemctl start firewalld' komutunu çalıştırarak etkinleştirebilirsiniz." + +#: plinth/modules/firewall/templates/firewall.html:56 +msgid "Service/Port" +msgstr "Servis/Port" + +#: plinth/modules/firewall/templates/firewall.html:67 +#: plinth/modules/letsencrypt/templates/letsencrypt.html:91 +#: plinth/modules/names/templates/names.html:51 +msgid "Enabled" +msgstr "Etkin" + +#: plinth/modules/firewall/templates/firewall.html:70 +#: plinth/modules/letsencrypt/templates/letsencrypt.html:93 +#: plinth/modules/names/templates/names.html:53 +msgid "Disabled" +msgstr "Devre dışı" + +#: plinth/modules/firewall/templates/firewall.html:81 +msgid "Permitted" +msgstr "İzinli" + +#: plinth/modules/firewall/templates/firewall.html:84 +msgid "Permitted (internal only)" +msgstr "İzinli (sadece dahili)" + +#: plinth/modules/firewall/templates/firewall.html:87 +msgid "Permitted (external only)" +msgstr "İzinli (sadece harici)" + +#: plinth/modules/firewall/templates/firewall.html:90 +msgid "Blocked" +msgstr "Engellenmiş" + +#: plinth/modules/firewall/templates/firewall.html:103 +#| msgid "" +#| "The operation of the firewall is automatic. When you enable a service it " +#| "is automatically permitted in the firewall and you disable a service is " +#| "automatically disabled in the firewall." +msgid "" +"The operation of the firewall is automatic. When you enable a service it is " +"also permitted in the firewall and when you disable a service it is also " +"disabled in the firewall." +msgstr "" +"Güvenlik duvarının işleyişi otomatiktir. Bir servisi etkinleştirdiğinizde " +"güvenlik duvarında da izinli hale gelir ve devre dışı bıraktığınızda " +"güvenlik duvarında da devre dışı bırakılır." + +#: plinth/modules/first_boot/forms.py:48 plinth/modules/users/forms.py:70 +msgid "Creating LDAP user failed." +msgstr "LDAP kullanıcısı oluşturması başarısız oldu." + +#: plinth/modules/first_boot/forms.py:56 +msgid "Failed to add new user to admin group." +msgstr "Yeni kullanıcının admin (yönetici) grubuna eklenmesi başarısız oldu." + +#: plinth/modules/first_boot/forms.py:78 +msgid "User account created, you are now logged in" +msgstr "Kullanıcı hesabı oluşturuldu, artık giriş yaptınız" + +#: plinth/modules/first_boot/templates/firstboot_navbar.html:23 +#: plinth/modules/help/templates/help_index.html:25 +#: plinth/templates/base.html:102 +msgid "Help" +msgstr "Yardım" + +#: plinth/modules/first_boot/templates/firstboot_state0.html:45 +msgid "Start Setup" +msgstr "Kuruluma Başla" + +#: plinth/modules/first_boot/templates/firstboot_state0.html:49 +#, python-format +msgid "" +"To complete the setup of your %(box_name)s, please provide some basic " +"information." +msgstr "" +"%(box_name)s kutunuzun kurulumunu tamamlamak için lütfen bazı temel " +"bilgileri belirtin." + +#: plinth/modules/first_boot/templates/firstboot_state1.html:41 +msgid "Administrator Account" +msgstr "Yönetici Hesabı" + +#: plinth/modules/first_boot/templates/firstboot_state1.html:44 +msgid "" +"Choose a username and password to access this web interface. The password " +"can be changed later. This user will be granted administrative privileges. " +"Other users can be added later." +msgstr "" +"Bu ağ arayüzüne erişmek için bir kullanıcı ismi ve parola seçin. Parola daha " +"sonra değiştirilebilir. Kullanıcıya yönetici yetkileri verilecektir. Başka " +"kullanıcılar daha sonra ilave edilebilir." + +#: plinth/modules/first_boot/templates/firstboot_state1.html:57 +msgid "Box it up!" +msgstr "Kaydet ve FreedomBox'u başlat!" + +#: plinth/modules/first_boot/templates/firstboot_state10.html:29 +msgid "Setup Complete!" +msgstr "Yapılandırma Tamamlandı!" + +#: plinth/modules/first_boot/templates/firstboot_state10.html:32 +#, python-format +#| msgid "" +#| "%(box_name)s setup is now complete. To make your %(box_name)s " +#| "functional, you need some applications. Applications will be installed " +#| "the first time you access them." +msgid "" +"%(box_name)s setup is now complete. To make your %(box_name)s functional, " +"you need some applications. They will be installed the first time you " +"access them." +msgstr "" +"%(box_name)s kurulumu artık tamamlanmıştır. %(box_name)s kutunuzu işlevsel " +"hale getirmek için bazı uygulamalara ihtiyacınız vardır. Uygulamalar onlara " +"ilk kez eriştiğinizde kurulacaktır." + +#: plinth/modules/first_boot/templates/firstboot_state10.html:41 +msgid "Go to Apps" +msgstr "Uygulamalara Git" + +#: plinth/modules/first_boot/templates/firstboot_state10.html:44 +msgid "Current Network Configuration" +msgstr "Güncel Şebeke Yapılandırması" + +#: plinth/modules/first_boot/templates/firstboot_state10.html:47 +msgid "" +"You should check the network setup and modify it if necessary. Do not forget " +"to change the default Wi-Fi passwords!" +msgstr "" +"Şebeke yapılandırmasını kontrol edip gerekiyorsa değiştirmelisiniz. " +"Varsayılan kablosuz ağ parolalarını değiştirmeyi unutmayın!" + +#: plinth/modules/first_boot/templates/firstboot_state10.html:57 +msgid "Go to Networks" +msgstr "Ağlara Git" + +#: plinth/modules/first_boot/views.py:60 +msgid "Setup Complete" +msgstr "Yapılandırma Tamamlandı" + +#: plinth/modules/help/help.py:34 +msgid "Documentation" +msgstr "Belgelendirme" + +#: plinth/modules/help/help.py:36 +msgid "Where to Get Help" +msgstr "Nerede Yardım Bulabilirim" + +#: plinth/modules/help/help.py:38 +msgid "Manual" +msgstr "El ile" + +#: plinth/modules/help/help.py:48 +msgid "Documentation and FAQ" +msgstr "Belgelendirme ve SSS" + +#: plinth/modules/help/help.py:55 +#, python-brace-format +msgid "About {box_name}" +msgstr "{box_name} hakkında" + +#: plinth/modules/help/help.py:73 +#, python-brace-format +#| msgid "About {box_name}" +msgid "{box_name} Manual" +msgstr "{box_name} Kılavuzu" + +#: plinth/modules/help/templates/help_about.html:30 +#, python-format +#| msgid "" +#| "FreedomBox is a community project to develop, design and promote personal " +#| "servers running free software for private, personal communications. It " +#| "is a networking appliance designed to allow interfacing with the rest of " +#| "the Internet under conditions of protected privacy and data security. It " +#| "hosts applications such as blog, wiki, website, social network, email, " +#| "web proxy and a Tor relay on a device that can replace your Wi-Fi router " +#| "so that your data stays with you." +msgid "" +"%(box_name)s is a community project to develop, design and promote personal " +"servers running free software for private, personal communications. It is a " +"networking appliance designed to allow interfacing with the rest of the " +"Internet under conditions of protected privacy and data security. It hosts " +"applications such as blog, wiki, website, social network, email, web proxy " +"and a Tor relay, on a device that can replace your Wi-Fi router, so that " +"your data stays with you." +msgstr "" +"%(box_name)s, özel iletişimler için özgür yazılım çalıştıran kişisel " +"sunucular tasarlayan, geliştiren ve kullanımını teşvik eden bir topluluk " +"projesidir. Veri güvenliğini ve gizliliği koruyan şartlarda İnternet'e " +"bağlantıda arayüz görevi görecek bir ağ cihazıdır. Verilerinizin sizinle " +"kalması için Wi-Fi yönlendiricisinin yerine geçebilecek bir cihazda blog, " +"viki, ağ sitesi, sosyal ağ, e-posta, vekil sunucu ve Tor aktarıcısı gibi " +"uygulamalar barındırır." + +#: plinth/modules/help/templates/help_about.html:43 +msgid "" +"We live in a world where our use of the network is mediated by those who " +"often do not have our best interests at heart. By building software that " +"does not rely on a central service, we can regain control and privacy. By " +"keeping our data in our homes, we gain useful legal protections over it. By " +"giving back power to the users over their networks and machines, we are " +"returning the Internet to its intended peer-to-peer architecture." +msgstr "" +"Ağ kullanımımızı sıklıkla menfaatlerimizi gözetmeyenlerin aracılığıyla " +"yaptığımız bir dünyada yaşıyoruz. Merkezi bir servise dayanmayan yazılım " +"geliştirerek kontrol ve gizliliğimizi tekrar kazanabiliriz. Verilerimizi " +"evlerimizde tutarak bu veriler üzerinde yararlı kanuni korumalar kazanırız. " +"Ağları ve makinelerinin kontrolünü kullanıcılara tekrar kazandırarak " +"İnternet'i amaçlanan eşten eşe mimarisine geri getiriyoruz." + +#: plinth/modules/help/templates/help_about.html:56 +#, python-format +#| msgid "" +#| "There are a number of projects working to realize a future of distributed " +#| "services; FreedomBox aims to bring them all together in a convenient " +#| "package." +msgid "" +"There are a number of projects working to realize a future of distributed " +"services; %(box_name)s aims to bring them all together in a convenient " +"package." +msgstr "" +"Eşten eşe, dağıtılmış servisler geleceği için çalışan çeşitli projeler " +"bulunmaktadır: %(box_name)s kutusunun amacı onların tümünü kişisel bir " +"sunucuda bir araya getirmektir." + +#: plinth/modules/help/templates/help_about.html:64 +#, python-format +#| msgid "" +#| "For more information about the FreedomBox project, see the FreedomBox Wiki." +msgid "" +"For more information about the %(box_name)s project, see the %(box_name)s Wiki." +msgstr "" +"%(box_name)s projesi hakkında daha fazla bilgi için %(box_name)s Vikisini okuyunuz." + +#: plinth/modules/help/templates/help_about.html:73 +msgid "Learn more »" +msgstr "Daha fazla bilgi edinin »" + +#: plinth/modules/help/templates/help_about.html:76 +#, python-format +msgid "You are running Plinth version %(version)s." +msgstr "Plinth yazılımının %(version)s sürümünü kullanıyorsunuz." + +#: plinth/modules/help/templates/help_base.html:36 +#, python-format +msgid "%(box_name)s Setup" +msgstr "%(box_name)s Kurulumu" + +#: plinth/modules/help/templates/help_index.html:29 +#, python-format +#| msgid "" +#| "The FreedomBox Manual is the best place to " +#| "start for information regarding %(box_name)s." +msgid "" +"The %(box_name)s Manual is the best place to " +"start for information regarding %(box_name)s." +msgstr "" +"%(box_name)s. hakkında daha fazla bilgi edinmeye başlamak için en uygun yer <" +"a href=\"%(manual_url)s\">%(box_name)s Kullanım Kılavuzudur." + +#: plinth/modules/help/templates/help_index.html:36 +#, python-format +#| msgid "" +#| " " +#| "FreedomBox project wiki contains further information." +msgid "" +" " +"%(box_name)s project wiki contains further information." +msgstr "" +" %(box_name)" +"s proje vikisi daha fazla bilgi içerir." + +#: plinth/modules/help/templates/help_index.html:43 +#, python-format +#| msgid "" +#| "To seek help from FreedomBox community, queries may be posted on the mailing list. The list archives also contain information about " +#| "problems faced by other users and possible solutions." +msgid "" +"To seek help from %(box_name)s community, queries may be posted on the mailing list. The list archives also contain information about " +"problems faced by other users and possible solutions." +msgstr "" +"%(box_name)s topluluğundan yardım istiyorsanız, sorularınızı e-" +"posta listesine yollayabilirsiniz. Liste arşivleri diğer " +"kullanıcıların karşılaştıkları sorunlar ve mümkün çözümler hakkında da bilgi " +"içerir." + +#: plinth/modules/help/templates/help_index.html:53 +#, python-format +msgid "" +"Many %(box_name)s contributors and users are also available on the irc.oftc." +"net IRC network. Join and request help on the #freedombox " +"channel using the IRC web interface." +msgstr "" +"Birçok %(box_name)s iştirakçisi ve kullancısı irc.oftc.net IRC ağında da " +"bulunabilir. IRC web arayüzünü kullanarak " +"#freedombox kanalına katılın ve yardım talebinde bulunun." + +#: plinth/modules/ikiwiki/__init__.py:38 +#| msgid "Wiki & Blog (Ikiwiki)" +msgid "Wiki and Blog (ikiwiki)" +msgstr "Viki ve Blog (ikiwiki)" + +#: plinth/modules/ikiwiki/__init__.py:43 +#| msgid "Ikiwiki wikis and blogs" +msgid "ikiwiki wikis and blogs" +msgstr "ikiwiki vikileri ve blogları" + +#: plinth/modules/ikiwiki/forms.py:29 +#| msgid "Enable Ikiwiki" +msgid "Enable ikiwiki" +msgstr "ikiwiki'yi Etkinleştir" + +#: plinth/modules/ikiwiki/forms.py:36 +#: plinth/modules/networks/templates/connection_show.html:98 +msgid "Type" +msgstr "Tür" + +#: plinth/modules/ikiwiki/forms.py:39 +#: plinth/modules/networks/templates/connection_show.html:78 +msgid "Name" +msgstr "İsim" + +#: plinth/modules/ikiwiki/forms.py:41 +msgid "Admin Account Name" +msgstr "Yönetici Hesap İsmi" + +#: plinth/modules/ikiwiki/forms.py:44 +msgid "Admin Account Password" +msgstr "Yönetici Hesap Parolası" + +#: plinth/modules/ikiwiki/templates/ikiwiki.html:27 +msgid "" +"When enabled, the blogs and wikis will be available from /ikiwiki." +msgstr "" +"Etkinleştirildilerinde, bloglar ve vikilere erişim /" +"ikiwiki adresinden mümkün olacaktır." + +#: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:27 +#, python-format +#| msgid "Delete Wiki/Blog %(name)s" +msgid "Delete Wiki or Blog %(name)s" +msgstr "%(name)s isimli Viki ya da Blogu sil" + +#: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:33 +#| msgid "" +#| "This action will remove all the posts, pages and comments including " +#| "revision history. Delete this wiki/blog permanently?" +msgid "" +"This action will remove all the posts, pages and comments including revision " +"history. Delete this wiki or blog permanently?" +msgstr "" +"Bu eylem revizyon geçmişi de dahil olmak üzere tüm mesajları, sayfaları ve " +"yorumları silecektir. Bu viki ya da blogu daimi olarak silmek istiyor " +"musunuz?" + +#: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:44 +#, python-format +msgid "Delete %(name)s" +msgstr "%(name)s unsurunu sil" + +#: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:47 +#: plinth/modules/monkeysphere/templates/monkeysphere.html:60 +#: plinth/modules/networks/templates/connections_delete.html:41 +#: plinth/modules/users/templates/users_delete.html:41 +msgid "Cancel" +msgstr "İptal" + +#: plinth/modules/ikiwiki/templates/ikiwiki_manage.html:41 +msgid "No wikis or blogs available." +msgstr "Hiçbir viki ya da blog mevcut değil." + +#: plinth/modules/ikiwiki/templates/ikiwiki_manage.html:45 +msgid "Create a Wiki or Blog" +msgstr "Bir Viki ya da Blog oluştur" + +#: plinth/modules/ikiwiki/templates/ikiwiki_manage.html:55 +#, python-format +msgid "Delete site %(site)s" +msgstr "%(site)s sitesini sil" + +#: plinth/modules/ikiwiki/templates/ikiwiki_manage.html:61 +#, python-format +msgid "Go to site %(site)s" +msgstr "%(site)s sitesine git" + +#: plinth/modules/ikiwiki/views.py:38 +msgid "Manage" +msgstr "Yönet" + +#: plinth/modules/ikiwiki/views.py:40 +msgid "Create" +msgstr "Oluştur" + +#: plinth/modules/ikiwiki/views.py:73 +#| msgid "Wiki & Blog" +msgid "Wiki and Blog" +msgstr "Viki ve Blog" + +#: plinth/modules/ikiwiki/views.py:106 +msgid "Manage Wikis and Blogs" +msgstr "Viki ve Blogları Yönet" + +#: plinth/modules/ikiwiki/views.py:132 +#| msgid "Create a Wiki or Blog" +msgid "Create Wiki or Blog" +msgstr "Viki ya da Blog oluştur" + +#: plinth/modules/ikiwiki/views.py:145 +#, python-brace-format +msgid "Created wiki {name}." +msgstr "{name} isimli viki oluşturuldu." + +#: plinth/modules/ikiwiki/views.py:147 +#, python-brace-format +msgid "Could not create wiki: {error}" +msgstr "Viki oluşturulamadı: {error}" + +#: plinth/modules/ikiwiki/views.py:159 +#, python-brace-format +msgid "Created blog {name}." +msgstr "{name} isimli blog oluşturuldu." + +#: plinth/modules/ikiwiki/views.py:161 +#, python-brace-format +msgid "Could not create blog: {error}" +msgstr "Blog oluşturulamadı: {error}" + +#: plinth/modules/ikiwiki/views.py:174 +#, python-brace-format +msgid "{name} deleted." +msgstr "{name} silindi." + +#: plinth/modules/ikiwiki/views.py:176 +#, python-brace-format +msgid "Could not delete {name}: {error}" +msgstr "{name} silinemedi: {error}" + +#: plinth/modules/ikiwiki/views.py:182 +#| msgid "Delete Wiki/Blog" +msgid "Delete Wiki or Blog" +msgstr "Viki ya da Blogu Sil" + +#: plinth/modules/letsencrypt/__init__.py:43 +#: plinth/modules/letsencrypt/templates/letsencrypt.html:38 +#: plinth/modules/letsencrypt/views.py:45 +msgid "Certificates (Let's Encrypt)" +msgstr "Sertifikalar (Let's Encrypt)" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:41 +#, python-format +msgid "" +"A digital certficate allows users of a web service to verify the identity of " +"the service and to securely communicate with it. %(box_name)s can " +"automatically obtain and setup digital certificates for each available " +"domain. It does so by proving itself to be the owner of a domain to Let's " +"Encrypt, a certficate authority (CA)." +msgstr "" +"Sayısal sertifikalar kullanıcıların ağ servislerinin kimliklerini " +"doğrulamalarına ve onlarla güvenli bir şekilde iletişim kurmalarına imkân " +"verir. %(box_name)s otomatik olarak her mevcut alan için sayısal sertifika " +"edinebilir ve bunları kurabilir. Bunu kendisinin bir alanın sahibi olduğunu " +"bir sertifika otoritesi (Certificate Authority, CA) olan Let's Encrypt'e " +"ispatlayarak yapar." + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:52 +msgid "" +"Let's Encrypt is a free, automated, and open certificate authority, run for " +"the public’s benefit by the Internet Security Research Group (ISRG). Please " +"read and agree with the Let's Encrypt Subscriber Agreement before using this service." +msgstr "" +"Let's Encrypt, Internet Security Research Group (ISRG) tarafından işletilen, " +"kamunun yararına çalışan ücretsiz, otomatik ve açık bir sertifika " +"otoritesidir. Bu servisi kullanmadan önce lütfen Let's Encrypt Abone Sözleşmesini okuyup " +"kabul edin." + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:66 +#: plinth/modules/monkeysphere/templates/monkeysphere.html:70 +msgid "Domain" +msgstr "Alan" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:67 +msgid "Certificate Status" +msgstr "Sertifika Durumu" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:68 +msgid "Website Security" +msgstr "Site Güvenliği" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:69 +#: plinth/modules/monkeysphere/templates/monkeysphere.html:72 +msgid "Actions" +msgstr "Eylemler" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:79 +#, python-format +msgid "Expires on %(expiry_date)s" +msgstr "%(expiry_date)s tarihinde sona eriyor" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:85 +msgid "No certficate" +msgstr "Sertifika yok" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:102 +msgid "Revoke" +msgstr "İptal et" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:108 +msgid "Re-obtain" +msgstr "Tekrar edin" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:115 +msgid "Obtain" +msgstr "Edin" + +#: plinth/modules/letsencrypt/views.py:55 +#, python-brace-format +msgid "Certificate successfully revoked for domain {domain}" +msgstr "{domain} alanı için sertifika başarılı bir şekilde iptal edildi" + +#: plinth/modules/letsencrypt/views.py:60 +#, python-brace-format +msgid "Failed to revoke certificate for domain {domain}: {error}" +msgstr "" +"{domain} alanı için sertifikanın iptal edilmesi başarısız oldu: {error}" + +#: plinth/modules/letsencrypt/views.py:72 +#, python-brace-format +msgid "Certificate successfully obtained for domain {domain}" +msgstr "{domain} alanı için sertifika başarılı bir şekilde edinildi" + +#: plinth/modules/letsencrypt/views.py:77 +#, python-brace-format +msgid "Failed to obtain certificate for domain {domain}: {error}" +msgstr "{domain} alanı için sertifika edinilemedi: {error}" + +#: plinth/modules/monkeysphere/__init__.py:32 +#: plinth/modules/monkeysphere/templates/monkeysphere.html:35 +#: plinth/modules/monkeysphere/views.py:44 +msgid "Monkeysphere" +msgstr "Monkeysphere" + +#: plinth/modules/monkeysphere/templates/monkeysphere.html:38 +msgid "" +"With Monkeysphere, a PGP key can be generated for each configured domain " +"serving SSH. The PGP public key can then be uploaded to the PGP keyservers. " +"Users connecting to this machine through SSH can verify that they are " +"connecting to the correct host. For users to trust the key, at least one " +"person (usually the machine owner) must sign the key using the regular PGP " +"key signing process. See the Monkeysphere SSH documentation for more details." +msgstr "" +"Monkeysphere ile her SSH sunan yapılandırılmış alan için bir PGP anahtarı " +"oluşturulabilir. Bunun ardından herkese açık PGP anahtarı PGP anahtar " +"sunucularına yüklenebilir. Bu makineye SSH vasıtasıyla bağlanan kullanıcılar " +"doğru makineye bağlandıklarını teyit edebilirler. Kullanıcıların anahtara " +"güvenebilmeleri için en az bir kişinin (genellikle makine sahibi) anahtarı " +"olağan PGP anahtar imzalama süreciyle imzalaması gerekir. Daha fazla bilgi " +"için " +"Monkeysphere SSH belgelendirmesine bakınız." + +#: plinth/modules/monkeysphere/templates/monkeysphere.html:53 +msgid "Publishing key to keyserver..." +msgstr "Anahtar, anahtar sunucusuna yayınlanıyor..." + +#: plinth/modules/monkeysphere/templates/monkeysphere.html:71 +msgid "GPG Fingerprint" +msgstr "GPG Parmak izi" + +#: plinth/modules/monkeysphere/templates/monkeysphere.html:83 +#: plinth/modules/names/views.py:45 +msgid "Not Available" +msgstr "Mevcut değil" + +#: plinth/modules/monkeysphere/templates/monkeysphere.html:93 +msgid "Generate PGP Key" +msgstr "PGP Anahtarı Oluştur" + +#: plinth/modules/monkeysphere/templates/monkeysphere.html:101 +msgid "Publish Key" +msgstr "Anahtarı Yayınla" + +#: plinth/modules/monkeysphere/views.py:58 +msgid "Generated PGP key." +msgstr "Oluşturulan PGP anahtarı." + +#: plinth/modules/monkeysphere/views.py:83 +msgid "Cancelled key publishing." +msgstr "Anahtar yayını iptal edildi." + +#: plinth/modules/monkeysphere/views.py:120 +msgid "Published key to keyserver." +msgstr "Anahtar, anahtar sunucusuna yayınlandı." + +#: plinth/modules/monkeysphere/views.py:122 +msgid "Error occurred while publishing key." +msgstr "Anahtarın yayınlanmasında bir hata meydana geldi." + +#: plinth/modules/mumble/__init__.py:38 +#: plinth/modules/mumble/templates/mumble.html:26 +#: plinth/modules/mumble/views.py:58 +msgid "Voice Chat (Mumble)" +msgstr "Ses ile Sohbet (Mumble)" + +#: plinth/modules/mumble/__init__.py:43 +msgid "Mumble Voice Chat Server" +msgstr "Mumble Ses ile Sohbet Sunucusu" + +#: plinth/modules/mumble/forms.py:29 +msgid "Enable Mumble daemon" +msgstr "Mumble servisini etkinleştir" + +#: plinth/modules/mumble/templates/mumble.html:29 +msgid "" +"Mumble is an open source, low-latency, encrypted, high quality voice chat " +"software." +msgstr "" +"Mumble, açık kaynak, düşük gecikmeli, şifreli, yüksek kaliteli sesle sohbet " +"yazılımıdır." + +#: plinth/modules/mumble/templates/mumble.html:36 +msgid "" +"You can connect to your Mumble server on the regular Mumble port 64738. Clients to connect to Mumble from your " +"desktop and Android devices are available." +msgstr "" +"Mumble sunucunuza alışılagelmiş 64738 numaralı Mumble portundan " +"bağlanabilirsiniz. Mumble'a masaüstünden ya da Android cihazlarından " +"bağlanmak için istemciler mevcuttur." + +#: plinth/modules/mumble/templates/mumble.html:49 +msgid "Mumble server is running" +msgstr "Mumble sunucusu çalışmaktadır" + +#: plinth/modules/mumble/templates/mumble.html:52 +msgid "Mumble server is not running" +msgstr "Mumble sunucusu çalışmamaktadır" + +#: plinth/modules/names/__init__.py:29 +msgid "HTTP" +msgstr "HTTP" + +#: plinth/modules/names/__init__.py:30 +msgid "HTTPS" +msgstr "HTTPS" + +#: plinth/modules/names/__init__.py:31 +msgid "SSH" +msgstr "SSH" + +#: plinth/modules/names/__init__.py:45 plinth/modules/names/views.py:34 +msgid "Name Services" +msgstr "İsim Servisleri" + +#: plinth/modules/networks/__init__.py:108 +#, python-brace-format +msgid "Using DNSSEC on IPv{kind}" +msgstr "IPv{kind} üzerinde DNSSEC kullanılıyor" + +#: plinth/modules/networks/forms.py:30 +msgid "Connection Type" +msgstr "Bağlantı Türü" + +#: plinth/modules/networks/forms.py:37 +msgid "Connection Name" +msgstr "Bağlantı İsmi" + +#: plinth/modules/networks/forms.py:39 +msgid "Physical Interface" +msgstr "Fiziki Arayüz" + +#: plinth/modules/networks/forms.py:41 +msgid "The network device that this connection should be bound to." +msgstr "Bu bağlantının bağlanacağı ağ cihazı." + +#: plinth/modules/networks/forms.py:44 +msgid "Firewall Zone" +msgstr "Güvenlik Duvarı Alanı" + +#: plinth/modules/networks/forms.py:45 +msgid "" +"The firewall zone will control which services are available over this " +"interfaces. Select Internal only for trusted networks." +msgstr "" +"Güvenlik duvarı alanı bu arayüzlerde hangi servislerin mevcut olacağını " +"kontrol eder. Dahiliyi sadece güvenilir şebekeler için seçin." + +#: plinth/modules/networks/forms.py:49 +msgid "IPv4 Addressing Method" +msgstr "IPv4 Adresleme Metodu" + +#: plinth/modules/networks/forms.py:50 +msgid "" +"\"Shared\" method will start a DHCP server and \"Automatic\" method will " +"acquire configuration from a DHCP server." +msgstr "" +"\"Paylaşılan\" metodu bir DHCP sunucusu başlatacaktır ve \"Otomatik\" metot " +"yapılandırmayı bir DHCP sunucusundan alacaktır." + +#: plinth/modules/networks/forms.py:56 +msgid "Address" +msgstr "Adres" + +#: plinth/modules/networks/forms.py:60 +msgid "Netmask" +msgstr "Ağ Maskesi" + +#: plinth/modules/networks/forms.py:61 +msgid "" +"Optional value. If left blank, a default netmask based on the address will " +"be used." +msgstr "" +"Seçime dayalı değer. Boş bırakılırsa adrese dayalı varsayılan bir ağ maskesi " +"kullanılacaktır." + +#: plinth/modules/networks/forms.py:66 +#: plinth/modules/networks/templates/connection_show.html:202 +#: plinth/modules/networks/templates/connection_show.html:241 +msgid "Gateway" +msgstr "Geçit" + +#: plinth/modules/networks/forms.py:67 +msgid "Optional value." +msgstr "Seçime dayalı değer." + +#: plinth/modules/networks/forms.py:71 +msgid "DNS Server" +msgstr "DNS Sunucusu" + +#: plinth/modules/networks/forms.py:72 +msgid "" +"Optional value. If this value is given and IPv4 addressing method is " +"\"Automatic\", the DNS Servers provided by a DHCP server will be ignored." +msgstr "" +"Seçime dayalı değer. Eğer bu değer belirtildiyse ve IPv4 adresleme metodu " +"\"Otomatik\" ise, DHCP sunucusu tarafından sunulan DNS sunucuları görmezden " +"gelinecektir." + +#: plinth/modules/networks/forms.py:78 +msgid "Second DNS Server" +msgstr "İkinci DNS Sunucusu" + +#: plinth/modules/networks/forms.py:79 +msgid "" +"Optional value. If this value is given and IPv4 Addressing Method is " +"\"Automatic\", the DNS Servers provided by a DHCP server will be ignored." +msgstr "" +"Seçime dayalı değer. Eğer bu değer belirtildiyse ve IPv4 Adresleme Metodu " +"\"Otomatik\" ise, DHCP sunucusu tarafından sunulan DNS sunucuları görmezden " +"gelinecektir." + +#: plinth/modules/networks/forms.py:89 +msgid "-- select --" +msgstr "-- seç --" + +#: plinth/modules/networks/forms.py:175 +#: plinth/modules/networks/templates/connection_show.html:144 +msgid "SSID" +msgstr "SSID" + +#: plinth/modules/networks/forms.py:176 +msgid "The visible name of the network." +msgstr "Şebekenin görünür ismi." + +#: plinth/modules/networks/forms.py:178 +#: plinth/modules/networks/templates/connection_show.html:157 +msgid "Mode" +msgstr "Kip" + +#: plinth/modules/networks/forms.py:183 +msgid "Authentication Mode" +msgstr "Kimlik Doğrulama Kipi" + +#: plinth/modules/networks/forms.py:184 +msgid "" +"Select WPA if the wireless network is secured and requires clients to have " +"the password to connect." +msgstr "" +"Eğer kablosuz ağ güvenli ise ve istemcilerin bağlantı için parolaları " +"olmasını gerektiriyorsa WPA'yi seçin." + +#: plinth/modules/networks/forms.py:188 +msgid "Passphrase" +msgstr "Parola" + +#: plinth/modules/networks/networks.py:36 +#: plinth/modules/networks/networks.py:56 +msgid "Network Connections" +msgstr "Ağ Bağlantıları" + +#: plinth/modules/networks/networks.py:38 +#: plinth/modules/networks/networks.py:242 +msgid "Nearby Wi-Fi Networks" +msgstr "Yakındaki Wi-Fi Ağları" + +#: plinth/modules/networks/networks.py:40 +#: plinth/modules/networks/networks.py:264 +msgid "Add Connection" +msgstr "Bağlantı Ekle" + +#: plinth/modules/networks/networks.py:46 +msgid "Networks" +msgstr "Ağlar" + +#: plinth/modules/networks/networks.py:66 +msgid "Cannot show connection: Connection not found." +msgstr "Bağlantı gösterilemez: bağlantı bulunamadı." + +#: plinth/modules/networks/networks.py:100 +msgid "Show Connection information" +msgstr "Bağlantı Verilerini Göster" + +#: plinth/modules/networks/networks.py:113 +msgid "Cannot edit connection: Connection not found." +msgstr "Bağlantı düzenlenemez: bağlantı bulunamadı." + +#: plinth/modules/networks/networks.py:119 +msgid "This type of connection is not yet understood." +msgstr "Bu tip bağlantı henüz anlaşılamamaktadır." + +#: plinth/modules/networks/networks.py:139 +#: plinth/modules/networks/networks.py:198 +#: plinth/modules/networks/templates/connections_edit.html:34 +msgid "Edit Connection" +msgstr "Bağlantıyı Düzenle" + +#: plinth/modules/networks/networks.py:209 +#, python-brace-format +msgid "Activated connection {name}." +msgstr "{name} bağlantısı etkinleştirildi." + +#: plinth/modules/networks/networks.py:212 +msgid "Failed to activate connection: Connection not found." +msgstr "Bağlantı etkinleştirilemedi: bağlantı bulunamadı." + +#: plinth/modules/networks/networks.py:216 +#, python-brace-format +msgid "Failed to activate connection {name}: No suitable device is available." +msgstr "" +"{name} isimli bağlantı etkinleştirilemedi: hiçbir uygun cihaz mevcut değil." + +#: plinth/modules/networks/networks.py:229 +#, python-brace-format +msgid "Deactivated connection {name}." +msgstr "{name} isimli bağlantı devre dışı bırakıldı." + +#: plinth/modules/networks/networks.py:232 +msgid "Failed to de-activate connection: Connection not found." +msgstr "" +"Bağlantının devre dışı bırakılması başarısız oldu: bağlantı bulunamadı." + +#: plinth/modules/networks/networks.py:282 +msgid "Adding New Ethernet Connection" +msgstr "Yeni Ethernet Bağlantısı Ekleniyor" + +#: plinth/modules/networks/networks.py:300 +msgid "Adding New PPPoE Connection" +msgstr "Yeni PPPoE Bağlantısı Ekleniyor" + +#: plinth/modules/networks/networks.py:332 +msgid "Adding New Wi-Fi Connection" +msgstr "Yeni Kablosuz Bağlantı Ekleniyor" + +#: plinth/modules/networks/networks.py:346 +#, python-brace-format +msgid "Connection {name} deleted." +msgstr "{name} isimli bağlantı silindi." + +#: plinth/modules/networks/networks.py:349 +#: plinth/modules/networks/networks.py:358 +msgid "Failed to delete connection: Connection not found." +msgstr "Bağlantının silinmesi başarısız oldu: bağlantı bulunamadı." + +#: plinth/modules/networks/networks.py:363 +#: plinth/modules/networks/templates/connections_delete.html:26 +msgid "Delete Connection" +msgstr "Bağlantıyı Sil" + +#: plinth/modules/networks/templates/connection_show.html:43 +msgid "Edit connection" +msgstr "Bağlantıyı Düzenle" + +#: plinth/modules/networks/templates/connection_show.html:43 +#: plinth/templates/base.html:123 +msgid "Edit" +msgstr "Düzenle" + +#: plinth/modules/networks/templates/connection_show.html:50 +#: plinth/modules/networks/templates/connections_list.html:78 +msgid "Deactivate" +msgstr "Devre Dışı Bırak" + +#: plinth/modules/networks/templates/connection_show.html:57 +#: plinth/modules/networks/templates/connections_list.html:86 +msgid "Activate" +msgstr "Etkinleştir" + +#: plinth/modules/networks/templates/connection_show.html:63 +msgid "Delete connection" +msgstr "Bağlantıyı sil" + +#: plinth/modules/networks/templates/connection_show.html:63 +msgid "Delete" +msgstr "Sil" + +#: plinth/modules/networks/templates/connection_show.html:66 +#: plinth/modules/networks/templates/connections_diagram.html:73 +#: plinth/modules/networks/templates/connections_diagram.html:76 +#: plinth/modules/networks/templates/connections_diagram.html:105 +#: plinth/modules/networks/templates/connections_diagram.html:127 +msgid "Connection" +msgstr "Bağlantı" + +#: plinth/modules/networks/templates/connection_show.html:71 +msgid "Primary connection" +msgstr "Birincil bağlantı" + +#: plinth/modules/networks/templates/connection_show.html:73 +#: plinth/modules/networks/templates/connection_show.html:217 +#: plinth/modules/networks/templates/connection_show.html:256 +msgid "yes" +msgstr "evet" + +#: plinth/modules/networks/templates/connection_show.html:84 +msgid "Device" +msgstr "Cihaz" + +#: plinth/modules/networks/templates/connection_show.html:88 +msgid "State" +msgstr "Durum" + +#: plinth/modules/networks/templates/connection_show.html:93 +msgid "State reason" +msgstr "Durum nedeni" + +#: plinth/modules/networks/templates/connection_show.html:102 +msgid "MAC address" +msgstr "MAC adresi" + +#: plinth/modules/networks/templates/connection_show.html:106 +msgid "Interface" +msgstr "Arayüz" + +#: plinth/modules/networks/templates/connection_show.html:110 +msgid "Description" +msgstr "Açıklama" + +#: plinth/modules/networks/templates/connection_show.html:116 +msgid "Physical Link" +msgstr "Fiziki Bağlantı" + +#: plinth/modules/networks/templates/connection_show.html:121 +msgid "Link state" +msgstr "Bağlantı durumu" + +#: plinth/modules/networks/templates/connection_show.html:125 +msgid "cable is connected" +msgstr "kablo bağlı" + +#: plinth/modules/networks/templates/connection_show.html:128 +msgid "please check cable" +msgstr "lütfen kabloyu kontrol edin" + +#: plinth/modules/networks/templates/connection_show.html:133 +#: plinth/modules/networks/templates/connection_show.html:149 +msgid "Speed" +msgstr "Hız" + +#: plinth/modules/networks/templates/connection_show.html:135 +#, python-format +msgid "%(ethernet_speed)s Mbit/s" +msgstr "%(ethernet_speed)s Mbit/s" + +#: plinth/modules/networks/templates/connection_show.html:151 +#, python-format +msgid "%(wireless_bitrate)s Mbit/s" +msgstr "%(wireless_bitrate)s Mbit/s" + +#: plinth/modules/networks/templates/connection_show.html:163 +msgid "Signal strength" +msgstr "Sinyal kuvveti" + +#: plinth/modules/networks/templates/connection_show.html:173 +msgid "Channel" +msgstr "Kanal" + +#: plinth/modules/networks/templates/connection_show.html:181 +msgid "IPv4" +msgstr "IPv4" + +#: plinth/modules/networks/templates/connection_show.html:186 +#: plinth/modules/networks/templates/connection_show.html:227 +msgid "Method" +msgstr "Metot" + +#: plinth/modules/networks/templates/connection_show.html:193 +#: plinth/modules/networks/templates/connection_show.html:234 +msgid "IP address" +msgstr "IP adresi" + +#: plinth/modules/networks/templates/connection_show.html:209 +#: plinth/modules/networks/templates/connection_show.html:248 +msgid "DNS server" +msgstr "DNS sunucusu" + +#: plinth/modules/networks/templates/connection_show.html:216 +#: plinth/modules/networks/templates/connection_show.html:255 +msgid "Default" +msgstr "Varsayılan" + +#: plinth/modules/networks/templates/connection_show.html:222 +msgid "IPv6" +msgstr "IPv6" + +#: plinth/modules/networks/templates/connection_show.html:263 +msgid "This connection is not active." +msgstr "Bu bağlantı etkin değildir." + +#: plinth/modules/networks/templates/connection_show.html:266 +msgid "Security" +msgstr "Güvenlik" + +#: plinth/modules/networks/templates/connection_show.html:271 +#: plinth/modules/networks/templates/connection_show.html:291 +#: plinth/modules/networks/templates/connection_show.html:310 +msgid "Firewall zone" +msgstr "Güvenlik duvarı alanı" + +#: plinth/modules/networks/templates/connection_show.html:280 +#| msgid "" +#| "This interface should be connected to local network/machine. If you " +#| "connect this interface to a public network, services meant to be " +#| "available only internally will become available externally. This is a " +#| "security risk." +msgid "" +"This interface should be connected to a local network/machine. If you " +"connect this interface to a public network, services meant to be available " +"only internally will become available externally. This is a security risk." +msgstr "" +"Bu arayüz yerel bir ağa/makineye bağlı olmalıdır. Eğer bu arayüzü herkese " +"açık bir şebekeye bağlarsanız, sadece dahili olması amaçlanan servislere " +"harici erişim mümkün olacaktır. Bu bir güvenlik riskidir." + +#: plinth/modules/networks/templates/connection_show.html:300 +#| msgid "" +#| "This interface should receive your Internet connection. If you connect it " +#| "your a local network/machine, many services meant to available only " +#| "internally will not be available." +msgid "" +"This interface should receive your Internet connection. If you connect it to " +"a local network/machine, many services meant to available only internally " +"will not be available." +msgstr "" +"Bu arayüz sizin İnternet bağlantınızı almalıdır. Eğer onu yerel bir ağ/" +"makineye bağlarsanız, sadece dahili olarak erişilebilir olması amaçlanan " +"servislerin birçoğuna erişim mümkün olmayacaktır." + +#: plinth/modules/networks/templates/connection_show.html:319 +#, python-format +#| msgid "" +#| "This interface is not maintained by FreedomBox. Its security status is " +#| "unknown to FreedomBox. Many FreedomBox services may not be available on " +#| "this interface. It is recommended that you deactivate/delete this " +#| "connection and re-configure it." +msgid "" +"This interface is not maintained by %(box_name)s. Its security status is " +"unknown to %(box_name)s. Many %(box_name)s services may not be available on " +"this interface. It is recommended that you deactivate or delete this " +"connection and re-configure it." +msgstr "" +"Bu arayüzün bakımı %(box_name)s tarafından yapılmaz. Güvenlik durumu " +"%(box_name)s tarafından bilinmemektedir. Birçok %(box_name)s servisi bu " +"arayüzde mevcut olmayabilir. Bu bağlantıyı devre dışı bırakmanız/silmeniz ve " +"yeniden yapılandırmanız tavsiye edilir." + +#: plinth/modules/networks/templates/connections_add.html:34 +#: plinth/modules/networks/templates/connections_type_select.html:34 +msgid "Create..." +msgstr "Oluştur..." + +#: plinth/modules/networks/templates/connections_create.html:34 +msgid "Create Connection" +msgstr "Bağlantı Oluştur" + +#: plinth/modules/networks/templates/connections_delete.html:29 +#, python-format +msgid "Delete connection %(name)s permanently?" +msgstr "%(name)s isimli bağlantı daimi olarak silinsin mi?" + +#: plinth/modules/networks/templates/connections_diagram.html:65 +msgid "Internet" +msgstr "İnternet" + +#: plinth/modules/networks/templates/connections_diagram.html:70 +#: plinth/modules/networks/templates/connections_diagram.html:102 +msgid "Spacing" +msgstr "Aralık" + +#: plinth/modules/networks/templates/connections_diagram.html:78 +msgid "External" +msgstr "Harici" + +#: plinth/modules/networks/templates/connections_diagram.html:83 +#: plinth/modules/networks/templates/connections_diagram.html:113 +#: plinth/network.py:37 +msgid "Ethernet" +msgstr "Ethernet" + +#: plinth/modules/networks/templates/connections_diagram.html:86 +#: plinth/modules/networks/templates/connections_diagram.html:116 +#: plinth/network.py:38 +msgid "Wi-Fi" +msgstr "Wi-Fi" + +#: plinth/modules/networks/templates/connections_diagram.html:89 +#, python-format +msgid "Show connection %(connection.name)s" +msgstr "%(connection.name)s isimli bağlantıyı göster" + +#: plinth/modules/networks/templates/connections_diagram.html:107 +msgid "Internal" +msgstr "Dahili" + +#: plinth/modules/networks/templates/connections_diagram.html:119 +#, python-format +msgid "Show connection %(name)s" +msgstr "%(name)s isimli bağlantıyı göster" + +#: plinth/modules/networks/templates/connections_diagram.html:131 +msgid "Computer" +msgstr "Bilgisayar" + +#: plinth/modules/networks/templates/connections_list.html:67 +#, python-format +msgid "Delete connection %(name)s" +msgstr "%(name)s isimli bağlantıyı sil" + +#: plinth/modules/networks/templates/connections_list.html:92 +msgid "Active" +msgstr "Etkin" + +#: plinth/modules/networks/templates/connections_list.html:95 +msgid "Inactive" +msgstr "Devre Dışı" + +#: plinth/modules/openvpn/__init__.py:38 +#: plinth/modules/openvpn/templates/openvpn.html:35 +#: plinth/modules/openvpn/views.py:62 +msgid "Virtual Private Network (OpenVPN)" +msgstr "Sanal Özel Şebeke (OpenVPN)" + +#: plinth/modules/openvpn/__init__.py:43 +msgid "OpenVPN" +msgstr "OpenVPN" + +#: plinth/modules/openvpn/forms.py:29 +msgid "Enable OpenVPN server" +msgstr "OpenVPN sunucusunu etkinleştir" + +#: plinth/modules/openvpn/templates/openvpn.html:38 +#, python-format +#| msgid "" +#| "Virtual Private Network (VPN) is a technique for securely connecting two " +#| "machines in order to access resources of a private network. While you " +#| "are away from home, you can connect to your %(box_name)s in order to join " +#| "your home network and access private/internal services provided by " +#| "%(box_name)s. You can also access the rest of the Internet via " +#| "%(box_name)s for added security and anonymity." +msgid "" +"Virtual Private Network (VPN) is a technique for securely connecting two " +"devices in order to access resources of a private network. While you are " +"away from home, you can connect to your %(box_name)s in order to join your " +"home network and access private/internal services provided by %(box_name)s. " +"You can also access the rest of the Internet via %(box_name)s for added " +"security and anonymity." +msgstr "" +"Sanal Özel Ağ (Virtual Private Network, VPN), özel bir ağın kaynaklarına " +"erişmek için iki cihaz arasında güvenli bir şekilde bağlantı kurmak için " +"kullanılan tekniktir. Evinizden uzaktayken ev ağınıza erişmek için " +"%(box_name)s kutusuna bağlanıp %(box_name)s tarafından sunulan özel/dahili " +"servisleri kullanabilirsiniz. Aynı zamanda ek güvenlik ve anonimlik için " +"İnternet'in geri kalanına %(box_name)s vasıtasıyla erişebilirsiniz." + +#: plinth/modules/openvpn/templates/openvpn.html:51 +msgid "Profile" +msgstr "Profil" + +#: plinth/modules/openvpn/templates/openvpn.html:54 +#, python-format +#| msgid "" +#| "To connect to %(box_name)s's VPN, you need to download a profile and feed " +#| "it to an OpenVPN client on your mobile or desktop machine. OpenVPN " +#| "Clients are available for most platforms. See documentation on recommended clients and instructions on how to " +#| "configure them." +msgid "" +"To connect to %(box_name)s's VPN, you need to download a profile and feed it " +"to an OpenVPN client on your mobile or desktop machine. OpenVPN Clients are " +"available for most platforms. See documentation on recommended clients and instructions on how to " +"configure them." +msgstr "" +"%(box_name)s kutusunun VPN'ine erişmek için bir profil indirmeniz ve bunu " +"mobil ya da masaüstü makinenize yüklemeniz gerekir. OpenVPN istemcileri " +"platformların çoğu için mevcuttur. Tavsiye edilen istemciler ve onları " +"yapılandırma talimatları için belgelendirmeyi okuyun." + +#: plinth/modules/openvpn/templates/openvpn.html:66 +#, python-format +msgid "Profile is specific to each user of %(box_name)s. Keep it a secret." +msgstr "" +"Profil, %(box_name)s kutusunun her kullanıcısı için özeldir. Onun " +"gizliliğini koruyun." + +#: plinth/modules/openvpn/templates/openvpn.html:76 +msgid "Download my profile" +msgstr "Profilimi indir" + +#: plinth/modules/openvpn/templates/openvpn.html:85 +#, python-format +msgid "" +"OpenVPN has not yet been setup. Performing a secure setup takes a very long " +"time. Depending on how fast your %(box_name)s is, it may even take hours. " +"If the setup is interrupted, you may start it again." +msgstr "" +"OpenVPN kurulumu henüz yapılmamıştır. Güvenli kurulum yapmak çok uzun bir " +"süre alır. %(box_name)s kutunuzun hızına bağlı olarak saatler sürmesi bile " +"mümkündür. Eğer kurulum kesilirse, tekrar başlatabilirsiniz." + +#: plinth/modules/openvpn/templates/openvpn.html:97 +msgid "Start setup" +msgstr "Kuruluma başla" + +#: plinth/modules/openvpn/templates/openvpn.html:104 +msgid "OpenVPN setup is running" +msgstr "OpenVPN kurulumu çalışmaktadır" + +#: plinth/modules/openvpn/templates/openvpn.html:108 +#, python-format +msgid "" +"To perform a secure setup, this process takes a very long time. Depending " +"on how fast your %(box_name)s is, it may even take hours. If the setup is " +"interrupted, you may start it again." +msgstr "" +"Güvenli kurulum yapmak çok uzun bir süre alır. %(box_name)s kutunuzun hızına " +"bağlı olarak saatler sürmesi bile mümkündür. Eğer kurulum kesilirse, tekrar " +"başlatabilirsiniz." + +#: plinth/modules/openvpn/templates/openvpn.html:121 +msgid "OpenVPN server is running" +msgstr "OpenVPN sunucusu çalışmaktadır" + +#: plinth/modules/openvpn/templates/openvpn.html:124 +msgid "OpenVPN server is not running" +msgstr "OpenVPN sunucusu çalışmamaktadır" + +#: plinth/modules/openvpn/views.py:124 +msgid "Setup completed." +msgstr "Kurulum tamamlandı." + +#: plinth/modules/openvpn/views.py:126 +msgid "Setup failed." +msgstr "Kurulum başarısı oldu." + +#: plinth/modules/owncloud/owncloud.py:38 +msgid "Enable ownCloud" +msgstr "ownCloud'u Etkinleştir" + +#: plinth/modules/owncloud/owncloud.py:44 +#: plinth/modules/owncloud/templates/owncloud.html:26 +msgid "File Hosting (ownCloud)" +msgstr "Dosya Barındırma (ownCloud)" + +#: plinth/modules/owncloud/owncloud.py:51 +#: plinth/modules/owncloud/owncloud.py:80 +msgid "ownCloud" +msgstr "ownCloud" + +#: plinth/modules/owncloud/owncloud.py:97 +msgid "ownCloud enabled" +msgstr "ownCloud etkinleştirilmiştir" + +#: plinth/modules/owncloud/owncloud.py:100 +msgid "ownCloud disabled" +msgstr "ownCloud devre dışıdır" + +#: plinth/modules/owncloud/templates/owncloud.html:29 +msgid "" +"ownCloud gives you universal access to your files through a web interface or " +"WebDAV. It also provides a platform to easily view & sync your contacts, " +"calendars and bookmarks across all your devices and enables basic editing " +"right on the web. Installation has minimal server requirements, doesn't need " +"special permissions and is quick. ownCloud is extendable via a simple but " +"powerful API for applications and plugins." +msgstr "" +"ownCloud ağ (web) arayüzü ya da WebDAV aracılığıyla dosyalarınıza evrensel " +"erişim sağlar. Bununla beraber arkadaşlarınızı, takvimlerinizi ve yer " +"imlerinizi tüm cihazlarınızda görüntülemek & eşleştirmek için de bir " +"platform sunar ve sade düzenlemeleri doğrudan ağ üzerinde yapmanıza da imkân " +"verir. Kurulumun sunucu gereksinimleri asgaridir, özel izinler gerektirmez " +"ve hızlıdır. ownCloud uygulamalar ve eklentiler için sade ama güçlü bir API " +"ile genişletilebilir." + +#: plinth/modules/owncloud/templates/owncloud.html:41 +msgid "" +"When enabled, the ownCloud installation will be available from /owncloud path on the web server. Visit this URL to set up " +"the initial administration account for ownCloud." +msgstr "" +"Etkinleştirildiğinde ownCloud kurulumuna web sunucusunun /owncloud yoluyla erişim mümkün olacaktır. ownCloud için ilk yönetici " +"hesabını yapılandırmak için bu bağlantıyı ziyaret edin." + +#: plinth/modules/owncloud/templates/owncloud.html:59 +msgid "Apply changes" +msgstr "Değişiklikleri uygula" + +#: plinth/modules/pagekite/__init__.py:35 plinth/modules/pagekite/views.py:46 +msgid "Public Visibility (PageKite)" +msgstr "Herkese Açık Görünülürlük (PageKite)" + +#: plinth/modules/pagekite/forms.py:46 +msgid "Enable PageKite" +msgstr "PageKite'ı Etkinleştir" + +#: plinth/modules/pagekite/forms.py:49 +msgid "Server domain" +msgstr "Sunucu alanı" + +#: plinth/modules/pagekite/forms.py:51 +msgid "" +"Select your pagekite server. Set \"pagekite.net\" to use the default " +"pagekite.net server." +msgstr "" +"PageKite sunucunuzu seçin. Varsayılan pagekite.net sunucusunu kullanmak için " +"\"pagekite.net\" değerini kullanın." + +#: plinth/modules/pagekite/forms.py:55 +msgid "Server port" +msgstr "Sunucu portu" + +#: plinth/modules/pagekite/forms.py:56 +msgid "Port of your pagekite server (default: 80)" +msgstr "PageKite sunucunuzun portu (varsayılan: 80)" + +#: plinth/modules/pagekite/forms.py:58 +msgid "Kite name" +msgstr "Kite ismi" + +#: plinth/modules/pagekite/forms.py:59 +msgid "Example: mybox.pagekite.me" +msgstr "Örnek: mybox.pagekite.me" + +#: plinth/modules/pagekite/forms.py:62 +msgid "Invalid kite name" +msgstr "Geçersiz kite ismi" + +#: plinth/modules/pagekite/forms.py:65 +msgid "Kite secret" +msgstr "Kite sırrı" + +#: plinth/modules/pagekite/forms.py:67 +msgid "" +"A secret associated with the kite or the default secret for your account if " +"no secret is set on the kite." +msgstr "" +"Kite ile ilişkilendirilmiş bir sır ya da kite üzerinde hiçbir sır " +"ayarlanmamışsa hesabınız için varsayılan sır." + +#: plinth/modules/pagekite/forms.py:83 +msgid "Kite details set" +msgstr "Kite detayları ayarlandı" + +#: plinth/modules/pagekite/forms.py:90 +msgid "Pagekite server set" +msgstr "Pagekite sunucusu ayarlandı" + +#: plinth/modules/pagekite/forms.py:96 +msgid "PageKite enabled" +msgstr "PageKite etkinleştirildi" + +#: plinth/modules/pagekite/forms.py:99 +msgid "PageKite disabled" +msgstr "PageKite devre dışı" + +#: plinth/modules/pagekite/forms.py:135 +#, python-brace-format +msgid "Service enabled: {name}" +msgstr "Servis etkinleştirildi: {name}" + +#: plinth/modules/pagekite/forms.py:139 +#, python-brace-format +msgid "Service disabled: {name}" +msgstr "Servis devre dışı bırakıldı: {name}" + +#: plinth/modules/pagekite/forms.py:150 +msgid "protocol" +msgstr "protokol" + +#: plinth/modules/pagekite/forms.py:153 +msgid "external (frontend) port" +msgstr "harici (ön arayüz) port" + +#: plinth/modules/pagekite/forms.py:156 +msgid "internal (freedombox) port" +msgstr "dahili (freedombox) port" + +#: plinth/modules/pagekite/forms.py:158 +msgid "Enable Subdomains" +msgstr "Alt Alanları Etkinleştir" + +#: plinth/modules/pagekite/forms.py:191 +msgid "Deleted custom service" +msgstr "Özel servis silindi" + +#: plinth/modules/pagekite/forms.py:225 +msgid "" +"This service is available as a standard service. Please use the \"Standard " +"Services\" page to enable it." +msgstr "" +"Bu servis standart bir servis olarak mevcuttur. Etkinleştirmek için lütfen " +"\"Standart Servisler\" sayfasını kullanın." + +#: plinth/modules/pagekite/forms.py:234 +msgid "Added custom service" +msgstr "Özel servis eklendi" + +#: plinth/modules/pagekite/forms.py:237 +msgid "This service already exists" +msgstr "Bu servis zaten mevcuttur" + +#: plinth/modules/pagekite/templates/pagekite_configure.html:33 +msgid "PageKite Account" +msgstr "PageKite Hesabı" + +#: plinth/modules/pagekite/templates/pagekite_configure.html:41 +msgid "Save settings" +msgstr "Ayarları kaydet" + +#: plinth/modules/pagekite/templates/pagekite_custom_services.html:44 +msgid "" +"Warning:
Your PageKite frontend server may not support all the " +"protocol/port combinations that you are able to define here. For example, " +"HTTPS on ports other than 443 is known to cause problems." +msgstr "" +"İkaz:
PageKite ön arayüz sunucunuz burada ayarlayabileceğiniz tüm " +"protokol/bağlantı noktası (port) tertiplerini desteklemeyebilir. Mesela 443 " +"bağlantı noktasından değişik bağlantı noktalarında HTTPS protokolünün sorun " +"çıkardığı bilinir." + +#: plinth/modules/pagekite/templates/pagekite_custom_services.html:56 +msgid "Create a custom service" +msgstr "Özel servis oluştur" + +#: plinth/modules/pagekite/templates/pagekite_custom_services.html:64 +msgid "Add Service" +msgstr "Servis Ekle" + +#: plinth/modules/pagekite/templates/pagekite_custom_services.html:71 +msgid "Existing custom services" +msgstr "Mevcut özel servisler" + +#: plinth/modules/pagekite/templates/pagekite_custom_services.html:74 +msgid "You don't have any Custom Services enabled" +msgstr "Hiçbir etkin Özel Servisiniz yok" + +#: plinth/modules/pagekite/templates/pagekite_custom_services.html:89 +#, python-format +msgid "connected to %(backend_host)s:%(backend_port)s" +msgstr "%(backend_host)s:%(backend_port)s unsuruna bağlandı" + +#: plinth/modules/pagekite/templates/pagekite_custom_services.html:101 +msgid "Delete this service" +msgstr "Bu servisi sil" + +#: plinth/modules/pagekite/templates/pagekite_introduction.html:26 +#, python-format +msgid "" +"PageKite is a system for exposing %(box_name)s services when you don't have " +"a direct connection to the Internet. You only need this if your %(box_name)s " +"services are unreachable from the rest of the Internet. This includes the " +"following situations:" +msgstr "" +"PageKite %(box_name)s servislerine İnternet'e doğrudan bağlantınız " +"olmadığında erişmek için bir sistemdir. Buna sadece %(box_name)s " +"servislerine İnternet'ten erişmek mümkün değilse ihtiyaç duyarsınız. Bu, şu " +"durumları kapsar:" + +#: plinth/modules/pagekite/templates/pagekite_introduction.html:37 +#, python-format +msgid "%(box_name)s is behind a restricted firewall." +msgstr "%(box_name)s kısıtlı bir güvenlik duvarının arkasında olduğunda." + +#: plinth/modules/pagekite/templates/pagekite_introduction.html:43 +#, python-format +msgid "" +"%(box_name)s is connected to a (wireless) router which you don't control." +msgstr "" +"%(box_name)s kontrolünüzde olmayan bir (kablosuz) yönlendiriciye bağlı " +"olduğunda." + +#: plinth/modules/pagekite/templates/pagekite_introduction.html:50 +msgid "" +"Your ISP does not provide you an external IP address and instead provides " +"Internet connection through NAT." +msgstr "" +"İnternet Erişim Sağlayıcınız size harici bir IP adresi sunmadığında ve bunun " +"yerine İnternet bağlantısını NAT vasıtasıyla sağladığında." + +#: plinth/modules/pagekite/templates/pagekite_introduction.html:57 +msgid "" +"Your ISP does not provide you a static IP address and your IP address " +"changes evertime you connect to Internet." +msgstr "" +"İnternet Erişim Sağlayıcınız size statik bir IP adresi sağlamadığında ve IP " +"adresiniz İnternet'e her bağlandığınızda değiştiğinde." + +#: plinth/modules/pagekite/templates/pagekite_introduction.html:63 +msgid "Your ISP limits incoming connections." +msgstr "İnternet Erişim Sağlayıcınız içeri gelen bağlantıları kısıtladığında." + +#: plinth/modules/pagekite/templates/pagekite_introduction.html:67 +#, python-format +msgid "" +"PageKite works around NAT, firewalls and IP-address limitations by using a " +"combination of tunnels and reverse proxies. You can use any pagekite service " +"provider, for example pagekite.net. In " +"future it might be possible to use your buddy's %(box_name)s for this." +msgstr "" +"PageKite NAT, güvenlik duvarları ve IP adresi sınırlamalarına rağmen tünel " +"ve ters vekil sunucular birleşimini kullanarak işleyebilir. Herhangi bir " +"pagekite servis sağlayıcısını kullanabilirsiniz, örneğin pagekite.net. Gelecekte bunun için arkadaşlarınızın " +"%(box_name)s kutusunu kullanmanız mümkün olacaktır." + +#: plinth/modules/pagekite/templates/pagekite_introduction.html:78 +#: plinth/modules/pagekite/views.py:36 +msgid "Configure PageKite" +msgstr "PageKite'ı Yapılandır" + +#: plinth/modules/pagekite/templates/pagekite_standard_services.html:40 +msgid "Warning:
" +msgstr "İkaz:
" + +#: plinth/modules/pagekite/templates/pagekite_standard_services.html:43 +msgid "" +"Published services are accessible and attackable from the evil internet." +msgstr "Yayınlanan servislere İnternet'ten erişim ve saldırı mümkündür." + +#: plinth/modules/pagekite/templates/pagekite_standard_services.html:50 +msgid "Exposing SSH with the default password for 'fbx' is a VERY BAD idea." +msgstr "" +"'fbx' için varsayılan parola ile SSH'i açığa çıkarmak ÇOK KÖTÜ bir fikirdir." + +#: plinth/modules/pagekite/templates/pagekite_standard_services.html:65 +msgid "Save Services" +msgstr "Servisleri Kaydet" + +#: plinth/modules/pagekite/utils.py:53 +msgid "Web Server (HTTP)" +msgstr "Ağ Sunucusu (HTTP)" + +#: plinth/modules/pagekite/utils.py:54 +#, python-brace-format +msgid "Site will be available at http://{0}" +msgstr "" +"Siteye http://{0} adresinde erişilebilecektir" + +#: plinth/modules/pagekite/utils.py:63 +msgid "Web Server (HTTPS)" +msgstr "Ağ Sunucusu (HTTPS)" + +#: plinth/modules/pagekite/utils.py:64 +#, python-brace-format +msgid "Site will be available at https://{0}" +msgstr "" +"Siteye https://{0} adresinde erişilebilecektir" + +#: plinth/modules/pagekite/utils.py:73 +msgid "Secure Shell (SSH)" +msgstr "Güvenli Kabuk (SSH)" + +#: plinth/modules/pagekite/utils.py:74 +msgid "" +"See SSH client setup instructions" +msgstr "" +"SSH istemci kurulum talimatlarını okuyun" + +#: plinth/modules/pagekite/utils.py:276 +msgid "Pagekite" +msgstr "Pagekite" + +#: plinth/modules/pagekite/views.py:34 +msgid "About PageKite" +msgstr "PageKite Hakkında" + +#: plinth/modules/pagekite/views.py:38 +msgid "Standard Services" +msgstr "Standart Servisler" + +#: plinth/modules/pagekite/views.py:40 +msgid "Custom Services" +msgstr "Özel Servisler" + +#: plinth/modules/power/__init__.py:32 plinth/modules/power/views.py:33 +#: plinth/modules/power/views.py:47 plinth/modules/power/views.py:62 +msgid "Power" +msgstr "Enerji" + +#: plinth/modules/power/templates/power.html:29 +msgid "Restart or shut down the system." +msgstr "Sistemi tekrar başlat ya da kapat." + +#: plinth/modules/power/templates/power.html:34 +msgid "Restart »" +msgstr "Tekrar başlat »" + +#: plinth/modules/power/templates/power.html:37 +msgid "Shut Down »" +msgstr "Kapat »" + +#: plinth/modules/power/templates/power_restart.html:29 +msgid "" +"Are you sure you want to restart? You will not be able to access this web " +"interface for a few minutes until the system is restarted." +msgstr "" +"Yeniden başlatmak istediğinizden emin misiniz? Bu ağ arayüzüne sistem tekrar " +"başlatılına dek birkaç dakika boyunca erişemeyeceksiniz." + +#: plinth/modules/power/templates/power_restart.html:42 +msgid "Restart Now" +msgstr "Şimdi Tekrar Başlat" + +#: plinth/modules/power/templates/power_shutdown.html:29 +msgid "" +"Are you sure you want to shut down? You will not be able to access this web " +"interface after shut down." +msgstr "" +"Sistemi kapatmak istediğinizden emin misiniz? Kapatmanın ardından bu ağ " +"arayüzüne erişemeyeceksiniz." + +#: plinth/modules/power/templates/power_shutdown.html:41 +msgid "Shut Down Now" +msgstr "Şimdi Kapat" + +#: plinth/modules/privoxy/__init__.py:39 +#: plinth/modules/privoxy/templates/privoxy.html:26 +#: plinth/modules/privoxy/views.py:59 +msgid "Web Proxy (Privoxy)" +msgstr "Ağ Vekil Sunucusu (Privoxy)" + +#: plinth/modules/privoxy/__init__.py:44 +msgid "Privoxy Web Proxy" +msgstr "Privoxy Ağ Vekil Sunucusu" + +#: plinth/modules/privoxy/__init__.py:86 +#, python-brace-format +msgid "Access {url} with proxy {proxy} on tcp{kind}" +msgstr "{url} konumuna {proxy} vekili vasıtasıyla tcp{kind} üzerinden eriş" + +#: plinth/modules/privoxy/forms.py:29 +msgid "Enable Privoxy" +msgstr "Privoxy'yi Etkinleştir" + +#: plinth/modules/privoxy/templates/privoxy.html:29 +msgid "" +"Privoxy is a non-caching web proxy with advanced filtering capabilities for " +"enhancing privacy, modifying web page data and HTTP headers, controlling " +"access, and removing ads and other obnoxious Internet junk." +msgstr "" +"Privoxy, reklamları ve diğer istenmeyen İnternet içeriğini kaldıran, ağ " +"sayfası verilerini ve HTTP başlıklarını değiştiren, gizliliği arttırmak için " +"gelişmiş filtreleme özellikleri bulunan ve önbelleğe veri almayan bir ağ " +"vekil sunucusudur." + +#: plinth/modules/privoxy/templates/privoxy.html:38 +#, python-format +msgid "" +"You can use Privoxy by modifying your browser proxy settings to your " +"%(box_name)s hostname (or IP address) with port 8118. While using Privoxy, " +"you can see its configuration details and documentation at http://config.privoxy.org/ or http://p.p." +msgstr "" +"Privoxy'yi tarayıcınızın vekil sunucu ayarlarını %(box_name)s kutunuzun " +"makine ismine (ya da IP adresine) 8118 numaralı port ile ayarlayarak " +"kullanabilirsiniz. Privoxy'yi kullanırken belgelendirmesini ve yapılandırma " +"ayrıntılarını http://config.privoxy." +"org/ veya http://p.p adresinde " +"görebilirsiniz." + +#: plinth/modules/privoxy/templates/privoxy.html:53 +msgid "Privoxy is running" +msgstr "Privoxy çalışmaktadır" + +#: plinth/modules/privoxy/templates/privoxy.html:56 +msgid "Privoxy is not running" +msgstr "Privoxy çalışmamaktadır" + +#: plinth/modules/quassel/__init__.py:36 +#: plinth/modules/quassel/templates/quassel.html:26 +#: plinth/modules/quassel/views.py:54 +msgid "IRC Client (Quassel)" +msgstr "IRC İstemcisi (Quassel)" + +#: plinth/modules/quassel/__init__.py:41 +msgid "Quassel IRC Client" +msgstr "Quassel IRC İstemcisi" + +#: plinth/modules/quassel/forms.py:29 +msgid "Enable Quassel core service" +msgstr "Quassel çekirdek servisini etkinleştir" + +#: plinth/modules/quassel/templates/quassel.html:29 +#, python-format +msgid "" +"Quassel is an IRC application that is split into two parts, a \"core\" and a " +"\"client\". This allows the core to remain connected to IRC servers, and to " +"continue receiving messages, even when the client is disconnected. " +"%(box_name)s can run the Quassel core service keeping you always online and " +"one or more Quassel clients from a desktop or a mobile can be used to " +"connect and disconnect from it." +msgstr "" +"Quassel, \"çekirdek\" ve \"istemci\" olarak ikiye ayrılmış bir IRC " +"uygulamasıdır. Bu, istemcinin çevrimdışı olduğu zamanda bile çekirdeğin IRC " +"sunucularına bağlı kalmasına ve mesajları almaya devam etmesine imkân verir. " +"%(box_name)s Quassel çekirdek servisini daima çevrimiçinde tutabilir ve bir " +"ya da daha fazla Quassel istemcileri masaüstünden ya da mobil telefondan ona " +"bağlanmak ve ondan bağlantıyı kesmek için kullanılabilir." + +#: plinth/modules/quassel/templates/quassel.html:41 +msgid "" +"You can connect to your Quassel core on the default Quassel port 4242. " +"Clients to connect to Quassel from your desktop and mobile devices are available." +msgstr "" +"Quassel çekirdeğine varsayılan Quassel portu olan 4242 numaralı porttan " +"bağlanabilirsiniz. Quassel'e bağlanacak masaüstü ve mobil cihaz istemcileri mevcuttur." + +#: plinth/modules/quassel/templates/quassel.html:55 +msgid "Quassel core service is running" +msgstr "Quassel çekirdek servisi çalışmaktadır" + +#: plinth/modules/quassel/templates/quassel.html:58 +msgid "Quassel core service is not running" +msgstr "Quassel çekirdek servisi çalışmamaktadır" + +#: plinth/modules/repro/__init__.py:36 +#: plinth/modules/repro/templates/repro.html:26 +#: plinth/modules/repro/views.py:55 +#| msgid "Server port" +msgid "SIP Server (repro)" +msgstr "SIP Sunucusu (repro)" + +#: plinth/modules/repro/__init__.py:41 +#| msgid "Second DNS Server" +msgid "repro SIP Server" +msgstr "repro SIP Sunucusu" + +#: plinth/modules/repro/forms.py:29 +#| msgid "Enable Quassel core service" +msgid "Enable repro service" +msgstr "repro servisini etkinleştir" + +#: plinth/modules/repro/templates/repro.html:29 +msgid "" +"repro provides various SIP services that a SIP softphone can utilize to " +"provide audio and video calls as well as presence and instant messaging. " +"repro provides a server and SIP user accounts that clients can use to let " +"their presence known. It also acts as a proxy to federate SIP " +"communications to other servers on the Internet similar to email." +msgstr "" +"repro, bir SIP telefonunun hem varlık ve anlık mesajlaşma, hem de ses ya da " +"video aramalar için kullanabileceği çeşitli SIP hizmetleri sunar. repro, " +"istemcilerin varlıklarını bildirebilecekleri bir sunucu ve SIP kullanıcı " +"hesapları sağlar. Aynı zamanda e-postaya benzer bir şekilde diğer sunucular " +"ile SIP bağlantılarını federe edecek bir vekil sunucu görevi de yapar." + +#: plinth/modules/repro/templates/repro.html:39 +msgid "" +"To make SIP calls, a client application is needed. Available clients include " +"Jitsi (for computers) and CSipSimple (for Android phones)." +msgstr "" +"SIP aramalarında bulunabilmek için istemci bir programa ihtiyaç vardır. " +"Mevcut istemciler Jitsi (bilgisayarlar " +"için) ve CSipSimple'ı (Android telefonlar için) içerir." + +#: plinth/modules/repro/templates/repro.html:48 +msgid "" +"Note: Before using repro, domains and users will need to " +"be configured using the web-based " +"configuration panel. Users in the admin group will be able to " +"log in to the repro configuration panel. After setting the domain, it is " +"required to restart the repro service. Disable the service and re-enable it." +msgstr "" +"Not: repro'yu kullanmadan önce alanlar ve kullanıcılar ağ tabanlı yapılandırma paneli ile " +"yapılandırılmalıdır. admin (yani yönetici) grubundaki kullanıcılar " +"repro yapılandırma paneline giriş yapabileceklerdir. Alan ayarlandıktan " +"sonra repro servisini tekrar başlatmak gerekir. Servisi devre dışı bırakıp " +"tekrar etkinleştirin." + +#: plinth/modules/repro/templates/repro.html:63 +#| msgid "Quassel core service is running" +msgid "repro service is running" +msgstr "repro servisi çalışmaktadır" + +#: plinth/modules/repro/templates/repro.html:66 +#| msgid "Quassel core service is not running" +msgid "repro service is not running" +msgstr "repro servisi çalışmamaktadır" + +#: plinth/modules/restore/__init__.py:36 +#: plinth/modules/restore/templates/restore_index.html:26 +#: plinth/modules/restore/views.py:46 +msgid "Unhosted Storage (reStore)" +msgstr "Barındırılmayan Depolama (reStore)" + +#: plinth/modules/restore/__init__.py:41 +msgid "reStore" +msgstr "reStore" + +#: plinth/modules/restore/forms.py:29 +msgid "Enable reStore" +msgstr "reStore'u Etkinleştir" + +#: plinth/modules/restore/templates/restore_index.html:29 +#, python-format +#| msgid "" +#| "reStore is a server for unhosted web " +#| "applications. The idea is to uncouple web applications from data. No " +#| "matter where a web application is served from, the data can be stored on " +#| "an unhosted storage server of user's choice. With reStore, your " +#| "%(cfg.box_name)s becomes your unhosted storage server." +msgid "" +"reStore is a server for unhosted web " +"applications. The idea is to uncouple web applications from data. No " +"matter where a web application is served from, the data can be stored on an " +"unhosted storage server of user's choice. With reStore, your %(box_name)s " +"becomes your unhosted storage server." +msgstr "" +"reStore, barındırılmayan (unhosted) ağ " +"uygulamaları için bir sunucudur. Öne çıkan fikir, ağ uygulamalarının " +"verilerden ayrılmasıdır. Ağ uygulamalarının nereden sunulduğuna bakmaksızın " +"veriler kullanıcının seçtiği herhangi bir barındırılmayan depolama " +"sunucusunda depolanabilir. reStore ile %(box_name)s kutunuz barındırılmayan " +"depolama sunucunuz haline gelir." + +#: plinth/modules/restore/templates/restore_index.html:40 +msgid "" +"You can create and edit accounts in the reStore web-" +"interface." +msgstr "" +"reStore ağ arayüzünde hesap oluşturabilir ve " +"düzenleyebilirsiniz." + +#: plinth/modules/roundcube/__init__.py:36 +#: plinth/modules/roundcube/templates/roundcube.html:26 +#: plinth/modules/roundcube/views.py:64 +msgid "Email Client (Roundcube)" +msgstr "E-posta İstemcisi (Roundcube)" + +#: plinth/modules/roundcube/forms.py:29 +msgid "Enable Roundcube" +msgstr "Roundcube'u Etkinleştir" + +#: plinth/modules/roundcube/templates/roundcube.html:29 +msgid "" +"Roundcube webmail is a browser-based multilingual IMAP client with an " +"application-like user interface. It provides full functionality you expect " +"from an email client, including MIME support, address book, folder " +"manipulation, message searching and spell checking." +msgstr "" +"Roundcube ağ e-postası, tarayıcı tabanlı, çoklu dil desteği olan ve uygulama " +"benzeri kullanıcı arayüzü bulunan bir IMAP istemcisidir. E-posta " +"istemcilerinden beklediğiniz tüm işlevleri sağlar ve buna MIME desteği, " +"adres defteri, klasör düzenleme, mesaj arama ve imlâ kontrolü de dahildir." + +#: plinth/modules/roundcube/templates/roundcube.html:39 +msgid "" +"You can access Roundcube from /roundcube. Provide " +"the username and password of the email account you wish to access followed " +"by the domain name of the IMAP server for your email provider, like " +"imap.example.com. For IMAP over SSL (recommended), fill the " +"server field like imaps://imap.example.com." +msgstr "" +"Roundcube'a /roundcube adresinden " +"erişebilirsiniz. Erişmek istediğiniz hesabın kullanıcı ismiyle parolasını ve " +"ardından e-posta sağlayıcınızın IMAP sunucusunun alan adını, mesela " +"imap.example.com gibi, belirtin. SSL üzerinden IMAP için (ki " +"tavsiye edilir), sunucu alanını imaps://imap.example.com gibi " +"doldurun." + +#: plinth/modules/roundcube/templates/roundcube.html:50 +msgid "" +"For Gmail, username will be your Gmail address, password will be your Google " +"account password and server will be imaps://imap.gmail.com. " +"Note that you will also need to enable \"Less secure apps\" in your Google " +"account settings (https://www.google.com/settings/security/lesssecureapps)." +msgstr "" +"GMail için kullanıcı ismi GMail adresiniz, parolanız Google hesap parolanız " +"ve sunucu ise imaps://imap.gmail.com olacaktır. Google hesap " +"seçeneklerinde (https://www.google.com/settings/security/lesssecureapps) \"daha az güvenli uygulamalara\" müsaade etmeniz gerekeceğini unutmayın." + +#: plinth/modules/shaarli/__init__.py:37 +#: plinth/modules/shaarli/templates/shaarli.html:26 +#: plinth/modules/shaarli/views.py:52 +msgid "Bookmarks (Shaarli)" +msgstr "Yer İmleri (Shaarli)" + +#: plinth/modules/shaarli/__init__.py:42 +msgid "Shaarli" +msgstr "Shaarli" + +#: plinth/modules/shaarli/forms.py:29 +msgid "Enable Shaarli" +msgstr "Shaarli'yi Etkinleştir" + +#: plinth/modules/shaarli/templates/shaarli.html:28 +msgid "Shaarli allows you to save and share bookmarks." +msgstr "Shaarli, yer imlerinizi kaydetmenize ve paylaşmanıza imkân verir." + +#: plinth/modules/shaarli/templates/shaarli.html:31 +msgid "" +"When enabled, Shaarli will be available from /shaarli path on the web server. Note that Shaarli only supports a single user " +"account, which you will need to setup on the initial visit." +msgstr "" +"Etkinleştirildiğinde, Shaarli'ye ağ sunucusunda /" +"shaarli yolunda erişilebilecektir. Shaarli'nin ilk ziyaretinizde " +"ayarlamanız gerekecek olan sadece tek bir kullanıcı hesabını desteklediğini " +"unutmayın." + +#: plinth/modules/system/system.py:26 +msgid "System" +msgstr "Sistem" + +#: plinth/modules/system/system.py:33 +#: plinth/modules/system/templates/system.html:25 +#: plinth/templates/base.html:109 +msgid "System Configuration" +msgstr "Sistem Yapılandırması" + +#: plinth/modules/system/templates/system.html:28 +#, python-format +msgid "Here you can administrate the underlying system of your %(box_name)s." +msgstr "Burada %(box_name)s kutunuzun temel sistemini yönetebilirsiniz." + +#: plinth/modules/system/templates/system.html:35 +#, python-format +msgid "" +"The options affect the %(box_name)s at its most general level, so be careful!" +msgstr "" +"Seçenekler %(box_name)s kutusunu en genel düzeyde etkiler, bu nedenle " +"dikkatli olun!" + +#: plinth/modules/tor/__init__.py:48 plinth/modules/tor/templates/tor.html:35 +msgid "Anonymity Network (Tor)" +msgstr "Anonimlik Ağı (Tor)" + +#: plinth/modules/tor/__init__.py:53 +#| msgid "Anonymity Network (Tor)" +msgid "Tor Anonymity Network" +msgstr "Tor Anonimlik Ağı" + +#: plinth/modules/tor/__init__.py:58 +msgid "Tor Bridge Relay" +msgstr "Tor Köprü Aktarması" + +#: plinth/modules/tor/__init__.py:76 plinth/modules/tor/views.py:144 +msgid "Tor Hidden Service" +msgstr "Tor Gizli Servisi" + +#: plinth/modules/tor/__init__.py:222 +msgid "Tor relay port available" +msgstr "Tor geçit portu mevcuttur" + +#: plinth/modules/tor/__init__.py:230 +msgid "Obfs3 transport registered" +msgstr "Obfs3 taşıma kayıtlıdır" + +#: plinth/modules/tor/__init__.py:236 +msgid "Obfs4 transport registered" +msgstr "Obfs4 taşıma kayıtlıdır" + +#: plinth/modules/tor/__init__.py:273 +#, python-brace-format +msgid "Access URL {url} on tcp{kind} via Tor" +msgstr "{url} bağlantısına tcp{kind} üzerinden Tor vasıtasıyla eriş" + +#: plinth/modules/tor/__init__.py:284 +#, python-brace-format +msgid "Confirm Tor usage at {url} on tcp{kind}" +msgstr "tcp{kind} üzerinden {url} konumunda Tor kullanımını teyit et" + +#: plinth/modules/tor/forms.py:32 +msgid "Enable Tor" +msgstr "Tor'u Etkinleştir" + +#: plinth/modules/tor/forms.py:35 +msgid "Enable Tor Hidden Service" +msgstr "Tor Gizli Servisi Etkinleştir" + +#: plinth/modules/tor/forms.py:38 +#, python-brace-format +#| msgid "" +#| "A hidden service will allow FreedomBox to provide selected services (such " +#| "as ownCloud or Chat) without revealing its location." +msgid "" +"A hidden service will allow {box_name} to provide selected services (such as " +"ownCloud or chat) without revealing its location." +msgstr "" +"Gizli servisler {box_name} kutusunun (ownCloud ya da sohbet gibi) seçili " +"servisleri konumunu ortaya çıkarmadan sağlamasına imkân verir." + +#: plinth/modules/tor/forms.py:42 +msgid "Download software packages over Tor" +msgstr "Yazılım paketlerini Tor üzerinden indir" + +#: plinth/modules/tor/forms.py:44 +msgid "" +"When enabled, software will be downloaded over the Tor network for " +"installations and upgrades. This adds a degree of privacy and security " +"during software downloads." +msgstr "" +"Etkinleştirildiğinde, kurulum ve güncellemeler için yazılımlar Tor ağı " +"üzerinden indirilecektir. Bu, yazılım indirmeleri sırasında bir derece " +"güvenlilik ve gizlilik ekler." + +#: plinth/modules/tor/templates/tor.html:38 +msgid "" +"Tor is an anonymous communication system. You can learn more about it from " +"the Tor Project website. For " +"best protection when web surfing, the Tor Project recommends that you use " +"the " +"Tor Browser." +msgstr "" +"Tor, anonim bir şekilde iletişim kurma sistemidir. Hakkında daha fazla " +"bilgiyi Tor Projesi sitesinden " +"edinebilirsiniz. İnternet'te gezinirken en iyi korunma için Tor Projesi Tor " +"Tarayıcısını kullanmanızı tavsiye eder." + +#: plinth/modules/tor/templates/tor.html:54 +#| msgid "Configuration updated" +msgid "Tor configuration is being updated" +msgstr "Tor yapılandırması güncellenmektedir" + +#: plinth/modules/tor/templates/tor.html:62 +msgid "Tor is running" +msgstr "Tor çalışmaktadır" + +#: plinth/modules/tor/templates/tor.html:65 +msgid "Tor is not running" +msgstr "Tor çalışmamaktadır" + +#: plinth/modules/tor/templates/tor.html:77 +msgid "Hidden Service" +msgstr "Gizli Servis" + +#: plinth/modules/tor/templates/tor.html:78 +#: plinth/modules/tor/templates/tor.html:120 +msgid "Port" +msgstr "Port" + +#: plinth/modules/tor/templates/tor.html:103 +msgid "Bridge" +msgstr "Köprü" + +#: plinth/modules/tor/templates/tor.html:106 +#, python-format +msgid "" +"Your %(box_name)s is configured as a Tor bridge with obfsproxy, so it can " +"help circumvent censorship. If your %(box_name)s is behind a router or " +"firewall, you should make sure the following ports are open, and port-" +"forwarded, if necessary:" +msgstr "" +"%(box_name)s sansürü engellemeye yardımcı olmak için obfsproxy ile Tor " +"köprüsü olarak yapılandırılmıştır. Eğer %(box_name)s bir yönlendirici ya da " +"güvenlik duvarı arkasındaysa ve gerekiyorsa aşağıdaki bağlantı noktalarının " +"(port) açık ve yönlendirilmiş olduğundan emin olun:" + +#: plinth/modules/tor/templates/tor.html:119 +msgid "Service" +msgstr "Servis" + +#: plinth/modules/tor/templates/tor.html:135 +msgid "SOCKS" +msgstr "SOCKS" + +#: plinth/modules/tor/templates/tor.html:138 +#, python-format +msgid "A Tor SOCKS port is available on your %(box_name)s on TCP port 9050." +msgstr "" +"Bir Tor SOCKS bağlantı noktası %(box_name)s kutunuzda TCP 9050 numaralı " +"portta mevcuttur." + +#: plinth/modules/tor/views.py:68 +msgid "Tor Control Panel" +msgstr "Tor Kontrol Panosu" + +#: plinth/modules/tor/views.py:79 +#, python-brace-format +msgid "Action error: {0} [{1}] [{2}]" +msgstr "Eylem hatası: {0} [{1}] [{2}]" + +#: plinth/modules/tor/views.py:148 +#| msgid "Configuration updated" +msgid "Configuration updated." +msgstr "Kurulum güncellendi." + +#: plinth/modules/tor/views.py:150 +msgid "An error occurred during configuration." +msgstr "Yapılandırma sırasında bir hata meydana geldi." + +#: plinth/modules/transmission/__init__.py:38 +#: plinth/modules/transmission/templates/transmission.html:26 +#: plinth/modules/transmission/views.py:67 +msgid "BitTorrent (Transmission)" +msgstr "BitTorrent (Transmission)" + +#: plinth/modules/transmission/__init__.py:43 +msgid "Transmission BitTorrent" +msgstr "Transmission BitTorrent" + +#: plinth/modules/transmission/forms.py:29 +msgid "Enable Transmission daemon" +msgstr "Transmission servisini etkinleştir" + +#: plinth/modules/transmission/forms.py:33 +msgid "Download directory" +msgstr "İndirme klasörü" + +#: plinth/modules/transmission/forms.py:34 +msgid "" +"Directory where downloads are saved. If you change the default directory, " +"ensure that the new directory exists and is writable by \"debian-transmission" +"\" user." +msgstr "" +"İndirmelerin kaydedilecekleri klasör. Varsayılan klasörü değiştirirseniz, " +"yeni klasörün var olduğundan ve \"debian-transmission\" kullanıcısı " +"tarafından yazılabilir olduğundan emin olun." + +#: plinth/modules/transmission/forms.py:40 +msgid "Username to login to the web interface." +msgstr "Ağ arayüzüne giriş yapmak için kullanıcı ismi." + +#: plinth/modules/transmission/forms.py:44 +msgid "" +"Password to login to the web interface. Current password is shown in a " +"hashed format. To set a new password, enter the password in plain text." +msgstr "" +"Ağ arayüzüne giriş yapmak için parola. Güncel parola karma biçiminde " +"gösterilmektedir. Yeni bir parola ayarlamak için parolayı düz metin olarak " +"girin." + +#: plinth/modules/transmission/templates/transmission.html:29 +msgid "" +"BitTorrent is a peer-to-peer file sharing protocol. Transmission daemon " +"handles Bitorrent file sharing. Note that BitTorrent is not anonymous." +msgstr "" +"BitTorrent bir eşten eşe dosya paylaşma protokolüdür. Transmission servisi " +"BitTorrent dosya paylaşımını idare eder. BitTorrent'ın anonim olmadığını " +"unutmayın." + +#: plinth/modules/transmission/templates/transmission.html:37 +msgid "" +"Access the web interface at /transmission." +msgstr "" +"Ağ arayüzüne /transmission konumunda " +"erişebilirsiniz." + +#: plinth/modules/transmission/templates/transmission.html:47 +msgid "Transmission daemon is running" +msgstr "Transmission servisi çalışmaktadır" + +#: plinth/modules/transmission/templates/transmission.html:50 +msgid "Transmission daemon is not running." +msgstr "Transmission servisi çalışmamaktadır." + +#: plinth/modules/upgrades/__init__.py:33 +msgid "Software Upgrades" +msgstr "Yazılım Güncellemeleri" + +#: plinth/modules/upgrades/forms.py:29 +msgid "Enable automatic upgrades" +msgstr "Otomatik güncellemeleri etkinleştir" + +#: plinth/modules/upgrades/forms.py:30 +msgid "" +"When enabled, the unattended-upgrades program will be run once per day. It " +"will attempt to perform any package upgrades that are available." +msgstr "" +"Etkinleştirildiğinde unattended-upgrades programı günde bir kez " +"çalıştırılacaktır. Mevcut paket yükseltmelerini uygulamayı deneyecektir." + +#: plinth/modules/upgrades/templates/upgrades.html:37 +msgid "" +"Upgrades install the latest software and security updates. When automatic " +"upgrades are enabled, upgrades are automatically run every night. You don't " +"normally need to start the upgrade process." +msgstr "" +"Yükseltmeler en son yazılım ve güvenlik güncellemelerini kurar. Otomatik " +"yükseltmeler etkinleştirildiğinde yükseltmeler her gece otomatik olarak " +"çalıştırılacaktır. Normal olarak yükseltme sürecini başlatmanıza gerek " +"yoktur." + +#: plinth/modules/upgrades/templates/upgrades.html:45 +msgid "" +"Depending on the number of packages to install, this may take a long time to " +"complete. While upgrades are in progress, you will not be able to install " +"other packages. During the upgrade, this web interface may be temporarily " +"unavailable and show an error. Refresh the page to continue." +msgstr "" +"Kurulacak paket sayısına göre bunun tamamlanması uzun bir süre alabilir. " +"Yükseltmeler sürmekteyken başka paket kurmanız mümkün olmayacaktır. " +"Yükseltme sırasında bu ağ arayüzüne geçici olarak erişim mümkün olmayabilir " +"ve bir hata gösterebilir. Devam etmek için sayfayı tazeleyin." + +#: plinth/modules/upgrades/templates/upgrades.html:58 +msgid "Upgrade now »" +msgstr "Şimdi yükselt »" + +#: plinth/modules/upgrades/templates/upgrades.html:65 +#| msgid "ejabberd is running" +msgid "A package manager is running." +msgstr "Bir paket yöneticisi çalışmaktadır." + +#: plinth/modules/upgrades/templates/upgrades.html:70 +msgid "Recent log from upgrades:" +msgstr "Yükseltmelerin yakın geçmişteki kütüğü:" + +#: plinth/modules/upgrades/views.py:36 plinth/modules/upgrades/views.py:66 +msgid "Automatic Upgrades" +msgstr "Otomatik Yükseltmeler" + +#: plinth/modules/upgrades/views.py:38 +msgid "Upgrade Packages" +msgstr "Paketleri Yükselt" + +#: plinth/modules/upgrades/views.py:96 +#| msgid "Upgrade completed." +msgid "Upgrade process started." +msgstr "Yükseltme süreci başlamıştır." + +#: plinth/modules/upgrades/views.py:99 +#| msgid "Upgrade failed." +msgid "Starting upgrade failed." +msgstr "Yükseltmenin başlatılması başarısız oldu." + +#: plinth/modules/upgrades/views.py:102 +msgid "Package Upgrades" +msgstr "Paket Yükseltmeler" + +#: plinth/modules/upgrades/views.py:131 +#, python-brace-format +msgid "Error when configuring unattended-upgrades: {error}" +msgstr "unattended-upgrades yapılandırılırken bir hata oluştu: {error}" + +#: plinth/modules/upgrades/views.py:136 +msgid "Automatic upgrades enabled" +msgstr "Otomatik yükseltmeler etkinleştirildi" + +#: plinth/modules/upgrades/views.py:138 +msgid "Automatic upgrades disabled" +msgstr "Otomatik yükseltmeler devre dışı bırakıldı" + +#: plinth/modules/users/__init__.py:36 +msgid "Users and Groups" +msgstr "Kullanıcılar ve Gruplar" + +#: plinth/modules/users/__init__.py:65 +#, python-brace-format +msgid "Check LDAP entry \"{search_item}\"" +msgstr "\"{search_item}\" LDAP unsurunu kontrol et" + +#: plinth/modules/users/forms.py:28 +msgid "admin" +msgstr "admin (yönetici)" + +#: plinth/modules/users/forms.py:29 +msgid "wiki" +msgstr "wiki" + +#: plinth/modules/users/forms.py:41 +msgid "Groups" +msgstr "Gruplar" + +#: plinth/modules/users/forms.py:45 +msgid "" +"Select which services should be available to the new user. The user will be " +"able to log in to services that support single sign-on through LDAP, if they " +"are in the appropriate group.

Users in the admin group will be " +"able to log in to all services. They can also log in to the system through " +"SSH and have administrative privileges (sudo)." +msgstr "" +"Yeni kullanıcıya hangi servislerin mevcut olacağını seçin. Kullanıcı, uygun " +"grupta iseler, LDAP vasıtasıyla tek oturum açma desteği bulunan servislere " +"giriş yapabilecektir.

admin grubundaki kullanıcılar tüm " +"servislere giriş yapabilecektir. Aynı zamanda sisteme SSH aracılığıyla giriş " +"yapıp yönetici izinlerine (sudo) erişebileceklerdir." + +#: plinth/modules/users/forms.py:80 +#, python-brace-format +msgid "Failed to add new user to {group} group." +msgstr "{group} grubuna yeni kullanıcı ilâve edilmesi başarısız oldu." + +#: plinth/modules/users/forms.py:92 +msgid "SSH Keys" +msgstr "SSH Anahtarları" + +#: plinth/modules/users/forms.py:96 +msgid "" +"Setting an SSH public key will allow this user to securely log in to the " +"system without using a password. You may enter multiple keys, one on each " +"line. Blank lines and lines starting with # will be ignored." +msgstr "" +"Herkese açık bir SSH anahtarı ayarlamak, bu kullanıcının sisteme parola " +"kullanmadan güvenli bir şekilde giriş yapmasına müsaade edecektir. Birden " +"çok anahtar girebilirsiniz, her anahtarı yeni bir satırda girin. Boş " +"satırlar ve # ile başlayan satırlar görmezden gelinecektir." + +#: plinth/modules/users/forms.py:136 +msgid "Renaming LDAP user failed." +msgstr "LDAP kullanıcısının tekrar adlandırılması başarısız oldu." + +#: plinth/modules/users/forms.py:148 +msgid "Failed to remove user from group." +msgstr "Kullanıcının gruptan kaldırılması başarısız oldu." + +#: plinth/modules/users/forms.py:159 +msgid "Failed to add user to group." +msgstr "Kullanıcının gruba eklenmesi başarısız oldu." + +#: plinth/modules/users/forms.py:188 +msgid "Changing LDAP user password failed." +msgstr "LDAP kullanıcı parolasının değiştirilmesi başarısız oldu." + +#: plinth/modules/users/templates/users_change_password.html:27 +#, python-format +msgid "Change Password for %(username)s" +msgstr "%(username)s için Parola Değiştir" + +#: plinth/modules/users/templates/users_change_password.html:40 +msgid "Save Password" +msgstr "Parolayı Kaydet" + +#: plinth/modules/users/templates/users_create.html:42 +#: plinth/modules/users/views.py:36 plinth/modules/users/views.py:56 +msgid "Create User" +msgstr "Kullanıcı Oluştur" + +#: plinth/modules/users/templates/users_delete.html:26 +#: plinth/modules/users/views.py:110 +msgid "Delete User" +msgstr "Kullanıcıyı Sil" + +#: plinth/modules/users/templates/users_delete.html:29 +#, python-format +msgid "Delete user %(username)s permanently?" +msgstr "%(username)s kullanıcısı daimi olarak silinsin mi?" + +#: plinth/modules/users/templates/users_delete.html:38 +#, python-format +msgid "Delete %(username)s" +msgstr "%(username)s kullanıcısını sil" + +#: plinth/modules/users/templates/users_list.html:46 +#, python-format +msgid "Delete user %(username)s" +msgstr "%(username)s kullanıcısını sil" + +#: plinth/modules/users/templates/users_list.html:53 +#, python-format +msgid "Edit user %(username)s" +msgstr "%(username)s kullanıcısını düzenle" + +#: plinth/modules/users/templates/users_update.html:39 +#, python-format +msgid "" +"Use the change password form to " +"change the password." +msgstr "" +"Parolayı değiştirmek için parola " +"değiştirme formunu kullanın." + +#: plinth/modules/users/templates/users_update.html:53 +msgid "Save Changes" +msgstr "Değişiklikleri Kaydet" + +#: plinth/modules/users/views.py:34 plinth/modules/users/views.py:69 +msgid "Users" +msgstr "Kullanıcılar" + +#: plinth/modules/users/views.py:54 +#, python-format +msgid "User %(username)s created." +msgstr "%(username)s kullanıcısı oluşturuldu." + +#: plinth/modules/users/views.py:78 +#, python-format +msgid "User %(username)s updated." +msgstr "%(username)s kullanıcısı güncellendi." + +#: plinth/modules/users/views.py:79 +msgid "Edit User" +msgstr "Kullanıcıyı Düzenle" + +#: plinth/modules/users/views.py:120 +#, python-brace-format +msgid "User {user} deleted." +msgstr "{user} kullanıcısı silindi." + +#: plinth/modules/users/views.py:127 +msgid "Deleting LDAP user failed." +msgstr "LDAP kullanıcısının silinmesi başarısız oldu." + +#: plinth/modules/users/views.py:136 +msgid "Change Password" +msgstr "Parolayı Değiştir" + +#: plinth/modules/users/views.py:137 +msgid "Password changed successfully." +msgstr "Parola başarılı bir şekilde değiştirildi." + +#: plinth/modules/xmpp/__init__.py:41 plinth/modules/xmpp/__init__.py:46 +#: plinth/modules/xmpp/templates/xmpp.html:26 plinth/modules/xmpp/views.py:75 +msgid "Chat Server (XMPP)" +msgstr "Sohbet Sunucusu (XMPP)" + +#: plinth/modules/xmpp/forms.py:29 +msgid "Enable XMPP" +msgstr "XMPP'yi Etkinleştir" + +#: plinth/modules/xmpp/templates/xmpp.html:29 +msgid "" +"XMPP is an open and standardized communication protocol. Here you can run " +"and configure your XMPP server, called ejabberd." +msgstr "" +"XMPP açık ve standardize edilmiş bir iletişim protokolüdür. Burada ejabberd " +"isimli XMPP sunucusunu yapılandırıp çalıştırabilirsiniz." + +#: plinth/modules/xmpp/templates/xmpp.html:36 +msgid "" +"To actually communicate, you can use the web client or " +"any other XMPP client." +msgstr "" +"İletişim kurmak için ağ istemcisini ya da herhangi bir " +"diğer XMPP " +"istemcisini kullanabilirsiniz." + +#: plinth/modules/xmpp/templates/xmpp.html:45 +#, python-format +msgid "" +"Your XMPP server domain is set to %(domainname)s. User IDs will look " +"like username@%(domainname)s. You can setup your domain on the system " +"Configure page." +msgstr "" +"XMPP sunucu alanınız %(domainname)s olarak ayarlanmıştır. Kullanıcı " +"kimlikleri username@%(domainname)s şeklinde olacaktır. Alanınızı " +"sistem Yapılandırma sayfasında " +"ayarlayabilirsiniz." + +#: plinth/modules/xmpp/templates/xmpp.html:55 +msgid "Launch web client" +msgstr "Ağ istemcisini başlat" + +#: plinth/modules/xmpp/templates/xmpp.html:63 +msgid "ejabberd is running" +msgstr "ejabberd çalışmaktadır" + +#: plinth/modules/xmpp/templates/xmpp.html:66 +msgid "ejabberd is not running" +msgstr "ejabberd çalışmamaktadır" + +#: plinth/network.py:39 +msgid "PPPoE" +msgstr "PPPoE" + +#: plinth/package.py:156 +msgid "packages not found" +msgstr "paketler bulunamadı" + +#: plinth/package.py:263 +msgid "Installed and configured packages successfully." +msgstr "Paketler başarılı bir şekilde kuruldu ve ayarlandı." + +#: plinth/package.py:268 +#, python-brace-format +msgid "Error installing packages: {string} {details}" +msgstr "Paketlerin kurulmasında hata: {string} {details}" + +#: plinth/service.py:73 +msgid "Web Server" +msgstr "Web Sunucusu" + +#: plinth/service.py:74 +msgid "Web Server over Secure Socket Layer" +msgstr "SSL (Secure Socket Layer) üzerinden Web Sunucusu" + +#: plinth/service.py:76 +msgid "Secure Shell (SSH) Server" +msgstr "Güvenli Kabuk (SSH) Sunucusu" + +#: plinth/service.py:79 +#, python-brace-format +#| msgid "FreedomBox Web Interface (Plinth)" +msgid "{box_name} Web Interface (Plinth)" +msgstr "{box_name} Ağ Arayüzü (Plinth)" + +#: plinth/templates/404.html:25 +msgid "404" +msgstr "404" + +#: plinth/templates/404.html:28 +#, python-format +msgid "Requested page %(request_path)s was not found." +msgstr "Talep edilen sayfa %(request_path)s bulunamadı." + +#: plinth/templates/404.html:34 +msgid "" +"If you believe this missing page should exist, please file a bug at the " +"Plinth project issue " +"tracker." +msgstr "" +"Eğer bu eksik sayfanın varolması gerektiğine inanıyorsanız, lütfen Plinth " +"projesinin hata " +"izleyicisine bir hata raporu bırakın." + +#: plinth/templates/500.html:25 +msgid "500" +msgstr "500" + +#: plinth/templates/500.html:28 +msgid "" +"This is an internal error and not something you caused or can fix. Please " +"report the error on the bug tracker so we can fix it." +msgstr "" +"Bu dahili bir hatadır ve sizin yaptığınız ya da giderebileceğiniz bir hata " +"değildir. Lütfen hatayı hata izleyicisinde rapor edin ki sorunu giderebilelim." + +#: plinth/templates/base.html:49 +#, python-format +#| msgid "Plinth administrative interface for the FreedomBox" +msgid "Plinth administrative interface for the %(box_name)s" +msgstr "%(box_name)s için Plinth yönetim arayüzü" + +#: plinth/templates/base.html:83 +msgid "Toggle navigation" +msgstr "Tarama Geçişi" + +#: plinth/templates/base.html:125 plinth/templates/base.html.py:126 +msgid "Change password" +msgstr "Parolayı değiştir" + +#: plinth/templates/base.html:129 plinth/templates/base.html.py:130 +#: plinth/templates/base.html:143 plinth/templates/base.html.py:145 +msgid "Log out" +msgstr "Çıkış yap" + +#: plinth/templates/base.html:135 plinth/templates/base.html.py:137 +msgid "Log in" +msgstr "Giriş yap" + +#: plinth/templates/login.html:35 +msgid "Login" +msgstr "Giriş" + +#: plinth/templates/package_install.html:35 +msgid "Installation" +msgstr "Kurulum" + +#: plinth/templates/package_install.html:40 +msgid "" +"This feature requires addtional packages to be installed. Do you wish to " +"install them?" +msgstr "" +"Bu işlev ek paketlerin kurulumuna ihtiyaç duyar. Bu paketleri kurmak istiyor " +"musunuz?" + +#: plinth/templates/package_install.html:49 +msgid "Package" +msgstr "Paket" + +#: plinth/templates/package_install.html:50 +msgid "Summary" +msgstr "Özet" + +#: plinth/templates/package_install.html:67 +msgid "Install" +msgstr "Kur" + +#: plinth/templates/package_install.html:74 +#, python-format +msgid "Installing %(package_names)s: %(status)s" +msgstr "%(package_names)s kuruluyor: %(status)s" + +#: plinth/templates/package_install.html:84 +#, python-format +msgid "%(percentage)s%% complete" +msgstr "%(percentage)s%% tamamlandı" + +#~ msgid "show password" +#~ msgstr "parolayı göster" + +#~ msgid "The following is the current status:" +#~ msgstr "Aşağıdaki güncel durumdur:" + +#~ msgid "FreedomBox Manual" +#~ msgstr "FreedomBox Kullanım Kılavuzu" + +#~ msgid "" +#~ "Many FreedomBox contributors and users are also available on the " +#~ "#freedombox channel of the irc.oftc.net IRC network." +#~ msgstr "" +#~ "Birçok FreedomBox iştirakçileri ve kullanıcıları irc.oftc.net IRC " +#~ "ağındaki #freedombox kanalındadır." + +#~ msgid "Create Wiki/Blog" +#~ msgstr "Viki/Blog Oluştur" + +#~ msgid "Tor enabled" +#~ msgstr "Tor etkindir" + +#~ msgid "Tor disabled" +#~ msgstr "Tor devre dışıdır" + +#~ msgid "Tor hidden service enabled" +#~ msgstr "Tor gizli servisi etkindir" + +#~ msgid "Tor hidden service disabled" +#~ msgstr "Tor gizli servisi devre dışıdır" + +#~ msgid "Enabled package download over Tor" +#~ msgstr "Yazılım paketlerinin Tor üzerinden indirilmesi etkinleştirildi" + +#~ msgid "Disabled package download over Tor" +#~ msgstr "Yazılım paketlerinin Tor üzerinden indirilmesi devre dışı bırakıldı" + +#~ msgid "There was an error while upgrading." +#~ msgstr "Yükseltme sırasında bir hata meydana geldi." + +#~ msgid "Output from unattended-upgrades:" +#~ msgstr "unattended-upgrades çıktısı:" + +#~ msgid "The operating system is up to date now.  " +#~ msgstr "İşletim sistemi artık günceldir.  " + +#~ msgid "Show Details" +#~ msgstr "Ayrıntıları Göster" + +#~ msgid "" +#~ "This will run unattended-upgrades, which will attempt to upgrade your " +#~ "system with the latest Debian packages. It may take a few minutes to " +#~ "complete." +#~ msgstr "" +#~ "Bu, sisteminizi en güncel Debian paketlerine yükseltmeyi deneyecek " +#~ "unattended-upgrades programını çalıştıracaktır. Tamamlanması birkaç " +#~ "dakika alabilir." + +#~ msgid "System is being upgraded." +#~ msgstr "Sistem yükseltilmektedir." diff -Nru plinth-0.7.2/plinth/locale/zh_CN/LC_MESSAGES/django.po plinth-0.8.1/plinth/locale/zh_CN/LC_MESSAGES/django.po --- plinth-0.7.2/plinth/locale/zh_CN/LC_MESSAGES/django.po 1970-01-01 00:00:00.000000000 +0000 +++ plinth-0.8.1/plinth/locale/zh_CN/LC_MESSAGES/django.po 2016-02-16 03:55:53.000000000 +0000 @@ -0,0 +1,2934 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-01-31 22:19+0530\n" +"PO-Revision-Date: 2016-02-04 02:36+0000\n" +"Last-Translator: Tong Hui \n" +"Language-Team: Chinese (China) " +"\n" +"Language: zh_CN\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Weblate 2.5-dev\n" + +#: plinth/action_utils.py:203 +#, python-brace-format +msgid "Listening on {kind} port {listen_address}:{port}" +msgstr "正在 {kind} 侦听端口 {listen_address}:{port}" + +#: plinth/action_utils.py:206 +#, python-brace-format +msgid "Listening on {kind} port {port}" +msgstr "正在 {kind} 侦听端口 {port}" + +#: plinth/action_utils.py:287 +#, python-brace-format +msgid "Access URL {url} on tcp{kind}" +msgstr "在 tcp {kind} 访问 URL {url}" + +#: plinth/action_utils.py:290 +#, python-brace-format +msgid "Access URL {url}" +msgstr "访问 URL {url}" + +#: plinth/action_utils.py:321 +#, python-brace-format +msgid "Connect to {host}:{port}" +msgstr "连接到的主机 {host}: {port}" + +#: plinth/action_utils.py:324 +#, python-brace-format +msgid "Cannot connect to {host}:{port}" +msgstr "不能连接到的主机 {host}: {port}" + +#: plinth/context_processors.py:36 +msgid "FreedomBox" +msgstr "FreedomBox" + +#: plinth/modules/apps/apps.py:26 +msgid "Apps" +msgstr "应用程序" + +#: plinth/modules/apps/apps.py:32 plinth/templates/base.html.py:93 +msgid "Applications" +msgstr "应用程序" + +#: plinth/modules/apps/templates/apps.html:25 +msgid "Services and Applications" +msgstr "服务和应用程序" + +#: plinth/modules/apps/templates/apps.html:28 +#, python-format +msgid "" +"You can install and run various services and applications on your " +"%(box_name)s. Click on any app page link on the left to read a description " +"of the application and choose to install it." +msgstr "你可以安装和运行各种服务和应用程序在您 %(box_name)s 上。点击左边应用程序链接阅读相应的描述,并选择是否要安装。" + +#: plinth/modules/apps/templates/apps.html:36 +msgid "" +"This box can be your photo sharing site, your instant messaging site, your " +"social networking site, your news site. Remember web portals? We can be " +"one of those too. Many of the services you use on the web could soon be on " +"site and under your control!" +msgstr "" +"这个盒子可以是你的照片分享网站,即时消息传递站点,你的社交网站,您的新闻站点。 还记得门户网站吗?我们也可以是那些之一。 您在 web " +"上使用的服务和网站上很快都会在你控制之下!" + +#: plinth/modules/avahi/__init__.py:40 plinth/modules/avahi/__init__.py:45 +#: plinth/modules/avahi/templates/avahi.html:26 +#: plinth/modules/avahi/views.py:53 +msgid "Service Discovery" +msgstr "服务发现" + +#: plinth/modules/avahi/forms.py:29 +msgid "Enable service discovery" +msgstr "启用服务发现" + +#: plinth/modules/avahi/templates/avahi.html:29 +#, python-format +msgid "" +"Service discovery allows other devices on the network to discover your " +"%(box_name)s and services running on it. It also allows %(box_name)s to " +"discover other devices and services running on your local network. Service " +"discovery is not essential and works only on internal networks. It may be " +"disabled to improve security especially when connecting to a hostile local " +"network." +msgstr "" +"服务发现允许其他设备在网络上发现你的 %(box_name)s 和在其上运行的服务。它还允许 %(box_name)s " +"发现在您本地网络上运行的其他设备和服务。服务发现是非必需的,且只能在内部网络上运行。可以禁用以提高安全性,尤其是当连接到一个充满敌意的本地网络。" + +#: plinth/modules/avahi/templates/avahi.html:40 +#: plinth/modules/datetime/templates/datetime.html:35 +#: plinth/modules/deluge/templates/deluge.html:39 +#: plinth/modules/dynamicdns/dynamicdns.py:39 +#: plinth/modules/firewall/templates/firewall.html:57 +#: plinth/modules/mumble/templates/mumble.html:44 +#: plinth/modules/networks/templates/connection_show.html:261 +#: plinth/modules/openvpn/templates/openvpn.html:81 +#: plinth/modules/privoxy/templates/privoxy.html:48 +#: plinth/modules/quassel/templates/quassel.html:50 +#: plinth/modules/repro/templates/repro.html:58 +#: plinth/modules/tor/templates/tor.html:48 +#: plinth/modules/transmission/templates/transmission.html:42 +#: plinth/modules/xmpp/templates/xmpp.html:58 +msgid "Status" +msgstr "状态" + +#: plinth/modules/avahi/templates/avahi.html:45 +msgid "Service discovery server is running" +msgstr "服务发现服务正在运行" + +#: plinth/modules/avahi/templates/avahi.html:48 +msgid "Service discovery server is not running" +msgstr "服务发现服务未运行" + +#: plinth/modules/avahi/templates/avahi.html:52 +#: plinth/modules/datetime/templates/datetime.html:48 +#: plinth/modules/deluge/templates/deluge.html:53 +#: plinth/modules/ikiwiki/templates/ikiwiki.html:35 +#: plinth/modules/mumble/templates/mumble.html:59 +#: plinth/modules/openvpn/templates/openvpn.html:130 +#: plinth/modules/owncloud/templates/owncloud.html:51 +#: plinth/modules/privoxy/templates/privoxy.html:62 +#: plinth/modules/quassel/templates/quassel.html:65 +#: plinth/modules/repro/templates/repro.html:72 +#: plinth/modules/roundcube/templates/roundcube.html:62 +#: plinth/modules/shaarli/templates/shaarli.html:40 +#: plinth/modules/tor/templates/tor.html:92 +#: plinth/modules/transmission/templates/transmission.html:56 +#: plinth/modules/xmpp/templates/xmpp.html:72 +msgid "Configuration" +msgstr "配置" + +#: plinth/modules/avahi/templates/avahi.html:60 +#: plinth/modules/datetime/templates/datetime.html:56 +#: plinth/modules/deluge/templates/deluge.html:61 +#: plinth/modules/dynamicdns/templates/dynamicdns_configure.html:40 +#: plinth/modules/ikiwiki/templates/ikiwiki.html:43 +#: plinth/modules/ikiwiki/templates/ikiwiki_create.html:32 +#: plinth/modules/mumble/templates/mumble.html:67 +#: plinth/modules/openvpn/templates/openvpn.html:138 +#: plinth/modules/privoxy/templates/privoxy.html:70 +#: plinth/modules/quassel/templates/quassel.html:73 +#: plinth/modules/repro/templates/repro.html:80 +#: plinth/modules/restore/templates/restore_index.html:54 +#: plinth/modules/roundcube/templates/roundcube.html:70 +#: plinth/modules/shaarli/templates/shaarli.html:48 +#: plinth/modules/tor/templates/tor.html:100 +#: plinth/modules/transmission/templates/transmission.html:64 +#: plinth/modules/upgrades/templates/upgrades_configure.html:34 +#: plinth/modules/xmpp/templates/xmpp.html:80 +msgid "Update setup" +msgstr "更新安装程序" + +#: plinth/modules/avahi/views.py:73 plinth/modules/datetime/views.py:85 +#: plinth/modules/deluge/views.py:80 +#: plinth/modules/dynamicdns/dynamicdns.py:371 +#: plinth/modules/ikiwiki/views.py:95 plinth/modules/mumble/views.py:80 +#: plinth/modules/openvpn/views.py:142 plinth/modules/privoxy/views.py:83 +#: plinth/modules/quassel/views.py:76 plinth/modules/repro/views.py:77 +#: plinth/modules/restore/views.py:68 plinth/modules/roundcube/views.py:84 +#: plinth/modules/shaarli/views.py:74 plinth/modules/transmission/views.py:109 +#: plinth/modules/xmpp/views.py:100 +msgid "Configuration updated" +msgstr "配置已更新" + +#: plinth/modules/avahi/views.py:76 plinth/modules/datetime/views.py:99 +#: plinth/modules/deluge/views.py:82 plinth/modules/ikiwiki/views.py:97 +#: plinth/modules/mumble/views.py:82 plinth/modules/openvpn/views.py:144 +#: plinth/modules/owncloud/owncloud.py:93 plinth/modules/privoxy/views.py:85 +#: plinth/modules/quassel/views.py:78 plinth/modules/repro/views.py:79 +#: plinth/modules/restore/views.py:70 plinth/modules/roundcube/views.py:86 +#: plinth/modules/shaarli/views.py:76 plinth/modules/tor/views.py:111 +#: plinth/modules/transmission/views.py:111 +#: plinth/modules/upgrades/views.py:118 plinth/modules/xmpp/views.py:102 +msgid "Setting unchanged" +msgstr "设置未改变" + +#: plinth/modules/config/config.py:84 plinth/modules/config/config.py:121 +#: plinth/modules/dynamicdns/dynamicdns.py:148 +msgid "Invalid domain name" +msgstr "无效的域名" + +#: plinth/modules/config/config.py:95 +msgid "Hostname" +msgstr "主机名" + +#: plinth/modules/config/config.py:97 +#, python-brace-format +msgid "" +"Hostname is the local name by which other devices on the local network can " +"reach your {box_name}. It must start and end with an alphabet or a digit " +"and have as interior characters only alphabets, digits and hyphens. Total " +"length must be 63 characters or less." +msgstr "" +"主机名是本地网络上的其他设备可以到达你 {box_name} 的本地名称。它必须以字母或数字结束和开始作为内部字符只有字母、数字和连字符。总长度必须为 " +"63 个字符或更少。" + +#: plinth/modules/config/config.py:105 +msgid "Invalid hostname" +msgstr "无效的主机名" + +#: plinth/modules/config/config.py:108 plinth/modules/config/config.py:153 +#: plinth/modules/config/config.py:265 +#: plinth/modules/dynamicdns/dynamicdns.py:143 +msgid "Domain Name" +msgstr "域名" + +#: plinth/modules/config/config.py:110 +#, python-brace-format +msgid "" +"Domain name is the global name by which other devices on the Internet can " +"reach your {box_name}. It must consist of labels separated by dots. Each " +"label must start and end with an alphabet or a digit and have as interior " +"characters only alphabets, digits and hyphens. Length of each label must be " +"63 characters or less. Total length of domain name must be 253 characters " +"or less." +msgstr "" + +#: plinth/modules/config/config.py:125 +msgid "Language" +msgstr "语言" + +#: plinth/modules/config/config.py:127 +msgid "Language for this web administration interface" +msgstr "此 web 管理界面的语言" + +#: plinth/modules/config/config.py:135 +#: plinth/modules/dynamicdns/dynamicdns.py:37 +#: plinth/modules/ikiwiki/views.py:36 +msgid "Configure" +msgstr "配置" + +#: plinth/modules/config/config.py:176 +msgid "General Configuration" +msgstr "常规配置" + +#: plinth/modules/config/config.py:193 +#, python-brace-format +msgid "Error setting hostname: {exception}" +msgstr "设置主机名错误:{exception}" + +#: plinth/modules/config/config.py:196 +msgid "Hostname set" +msgstr "主机名设置" + +#: plinth/modules/config/config.py:202 +#, python-brace-format +msgid "Error setting domain name: {exception}" +msgstr "设置域名错误:{exception}" + +#: plinth/modules/config/config.py:205 +msgid "Domain name set" +msgstr "域名集" + +#: plinth/modules/config/config.py:213 +#, python-brace-format +msgid "Error setting language: {exception}" +msgstr "设置语言错误:{exception}" + +#: plinth/modules/config/config.py:216 +msgid "Language changed" +msgstr "语言已更改" + +#: plinth/modules/config/templates/config.html:32 +msgid "Submit" +msgstr "提交" + +#: plinth/modules/datetime/__init__.py:39 +#: plinth/modules/datetime/templates/datetime.html:26 +#: plinth/modules/datetime/views.py:58 +msgid "Date & Time" +msgstr "日期与时间" + +#: plinth/modules/datetime/__init__.py:44 +msgid "Network Time Server" +msgstr "网络时间服务器" + +#: plinth/modules/datetime/__init__.py:76 +msgid "NTP client in contact with servers" +msgstr "NTP 客户端正在与服务器联系" + +#: plinth/modules/datetime/forms.py:31 +msgid "Enable network time" +msgstr "启用网络时间" + +#: plinth/modules/datetime/forms.py:35 +msgid "Time Zone" +msgstr "时区" + +#: plinth/modules/datetime/forms.py:36 +msgid "" +"Set your time zone to get accurate timestamps. This will set the systemwide " +"time zone." +msgstr "设置您的时区来得到准确的时间戳。这将影响全系统时区。" + +#: plinth/modules/datetime/forms.py:47 +msgid "-- no time zone set --" +msgstr "-- 时区未设置 --" + +#: plinth/modules/datetime/templates/datetime.html:29 +msgid "" +"Network time server is a program that maintians the system time in " +"synchronization with servers on the Internet." +msgstr "网络时间服务是与 Internet 上的服务器同步系统时间的一个程序。" + +#: plinth/modules/datetime/templates/datetime.html:40 +msgid "Network time server is running" +msgstr "网络时间服务器运行中" + +#: plinth/modules/datetime/templates/datetime.html:43 +msgid "Network time server is not running" +msgstr "网络时间服务器未运行" + +#: plinth/modules/datetime/views.py:93 +#, python-brace-format +msgid "Error setting time zone: {exception}" +msgstr "设置时区错误:{exception}" + +#: plinth/modules/datetime/views.py:96 +msgid "Time zone set" +msgstr "时区设置" + +#: plinth/modules/deluge/__init__.py:38 plinth/modules/deluge/views.py:56 +msgid "BitTorrent (Deluge)" +msgstr "BitTorrent 下载(Deluge)" + +#: plinth/modules/deluge/__init__.py:43 +msgid "Deluge BitTorrent" +msgstr "Deluge BitTorrent 客户端" + +#: plinth/modules/deluge/forms.py:29 +msgid "Enable Deluge" +msgstr "启用 Deluge" + +#: plinth/modules/deluge/templates/deluge.html:26 +msgid "BitTorrent Web Client (Deluge)" +msgstr "BitTorrent 网页客户端(Deluge)" + +#: plinth/modules/deluge/templates/deluge.html:28 +msgid "Deluge is a BitTorrent client that features a Web UI." +msgstr "Deluge 是一个有网页界面的 BitTorrent 客户端。" + +#: plinth/modules/deluge/templates/deluge.html:31 +msgid "" +"When enabled, the Deluge web client will be available from /deluge path on the web server. The default password is 'deluge', but " +"you should log in and change it immediately after enabling this service." +msgstr "" + +#: plinth/modules/deluge/templates/deluge.html:44 +msgid "deluge-web is running" +msgstr "deluge-web 正在运行" + +#: plinth/modules/deluge/templates/deluge.html:47 +msgid "deluge-web is not running" +msgstr "deluge-web 未运行" + +#: plinth/modules/diagnostics/diagnostics.py:45 +msgid "Diagnostics" +msgstr "诊断程序" + +#: plinth/modules/diagnostics/diagnostics.py:55 +msgid "System Diagnostics" +msgstr "系统诊断" + +#: plinth/modules/diagnostics/diagnostics.py:78 +msgid "Diagnostic Test" +msgstr "诊断测试" + +#: plinth/modules/diagnostics/templates/diagnostics.html:37 +msgid "" +"The system diagnostic test will run a number of checks on your system to " +"confirm that applications and services are working as expected." +msgstr "系统诊断将运行测试程序检查您的系统以确认应用程序和服务正在按预期方式运行。" + +#: plinth/modules/diagnostics/templates/diagnostics.html:50 +#: plinth/modules/diagnostics/templates/diagnostics_button.html:27 +msgid "Run Diagnostics" +msgstr "运行诊断程序" + +#: plinth/modules/diagnostics/templates/diagnostics.html:53 +msgid "Diagnotics test is currently running" +msgstr "当前正在运行诊断测试" + +#: plinth/modules/diagnostics/templates/diagnostics.html:66 +msgid "Results" +msgstr "结果" + +#: plinth/modules/diagnostics/templates/diagnostics.html:74 +#, python-format +msgid "Module: %(module)s" +msgstr "模块:%(module)s" + +#: plinth/modules/diagnostics/templates/diagnostics_module.html:25 +msgid "Diagnostic Results" +msgstr "诊断结果" + +#: plinth/modules/diagnostics/templates/diagnostics_module.html:27 +#, python-format +msgid "Module: %(module_name)s" +msgstr "模块:%(module_name)s" + +#: plinth/modules/diagnostics/templates/diagnostics_module.html:32 +msgid "This module does not support diagnostics" +msgstr "此模块不支持诊断" + +#: plinth/modules/diagnostics/templates/diagnostics_results.html:27 +msgid "Test" +msgstr "测试" + +#: plinth/modules/diagnostics/templates/diagnostics_results.html:28 +msgid "Result" +msgstr "结果" + +#: plinth/modules/dynamicdns/dynamicdns.py:35 plinth/modules/help/help.py:40 +msgid "About" +msgstr "关于" + +#: plinth/modules/dynamicdns/dynamicdns.py:45 +#: plinth/modules/dynamicdns/dynamicdns.py:54 +msgid "Dynamic DNS" +msgstr "动态 DNS" + +#: plinth/modules/dynamicdns/dynamicdns.py:71 +msgid "" +"The Variables <User>, <Pass>, <Ip>, <Domain> may be " +"used within the URL. For details see the update URL templates of the example " +"providers." +msgstr "" +"变量 < 用户 > < 传递 > < Ip > < 域 > 可能在 URL 内使用。详细信息请参见更新 " +"URL 模板的示例提供程序。" + +#: plinth/modules/dynamicdns/dynamicdns.py:75 +msgid "" +"Please choose an update protocol according to your provider. If your " +"provider does not support the GnudIP protocol or your provider is not listed " +"you may use the update URL of your provider." +msgstr "请选择您的提供商更新协议。如果您的提供商不支持 GnudIP 协议或未列出您的提供商可能会使用您的提供商的更新 URL。" + +#: plinth/modules/dynamicdns/dynamicdns.py:80 +msgid "" +"Please do not enter a URL here (like \"https://example.com/\") but only the " +"hostname of the GnuDIP server (like \"example.com\")." +msgstr "" +"请不要在此输入 URL(如\"https://example.com/\"),只输入 GnuDIP 服务器的主机名(例如“example.com”)。" + +#: plinth/modules/dynamicdns/dynamicdns.py:84 +#, python-brace-format +msgid "The public domain name you want use to reach your {box_name}." +msgstr "你要访问你的 {box_name} 想使用的公开域名。" + +#: plinth/modules/dynamicdns/dynamicdns.py:87 +msgid "Use this option if your provider uses self signed certificates." +msgstr "如果您的提供商使用自签名的证书,请使用此选项。" + +#: plinth/modules/dynamicdns/dynamicdns.py:90 +msgid "" +"If this option is selected, your username and password will be used for HTTP " +"basic authentication." +msgstr "如果选择了此选项,您的用户名和密码将用于 HTTP 基本身份验证。" + +#: plinth/modules/dynamicdns/dynamicdns.py:93 +msgid "" +"Leave this field empty if you want to keep your previous configured password." +msgstr "如果你想保持你以前配置的密码,请将此字段留空的。" + +#: plinth/modules/dynamicdns/dynamicdns.py:96 +#, python-brace-format +msgid "" +"Optional Value. If your {box_name} is not connected directly to the Internet " +"(i.e. connected to a NAT router) this URL is used to figure out the real " +"Internet IP. The URL should simply return the IP where the client comes from " +"(example: http://myip.datasystems24.de)." +msgstr "" + +#: plinth/modules/dynamicdns/dynamicdns.py:104 +msgid "" +"You should have been requested to select a username when you created the " +"account." +msgstr "您在创建该帐户时应该被要求选择一个用户名。" + +#: plinth/modules/dynamicdns/dynamicdns.py:115 +msgid "Enable Dynamic DNS" +msgstr "启用动态 DNS" + +#: plinth/modules/dynamicdns/dynamicdns.py:118 +msgid "Service type" +msgstr "服务类型" + +#: plinth/modules/dynamicdns/dynamicdns.py:123 +msgid "GnudIP Server Address" +msgstr "GnudIP 服务器地址" + +#: plinth/modules/dynamicdns/dynamicdns.py:128 +msgid "Invalid server name" +msgstr "服务器名称无效" + +#: plinth/modules/dynamicdns/dynamicdns.py:131 +msgid "Update URL" +msgstr "更新 URL" + +#: plinth/modules/dynamicdns/dynamicdns.py:135 +msgid "Accept all SSL certificates" +msgstr "接受所有 SSL 证书" + +#: plinth/modules/dynamicdns/dynamicdns.py:139 +msgid "Use HTTP basic authentication" +msgstr "使用 HTTP 基本身份验证" + +#: plinth/modules/dynamicdns/dynamicdns.py:151 +#: plinth/modules/networks/forms.py:146 plinth/modules/transmission/forms.py:39 +msgid "Username" +msgstr "用户名" + +#: plinth/modules/dynamicdns/dynamicdns.py:154 +#: plinth/modules/networks/forms.py:147 plinth/modules/transmission/forms.py:43 +msgid "Password" +msgstr "密码" + +#: plinth/modules/dynamicdns/dynamicdns.py:157 +#: plinth/modules/networks/forms.py:149 +msgid "Show password" +msgstr "显示密码" + +#: plinth/modules/dynamicdns/dynamicdns.py:161 +msgid "IP check URL" +msgstr "IP 检查 URL" + +#: plinth/modules/dynamicdns/dynamicdns.py:187 +msgid "Please provide update URL or a GnuDIP Server" +msgstr "请提供更新 URL 或 GnuDIP 服务器" + +#: plinth/modules/dynamicdns/dynamicdns.py:190 +msgid "Please provide GnuDIP username" +msgstr "请提供 GnuDIP 用户名" + +#: plinth/modules/dynamicdns/dynamicdns.py:193 +msgid "Please provide GnuDIP domain" +msgstr "请提供 GnuDIP 域" + +#: plinth/modules/dynamicdns/dynamicdns.py:198 +msgid "Please provide a password" +msgstr "请提供一个密码" + +#: plinth/modules/dynamicdns/dynamicdns.py:217 +msgid "Configure Dynamic DNS" +msgstr "配置动态 DNS" + +#: plinth/modules/dynamicdns/dynamicdns.py:239 +msgid "Status of Dynamic DNS" +msgstr "动态 DNS 的状态" + +#: plinth/modules/dynamicdns/templates/dynamicdns.html:25 +msgid "Dynamic DNS Client" +msgstr "动态 DNS 客户端" + +#: plinth/modules/dynamicdns/templates/dynamicdns.html:28 +#, python-format +msgid "" +"If your internet provider changes your IP address periodic (i.e. every 24h) " +"it may be hard for others to find you in the WEB. And for this reason nobody " +"may find the services which are provided by %(box_name)s, such as ownCloud." +msgstr "" + +#: plinth/modules/dynamicdns/templates/dynamicdns.html:37 +msgid "" +"The solution is to assign a DNS name to your IP address and update the DNS " +"name every time your IP is changed by your Internet provider. Dynamic DNS " +"allows you to push your current public IP address to an gnudip server. Afterwards " +"the Server will assign your DNS name with the new IP and if someone from the " +"Internet asks for your DNS name he will get your current IP answered." +msgstr "" + +#: plinth/modules/dynamicdns/templates/dynamicdns.html:50 +msgid "" +"If you are looking for a free dynamic DNS account, you may find a free " +"GnuDIP service at gnudip.datasystems24.net or you may find free update URL " +"based services on " +"freedns.afraid.org." +msgstr "" + +#: plinth/modules/dynamicdns/templates/dynamicdns.html:61 +#, python-format +msgid "" +"If your %(box_name)s is connected behind some NAT router, don't forget to " +"add port forwarding (i.e. forward some standard ports like 80 and 443)." +msgstr "如果您的 %(box_name)s 通过 NAT 方式的路由连接,别忘了添加端口转发(即转发一些标准端口像 80 和 443)。" + +#: plinth/modules/dynamicdns/templates/dynamicdns_configure.html:30 +msgid "" +"You have disabled Javascript. Dynamic form mode is disabled and some helper " +"functions may not work (but the main functionality should work)." +msgstr "您已禁用 Javascript。禁用动态表单模式和一些 helper 函数可能无法工作(但主要功能应该工作)。" + +#: plinth/modules/dynamicdns/templates/dynamicdns_status.html:25 +msgid "NAT type" +msgstr "NAT 类型" + +#: plinth/modules/dynamicdns/templates/dynamicdns_status.html:29 +msgid "" +"NAT type not detected yet, if you do not provide a \"IP check URL\" we will " +"not detect a NAT type." +msgstr "不能探测到 NAT 类型,如果你不提供”IP 检查 URL“我们将检测不到 NAT 类型。" + +#: plinth/modules/dynamicdns/templates/dynamicdns_status.html:35 +msgid "Direct connection to the Internet." +msgstr "直接连接到互联网。" + +#: plinth/modules/dynamicdns/templates/dynamicdns_status.html:37 +#, python-format +msgid "" +"Behind NAT. This means that Dynamic DNS service will poll the \"IP check URL" +"\" for changes (the \"IP check URL\" entry is needed for this - otherwise IP " +"changes will not be detected). In case the WAN IP changes, it may take up " +"to %(timer)s minutes until your DNS entry is updated." +msgstr "" + +#: plinth/modules/dynamicdns/templates/dynamicdns_status.html:48 +msgid "Last update" +msgstr "最后一次更新" + +#: plinth/modules/firewall/firewall.py:39 +#: plinth/modules/firewall/firewall.py:49 +#: plinth/modules/firewall/firewall.py:57 +msgid "Firewall" +msgstr "防火墙" + +#: plinth/modules/firewall/templates/firewall.html:28 +#, python-format +msgid "" +"Firewall is a security system that controls the incoming and outgoing " +"network traffic on your %(box_name)s. Keeping a firewall enabled and " +"properly configured reduces risk of security threat from the Internet." +msgstr "防火墙控制你 %(box_name)s 上的进出网络流量。启用并正确配置防火墙上可以减少来自互联网的安全威胁。" + +#: plinth/modules/firewall/templates/firewall.html:36 +msgid "Current status:" +msgstr "当前状态:" + +#: plinth/modules/firewall/templates/firewall.html:41 +#, python-format +msgid "" +"Firewall daemon is not running. Please run it. Firewall comes enabled by " +"default on %(box_name)s. On any Debian based system (such as %(box_name)s) " +"you may run it using the command 'service firewalld start' or in case of a " +"system with systemd 'systemctl start firewalld'." +msgstr "" + +#: plinth/modules/firewall/templates/firewall.html:56 +msgid "Service/Port" +msgstr "服务/端口" + +#: plinth/modules/firewall/templates/firewall.html:67 +#: plinth/modules/letsencrypt/templates/letsencrypt.html:91 +#: plinth/modules/names/templates/names.html:51 +msgid "Enabled" +msgstr "启用" + +#: plinth/modules/firewall/templates/firewall.html:70 +#: plinth/modules/letsencrypt/templates/letsencrypt.html:93 +#: plinth/modules/names/templates/names.html:53 +msgid "Disabled" +msgstr "已禁用" + +#: plinth/modules/firewall/templates/firewall.html:81 +msgid "Permitted" +msgstr "允许" + +#: plinth/modules/firewall/templates/firewall.html:84 +msgid "Permitted (internal only)" +msgstr "允许(只允许内部连接)" + +#: plinth/modules/firewall/templates/firewall.html:87 +msgid "Permitted (external only)" +msgstr "允许(只允许外部连接)" + +#: plinth/modules/firewall/templates/firewall.html:90 +msgid "Blocked" +msgstr "已阻止" + +#: plinth/modules/firewall/templates/firewall.html:103 +msgid "" +"The operation of the firewall is automatic. When you enable a service it is " +"also permitted in the firewall and when you disable a service it is also " +"disabled in the firewall." +msgstr "防火墙的操作是自动的。当您启用服务时它也在防火墙中允许,当禁用一项服务时也会禁用防火墙中的相应服务。" + +#: plinth/modules/first_boot/forms.py:48 plinth/modules/users/forms.py:70 +msgid "Creating LDAP user failed." +msgstr "创建 LDAP 用户失败。" + +#: plinth/modules/first_boot/forms.py:56 +msgid "Failed to add new user to admin group." +msgstr "未能将新用户添加到管理员组。" + +#: plinth/modules/first_boot/forms.py:78 +msgid "User account created, you are now logged in" +msgstr "用户帐户已创建,您现在可以登录" + +#: plinth/modules/first_boot/templates/firstboot_navbar.html:23 +#: plinth/modules/help/templates/help_index.html:25 +#: plinth/templates/base.html:102 +msgid "Help" +msgstr "帮助" + +#: plinth/modules/first_boot/templates/firstboot_state0.html:45 +msgid "Start Setup" +msgstr "启动安装程序" + +#: plinth/modules/first_boot/templates/firstboot_state0.html:49 +#, python-format +msgid "" +"To complete the setup of your %(box_name)s, please provide some basic " +"information." +msgstr "要完成您的 %(box_name)s 安装,请提供一些基本信息。" + +#: plinth/modules/first_boot/templates/firstboot_state1.html:41 +msgid "Administrator Account" +msgstr "管理员帐户" + +#: plinth/modules/first_boot/templates/firstboot_state1.html:44 +msgid "" +"Choose a username and password to access this web interface. The password " +"can be changed later. This user will be granted administrative privileges. " +"Other users can be added later." +msgstr "选择一个用户名和密码才能访问此 web 界面。以后可以更改密码。此用户将被授予管理权限。其他用户可以在以后添加。" + +#: plinth/modules/first_boot/templates/firstboot_state1.html:57 +msgid "Box it up!" +msgstr "用起来!" + +#: plinth/modules/first_boot/templates/firstboot_state10.html:29 +msgid "Setup Complete!" +msgstr "安装已完成!" + +#: plinth/modules/first_boot/templates/firstboot_state10.html:32 +#, python-format +msgid "" +"%(box_name)s setup is now complete. To make your %(box_name)s functional, " +"you need some applications. They will be installed the first time you " +"access them." +msgstr "%(box_name)s 安装程序现已完成。 若要使您的 %(box_name)s 起作用,您需要一些应用程序。 它们会在您首次访问时安装。" + +#: plinth/modules/first_boot/templates/firstboot_state10.html:41 +msgid "Go to Apps" +msgstr "转到应用程序" + +#: plinth/modules/first_boot/templates/firstboot_state10.html:44 +msgid "Current Network Configuration" +msgstr "当前的网络配置" + +#: plinth/modules/first_boot/templates/firstboot_state10.html:47 +msgid "" +"You should check the network setup and modify it if necessary. Do not forget " +"to change the default Wi-Fi passwords!" +msgstr "你应该检查网络设置,如果有必要可对其修改。若要更改默认无线上网密码,请不要忘记!" + +#: plinth/modules/first_boot/templates/firstboot_state10.html:57 +msgid "Go to Networks" +msgstr "转到网络" + +#: plinth/modules/first_boot/views.py:60 +msgid "Setup Complete" +msgstr "安装完成" + +#: plinth/modules/help/help.py:34 +msgid "Documentation" +msgstr "文档" + +#: plinth/modules/help/help.py:36 +msgid "Where to Get Help" +msgstr "从何处获得帮助" + +#: plinth/modules/help/help.py:38 +msgid "Manual" +msgstr "手册" + +#: plinth/modules/help/help.py:48 +msgid "Documentation and FAQ" +msgstr "文档和 FAQ" + +#: plinth/modules/help/help.py:55 +#, python-brace-format +msgid "About {box_name}" +msgstr "关于 {box_name}" + +#: plinth/modules/help/help.py:73 +#, python-brace-format +msgid "{box_name} Manual" +msgstr "{box_name} 手册" + +#: plinth/modules/help/templates/help_about.html:30 +#, python-format +msgid "" +"%(box_name)s is a community project to develop, design and promote personal " +"servers running free software for private, personal communications. It is a " +"networking appliance designed to allow interfacing with the rest of the " +"Internet under conditions of protected privacy and data security. It hosts " +"applications such as blog, wiki, website, social network, email, web proxy " +"and a Tor relay, on a device that can replace your Wi-Fi router, so that " +"your data stays with you." +msgstr "" + +#: plinth/modules/help/templates/help_about.html:43 +msgid "" +"We live in a world where our use of the network is mediated by those who " +"often do not have our best interests at heart. By building software that " +"does not rely on a central service, we can regain control and privacy. By " +"keeping our data in our homes, we gain useful legal protections over it. By " +"giving back power to the users over their networks and machines, we are " +"returning the Internet to its intended peer-to-peer architecture." +msgstr "" + +#: plinth/modules/help/templates/help_about.html:56 +#, python-format +msgid "" +"There are a number of projects working to realize a future of distributed " +"services; %(box_name)s aims to bring them all together in a convenient " +"package." +msgstr "" + +#: plinth/modules/help/templates/help_about.html:64 +#, python-format +msgid "" +"For more information about the %(box_name)s project, see the %(box_name)s Wiki." +msgstr "" +"有关 %(box_name)s 项目的详细信息,请参阅 %(box_name)s Wiki。" + +#: plinth/modules/help/templates/help_about.html:73 +msgid "Learn more »" +msgstr "了解更多»" + +#: plinth/modules/help/templates/help_about.html:76 +#, python-format +msgid "You are running Plinth version %(version)s." +msgstr "您正在运行 Plinth 版本 %(version)s。" + +#: plinth/modules/help/templates/help_base.html:36 +#, python-format +msgid "%(box_name)s Setup" +msgstr "%(box_name)s 安装程序" + +#: plinth/modules/help/templates/help_index.html:29 +#, python-format +msgid "" +"The %(box_name)s Manual is the best place to " +"start for information regarding %(box_name)s." +msgstr "" +" %(box_name)s 手册 是开始了解 %(box_name)s 有关信息最好的地方。" + +#: plinth/modules/help/templates/help_index.html:36 +#, python-format +msgid "" +" " +"%(box_name)s project wiki contains further information." +msgstr "" +" %(box_name)" +"s 项目 wiki 包含更多信息。" + +#: plinth/modules/help/templates/help_index.html:43 +#, python-format +msgid "" +"To seek help from %(box_name)s community, queries may be posted on the mailing list. The list archives also contain information about " +"problems faced by other users and possible solutions." +msgstr "" + +#: plinth/modules/help/templates/help_index.html:53 +#, python-format +msgid "" +"Many %(box_name)s contributors and users are also available on the irc.oftc." +"net IRC network. Join and request help on the #freedombox " +"channel using the IRC web interface." +msgstr "" + +#: plinth/modules/ikiwiki/__init__.py:38 +msgid "Wiki and Blog (ikiwiki)" +msgstr "Wiki 和博客(ikiwiki)" + +#: plinth/modules/ikiwiki/__init__.py:43 +msgid "ikiwiki wikis and blogs" +msgstr "ikiwiki wiki 和博客" + +#: plinth/modules/ikiwiki/forms.py:29 +msgid "Enable ikiwiki" +msgstr "启用 ikiwiki" + +#: plinth/modules/ikiwiki/forms.py:36 +#: plinth/modules/networks/templates/connection_show.html:98 +msgid "Type" +msgstr "类型" + +#: plinth/modules/ikiwiki/forms.py:39 +#: plinth/modules/networks/templates/connection_show.html:78 +msgid "Name" +msgstr "名称" + +#: plinth/modules/ikiwiki/forms.py:41 +msgid "Admin Account Name" +msgstr "管理员帐户名称" + +#: plinth/modules/ikiwiki/forms.py:44 +msgid "Admin Account Password" +msgstr "管理员帐户密码" + +#: plinth/modules/ikiwiki/templates/ikiwiki.html:27 +msgid "" +"When enabled, the blogs and wikis will be available from /ikiwiki." +msgstr "启用以后,博客和 wiki 将可从 /ikiwiki 访问。" + +#: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:27 +#, python-format +msgid "Delete Wiki or Blog %(name)s" +msgstr "删除 wiki 页面或博客 %(name)s " + +#: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:33 +msgid "" +"This action will remove all the posts, pages and comments including revision " +"history. Delete this wiki or blog permanently?" +msgstr "此操作将删除所有文章、 网页和评论包括修订历史记录。 永久删除此 wiki 或博客吗?" + +#: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:44 +#, python-format +msgid "Delete %(name)s" +msgstr "删除 %(name)s" + +#: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:47 +#: plinth/modules/monkeysphere/templates/monkeysphere.html:60 +#: plinth/modules/networks/templates/connections_delete.html:41 +#: plinth/modules/users/templates/users_delete.html:41 +msgid "Cancel" +msgstr "取消" + +#: plinth/modules/ikiwiki/templates/ikiwiki_manage.html:41 +msgid "No wikis or blogs available." +msgstr "没有 wiki 或博客可用。" + +#: plinth/modules/ikiwiki/templates/ikiwiki_manage.html:45 +msgid "Create a Wiki or Blog" +msgstr "创建一个 Wiki 或博客" + +#: plinth/modules/ikiwiki/templates/ikiwiki_manage.html:55 +#, python-format +msgid "Delete site %(site)s" +msgstr "删除站点 %(site)s" + +#: plinth/modules/ikiwiki/templates/ikiwiki_manage.html:61 +#, python-format +msgid "Go to site %(site)s" +msgstr "转到站点 %(site)s" + +#: plinth/modules/ikiwiki/views.py:38 +msgid "Manage" +msgstr "管理" + +#: plinth/modules/ikiwiki/views.py:40 +msgid "Create" +msgstr "创建" + +#: plinth/modules/ikiwiki/views.py:73 +msgid "Wiki and Blog" +msgstr "Wiki 和博客" + +#: plinth/modules/ikiwiki/views.py:106 +msgid "Manage Wikis and Blogs" +msgstr "管理 Wiki 和博客" + +#: plinth/modules/ikiwiki/views.py:132 +msgid "Create Wiki or Blog" +msgstr "创建 Wiki 或博客" + +#: plinth/modules/ikiwiki/views.py:145 +#, python-brace-format +msgid "Created wiki {name}." +msgstr "创建 wiki {name}。" + +#: plinth/modules/ikiwiki/views.py:147 +#, python-brace-format +msgid "Could not create wiki: {error}" +msgstr "不能创建 wiki:{error}" + +#: plinth/modules/ikiwiki/views.py:159 +#, python-brace-format +msgid "Created blog {name}." +msgstr "已创建的博客 {name}。" + +#: plinth/modules/ikiwiki/views.py:161 +#, python-brace-format +msgid "Could not create blog: {error}" +msgstr "不能创建博客:{error}" + +#: plinth/modules/ikiwiki/views.py:174 +#, python-brace-format +msgid "{name} deleted." +msgstr "{name} 已删除。" + +#: plinth/modules/ikiwiki/views.py:176 +#, python-brace-format +msgid "Could not delete {name}: {error}" +msgstr "不能删除 {name}:{error}" + +#: plinth/modules/ikiwiki/views.py:182 +msgid "Delete Wiki or Blog" +msgstr "删除 wiki 页面或博客" + +#: plinth/modules/letsencrypt/__init__.py:43 +#: plinth/modules/letsencrypt/templates/letsencrypt.html:38 +#: plinth/modules/letsencrypt/views.py:45 +msgid "Certificates (Let's Encrypt)" +msgstr "证书(Let's Encrypt)" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:41 +#, python-format +msgid "" +"A digital certficate allows users of a web service to verify the identity of " +"the service and to securely communicate with it. %(box_name)s can " +"automatically obtain and setup digital certificates for each available " +"domain. It does so by proving itself to be the owner of a domain to Let's " +"Encrypt, a certficate authority (CA)." +msgstr "" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:52 +msgid "" +"Let's Encrypt is a free, automated, and open certificate authority, run for " +"the public’s benefit by the Internet Security Research Group (ISRG). Please " +"read and agree with the Let's Encrypt Subscriber Agreement before using this service." +msgstr "" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:66 +#: plinth/modules/monkeysphere/templates/monkeysphere.html:70 +msgid "Domain" +msgstr "域名" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:67 +msgid "Certificate Status" +msgstr "证书状态" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:68 +msgid "Website Security" +msgstr "网站安全" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:69 +#: plinth/modules/monkeysphere/templates/monkeysphere.html:72 +msgid "Actions" +msgstr "行动" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:79 +#, python-format +msgid "Expires on %(expiry_date)s" +msgstr "到期日期 %(expiry_date)s" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:85 +msgid "No certficate" +msgstr "没有证书" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:102 +msgid "Revoke" +msgstr "撤销" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:108 +msgid "Re-obtain" +msgstr "重新获取" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:115 +msgid "Obtain" +msgstr "获取" + +#: plinth/modules/letsencrypt/views.py:55 +#, python-brace-format +msgid "Certificate successfully revoked for domain {domain}" +msgstr "成功为域名 {domain} 吊销证书" + +#: plinth/modules/letsencrypt/views.py:60 +#, python-brace-format +msgid "Failed to revoke certificate for domain {domain}: {error}" +msgstr "无法为 {domain} 撤销证书:{error}" + +#: plinth/modules/letsencrypt/views.py:72 +#, python-brace-format +msgid "Certificate successfully obtained for domain {domain}" +msgstr "为域名 {domain} 成功获得证书" + +#: plinth/modules/letsencrypt/views.py:77 +#, python-brace-format +msgid "Failed to obtain certificate for domain {domain}: {error}" +msgstr "未能为域名 {domain} 获取证书:{error}" + +#: plinth/modules/monkeysphere/__init__.py:32 +#: plinth/modules/monkeysphere/templates/monkeysphere.html:35 +#: plinth/modules/monkeysphere/views.py:44 +msgid "Monkeysphere" +msgstr "Monkeysphere" + +#: plinth/modules/monkeysphere/templates/monkeysphere.html:38 +msgid "" +"With Monkeysphere, a PGP key can be generated for each configured domain " +"serving SSH. The PGP public key can then be uploaded to the PGP keyservers. " +"Users connecting to this machine through SSH can verify that they are " +"connecting to the correct host. For users to trust the key, at least one " +"person (usually the machine owner) must sign the key using the regular PGP " +"key signing process. See the Monkeysphere SSH documentation for more details." +msgstr "" + +#: plinth/modules/monkeysphere/templates/monkeysphere.html:53 +msgid "Publishing key to keyserver..." +msgstr "正在发布密钥到密钥服务器..." + +#: plinth/modules/monkeysphere/templates/monkeysphere.html:71 +msgid "GPG Fingerprint" +msgstr "GPG 指纹" + +#: plinth/modules/monkeysphere/templates/monkeysphere.html:83 +#: plinth/modules/names/views.py:45 +msgid "Not Available" +msgstr "不可用" + +#: plinth/modules/monkeysphere/templates/monkeysphere.html:93 +msgid "Generate PGP Key" +msgstr "生成 PGP 密钥" + +#: plinth/modules/monkeysphere/templates/monkeysphere.html:101 +msgid "Publish Key" +msgstr "发布密钥" + +#: plinth/modules/monkeysphere/views.py:58 +msgid "Generated PGP key." +msgstr "已生成的 PGP 密钥。" + +#: plinth/modules/monkeysphere/views.py:83 +msgid "Cancelled key publishing." +msgstr "已取消的密钥发布。" + +#: plinth/modules/monkeysphere/views.py:120 +msgid "Published key to keyserver." +msgstr "已发布到密钥服务器的密钥。" + +#: plinth/modules/monkeysphere/views.py:122 +msgid "Error occurred while publishing key." +msgstr "发布密钥时出现错误。" + +#: plinth/modules/mumble/__init__.py:38 +#: plinth/modules/mumble/templates/mumble.html:26 +#: plinth/modules/mumble/views.py:58 +msgid "Voice Chat (Mumble)" +msgstr "语音聊天(Mumble)" + +#: plinth/modules/mumble/__init__.py:43 +msgid "Mumble Voice Chat Server" +msgstr "Mumble 语音聊天服务器" + +#: plinth/modules/mumble/forms.py:29 +msgid "Enable Mumble daemon" +msgstr "启用 Mumble 守护进程" + +#: plinth/modules/mumble/templates/mumble.html:29 +msgid "" +"Mumble is an open source, low-latency, encrypted, high quality voice chat " +"software." +msgstr "Mumble 是一个开放源码的低延迟、 加密、 高品质语音聊天软件。" + +#: plinth/modules/mumble/templates/mumble.html:36 +msgid "" +"You can connect to your Mumble server on the regular Mumble port 64738. Clients to connect to Mumble from your " +"desktop and Android devices are available." +msgstr "" +"您可以使用常规端口 64738 连接到您的 Mumble 服务器。您可以从桌面和 Android 设备连接 Mumble 客户端。" + +#: plinth/modules/mumble/templates/mumble.html:49 +msgid "Mumble server is running" +msgstr "Mumble 服务器正在运行" + +#: plinth/modules/mumble/templates/mumble.html:52 +msgid "Mumble server is not running" +msgstr "Mumble 服务器未运行" + +#: plinth/modules/names/__init__.py:29 +msgid "HTTP" +msgstr "HTTP" + +#: plinth/modules/names/__init__.py:30 +msgid "HTTPS" +msgstr "HTTPS" + +#: plinth/modules/names/__init__.py:31 +msgid "SSH" +msgstr "SSH" + +#: plinth/modules/names/__init__.py:45 plinth/modules/names/views.py:34 +msgid "Name Services" +msgstr "名称服务" + +#: plinth/modules/networks/__init__.py:108 +#, python-brace-format +msgid "Using DNSSEC on IPv{kind}" +msgstr "在 IPv{kind} 上使用 DNSSEC" + +#: plinth/modules/networks/forms.py:30 +msgid "Connection Type" +msgstr "连接类型" + +#: plinth/modules/networks/forms.py:37 +msgid "Connection Name" +msgstr "连接名称" + +#: plinth/modules/networks/forms.py:39 +msgid "Physical Interface" +msgstr "物理接口" + +#: plinth/modules/networks/forms.py:41 +msgid "The network device that this connection should be bound to." +msgstr "连接应绑定到的网络设备。" + +#: plinth/modules/networks/forms.py:44 +msgid "Firewall Zone" +msgstr "防火墙区域" + +#: plinth/modules/networks/forms.py:45 +msgid "" +"The firewall zone will control which services are available over this " +"interfaces. Select Internal only for trusted networks." +msgstr "防火墙区域将控制哪些服务可用在此接口。选择内部只有受信任的网络。" + +#: plinth/modules/networks/forms.py:49 +msgid "IPv4 Addressing Method" +msgstr "IPv4 寻址方式" + +#: plinth/modules/networks/forms.py:50 +msgid "" +"\"Shared\" method will start a DHCP server and \"Automatic\" method will " +"acquire configuration from a DHCP server." +msgstr "\"共享\"的方法将启动 DHCP 服务器而\"自动\"方法将获得从 DHCP 服务器的配置。" + +#: plinth/modules/networks/forms.py:56 +msgid "Address" +msgstr "地址" + +#: plinth/modules/networks/forms.py:60 +msgid "Netmask" +msgstr "子网掩码" + +#: plinth/modules/networks/forms.py:61 +msgid "" +"Optional value. If left blank, a default netmask based on the address will " +"be used." +msgstr "可选的值。如果为空,则将使用基于地址的默认子网掩码。" + +#: plinth/modules/networks/forms.py:66 +#: plinth/modules/networks/templates/connection_show.html:202 +#: plinth/modules/networks/templates/connection_show.html:241 +msgid "Gateway" +msgstr "网关" + +#: plinth/modules/networks/forms.py:67 +msgid "Optional value." +msgstr "可选的值。" + +#: plinth/modules/networks/forms.py:71 +msgid "DNS Server" +msgstr "DNS 服务器" + +#: plinth/modules/networks/forms.py:72 +msgid "" +"Optional value. If this value is given and IPv4 addressing method is " +"\"Automatic\", the DNS Servers provided by a DHCP server will be ignored." +msgstr "可选的值。如果给出了此值和 IPv4 寻址方法是\"自动\",将忽略由 DHCP 服务器提供的 DNS 服务器。" + +#: plinth/modules/networks/forms.py:78 +msgid "Second DNS Server" +msgstr "备选 DNS 服务器" + +#: plinth/modules/networks/forms.py:79 +msgid "" +"Optional value. If this value is given and IPv4 Addressing Method is " +"\"Automatic\", the DNS Servers provided by a DHCP server will be ignored." +msgstr "可选的值。如果给出了此值和 IPv4 寻址方式是\"自动\",将忽略由 DHCP 服务器提供的 DNS 服务器。" + +#: plinth/modules/networks/forms.py:89 +msgid "-- select --" +msgstr "-- 选择 --" + +#: plinth/modules/networks/forms.py:175 +#: plinth/modules/networks/templates/connection_show.html:144 +msgid "SSID" +msgstr "SSID" + +#: plinth/modules/networks/forms.py:176 +msgid "The visible name of the network." +msgstr "可见网络的名称。" + +#: plinth/modules/networks/forms.py:178 +#: plinth/modules/networks/templates/connection_show.html:157 +msgid "Mode" +msgstr "模式" + +#: plinth/modules/networks/forms.py:183 +msgid "Authentication Mode" +msgstr "身份验证模式" + +#: plinth/modules/networks/forms.py:184 +msgid "" +"Select WPA if the wireless network is secured and requires clients to have " +"the password to connect." +msgstr "如果无线网络安全的和要求客户端具有密码才能连接,请选择 WPA。" + +#: plinth/modules/networks/forms.py:188 +msgid "Passphrase" +msgstr "密码" + +#: plinth/modules/networks/networks.py:36 +#: plinth/modules/networks/networks.py:56 +msgid "Network Connections" +msgstr "网络连接" + +#: plinth/modules/networks/networks.py:38 +#: plinth/modules/networks/networks.py:242 +msgid "Nearby Wi-Fi Networks" +msgstr "附近的无线网络" + +#: plinth/modules/networks/networks.py:40 +#: plinth/modules/networks/networks.py:264 +msgid "Add Connection" +msgstr "添加连接" + +#: plinth/modules/networks/networks.py:46 +msgid "Networks" +msgstr "网络" + +#: plinth/modules/networks/networks.py:66 +msgid "Cannot show connection: Connection not found." +msgstr "不能显示连接: 找不到连接。" + +#: plinth/modules/networks/networks.py:100 +msgid "Show Connection information" +msgstr "显示连接信息" + +#: plinth/modules/networks/networks.py:113 +msgid "Cannot edit connection: Connection not found." +msgstr "不能编辑连接: 找不到连接。" + +#: plinth/modules/networks/networks.py:119 +msgid "This type of connection is not yet understood." +msgstr "这种类型的连接尚没有引入。" + +#: plinth/modules/networks/networks.py:139 +#: plinth/modules/networks/networks.py:198 +#: plinth/modules/networks/templates/connections_edit.html:34 +msgid "Edit Connection" +msgstr "编辑连接" + +#: plinth/modules/networks/networks.py:209 +#, python-brace-format +msgid "Activated connection {name}." +msgstr "激活的连接 {name}。" + +#: plinth/modules/networks/networks.py:212 +msgid "Failed to activate connection: Connection not found." +msgstr "未能激活连接: 找不到连接。" + +#: plinth/modules/networks/networks.py:216 +#, python-brace-format +msgid "Failed to activate connection {name}: No suitable device is available." +msgstr "未能激活连接 {name}: 没有合适的设备是可用。" + +#: plinth/modules/networks/networks.py:229 +#, python-brace-format +msgid "Deactivated connection {name}." +msgstr "停用的连接 {name}。" + +#: plinth/modules/networks/networks.py:232 +msgid "Failed to de-activate connection: Connection not found." +msgstr "无法取消激活连接: 找不到连接。" + +#: plinth/modules/networks/networks.py:282 +msgid "Adding New Ethernet Connection" +msgstr "添加新的以太网连接" + +#: plinth/modules/networks/networks.py:300 +msgid "Adding New PPPoE Connection" +msgstr "添加新的 PPPoE 连接" + +#: plinth/modules/networks/networks.py:332 +msgid "Adding New Wi-Fi Connection" +msgstr "添加新的 Wi-Fi 连接" + +#: plinth/modules/networks/networks.py:346 +#, python-brace-format +msgid "Connection {name} deleted." +msgstr "连接 {name} 已删除。" + +#: plinth/modules/networks/networks.py:349 +#: plinth/modules/networks/networks.py:358 +msgid "Failed to delete connection: Connection not found." +msgstr "删除连接失败: 找不到连接。" + +#: plinth/modules/networks/networks.py:363 +#: plinth/modules/networks/templates/connections_delete.html:26 +msgid "Delete Connection" +msgstr "删除连接" + +#: plinth/modules/networks/templates/connection_show.html:43 +msgid "Edit connection" +msgstr "编辑连接" + +#: plinth/modules/networks/templates/connection_show.html:43 +#: plinth/templates/base.html:123 +msgid "Edit" +msgstr "編輯" + +#: plinth/modules/networks/templates/connection_show.html:50 +#: plinth/modules/networks/templates/connections_list.html:78 +msgid "Deactivate" +msgstr "停用" + +#: plinth/modules/networks/templates/connection_show.html:57 +#: plinth/modules/networks/templates/connections_list.html:86 +msgid "Activate" +msgstr "激活" + +#: plinth/modules/networks/templates/connection_show.html:63 +msgid "Delete connection" +msgstr "删除连接" + +#: plinth/modules/networks/templates/connection_show.html:63 +msgid "Delete" +msgstr "删除" + +#: plinth/modules/networks/templates/connection_show.html:66 +#: plinth/modules/networks/templates/connections_diagram.html:73 +#: plinth/modules/networks/templates/connections_diagram.html:76 +#: plinth/modules/networks/templates/connections_diagram.html:105 +#: plinth/modules/networks/templates/connections_diagram.html:127 +msgid "Connection" +msgstr "连接" + +#: plinth/modules/networks/templates/connection_show.html:71 +msgid "Primary connection" +msgstr "主连接" + +#: plinth/modules/networks/templates/connection_show.html:73 +#: plinth/modules/networks/templates/connection_show.html:217 +#: plinth/modules/networks/templates/connection_show.html:256 +msgid "yes" +msgstr "是的" + +#: plinth/modules/networks/templates/connection_show.html:84 +msgid "Device" +msgstr "设备" + +#: plinth/modules/networks/templates/connection_show.html:88 +msgid "State" +msgstr "状态" + +#: plinth/modules/networks/templates/connection_show.html:93 +msgid "State reason" +msgstr "状态原因" + +#: plinth/modules/networks/templates/connection_show.html:102 +msgid "MAC address" +msgstr "MAC 地址" + +#: plinth/modules/networks/templates/connection_show.html:106 +msgid "Interface" +msgstr "接口" + +#: plinth/modules/networks/templates/connection_show.html:110 +msgid "Description" +msgstr "描述" + +#: plinth/modules/networks/templates/connection_show.html:116 +msgid "Physical Link" +msgstr "物理链路" + +#: plinth/modules/networks/templates/connection_show.html:121 +msgid "Link state" +msgstr "链路状态" + +#: plinth/modules/networks/templates/connection_show.html:125 +msgid "cable is connected" +msgstr "线缆已连接" + +#: plinth/modules/networks/templates/connection_show.html:128 +msgid "please check cable" +msgstr "请检查线缆" + +#: plinth/modules/networks/templates/connection_show.html:133 +#: plinth/modules/networks/templates/connection_show.html:149 +msgid "Speed" +msgstr "速度" + +#: plinth/modules/networks/templates/connection_show.html:135 +#, python-format +msgid "%(ethernet_speed)s Mbit/s" +msgstr "%(ethernet_speed)s Mbit/s" + +#: plinth/modules/networks/templates/connection_show.html:151 +#, python-format +msgid "%(wireless_bitrate)s Mbit/s" +msgstr "%(wireless_bitrate)s Mbit/s" + +#: plinth/modules/networks/templates/connection_show.html:163 +msgid "Signal strength" +msgstr "信号强度" + +#: plinth/modules/networks/templates/connection_show.html:173 +msgid "Channel" +msgstr "信道" + +#: plinth/modules/networks/templates/connection_show.html:181 +msgid "IPv4" +msgstr "IPv4" + +#: plinth/modules/networks/templates/connection_show.html:186 +#: plinth/modules/networks/templates/connection_show.html:227 +msgid "Method" +msgstr "方法" + +#: plinth/modules/networks/templates/connection_show.html:193 +#: plinth/modules/networks/templates/connection_show.html:234 +msgid "IP address" +msgstr "IP 地址" + +#: plinth/modules/networks/templates/connection_show.html:209 +#: plinth/modules/networks/templates/connection_show.html:248 +msgid "DNS server" +msgstr "DNS 服务器" + +#: plinth/modules/networks/templates/connection_show.html:216 +#: plinth/modules/networks/templates/connection_show.html:255 +msgid "Default" +msgstr "默认" + +#: plinth/modules/networks/templates/connection_show.html:222 +msgid "IPv6" +msgstr "IPv6" + +#: plinth/modules/networks/templates/connection_show.html:263 +msgid "This connection is not active." +msgstr "此连接未处于激活状态。" + +#: plinth/modules/networks/templates/connection_show.html:266 +msgid "Security" +msgstr "安全" + +#: plinth/modules/networks/templates/connection_show.html:271 +#: plinth/modules/networks/templates/connection_show.html:291 +#: plinth/modules/networks/templates/connection_show.html:310 +msgid "Firewall zone" +msgstr "防火墙区域" + +#: plinth/modules/networks/templates/connection_show.html:280 +msgid "" +"This interface should be connected to a local network/machine. If you " +"connect this interface to a public network, services meant to be available " +"only internally will become available externally. This is a security risk." +msgstr "此接口应该连接到本地网络。 如果您将此接口连接到公用网络,意味着只为内网提供的服务将成开放给外网。这会产生安全风险。" + +#: plinth/modules/networks/templates/connection_show.html:300 +msgid "" +"This interface should receive your Internet connection. If you connect it to " +"a local network/machine, many services meant to available only internally " +"will not be available." +msgstr "此接口应该接收您的 Internet 连接。如果你将其连接到本地网络,这意味着很多仅在内网可用的服务将不可用。" + +#: plinth/modules/networks/templates/connection_show.html:319 +#, python-format +msgid "" +"This interface is not maintained by %(box_name)s. Its security status is " +"unknown to %(box_name)s. Many %(box_name)s services may not be available on " +"this interface. It is recommended that you deactivate or delete this " +"connection and re-configure it." +msgstr "" + +#: plinth/modules/networks/templates/connections_add.html:34 +#: plinth/modules/networks/templates/connections_type_select.html:34 +msgid "Create..." +msgstr "创建..." + +#: plinth/modules/networks/templates/connections_create.html:34 +msgid "Create Connection" +msgstr "创建连接" + +#: plinth/modules/networks/templates/connections_delete.html:29 +#, python-format +msgid "Delete connection %(name)s permanently?" +msgstr "永久删除连接 %(name)s?" + +#: plinth/modules/networks/templates/connections_diagram.html:65 +msgid "Internet" +msgstr "互联网" + +#: plinth/modules/networks/templates/connections_diagram.html:70 +#: plinth/modules/networks/templates/connections_diagram.html:102 +msgid "Spacing" +msgstr "间距" + +#: plinth/modules/networks/templates/connections_diagram.html:78 +msgid "External" +msgstr "外网" + +#: plinth/modules/networks/templates/connections_diagram.html:83 +#: plinth/modules/networks/templates/connections_diagram.html:113 +#: plinth/network.py:37 +msgid "Ethernet" +msgstr "以太网" + +#: plinth/modules/networks/templates/connections_diagram.html:86 +#: plinth/modules/networks/templates/connections_diagram.html:116 +#: plinth/network.py:38 +msgid "Wi-Fi" +msgstr "Wi-Fi" + +#: plinth/modules/networks/templates/connections_diagram.html:89 +#, python-format +msgid "Show connection %(connection.name)s" +msgstr "显示连接 %(connection.name)s" + +#: plinth/modules/networks/templates/connections_diagram.html:107 +msgid "Internal" +msgstr "内网" + +#: plinth/modules/networks/templates/connections_diagram.html:119 +#, python-format +msgid "Show connection %(name)s" +msgstr "显示连接 %(name)s" + +#: plinth/modules/networks/templates/connections_diagram.html:131 +msgid "Computer" +msgstr "计算机" + +#: plinth/modules/networks/templates/connections_list.html:67 +#, python-format +msgid "Delete connection %(name)s" +msgstr "删除连接 %(name)s" + +#: plinth/modules/networks/templates/connections_list.html:92 +msgid "Active" +msgstr "激活" + +#: plinth/modules/networks/templates/connections_list.html:95 +msgid "Inactive" +msgstr "未激活" + +#: plinth/modules/openvpn/__init__.py:38 +#: plinth/modules/openvpn/templates/openvpn.html:35 +#: plinth/modules/openvpn/views.py:62 +msgid "Virtual Private Network (OpenVPN)" +msgstr "虚拟专用网络(OpenVPN)" + +#: plinth/modules/openvpn/__init__.py:43 +msgid "OpenVPN" +msgstr "OpenVPN" + +#: plinth/modules/openvpn/forms.py:29 +msgid "Enable OpenVPN server" +msgstr "启用 OpenVPN 服务器" + +#: plinth/modules/openvpn/templates/openvpn.html:38 +#, python-format +msgid "" +"Virtual Private Network (VPN) is a technique for securely connecting two " +"devices in order to access resources of a private network. While you are " +"away from home, you can connect to your %(box_name)s in order to join your " +"home network and access private/internal services provided by %(box_name)s. " +"You can also access the rest of the Internet via %(box_name)s for added " +"security and anonymity." +msgstr "" + +#: plinth/modules/openvpn/templates/openvpn.html:51 +msgid "Profile" +msgstr "配置文件" + +#: plinth/modules/openvpn/templates/openvpn.html:54 +#, python-format +msgid "" +"To connect to %(box_name)s's VPN, you need to download a profile and feed it " +"to an OpenVPN client on your mobile or desktop machine. OpenVPN Clients are " +"available for most platforms. See documentation on recommended clients and instructions on how to " +"configure them." +msgstr "" + +#: plinth/modules/openvpn/templates/openvpn.html:66 +#, python-format +msgid "Profile is specific to each user of %(box_name)s. Keep it a secret." +msgstr "配置文件是特定于每个 %(box_name)s 用户的。请保持其私密。" + +#: plinth/modules/openvpn/templates/openvpn.html:76 +msgid "Download my profile" +msgstr "下载我的配置文件" + +#: plinth/modules/openvpn/templates/openvpn.html:85 +#, python-format +msgid "" +"OpenVPN has not yet been setup. Performing a secure setup takes a very long " +"time. Depending on how fast your %(box_name)s is, it may even take hours. " +"If the setup is interrupted, you may start it again." +msgstr "" +"OpenVPN 尚未安装。 执行安全的安装需要很长的时间。 根据您的 %(box_name)s 运行速度,它甚至可能需要小时。 " +"如果安装程序中断,您可以重新启动。" + +#: plinth/modules/openvpn/templates/openvpn.html:97 +msgid "Start setup" +msgstr "启动安装程序" + +#: plinth/modules/openvpn/templates/openvpn.html:104 +msgid "OpenVPN setup is running" +msgstr "OpenVPN 安装程序正在运行" + +#: plinth/modules/openvpn/templates/openvpn.html:108 +#, python-format +msgid "" +"To perform a secure setup, this process takes a very long time. Depending " +"on how fast your %(box_name)s is, it may even take hours. If the setup is " +"interrupted, you may start it again." +msgstr "" +"若要执行更安全的安装,此过程需要很长的时间。根据您的 %(box_name)s 运行速度,它甚至可能需要数小时。如果安装程序中断,您可以重新启动。" + +#: plinth/modules/openvpn/templates/openvpn.html:121 +msgid "OpenVPN server is running" +msgstr "OpenVPN 服务正在运行" + +#: plinth/modules/openvpn/templates/openvpn.html:124 +msgid "OpenVPN server is not running" +msgstr "OpenVPN 服务器未运行" + +#: plinth/modules/openvpn/views.py:124 +msgid "Setup completed." +msgstr "安装已完成。" + +#: plinth/modules/openvpn/views.py:126 +msgid "Setup failed." +msgstr "安装失败。" + +#: plinth/modules/owncloud/owncloud.py:38 +msgid "Enable ownCloud" +msgstr "启用 ownCloud" + +#: plinth/modules/owncloud/owncloud.py:44 +#: plinth/modules/owncloud/templates/owncloud.html:26 +msgid "File Hosting (ownCloud)" +msgstr "文件存储(ownCloud)" + +#: plinth/modules/owncloud/owncloud.py:51 +#: plinth/modules/owncloud/owncloud.py:80 +msgid "ownCloud" +msgstr "ownCloud" + +#: plinth/modules/owncloud/owncloud.py:97 +msgid "ownCloud enabled" +msgstr "ownCloud 已启用" + +#: plinth/modules/owncloud/owncloud.py:100 +msgid "ownCloud disabled" +msgstr "ownCloud 已禁用" + +#: plinth/modules/owncloud/templates/owncloud.html:29 +msgid "" +"ownCloud gives you universal access to your files through a web interface or " +"WebDAV. It also provides a platform to easily view & sync your contacts, " +"calendars and bookmarks across all your devices and enables basic editing " +"right on the web. Installation has minimal server requirements, doesn't need " +"special permissions and is quick. ownCloud is extendable via a simple but " +"powerful API for applications and plugins." +msgstr "" + +#: plinth/modules/owncloud/templates/owncloud.html:41 +msgid "" +"When enabled, the ownCloud installation will be available from /owncloud path on the web server. Visit this URL to set up " +"the initial administration account for ownCloud." +msgstr "" + +#: plinth/modules/owncloud/templates/owncloud.html:59 +msgid "Apply changes" +msgstr "应用更改" + +#: plinth/modules/pagekite/__init__.py:35 plinth/modules/pagekite/views.py:46 +msgid "Public Visibility (PageKite)" +msgstr "公开可见性(PageKite)" + +#: plinth/modules/pagekite/forms.py:46 +msgid "Enable PageKite" +msgstr "启用 PageKite" + +#: plinth/modules/pagekite/forms.py:49 +msgid "Server domain" +msgstr "服务器域" + +#: plinth/modules/pagekite/forms.py:51 +msgid "" +"Select your pagekite server. Set \"pagekite.net\" to use the default " +"pagekite.net server." +msgstr "选择您的 pagekite 服务器。设置\"pagekite.net\"以便使用默认的 pagekite.net 服务器。" + +#: plinth/modules/pagekite/forms.py:55 +msgid "Server port" +msgstr "服务器端口" + +#: plinth/modules/pagekite/forms.py:56 +msgid "Port of your pagekite server (default: 80)" +msgstr "你 pagekite 服务器的端口 (默认: 80)" + +#: plinth/modules/pagekite/forms.py:58 +msgid "Kite name" +msgstr "Kite 名字" + +#: plinth/modules/pagekite/forms.py:59 +msgid "Example: mybox.pagekite.me" +msgstr "示例: mybox.pagekite.me" + +#: plinth/modules/pagekite/forms.py:62 +msgid "Invalid kite name" +msgstr "无效的 Kite 名称" + +#: plinth/modules/pagekite/forms.py:65 +msgid "Kite secret" +msgstr "Kite 密码" + +#: plinth/modules/pagekite/forms.py:67 +msgid "" +"A secret associated with the kite or the default secret for your account if " +"no secret is set on the kite." +msgstr "" + +#: plinth/modules/pagekite/forms.py:83 +msgid "Kite details set" +msgstr "Kite 详细信息设置" + +#: plinth/modules/pagekite/forms.py:90 +msgid "Pagekite server set" +msgstr "Pagekite 服务器设置" + +#: plinth/modules/pagekite/forms.py:96 +msgid "PageKite enabled" +msgstr "PageKite 已启用" + +#: plinth/modules/pagekite/forms.py:99 +msgid "PageKite disabled" +msgstr "PageKite 已禁用" + +#: plinth/modules/pagekite/forms.py:135 +#, python-brace-format +msgid "Service enabled: {name}" +msgstr "启用的服务:{name}" + +#: plinth/modules/pagekite/forms.py:139 +#, python-brace-format +msgid "Service disabled: {name}" +msgstr "已禁用的服务:{name}" + +#: plinth/modules/pagekite/forms.py:150 +msgid "protocol" +msgstr "协议" + +#: plinth/modules/pagekite/forms.py:153 +msgid "external (frontend) port" +msgstr "外网(前端)端口" + +#: plinth/modules/pagekite/forms.py:156 +msgid "internal (freedombox) port" +msgstr "内网(freedombox)端口" + +#: plinth/modules/pagekite/forms.py:158 +msgid "Enable Subdomains" +msgstr "启用子域" + +#: plinth/modules/pagekite/forms.py:191 +msgid "Deleted custom service" +msgstr "删除自定义服务" + +#: plinth/modules/pagekite/forms.py:225 +msgid "" +"This service is available as a standard service. Please use the \"Standard " +"Services\" page to enable it." +msgstr "这项服务是可作为标准的服务。请使用\"标准服务\"页启用它。" + +#: plinth/modules/pagekite/forms.py:234 +msgid "Added custom service" +msgstr "已添加的自定义服务" + +#: plinth/modules/pagekite/forms.py:237 +msgid "This service already exists" +msgstr "此服务已存在" + +#: plinth/modules/pagekite/templates/pagekite_configure.html:33 +msgid "PageKite Account" +msgstr "PageKite 帐户" + +#: plinth/modules/pagekite/templates/pagekite_configure.html:41 +msgid "Save settings" +msgstr "保存设置" + +#: plinth/modules/pagekite/templates/pagekite_custom_services.html:44 +msgid "" +"Warning:
Your PageKite frontend server may not support all the " +"protocol/port combinations that you are able to define here. For example, " +"HTTPS on ports other than 443 is known to cause problems." +msgstr "" + +#: plinth/modules/pagekite/templates/pagekite_custom_services.html:56 +msgid "Create a custom service" +msgstr "创建一个自定义的服务" + +#: plinth/modules/pagekite/templates/pagekite_custom_services.html:64 +msgid "Add Service" +msgstr "添加服务" + +#: plinth/modules/pagekite/templates/pagekite_custom_services.html:71 +msgid "Existing custom services" +msgstr "现有的自定义服务" + +#: plinth/modules/pagekite/templates/pagekite_custom_services.html:74 +msgid "You don't have any Custom Services enabled" +msgstr "你没有启用任何自定义服务" + +#: plinth/modules/pagekite/templates/pagekite_custom_services.html:89 +#, python-format +msgid "connected to %(backend_host)s:%(backend_port)s" +msgstr "连接到 %(backend_host)s:%(backend_port)s" + +#: plinth/modules/pagekite/templates/pagekite_custom_services.html:101 +msgid "Delete this service" +msgstr "删除此服务" + +#: plinth/modules/pagekite/templates/pagekite_introduction.html:26 +#, python-format +msgid "" +"PageKite is a system for exposing %(box_name)s services when you don't have " +"a direct connection to the Internet. You only need this if your %(box_name)s " +"services are unreachable from the rest of the Internet. This includes the " +"following situations:" +msgstr "" + +#: plinth/modules/pagekite/templates/pagekite_introduction.html:37 +#, python-format +msgid "%(box_name)s is behind a restricted firewall." +msgstr "%(box_name)s 位于受限的防火墙的后面。" + +#: plinth/modules/pagekite/templates/pagekite_introduction.html:43 +#, python-format +msgid "" +"%(box_name)s is connected to a (wireless) router which you don't control." +msgstr "%(box_name)s 已连接到你不能控制的(无线)路由器。" + +#: plinth/modules/pagekite/templates/pagekite_introduction.html:50 +msgid "" +"Your ISP does not provide you an external IP address and instead provides " +"Internet connection through NAT." +msgstr "您的 ISP 没有提供外部的 IP 地址而是通过提供 NAT 连接互联网。" + +#: plinth/modules/pagekite/templates/pagekite_introduction.html:57 +msgid "" +"Your ISP does not provide you a static IP address and your IP address " +"changes evertime you connect to Internet." +msgstr "您的 ISP 不提供你一个静态的 IP 地址且你连接到互联网的 IP 地址每次会更改。" + +#: plinth/modules/pagekite/templates/pagekite_introduction.html:63 +msgid "Your ISP limits incoming connections." +msgstr "您的 ISP 限制传入的连接。" + +#: plinth/modules/pagekite/templates/pagekite_introduction.html:67 +#, python-format +msgid "" +"PageKite works around NAT, firewalls and IP-address limitations by using a " +"combination of tunnels and reverse proxies. You can use any pagekite service " +"provider, for example pagekite.net. In " +"future it might be possible to use your buddy's %(box_name)s for this." +msgstr "" + +#: plinth/modules/pagekite/templates/pagekite_introduction.html:78 +#: plinth/modules/pagekite/views.py:36 +msgid "Configure PageKite" +msgstr "配置 PageKite" + +#: plinth/modules/pagekite/templates/pagekite_standard_services.html:40 +msgid "Warning:
" +msgstr "警告:
" + +#: plinth/modules/pagekite/templates/pagekite_standard_services.html:43 +msgid "" +"Published services are accessible and attackable from the evil internet." +msgstr "已发布的服务可从互联网访问并受到邪恶攻击。" + +#: plinth/modules/pagekite/templates/pagekite_standard_services.html:50 +msgid "Exposing SSH with the default password for 'fbx' is a VERY BAD idea." +msgstr "将 SSH 暴露出来使用默认密码 \"fbx\" 是非常不明智的。" + +#: plinth/modules/pagekite/templates/pagekite_standard_services.html:65 +msgid "Save Services" +msgstr "保存服务" + +#: plinth/modules/pagekite/utils.py:53 +msgid "Web Server (HTTP)" +msgstr "Web 服务器(HTTP)" + +#: plinth/modules/pagekite/utils.py:54 +#, python-brace-format +msgid "Site will be available at http://{0}" +msgstr "网站可从 http://{0} 访问" + +#: plinth/modules/pagekite/utils.py:63 +msgid "Web Server (HTTPS)" +msgstr "Web 服务器(HTTPS)" + +#: plinth/modules/pagekite/utils.py:64 +#, python-brace-format +msgid "Site will be available at https://{0}" +msgstr "网站可从 https://{0} 访问" + +#: plinth/modules/pagekite/utils.py:73 +msgid "Secure Shell (SSH)" +msgstr "安全 Shell(SSH)" + +#: plinth/modules/pagekite/utils.py:74 +msgid "" +"See SSH client setup instructions" +msgstr "" +"请参见 SSH 客户端安装 " +"说明" + +#: plinth/modules/pagekite/utils.py:276 +msgid "Pagekite" +msgstr "Pagekite" + +#: plinth/modules/pagekite/views.py:34 +msgid "About PageKite" +msgstr "关于 PageKite" + +#: plinth/modules/pagekite/views.py:38 +msgid "Standard Services" +msgstr "标准服务" + +#: plinth/modules/pagekite/views.py:40 +msgid "Custom Services" +msgstr "定制服务" + +#: plinth/modules/power/__init__.py:32 plinth/modules/power/views.py:33 +#: plinth/modules/power/views.py:47 plinth/modules/power/views.py:62 +msgid "Power" +msgstr "电源" + +#: plinth/modules/power/templates/power.html:29 +msgid "Restart or shut down the system." +msgstr "重新启动或关闭系统。" + +#: plinth/modules/power/templates/power.html:34 +msgid "Restart »" +msgstr "重新启动 »" + +#: plinth/modules/power/templates/power.html:37 +msgid "Shut Down »" +msgstr "关闭 »" + +#: plinth/modules/power/templates/power_restart.html:29 +msgid "" +"Are you sure you want to restart? You will not be able to access this web " +"interface for a few minutes until the system is restarted." +msgstr "你确定要重新启动?你将在几分钟内不能访问此 web 界面,直到重新启动系统。" + +#: plinth/modules/power/templates/power_restart.html:42 +msgid "Restart Now" +msgstr "现在重新启动" + +#: plinth/modules/power/templates/power_shutdown.html:29 +msgid "" +"Are you sure you want to shut down? You will not be able to access this web " +"interface after shut down." +msgstr "你确定要关闭? 关闭以后将不能访问此 web 界面。" + +#: plinth/modules/power/templates/power_shutdown.html:41 +msgid "Shut Down Now" +msgstr "现在关闭" + +#: plinth/modules/privoxy/__init__.py:39 +#: plinth/modules/privoxy/templates/privoxy.html:26 +#: plinth/modules/privoxy/views.py:59 +msgid "Web Proxy (Privoxy)" +msgstr "网页代理(Privoxy)" + +#: plinth/modules/privoxy/__init__.py:44 +msgid "Privoxy Web Proxy" +msgstr "Privoxy 网页代理" + +#: plinth/modules/privoxy/__init__.py:86 +#, python-brace-format +msgid "Access {url} with proxy {proxy} on tcp{kind}" +msgstr "在 tcp{kind} 上通过 {proxy} 访问 {url}" + +#: plinth/modules/privoxy/forms.py:29 +msgid "Enable Privoxy" +msgstr "启用 Privoxy" + +#: plinth/modules/privoxy/templates/privoxy.html:29 +msgid "" +"Privoxy is a non-caching web proxy with advanced filtering capabilities for " +"enhancing privacy, modifying web page data and HTTP headers, controlling " +"access, and removing ads and other obnoxious Internet junk." +msgstr "" + +#: plinth/modules/privoxy/templates/privoxy.html:38 +#, python-format +msgid "" +"You can use Privoxy by modifying your browser proxy settings to your " +"%(box_name)s hostname (or IP address) with port 8118. While using Privoxy, " +"you can see its configuration details and documentation at http://config.privoxy.org/ or http://p.p." +msgstr "" + +#: plinth/modules/privoxy/templates/privoxy.html:53 +msgid "Privoxy is running" +msgstr "Privoxy 正在运行" + +#: plinth/modules/privoxy/templates/privoxy.html:56 +msgid "Privoxy is not running" +msgstr "Privoxy 未运行" + +#: plinth/modules/quassel/__init__.py:36 +#: plinth/modules/quassel/templates/quassel.html:26 +#: plinth/modules/quassel/views.py:54 +msgid "IRC Client (Quassel)" +msgstr "IRC 客户端(Quassel)" + +#: plinth/modules/quassel/__init__.py:41 +msgid "Quassel IRC Client" +msgstr "Quassel IRC 客户端" + +#: plinth/modules/quassel/forms.py:29 +msgid "Enable Quassel core service" +msgstr "启用 Quassel 核心服务" + +#: plinth/modules/quassel/templates/quassel.html:29 +#, python-format +msgid "" +"Quassel is an IRC application that is split into two parts, a \"core\" and a " +"\"client\". This allows the core to remain connected to IRC servers, and to " +"continue receiving messages, even when the client is disconnected. " +"%(box_name)s can run the Quassel core service keeping you always online and " +"one or more Quassel clients from a desktop or a mobile can be used to " +"connect and disconnect from it." +msgstr "" + +#: plinth/modules/quassel/templates/quassel.html:41 +msgid "" +"You can connect to your Quassel core on the default Quassel port 4242. " +"Clients to connect to Quassel from your desktop and mobile devices are available." +msgstr "" + +#: plinth/modules/quassel/templates/quassel.html:55 +msgid "Quassel core service is running" +msgstr "Quassel 核心服务正在运行" + +#: plinth/modules/quassel/templates/quassel.html:58 +msgid "Quassel core service is not running" +msgstr "Quassel 核心服务未运行" + +#: plinth/modules/repro/__init__.py:36 +#: plinth/modules/repro/templates/repro.html:26 +#: plinth/modules/repro/views.py:55 +msgid "SIP Server (repro)" +msgstr "SIP 服务器(摄制)" + +#: plinth/modules/repro/__init__.py:41 +msgid "repro SIP Server" +msgstr "repro SIP 服务器" + +#: plinth/modules/repro/forms.py:29 +msgid "Enable repro service" +msgstr "启用 repro 服务" + +#: plinth/modules/repro/templates/repro.html:29 +msgid "" +"repro provides various SIP services that a SIP softphone can utilize to " +"provide audio and video calls as well as presence and instant messaging. " +"repro provides a server and SIP user accounts that clients can use to let " +"their presence known. It also acts as a proxy to federate SIP " +"communications to other servers on the Internet similar to email." +msgstr "" + +#: plinth/modules/repro/templates/repro.html:39 +msgid "" +"To make SIP calls, a client application is needed. Available clients include " +"Jitsi (for computers) and CSipSimple (for Android phones)." +msgstr "" + +#: plinth/modules/repro/templates/repro.html:48 +msgid "" +"Note: Before using repro, domains and users will need to " +"be configured using the web-based " +"configuration panel. Users in the admin group will be able to " +"log in to the repro configuration panel. After setting the domain, it is " +"required to restart the repro service. Disable the service and re-enable it." +msgstr "" + +#: plinth/modules/repro/templates/repro.html:63 +msgid "repro service is running" +msgstr "repro 服务正在运行" + +#: plinth/modules/repro/templates/repro.html:66 +msgid "repro service is not running" +msgstr "repro 服务未运行" + +#: plinth/modules/restore/__init__.py:36 +#: plinth/modules/restore/templates/restore_index.html:26 +#: plinth/modules/restore/views.py:46 +msgid "Unhosted Storage (reStore)" +msgstr "未托管存储(reStrore)" + +#: plinth/modules/restore/__init__.py:41 +msgid "reStore" +msgstr "reStore" + +#: plinth/modules/restore/forms.py:29 +msgid "Enable reStore" +msgstr "启用 reStore" + +#: plinth/modules/restore/templates/restore_index.html:29 +#, python-format +msgid "" +"reStore is a server for unhosted web " +"applications. The idea is to uncouple web applications from data. No " +"matter where a web application is served from, the data can be stored on an " +"unhosted storage server of user's choice. With reStore, your %(box_name)s " +"becomes your unhosted storage server." +msgstr "" + +#: plinth/modules/restore/templates/restore_index.html:40 +msgid "" +"You can create and edit accounts in the reStore web-" +"interface." +msgstr "您可以在 reStrore 的 web 界面 中创建和编辑帐户 。" + +#: plinth/modules/roundcube/__init__.py:36 +#: plinth/modules/roundcube/templates/roundcube.html:26 +#: plinth/modules/roundcube/views.py:64 +msgid "Email Client (Roundcube)" +msgstr "邮件客户端(Roundcube)" + +#: plinth/modules/roundcube/forms.py:29 +msgid "Enable Roundcube" +msgstr "启用 Roundcube" + +#: plinth/modules/roundcube/templates/roundcube.html:29 +msgid "" +"Roundcube webmail is a browser-based multilingual IMAP client with an " +"application-like user interface. It provides full functionality you expect " +"from an email client, including MIME support, address book, folder " +"manipulation, message searching and spell checking." +msgstr "" + +#: plinth/modules/roundcube/templates/roundcube.html:39 +msgid "" +"You can access Roundcube from /roundcube. Provide " +"the username and password of the email account you wish to access followed " +"by the domain name of the IMAP server for your email provider, like " +"imap.example.com. For IMAP over SSL (recommended), fill the " +"server field like imaps://imap.example.com." +msgstr "" + +#: plinth/modules/roundcube/templates/roundcube.html:50 +msgid "" +"For Gmail, username will be your Gmail address, password will be your Google " +"account password and server will be imaps://imap.gmail.com. " +"Note that you will also need to enable \"Less secure apps\" in your Google " +"account settings (https://www.google.com/settings/security/lesssecureapps)." +msgstr "" + +#: plinth/modules/shaarli/__init__.py:37 +#: plinth/modules/shaarli/templates/shaarli.html:26 +#: plinth/modules/shaarli/views.py:52 +msgid "Bookmarks (Shaarli)" +msgstr "书签(Shaarli)" + +#: plinth/modules/shaarli/__init__.py:42 +msgid "Shaarli" +msgstr "Shaarli" + +#: plinth/modules/shaarli/forms.py:29 +msgid "Enable Shaarli" +msgstr "启用 Shaarli" + +#: plinth/modules/shaarli/templates/shaarli.html:28 +msgid "Shaarli allows you to save and share bookmarks." +msgstr "Shaarli 允许您保存和共享书签。" + +#: plinth/modules/shaarli/templates/shaarli.html:31 +msgid "" +"When enabled, Shaarli will be available from /shaarli path on the web server. Note that Shaarli only supports a single user " +"account, which you will need to setup on the initial visit." +msgstr "" +"当启用时,Shaarli 将可从 /shaarli 路径访问。请注意,Shaarli " +"只支持单用户帐户,您在首次访问时安装程序。" + +#: plinth/modules/system/system.py:26 +msgid "System" +msgstr "系统" + +#: plinth/modules/system/system.py:33 +#: plinth/modules/system/templates/system.html:25 +#: plinth/templates/base.html:109 +msgid "System Configuration" +msgstr "系统配置" + +#: plinth/modules/system/templates/system.html:28 +#, python-format +msgid "Here you can administrate the underlying system of your %(box_name)s." +msgstr "在这里您可以管理 %(box_name)s 的底层系统。" + +#: plinth/modules/system/templates/system.html:35 +#, python-format +msgid "" +"The options affect the %(box_name)s at its most general level, so be careful!" +msgstr "此选项会在通用层面影响 %(box_name)s 所以要小心!" + +#: plinth/modules/tor/__init__.py:48 plinth/modules/tor/templates/tor.html:35 +msgid "Anonymity Network (Tor)" +msgstr "匿名网络(Tor)" + +#: plinth/modules/tor/__init__.py:53 +msgid "Tor Anonymity Network" +msgstr "Tor 匿名网络" + +#: plinth/modules/tor/__init__.py:58 +msgid "Tor Bridge Relay" +msgstr "Tor 网桥中继" + +#: plinth/modules/tor/__init__.py:76 plinth/modules/tor/views.py:144 +msgid "Tor Hidden Service" +msgstr "隐藏的 Tor 服务" + +#: plinth/modules/tor/__init__.py:222 +msgid "Tor relay port available" +msgstr "Tor 中继端口可用" + +#: plinth/modules/tor/__init__.py:230 +msgid "Obfs3 transport registered" +msgstr "已注册 Obfs3 传输" + +#: plinth/modules/tor/__init__.py:236 +msgid "Obfs4 transport registered" +msgstr "已注册 Obfs4 传输" + +#: plinth/modules/tor/__init__.py:273 +#, python-brace-format +msgid "Access URL {url} on tcp{kind} via Tor" +msgstr "在 tcp{kind} 上通过 Tor 访问 {url}" + +#: plinth/modules/tor/__init__.py:284 +#, python-brace-format +msgid "Confirm Tor usage at {url} on tcp{kind}" +msgstr "确认使用 Tor 通过 tcp{kind} 访问 {url}" + +#: plinth/modules/tor/forms.py:32 +msgid "Enable Tor" +msgstr "启用 Tor" + +#: plinth/modules/tor/forms.py:35 +msgid "Enable Tor Hidden Service" +msgstr "启用隐藏的 Tor 服务" + +#: plinth/modules/tor/forms.py:38 +#, python-brace-format +msgid "" +"A hidden service will allow {box_name} to provide selected services (such as " +"ownCloud or chat) without revealing its location." +msgstr "隐藏的服务将允许 {box_name} 提供某些服务(如 ownCloud 或聊天),而不暴露其位置。" + +#: plinth/modules/tor/forms.py:42 +msgid "Download software packages over Tor" +msgstr "通过 Tor 下载软件包" + +#: plinth/modules/tor/forms.py:44 +msgid "" +"When enabled, software will be downloaded over the Tor network for " +"installations and upgrades. This adds a degree of privacy and security " +"during software downloads." +msgstr "当启用时,软件将会下载 Tor 网络的安装和升级。这在软件下载过程中添加了一定程度的隐私和安全。" + +#: plinth/modules/tor/templates/tor.html:38 +msgid "" +"Tor is an anonymous communication system. You can learn more about it from " +"the Tor Project website. For " +"best protection when web surfing, the Tor Project recommends that you use " +"the " +"Tor Browser." +msgstr "" + +#: plinth/modules/tor/templates/tor.html:54 +msgid "Tor configuration is being updated" +msgstr "Tor 配置已更新" + +#: plinth/modules/tor/templates/tor.html:62 +msgid "Tor is running" +msgstr "Tor 正在运行" + +#: plinth/modules/tor/templates/tor.html:65 +msgid "Tor is not running" +msgstr "Tor 未运行" + +#: plinth/modules/tor/templates/tor.html:77 +msgid "Hidden Service" +msgstr "隐藏的服务" + +#: plinth/modules/tor/templates/tor.html:78 +#: plinth/modules/tor/templates/tor.html:120 +msgid "Port" +msgstr "端口" + +#: plinth/modules/tor/templates/tor.html:103 +msgid "Bridge" +msgstr "网桥" + +#: plinth/modules/tor/templates/tor.html:106 +#, python-format +msgid "" +"Your %(box_name)s is configured as a Tor bridge with obfsproxy, so it can " +"help circumvent censorship. If your %(box_name)s is behind a router or " +"firewall, you should make sure the following ports are open, and port-" +"forwarded, if necessary:" +msgstr "" + +#: plinth/modules/tor/templates/tor.html:119 +msgid "Service" +msgstr "服务" + +#: plinth/modules/tor/templates/tor.html:135 +msgid "SOCKS" +msgstr "SOCKS" + +#: plinth/modules/tor/templates/tor.html:138 +#, python-format +msgid "A Tor SOCKS port is available on your %(box_name)s on TCP port 9050." +msgstr "Tor SOCKS 端口是你 %(box_name)s 上的 TCP 端口 9050 。" + +#: plinth/modules/tor/views.py:68 +msgid "Tor Control Panel" +msgstr "Tor 控制面板" + +#: plinth/modules/tor/views.py:79 +#, python-brace-format +msgid "Action error: {0} [{1}] [{2}]" +msgstr "操作错误:{0} [{1}] [{2}]" + +#: plinth/modules/tor/views.py:148 +msgid "Configuration updated." +msgstr "配置已更新。" + +#: plinth/modules/tor/views.py:150 +msgid "An error occurred during configuration." +msgstr "在配置过程中出错。" + +#: plinth/modules/transmission/__init__.py:38 +#: plinth/modules/transmission/templates/transmission.html:26 +#: plinth/modules/transmission/views.py:67 +msgid "BitTorrent (Transmission)" +msgstr "BitTorrent(Transmission)" + +#: plinth/modules/transmission/__init__.py:43 +msgid "Transmission BitTorrent" +msgstr "Transmission BitTorrent" + +#: plinth/modules/transmission/forms.py:29 +msgid "Enable Transmission daemon" +msgstr "启用 Transmission 守护进程" + +#: plinth/modules/transmission/forms.py:33 +msgid "Download directory" +msgstr "下载目录" + +#: plinth/modules/transmission/forms.py:34 +msgid "" +"Directory where downloads are saved. If you change the default directory, " +"ensure that the new directory exists and is writable by \"debian-transmission" +"\" user." +msgstr "保存下载的目录。 如果您更改默认目录,请确保新目录存在并且允许用户“debian-transmission”可写。" + +#: plinth/modules/transmission/forms.py:40 +msgid "Username to login to the web interface." +msgstr "登录到 web 界面的用户名。" + +#: plinth/modules/transmission/forms.py:44 +msgid "" +"Password to login to the web interface. Current password is shown in a " +"hashed format. To set a new password, enter the password in plain text." +msgstr "登录到 web 界面的密码。当前密码以哈希格式所示。若要设置一个新密码,请以纯文本格式输入密码。" + +#: plinth/modules/transmission/templates/transmission.html:29 +msgid "" +"BitTorrent is a peer-to-peer file sharing protocol. Transmission daemon " +"handles Bitorrent file sharing. Note that BitTorrent is not anonymous." +msgstr "" +"BitTorrent 是对等文件共享协议。Transmission 守护进程处理 Bitorrent 文件共享。请注意,BitTorrent 不是匿名。" + +#: plinth/modules/transmission/templates/transmission.html:37 +msgid "" +"Access the web interface at /transmission." +msgstr "通过 /transmission 访问其 web 界面。" + +#: plinth/modules/transmission/templates/transmission.html:47 +msgid "Transmission daemon is running" +msgstr "Transmission 守护程序正在运行" + +#: plinth/modules/transmission/templates/transmission.html:50 +msgid "Transmission daemon is not running." +msgstr "Transmission 守护程序未运行。" + +#: plinth/modules/upgrades/__init__.py:33 +msgid "Software Upgrades" +msgstr "软件升级" + +#: plinth/modules/upgrades/forms.py:29 +msgid "Enable automatic upgrades" +msgstr "启用自动升级" + +#: plinth/modules/upgrades/forms.py:30 +msgid "" +"When enabled, the unattended-upgrades program will be run once per day. It " +"will attempt to perform any package upgrades that are available." +msgstr "当启用时,将每天一次运行无人值守升级程序。它会尝试执行任何可用的软件包升级。" + +#: plinth/modules/upgrades/templates/upgrades.html:37 +msgid "" +"Upgrades install the latest software and security updates. When automatic " +"upgrades are enabled, upgrades are automatically run every night. You don't " +"normally need to start the upgrade process." +msgstr "升级安装最新的软件和安全更新。启用自动升级后,每个夜晚自动运行升级。你通常不需要经常关注升级过程。" + +#: plinth/modules/upgrades/templates/upgrades.html:45 +msgid "" +"Depending on the number of packages to install, this may take a long time to " +"complete. While upgrades are in progress, you will not be able to install " +"other packages. During the upgrade, this web interface may be temporarily " +"unavailable and show an error. Refresh the page to continue." +msgstr "" +"根据要安装的程序包数量,这可能需要很长的时间才能完成。升级进行时,你将无法安装其它软件包。升级期间,此 web " +"界面可能暂时不可用并显示错误消息。刷新页面后,可以继续。" + +#: plinth/modules/upgrades/templates/upgrades.html:58 +msgid "Upgrade now »" +msgstr "现在升级 »" + +#: plinth/modules/upgrades/templates/upgrades.html:65 +msgid "A package manager is running." +msgstr "软件包管理器正在运行。" + +#: plinth/modules/upgrades/templates/upgrades.html:70 +msgid "Recent log from upgrades:" +msgstr "最新更新日志:" + +#: plinth/modules/upgrades/views.py:36 plinth/modules/upgrades/views.py:66 +msgid "Automatic Upgrades" +msgstr "自动升级" + +#: plinth/modules/upgrades/views.py:38 +msgid "Upgrade Packages" +msgstr "升级软件包" + +#: plinth/modules/upgrades/views.py:96 +msgid "Upgrade process started." +msgstr "升级过程开始。" + +#: plinth/modules/upgrades/views.py:99 +msgid "Starting upgrade failed." +msgstr "开始升级失败。" + +#: plinth/modules/upgrades/views.py:102 +msgid "Package Upgrades" +msgstr "软件包升级" + +#: plinth/modules/upgrades/views.py:131 +#, python-brace-format +msgid "Error when configuring unattended-upgrades: {error}" +msgstr "配置无人参与升级时错误:{error}" + +#: plinth/modules/upgrades/views.py:136 +msgid "Automatic upgrades enabled" +msgstr "已启用自动升级" + +#: plinth/modules/upgrades/views.py:138 +msgid "Automatic upgrades disabled" +msgstr "已禁用自动升级" + +#: plinth/modules/users/__init__.py:36 +msgid "Users and Groups" +msgstr "用户和组" + +#: plinth/modules/users/__init__.py:65 +#, python-brace-format +msgid "Check LDAP entry \"{search_item}\"" +msgstr "请检查 LDAP 条目“{search_item}”" + +#: plinth/modules/users/forms.py:28 +msgid "admin" +msgstr "管理员" + +#: plinth/modules/users/forms.py:29 +msgid "wiki" +msgstr "维基" + +#: plinth/modules/users/forms.py:41 +msgid "Groups" +msgstr "群組" + +#: plinth/modules/users/forms.py:45 +msgid "" +"Select which services should be available to the new user. The user will be " +"able to log in to services that support single sign-on through LDAP, if they " +"are in the appropriate group.

Users in the admin group will be " +"able to log in to all services. They can also log in to the system through " +"SSH and have administrative privileges (sudo)." +msgstr "" + +#: plinth/modules/users/forms.py:80 +#, python-brace-format +msgid "Failed to add new user to {group} group." +msgstr "未能将新用户添加到 {group}。" + +#: plinth/modules/users/forms.py:92 +msgid "SSH Keys" +msgstr "SSH 密钥" + +#: plinth/modules/users/forms.py:96 +msgid "" +"Setting an SSH public key will allow this user to securely log in to the " +"system without using a password. You may enter multiple keys, one on each " +"line. Blank lines and lines starting with # will be ignored." +msgstr "设置 SSH 公钥将允许此用户安全地登录到系统不使用密码。您可以输入多个密钥,每行一个。将忽略空行和以 # 开头的行。" + +#: plinth/modules/users/forms.py:136 +msgid "Renaming LDAP user failed." +msgstr "重命名 LDAP 用户失败。" + +#: plinth/modules/users/forms.py:148 +msgid "Failed to remove user from group." +msgstr "无法从组中删除用户。" + +#: plinth/modules/users/forms.py:159 +msgid "Failed to add user to group." +msgstr "无法将用户添加到组。" + +#: plinth/modules/users/forms.py:188 +msgid "Changing LDAP user password failed." +msgstr "更改 LDAP 用户密码失败。" + +#: plinth/modules/users/templates/users_change_password.html:27 +#, python-format +msgid "Change Password for %(username)s" +msgstr "为%(username)s更改密码" + +#: plinth/modules/users/templates/users_change_password.html:40 +msgid "Save Password" +msgstr "保存密码" + +#: plinth/modules/users/templates/users_create.html:42 +#: plinth/modules/users/views.py:36 plinth/modules/users/views.py:56 +msgid "Create User" +msgstr "创建用户" + +#: plinth/modules/users/templates/users_delete.html:26 +#: plinth/modules/users/views.py:110 +msgid "Delete User" +msgstr "删除用户" + +#: plinth/modules/users/templates/users_delete.html:29 +#, python-format +msgid "Delete user %(username)s permanently?" +msgstr "永久删除用户 %(username)s?" + +#: plinth/modules/users/templates/users_delete.html:38 +#, python-format +msgid "Delete %(username)s" +msgstr "删除 %(username)s" + +#: plinth/modules/users/templates/users_list.html:46 +#, python-format +msgid "Delete user %(username)s" +msgstr "删除用户 %(username)s" + +#: plinth/modules/users/templates/users_list.html:53 +#, python-format +msgid "Edit user %(username)s" +msgstr "编辑用户 %(username)s" + +#: plinth/modules/users/templates/users_update.html:39 +#, python-format +msgid "" +"Use the change password form to " +"change the password." +msgstr "使用 更改密码窗口 更改密码。" + +#: plinth/modules/users/templates/users_update.html:53 +msgid "Save Changes" +msgstr "保存更改" + +#: plinth/modules/users/views.py:34 plinth/modules/users/views.py:69 +msgid "Users" +msgstr "用户" + +#: plinth/modules/users/views.py:54 +#, python-format +msgid "User %(username)s created." +msgstr "用户 %(username)s 已创建。" + +#: plinth/modules/users/views.py:78 +#, python-format +msgid "User %(username)s updated." +msgstr "用户 %(username)s 已更新。" + +#: plinth/modules/users/views.py:79 +msgid "Edit User" +msgstr "编辑用户" + +#: plinth/modules/users/views.py:120 +#, python-brace-format +msgid "User {user} deleted." +msgstr "用户 {user} 已删除。" + +#: plinth/modules/users/views.py:127 +msgid "Deleting LDAP user failed." +msgstr "删除 LDAP 用户失败。" + +#: plinth/modules/users/views.py:136 +msgid "Change Password" +msgstr "更改密码" + +#: plinth/modules/users/views.py:137 +msgid "Password changed successfully." +msgstr "已成功更改密码。" + +#: plinth/modules/xmpp/__init__.py:41 plinth/modules/xmpp/__init__.py:46 +#: plinth/modules/xmpp/templates/xmpp.html:26 plinth/modules/xmpp/views.py:75 +msgid "Chat Server (XMPP)" +msgstr "聊天服务器(XMPP)" + +#: plinth/modules/xmpp/forms.py:29 +msgid "Enable XMPP" +msgstr "启用 XMPP" + +#: plinth/modules/xmpp/templates/xmpp.html:29 +msgid "" +"XMPP is an open and standardized communication protocol. Here you can run " +"and configure your XMPP server, called ejabberd." +msgstr "XMPP 是一种开放标准的通信协议。在这里你可以运行并配置您的 XMPP 服务器,称为 ejabberd。" + +#: plinth/modules/xmpp/templates/xmpp.html:36 +msgid "" +"To actually communicate, you can use the web client or " +"any other XMPP client." +msgstr "" +"要实际沟通,您可以使用 web 客户端 或任何其他 XMPP 客户端。" + +#: plinth/modules/xmpp/templates/xmpp.html:45 +#, python-format +msgid "" +"Your XMPP server domain is set to %(domainname)s. User IDs will look " +"like username@%(domainname)s. You can setup your domain on the system " +"Configure page." +msgstr "" + +#: plinth/modules/xmpp/templates/xmpp.html:55 +msgid "Launch web client" +msgstr "启动 web 客户端" + +#: plinth/modules/xmpp/templates/xmpp.html:63 +msgid "ejabberd is running" +msgstr "ejabberd 正在运行" + +#: plinth/modules/xmpp/templates/xmpp.html:66 +msgid "ejabberd is not running" +msgstr "ejabberd 未运行" + +#: plinth/network.py:39 +msgid "PPPoE" +msgstr "PPPoE" + +#: plinth/package.py:156 +msgid "packages not found" +msgstr "找不到软件包" + +#: plinth/package.py:263 +msgid "Installed and configured packages successfully." +msgstr "安装和配置软件包成功。" + +#: plinth/package.py:268 +#, python-brace-format +msgid "Error installing packages: {string} {details}" +msgstr "安装软件包时出错:{string}{details}" + +#: plinth/service.py:73 +msgid "Web Server" +msgstr "Web 服务器" + +#: plinth/service.py:74 +msgid "Web Server over Secure Socket Layer" +msgstr "Web 服务器安全套接字层" + +#: plinth/service.py:76 +msgid "Secure Shell (SSH) Server" +msgstr "安全 Shell(SSH)服务器" + +#: plinth/service.py:79 +#, python-brace-format +msgid "{box_name} Web Interface (Plinth)" +msgstr "{box_name} Web 界面(Plinth)" + +#: plinth/templates/404.html:25 +msgid "404" +msgstr "404" + +#: plinth/templates/404.html:28 +#, python-format +msgid "Requested page %(request_path)s was not found." +msgstr "找不到请求的页面 %(request_path)s。" + +#: plinth/templates/404.html:34 +msgid "" +"If you believe this missing page should exist, please file a bug at the " +"Plinth project issue " +"tracker." +msgstr "" +"如果你相信这个丢失的页面应该存在,请在 Plinth 项目 问题跟踪 报告 bug。" + +#: plinth/templates/500.html:25 +msgid "500" +msgstr "500" + +#: plinth/templates/500.html:28 +msgid "" +"This is an internal error and not something you caused or can fix. Please " +"report the error on the bug tracker so we can fix it." +msgstr "" +"这是一个内部错误,不是你造成的或可以修复。 请报告到 bug 追踪器 上这样我们就可以修复该错误。" + +#: plinth/templates/base.html:49 +#, python-format +msgid "Plinth administrative interface for the %(box_name)s" +msgstr "Plinth %(box_name)s 管理界面" + +#: plinth/templates/base.html:83 +msgid "Toggle navigation" +msgstr "切换导航" + +#: plinth/templates/base.html:125 plinth/templates/base.html.py:126 +msgid "Change password" +msgstr "更改密码" + +#: plinth/templates/base.html:129 plinth/templates/base.html.py:130 +#: plinth/templates/base.html:143 plinth/templates/base.html.py:145 +msgid "Log out" +msgstr "登出" + +#: plinth/templates/base.html:135 plinth/templates/base.html.py:137 +msgid "Log in" +msgstr "登录" + +#: plinth/templates/login.html:35 +msgid "Login" +msgstr "登录" + +#: plinth/templates/package_install.html:35 +msgid "Installation" +msgstr "安装" + +#: plinth/templates/package_install.html:40 +msgid "" +"This feature requires addtional packages to be installed. Do you wish to " +"install them?" +msgstr "此功能需要安装额外的软件包。你想安装它们吗?" + +#: plinth/templates/package_install.html:49 +msgid "Package" +msgstr "软件包" + +#: plinth/templates/package_install.html:50 +msgid "Summary" +msgstr "摘要" + +#: plinth/templates/package_install.html:67 +msgid "Install" +msgstr "安装" + +#: plinth/templates/package_install.html:74 +#, python-format +msgid "Installing %(package_names)s: %(status)s" +msgstr "正在安装 %(package_names)s:%(status)s" + +#: plinth/templates/package_install.html:84 +#, python-format +msgid "%(percentage)s%% complete" +msgstr "已完成 %(percentage)s%%" diff -Nru plinth-0.7.2/plinth/modules/apps/templates/apps.html plinth-0.8.1/plinth/modules/apps/templates/apps.html --- plinth-0.7.2/plinth/modules/apps/templates/apps.html 2015-12-23 11:34:40.000000000 +0000 +++ plinth-0.8.1/plinth/modules/apps/templates/apps.html 2016-02-16 03:55:53.000000000 +0000 @@ -25,7 +25,7 @@

{% trans "Services and Applications" %}

- {% blocktrans trimmed with box_name=cfg.box_name %} + {% blocktrans trimmed %} You can install and run various services and applications on your {{ box_name }}. Click on any app page link on the left to read a description of the application and choose to install it. diff -Nru plinth-0.7.2/plinth/modules/avahi/templates/avahi.html plinth-0.8.1/plinth/modules/avahi/templates/avahi.html --- plinth-0.7.2/plinth/modules/avahi/templates/avahi.html 2015-12-23 11:34:40.000000000 +0000 +++ plinth-0.8.1/plinth/modules/avahi/templates/avahi.html 2016-02-16 03:55:53.000000000 +0000 @@ -27,11 +27,11 @@

{% blocktrans trimmed %} - Service discovery allows other machines on the network to - discover your FreedomBox and services running on it. It also - allows FreedomBox to discover other machines and services - running on your local network. Service discovery is not - essential and works only on internal networks. It may be + Service discovery allows other devices on the network to + discover your {{ box_name }} and services running on it. It + also allows {{ box_name }} to discover other devices and + services running on your local network. Service discovery is + not essential and works only on internal networks. It may be disabled to improve security especially when connecting to a hostile local network. {% endblocktrans %} diff -Nru plinth-0.7.2/plinth/modules/config/config.py plinth-0.8.1/plinth/modules/config/config.py --- plinth-0.7.2/plinth/modules/config/config.py 2015-12-23 11:34:40.000000000 +0000 +++ plinth-0.8.1/plinth/modules/config/config.py 2016-02-16 03:55:53.000000000 +0000 @@ -38,6 +38,7 @@ from plinth.signals import pre_hostname_change, post_hostname_change from plinth.signals import domainname_change from plinth.signals import domain_added, domain_removed +from plinth.utils import format_lazy HOSTNAME_REGEX = r'^[a-zA-Z0-9]([-a-zA-Z0-9]{,61}[a-zA-Z0-9])?$' @@ -92,12 +93,12 @@ # https://tools.ietf.org/html/rfc2181#section-11 hostname = TrimmedCharField( label=ugettext_lazy('Hostname'), - help_text=\ - ugettext_lazy('Hostname is the local name by which other machines on ' - 'the local network reach your machine. It must start ' - 'and end with an alphabet or a digit and have as ' - 'interior characters only alphabets, digits and ' - 'hyphens. Total length must be 63 characters or less.'), + help_text=format_lazy(ugettext_lazy( + 'Hostname is the local name by which other devices on the local ' + 'network can reach your {box_name}. It must start and end with ' + 'an alphabet or a digit and have as interior characters only ' + 'alphabets, digits and hyphens. Total length must be 63 ' + 'characters or less.'), box_name=ugettext_lazy(cfg.box_name)), validators=[ validators.RegexValidator( HOSTNAME_REGEX, @@ -105,14 +106,14 @@ domainname = TrimmedCharField( label=ugettext_lazy('Domain Name'), - help_text=\ - ugettext_lazy('Domain name is the global name by which other machines ' - 'on the Internet can reach you. It must consist of ' - 'labels separated by dots. Each label must start and ' - 'end with an alphabet or a digit and have as interior ' - 'characters only alphabets, digits and hyphens. Length ' - 'of each label must be 63 characters or less. Total ' - 'length of domain name must be 253 characters or less.'), + help_text=format_lazy(ugettext_lazy( + 'Domain name is the global name by which other devices on the ' + 'Internet can reach your {box_name}. It must consist of labels ' + 'separated by dots. Each label must start and end with an ' + 'alphabet or a digit and have as interior characters only ' + 'alphabets, digits and hyphens. Length of each label must be 63 ' + 'characters or less. Total length of domain name must be 253 ' + 'characters or less.'), box_name=ugettext_lazy(cfg.box_name)), required=False, validators=[ validators.RegexValidator( @@ -123,8 +124,7 @@ language = forms.ChoiceField( label=ugettext_lazy('Language'), help_text=\ - ugettext_lazy('Language for this FreedomBox web administration ' - 'interface'), + ugettext_lazy('Language for this web administration interface'), required=False, choices=settings.LANGUAGES) diff -Nru plinth-0.7.2/plinth/modules/dynamicdns/dynamicdns.py plinth-0.8.1/plinth/modules/dynamicdns/dynamicdns.py --- plinth-0.7.2/plinth/modules/dynamicdns/dynamicdns.py 2015-12-23 11:34:40.000000000 +0000 +++ plinth-0.8.1/plinth/modules/dynamicdns/dynamicdns.py 2016-02-16 03:55:53.000000000 +0000 @@ -26,6 +26,7 @@ from plinth import actions from plinth import cfg from plinth import package +from plinth.utils import format_lazy logger = logging.getLogger(__name__) EMPTYSTRING = 'none' @@ -78,9 +79,10 @@ help_server = \ ugettext_lazy('Please do not enter a URL here (like ' '"https://example.com/") but only the hostname of the ' - 'GnuDIP server (like "example.pcom").') - help_domain = \ - ugettext_lazy('The public domain name you want use to reach your box.') + 'GnuDIP server (like "example.com").') + help_domain = format_lazy( + ugettext_lazy('The public domain name you want use to reach your ' + '{box_name}.'), box_name=ugettext_lazy(cfg.box_name)) help_disable_ssl = \ ugettext_lazy('Use this option if your provider uses self signed ' 'certificates.') @@ -90,13 +92,14 @@ help_secret = \ ugettext_lazy('Leave this field empty if you want to keep your ' 'previous configured password.') - help_ip_url = \ - ugettext_lazy('Optional Value. If your FreedomBox is not connected ' + help_ip_url = format_lazy( + ugettext_lazy('Optional Value. If your {box_name} is not connected ' 'directly to the Internet (i.e. connected to a NAT ' 'router) this URL is used to figure out the real ' - 'Internet IP. The URL should simply return the IP where' - 'the client comes from. Example: ' - 'http://myip.datasystems24.de') + 'Internet IP. The URL should simply return the IP where ' + 'the client comes from (example: ' + 'http://myip.datasystems24.de).'), + box_name=ugettext_lazy(cfg.box_name)) help_user = \ ugettext_lazy('You should have been requested to select a username ' 'when you created the account.') @@ -129,11 +132,11 @@ help_text=help_update_url) disable_SSL_cert_check = forms.BooleanField( - label=ugettext_lazy('accept all SSL certificates'), + label=ugettext_lazy('Accept all SSL certificates'), help_text=help_disable_ssl, required=False) use_http_basic_auth = forms.BooleanField( - label=ugettext_lazy('use HTTP basic authentication'), + label=ugettext_lazy('Use HTTP basic authentication'), help_text=help_http_auth, required=False) dynamicdns_domain = TrimmedCharField( @@ -151,7 +154,7 @@ label=ugettext_lazy('Password'), widget=forms.PasswordInput(), required=False, help_text=help_secret) - showpw = forms.BooleanField(label=ugettext_lazy('show password'), + showpw = forms.BooleanField(label=ugettext_lazy('Show password'), required=False) dynamicdns_ipurl = TrimmedCharField( diff -Nru plinth-0.7.2/plinth/modules/dynamicdns/templates/dynamicdns.html plinth-0.8.1/plinth/modules/dynamicdns/templates/dynamicdns.html --- plinth-0.7.2/plinth/modules/dynamicdns/templates/dynamicdns.html 2015-12-23 11:34:40.000000000 +0000 +++ plinth-0.8.1/plinth/modules/dynamicdns/templates/dynamicdns.html 2016-02-16 03:55:53.000000000 +0000 @@ -22,14 +22,14 @@ {% block content %} -

{% trans "DynamicDNS client" %}

+

{% trans "Dynamic DNS Client" %}

{% blocktrans trimmed %} If your internet provider changes your IP address periodic (i.e. every 24h) it may be hard for others to find you in the WEB. And for this reason nobody may find the services which are - provided by FreedomBox (like your ownCloud). + provided by {{ box_name }}, such as ownCloud. {% endblocktrans %}

@@ -41,7 +41,7 @@ public IP address to an gnudip server. Afterwards the Server will assign your DNS name with the - new IP and if someone from the internet asks for your DNS name + new IP and if someone from the Internet asks for your DNS name he will get your current IP answered. {% endblocktrans %}

@@ -59,9 +59,9 @@

{% blocktrans trimmed %} - If your freedombox is connected behind some NAT router, don't forget - to add portforwarding (i.e. forward some standard ports like 80 and 443) - to your freedombox device. + If your {{ box_name }} is connected behind some NAT router, don't forget + to add port forwarding (i.e. forward some standard ports like 80 and + 443). {% endblocktrans %}

{% endblock %} diff -Nru plinth-0.7.2/plinth/modules/dynamicdns/templates/dynamicdns_status.html plinth-0.8.1/plinth/modules/dynamicdns/templates/dynamicdns_status.html --- plinth-0.7.2/plinth/modules/dynamicdns/templates/dynamicdns_status.html 2015-12-23 11:34:40.000000000 +0000 +++ plinth-0.8.1/plinth/modules/dynamicdns/templates/dynamicdns_status.html 2016-02-16 03:55:53.000000000 +0000 @@ -32,14 +32,14 @@ {% endblocktrans %} {% else %} {% if no_nat %} - {% trans "Direct connection to the internet." %} + {% trans "Direct connection to the Internet." %} {% else %} {% blocktrans trimmed %} - Behind NAT, this means that dynamic DNS service will poll - the "IP check URL" for changes (we need the "IP check URL" - for this reason - otherwise we will not detect IP changes). - It may take up to {{ timer }} minutes until we update your - DNS entry in case of WAN IP change. + Behind NAT. This means that Dynamic DNS service will poll + the "IP check URL" for changes (the "IP check URL" entry is + needed for this - otherwise IP changes will not be + detected). In case the WAN IP changes, it may take up to + {{ timer }} minutes until your DNS entry is updated. {% endblocktrans %} {% endif %} {% endif %} diff -Nru plinth-0.7.2/plinth/modules/firewall/templates/firewall.html plinth-0.8.1/plinth/modules/firewall/templates/firewall.html --- plinth-0.7.2/plinth/modules/firewall/templates/firewall.html 2015-12-23 11:34:40.000000000 +0000 +++ plinth-0.8.1/plinth/modules/firewall/templates/firewall.html 2016-02-16 03:55:53.000000000 +0000 @@ -25,20 +25,20 @@

{{ title }}

- {% blocktrans trimmed with box_name=cfg.box_name %} - Firewall is a network security system that controls the incoming - and outgoing network traffic on your {{ box_name }}. Keeping a + {% blocktrans trimmed %} + Firewall is a security system that controls the incoming and + outgoing network traffic on your {{ box_name }}. Keeping a firewall enabled and properly configured reduces risk of security threat from the Internet. {% endblocktrans %}

-

{% trans "The following is the current status:" %}

+

{% trans "Current status:" %}

{% if firewall_status == 'not_running' %}

- {% blocktrans trimmed with box_name=cfg.box_name %} + {% blocktrans trimmed %} Firewall daemon is not running. Please run it. Firewall comes enabled by default on {{ box_name }}. On any Debian based system (such as {{ box_name }}) you may run it using the @@ -102,8 +102,8 @@ {% blocktrans trimmed %} The operation of the firewall is automatic. When you enable - a service it is automatically permitted in the firewall and - you disable a service is automatically disabled in the firewall. + a service it is also permitted in the firewall and when you + disable a service it is also disabled in the firewall. {% endblocktrans %}

diff -Nru plinth-0.7.2/plinth/modules/first_boot/templates/firstboot_navbar.html plinth-0.8.1/plinth/modules/first_boot/templates/firstboot_navbar.html --- plinth-0.7.2/plinth/modules/first_boot/templates/firstboot_navbar.html 1970-01-01 00:00:00.000000000 +0000 +++ plinth-0.8.1/plinth/modules/first_boot/templates/firstboot_navbar.html 2016-02-16 03:55:53.000000000 +0000 @@ -0,0 +1,26 @@ +{% comment %} +# +# This file is part of Plinth. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +{% endcomment %} + +{% load i18n %} + +
  • + + + +
  • diff -Nru plinth-0.7.2/plinth/modules/first_boot/templates/firstboot_state0.html plinth-0.8.1/plinth/modules/first_boot/templates/firstboot_state0.html --- plinth-0.7.2/plinth/modules/first_boot/templates/firstboot_state0.html 2015-12-23 11:34:40.000000000 +0000 +++ plinth-0.8.1/plinth/modules/first_boot/templates/firstboot_state0.html 2016-02-16 03:55:53.000000000 +0000 @@ -30,35 +30,25 @@ {% endblock %} -{% block add_nav_and_login %} - +{% block mainmenu_right %} + {% include "firstboot_navbar.html" %} {% endblock %} {% block content_row %}

    FreedomBox + alt="{{ box_name }}" width="640"/>

    -

    - {% trans "Congratulations! Your FreedomBox is up and running!" %} -

    -

    - {% blocktrans trimmed %} - Please provide the following basic information to complete the - setup process. - {% endblocktrans %} + {% trans "Start Setup" %}

    -

    - {% trans "Next" %} +

    + {% blocktrans trimmed %} + To complete the setup of your {{ box_name }}, please provide + some basic information. + {% endblocktrans %}

    {% endblock %} diff -Nru plinth-0.7.2/plinth/modules/first_boot/templates/firstboot_state10.html plinth-0.8.1/plinth/modules/first_boot/templates/firstboot_state10.html --- plinth-0.7.2/plinth/modules/first_boot/templates/firstboot_state10.html 2015-12-23 11:34:40.000000000 +0000 +++ plinth-0.8.1/plinth/modules/first_boot/templates/firstboot_state10.html 2016-02-16 03:55:53.000000000 +0000 @@ -30,34 +30,31 @@

    {% blocktrans trimmed %} - FreedomBox setup is now complete. However, you should check - the network setup and modify it if necessary. Do not forget - to change the default Wi-Fi passwords. + {{ box_name }} setup is now complete. To make your {{ box_name }} + functional, you need some applications. They will be installed + the first time you access them. {% endblocktrans %}

    + + +

    {% trans "Current Network Configuration" %}

    +

    {% blocktrans trimmed %} - To make your FreedomBox functional, you need some - applications. Applications will be installed the first time - you access them. + You should check the network setup and modify it if necessary. + Do not forget to change the default Wi-Fi passwords! {% endblocktrans %}

    -

    {% trans "Network Configuration" %}

    - {% include "connections_diagram.html" %} - diff -Nru plinth-0.7.2/plinth/modules/first_boot/templates/firstboot_state1.html plinth-0.8.1/plinth/modules/first_boot/templates/firstboot_state1.html --- plinth-0.7.2/plinth/modules/first_boot/templates/firstboot_state1.html 2015-12-23 11:34:40.000000000 +0000 +++ plinth-0.8.1/plinth/modules/first_boot/templates/firstboot_state1.html 2016-02-16 03:55:53.000000000 +0000 @@ -22,14 +22,16 @@ {% load i18n %} {% load static %} -{% block add_nav_and_login %} - +{% block page_head %} + +{% endblock %} + +{% block mainmenu_right %} + {% include "firstboot_navbar.html" %} {% endblock %} {% block content_row %} @@ -60,6 +62,6 @@ {% block page_js %} {% endblock %} diff -Nru plinth-0.7.2/plinth/modules/first_boot/templatetags/firstboot_extras.py plinth-0.8.1/plinth/modules/first_boot/templatetags/firstboot_extras.py --- plinth-0.7.2/plinth/modules/first_boot/templatetags/firstboot_extras.py 1970-01-01 00:00:00.000000000 +0000 +++ plinth-0.8.1/plinth/modules/first_boot/templatetags/firstboot_extras.py 2016-02-16 03:55:53.000000000 +0000 @@ -0,0 +1,33 @@ +# +# This file is part of Plinth. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# + +""" +Template tags for first boot module. +""" + +from django import template + +from plinth import kvstore + +register = template.Library() + + +@register.simple_tag +def firstboot_is_finished(): + """Return whether firstboot process is completed.""" + state = kvstore.get_default('firstboot_state', 0) + return state >= 10 diff -Nru plinth-0.7.2/plinth/modules/help/help.py plinth-0.8.1/plinth/modules/help/help.py --- plinth-0.7.2/plinth/modules/help/help.py 2015-12-23 11:34:40.000000000 +0000 +++ plinth-0.8.1/plinth/modules/help/help.py 2016-02-16 03:55:53.000000000 +0000 @@ -35,7 +35,7 @@ 'glyphicon-book', 'help:index', 101) menu.add_urlname(ugettext_lazy('Where to Get Help'), 'glyphicon-search', 'help:index_explicit', 5) - menu.add_urlname(ugettext_lazy('FreedomBox Manual'), 'glyphicon-info-sign', + menu.add_urlname(ugettext_lazy('Manual'), 'glyphicon-info-sign', 'help:manual', 10) menu.add_urlname(ugettext_lazy('About'), 'glyphicon-star', 'help:about', 100) @@ -52,7 +52,7 @@ def about(request): """Serve the about page""" context = { - 'title': _('About {box_name}').format(box_name=cfg.box_name), + 'title': _('About {box_name}').format(box_name=_(cfg.box_name)), 'version': __version__ } return TemplateResponse(request, 'help_about.html', context) @@ -62,12 +62,13 @@ def manual(request): """Serve the manual page from the 'doc' directory""" try: - with open(os.path.join(cfg.doc_dir, 'freedombox-manual.part.html'), 'r') \ - as input_file: + with open(os.path.join(cfg.doc_dir, 'freedombox-manual.part.html'), + 'r', encoding='utf-8') as input_file: content = input_file.read() except IOError: raise Http404 - return TemplateResponse(request, 'help_manual.html', - {'title': _('FreedomBox Manual'), - 'content': content}) + return TemplateResponse( + request, 'help_manual.html', + {'title': _('{box_name} Manual').format(box_name=_(cfg.box_name)), + 'content': content}) diff -Nru plinth-0.7.2/plinth/modules/help/templates/help_about.html plinth-0.8.1/plinth/modules/help/templates/help_about.html --- plinth-0.7.2/plinth/modules/help/templates/help_about.html 2015-12-23 11:34:40.000000000 +0000 +++ plinth-0.8.1/plinth/modules/help/templates/help_about.html 2016-02-16 03:55:53.000000000 +0000 @@ -1,5 +1,4 @@ -{% extends 'base.html' %} -{% load static %} +{% extends 'help_base.html' %} {% comment %} # # This file is part of Plinth. @@ -20,6 +19,7 @@ {% endcomment %} {% load i18n %} +{% load static %} {% block content %} @@ -28,14 +28,14 @@

    {% blocktrans trimmed %} - FreedomBox is a community project to develop, design and promote - personal servers running free software for private, personal - communications. It is a networking appliance designed to allow - interfacing with the rest of the Internet under conditions of - protected privacy and data security. It hosts applications such - as blog, wiki, website, social network, email, web proxy and a - Tor relay on a device that can replace your Wi-Fi router so that - your data stays with you. + {{ box_name }} is a community project to develop, design and + promote personal servers running free software for private, + personal communications. It is a networking appliance designed + to allow interfacing with the rest of the Internet under + conditions of protected privacy and data security. It hosts + applications such as blog, wiki, website, social network, email, + web proxy and a Tor relay, on a device that can replace your + Wi-Fi router, so that your data stays with you. {% endblocktrans %}

    @@ -55,15 +55,16 @@

    {% blocktrans trimmed %} There are a number of projects working to realize a future of - distributed services; FreedomBox aims to bring them all together - in a convenient package. + distributed services; {{ box_name }} aims to bring them all + together in a convenient package. {% endblocktrans %}

    {% blocktrans trimmed %} - For more information about the FreedomBox project, see the - FreedomBox Wiki. + For more information about the {{ box_name }} project, see the + {{ box_name }} + Wiki. {% endblocktrans %}

    diff -Nru plinth-0.7.2/plinth/modules/help/templates/help_base.html plinth-0.8.1/plinth/modules/help/templates/help_base.html --- plinth-0.7.2/plinth/modules/help/templates/help_base.html 1970-01-01 00:00:00.000000000 +0000 +++ plinth-0.8.1/plinth/modules/help/templates/help_base.html 2016-02-16 03:55:53.000000000 +0000 @@ -0,0 +1,56 @@ +{% extends 'base.html' %} +{% comment %} +# +# This file is part of Plinth. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +{% endcomment %} + +{% load i18n %} +{% load firstboot_extras %} +{% load static %} + + +{# Adapt mainmenu-links during firstboot #} +{% block mainmenu_left %} + + {% firstboot_is_finished as firstboot_finished %} + {% if not firstboot_finished %} + + + {{ cfg.box_name }} + + {% blocktrans trimmed %}{{ box_name }} Setup{% endblocktrans %} + + + + {% else %} + {{ block.super }} + {% endif %} + +{% endblock %} + + +{% block mainmenu_right %} + + {% firstboot_is_finished as firstboot_finished %} + {% if not firstboot_finished %} + {% include "firstboot_navbar.html" %} + {% else %} + {{ block.super }} + {% endif %} + +{% endblock %} diff -Nru plinth-0.7.2/plinth/modules/help/templates/help_index.html plinth-0.8.1/plinth/modules/help/templates/help_index.html --- plinth-0.7.2/plinth/modules/help/templates/help_index.html 2015-12-23 11:34:40.000000000 +0000 +++ plinth-0.8.1/plinth/modules/help/templates/help_index.html 2016-02-16 03:55:53.000000000 +0000 @@ -1,4 +1,4 @@ -{% extends 'base.html' %} +{% extends 'help_base.html' %} {% comment %} # # This file is part of Plinth. @@ -26,8 +26,8 @@

    {% url 'help:manual' as manual_url %} - {% blocktrans trimmed with box_name=cfg.box_name %} - The FreedomBox Manual is the + {% blocktrans trimmed %} + The {{ box_name }} Manual is the best place to start for information regarding {{ box_name }}. {% endblocktrans %}

    @@ -35,13 +35,13 @@

    {% blocktrans trimmed %} - FreedomBox project wiki contains further information. + {{ box_name }} project wiki contains further information. {% endblocktrans %}

    {% blocktrans trimmed %} - To seek help from FreedomBox community, queries may be posted on + To seek help from {{ box_name }} community, queries may be posted on the mailing list. The list archives also contain information @@ -51,8 +51,10 @@

    {% blocktrans trimmed %} - Many FreedomBox contributors and users are also available on the - #freedombox channel of the irc.oftc.net IRC network. + Many {{ box_name }} contributors and users are also available on + the irc.oftc.net IRC network. Join and request help on the + + #freedombox channel using the IRC web interface. {% endblocktrans %}

    diff -Nru plinth-0.7.2/plinth/modules/help/templates/help_manual.html plinth-0.8.1/plinth/modules/help/templates/help_manual.html --- plinth-0.7.2/plinth/modules/help/templates/help_manual.html 2015-12-23 11:34:40.000000000 +0000 +++ plinth-0.8.1/plinth/modules/help/templates/help_manual.html 2016-02-16 03:55:53.000000000 +0000 @@ -1,4 +1,4 @@ -{% extends 'base.html' %} +{% extends 'help_base.html' %} {% comment %} # # This file is part of Plinth. diff -Nru plinth-0.7.2/plinth/modules/ikiwiki/forms.py plinth-0.8.1/plinth/modules/ikiwiki/forms.py --- plinth-0.7.2/plinth/modules/ikiwiki/forms.py 2015-12-23 11:34:40.000000000 +0000 +++ plinth-0.8.1/plinth/modules/ikiwiki/forms.py 2016-02-16 03:55:53.000000000 +0000 @@ -26,7 +26,7 @@ class IkiwikiForm(forms.Form): """ikiwiki configuration form.""" enabled = forms.BooleanField( - label=_('Enable Ikiwiki'), + label=_('Enable ikiwiki'), required=False) diff -Nru plinth-0.7.2/plinth/modules/ikiwiki/__init__.py plinth-0.8.1/plinth/modules/ikiwiki/__init__.py --- plinth-0.7.2/plinth/modules/ikiwiki/__init__.py 2015-12-23 11:34:40.000000000 +0000 +++ plinth-0.8.1/plinth/modules/ikiwiki/__init__.py 2016-02-16 03:55:53.000000000 +0000 @@ -35,12 +35,12 @@ def init(): """Initialize the ikiwiki module.""" menu = cfg.main_menu.get('apps:index') - menu.add_urlname(_('Wiki & Blog (Ikiwiki)'), 'glyphicon-edit', + menu.add_urlname(_('Wiki and Blog (ikiwiki)'), 'glyphicon-edit', 'ikiwiki:index', 1100) global service service = service_module.Service( - 'ikiwiki', _('Ikiwiki wikis and blogs'), ['http', 'https'], + 'ikiwiki', _('ikiwiki wikis and blogs'), ['http', 'https'], is_external=True, enabled=is_enabled()) diff -Nru plinth-0.7.2/plinth/modules/ikiwiki/templates/ikiwiki_delete.html plinth-0.8.1/plinth/modules/ikiwiki/templates/ikiwiki_delete.html --- plinth-0.7.2/plinth/modules/ikiwiki/templates/ikiwiki_delete.html 2015-12-23 11:34:40.000000000 +0000 +++ plinth-0.8.1/plinth/modules/ikiwiki/templates/ikiwiki_delete.html 2016-02-16 03:55:53.000000000 +0000 @@ -25,14 +25,15 @@

    {% blocktrans trimmed %} - Delete Wiki/Blog {{ name }} + Delete Wiki or Blog {{ name }} {% endblocktrans %}

    {% blocktrans trimmed %} This action will remove all the posts, pages and comments - including revision history. Delete this wiki/blog permanently? + including revision history. Delete this wiki or blog + permanently? {% endblocktrans %}

    diff -Nru plinth-0.7.2/plinth/modules/ikiwiki/views.py plinth-0.8.1/plinth/modules/ikiwiki/views.py --- plinth-0.7.2/plinth/modules/ikiwiki/views.py 2015-12-23 11:34:40.000000000 +0000 +++ plinth-0.8.1/plinth/modules/ikiwiki/views.py 2016-02-16 03:55:53.000000000 +0000 @@ -41,7 +41,7 @@ def on_install(): - """Enable Ikiwiki on install.""" + """Enable ikiwiki on install.""" actions.superuser_run('ikiwiki', ['setup']) ikiwiki.service.notify_enabled(None, True) @@ -70,7 +70,7 @@ form = IkiwikiForm(initial=status, prefix='ikiwiki') return TemplateResponse(request, 'ikiwiki.html', - {'title': _('Wiki & Blog'), + {'title': _('Wiki and Blog'), 'status': status, 'form': form, 'subsubmenu': subsubmenu}) @@ -129,7 +129,7 @@ form = IkiwikiCreateForm(prefix='ikiwiki') return TemplateResponse(request, 'ikiwiki_create.html', - {'title': _('Create Wiki/Blog'), + {'title': _('Create Wiki or Blog'), 'form': form, 'subsubmenu': subsubmenu}) @@ -179,6 +179,6 @@ return redirect(reverse_lazy('ikiwiki:manage')) return TemplateResponse(request, 'ikiwiki_delete.html', - {'title': _('Delete Wiki/Blog'), + {'title': _('Delete Wiki or Blog'), 'subsubmenu': subsubmenu, 'name': name}) diff -Nru plinth-0.7.2/plinth/modules/letsencrypt/__init__.py plinth-0.8.1/plinth/modules/letsencrypt/__init__.py --- plinth-0.7.2/plinth/modules/letsencrypt/__init__.py 1970-01-01 00:00:00.000000000 +0000 +++ plinth-0.8.1/plinth/modules/letsencrypt/__init__.py 2016-02-16 03:55:53.000000000 +0000 @@ -0,0 +1,58 @@ +# +# This file is part of Plinth. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# + +""" +Plinth module for using Let's Encrypt. +""" + +from django.utils.translation import ugettext_lazy as _ +import json + +from plinth import actions +from plinth import action_utils +from plinth import cfg +from plinth import service as service_module +from plinth.modules import names + + +depends = [ + 'plinth.modules.apps', + 'plinth.modules.names' +] + +service = None + + +def init(): + """Intialize the module.""" + menu = cfg.main_menu.get('system:index') + menu.add_urlname(_('Certificates (Let\'s Encrypt)'), + 'glyphicon-lock', 'letsencrypt:index', 20) + + +def diagnose(): + """Run diagnostics and return the results.""" + results = [] + + for domain_type, domains in names.domains.items(): + if domain_type == 'hiddenservice': + continue + + for domain in domains: + results.append(action_utils.diagnose_url('https://' + domain)) + + return results diff -Nru plinth-0.7.2/plinth/modules/letsencrypt/templates/letsencrypt.html plinth-0.8.1/plinth/modules/letsencrypt/templates/letsencrypt.html --- plinth-0.7.2/plinth/modules/letsencrypt/templates/letsencrypt.html 1970-01-01 00:00:00.000000000 +0000 +++ plinth-0.8.1/plinth/modules/letsencrypt/templates/letsencrypt.html 2016-02-16 03:55:53.000000000 +0000 @@ -0,0 +1,128 @@ +{% extends "base.html" %} +{% comment %} +# +# This file is part of Plinth. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +{% endcomment %} + +{% load bootstrap %} +{% load i18n %} + +{% block page_head %} + +{% endblock %} + +{% block content %} + +

    {% trans "Certificates (Let's Encrypt)" %}

    + +

    + {% blocktrans trimmed %} + A digital certficate allows users of a web service to verify the + identity of the service and to securely communicate with it. + {{ box_name }} can automatically obtain and setup digital + certificates for each available domain. It does so by proving + itself to be the owner of a domain to Let's Encrypt, a + certficate authority (CA). + {% endblocktrans %} +

    + +

    + {% blocktrans trimmed %} + Let's Encrypt is a free, automated, and open certificate + authority, run for the public’s benefit by the Internet Security + Research Group (ISRG). Please read and agree with the + Let's Encrypt + Subscriber Agreement before using this service. + {% endblocktrans %} +

    + +
    +
    + + + + + + + + + + + {% for domain, domain_status in status.domains.items %} + + + + + + + {% endfor %} + +
    {% trans "Domain" %}{% trans "Certificate Status" %}{% trans "Website Security" %}{% trans "Actions" %}
    {{ domain }} + {% if domain_status.certificate_available %} + + {% blocktrans trimmed with expiry_date=domain_status.expiry_date %} + Expires on {{ expiry_date }} + {% endblocktrans %} + + {% else %} + + {% trans "No certficate" %} + + {% endif %} + + {% if domain_status.web_enabled %} + {% trans "Enabled" %} + {% else %} + {% trans "Disabled" %} + {% endif %} + + {% if domain_status.certificate_available %} +
    + {% csrf_token %} + +
    +
    + {% csrf_token %} + +
    + {% else %} +
    + {% csrf_token %} + +
    + {% endif %} +
    +
    +
    + + {% include "diagnostics_button.html" with module="letsencrypt" %} + +{% endblock %} diff -Nru plinth-0.7.2/plinth/modules/letsencrypt/urls.py plinth-0.8.1/plinth/modules/letsencrypt/urls.py --- plinth-0.7.2/plinth/modules/letsencrypt/urls.py 1970-01-01 00:00:00.000000000 +0000 +++ plinth-0.8.1/plinth/modules/letsencrypt/urls.py 2016-02-16 03:55:53.000000000 +0000 @@ -0,0 +1,33 @@ +# +# This file is part of Plinth. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# + +""" +URLs for the Let's Encrypt module. +""" + +from django.conf.urls import url + +from . import views + + +urlpatterns = [ + url(r'^sys/letsencrypt/$', views.index, name='index'), + url(r'^sys/letsencrypt/revoke/(?P[^/]+)/$', views.revoke, + name='revoke'), + url(r'^sys/letsencrypt/obtain/(?P[^/]+)/$', views.obtain, + name='obtain'), +] diff -Nru plinth-0.7.2/plinth/modules/letsencrypt/views.py plinth-0.8.1/plinth/modules/letsencrypt/views.py --- plinth-0.7.2/plinth/modules/letsencrypt/views.py 1970-01-01 00:00:00.000000000 +0000 +++ plinth-0.8.1/plinth/modules/letsencrypt/views.py 2016-02-16 03:55:53.000000000 +0000 @@ -0,0 +1,92 @@ +# +# This file is part of Plinth. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# + +""" +Plinth module for using Let's Encrypt. +""" + +from django.contrib import messages +from django.core.urlresolvers import reverse_lazy +from django.shortcuts import redirect +from django.template.response import TemplateResponse +from django.utils.translation import ugettext as _ +from django.views.decorators.http import require_POST +import json +import logging + +from plinth import actions +from plinth import package +from plinth.errors import ActionError +from plinth.modules import names + +logger = logging.getLogger(__name__) + + +@package.required(['letsencrypt']) +def index(request): + """Serve configuration page.""" + status = get_status() + + return TemplateResponse(request, 'letsencrypt.html', + {'title': _('Certificates (Let\'s Encrypt)'), + 'status': status}) + + +@require_POST +def revoke(request, domain): + """Revoke a certficate for a given domain.""" + try: + actions.superuser_run('letsencrypt', ['revoke', '--domain', domain]) + messages.success( + request, _('Certificate successfully revoked for domain {domain}') + .format(domain=domain)) + except ActionError as exception: + messages.error( + request, + _('Failed to revoke certificate for domain {domain}: {error}') + .format(domain=domain, error=exception.args[2])) + + return redirect(reverse_lazy('letsencrypt:index')) + + +@require_POST +def obtain(request, domain): + """Obtain and install a certficate for a given domain.""" + try: + actions.superuser_run('letsencrypt', ['obtain', '--domain', domain]) + messages.success( + request, _('Certificate successfully obtained for domain {domain}') + .format(domain=domain)) + except ActionError as exception: + messages.error( + request, + _('Failed to obtain certificate for domain {domain}: {error}') + .format(domain=domain, error=exception.args[2])) + + return redirect(reverse_lazy('letsencrypt:index')) + + +def get_status(): + """Get the current settings.""" + status = actions.superuser_run('letsencrypt', ['get-status']) + status = json.loads(status) + + for domains in names.domains.values(): + for domain in domains: + status['domains'].setdefault(domain, {}) + + return status diff -Nru plinth-0.7.2/plinth/modules/monkeysphere/__init__.py plinth-0.8.1/plinth/modules/monkeysphere/__init__.py --- plinth-0.7.2/plinth/modules/monkeysphere/__init__.py 1970-01-01 00:00:00.000000000 +0000 +++ plinth-0.8.1/plinth/modules/monkeysphere/__init__.py 2016-02-16 03:55:53.000000000 +0000 @@ -0,0 +1,33 @@ +# +# This file is part of Plinth. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# + +""" +Plinth module for monkeysphere. +""" + +from django.utils.translation import ugettext_lazy as _ + +from plinth import cfg + +depends = ['plinth.modules.system'] + + +def init(): + """Initialize the monkeysphere module.""" + menu = cfg.main_menu.get('system:index') + menu.add_urlname(_('Monkeysphere'), 'glyphicon-certificate', + 'monkeysphere:index', 970) diff -Nru plinth-0.7.2/plinth/modules/monkeysphere/templates/monkeysphere.html plinth-0.8.1/plinth/modules/monkeysphere/templates/monkeysphere.html --- plinth-0.7.2/plinth/modules/monkeysphere/templates/monkeysphere.html 1970-01-01 00:00:00.000000000 +0000 +++ plinth-0.8.1/plinth/modules/monkeysphere/templates/monkeysphere.html 2016-02-16 03:55:53.000000000 +0000 @@ -0,0 +1,112 @@ +{% extends "base.html" %} +{% comment %} +# +# This file is part of Plinth. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +{% endcomment %} + +{% load bootstrap %} +{% load i18n %} + +{% block page_head %} + + {% if running %} + + {% endif %} + +{% endblock %} + + +{% block content %} + +

    {% trans "Monkeysphere" %}

    + +

    + {% blocktrans trimmed %} + With Monkeysphere, a PGP key can be generated for each configured domain + serving SSH. The PGP public key can then be uploaded to the PGP + keyservers. Users connecting to this machine through SSH can verify that + they are connecting to the correct host. For users to trust the key, at + least one person (usually the machine owner) must sign the key using the + regular PGP key signing process. See the + + Monkeysphere SSH documentation for more details. + {% endblocktrans %} +

    + + {% if running %} +

    + + {% trans "Publishing key to keyserver..." %} + +

    + {% csrf_token %} + + +
    +

    + {% endif %} + +
    +
    + + + + + + + + + + {% for domain in status.domains %} + + + + + + {% endfor %} + +
    {% trans "Domain" %}{% trans "GPG Fingerprint" %}{% trans "Actions" %}
    {{ domain.name }} + {% if domain.key %} + {{ domain.key.pgp_fingerprint }} + {% else %} + {% trans "Not Available" %} + {% endif %} + + {% if not domain.key %} +
    + {% csrf_token %} + + +
    + {% elif not running %} +
    + {% csrf_token %} + + +
    + {% endif %} +
    +
    +
    + +{% endblock %} diff -Nru plinth-0.7.2/plinth/modules/monkeysphere/urls.py plinth-0.8.1/plinth/modules/monkeysphere/urls.py --- plinth-0.7.2/plinth/modules/monkeysphere/urls.py 1970-01-01 00:00:00.000000000 +0000 +++ plinth-0.8.1/plinth/modules/monkeysphere/urls.py 2016-02-16 03:55:53.000000000 +0000 @@ -0,0 +1,34 @@ +# +# This file is part of Plinth. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# + +""" +URLs for the monkeysphere module. +""" + +from django.conf.urls import url + +from . import views + + +urlpatterns = [ + url(r'^sys/monkeysphere/$', views.index, name='index'), + url(r'^sys/monkeysphere/(?P[^/]+)/generate/$', + views.generate, name='generate'), + url(r'^sys/monkeysphere/(?P[0-9A-Fa-f]+)/publish/$', + views.publish, name='publish'), + url(r'^sys/monkeysphere/cancel/$', views.cancel, name='cancel'), +] diff -Nru plinth-0.7.2/plinth/modules/monkeysphere/views.py plinth-0.8.1/plinth/modules/monkeysphere/views.py --- plinth-0.7.2/plinth/modules/monkeysphere/views.py 1970-01-01 00:00:00.000000000 +0000 +++ plinth-0.8.1/plinth/modules/monkeysphere/views.py 2016-02-16 03:55:53.000000000 +0000 @@ -0,0 +1,124 @@ +# +# This file is part of Plinth. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# + +""" +Views for the monkeysphere module. +""" + +from django.contrib import messages +from django.core.urlresolvers import reverse_lazy +from django.shortcuts import redirect +from django.template.response import TemplateResponse +from django.utils.translation import ugettext as _ +from django.views.decorators.http import require_POST +import json + +from plinth import actions +from plinth import package +from plinth.modules import names + +publish_process = None + + +@package.required(['monkeysphere']) +def index(request): + """Serve configuration page.""" + _collect_publish_result(request) + status = get_status() + return TemplateResponse( + request, 'monkeysphere.html', + {'title': _('Monkeysphere'), + 'status': status, + 'running': bool(publish_process)}) + + +@require_POST +def generate(request, domain): + """Generate PGP key for SSH service.""" + valid_domain = any((domain in domains + for domains in names.domains.values())) + if valid_domain: + try: + actions.superuser_run( + 'monkeysphere', ['host-import-ssh-key', 'ssh://' + domain]) + messages.success(request, _('Generated PGP key.')) + except actions.ActionError as exception: + messages.error(request, str(exception)) + + return redirect(reverse_lazy('monkeysphere:index')) + + +@require_POST +def publish(request, fingerprint): + """Publish PGP key for SSH service.""" + global publish_process + if not publish_process: + publish_process = actions.superuser_run( + 'monkeysphere', ['host-publish-key', fingerprint], async=True) + + return redirect(reverse_lazy('monkeysphere:index')) + + +@require_POST +def cancel(request): + """Cancel ongoing process.""" + global publish_process + if publish_process: + publish_process.terminate() + publish_process = None + messages.info(request, _('Cancelled key publishing.')) + + return redirect(reverse_lazy('monkeysphere:index')) + + +def get_status(): + """Get the current status.""" + output = actions.superuser_run('monkeysphere', ['host-show-keys']) + keys = {} + for key in json.loads(output)['keys']: + key['name'] = key['uid'].replace('ssh://', '') + keys[key['name']] = key + + domains = [] + for domains_of_a_type in names.domains.values(): + for domain in domains_of_a_type: + domains.append({ + 'name': domain, + 'key': keys.get(domain), + }) + + return {'domains': domains} + + +def _collect_publish_result(request): + """Handle publish process completion.""" + global publish_process + if not publish_process: + return + + return_code = publish_process.poll() + + # Publish process is not complete yet + if return_code is None: + return + + if not return_code: + messages.success(request, _('Published key to keyserver.')) + else: + messages.error(request, _('Error occurred while publishing key.')) + + publish_process = None diff -Nru plinth-0.7.2/plinth/modules/names/__init__.py plinth-0.8.1/plinth/modules/names/__init__.py --- plinth-0.7.2/plinth/modules/names/__init__.py 2015-12-23 11:34:40.000000000 +0000 +++ plinth-0.8.1/plinth/modules/names/__init__.py 2016-02-16 03:55:53.000000000 +0000 @@ -19,18 +19,17 @@ Plinth module to configure name services """ -from django.utils.translation import ugettext as _, ugettext_lazy +from django.utils.translation import ugettext_lazy as _ import logging from plinth import cfg from plinth.signals import domain_added, domain_removed - -SERVICES = [ - ('http', ugettext_lazy('HTTP'), 80), - ('https', ugettext_lazy('HTTPS'), 443), - ('ssh', ugettext_lazy('SSH'), 22), -] +SERVICES = ( + ('http', _('HTTP'), 80), + ('https', _('HTTPS'), 443), + ('ssh', _('SSH'), 22), +) depends = ['plinth.modules.system'] @@ -43,7 +42,7 @@ def init(): """Initialize the names module.""" menu = cfg.main_menu.get('system:index') - menu.add_urlname(ugettext_lazy('Name Services'), 'glyphicon-tag', + menu.add_urlname(_('Name Services'), 'glyphicon-tag', 'names:index', 19) domain_added.connect(on_domain_added) @@ -104,10 +103,10 @@ if domain_type in domains and len(domains[domain_type]) > 0: return list(domains[domain_type].keys())[0] else: - return _('Not Available') + return None -def get_services(domain_type, domain): +def get_enabled_services(domain_type, domain): """Get list of enabled services for a domain.""" try: return domains[domain_type][domain] @@ -118,5 +117,5 @@ def get_services_status(domain_type, domain): """Get list of whether each service is enabled for a domain.""" - enabled = get_services(domain_type, domain) + enabled = get_enabled_services(domain_type, domain) return [service[0] in enabled for service in SERVICES] diff -Nru plinth-0.7.2/plinth/modules/names/tests/test_names.py plinth-0.8.1/plinth/modules/names/tests/test_names.py --- plinth-0.7.2/plinth/modules/names/tests/test_names.py 2015-12-23 11:34:40.000000000 +0000 +++ plinth-0.8.1/plinth/modules/names/tests/test_names.py 2016-02-16 03:55:53.000000000 +0000 @@ -24,7 +24,7 @@ from .. import domain_types, domains from .. import on_domain_added, on_domain_removed from .. import get_domain_types, get_description -from .. import get_domain, get_services, get_services_status +from .. import get_domain, get_enabled_services, get_services_status class TestNames(unittest.TestCase): @@ -73,20 +73,20 @@ on_domain_added('', 'hiddenservice', 'aaaaa.onion') self.assertEqual(get_domain('hiddenservice'), 'aaaaa.onion') - self.assertEqual('Not Available', get_domain('abcdef')) + self.assertEqual(None, get_domain('abcdef')) on_domain_removed('', 'hiddenservice') - self.assertEqual('Not Available', get_domain('hiddenservice')) + self.assertEqual(None, get_domain('hiddenservice')) - def test_get_services(self): + def test_get_enabled_services(self): """Test getting enabled services for a domain.""" on_domain_added('', 'domainname', 'bbbbb', '', ['http', 'https', 'ssh']) - self.assertEqual(get_services('domainname', 'bbbbb'), + self.assertEqual(get_enabled_services('domainname', 'bbbbb'), ['http', 'https', 'ssh']) - self.assertEqual(get_services('xxxxx', 'yyyyy'), []) - self.assertEqual(get_services('domainname', 'zzzzz'), []) + self.assertEqual(get_enabled_services('xxxxx', 'yyyyy'), []) + self.assertEqual(get_enabled_services('domainname', 'zzzzz'), []) def test_get_services_status(self): """Test getting whether each service is enabled for a domain.""" diff -Nru plinth-0.7.2/plinth/modules/names/views.py plinth-0.8.1/plinth/modules/names/views.py --- plinth-0.7.2/plinth/modules/names/views.py 2015-12-23 11:34:40.000000000 +0000 +++ plinth-0.8.1/plinth/modules/names/views.py 2016-02-16 03:55:53.000000000 +0000 @@ -42,7 +42,7 @@ domain = get_domain(domain_type) name_services.append({ 'type': get_description(domain_type), - 'name': domain, + 'name': domain or _('Not Available'), 'services_enabled': get_services_status(domain_type, domain), }) diff -Nru plinth-0.7.2/plinth/modules/networks/forms.py plinth-0.8.1/plinth/modules/networks/forms.py --- plinth-0.7.2/plinth/modules/networks/forms.py 2015-12-23 11:34:40.000000000 +0000 +++ plinth-0.8.1/plinth/modules/networks/forms.py 2016-02-16 03:55:53.000000000 +0000 @@ -24,18 +24,6 @@ nm = import_from_gi('NM', '1.0') -def _get_interface_choices(device_type): - """Return a list of choices for a given device type.""" - interfaces = network.get_interface_list(device_type) - choices = [('', _('-- select --'))] - for interface, mac in interfaces.items(): - display_string = '{interface} ({mac})'.format(interface=interface, - mac=mac) - choices.append((interface, display_string)) - - return choices - - class ConnectionTypeSelectForm(forms.Form): """Form to select type for new connection.""" connection_type = forms.ChoiceField( @@ -44,8 +32,8 @@ for key, value in network.CONNECTION_TYPE_NAMES.items()]) -class AddEthernetForm(forms.Form): - """Form to create a new ethernet connection.""" +class ConnectionForm(forms.Form): + """Base form to create/edit a connection.""" name = forms.CharField(label=_('Connection Name')) interface = forms.ChoiceField( label=_('Physical Interface'), @@ -94,53 +82,95 @@ validators=[validators.validate_ipv4_address], required=False) + @staticmethod + def _get_interface_choices(device_type): + """Return a list of choices for a given device type.""" + interfaces = network.get_interface_list(device_type) + choices = [('', _('-- select --'))] + for interface, mac in interfaces.items(): + display_string = '{interface} ({mac})'.format(interface=interface, + mac=mac) + choices.append((interface, display_string)) + + return choices + + + def get_settings(self): + """Return settings dict from cleaned data.""" + settings = {} + settings['common'] = { + 'name': self.cleaned_data['name'], + 'interface': self.cleaned_data['interface'], + 'zone': self.cleaned_data['zone'], + } + settings['ipv4'] = self.get_ipv4_settings() + return settings + + def get_ipv4_settings(self): + """Return IPv4 dict from cleaned data.""" + ipv4 = { + 'method': self.cleaned_data['ipv4_method'], + 'address': self.cleaned_data['ipv4_address'], + 'netmask': self.cleaned_data['ipv4_netmask'], + 'gateway': self.cleaned_data['ipv4_gateway'], + 'dns': self.cleaned_data['ipv4_dns'], + 'second_dns': self.cleaned_data['ipv4_second_dns'], + } + return ipv4 + + +class EthernetForm(ConnectionForm): + """Form to create/edit a ethernet connection.""" def __init__(self, *args, **kwargs): """Initialize the form, populate interface choices.""" - super(AddEthernetForm, self).__init__(*args, **kwargs) - choices = _get_interface_choices(nm.DeviceType.ETHERNET) + super(EthernetForm, self).__init__(*args, **kwargs) + choices = self._get_interface_choices(nm.DeviceType.ETHERNET) self.fields['interface'].choices = choices + def get_settings(self): + """Return settings dict from cleaned data.""" + settings = super().get_settings() + settings['common']['type'] = '802-3-ethernet' + return settings + -class AddPPPoEForm(forms.Form): +class PPPoEForm(EthernetForm): """Form to create a new PPPoE connection.""" - name = forms.CharField(label=_('Connection Name')) - interface = forms.ChoiceField( - label=_('Physical Interface'), - choices=(), - help_text=_('The network device that this connection should be bound ' - 'to.')) - zone = forms.ChoiceField( - label=_('Firewall Zone'), - help_text=_('The firewall zone will control which services are ' - 'available over this interfaces. Select Internal only ' - 'for trusted networks.'), - choices=[('external', 'External'), ('internal', 'Internal')]) + ipv4_method = None + ipv4_address = None + ipv4_netmask = None + ipv4_gateway = None + ipv4_dns = None + ipv4_second_dns = None + username = forms.CharField(label=_('Username')) password = forms.CharField(label=_('Password'), widget=forms.PasswordInput(render_value=True)) show_password = forms.BooleanField(label=_('Show password'), required=False) - def __init__(self, *args, **kwargs): - """Initialize the form, populate interface choices.""" - super(AddPPPoEForm, self).__init__(*args, **kwargs) - choices = _get_interface_choices(nm.DeviceType.ETHERNET) - self.fields['interface'].choices = choices + def get_settings(self): + """Return setting dict from cleaned data.""" + settings = super().get_settings() + settings['common']['type'] = 'pppoe' + settings['pppoe'] = { + 'username': self.cleaned_data['username'], + 'password': self.cleaned_data['password'], + } + return settings + + def get_ipv4_settings(self): + """Return IPv4 settings from cleaned data.""" + return None + + +class WifiForm(ConnectionForm): + """Form to create/edit a Wi-Fi connection.""" + field_order = ['name', 'interface', 'zone', 'ssid', 'mode', 'auth_mode', + 'passphrase', 'ipv4_method', 'ipv4_address', 'ipv4_netmask', + 'ipv4_gateway', 'ipv4_dns', 'ipv4_second_dns'] -class AddWifiForm(forms.Form): - """Form to create a new Wi-Fi connection.""" - name = forms.CharField(label=_('Connection Name')) - interface = forms.ChoiceField( - label=_('Physical Interface'), - choices=(), - help_text=_('The network device that this connection should be bound ' - 'to.')) - zone = forms.ChoiceField( - label=_('Firewall Zone'), - help_text=_('The firewall zone will control which services are \ -available over this interfaces. Select Internal only for trusted networks.'), - choices=[('external', 'External'), ('internal', 'Internal')]) ssid = forms.CharField( label=_('SSID'), help_text=_('The visible name of the network.')) @@ -158,46 +188,21 @@ label=_('Passphrase'), validators=[validators.MinLengthValidator(8)], required=False) - ipv4_method = forms.ChoiceField( - label=_('IPv4 Addressing Method'), - choices=[('auto', 'Automatic (DHCP)'), - ('shared', 'Shared'), - ('manual', 'Manual')], - help_text=_('Select Automatic (DHCP) if you are connecting to an \ -existing wireless network. Shared mode is useful when running an Access \ -Point.')) - ipv4_address = forms.CharField( - label=_('Address'), - validators=[validators.validate_ipv4_address], - required=False) - ipv4_netmask = forms.CharField( - label=_('Netmask'), - help_text=_('Optional value. If left blank, a default netmask ' - 'based on the address will be used.'), - validators=[validators.validate_ipv4_address], - required=False) - ipv4_gateway = forms.CharField( - label=_('Gateway'), - help_text=_('Optional value.'), - validators=[validators.validate_ipv4_address], - required=False) - ipv4_dns = forms.CharField( - label=_('DNS Server'), - help_text=_('Optional value. If this value is given and IPv4 ' - 'addressing method is "Automatic", the DNS Servers ' - 'provided by a DHCP server will be ignored.'), - validators=[validators.validate_ipv4_address], - required=False) - ipv4_second_dns = forms.CharField( - label=_('Second DNS Server'), - help_text=_('Optional value. If this value is given and IPv4 ' - 'Addressing Method is "Automatic", the DNS Servers ' - 'provided by a DHCP server will be ignored.'), - validators=[validators.validate_ipv4_address], - required=False) def __init__(self, *args, **kwargs): """Initialize the form, populate interface choices.""" - super(AddWifiForm, self).__init__(*args, **kwargs) - choices = _get_interface_choices(nm.DeviceType.WIFI) + super(WifiForm, self).__init__(*args, **kwargs) + choices = self._get_interface_choices(nm.DeviceType.WIFI) self.fields['interface'].choices = choices + + def get_settings(self): + """Return setting dict from cleaned data.""" + settings = super().get_settings() + settings['common']['type'] = '802-11-wireless' + settings['wireless'] = { + 'ssid': self.cleaned_data['ssid'], + 'mode': self.cleaned_data['mode'], + 'auth_mode': self.cleaned_data['auth_mode'], + 'passphrase': self.cleaned_data['passphrase'], + } + return settings diff -Nru plinth-0.7.2/plinth/modules/networks/networks.py plinth-0.8.1/plinth/modules/networks/networks.py --- plinth-0.7.2/plinth/modules/networks/networks.py 2015-12-23 11:34:40.000000000 +0000 +++ plinth-0.8.1/plinth/modules/networks/networks.py 2016-02-16 03:55:53.000000000 +0000 @@ -23,8 +23,8 @@ from django.views.decorators.http import require_POST from logging import Logger -from .forms import (ConnectionTypeSelectForm, AddEthernetForm, AddPPPoEForm, - AddWifiForm) +from .forms import (ConnectionTypeSelectForm, EthernetForm, PPPoEForm, + WifiForm) from plinth import cfg from plinth import network from plinth import package @@ -124,45 +124,14 @@ if request.method == 'POST': if connection.get_connection_type() == '802-11-wireless': - form = AddWifiForm(request.POST) + form = WifiForm(request.POST) elif connection.get_connection_type() == '802-3-ethernet': - form = AddEthernetForm(request.POST) + form = EthernetForm(request.POST) elif connection.get_connection_type() == 'pppoe': - form = AddPPPoEForm(request.POST) + form = PPPoEForm(request.POST) if form.is_valid(): - name = form.cleaned_data['name'] - interface = form.cleaned_data['interface'] - zone = form.cleaned_data['zone'] - if connection.get_connection_type() == 'pppoe': - username = form.cleaned_data['username'] - password = form.cleaned_data['password'] - else: - ipv4_method = form.cleaned_data['ipv4_method'] - ipv4_address = form.cleaned_data['ipv4_address'] - ipv4_netmask = form.cleaned_data['ipv4_netmask'] - ipv4_gateway = form.cleaned_data['ipv4_gateway'] - ipv4_dns = form.cleaned_data['ipv4_dns'] - ipv4_second_dns = form.cleaned_data['ipv4_second_dns'] - - if connection.get_connection_type() == '802-3-ethernet': - network.edit_ethernet_connection( - connection, name, interface, zone, ipv4_method, - ipv4_address, ipv4_netmask, ipv4_gateway, ipv4_dns, - ipv4_second_dns) - elif connection.get_connection_type() == '802-11-wireless': - ssid = form.cleaned_data['ssid'] - mode = form.cleaned_data['mode'] - auth_mode = form.cleaned_data['auth_mode'] - passphrase = form.cleaned_data['passphrase'] - - network.edit_wifi_connection( - connection, name, interface, zone, ssid, mode, auth_mode, - passphrase, ipv4_method, ipv4_address, ipv4_netmask, - ipv4_gateway, ipv4_dns, ipv4_second_dns) - elif connection.get_connection_type() == 'pppoe': - network.edit_pppoe_connection( - connection, name, interface, zone, username, password) + network.edit_connection(connection, form.get_settings()) return redirect(reverse_lazy('networks:index')) else: @@ -215,15 +184,15 @@ except KeyError: form_data['auth_mode'] = 'open' - form = AddWifiForm(form_data) + form = WifiForm(form_data) elif settings_connection.get_connection_type() == '802-3-ethernet': - form = AddEthernetForm(form_data) + form = EthernetForm(form_data) elif settings_connection.get_connection_type() == 'pppoe': settings_pppoe = connection.get_setting_pppoe() form_data['username'] = settings_pppoe.get_username() secrets = connection.get_secrets('pppoe') form_data['password'] = secrets['pppoe']['password'] - form = AddPPPoEForm(form_data) + form = PPPoEForm(form_data) return TemplateResponse(request, 'connections_edit.html', {'title': _('Edit Connection'), @@ -302,24 +271,12 @@ form = None if request.method == 'POST': - form = AddEthernetForm(request.POST) + form = EthernetForm(request.POST) if form.is_valid(): - name = form.cleaned_data['name'] - interface = form.cleaned_data['interface'] - zone = form.cleaned_data['zone'] - ipv4_method = form.cleaned_data['ipv4_method'] - ipv4_address = form.cleaned_data['ipv4_address'] - ipv4_netmask = form.cleaned_data['ipv4_netmask'] - ipv4_gateway = form.cleaned_data['ipv4_gateway'] - ipv4_dns = form.cleaned_data['ipv4_dns'] - ipv4_second_dns = form.cleaned_data['ipv4_second_dns'] - - network.add_ethernet_connection( - name, interface, zone, ipv4_method, ipv4_address, ipv4_netmask, - ipv4_gateway, ipv4_dns, ipv4_second_dns) + network.add_connection(form.get_settings()) return redirect(reverse_lazy('networks:index')) else: - form = AddEthernetForm() + form = EthernetForm() return TemplateResponse(request, 'connections_create.html', {'title': _('Adding New Ethernet Connection'), @@ -332,19 +289,12 @@ form = None if request.method == 'POST': - form = AddPPPoEForm(request.POST) + form = PPPoEForm(request.POST) if form.is_valid(): - name = form.cleaned_data['name'] - interface = form.cleaned_data['interface'] - zone = form.cleaned_data['zone'] - username = form.cleaned_data['username'] - password = form.cleaned_data['password'] - - network.add_pppoe_connection( - name, interface, zone, username, password) + network.add_connection(form.get_settings()) return redirect(reverse_lazy('networks:index')) else: - form = AddPPPoEForm() + form = PPPoEForm() return TemplateResponse(request, 'connections_create.html', {'title': _('Adding New PPPoE Connection'), @@ -368,32 +318,15 @@ 'ipv4_method': 'auto'} if request.method == 'POST': - form = AddWifiForm(request.POST) + form = WifiForm(request.POST) if form.is_valid(): - name = form.cleaned_data['name'] - interface = form.cleaned_data['interface'] - zone = form.cleaned_data['zone'] - ssid = form.cleaned_data['ssid'] - mode = form.cleaned_data['mode'] - auth_mode = form.cleaned_data['auth_mode'] - passphrase = form.cleaned_data['passphrase'] - ipv4_method = form.cleaned_data['ipv4_method'] - ipv4_address = form.cleaned_data['ipv4_address'] - ipv4_netmask = form.cleaned_data['ipv4_netmask'] - ipv4_gateway = form.cleaned_data['ipv4_gateway'] - ipv4_dns = form.cleaned_data['ipv4_dns'] - ipv4_second_dns = form.cleaned_data['ipv4_second_dns'] - - network.add_wifi_connection( - name, interface, zone, ssid, mode, auth_mode, passphrase, - ipv4_method, ipv4_address, ipv4_netmask, ipv4_gateway, - ipv4_dns, ipv4_second_dns) + network.add_connection(form.get_settings()) return redirect(reverse_lazy('networks:index')) else: if form_data: - form = AddWifiForm(form_data) + form = WifiForm(form_data) else: - form = AddWifiForm() + form = WifiForm() return TemplateResponse(request, 'connections_create.html', {'title': _('Adding New Wi-Fi Connection'), diff -Nru plinth-0.7.2/plinth/modules/networks/templates/connections_diagram.html plinth-0.8.1/plinth/modules/networks/templates/connections_diagram.html --- plinth-0.7.2/plinth/modules/networks/templates/connections_diagram.html 2015-12-23 11:34:40.000000000 +0000 +++ plinth-0.8.1/plinth/modules/networks/templates/connections_diagram.html 2016-02-16 03:55:53.000000000 +0000 @@ -94,7 +94,7 @@
    {{ cfg.box_name }} + class="col-image network-entity" alt="{{ box_name }}"/>
    {% blocktrans trimmed %} - This interface should be connected to local + This interface should be connected to a local network/machine. If you connect this interface to a public network, services meant to be available only internally will become available externally. This is a @@ -299,7 +299,7 @@ {% blocktrans trimmed %} This interface should receive your Internet connection. - If you connect it your a local network/machine, many + If you connect it to a local network/machine, many services meant to available only internally will not be available. {% endblocktrans %} @@ -317,10 +317,10 @@
    {% blocktrans trimmed %} - This interface is not maintained by FreedomBox. Its - security status is unknown to FreedomBox. Many FreedomBox + This interface is not maintained by {{ box_name }}. Its + security status is unknown to {{ box_name }}. Many {{ box_name }} services may not be available on this interface. It is - recommended that you deactivate/delete this connection and + recommended that you deactivate or delete this connection and re-configure it. {% endblocktrans %}
    diff -Nru plinth-0.7.2/plinth/modules/openvpn/templates/openvpn.html plinth-0.8.1/plinth/modules/openvpn/templates/openvpn.html --- plinth-0.7.2/plinth/modules/openvpn/templates/openvpn.html 2015-12-23 11:34:40.000000000 +0000 +++ plinth-0.8.1/plinth/modules/openvpn/templates/openvpn.html 2016-02-16 03:55:53.000000000 +0000 @@ -35,9 +35,9 @@

    {% trans "Virtual Private Network (OpenVPN)" %}

    - {% blocktrans trimmed with box_name=cfg.box_name %} + {% blocktrans trimmed %} Virtual Private Network (VPN) is a technique for securely - connecting two machines in order to access resources of a + connecting two devices in order to access resources of a private network. While you are away from home, you can connect to your {{ box_name }} in order to join your home network and access private/internal services provided by {{ box_name }}. @@ -51,19 +51,19 @@

    {% trans "Profile" %}

    - {% blocktrans trimmed with box_name=cfg.box_name %} + {% blocktrans trimmed %} To connect to {{ box_name }}'s VPN, you need to download a profile and feed it to an OpenVPN client on your mobile or desktop machine. OpenVPN Clients are available for most platforms. See documentation on + title="{{ box_name }} Manual - OpenVPN">documentation on recommended clients and instructions on how to configure them. {% endblocktrans %}

    - {% blocktrans trimmed with box_name=cfg.box_name %} + {% blocktrans trimmed %} Profile is specific to each user of {{ box_name }}. Keep it a secret. {% endblocktrans %} @@ -82,7 +82,7 @@ {% if not status.is_setup and not status.setup_running %}

    - {% blocktrans trimmed with box_name=cfg.box_name %} + {% blocktrans trimmed %} OpenVPN has not yet been setup. Performing a secure setup takes a very long time. Depending on how fast your {{ box_name }} is, it may even take hours. If the setup @@ -105,7 +105,7 @@

    - {% blocktrans trimmed with box_name=cfg.box_name %} + {% blocktrans trimmed %} To perform a secure setup, this process takes a very long time. Depending on how fast your {{ box_name }} is, it may even take hours. If the setup is interrupted, you may start diff -Nru plinth-0.7.2/plinth/modules/owncloud/owncloud.py plinth-0.8.1/plinth/modules/owncloud/owncloud.py --- plinth-0.7.2/plinth/modules/owncloud/owncloud.py 2015-12-23 11:34:40.000000000 +0000 +++ plinth-0.8.1/plinth/modules/owncloud/owncloud.py 2016-02-16 03:55:53.000000000 +0000 @@ -58,8 +58,8 @@ service.notify_enabled(None, True) -@package.required(['postgresql', 'php5-pgsql', 'owncloud'], - on_install=on_install) +@package.required(['postgresql', 'php5-pgsql', 'owncloud', 'php-dropbox', + 'php-google-api-php-client'], on_install=on_install) def index(request): """Serve the ownCloud configuration page""" status = get_status() diff -Nru plinth-0.7.2/plinth/modules/pagekite/templates/pagekite_introduction.html plinth-0.8.1/plinth/modules/pagekite/templates/pagekite_introduction.html --- plinth-0.7.2/plinth/modules/pagekite/templates/pagekite_introduction.html 2015-12-23 11:34:40.000000000 +0000 +++ plinth-0.8.1/plinth/modules/pagekite/templates/pagekite_introduction.html 2016-02-16 03:55:53.000000000 +0000 @@ -23,7 +23,7 @@ {% block content %}

    - {% blocktrans trimmed with box_name=cfg.box_name %} + {% blocktrans trimmed %} PageKite is a system for exposing {{ box_name }} services when you don't have a direct connection to the Internet. You only need this if your {{ box_name }} services are unreachable from @@ -34,13 +34,13 @@

    • - {% blocktrans trimmed with box_name=cfg.box_name %} + {% blocktrans trimmed %} {{ box_name }} is behind a restricted firewall. {% endblocktrans %}
    • - {% blocktrans trimmed with box_name=cfg.box_name %} + {% blocktrans trimmed %} {{ box_name }} is connected to a (wireless) router which you don't control. {% endblocktrans %} @@ -64,7 +64,7 @@

    - {% blocktrans trimmed with box_name=cfg.box_name %} + {% blocktrans trimmed %} PageKite works around NAT, firewalls and IP-address limitations by using a combination of tunnels and reverse proxies. You can use any pagekite service provider, for example diff -Nru plinth-0.7.2/plinth/modules/pagekite/templates/pagekite_standard_services.html plinth-0.8.1/plinth/modules/pagekite/templates/pagekite_standard_services.html --- plinth-0.7.2/plinth/modules/pagekite/templates/pagekite_standard_services.html 2015-12-23 11:34:40.000000000 +0000 +++ plinth-0.8.1/plinth/modules/pagekite/templates/pagekite_standard_services.html 2016-02-16 03:55:53.000000000 +0000 @@ -46,13 +46,6 @@ {% endblocktrans %}

    -

    - {% blocktrans trimmed %} - Exposing SSH with the default password for 'fbx' is a VERY BAD - idea. - {% endblocktrans %} -

    -
    diff -Nru plinth-0.7.2/plinth/modules/privoxy/templates/privoxy.html plinth-0.8.1/plinth/modules/privoxy/templates/privoxy.html --- plinth-0.7.2/plinth/modules/privoxy/templates/privoxy.html 2015-12-23 11:34:40.000000000 +0000 +++ plinth-0.8.1/plinth/modules/privoxy/templates/privoxy.html 2016-02-16 03:55:53.000000000 +0000 @@ -35,7 +35,7 @@

    - {% blocktrans trimmed with box_name=cfg.box_name %} + {% blocktrans trimmed %} You can use Privoxy by modifying your browser proxy settings to your {{ box_name }} hostname (or IP address) with port 8118. While using Privoxy, you can see its configuration details and diff -Nru plinth-0.7.2/plinth/modules/quassel/templates/quassel.html plinth-0.8.1/plinth/modules/quassel/templates/quassel.html --- plinth-0.7.2/plinth/modules/quassel/templates/quassel.html 2015-12-23 11:34:40.000000000 +0000 +++ plinth-0.8.1/plinth/modules/quassel/templates/quassel.html 2016-02-16 03:55:53.000000000 +0000 @@ -26,7 +26,7 @@

    {% trans "IRC Client (Quassel)" %}

    - {% blocktrans trimmed with box_name=cfg.box_name %} + {% blocktrans trimmed %} Quassel is an IRC application that is split into two parts, a "core" and a "client". This allows the core to remain connected to IRC servers, and to continue receiving messages, even when diff -Nru plinth-0.7.2/plinth/modules/repro/forms.py plinth-0.8.1/plinth/modules/repro/forms.py --- plinth-0.7.2/plinth/modules/repro/forms.py 1970-01-01 00:00:00.000000000 +0000 +++ plinth-0.8.1/plinth/modules/repro/forms.py 2016-02-16 03:55:53.000000000 +0000 @@ -0,0 +1,30 @@ +# +# This file is part of Plinth. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# + +""" +Forms for repro module. +""" + +from django import forms +from django.utils.translation import ugettext_lazy as _ + + +class ReproForm(forms.Form): + """Configuration form.""" + enabled = forms.BooleanField( + label=_('Enable repro service'), + required=False) diff -Nru plinth-0.7.2/plinth/modules/repro/__init__.py plinth-0.8.1/plinth/modules/repro/__init__.py --- plinth-0.7.2/plinth/modules/repro/__init__.py 1970-01-01 00:00:00.000000000 +0000 +++ plinth-0.8.1/plinth/modules/repro/__init__.py 2016-02-16 03:55:53.000000000 +0000 @@ -0,0 +1,66 @@ +# +# This file is part of Plinth. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# + +""" +Plinth module for repro. +""" + +from django.utils.translation import ugettext_lazy as _ + +from plinth import action_utils +from plinth import cfg +from plinth import service as service_module + +depends = ['plinth.modules.apps'] + +service = None + + +def init(): + """Initialize the repro module.""" + menu = cfg.main_menu.get('apps:index') + menu.add_urlname(_('SIP Server (repro)'), 'glyphicon-phone-alt', + 'repro:index', 825) + + global service + service = service_module.Service( + 'repro', _('repro SIP Server'), ['sip-plinth', 'sip-tls-plinth'], + is_external=True, enabled=is_enabled()) + + +def is_enabled(): + """Return whether the service is enabled.""" + return action_utils.service_is_enabled('repro') + + +def is_running(): + """Return whether the service is running.""" + return action_utils.service_is_running('repro') + + +def diagnose(): + """Run diagnostics and return the results.""" + results = [] + + results.append(action_utils.diagnose_port_listening(5060, 'udp4')) + results.append(action_utils.diagnose_port_listening(5060, 'udp6')) + results.append(action_utils.diagnose_port_listening(5060, 'tcp4')) + results.append(action_utils.diagnose_port_listening(5060, 'tcp6')) + results.append(action_utils.diagnose_port_listening(5061, 'tcp4')) + results.append(action_utils.diagnose_port_listening(5061, 'tcp6')) + + return results diff -Nru plinth-0.7.2/plinth/modules/repro/templates/repro.html plinth-0.8.1/plinth/modules/repro/templates/repro.html --- plinth-0.7.2/plinth/modules/repro/templates/repro.html 1970-01-01 00:00:00.000000000 +0000 +++ plinth-0.8.1/plinth/modules/repro/templates/repro.html 2016-02-16 03:55:53.000000000 +0000 @@ -0,0 +1,83 @@ +{% extends "base.html" %} +{% comment %} +# +# This file is part of Plinth. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +{% endcomment %} + +{% load bootstrap %} +{% load i18n %} + +{% block content %} + +

    {% trans "SIP Server (repro)" %}

    + +

    + {% blocktrans trimmed %} + repro provides various SIP services that a SIP softphone can utilize to + provide audio and video calls as well as presence and instant messaging. + repro provides a server and SIP user accounts that clients can use to let + their presence known. It also acts as a proxy to federate SIP + communications to other servers on the Internet similar to email. + {% endblocktrans %} +

    + +

    + {% blocktrans trimmed %} + To make SIP calls, a client application is needed. Available clients + include Jitsi (for computers) and + + CSipSimple (for Android phones). + {% endblocktrans %} +

    + +

    + {% blocktrans trimmed %} + Note: Before using repro, domains and users will need + to be configured using the web-based + configuration panel. Users in the admin group will be able + to log in to the repro configuration panel. After setting the domain, it + is required to restart the repro service. Disable the service and + re-enable it. + {% endblocktrans %} +

    + +

    {% trans "Status" %}

    + +

    + {% if status.is_running %} + + {% trans "repro service is running" %} + {% else %} + + {% trans "repro service is not running" %} + {% endif %} +

    + + {% include "diagnostics_button.html" with module="repro" %} + +

    {% trans "Configuration" %}

    + + + {% csrf_token %} + + {{ form|bootstrap }} + + +
    + +{% endblock %} diff -Nru plinth-0.7.2/plinth/modules/repro/urls.py plinth-0.8.1/plinth/modules/repro/urls.py --- plinth-0.7.2/plinth/modules/repro/urls.py 1970-01-01 00:00:00.000000000 +0000 +++ plinth-0.8.1/plinth/modules/repro/urls.py 2016-02-16 03:55:53.000000000 +0000 @@ -0,0 +1,29 @@ +# +# This file is part of Plinth. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# + +""" +URLs for the repro module. +""" + +from django.conf.urls import url + +from . import views + + +urlpatterns = [ + url(r'^apps/repro/$', views.index, name='index'), +] diff -Nru plinth-0.7.2/plinth/modules/repro/views.py plinth-0.8.1/plinth/modules/repro/views.py --- plinth-0.7.2/plinth/modules/repro/views.py 1970-01-01 00:00:00.000000000 +0000 +++ plinth-0.8.1/plinth/modules/repro/views.py 2016-02-16 03:55:53.000000000 +0000 @@ -0,0 +1,79 @@ +# +# This file is part of Plinth. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# + +""" +Views for repro module. +""" + +from django.contrib import messages +from django.template.response import TemplateResponse +from django.utils.translation import ugettext as _ + +from .forms import ReproForm +from plinth import actions +from plinth import package +from plinth.modules import repro + + +def on_install(): + """Notify that the service is now enabled.""" + actions.superuser_run('repro', ['setup']) + repro.service.notify_enabled(None, True) + + +@package.required(['repro'], on_install=on_install) +def index(request): + """Serve configuration page.""" + status = get_status() + + form = None + + if request.method == 'POST': + form = ReproForm(request.POST, prefix='repro') + if form.is_valid(): + _apply_changes(request, status, form.cleaned_data) + status = get_status() + form = ReproForm(initial=status, prefix='repro') + else: + form = ReproForm(initial=status, prefix='repro') + + return TemplateResponse(request, 'repro.html', + {'title': _('SIP Server (repro)'), + 'status': status, + 'form': form}) + + +def get_status(): + """Get the current service status.""" + return {'enabled': repro.is_enabled(), + 'is_running': repro.is_running()} + + +def _apply_changes(request, old_status, new_status): + """Apply the changes.""" + modified = False + + if old_status['enabled'] != new_status['enabled']: + sub_command = 'enable' if new_status['enabled'] else 'disable' + actions.superuser_run('repro', [sub_command]) + repro.service.notify_enabled(None, new_status['enabled']) + modified = True + + if modified: + messages.success(request, _('Configuration updated')) + else: + messages.info(request, _('Setting unchanged')) diff -Nru plinth-0.7.2/plinth/modules/restore/templates/restore_index.html plinth-0.8.1/plinth/modules/restore/templates/restore_index.html --- plinth-0.7.2/plinth/modules/restore/templates/restore_index.html 2015-12-23 11:34:40.000000000 +0000 +++ plinth-0.8.1/plinth/modules/restore/templates/restore_index.html 2016-02-16 03:55:53.000000000 +0000 @@ -31,7 +31,7 @@ web applications. The idea is to uncouple web applications from data. No matter where a web application is served from, the data can be stored on an unhosted storage server of user's - choice. With reStore, your {{ cfg.box_name }} becomes your + choice. With reStore, your {{ box_name }} becomes your unhosted storage server. {% endblocktrans %}

    diff -Nru plinth-0.7.2/plinth/modules/system/templates/system.html plinth-0.8.1/plinth/modules/system/templates/system.html --- plinth-0.7.2/plinth/modules/system/templates/system.html 2015-12-23 11:34:40.000000000 +0000 +++ plinth-0.8.1/plinth/modules/system/templates/system.html 2016-02-16 03:55:53.000000000 +0000 @@ -25,14 +25,14 @@

    {% trans "System Configuration" %}

    - {% blocktrans trimmed with box_name=cfg.box_name %} + {% blocktrans trimmed %} Here you can administrate the underlying system of your {{ box_name }}. {% endblocktrans %}

    - {% blocktrans trimmed with box_name=cfg.box_name %} + {% blocktrans trimmed %} The options affect the {{ box_name }} at its most general level, so be careful! {% endblocktrans %} diff -Nru plinth-0.7.2/plinth/modules/tor/forms.py plinth-0.8.1/plinth/modules/tor/forms.py --- plinth-0.7.2/plinth/modules/tor/forms.py 1970-01-01 00:00:00.000000000 +0000 +++ plinth-0.8.1/plinth/modules/tor/forms.py 2016-02-16 03:55:53.000000000 +0000 @@ -0,0 +1,47 @@ +# +# This file is part of Plinth. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# + +""" +Forms for configuring Tor. +""" + +from django import forms +from django.utils.translation import ugettext_lazy as _ + +from plinth import cfg +from plinth.utils import format_lazy + + +class TorForm(forms.Form): # pylint: disable=W0232 + """Tor configuration form.""" + enabled = forms.BooleanField( + label=_('Enable Tor'), + required=False) + hs_enabled = forms.BooleanField( + label=_('Enable Tor Hidden Service'), + required=False, + help_text=format_lazy(_( + 'A hidden service will allow {box_name} to provide selected ' + 'services (such as ownCloud or chat) without revealing its ' + 'location.'), box_name=_(cfg.box_name))) + apt_transport_tor_enabled = forms.BooleanField( + label=_('Download software packages over Tor'), + required=False, + help_text=_('When enabled, software will be downloaded over the Tor ' + 'network for installations and upgrades. This adds a ' + 'degree of privacy and security during software ' + 'downloads.')) diff -Nru plinth-0.7.2/plinth/modules/tor/__init__.py plinth-0.8.1/plinth/modules/tor/__init__.py --- plinth-0.7.2/plinth/modules/tor/__init__.py 2015-12-23 11:34:40.000000000 +0000 +++ plinth-0.8.1/plinth/modules/tor/__init__.py 2016-02-16 03:55:53.000000000 +0000 @@ -16,20 +16,192 @@ # """ -Plinth module to configure Tor +Plinth module to configure Tor. """ +import augeas from django.utils.translation import ugettext as _ +import glob +import itertools -from . import tor -from .tor import init from plinth import actions from plinth import action_utils +from plinth import cfg +from plinth import service as service_module +from plinth.modules.names import SERVICES +from plinth.signals import domain_added -__all__ = ['tor', 'init'] depends = ['plinth.modules.apps', 'plinth.modules.names'] +socks_service = None +bridge_service = None + +APT_SOURCES_URI_PATHS = ('/files/etc/apt/sources.list/*/uri', + '/files/etc/apt/sources.list.d/*/*/uri') +APT_TOR_PREFIX = 'tor+' + + +def init(): + """Initialize the module.""" + menu = cfg.main_menu.get('apps:index') + menu.add_urlname(_('Anonymity Network (Tor)'), 'glyphicon-eye-close', + 'tor:index', 100) + + global socks_service + socks_service = service_module.Service( + 'tor-socks', _('Tor Anonymity Network'), + is_external=False, enabled=is_enabled()) + + global bridge_service + bridge_service = service_module.Service( + 'tor-bridge', _('Tor Bridge Relay'), + ports=['tor-orport', 'tor-obfs3', 'tor-obfs4'], + is_external=True, enabled=is_enabled()) + + # Register hidden service name with Name Services module. + (hs_enabled, hs_hostname, hs_ports) = get_hs() + + if is_enabled() and is_running() and hs_enabled and hs_hostname: + hs_services = [] + for service_type in SERVICES: + if str(service_type[2]) in hs_ports: + hs_services.append(service_type[0]) + else: + hs_hostname = None + hs_services = None + + domain_added.send_robust( + sender='tor', domain_type='hiddenservice', + name=hs_hostname, description=_('Tor Hidden Service'), + services=hs_services) + + +def is_enabled(): + """Return whether the module is enabled.""" + return action_utils.service_is_enabled('tor') + + +def is_running(): + """Return whether the service is running.""" + return action_utils.service_is_running('tor') + + +def get_status(): + """Return current Tor status.""" + output = actions.superuser_run('tor', ['get-ports']) + port_info = output.split('\n') + ports = {} + for line in port_info: + try: + (key, val) = line.split() + ports[key] = val + except ValueError: + continue + + (hs_enabled, hs_hostname, hs_ports) = get_hs() + + return {'enabled': is_enabled(), + 'is_running': is_running(), + 'ports': ports, + 'hs_enabled': hs_enabled, + 'hs_hostname': hs_hostname, + 'hs_ports': hs_ports, + 'apt_transport_tor_enabled': is_apt_transport_tor_enabled()} + + +def get_hs(): + """Return hidden service status.""" + output = actions.superuser_run('tor', ['get-hs']) + output = output.strip() + if output == '': + hs_enabled = False + hs_hostname = 'Not Configured' + hs_ports = '' + elif output == 'error': + hs_enabled = False + hs_hostname = 'Not available (Run Tor at least once)' + hs_ports = '' + else: + hs_enabled = True + hs_info = output.split() + hs_hostname = hs_info[0] + hs_ports = hs_info[1] + + return (hs_enabled, hs_hostname, hs_ports) + + +def get_augeas(): + """Return an instance of Augeaus for processing APT configuration.""" + aug = augeas.Augeas(flags=augeas.Augeas.NO_LOAD + + augeas.Augeas.NO_MODL_AUTOLOAD) + aug.set('/augeas/load/Aptsources/lens', 'Aptsources.lns') + aug.set('/augeas/load/Aptsources/incl[last() + 1]', '/etc/apt/sources.list') + aug.set('/augeas/load/Aptsources/incl[last() + 1]', + '/etc/apt/sources.list.d/*.list') + aug.load() + + # Currently, augeas does not handle Deb822 format, it error out. + if aug.match('/augeas/files/etc/apt/sources.list/error') or \ + aug.match('/augeas/files/etc/apt/sources.list.d//error'): + raise Exception('Error parsing sources list') + + # Starting with Apt 1.1, /etc/apt/sources.list.d/*.sources will + # contain files with Deb822 format. If they are found, error out + # for now. XXX: Provide proper support Deb822 format with a new + # Augeas lens. + if glob.glob('/etc/apt/sources.list.d/*.sources'): + raise Exception('Can not handle Deb822 source files') + + return aug + + +def iter_apt_uris(aug): + """Iterate over all the APT source URIs.""" + return itertools.chain.from_iterable([aug.match(path) + for path in APT_SOURCES_URI_PATHS]) + + +def get_real_apt_uri_path(aug, path): + """Return the actual path which contains APT URL. + + XXX: This is a workaround for Augeas bug parsing Apt source files + with '[options]'. Remove this workaround after Augeas lens is + fixed. + """ + uri = aug.get(path) + if uri[0] == '[': + parent_path = path.rsplit('/', maxsplit=1)[0] + skipped = False + for child_path in aug.match(parent_path + '/*')[1:]: + if skipped: + return child_path + + value = aug.get(child_path) + if value[-1] == ']': + skipped = True + + return path + + +def is_apt_transport_tor_enabled(): + """Return whether APT is set to download packages over Tor.""" + try: + aug = get_augeas() + except Exception: + # If there was an error with parsing or there are Deb822 + # files. + return False + + for uri_path in iter_apt_uris(aug): + uri_path = get_real_apt_uri_path(aug, uri_path) + uri = aug.get(uri_path) + if not uri.startswith(APT_TOR_PREFIX) and \ + (uri.startswith('http://') or uri.startswith('https://')): + return False + + return True + def diagnose(): """Run diagnostics and return the results.""" diff -Nru plinth-0.7.2/plinth/modules/tor/templates/tor.html plinth-0.8.1/plinth/modules/tor/templates/tor.html --- plinth-0.7.2/plinth/modules/tor/templates/tor.html 2015-12-23 11:34:40.000000000 +0000 +++ plinth-0.8.1/plinth/modules/tor/templates/tor.html 2016-02-16 03:55:53.000000000 +0000 @@ -21,6 +21,15 @@ {% load bootstrap %} {% load i18n %} +{% block page_head %} + + {% if config_running %} + + {% endif %} + +{% endblock %} + + {% block content %}

    {% trans "Anonymity Network (Tor)" %}

    @@ -38,89 +47,100 @@

    {% trans "Status" %}

    -

    - {% if status.is_running %} + {% if config_running %} + +

    - {% trans "Tor is running" %} - {% else %} - - {% trans "Tor is not running" %} + {% trans "Tor configuration is being updated" %} +

    + + {% else %} + +

    + {% if status.is_running %} + + {% trans "Tor is running" %} + {% else %} + + {% trans "Tor is not running" %} + {% endif %} +

    + + {% include "diagnostics_button.html" with module="tor" %} + + {% if status.hs_enabled %} +
    +
    + + + + + + + + + + + + + +
    {% trans "Hidden Service" %}{% trans "Port" %}
    {{ status.hs_hostname }}{{ status.hs_ports }}
    +
    +
    {% endif %} -

    - {% include "diagnostics_button.html" with module="tor" %} +

    {% trans "Configuration" %}

    + +
    + {% csrf_token %} + + {{ form|bootstrap }} + + +
    + +

    {% trans "Bridge" %}

    + +

    + {% blocktrans trimmed %} + Your {{ box_name }} is configured as a Tor bridge with obfsproxy, + so it can help circumvent censorship. If your {{ box_name }} is + behind a router or firewall, you should make sure the following + ports are open, and port-forwarded, if necessary: + {% endblocktrans %} +

    - {% if status.hs_enabled %}
    - + - - - - + {% for name, port in status.ports.items %} + + + + + {% endfor %}
    {% trans "Hidden Service" %}{% trans "Service" %} {% trans "Port" %}
    {{ status.hs_hostname }}{{ status.hs_ports }}
    {{ name }}{{ port }}
    - {% endif %} -

    {% trans "Configuration" %}

    +

    {% trans "SOCKS" %}

    -
    - {% csrf_token %} +

    + {% blocktrans trimmed %} + A Tor SOCKS port is available on your {{ box_name }} on TCP port + 9050. + {% endblocktrans %} +

    - {{ form|bootstrap }} - - -
    - -

    {% trans "Bridge" %}

    - -

    - {% blocktrans trimmed with box_name=cfg.box_name %} - Your {{ box_name }} is configured as a Tor bridge with obfsproxy, - so it can help circumvent censorship. If your {{ box_name }} is - behind a router or firewall, you should make sure the following - ports are open, and port-forwarded, if necessary: - {% endblocktrans %} -

    - -
    -
    - - - - - - - - - {% for name, port in status.ports.items %} - - - - - {% endfor %} - -
    {% trans "Service" %}{% trans "Port" %}
    {{ name }}{{ port }}
    -
    -
    - -

    {% trans "SOCKS" %}

    - -

    - {% blocktrans trimmed with box_name=cfg.box_name %} - A Tor SOCKS port is available on your {{ box_name }} on TCP port - 9050. - {% endblocktrans %} -

    + {% endif %} {% endblock %} diff -Nru plinth-0.7.2/plinth/modules/tor/tests/test_tor.py plinth-0.8.1/plinth/modules/tor/tests/test_tor.py --- plinth-0.7.2/plinth/modules/tor/tests/test_tor.py 2015-12-23 11:34:40.000000000 +0000 +++ plinth-0.8.1/plinth/modules/tor/tests/test_tor.py 2016-02-16 03:55:53.000000000 +0000 @@ -22,7 +22,7 @@ import os import unittest -from ..tor import is_apt_transport_tor_enabled, get_hs, get_status +from plinth.modules.tor import is_apt_transport_tor_enabled, get_hs, get_status euid = os.geteuid() diff -Nru plinth-0.7.2/plinth/modules/tor/tor.py plinth-0.8.1/plinth/modules/tor/tor.py --- plinth-0.7.2/plinth/modules/tor/tor.py 2015-12-23 11:34:40.000000000 +0000 +++ plinth-0.8.1/plinth/modules/tor/tor.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,295 +0,0 @@ -# -# This file is part of Plinth. -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . -# - -""" -Plinth module for configuring Tor -""" - -import augeas -from django import forms -from django.contrib import messages -from django.template.response import TemplateResponse -from django.utils.translation import ugettext_lazy as _ -import glob -import itertools - -from plinth import actions -from plinth import action_utils -from plinth import cfg -from plinth import package -from plinth.errors import ActionError -from plinth.modules.names import SERVICES -from plinth.signals import domain_added, domain_removed - -APT_SOURCES_URI_PATHS = ('/files/etc/apt/sources.list/*/uri', - '/files/etc/apt/sources.list.d/*/*/uri') -APT_TOR_PREFIX = 'tor+' - - -class TorForm(forms.Form): # pylint: disable=W0232 - """Tor configuration form""" - enabled = forms.BooleanField( - label=_('Enable Tor'), - required=False) - hs_enabled = forms.BooleanField( - label=_('Enable Tor Hidden Service'), - required=False, - help_text=_('A hidden service will allow FreedomBox to provide ' - 'selected services (such as ownCloud or Chat) without ' - 'revealing its location.')) - apt_transport_tor_enabled = forms.BooleanField( - label=_('Download software packages over Tor'), - required=False, - help_text=_('When enabled, software will be downloaded over the Tor ' - 'network for installations and upgrades. This adds a ' - 'degree of privacy and security during software ' - 'downloads.')) - - -def init(): - """Initialize the Tor module.""" - menu = cfg.main_menu.get('apps:index') - menu.add_urlname(_('Anonymity Network (Tor)'), 'glyphicon-eye-close', - 'tor:index', 100) - - # Register hidden service name with Name Services module. - enabled = action_utils.service_is_enabled('tor') - is_running = action_utils.service_is_running('tor') - (hs_enabled, hs_hostname, hs_ports) = get_hs() - - if enabled and is_running and hs_enabled and hs_hostname: - hs_services = [] - for service in SERVICES: - if str(service[2]) in hs_ports: - hs_services.append(service[0]) - else: - hs_hostname = None - hs_services = None - - domain_added.send_robust( - sender='tor', domain_type='hiddenservice', - name=hs_hostname, description=_('Tor Hidden Service'), - services=hs_services) - - -def on_install(): - """Setup Tor configuration as soon as it is installed.""" - actions.superuser_run('tor', ['setup']) - actions.superuser_run('tor', ['enable-apt-transport-tor']) - - -@package.required(['tor', 'tor-geoipdb', 'torsocks', 'obfs4proxy', - 'apt-transport-tor'], - on_install=on_install) -def index(request): - """Service the index page""" - status = get_status() - - form = None - - if request.method == 'POST': - form = TorForm(request.POST, prefix='tor') - # pylint: disable=E1101 - if form.is_valid(): - _apply_changes(request, status, form.cleaned_data) - status = get_status() - form = TorForm(initial=status, prefix='tor') - else: - form = TorForm(initial=status, prefix='tor') - - return TemplateResponse(request, 'tor.html', - {'title': _('Tor Control Panel'), - 'status': status, - 'form': form}) - - -def get_augeas(): - """Return an instance of Augeaus for processing APT configuration.""" - aug = augeas.Augeas(flags=augeas.Augeas.NO_LOAD + - augeas.Augeas.NO_MODL_AUTOLOAD) - aug.set('/augeas/load/Aptsources/lens', 'Aptsources.lns') - aug.set('/augeas/load/Aptsources/incl[last() + 1]', '/etc/apt/sources.list') - aug.set('/augeas/load/Aptsources/incl[last() + 1]', - '/etc/apt/sources.list.d/*.list') - aug.load() - - # Currently, augeas does not handle Deb822 format, it error out. - if aug.match('/augeas/files/etc/apt/sources.list/error') or \ - aug.match('/augeas/files/etc/apt/sources.list.d//error'): - raise Exception('Error parsing sources list') - - # Starting with Apt 1.1, /etc/apt/sources.list.d/*.sources will - # contain files with Deb822 format. If they are found, error out - # for now. XXX: Provide proper support Deb822 format with a new - # Augeas lens. - if glob.glob('/etc/apt/sources.list.d/*.sources'): - raise Exception('Can not handle Deb822 source files') - - return aug - - -def iter_apt_uris(aug): - """Iterate over all the APT source URIs.""" - return itertools.chain.from_iterable([aug.match(path) - for path in APT_SOURCES_URI_PATHS]) - - -def get_real_apt_uri_path(aug, path): - """Return the actual path which contains APT URL. - - XXX: This is a workaround for Augeas bug parsing Apt source files - with '[options]'. Remove this workaround after Augeas lens is - fixed. - """ - uri = aug.get(path) - if uri[0] == '[': - parent_path = path.rsplit('/', maxsplit=1)[0] - skipped = False - for child_path in aug.match(parent_path + '/*')[1:]: - if skipped: - return child_path - - value = aug.get(child_path) - if value[-1] == ']': - skipped = True - - return path - - -def is_apt_transport_tor_enabled(): - """Return whether APT is set to download packages over Tor.""" - try: - aug = get_augeas() - except Exception: - # If there was an error with parsing or there are Deb822 - # files. - return False - - for uri_path in iter_apt_uris(aug): - uri_path = get_real_apt_uri_path(aug, uri_path) - uri = aug.get(uri_path) - if not uri.startswith(APT_TOR_PREFIX) and \ - (uri.startswith('http://') or uri.startswith('https://')): - return False - - return True - - -def get_hs(): - output = actions.superuser_run('tor', ['get-hs']) - output = output.strip() - if output == '': - hs_enabled = False - hs_hostname = 'Not Configured' - hs_ports = '' - elif output == 'error': - hs_enabled = False - hs_hostname = 'Not available (Run Tor at least once)' - hs_ports = '' - else: - hs_enabled = True - hs_info = output.split() - hs_hostname = hs_info[0] - hs_ports = hs_info[1] - - return (hs_enabled, hs_hostname, hs_ports) - - -def get_status(): - """Return the current status""" - output = actions.superuser_run('tor', ['get-ports']) - port_info = output.split('\n') - ports = {} - for line in port_info: - try: - (key, val) = line.split() - ports[key] = val - except ValueError: - continue - - (hs_enabled, hs_hostname, hs_ports) = get_hs() - - return {'enabled': action_utils.service_is_enabled('tor'), - 'is_running': action_utils.service_is_running('tor'), - 'ports': ports, - 'hs_enabled': hs_enabled, - 'hs_hostname': hs_hostname, - 'hs_ports': hs_ports, - 'apt_transport_tor_enabled': is_apt_transport_tor_enabled()} - - -def _apply_changes(request, old_status, new_status): - """Try to apply changes and handle errors.""" - try: - __apply_changes(request, old_status, new_status) - except ActionError as exception: - messages.error(request, _('Action error: {0} [{1}] [{2}]').format( - exception.args[0], exception.args[1], exception.args[2])) - - -def __apply_changes(request, old_status, new_status): - """Apply the changes.""" - if old_status['enabled'] == new_status['enabled'] and \ - old_status['hs_enabled'] == new_status['hs_enabled'] and \ - old_status['apt_transport_tor_enabled'] == \ - new_status['apt_transport_tor_enabled']: - messages.info(request, _('Setting unchanged')) - return - - if old_status['enabled'] != new_status['enabled']: - if new_status['enabled']: - actions.superuser_run('tor', ['enable']) - messages.success(request, _('Tor enabled')) - else: - actions.superuser_run('tor', ['disable']) - messages.success(request, _('Tor disabled')) - - if old_status['hs_enabled'] != new_status['hs_enabled']: - if new_status['hs_enabled']: - actions.superuser_run('tor', ['enable-hs']) - messages.success(request, _('Tor hidden service enabled')) - else: - actions.superuser_run('tor', ['disable-hs']) - messages.success(request, _('Tor hidden service disabled')) - - # Update hidden service name registered with Name Services module. - domain_removed.send_robust( - sender='tor', domain_type='hiddenservice') - - enabled = action_utils.service_is_enabled('tor') - is_running = action_utils.service_is_running('tor') - (hs_enabled, hs_hostname, hs_ports) = get_hs() - - if enabled and is_running and hs_enabled and hs_hostname: - hs_services = [] - for service in SERVICES: - if str(service[2]) in hs_ports: - hs_services.append(service[0]) - - domain_added.send_robust( - sender='tor', domain_type='hiddenservice', - name=hs_hostname, description=_('Tor Hidden Service'), - services=hs_services) - - if old_status['apt_transport_tor_enabled'] != \ - new_status['apt_transport_tor_enabled']: - if new_status['apt_transport_tor_enabled']: - actions.superuser_run('tor', ['enable-apt-transport-tor']) - messages.success(request, _('Enabled package download over Tor')) - else: - actions.superuser_run('tor', ['disable-apt-transport-tor']) - messages.success(request, _('Disabled package download over Tor')) diff -Nru plinth-0.7.2/plinth/modules/tor/urls.py plinth-0.8.1/plinth/modules/tor/urls.py --- plinth-0.7.2/plinth/modules/tor/urls.py 2015-12-23 11:34:40.000000000 +0000 +++ plinth-0.8.1/plinth/modules/tor/urls.py 2016-02-16 03:55:53.000000000 +0000 @@ -16,12 +16,12 @@ # """ -URLs for the Tor module +URLs for the Tor module. """ from django.conf.urls import url -from . import tor as views +from . import views urlpatterns = [ diff -Nru plinth-0.7.2/plinth/modules/tor/views.py plinth-0.8.1/plinth/modules/tor/views.py --- plinth-0.7.2/plinth/modules/tor/views.py 1970-01-01 00:00:00.000000000 +0000 +++ plinth-0.8.1/plinth/modules/tor/views.py 2016-02-16 03:55:53.000000000 +0000 @@ -0,0 +1,152 @@ +# +# This file is part of Plinth. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# + +""" +Plinth module for configuring Tor. +""" + +from django.contrib import messages +from django.template.response import TemplateResponse +from django.utils.translation import ugettext_lazy as _ + +from .forms import TorForm +from plinth import actions +from plinth import package +from plinth.errors import ActionError +from plinth.modules import tor +from plinth.modules.names import SERVICES +from plinth.signals import domain_added, domain_removed + +config_process = None + + +def on_install(): + """Setup Tor configuration as soon as it is installed.""" + actions.superuser_run('tor', ['setup']) + actions.superuser_run('tor', + ['configure', '--apt-transport-tor', 'enable']) + tor.socks_service.notify_enabled(None, True) + tor.bridge_service.notify_enabled(None, True) + + +@package.required(['tor', 'tor-geoipdb', 'torsocks', 'obfs4proxy', + 'apt-transport-tor'], + on_install=on_install) +def index(request): + """Serve configuration page.""" + if config_process: + _collect_config_result(request) + + status = tor.get_status() + form = None + + if request.method == 'POST': + form = TorForm(request.POST, prefix='tor') + # pylint: disable=E1101 + if form.is_valid(): + _apply_changes(request, status, form.cleaned_data) + status = tor.get_status() + form = TorForm(initial=status, prefix='tor') + else: + form = TorForm(initial=status, prefix='tor') + + return TemplateResponse(request, 'tor.html', + {'title': _('Tor Control Panel'), + 'status': status, + 'config_running': bool(config_process), + 'form': form}) + + +def _apply_changes(request, old_status, new_status): + """Try to apply changes and handle errors.""" + try: + __apply_changes(request, old_status, new_status) + except ActionError as exception: + messages.error(request, _('Action error: {0} [{1}] [{2}]').format( + exception.args[0], exception.args[1], exception.args[2])) + + +def __apply_changes(request, old_status, new_status): + """Apply the changes.""" + global config_process + if config_process: + # Already running a configuration task + return + + arguments = [] + + if old_status['enabled'] != new_status['enabled']: + arg_value = 'enable' if new_status['enabled'] else 'disable' + arguments.extend(['--service', arg_value]) + + if old_status['hs_enabled'] != new_status['hs_enabled']: + arg_value = 'enable' if new_status['hs_enabled'] else 'disable' + arguments.extend(['--hidden-service', arg_value]) + + if old_status['apt_transport_tor_enabled'] != \ + new_status['apt_transport_tor_enabled']: + arg_value = 'disable' + if new_status['enabled'] and new_status['apt_transport_tor_enabled']: + arg_value = 'enable' + arguments.extend(['--apt-transport-tor', arg_value]) + + if arguments: + config_process = actions.superuser_run( + 'tor', ['configure'] + arguments, async=True) + else: + messages.info(request, _('Setting unchanged')) + + +def _collect_config_result(request): + """Handle config process completion.""" + global config_process + if not config_process: + return + + return_code = config_process.poll() + + # Config process is not complete yet + if return_code == None: + return + + status = tor.get_status() + + tor.socks_service.notify_enabled(None, status['enabled']) + tor.bridge_service.notify_enabled(None, status['enabled']) + + # Update hidden service name registered with Name Services module. + domain_removed.send_robust( + sender='tor', domain_type='hiddenservice') + + if status['enabled'] and status['is_running'] and \ + status['hs_enabled'] and status['hs_hostname']: + hs_services = [] + for service in SERVICES: + if str(service[2]) in status['hs_ports']: + hs_services.append(service[0]) + + domain_added.send_robust( + sender='tor', domain_type='hiddenservice', + name=status['hs_hostname'], description=_('Tor Hidden Service'), + services=hs_services) + + if not return_code: + messages.success(request, _('Configuration updated.')) + else: + messages.error(request, _('An error occurred during configuration.')) + + config_process = None diff -Nru plinth-0.7.2/plinth/modules/upgrades/templates/upgrades.html plinth-0.8.1/plinth/modules/upgrades/templates/upgrades.html --- plinth-0.7.2/plinth/modules/upgrades/templates/upgrades.html 2015-12-23 11:34:40.000000000 +0000 +++ plinth-0.8.1/plinth/modules/upgrades/templates/upgrades.html 2016-02-16 03:55:53.000000000 +0000 @@ -22,7 +22,7 @@ {% block page_head %} - {% if running %} + {% if is_busy %} {% endif %} @@ -33,47 +33,25 @@

    {{ title }}

    - {% if result %} +

    + {% blocktrans trimmed %} + Upgrades install the latest software and security updates. When automatic + upgrades are enabled, upgrades are automatically run every night. You + don't normally need to start the upgrade process. + {% endblocktrans %} +

    + +

    + {% blocktrans trimmed %} + Depending on the number of packages to install, this may take a long time + to complete. While upgrades are in progress, you will not be able to + install other packages. During the upgrade, this web interface may be + temporarily unavailable and show an error. Refresh the page to continue. + {% endblocktrans %} +

    - {% if result.return_code %} -

    - {% trans "There was an error while upgrading." %} -

    - -
    {% trans "Output from unattended-upgrades:" %}
    -
    {{ result.error }}
    - {% if result.output %} -
    {{ result.output }}
    - {% endif %} - {% else %} -

    - {% trans "The operating system is up to date now.  " %} - -

    - -
    -
    {% trans "Output from unattended-upgrades:" %}
    -
    {{ result.output }}
    -
    - {% endif %} - - {% endif %} - - - {% if not result and not running %} -

    - {% blocktrans trimmed %} - This will run unattended-upgrades, which will attempt to upgrade - your system with the latest Debian packages. It may take a few - minutes to complete. - {% endblocktrans %} -

    - -
    + {% if not is_busy %} + {% csrf_token %} {% endif %} - {% if running %} + {% if is_busy %}

    - {% trans "System is being upgraded." %} + {% trans "A package manager is running." %}

    {% endif %} + {% if log %} +
    {% trans "Recent log from upgrades:" %}
    + +
    {{ log }}
    + {% endif %} + {% endblock %} {% block page_js %} diff -Nru plinth-0.7.2/plinth/modules/upgrades/urls.py plinth-0.8.1/plinth/modules/upgrades/urls.py --- plinth-0.7.2/plinth/modules/upgrades/urls.py 2015-12-23 11:34:40.000000000 +0000 +++ plinth-0.8.1/plinth/modules/upgrades/urls.py 2016-02-16 03:55:53.000000000 +0000 @@ -27,5 +27,4 @@ urlpatterns = [ url(r'^sys/upgrades/$', views.index, name='index'), url(r'^sys/upgrades/upgrade/$', views.upgrade, name='upgrade'), - url(r'^sys/upgrades/upgrade/run/$', views.run, name='run'), ] diff -Nru plinth-0.7.2/plinth/modules/upgrades/views.py plinth-0.8.1/plinth/modules/upgrades/views.py --- plinth-0.7.2/plinth/modules/upgrades/views.py 2015-12-23 11:34:40.000000000 +0000 +++ plinth-0.8.1/plinth/modules/upgrades/views.py 2016-02-16 03:55:53.000000000 +0000 @@ -25,6 +25,7 @@ from django.template.response import TemplateResponse from django.utils.translation import ugettext as _, ugettext_lazy from django.views.decorators.http import require_POST +import subprocess from .forms import ConfigureForm from plinth import actions @@ -36,7 +37,8 @@ {'url': reverse_lazy('upgrades:upgrade'), 'text': ugettext_lazy('Upgrade Packages')}] -upgrade_process = None +LOG_FILE = '/var/log/unattended-upgrades/unattended-upgrades.log' +LOCK_FILE = '/var/log/dpkg/lock' def on_install(): @@ -65,29 +67,42 @@ 'form': form, 'subsubmenu': subsubmenu}) +def is_package_manager_busy(): + """Return whether a package manager is running.""" + try: + subprocess.check_output(['lsof', '/var/lib/dpkg/lock']) + return True + except subprocess.CalledProcessError: + return False + + +def get_log(): + """Return the current log for unattended upgrades.""" + try: + with open(LOG_FILE, 'r') as file_handle: + return file_handle.read() + except IOError: + return None + @package.required(['unattended-upgrades'], on_install=on_install) def upgrade(request): """Serve the upgrade page.""" - result = _collect_upgrade_result(request) + is_busy = is_package_manager_busy() + + if request.method == 'POST': + try: + actions.superuser_run('upgrades', ['run']) + messages.success(request, _('Upgrade process started.')) + is_busy = True + except ActionError: + messages.error(request, _('Starting upgrade failed.')) return TemplateResponse(request, 'upgrades.html', {'title': _('Package Upgrades'), 'subsubmenu': subsubmenu, - 'running': bool(upgrade_process), - 'result': result}) - - -@require_POST -@package.required(['unattended-upgrades'], on_install=on_install) -def run(_): - """Start the upgrade process.""" - global upgrade_process - if not upgrade_process: - upgrade_process = actions.superuser_run( - 'upgrades', ['run'], async=True) - - return redirect('upgrades:upgrade') + 'is_busy': is_busy, + 'log': get_log()}) def get_status(): @@ -121,30 +136,3 @@ messages.success(request, _('Automatic upgrades enabled')) else: messages.success(request, _('Automatic upgrades disabled')) - - -def _collect_upgrade_result(request): - """Handle upgrade process completion.""" - global upgrade_process - if not upgrade_process: - return - - return_code = upgrade_process.poll() - - # Upgrade process is not complete yet - if return_code is None: - return - - output, error = upgrade_process.communicate() - output, error = output.decode(), error.decode() - - if not return_code: - messages.success(request, _('Upgrade completed.')) - else: - messages.error(request, _('Upgrade failed.')) - - upgrade_process = None - - return {'return_code': return_code, - 'output': output, - 'error': error} diff -Nru plinth-0.7.2/plinth/modules/users/forms.py plinth-0.8.1/plinth/modules/users/forms.py --- plinth-0.7.2/plinth/modules/users/forms.py 2015-12-23 11:34:40.000000000 +0000 +++ plinth-0.8.1/plinth/modules/users/forms.py 2016-02-16 03:55:53.000000000 +0000 @@ -88,10 +88,20 @@ class UserUpdateForm(forms.ModelForm): """When user info is changed, also updates LDAP user.""" + ssh_keys = forms.CharField( + label=ugettext_lazy('SSH Keys'), + required=False, + widget=forms.Textarea, + help_text=\ + ugettext_lazy('Setting an SSH public key will allow this user to ' + 'securely log in to the system without using a ' + 'password. You may enter multiple keys, one on each ' + 'line. Blank lines and lines starting with # will be ' + 'ignored.')) class Meta: """Metadata to control automatic form building.""" - fields = ('username', 'groups', 'is_active') + fields = ('username', 'groups', 'ssh_keys', 'is_active') model = User widgets = { 'groups': forms.widgets.CheckboxSelectMultiple(), @@ -148,6 +158,10 @@ messages.error(self.request, _('Failed to add user to group.')) + actions.superuser_run( + 'ssh', ['set-keys', '--username', user.get_username(), + '--keys', self.cleaned_data['ssh_keys'].strip()]) + return user diff -Nru plinth-0.7.2/plinth/modules/users/views.py plinth-0.8.1/plinth/modules/users/views.py --- plinth-0.7.2/plinth/modules/users/views.py 2015-12-23 11:34:40.000000000 +0000 +++ plinth-0.8.1/plinth/modules/users/views.py 2016-02-16 03:55:53.000000000 +0000 @@ -85,6 +85,13 @@ kwargs['username'] = self.object.username return kwargs + def get_initial(self): + """Return the data for initial form load.""" + initial = super(UserUpdate, self).get_initial() + initial['ssh_keys'] = actions.superuser_run( + 'ssh', ['get-keys', '--username', self.object.username]).strip() + return initial + def get_success_url(self): """Return the URL to redirect to in case of successful updation.""" return reverse('users:edit', kwargs={'slug': self.object.username}) diff -Nru plinth-0.7.2/plinth/network.py plinth-0.8.1/plinth/network.py --- plinth-0.7.2/plinth/network.py 2015-12-23 11:34:40.000000000 +0000 +++ plinth-0.8.1/plinth/network.py 2016-02-16 03:55:53.000000000 +0000 @@ -102,7 +102,10 @@ status['wireless']['ssid'] = setting_wireless.get_ssid().get_data() primary_connection = nm.Client.new(None).get_primary_connection() - status['primary'] = (primary_connection.get_uuid() == connection.get_uuid()) + status['primary'] = ( + primary_connection and + primary_connection.get_uuid() == connection.get_uuid() + ) return status @@ -280,8 +283,7 @@ return nm.Client.new(None).get_device_by_iface(interface_name) -def _update_common_settings(connection, connection_uuid, name, type_, - interface, zone): +def _update_common_settings(connection, connection_uuid, common): """Create/edit basic settings for network manager connections. Return newly created connection object if connection is None. @@ -295,86 +297,62 @@ connection.add_setting(settings) settings.set_property(nm.SETTING_CONNECTION_UUID, connection_uuid) - settings.set_property(nm.SETTING_CONNECTION_ID, name) - settings.set_property(nm.SETTING_CONNECTION_TYPE, type_) - settings.set_property(nm.SETTING_CONNECTION_INTERFACE_NAME, interface) - settings.set_property(nm.SETTING_CONNECTION_ZONE, zone) + settings.set_property(nm.SETTING_CONNECTION_ID, common['name']) + settings.set_property(nm.SETTING_CONNECTION_TYPE, common['type']) + settings.set_property(nm.SETTING_CONNECTION_INTERFACE_NAME, + common['interface']) + settings.set_property(nm.SETTING_CONNECTION_ZONE, common['zone']) return connection -def _update_ipv4_settings(connection, ipv4_method, ipv4_address, ipv4_netmask, - ipv4_gateway, ipv4_dns, ipv4_second_dns): +def _update_ipv4_settings(connection, ipv4): """Edit IPv4 settings for network manager connections.""" settings = nm.SettingIP4Config.new() connection.add_setting(settings) - settings.set_property(nm.SETTING_IP_CONFIG_METHOD, ipv4_method) - if ipv4_method == nm.SETTING_IP4_CONFIG_METHOD_MANUAL and ipv4_address: - ipv4_address_int = ipv4_string_to_int(ipv4_address) + settings.set_property(nm.SETTING_IP_CONFIG_METHOD, ipv4['method']) + if ipv4['method'] == nm.SETTING_IP4_CONFIG_METHOD_MANUAL and \ + ipv4['address']: + ipv4_address_int = ipv4_string_to_int(ipv4['address']) - if not ipv4_netmask: + if not ipv4['netmask']: ipv4_netmask_int = nm.utils_ip4_get_default_prefix( ipv4_address_int) else: ipv4_netmask_int = nm.utils_ip4_netmask_to_prefix( - ipv4_string_to_int(ipv4_netmask)) + ipv4_string_to_int(ipv4['netmask'])) - address = nm.IPAddress.new(socket.AF_INET, ipv4_address, + address = nm.IPAddress.new(socket.AF_INET, ipv4['address'], ipv4_netmask_int) settings.add_address(address) - if not ipv4_gateway: + if not ipv4['gateway']: settings.set_property(nm.SETTING_IP_CONFIG_GATEWAY, '0.0.0.0') else: - settings.set_property(nm.SETTING_IP_CONFIG_GATEWAY, ipv4_gateway) + settings.set_property(nm.SETTING_IP_CONFIG_GATEWAY, + ipv4['gateway']) else: - if ipv4_dns or ipv4_second_dns: + if ipv4['dns'] or ipv4['second_dns']: settings.set_property(nm.SETTING_IP_CONFIG_IGNORE_AUTO_DNS, True) - if ipv4_dns: - settings.add_dns(ipv4_dns) + if ipv4['dns']: + settings.add_dns(ipv4['dns']) - if ipv4_second_dns: - settings.add_dns(ipv4_second_dns) + if ipv4['second_dns']: + settings.add_dns(ipv4['second_dns']) -def _update_ethernet_settings(connection, connection_uuid, name, interface, - zone, ipv4_method, ipv4_address, ipv4_netmask, - ipv4_gateway, ipv4_dns, ipv4_second_dns): - """Create/edit ethernet settings for network manager connections.""" - type_ = '802-3-ethernet' - - connection = _update_common_settings(connection, connection_uuid, name, - type_, interface, zone) - _update_ipv4_settings(connection, ipv4_method, ipv4_address, ipv4_netmask, - ipv4_gateway, ipv4_dns, ipv4_second_dns) - - # Ethernet - settings = connection.get_setting_wired() - if not settings: - settings = nm.SettingWired.new() - connection.add_setting(settings) - - return connection - - -def _update_pppoe_settings(connection, connection_uuid, name, interface, zone, - username, password): +def _update_pppoe_settings(connection, pppoe): """Create/edit PPPoE settings for network manager connections.""" - type_ = 'pppoe' - - connection = _update_common_settings(connection, connection_uuid, name, - type_, interface, zone) - # PPPoE settings = connection.get_setting_pppoe() if not settings: settings = nm.SettingPppoe.new() connection.add_setting(settings) - settings.set_property(nm.SETTING_PPPOE_USERNAME, username) - settings.set_property(nm.SETTING_PPPOE_PASSWORD, password) + settings.set_property(nm.SETTING_PPPOE_USERNAME, pppoe['username']) + settings.set_property(nm.SETTING_PPPOE_PASSWORD, pppoe['password']) settings = connection.get_setting_ppp() if not settings: @@ -389,118 +367,67 @@ return connection -def add_pppoe_connection(name, interface, zone, username, password): - """Add an automatic PPPoE connection in network manager. - - Return the UUID for the connection. - """ - connection_uuid = str(uuid.uuid4()) - connection = _update_pppoe_settings( - None, connection_uuid, name, interface, zone, username, password) - client = nm.Client.new(None) - client.add_connection_async(connection, True, None, _callback, None) - return connection_uuid - - -def edit_pppoe_connection(connection, name, interface, zone, username, - password): - """Edit an existing pppoe connection in network manager.""" - _update_pppoe_settings( - connection, connection.get_uuid(), name, interface, zone, username, - password) - connection.commit_changes(True) - - -def add_ethernet_connection(name, interface, zone, ipv4_method, ipv4_address, - ipv4_netmask, ipv4_gateway, ipv4_dns, - ipv4_second_dns): - """Add an automatic ethernet connection in network manager. - - Return the UUID for the connection. - """ - connection_uuid = str(uuid.uuid4()) - connection = _update_ethernet_settings( - None, connection_uuid, name, interface, zone, ipv4_method, - ipv4_address, ipv4_netmask, ipv4_gateway, ipv4_dns, ipv4_second_dns) - client = nm.Client.new(None) - client.add_connection_async(connection, True, None, _callback, None) - return connection_uuid - - -def edit_ethernet_connection(connection, name, interface, zone, ipv4_method, - ipv4_address, ipv4_netmask, ipv4_gateway, - ipv4_dns, ipv4_second_dns): - """Edit an existing ethernet connection in network manager.""" - _update_ethernet_settings( - connection, connection.get_uuid(), name, interface, zone, ipv4_method, - ipv4_address, ipv4_netmask, ipv4_gateway, ipv4_dns, ipv4_second_dns) - connection.commit_changes(True) - - -def _update_wifi_settings(connection, connection_uuid, name, interface, zone, - ssid, mode, auth_mode, passphrase, ipv4_method, - ipv4_address, ipv4_netmask, ipv4_gateway, ipv4_dns, - ipv4_second_dns): +def _update_wireless_settings(connection, wireless): """Create/edit wifi settings for network manager connections.""" - type_ = '802-11-wireless' key_mgmt = 'wpa-psk' - connection = _update_common_settings(connection, connection_uuid, name, - type_, interface, zone) - _update_ipv4_settings(connection, ipv4_method, ipv4_address, ipv4_netmask, - ipv4_gateway, ipv4_dns, ipv4_second_dns) - # Wireless settings = connection.get_setting_wireless() if not settings: settings = nm.SettingWireless.new() connection.add_setting(settings) - ssid_gbytes = glib.Bytes.new(ssid.encode()) + ssid_gbytes = glib.Bytes.new(wireless['ssid'].encode()) settings.set_property(nm.SETTING_WIRELESS_SSID, ssid_gbytes) - settings.set_property(nm.SETTING_WIRELESS_MODE, mode) + settings.set_property(nm.SETTING_WIRELESS_MODE, wireless['mode']) # Wireless Security - if auth_mode == 'wpa' and passphrase: + if wireless['auth_mode'] == 'wpa' and wireless['passphrase']: settings = connection.get_setting_wireless_security() if not settings: settings = nm.SettingWirelessSecurity.new() connection.add_setting(settings) settings.set_property(nm.SETTING_WIRELESS_SECURITY_KEY_MGMT, key_mgmt) - settings.set_property(nm.SETTING_WIRELESS_SECURITY_PSK, passphrase) + settings.set_property(nm.SETTING_WIRELESS_SECURITY_PSK, + wireless['passphrase']) else: connection.remove_setting(nm.SettingWirelessSecurity) return connection -def add_wifi_connection(name, interface, zone, ssid, mode, auth_mode, - passphrase, ipv4_method, ipv4_address, ipv4_netmask, - ipv4_gateway, ipv4_dns, ipv4_second_dns): - """Add an automatic Wi-Fi connection in network manager. +def _update_settings(connection, connection_uuid, settings): + """Create/edit wifi settings for network manager connections.""" + connection = _update_common_settings(connection, connection_uuid, + settings['common']) + if 'ipv4' in settings and settings['ipv4']: + _update_ipv4_settings(connection, settings['ipv4']) + + if 'pppoe' in settings and settings['pppoe']: + _update_pppoe_settings(connection, settings['pppoe']) + + if 'wireless' in settings and settings['wireless']: + _update_wireless_settings(connection, settings['wireless']) + + return connection + + +def add_connection(settings): + """Add an connection in network manager. Return the UUID for the connection. """ connection_uuid = str(uuid.uuid4()) - connection = _update_wifi_settings( - None, connection_uuid, name, interface, zone, ssid, mode, auth_mode, - passphrase, ipv4_method, ipv4_address, ipv4_netmask, ipv4_gateway, - ipv4_dns, ipv4_second_dns) + connection = _update_settings(None, connection_uuid, settings) client = nm.Client.new(None) client.add_connection_async(connection, True, None, _callback, None) return connection_uuid -def edit_wifi_connection(connection, name, interface, zone, ssid, mode, - auth_mode, passphrase, ipv4_method, ipv4_address, - ipv4_netmask, ipv4_gateway, ipv4_dns, - ipv4_second_dns): - """Edit an existing wifi connection in network manager.""" - _update_wifi_settings( - connection, connection.get_uuid(), name, interface, zone, ssid, mode, - auth_mode, passphrase, ipv4_method, ipv4_address, ipv4_netmask, - ipv4_gateway, ipv4_dns, ipv4_second_dns) +def edit_connection(connection, settings): + """Edit an existing connection in network manager.""" + _update_settings(connection, connection.get_uuid(), settings) connection.commit_changes(True) diff -Nru plinth-0.7.2/plinth/service.py plinth-0.8.1/plinth/service.py --- plinth-0.7.2/plinth/service.py 2015-12-23 11:34:40.000000000 +0000 +++ plinth-0.8.1/plinth/service.py 2016-02-16 03:55:53.000000000 +0000 @@ -19,12 +19,12 @@ Framework for working with servers and their services. """ -from django.utils.translation import ugettext_lazy as _ - import collections +from django.utils.translation import ugettext_lazy as _ +from plinth import cfg from plinth.signals import service_enabled - +from plinth.utils import format_lazy services = {} @@ -75,5 +75,7 @@ is_external=True, enabled=True) Service('ssh', _('Secure Shell (SSH) Server'), ['ssh'], is_external=True, enabled=True) - Service('plinth', _('FreedomBox Web Interface (Plinth)'), ['https'], - is_external=True, enabled=True) + Service('plinth', + format_lazy(_('{box_name} Web Interface (Plinth)'), + box_name=_(cfg.box_name)), + ['https'], is_external=True, enabled=True) diff -Nru plinth-0.7.2/plinth/templates/base.html plinth-0.8.1/plinth/templates/base.html --- plinth-0.7.2/plinth/templates/base.html 2015-12-23 11:34:40.000000000 +0000 +++ plinth-0.8.1/plinth/templates/base.html 2016-02-16 03:55:53.000000000 +0000 @@ -46,10 +46,12 @@ + content="{% blocktrans trimmed %} + Plinth administrative interface for the {{ box_name }} + {% endblocktrans %}" /> {% block title %} - {% if title %} {{ title }} {% else %} {% trans "FreedomBox" %} {% endif %} + {% if title %} {{ title }} {% else %} {{ box_name }} {% endif %} {% endblock %} @@ -83,67 +85,69 @@ - - {% trans - - - - + {% block mainmenu_left %} + + {{ box_name }} + + + + + {% endblock %} diff -Nru plinth-0.7.2/plinth/tests/test_context_processors.py plinth-0.8.1/plinth/tests/test_context_processors.py --- plinth-0.7.2/plinth/tests/test_context_processors.py 2015-12-23 11:34:40.000000000 +0000 +++ plinth-0.8.1/plinth/tests/test_context_processors.py 2016-02-16 03:55:53.000000000 +0000 @@ -42,6 +42,8 @@ self.assertIsNotNone(config) self.assertEqual('FreedomBox', config.box_name) + self.assertEqual('FreedomBox', response['box_name']) + submenu = response['submenu'] self.assertIsNone(submenu) diff -Nru plinth-0.7.2/plinth/tests/test_network.py plinth-0.8.1/plinth/tests/test_network.py --- plinth-0.7.2/plinth/tests/test_network.py 2015-12-23 11:34:40.000000000 +0000 +++ plinth-0.8.1/plinth/tests/test_network.py 2016-02-16 03:55:53.000000000 +0000 @@ -19,6 +19,7 @@ Test module for network configuration utilities. """ +import copy import os import unittest @@ -27,6 +28,52 @@ if euid == 0: from plinth import network +ethernet_settings = { + 'common': { + 'type': '802-3-ethernet', + 'name': 'plinth_test_eth', + 'interface': 'eth0', + 'zone': 'internal', + }, + 'ipv4': { + 'method': 'auto', + 'dns': '', + 'second_dns': '', + }, +} + +wifi_settings = { + 'common': { + 'type': '802-11-wireless', + 'name': 'plinth_test_wifi', + 'interface': 'wlan0', + 'zone': 'external', + }, + 'ipv4': { + 'method': 'auto', + 'dns': '', + 'second_dns': '', + }, + 'wireless': { + 'ssid': 'plinthtestwifi', + 'mode': 'adhoc', + 'auth_mode': 'open', + }, +} + +pppoe_settings = { + 'common': { + 'type': 'pppoe', + 'name': 'plinth_test_pppoe', + 'interface': 'eth1', + 'zone': 'internal', + }, + 'pppoe': { + 'username': 'x-user', + 'password': 'x-password', + }, +} + class TestNetwork(unittest.TestCase): """Verify that the network module performs as expected.""" @@ -37,16 +84,9 @@ @classmethod def setUp(cls): - cls.ethernet_uuid = network.add_ethernet_connection( - 'plinth_test_eth', 'eth0', 'internal', - 'auto', '', '', '', '', '') - cls.wifi_uuid = network.add_wifi_connection( - 'plinth_test_wifi', 'wlan0', 'external', - 'plinthtestwifi', 'adhoc', 'open', '', - 'auto', '', '', '', '', '') - cls.pppoe_uuid = network.add_pppoe_connection( - 'plinth_test_pppoe', 'eth1', 'internal', - 'x-user', 'x-password') + cls.ethernet_uuid = network.add_connection(ethernet_settings) + cls.wifi_uuid = network.add_connection(wifi_settings) + cls.pppoe_uuid = network.add_connection(pppoe_settings) @classmethod def tearDown(cls): @@ -81,9 +121,12 @@ def test_edit_ethernet_connection(self): """Check that we can update an ethernet connection.""" connection = network.get_connection(self.ethernet_uuid) - network.edit_ethernet_connection( - connection, 'plinth_test_eth_new', 'eth1', 'external', - 'auto', '', '', '', '', '') + ethernet_settings2 = copy.deepcopy(ethernet_settings) + ethernet_settings2['common']['name'] = 'plinth_test_eth_new' + ethernet_settings2['common']['interface'] = 'eth1' + ethernet_settings2['common']['zone'] = 'external' + ethernet_settings2['ipv4']['method'] = 'auto' + network.edit_connection(connection, ethernet_settings2) connection = network.get_connection(self.ethernet_uuid) self.assertEqual(connection.get_id(), 'plinth_test_eth_new') @@ -99,9 +142,13 @@ def test_edit_pppoe_connection(self): """Check that we can update a PPPoE connection.""" connection = network.get_connection(self.ethernet_uuid) - network.edit_pppoe_connection( - connection, 'plinth_test_pppoe_new', 'eth2', 'external', - 'x-user-new', 'x-password-new') + pppoe_settings2 = copy.deepcopy(pppoe_settings) + pppoe_settings2['common']['name'] = 'plinth_test_pppoe_new' + pppoe_settings2['common']['interface'] = 'eth2' + pppoe_settings2['common']['zone'] = 'external' + pppoe_settings2['pppoe']['username'] = 'x-user-new' + pppoe_settings2['pppoe']['password'] = 'x-password-new' + network.edit_connection(connection, pppoe_settings2) connection = network.get_connection(self.ethernet_uuid) self.assertEqual(connection.get_id(), 'plinth_test_pppoe_new') @@ -123,10 +170,16 @@ def test_edit_wifi_connection(self): """Check that we can update a wifi connection.""" connection = network.get_connection(self.wifi_uuid) - network.edit_wifi_connection( - connection, 'plinth_test_wifi_new', 'wlan1', 'external', - 'plinthtestwifi2', 'infrastructure', 'wpa', 'secretpassword', - 'auto', '', '', '', '', '') + wifi_settings2 = copy.deepcopy(wifi_settings) + wifi_settings2['common']['name'] = 'plinth_test_wifi_new' + wifi_settings2['common']['interface'] = 'wlan1' + wifi_settings2['common']['zone'] = 'external' + wifi_settings2['ipv4']['method'] = 'auto' + wifi_settings2['wireless']['ssid'] = 'plinthtestwifi2' + wifi_settings2['wireless']['mode'] = 'infrastructure' + wifi_settings2['wireless']['auth_mode'] = 'wpa' + wifi_settings2['wireless']['passphrase'] = 'secretpassword' + network.edit_connection(connection, wifi_settings2) connection = network.get_connection(self.wifi_uuid) @@ -153,10 +206,14 @@ def test_ethernet_manual_ipv4_address(self): """Check that we can manually set IPv4 address on ethernet.""" connection = network.get_connection(self.ethernet_uuid) - network.edit_ethernet_connection( - connection, 'plinth_test_eth_new', 'eth0', 'external', 'manual', - '169.254.0.1', '255.255.254.0', '169.254.0.254', '1.2.3.4', - '1.2.3.5') + ethernet_settings2 = copy.deepcopy(ethernet_settings) + ethernet_settings2['ipv4']['method'] = 'manual' + ethernet_settings2['ipv4']['address'] = '169.254.0.1' + ethernet_settings2['ipv4']['netmask'] = '255.255.254.0' + ethernet_settings2['ipv4']['gateway'] = '169.254.0.254' + ethernet_settings2['ipv4']['dns'] = '1.2.3.4' + ethernet_settings2['ipv4']['second_dns'] = '1.2.3.5' + network.edit_connection(connection, ethernet_settings2) connection = network.get_connection(self.ethernet_uuid) settings_ipv4 = connection.get_setting_ip4_config() @@ -174,10 +231,17 @@ def test_wifi_manual_ipv4_address(self): """Check that we can manually set IPv4 address on wifi.""" connection = network.get_connection(self.wifi_uuid) - network.edit_wifi_connection( - connection, 'plinth_test_wifi_new', 'wlan0', 'external', - 'plinthtestwifi', 'adhoc', 'open', '', 'manual', '169.254.0.2', - '255.255.254.0', '169.254.0.254', '1.2.3.4', '1.2.3.5') + wifi_settings2 = copy.deepcopy(wifi_settings) + wifi_settings2['ipv4']['method'] = 'manual' + wifi_settings2['ipv4']['address'] = '169.254.0.2' + wifi_settings2['ipv4']['netmask'] = '255.255.254.0' + wifi_settings2['ipv4']['gateway'] = '169.254.0.254' + wifi_settings2['ipv4']['dns'] = '1.2.3.4' + wifi_settings2['ipv4']['second_dns'] = '1.2.3.5' + wifi_settings2['wireless']['ssid'] = 'plinthtestwifi' + wifi_settings2['wireless']['mode'] = 'adhoc' + wifi_settings2['wireless']['auth_mode'] = 'open' + network.edit_connection(connection, wifi_settings2) connection = network.get_connection(self.wifi_uuid) settings_ipv4 = connection.get_setting_ip4_config() diff -Nru plinth-0.7.2/plinth/utils.py plinth-0.8.1/plinth/utils.py --- plinth-0.7.2/plinth/utils.py 2015-12-23 11:34:40.000000000 +0000 +++ plinth-0.8.1/plinth/utils.py 2016-02-16 03:55:53.000000000 +0000 @@ -20,6 +20,7 @@ """ import importlib +from django.utils.functional import lazy def import_from_gi(library, version): @@ -34,3 +35,12 @@ package.require_version(library, version) return importlib.import_module(package_name + '.repository.' + library) + + +def _format_lazy(string, *args, **kwargs): + """Lazily format a lazy string.""" + string = str(string) + return string.format(*args, **kwargs) + + +format_lazy = lazy(_format_lazy, str) diff -Nru plinth-0.7.2/README.md plinth-0.8.1/README.md --- plinth-0.7.2/README.md 2015-12-23 11:34:40.000000000 +0000 +++ plinth-0.8.1/README.md 2016-02-16 03:55:53.000000000 +0000 @@ -13,9 +13,9 @@ communications. It is a networking appliance designed to allow interfacing with the rest of the Internet under conditions of protected privacy and data security. It hosts applications such as -blog, wiki, website, social network, email, web proxy and a Tor relay -on a device that can replace your Wi-Fi router so that your data stays -with you. +blog, wiki, website, social network, email, web proxy and a Tor relay, +on a device that can replace your Wi-Fi router, so that your data +stays with you. Plinth is a web interface to administer the functions of the FreedomBox. It is extensible and provides various applications of diff -Nru plinth-0.7.2/setup.py plinth-0.8.1/setup.py --- plinth-0.7.2/setup.py 2015-12-23 11:34:40.000000000 +0000 +++ plinth-0.8.1/setup.py 2016-02-16 03:55:53.000000000 +0000 @@ -107,9 +107,10 @@ class CustomClean(clean): - """Override clean command to clean documentation directory""" + """Override clean command to clean doc, locales, and egg-info.""" def run(self): """Execute clean command""" + subprocess.check_call(['rm', '-rf', 'Plinth.egg-info/']) subprocess.check_call(['make', '-C', 'doc', 'clean']) for dir_path, dir_names, file_names in os.walk('plinth/locale/'): for file_name in file_names: diff -Nru plinth-0.7.2/static/doc/freedombox-manual.xml plinth-0.8.1/static/doc/freedombox-manual.xml --- plinth-0.7.2/static/doc/freedombox-manual.xml 2015-12-23 11:34:40.000000000 +0000 +++ plinth-0.8.1/static/doc/freedombox-manual.xml 2016-02-16 03:55:53.000000000 +0000 @@ -7,7 +7,7 @@
    FreedomBox Introduction - FreedomBox is a personal server that protects your privacy. It is a free software stack, a subset of the Debian universal operating system, that can be installed in many flavors of cheap and power-efficient hardware. The simplicity of setting up and operating a FreedomBox is similar to that of a smart phone. + FreedomBox is a personal server that protects your privacy. It is a free software stack, a subset of the Debian universal operating system, that can be installed in many flavors of inexpensive and power-efficient hardware. The simplicity of setting up and operating a FreedomBox is similar to that of a smart phone.
    Smart Router FreedomBox runs in a physical computer and can route your traffic. It can sit between various devices at home such as mobiles, laptops and TVs and the Internet replacing a home wireless router. By routing traffic, FreedomBox can remove tracking advertisements and malicious web bugs before they ever reach your devices. FreedomBox can cloak your location and protect your anonymity by "onion routing" your traffic over Tor. FreedomBox provides a VPN server that you can use while you are away from home to keep your traffic secret on untrusted public wireless networks and to securely access various devices at home. It can also be carried along with your laptop and used to connect to public networks at work, school, or office to avail its services. It could be used in a village to provide communications throughout the village. In future, FreedomBox intends to provide support for alternative ways of connecting to the Internet such as Mesh networks. @@ -41,22 +41,30 @@ On first boot, the FreedomBox will perform initial setup and then reboot. This may take several minutes. - After the FreedomBox has rebooted, you can access Plinth through your web browser. + After the FreedomBox has rebooted, you can access its web interface (called Plinth) through your web browser. If your computer is connected directly to the FreedomBox through a second (LAN) ethernet port, you can browse to: or . - If your computer supports mDNS (GNU/Linux, Mac OSX and Windows with mDNS software installed), you can browse to: . + If your computer supports mDNS (GNU/Linux, Mac OSX and Windows with mDNS software installed), you can browse to: (or ) If neither of these methods are available, then you will need to figure out the IP address of your FreedomBox. You can use the "nmap" program to find its IP address: nmap -p 80 --open -sV 192.168.0.0/24 + Your FreedomBox will show up as an IP address with an open tcp port 80 using Apache httpd service on Debian, such as the example below which would make it accessible at : + Nmap scan report for 192.168.0.165 + Host is up (0.00088s latency). + PORT STATE SERVICE VERSION + 80/tcp open http Apache httpd 2.4.17 ((Debian)) - When you first access Plinth, you will see a welcome page that asks you to provide some basic information for setting up your FreedomBox. + On accessing Plinth your browser will warn you that it communicates securely but that it regards the security certificate for doing so as invalid. This is a fact you need to accept because the certificate is auto generated on the box and therefore "self-signed" (the browser might also use words such as "untrusted", "not private", "privacy error" or "unknown issuer/authority"). Telling your browser that you are aware of this might involve pressing buttons such as "I understand the Risks", "proceed to ... (unsafe)" or "Add exception". + + + On the intial access you will see a welcome page that asks you to provide some basic information for setting up your FreedomBox. After completing the form, you will be logged in to Plinth and able to access apps and configuration through the interface. @@ -95,10 +103,39 @@ Release Notes The following are the release notes for each FreedomBox version.
    - Version 0.7 (unreleased) + Version 0.8 (2016-02) - Translations! + Added Quassel, an IRC client that stays connected to IRC networks and can synchronize multiple frontends. + + + Improved first boot user interface. + + + Fixed Transmission RPC whitelist issue. + + + Added translations for Turkish, Chinese, and Russian. Fixed and updated translations in other languages. + + + Added Monkeysphere, which uses PGP web of trust for SSH host key verification. + + + Added Let's Encrypt, to obtain certificates for domains, so that browser certificate warnings can be avoided. + + + Added repro, a SIP server for audio and video calls. + + + Allow users to set their SSH public keys, so they can login over SSH without a password. + + +
    +
    + Version 0.7 (2015-12-13) + + + Translations! Full translations of the interface in Danish, Dutch, French, German and Norwegian Bokmål, and partial Telugu. Support for OLinuXino A20 MICRO and LIME2 @@ -298,7 +335,7 @@
    Download and Install - You may either use FreedomBox on one of the supported hardware, install it on a Debian machine, or deploy on a virtual machine. + Wellcome to the FreedomBox download page. You may either install FreedomBox on one of the supported inexpensive hardware, on a Linux Debian operating system, or deploy on a virtual machine. Installing on Debian is easy because FreedomBox is available as packages. On hardware, you may need a little bit of technical expertise to setup. What we are requiring is to buy a device and plug in an SD card. In case of trouble, please read and interact with the Questions and Answers page based on Freedombox-discuss mailing list archives.
    Downloading on Debian If you are installing on Debian, you don't need to download these images. Instead read instructions on setting up FreedomBox on Debian. @@ -336,7 +373,7 @@ Finally, verify your downloaded image with its signature file .sig. For example: - $ gpg --verify freedombox-unstable_2015-01-15_beaglebone-armhf-card.tar.bz2.sig freedombox-unstable_2015-01-15_beaglebone-armhf-card.tar.bz2 + $ gpg --verify freedombox-unstable-free_2015-12-13_cubietruck-armhf.img.xz.sig freedombox-unstable-free_2015-12-13_cubietruck-armhf.img.xz gpg: Signature made Thursday 15 January 2015 09:27:50 AM IST using RSA key ID 0C9BC971 gpg: Good signature from "Sunil Mohan Adapa <sunil@medhas.org>" gpg: WARNING: This key is not certified with a trusted signature! @@ -388,15 +425,14 @@ Decompress the downloaded image using tar: - $ tar -xjvf freedombox-unstable_2015-08-06_beaglebone-armhf-card.tar.bz2 - The above command is an example for the beaglebone image built on 2015-08-06. Your downloaded file name will be different. + $ xz -d freedombox-unstable-free_2015-12-13_cubietruck-armhf.img.xz + The above command is an example for the cubietruck image built on 2015-12-13. Your downloaded file name will be different. Copy the image to your card. Double check and make sure you don't write to your computer's main storage (such as /dev/sda). Also make sure that you don't run this step as root to avoid potentially overriding data on your hard drive due to a mistake in identifying the device or errors while typing the command. USB disks and SD cards inserted into the system should typically be write accessible to normal users. If you don't have permission to write to your SD card as a user, you may need to run this command as root. In this case triple check everything before you run the command. Another safety precaution is to unplug all external disks except the SD card before running the command. For example, if your SD card is /dev/sdf as noted in the first step above, then to copy the image, run: - $ cd build -$ dd bs=1M if=freedombox-unstable_2015-08-06_beaglebone-armhf-card.img of=/dev/sdf conv=fdatasync - The above command is an example for the beaglebone image built on 2015-08-06. Your image file name will be different. + $ dd bs=1M if=freedombox-unstable-free_2015-12-13_cubietruck-armhf.img of=/dev/sdf conv=fdatasync + The above command is an example for the cubietruck image built on 2015-12-13. Your image file name will be different. When picking a device, use the drive-letter destination, like /dev/sdf, not a numbered destination, like /dev/sdf1. The device without a number refers to the entire device, while the device with a number refers to a specific partition. We want to use the whole device. Downloaded images contain complete information about how many partitions there should be, their sizes and types. You don't have to format your SD card or create partitions. All the data on the SD card will be wiped off during the write process. @@ -415,6 +451,10 @@
    Anonymity Network (Tor)
    + What is Tor? + Tor is a network of server operated by volunteers. It allows users of these servers to improve their privacy and security while surfing on the Internet. You and your friends are able to access to your FreedomBox via Tor network without revealing its IP address. Activating Tor application on your FreedomBox, you will be able to offer remote services (chat, wiki, file sharing, etc...) without showing your location. This application will give you a better protection than a public web server because you will be less exposed to intrusive people on the web. +
    +
    Using Tor to browse anonymously Tor Browser is the recommended way to browse the web using Tor. You can download the Tor Browser from and follow the instructions on that site to install and run it.
    @@ -431,10 +471,35 @@
    + Deluge +
    + What is Deluge? + Your FreedomBox provides a Deluge application to enable. Deluge is a lightweight Bit Torrent client. Bit Torrent is a communications protocol using peer-to-peer (P2P) file sharing. P2P is a system that aims to interconnect end-user machines. Highly configurable, Deluge offers functionalities in the form of plugins. +
    +
    +
    + Transmission +
    + What is Transmission ? + In addition to Deluge Bit Torrent, your FreedomBox provides a Transmission application to enable. Transmission is a lightweight Bit Torrent client allowing end-user machine to share files (documents, pictures, sounds, videos and programs). Transmission is well known for its simplicity and a default configuration that "Just Works". +
    +
    +
    + Shaarli +
    + What is Shaarli? + Shaarli is personal (single-user) bookmarking application to install on your FreedomBox. It can also be used for micro-blogging, pastebin, online notepad and snippet archive. Shaarli is designed as a no-database delicious clone. As such, it provides very fast services, easy backup and import/export links as desktop or mobile browser bookmarks. Links stored can be public or private. Shaarli delivers ATOM and RSS feeds from its minimalist interface. +
    +
    +
    Chat Server (XMPP)
    + What is XMPP? + XMPP is a federated protocol for Instant Messaging. This means that users who have accounts on one server, can talk to users that are on another server. +
    +
    Setting the Domain Name - XMPP is a federated protocol for Instant Messaging. This means that users who have accounts on one server, can talk to users that are on another server. However, for this to work, your FreedomBox needs to have a Domain Name that can be accessed over the public Internet. You can read more about obtaining a Domain Name in the Dynamic DNS section of this manual. + For XMPP to work, your FreedomBox needs to have a Domain Name that can be accessed over the public Internet. You can read more about obtaining a Domain Name in the Dynamic DNS section of this manual. Once you have a Domain Name, you can tell your FreedomBox to use it by setting the Domain Name in the System Config. Please note that Pagekite does not support the XMPP protocol at this time.
    @@ -445,9 +510,12 @@
    Dynamic DNS - In order reach a server on the Internet, the server needs to have permanent address also know as the static IP address. Many Internet service providers don't provide home users with a static IP address or they charge more providing a static IP address. Instead they provide the home user with an IP address that changes every time the user connects to the Internet. Clients wishing to contact the server will have difficulty reaching the server. - Dynamic DNS service providers assist in working around a problem. First they provide you with a domain name, such as 'myhost.example.org'. Then they associate your IP address, whenever it changes, with this domain name. Then anyone intending to reach the server will be to contact the server using the domain name 'myhost.example.org' which always points to the latest IP address of the server. - For this to work, every time you connect to the Internet, you will have to tell your Dynamic DNS provider what your current IP address is. Hence you need special software on your server to perform this operation. The Dynamic DNS function in FreedomBox will allow users without a static public IP address to push the current public IP address to a Dynamic DNS Server. This allows you to expose services on FreedomBox, such as ownCloud, to the Internet. +
    + What is Dynamic DNS? + In order to reach a server on the Internet, the server needs to have permanent address also know as the static IP address. Many Internet service providers don't provide home users with a static IP address or they charge more providing a static IP address. Instead they provide the home user with an IP address that changes every time the user connects to the Internet. Clients wishing to contact the server will have difficulty reaching the server. + Dynamic DNS service providers assist in working around a problem. First they provide you with a domain name, such as 'myhost.example.org'. Then they associate your IP address, whenever it changes, with this domain name. Then anyone intending to reach the server will be to contact the server using the domain name 'myhost.example.org' which always points to the latest IP address of the server. + For this to work, every time you connect to the Internet, you will have to tell your Dynamic DNS provider what your current IP address is. Hence you need special software on your server to perform this operation. The Dynamic DNS function in FreedomBox will allow users without a static public IP address to push the current public IP address to a Dynamic DNS Server. This allows you to expose services on FreedomBox, such as ownCloud, to the Internet. +
    GnuDIP vs. Update URL There are two main mechanism to notify the Dynamic DNS server of your new IP address; using the GnuDIP protocol and using the Update URL mechanism. @@ -511,50 +579,72 @@
    + Roundcube +
    + What is Roundcube? + RoundCube is a browser-based multilingual email client with an application-like user interface. RoundCube is using the Internet Message Access Protocol (IMAP) to access e-mail on a remote mail server. It supports MIME to send files, and provides particularly address book, folder management, message searching and spell checking. +
    +
    +
    + ownCloud +
    + What is ownCloud? + ownCloud is a self-hosted file sync and share server. It provides access to your data through a platform to view, sync and share across devices. Calendars and Contacts feature will help you keeping google at a nice distance. ownCloud's functionalities are native or available via plugins (Collaborative Editing, Play Music, Watch Movies, Store Passwords, Dashboard, Mozilla Sync...) via +
    +
    + Installation + Clicking on the ownCloud application in Plinth will show an installation prompt. Proceed to install. After the installation, visit the /owncloud link provided in the ownCloud page. First time installation wizard will show up asking for administrator username and password to setup (no additional details such as database configuration are requested). After providing the details, you will be logged. You will be able to start using the ownCloud and create more users. +
    + External Storage + ownCloud's external storage plugin allows you to expose the contents of a hard drive or those of an online storage account as a folder. Following are the steps required to setup such storage. + + + Mount your hard drive or external storage to any fixed directory on the system. + + + Install two packages needed via the 'apt-get' on the SSH command line shell (this step will not be needed in future): + + + $ sudo apt-get install php-google-api-php-client php-dropbox + + + + + Goto ownCloud Apps section and enable 'External Storage Support' plugin. + + + Goto 'Admin' section and add your hard drive mount path in the external storage section. This folder will now show up in your folders list to access and sync across devices. + + +
    +
    +
    +
    PageKite - PageKite is free Software solution for tunneling HTTP, HTTPS and SSH servers through firewalls and NAT. - See PageKite website. +
    + What is PageKite? + PageKite makes local websites and services publicly accessible immediately without creating yourself a public IP address. PageKite provides "Kites" and "Services". Kites aims to make accessible in a second a web page (for instance foo.pagekite.me). Services can expose a file or a folder. Technically speaking, PageKite is free Software solution for tunneling HTTP, HTTPS and SSH servers through firewalls and NAT. +
    +
    + Use PageKite + See PageKite website. +
    Secure Shell - FreedomBox runs openssh-server server by default allowing remote logins from all interfaces. If your hardware device is connected to a monitor and a keyboard, you may login directly as well. Regular operation of FreedomBox does not require you to use the shell. However, some tasks or identifying a problem may require you to login to a shell. +
    + What is Secure Shell? + FreedomBox runs openssh-server server by default allowing remote logins from all interfaces. If your hardware device is connected to a monitor and a keyboard, you may login directly as well. Regular operation of FreedomBox does not require you to use the shell. However, some tasks or identifying a problem may require you to login to a shell. +
    Default User Account - FreedomBox is bundled with a preset user account. This user also has superuser privileges via sudo. The default credentials are: - - - - - - - - - Username - - - - - Password - - - - - - fbx - - - frdm - - - - - - - - Change the password - - Soon after you get your FreedomBox working, you must change the default password for the fbx user. If you fail to do this, since the password is public knowledge, anyone will be able to take control of your device. - + The pre-built FreedomBox images have a default user account called "fbx". However the password is not set for this account, so it will not be possible to log in with this account by default. + There is a script included in the freedom-maker program, that will allow you to set the password for this account, if it is needed. To set a password for the "fbx" user: + 1. Decompress the image file. + 2. Get a copy of freedom-maker from . + 3. Run sudo ./bin/passwd-in-image <image-file> fbx. + 4. Copy the image file to SD card and boot device as normal. + The "fbx" user also has superuser privileges via sudo.
    Logging In @@ -583,8 +673,26 @@
    + Mumble +
    + What is Mumble? + Mumble is a voice chat software. Primarily intended for use while gaming, it is suitable for simple talking with high audio quality, noise suppression, encrypted communication, public/private-key authentication by default, and "wizards" to configure your microphone for instance. A user can be marked as a "priority speaker" within a channel. +
    +
    +
    + Privoxy +
    + What is Privoxy? + Privoxy is a software for security, privacy, and accurate control over the web. It provides a much more powerful web proxy (anonymity on the web) than what your browser can offer. Privoxy "is a proxy that is primarily focused on privacy enhancement, ad and junk elimination and freeing the user from restrictions placed on his activities" (source: Privoxy FAQ). Learning about networking protocols like HTTP, about HTML, and "Regular Expressions" can help a lot using Privoxy. +
    +
    +
    Wiki & Blog (Ikiwiki)
    + What is Ikiwiki? + Ikiwiki converts wiki pages into HTML pages suitable for publishing on a website. It provides particularly blogging, podcasting, calendars and a large selection of plugins. +
    +
    Creating a wiki or blog You can create a wiki or blog to be hosted on your FreedomBox through the Wiki & Blog (Ikiwiki) page in Plinth. The first time you visit this page, it will ask to install packages required by Ikiwiki. After the package install has completed, select the Create tab. You can select the type to be Wiki or Blog. Also type in a name for the wiki or blog, and the username and password for the wiki's/blog's admin account. Then click Update setup and you will see the wiki/blog added to your list. Note that each wiki/blog has its own admin account. @@ -602,24 +710,27 @@
    - Unhosted - From : - - Also known as "serverless", "client-side", or "static" web apps, unhosted web apps do not send your user data to their server. Either you connect your own server at runtime, or your data stays within the browser. - - Note: This module is not yet part of mainline FreedomBox, but available for testing via . + Unhosted Storage
    - Set up remoteStorage - Your FreedomBox contains the restore remoteStorage server, which means that it can serve as your personal backend for Unhosted apps. Make sure the package is installed in your Plinth. - Then create a remoteStorage account at https://<yourdomain>/restore/. - Warning: These user accounts are currently not integrated with Plinth user management, and public sign-up is enabled! + What is Unhosted? + Unhosted is a way to uncouple web applications from data. No matter where a web application is served from, the data can be stored on an Unhosted storage server of user's choice. Unhosted web apps do not send your user data to their server and are hence known as "serverless", "client-side", or "static" web apps. Either you connect your own server at runtime, or your data stays within the browser. Your FreedomBox can become your Unhosted storage server using a remoteStorage server know as reStore. + + This module is currently disabled in FreedomBox as the package required for reStore server is not available in Debian yet. The package is available for testing via + +
    +
    + Setup + Your FreedomBox contains a remoteStorage server called reStore, that can serve as your personal storage server for Unhosted web apps. To setup reStore, simply install and enable in FreedomBox web UI. After the setup, create an account by visiting the link provided on the Unhosted app page https://<yourdomain>/restore/. + + User accounts are currently not integrated with Plinth user management, and public sign-up is enabled! +
    Try Unhosted apps - Once your FreedomBox is set up, and both PageKite and remoteStorage are running, try one of the following Unhosted apps (more are listed at ): + Once Unhosted is setup on FreedomBox and when FreedomBox is accessible by a domain name (such by using PageKite, Dynamic DNS or Tor Hidden Service), try one of the following Unhosted web apps (more are listed at ): - (a notepad) + (a note taking application) (list your favorite drinks) @@ -628,7 +739,7 @@ (a simple todo list) - To connect the Unhosted app to your remoteStorage, click on the remoteStorage icon and type your address <user>@<yourdomain>, e.g.: + To connect the Unhosted app to your FreedomBox's Unhosted storage, click on the remoteStorage icon and type your address <user>@<yourdomain>, e.g.: @@ -639,8 +750,40 @@ - If this doesn't work, make sure that both PageKite and remoteStorage are running, and that your FreedomBox SSL certificate is trusted in your current browser session (important when using private browsing). - Finish the OAuth flow by authenticating with your password and authorizing access, then you should get redirected back to the Unhosted app, and you should be able to use it. All data of the Unhosted app is stored on your FreedomBox. + If this doesn't work, make sure that + + + FreedomBox has a domain name using PageKite, Dynamic DNS or Tor Hidden Service. + + + The reStore server is running. + + + You have created the account specified in the reStore server. + + + Your FreedomBox SSL certificate is trusted in your current browser session (important when using private browsing). + + + Finish the OAuth flow by authenticating with your password and authorizing access, then you should get redirected back to the Unhosted app, and be able to use it. All data of the Unhosted web app is now stored on your FreedomBox. +
    +
    +
    + OpenVPN +
    + What is OpenVPN? + OpenVPN provides to your FreedomBox a virtual private network service. You can use this software for remote access, site-to-site VPNs and Wi-Fi security. OpenVPN includes support for dynamic IP addresses and NAT. +
    +
    +
    + GnuSocial +
    + What is GNU social? + GNU social is a continuation of the StatusNet project. It is social communication software for both public and private communications. It is widely supported and has a large userbase. It is already used by the Free Software Foundation, and Richard Stallman himself. Think of GNU Social as twitter and beyond. +
    +
    + Status of package + GNU Social is still getting packaged for debian and will be available soon for everyone to use. check the progress by tracking the bug #782812.
    @@ -746,6 +889,7 @@ Manual Upgrades In the Plinth web interface, you can initiate a manual upgrade process from Upgrades page of the Settings section. Note that once the upgrades start, it may take a long time to complete and Plinth may seem to wait for the page to load. Under some circumstances, automatic upgrades may fail and require you perform a manual upgrade action. Even upgrades initiated from Plinth may not finish properly. This may be because the upgrade process requires you to make a decision. In these cases, manual upgrade on the terminal may be the only option. + In addition, while the upgrade task is running any application installations will wait until the upgrade task is finished. Depending on the hardware, the upgrade task may take a little time, therefore, giving the impression that the application installation stalled. To perform manual upgrades on the terminal, login into FreedomBox on a terminal or using a remote secure shell (see Secure Shell section). Then run the following commands: $ sudo su - Password: @@ -2192,9 +2336,9 @@ firewall-cmd --zone=internal --remove-port=<port>/<protocol> firewall-cmd --permanent --zone=internal --remove-port=<port>/<protocol> Example: - firewall-cmd --zone=internal --remove-service=5353/udp + firewall-cmd --zone=internal --remove-port=5353/udp firewall-cmd --permanent --zone=internal --remove-port=5353/udp - To add a port to a zone: + To add a service to a zone: firewall-cmd --zone=<zone> --add-service=<service> firewall-cmd --permanent --zone=<zone> --add-service=<interface> Example: @@ -2204,7 +2348,7 @@ firewall-cmd --zone=internal --add-port=<port>/<protocol> firewall-cmd --permanent --zone=internal --add-port=<port>/<protocol> Example: - firewall-cmd --zone=internal --add-service=5353/udp + firewall-cmd --zone=internal --add-port=5353/udp firewall-cmd --permanent --zone=internal --add-port=5353/udp
    @@ -2220,10 +2364,10 @@ firewall-cmd --permanent --zone=external --remove-interface=eth0 To add an interface to a zone: firewall-cmd --zone=<zone> --add-interface=<interface> -firewall-cmd --permanent --zone=<zone> --remove-interface=<interface> +firewall-cmd --permanent --zone=<zone> --add-interface=<interface> Example: firewall-cmd --zone=internal --add-interface=eth0 -firewall-cmd --permanent --zone=internal --remove-interface=eth0 +firewall-cmd --permanent --zone=internal --add-interface=eth0
    @@ -2265,6 +2409,23 @@ + + + + + + + Cubieboard 2 + + + + + + Cubieboard2 + + + + @@ -2280,6 +2441,8 @@ BeagleBone Black + + @@ -3076,27 +3239,27 @@ First and the recommended option is to use the Bridge type of network. This option exposes the guest machine to the same network that host network is connected to. The guest obtains network configuration information from a router or DHCP server on the network. The guest will appear as just another machine in the network. A major advantage of this of setup is that the host and all other machines in the network will be able to access the services provided by guest without requiring any further setup. The only drawback of this approach is that if the host is not connected to any network, the guest's network will remain unconfigured making it inaccessible even from the host.
    - Second method is Host only type of networking. With a guest's network interface configured in this manner, it will only be accessible from the host machine. The guest will not able access any other machine but the host. It, however, does not require that the host machine be connected to a network. All services all accessible from the host machine without any special configuration such as port forwarding. + Second method is Host only type of networking. With a guest's network interface configured in this manner, it will only be accessible from the host machine. The guest will not able access any other machine but the host, so you do not have internet access on the guest. All services on the guest are available to the host machine without any configuration such as port forwarding. - The final option is to use the NAT type of network. This the networking type that VirtualBox assigns to a freshly created virtual machine. This option works even when host is not connected to any network. The guest is automatically configured and is able to access the Internet and local networks that host is able to connect to. However, the services provided by the guest require port forwarding configuration setup to be available outside. + The third option is to use the NAT type of network. This the networking type that VirtualBox assigns to a freshly created virtual machine. This option works even when host is not connected to any network. The guest is automatically configured and is able to access the Internet and local networks that host is able to connect to. However, the services provided by the guest require port forwarding configuration setup to be available outside. To configure this go to VM settings -> [Network] -> [Adapter] -> [Port Forwarding]. Map a port such as 2222 from host to guest port 22 and you will be able to ssh into FreedomBox from host machine as follows: - - - ssh -p 2222 fbx@localhost - - + ssh -p 2222 fbx@localhost Map 4443 on host to 443 on the guest. This make FreedomBox HTTPS service available on host using the URL You will need to add a mapping for each such services from host to guest. - + + The final option is to create two network interfaces, one host only and one NAT type. This way you can access the guest without any additional configuration, and you have internet access on the guest. The guest will be invisible to any other machines on the network. + + Summary of various network types: - + + @@ -3122,11 +3285,16 @@ Works without host connected to network + + + Guest has internet access + + - Bridged Adapter + Bridged @@ -3177,6 +3345,18 @@ + + + + + + + + (./) + + + + @@ -3232,6 +3412,18 @@ + + + + + + + + {X} + + + + @@ -3287,6 +3479,85 @@ + + + + + + + + (./) + + + + + + + + + NAT and Host + + + + + + + + + + {X} + + + + + + + + + + + + (./) + + + + + + + + + + + + (./) + + + + + + + + + + + + (./) + + + + + + + + + + + + (./) + + + + @@ -3294,13 +3565,7 @@
    Using - You can log in as the following user: - - - Username: fbx - Password: frdm - - + You can log in as the user created during Plinth setup. After logging in, you can become root with the command sudo su. See the FreedomBox usage page for more details.
    @@ -3310,6 +3575,12 @@
    Tips & Troubleshooting
    + Finding out the IP address of the virtual machine + This depends on the network configuration you chose. With a bridged adapter, your virtual machine gets its IP address from the DHCP server of your network, most likely of your Router. You can try the first couple of IP addresses or check your router web interface for a list of connected devices. + If you chose host-only adapter, the IP address is assigned by the DHCP server of your VirtualBox network. In the VirtualBox Manager, go to File -> Preferences -> Network -> Host-only Networks. You can see and edit the DHCP address range there, typically you get assigned addresses close to the Lower Address Bound. + Another possibility of finding the IP address is to login via the Virtualbox Manager (or similar software). The FreedomBox images do not have any default user accounts, so you need to set an initial user and password using the passwd-in-image script. +
    +
    Networking Problems with macchanger The package macchanger can cause network problems with VirtualBox. If you have a valid IP address on your guest's host network adapter (like 192.168.56.101) but are not able to ping or access the host (like 192.168.56.1), try uninstalling macchanger: $ dpkg --ignore-depends=freedombox-setup --remove macchanger @@ -3342,6 +3613,10 @@ Use a fresh Debian installation Installing FreedomBox changes your Debian system in many important ways. This includes installing a firewall and regenerating server certificates. It is hence recommended that you install FreedomBox on a fresh Debian installation instead of an existing setup. + + use "fbx" as the login name + + If you choose to create an initial user account, use "fbx" as the login name. (Once the FreedomBox setup program completes, all user accounts except for the "fbx" account will be locked out via pam_access. This also affects sudo access.)
    Installing on Debian @@ -3351,11 +3626,6 @@ Install Debian Testing (Stretch) or Unstable (Sid) on your hardware. - - - If you choose to create an initial user account, use "fbx" as the login name. (Once the FreedomBox setup program completes, all user accounts except for the "fbx" account will be locked out via pam_access. This also affects sudo access.) - - Update your package list. @@ -3364,6 +3634,11 @@ Install freedombox-setup package. $ sudo apt-get install freedombox-setup + + + When asked to specify whether Macchanger should be set up to run automatically, please choose "No". + + Run FreedomBox setup program. This installs further packages and sets up basic configuration. @@ -3735,116 +4010,135 @@ Contributing From code, design and translation to spreading the world and donation, here is a list of possible contributions to develop FreedomBox.
    - Welcome to newcomers - As a newcomer, you are more than welcome to introduce yourself to all users and doers on the "FreedomBox-discuss" mailing list or on the #freedombox IRC channel. - In addition to make useful contacts, you can start reporting bugs and translate (see below) the wiki website and the FreedomBox web interface. -
    -
    - Development priorities - Upcoming priorities have been discussed end of October 2015 by several core developers and the Freedombox Foundation. You'll find on the mailing list archives a Medium Term Roadmap for 2015 and 2016. Please check next progess calls to keep yourself on track and meet members of the release team. A TODO page aggregates the complete list of the items to work on for FreedomBox. + Quick Links + + Progess calls + + + TODO page + + + Donation page +
    - Add an Application - If you are a developer and wish to see an application available in FreedomBox, you can contribute by adding the application to FreedomBox. See the FreedomBox Developer Manual. + Welcome to newcomers + As a newcomer, you are more than welcome to introduce yourself to all users and doers on the "FreedomBox-discuss" mailing list or on the #freedombox IRC channel. In addition to make useful contacts, you can start reporting bugs and translate (see below) the wiki website and the FreedomBox web interface.
    - Code - If you are a developer, you can contribute code to one of the sub-projects of FreedomBox. Step-by-step process of contributing code to FreedomBox is available. - - - FreedomBox Setup: a Debian package for setting up the FreedomBox. - - - Plinth: a web interface to administer the functions of FreedomBox. - - - Freedom Maker: a script to build FreedomBox disk images for use on various hardware devices or virtual machines. - - - You can pickup a task from one of the TODO lists. The individual page project pages contain information availabily of the code, how to build and TODO lists. + Development priorities + Upcoming priorities have been discussed end of October 2015 by several core developers and the Freedombox Foundation. You'll find on the mailing list archives a Medium Term Roadmap for 2015 and 2016. We want to enjoy soon a version 1.0. We are targeting mid January for a 0.8 release. The main focus of the 0.8 release is going to be integrated in the PGP based SSL Client authentication work. We are planning on a 0.9 polish release for late February with general usability improvements. + Please check next progess calls to keep yourself on track and meet members of the release team. A TODO page aggregates the complete list of the items to work on for FreedomBox.
    - Design + Contributions needed +
    + Add an Application + If you are a developer and wish to see an application available in FreedomBox, you can contribute by adding the application to FreedomBox. See the FreedomBox Developer Manual. +
    +
    + Bugs + List of bugs listed on Debian universal system. +
    - User Experience Design - If you are a user experience designer, you can help FreedomBox with the following items: + Code + If you are a developer, you can contribute code to one of the sub-projects of FreedomBox. Step-by-step process of contributing code to FreedomBox is available. - UI experience for the Plinth web interface + FreedomBox Setup: a Debian package for setting up the FreedomBox. - Web design for freedomboxfoundation.org and FreedomBox wiki pages + Plinth: a web interface to administer the functions of FreedomBox. - Logo and branding (we currently have an identity manual and logos) + Freedom Maker: a script to build FreedomBox disk images for use on various hardware devices or virtual machines. + + You can pickup a task from one of the TODO lists. The individual page project pages contain information availabily of the code, how to build and TODO lists. +
    +
    + Design +
    + User Experience Design + If you are a user experience designer, you can help FreedomBox with the following items: + + + UI experience for the Plinth web interface + + + Web design for freedomboxfoundation.org and FreedomBox wiki pages + + + Logo and branding (we currently have an identity manual and logos) + + + Possible designs for custom FreedomBox cases on single board computers + + + + User experience design + + + +
    +
    + Technical Design + FreedomBox is still under development any many components are yet to be worked on. You can contribute to the discussion on various technical design and implementation aspects of FreedomBox. See: + + + + Design portal + + + +
    +
    +
    + Donate + The FreedomBox Foundation is a Delaware non-profit corporation in the process of applying for 501(c)(3) federal nonprofit recognition from the IRS. FreedomBox project is run by volunteers. You can help the project financially by donating via PayPal, Bitcoin or by mailing a check. Please see the donation page for details on how to donate. +
    +
    + Document: User Manual, Website and Wiki + FreedomBox needs better documentation for users and contributors. FreedomBox manual is prepared by aggregating various pages on the wiki and exporting to various formats. The manual is then used in Plinth and elsewhere. + If you wish to contribute to the FreedomBox wiki (and consequently the FreedomBox manual), you can create a wiki account and start editing. + For contributing to the website please start a discussion on the FreedomBox mailing list. +
    +
    + Quality Assurance + - Possible designs for custom FreedomBox cases on single board computers + FreedomBox already runs on many platforms and it is not possible for developers to test all possible platforms. If you have one of the supported hardware you can help with testing FreedomBox on the platform. - - User experience design - + When an application is made available on FreedomBox, not all of its functionality is tested in the real world by developer doing the work. Deploying the application and testing it will help ensure high quality applications in FreedomBox. + See the quality assurance page for a basic list of test cases to check for and information on reporting bugs.
    - Technical Design - FreedomBox is still under development any many components are yet to be worked on. You can contribute to the discussion on various technical design and implementation aspects of FreedomBox. See: + Localization + All text visible to users of FreedomBox needs to be localized to various languages. This translation work includes: - - Design portal - + Plinth web interface for FreedomBox + + + FreedomBox documentation + + + FreedomBox website and wiki + + + Individual applications that FreedomBox exposes to users such as ownCloud, JWChat etc. + Some of the translation work are implemented in user interface (Plinth) since the 0.7 release. Documents for user interface translation are currently available on Transifex localization platform and GitHub. If you wish to see FreedomBox available for one of your languages, please start a discussion on the FreedomBox discuss mailing list or on the #freedombox IRC channel to avoid double translations. + For more information, please visit the FreedomBox translation landing page. +
    +
    + Spread the Word + Speak to your family, friends, local community or at global conferences about the importance of FreedomBox. To be a successful project we need many more participants, be it users or contributors. Write about your efforts at the talks page and on the wiki.
    -
    -
    - Donate - The FreedomBox Foundation is a Delaware non-profit corporation in the process of applying for 501(c)(3) federal nonprofit recognition from the IRS. FreedomBox project is run by volunteers. You can help the project financially by donating via PayPal, Bitcoin or by mailing a check. Please see the donation page for details on how to donate. -
    -
    - Document: User Manual, Website and Wiki - FreedomBox needs better documentation for users and contributors. FreedomBox manual is prepared by aggregating various pages on the wiki and exporting to various formats. The manual is then used in Plinth and elsewhere. - If you wish to contribute to the FreedomBox wiki (and consequently the FreedomBox manual), you can create a wiki account and start editing. - For contributing to the website please start a discussion on the FreedomBox mailing list. -
    -
    - Quality Assurance - - - FreedomBox already runs on many platforms and it is not possible for developers to test all possible platforms. If you have one of the supported hardware you can help with testing FreedomBox on the platform. - - - When an application is made available on FreedomBox, not all of its functionality is tested in the real world by developer doing the work. Deploying the application and testing it will help ensure high quality applications in FreedomBox. - - - See the quality assurance page for a basic list of test cases to check for and information on reporting bugs. -
    -
    - Localization - All text visible to users of FreedomBox needs to be localized to various languages. This translation work includes: - - - Plinth web interface for FreedomBox - - - FreedomBox documentation - - - FreedomBox website and wiki - - - Individual applications that FreedomBox exposes to users such as ownCloud, JWChat etc. - - - Some of the translation work are implemented in user interface (Plinth) since the 0.7 release. Documents for user interface translation are currently available on Transifex localization platform and GitHub. If you wish to see FreedomBox available for one of your languages, please start a discussion on the FreedomBox discuss mailing list or on the #freedombox IRC channel to avoid double translations. - For more information, please visit the FreedomBox translation landing page. -
    -
    - Spread the Word - Speak to your family, friends, local community or at global conferences about the importance of FreedomBox. To be a successful project we need many more participants, be it users or contributors. Write about your efforts at the talks page and on the wiki.
    @@ -3879,7 +4173,7 @@
    Packaging the application Majority of the effort in creating an application for FreedomBox is to package it for Debian and get it uploaded to Debian repositories. Going through the process of packaging itself is outside the scope of this tutorial. It is, however, well documented elsewhere. You should start here. - Debian packaging might seem like an unnecessary process that takes time with its adherence to standards, review process, legal checks, etc. However, upon close examination, one will find that without these steps the goals of the FreedomBox project cannot be met without such a process. Some of the advantages of Debian packaging are listed below: + Debian packaging might seem like an unnecessary process that takes time with its adherence to standards, review process, legal checks, etc. However, upon close examination, one will find that without these steps the goals of the FreedomBox project cannot be met. Some of the advantages of Debian packaging are listed below: Legal check ensures that proprietary licensed code or code with bad licenses does not inadvertently creep in. @@ -3947,12 +4241,13 @@
    Writing the URLs For a user to visit our application in Plinth, we need to provide a URL. When the user visits this URL, a view is executed and a page is displayed. In urls.py write the following: - from django.conf.urls import patterns, url + from django.conf.urls import url + +from . import views -urlpatterns = patterns( - 'plinth.modules.ttrss.views', - url(r'^apps/ttrss/$', 'index', name='index'), - ) +urlpatterns = [ + url(r'^apps/ttrss/$', views.index, name='index'), +] This routes the /apps/ttrss/ URL to a view called index defined in plinth/modules/ttrss/views.py. This is no different than how routing URLs are written in Django. See Django URL dispatcher for more information.
    @@ -4105,9 +4400,9 @@ modified = True if modified: - messages.success(request, _('Configuration updated')) + messages.success(request, 'Configuration updated') else: - messages.info(request, _('Setting unchanged')) + messages.info(request, 'Setting unchanged') We check to make sure that we don't try to disable the application when it is already disabled or try to enable the application when it is already enabled. Although Plinth's operations are idempotent, meaning that running them twice will not be problematic, we still wish avoid unnecessary operations for the sake of speed. We are actually perform the operation using Plinth actions. We will implement the action to be performed a bit later. After we perform the operation, we will show a message on the response page showing that the action was successful or that nothing happened. We use the Django messaging framework to accomplish this. See Django messaging framework for more information. @@ -4246,16 +4541,8 @@
    Internationalization - Every string message that is visible to the user must localized to user's native language. For this to happen, our application needs to be internationalized. This requires marking the user visible messages for translation. Plinth applications use the gettext library to make that happen. - from gettext import gettext as _ - -def init(): - """Intialize the module.""" - menu = cfg.main_menu.get('apps:index') - menu.add_urlname(_('News Feed Reader (Tiny Tiny RSS)'), 'glyphicon-envelope', - 'ttrss:index', 600) - Notice that the menu item's display name is wrapped in the _() method call. Let us do that for the title of the application page too. - from gettext import gettext as _ + Every string message that is visible to the user must be localized to user's native language. For this to happen, our application needs to be internationalized. This requires marking the user visible messages for translation. Plinth applications use the Django's localization methods to make that happen. + from django.utils.translation import ugettext as _ def index(request): ... @@ -4263,6 +4550,16 @@ {'title': _('News Feed Reader (Tiny Tiny RSS)'), 'status': status, 'form': form}) + Notice that the page's title is wrapped in the _() method call. Let us do that for the menu item of the application too. + from django.utils.translation import ugettext_lazy as _ + +def init(): + """Intialize the module.""" + menu = cfg.main_menu.get('apps:index') + menu.add_urlname(_('News Feed Reader (Tiny Tiny RSS)'), 'glyphicon-envelope', + 'ttrss:index', 600) + Notice that in this case, we have used the ugettext_lazy and in the first case we have used the regular ugettext. This is because in the second case the gettext lookup is made once and reused for every user looking at the interface. These users may each have a different language set for their interface. Lookup made for one language should not be used for other users. The _lazy method provided by Django makes sure that the return value is an object that will actually be converted to string at the final moment when the string is being displayed. In the first case, the looked is made and string is returned immediately. + All of this is the usual way internationalization is done in Django. See Django internationalization and localization documentation for more information.
    Coding standards Binary files /tmp/tmpayiXe6/4CFLMOgqkY/plinth-0.7.2/static/doc/images/cubieboard2_thumb.jpg and /tmp/tmpayiXe6/oLYEgxqtMe/plinth-0.8.1/static/doc/images/cubieboard2_thumb.jpg differ diff -Nru plinth-0.7.2/static/doc/Makefile plinth-0.8.1/static/doc/Makefile --- plinth-0.7.2/static/doc/Makefile 2015-12-23 11:34:40.000000000 +0000 +++ plinth-0.8.1/static/doc/Makefile 2016-02-16 03:55:53.000000000 +0000 @@ -55,7 +55,7 @@ %.html: %.xml - xmlto html-nochunks $< + docbook2html --nochunks $< %.1: %.xml