diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 11b5f5a42..2a488ce22 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -18,6 +18,16 @@ code-quality: script: - python3 -m flake8 container plinth actions/* +static-type-check: + stage: test + allow_failure: true + needs: [] + before_script: + - apt-get update + - apt-get install -y mypy + script: + - mypy --ignore-missing-imports . + unit-tests: stage: test needs: [] diff --git a/HACKING.md b/HACKING.md index 8b375c72f..cd4332a09 100644 --- a/HACKING.md +++ b/HACKING.md @@ -167,6 +167,16 @@ Note: This development container has automatic upgrades disabled by default. host$ sudo find -iname '__pycache__' | sudo xargs rm -rf {} ; ``` +#### Using Containers On 64-bit Raspberry Pi + +The container script can be used (as described above) on a Raspberry Pi 3 or 4 +running a 64-bit operating system. + +If you are running Raspberry Pi OS 64-bit, you will first need to enable Network +Manager. To do this, run `sudo raspi-config`, go to "5 Advanced Options", and +then to "A4 Network Config". Select "NetworkManager", and then reboot as +prompted. + [back to index](#hacking) [DebianNetworkManager]: https://wiki.debian.org/NetworkManager#Wired_Networks_are_Unmanaged diff --git a/container b/container index 5e0759955..6da2fcfb6 100755 --- a/container +++ b/container @@ -131,7 +131,7 @@ from urllib.request import urlopen URLS_AMD64 = { 'stable': 'https://ftp.freedombox.org/pub/freedombox/hardware/' - 'amd64/bullseye/freedombox-bullseye-free_all-amd64.img.xz', + 'amd64/bookworm/freedombox-bookworm_all-amd64.img.xz', 'testing': 'https://ftp.freedombox.org/pub/freedombox/hardware/' 'amd64/testing/freedombox-testing_dev_all-amd64.img.xz', 'unstable': 'https://ftp.freedombox.org/pub/freedombox/hardware/' @@ -140,7 +140,7 @@ URLS_AMD64 = { URLS_ARM64 = { 'stable': 'https://ftp.freedombox.org/pub/freedombox/hardware/' - 'arm64/bullseye/freedombox-bullseye-free_all-arm64.img.xz', + 'arm64/bookworm/freedombox-bookworm_all-arm64.img.xz', 'testing': 'https://ftp.freedombox.org/pub/freedombox/hardware/' 'arm64/testing/freedombox-testing_dev_all-arm64.img.xz', 'unstable': 'https://ftp.freedombox.org/pub/freedombox/hardware/' @@ -149,11 +149,13 @@ URLS_ARM64 = { URLS = URLS_AMD64 -TRUSTED_KEYS = ['013D86D8BA32EAB4A6691BF85D4153D6FE188FC8'] +TRUSTED_KEYS = ['D4B069124FCF43AA1FCD7FBC2ACFC1E15AF82D8C'] KEY_SERVER = 'keyserver.ubuntu.com' +KEY_SERVER_HTTPS_API = \ + 'https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x{key_id}' PROVISION_SCRIPT = ''' -set -x +set -xe pipefail cd /freedombox/ @@ -185,8 +187,8 @@ sudo chmod a+rw geckodriver.log sudo mkdir -p .pytest_cache/ sudo chmod --recursive a+rw .pytest_cache/ sudo chmod a+w /freedombox -sudo chmod --recursive --silent a+w htmlcov -sudo chmod --silent a+w .coverage +sudo chmod --recursive --silent a+w htmlcov || true +sudo chmod --silent a+w .coverage || true exit 0 ''' # noqa @@ -290,6 +292,8 @@ def parse_arguments(): help='Distribution of the image to download and setup') subparser.add_argument('--image-size', default='16G', help='Disk image size to resize to after download') + subparser.add_argument('--hkp-client', choices=('gpg', 'wget'), + default='gpg', help='Client for key retrieval') # Print IP address subparser = subparsers.add_parser( @@ -339,6 +343,8 @@ def parse_arguments(): subparser.add_argument('--distribution', choices=distributions, default=default_distribution, help='Distribution of the image to update') + subparser.add_argument('--hkp-client', choices=('gpg', 'wget'), + default='gpg', help='Client for key retrieval') # Display help message when no args are passed if len(sys.argv) == 1: @@ -383,6 +389,7 @@ def _verify_dependencies(): 'sgdisk': 'gdisk', 'btrfs': 'btrfs-progs', 'nmcli': 'network-manager', + 'dnsmasq': 'dnsmasq', 'ssh': 'openssh-client', 'ssh-keygen': 'openssh-client', } @@ -405,8 +412,8 @@ def _verify_dependencies(): sys.exit(1) logger.info('Running apt for missing packages: %s', - ' '.join(missing_commands)) - subprocess.run(['sudo', 'apt', 'install'] + missing_packages, check=False) + ' '.join(missing_packages)) + subprocess.run(['sudo', 'apt', 'install'] + missing_packages, check=True) def _get_systemd_nspawn_version(): @@ -440,7 +447,30 @@ def _download_file(url, target_file, force=False): partial_file.rename(target_file) -def _verify_signature(data_file, signature_file): +def _receive_keys_with_gpg(gpg_home, key_ids): + """Use gpg to retrieve and import a list of keys.""" + subprocess.run([ + 'gpg', '--quiet', '--homedir', + str(gpg_home), '--keyserver', KEY_SERVER, '--recv-keys' + ] + key_ids, check=True) + + +def _receive_keys_with_wget(gpg_home, key_ids): + """Use wget to retrieve a list of keys and import them.""" + for key_id in key_ids: + # Download public key + logger.info('Getting public key %s', key_id) + url = KEY_SERVER_HTTPS_API.format(key_id=key_id) + wget_result = subprocess.run( + ['wget', '--quiet', '--output-document=-', url], check=True, + capture_output=True) + public_key = wget_result.stdout + subprocess.run( + ['gpg', '--quiet', '--homedir', + str(gpg_home), '--import=-'], input=public_key, check=True) + + +def _verify_signature(hkp_client, data_file, signature_file): """Verify the detached signature on a file using GPG.""" verified_file = signature_file.with_suffix(signature_file.suffix + '.verified') @@ -452,10 +482,11 @@ def _verify_signature(data_file, signature_file): gpg_home.chmod(0o700) logger.info('Receiving GPG keys') - subprocess.run([ - 'gpg', '--quiet', '--homedir', - str(gpg_home), '--keyserver', KEY_SERVER, '--recv-keys' - ] + TRUSTED_KEYS, check=True) + if hkp_client == 'wget': + _receive_keys_with_wget(gpg_home, TRUSTED_KEYS) + else: + _receive_keys_with_gpg(gpg_home, TRUSTED_KEYS) + process = subprocess.run( ['gpg', '--quiet', '--homedir', str(gpg_home), '--armor', '--export'] + TRUSTED_KEYS, check=True, @@ -518,7 +549,7 @@ def _get_overlay_folder(distribution): return folder.resolve() -def _download_disk_image(distribution, force=False): +def _download_disk_image(distribution, hkp_client, force=False): """Download and unpack FreedomBox disk image.""" work_directory.mkdir(exist_ok=True) @@ -530,7 +561,7 @@ def _download_disk_image(distribution, force=False): signature_file = target_file.with_suffix(target_file.suffix + '.sig') _download_file(url + '.sig', signature_file, force=force) - _verify_signature(target_file, signature_file) + _verify_signature(hkp_client, target_file, signature_file) return _extract_image(target_file) @@ -547,6 +578,7 @@ def _get_partition_info(image_file): if line.startswith('Partition Table:'): partition_table_type = line.partition(': ')[2] + logger.info('Main partition: %s', last_partition_number) return partition_table_type, last_partition_number @@ -750,6 +782,7 @@ def _setup(image_file, distribution): _setup_nm_connection(distribution) setup_file.touch() + logger.info('Setup completed') def _create_nspawn_machine(image_file, distribution): @@ -820,9 +853,10 @@ def _launch(image_file, distribution): logger.info('Bringing up host network connection: %s', f'fbx-{distribution}-shared') + # This command requires dnsmasq subprocess.run( ['sudo', 'nmcli', 'connection', 'up', f'fbx-{distribution}-shared'], - stdout=subprocess.DEVNULL, check=False) + stdout=subprocess.DEVNULL, check=True) def _stop(distribution): @@ -907,6 +941,7 @@ def _provision(image_file, distribution): input=PROVISION_SCRIPT.encode()) provision_file.touch() + logger.info('Provision completed') def _print_banner(distribution): @@ -1023,7 +1058,8 @@ def subcommand_up(arguments): _verify_dependencies() _get_systemd_nspawn_version() - image_file = _download_disk_image(arguments.distribution) + image_file = _download_disk_image(arguments.distribution, + arguments.hkp_client) _resize_disk_image(image_file, arguments.image_size) _setup(image_file, arguments.distribution) _launch(image_file, arguments.distribution) @@ -1077,7 +1113,8 @@ def subcommand_update(arguments): """Update the disk image.""" if _is_update_required(arguments.distribution): logger.info("Updating...") - _download_disk_image(arguments.distribution, force=True) + _download_disk_image(arguments.distribution, arguments.hkp_client, + force=True) else: logger.info("Already using the latest image") diff --git a/debian/changelog b/debian/changelog index a9efa07b7..6404b9c4e 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,62 @@ +freedombox (23.14) unstable; urgency=medium + + [ James Valleroy ] + * users: Add diagnostics check for nslcd config + * users: Add diagnostic checks for nsswitch config + * firewall: Add diagnostic for default zone + * firewall: Add diagnostic check for backend + * firewall: Add diagnostic check for passthroughs + * torproxy: Add separate app for Tor Proxy + * HACKING: Add instructions for container on Raspberry Pi + * ci: Add mypy static type check + * upgrades: Use codename= in apt preferences + * upgrades: Use n= for unattended-upgrades origin pattern + * container: Update for bookworm images + * locale: Update translation strings + * doc: Fetch latest manual + + [ ikmaak ] + * Translated using Weblate (Dutch) + + [ Sunil Mohan Adapa ] + * torproxy: Rename icon from tor to torproxy + * torproxy: Remove unnecessary load tags in template file + * torproxy: Add shortcut to home page for logged in users + * tor: Minor refactor to remove code the check for need to restart + * tor, torproxy: Update description for info on services provided + * tor: tests: Make functional test check for running service + * torproxy: Drop irrelavant 'ExitPolicy' configuration directive + * kvstore: Optionally, don't throw exception when deleting key + * tor, torproxy: Export settings from old to new app + * bepasty: Don't enable app when setup is rerun + * bind: Don't enable app when setup is rerun + * deluge: Don't enable app when setup is rerun + * ejabberd: Don't enable app when setup is rerun + * gitweb: Don't enable app when setup is rerun + * ikiwiki: Don't enable app when setup is rerun + * infinoted: Don't enable app when setup is rerun + * janus: Don't enable app when setup is rerun + * jsxc: Don't enable app when setup is rerun + * mediawiki: Don't enable app when setup is rerun + * minetest: Don't enable app when setup is rerun + * openvpn: Don't enable app when setup is rerun + * performance: Don't enable app when setup is rerun + * privoxy: Don't enable app when setup is rerun + * quassel: Don't enable app when setup is rerun + * radicale: Don't enable app when setup is rerun + * rssbridge: Don't enable app when setup is rerun + * shaarli: Don't enable app when setup is rerun + * sharing: Don't enable app when setup is rerun + * ttrss: Don't enable app when setup is rerun + * wireguard: Don't enable app when setup is rerun + * zoph: Don't enable app when setup is rerun + * app: Implement advanced option to rerun app setup + + [ fliu ] + * container: Add support for retrieving GPG keys using wget + + -- James Valleroy Mon, 31 Jul 2023 20:39:40 -0400 + freedombox (23.13~bpo12+1) bookworm-backports; urgency=medium * Rebuild for bookworm-backports. diff --git a/doc/manual/en/GettingHelp.raw.wiki b/doc/manual/en/GettingHelp.raw.wiki index 4740403bf..0488c444e 100644 --- a/doc/manual/en/GettingHelp.raw.wiki +++ b/doc/manual/en/GettingHelp.raw.wiki @@ -10,7 +10,7 @@ <> -The !FreedomBox community provides live help via forum, chat and email. Feel free to join and ask anything you like. If you receive help, please consider to report your solution to the [[FreedomBox/QuestionsAndAnswers|Questions and Answers]] page, so others can benefit in the future. +The !FreedomBox community provides live help via forum, chat and email. Feel free to join and ask anything you like. If you receive help, please consider to report your solution to the [[https://discuss.freedombox.org/t/frequently-asked-questions/1906|Questions and Answers]] page, so others can benefit in the future. == Discussion Forum == @@ -34,7 +34,7 @@ Providing you are familiar with [[http://www.irchelp.org/|Internet Relay Chat]] == Help Back == -Once you've got your solution, don't forget to add it to the [[FreedomBox/QuestionsAndAnswers|Questions and Answers]] page and tell which features do you use from the box on [[FreedomBox/UserExperience|Use Cases]] page. It could help others to use !FreedomBox in a way they would have not imagined. +Once you've got your solution, don't forget to add it to the [[https://discuss.freedombox.org/t/frequently-asked-questions/1906|Questions and Answers]] page and tell which features do you use from the box on [[FreedomBox/UserExperience|Use Cases]] page. It could help others to use !FreedomBox in a way they would have not imagined. ## END_INCLUDE diff --git a/doc/manual/en/ReleaseNotes.raw.wiki b/doc/manual/en/ReleaseNotes.raw.wiki index 6319eeb26..b5e48b848 100644 --- a/doc/manual/en/ReleaseNotes.raw.wiki +++ b/doc/manual/en/ReleaseNotes.raw.wiki @@ -8,6 +8,54 @@ For more technical details, see the [[https://salsa.debian.org/freedombox-team/f The following are the release notes for each !FreedomBox version. +== FreedomBox 23.14 (2023-07-31) == + +=== Highlights === + + * app: Implement advanced option to rerun app setup + * torproxy: Add separate app for Tor Proxy + * upgrades: Use codename in apt preferences + +=== Other Changes === + + * HACKING: Add instructions for container on Raspberry Pi + * bepasty: Don't enable app when setup is rerun + * bind: Don't enable app when setup is rerun + * ci: Add mypy static type check + * container: Add support for retrieving GPG keys using wget + * container: Update for bookworm images + * deluge: Don't enable app when setup is rerun + * ejabberd: Don't enable app when setup is rerun + * firewall: Add diagnostic check for backend + * firewall: Add diagnostic check for passthroughs + * firewall: Add diagnostic for default zone + * gitweb: Don't enable app when setup is rerun + * ikiwiki: Don't enable app when setup is rerun + * infinoted: Don't enable app when setup is rerun + * janus: Don't enable app when setup is rerun + * jsxc: Don't enable app when setup is rerun + * kvstore: Optionally, don't throw exception when deleting key + * locale: Update translations for Dutch + * mediawiki: Don't enable app when setup is rerun + * minetest: Don't enable app when setup is rerun + * openvpn: Don't enable app when setup is rerun + * performance: Don't enable app when setup is rerun + * privoxy: Don't enable app when setup is rerun + * quassel: Don't enable app when setup is rerun + * radicale: Don't enable app when setup is rerun + * rssbridge: Don't enable app when setup is rerun + * shaarli: Don't enable app when setup is rerun + * sharing: Don't enable app when setup is rerun + * tor, torproxy: Export settings from old to new app + * tor, torproxy: Update description for info on services provided + * tor: tests: Make functional test check for running service + * ttrss: Don't enable app when setup is rerun + * upgrades: Use codename for unattended-upgrades origin pattern + * users: Add diagnostic checks for nsswitch config + * users: Add diagnostics check for nslcd config + * wireguard: Don't enable app when setup is rerun + * zoph: Don't enable app when setup is rerun + == FreedomBox 23.13 (2023-07-17) == * container: Add support for ARM64 containers diff --git a/doc/manual/es/ReleaseNotes.raw.wiki b/doc/manual/es/ReleaseNotes.raw.wiki index 6319eeb26..b5e48b848 100644 --- a/doc/manual/es/ReleaseNotes.raw.wiki +++ b/doc/manual/es/ReleaseNotes.raw.wiki @@ -8,6 +8,54 @@ For more technical details, see the [[https://salsa.debian.org/freedombox-team/f The following are the release notes for each !FreedomBox version. +== FreedomBox 23.14 (2023-07-31) == + +=== Highlights === + + * app: Implement advanced option to rerun app setup + * torproxy: Add separate app for Tor Proxy + * upgrades: Use codename in apt preferences + +=== Other Changes === + + * HACKING: Add instructions for container on Raspberry Pi + * bepasty: Don't enable app when setup is rerun + * bind: Don't enable app when setup is rerun + * ci: Add mypy static type check + * container: Add support for retrieving GPG keys using wget + * container: Update for bookworm images + * deluge: Don't enable app when setup is rerun + * ejabberd: Don't enable app when setup is rerun + * firewall: Add diagnostic check for backend + * firewall: Add diagnostic check for passthroughs + * firewall: Add diagnostic for default zone + * gitweb: Don't enable app when setup is rerun + * ikiwiki: Don't enable app when setup is rerun + * infinoted: Don't enable app when setup is rerun + * janus: Don't enable app when setup is rerun + * jsxc: Don't enable app when setup is rerun + * kvstore: Optionally, don't throw exception when deleting key + * locale: Update translations for Dutch + * mediawiki: Don't enable app when setup is rerun + * minetest: Don't enable app when setup is rerun + * openvpn: Don't enable app when setup is rerun + * performance: Don't enable app when setup is rerun + * privoxy: Don't enable app when setup is rerun + * quassel: Don't enable app when setup is rerun + * radicale: Don't enable app when setup is rerun + * rssbridge: Don't enable app when setup is rerun + * shaarli: Don't enable app when setup is rerun + * sharing: Don't enable app when setup is rerun + * tor, torproxy: Export settings from old to new app + * tor, torproxy: Update description for info on services provided + * tor: tests: Make functional test check for running service + * ttrss: Don't enable app when setup is rerun + * upgrades: Use codename for unattended-upgrades origin pattern + * users: Add diagnostic checks for nsswitch config + * users: Add diagnostics check for nslcd config + * wireguard: Don't enable app when setup is rerun + * zoph: Don't enable app when setup is rerun + == FreedomBox 23.13 (2023-07-17) == * container: Add support for ARM64 containers diff --git a/plinth/__init__.py b/plinth/__init__.py index b1f05a74d..2a175e880 100644 --- a/plinth/__init__.py +++ b/plinth/__init__.py @@ -3,4 +3,4 @@ Package init file. """ -__version__ = '23.13' +__version__ = '23.14' diff --git a/plinth/kvstore.py b/plinth/kvstore.py index 48911387e..477ecc195 100644 --- a/plinth/kvstore.py +++ b/plinth/kvstore.py @@ -27,7 +27,11 @@ def set(key, value): # pylint: disable-msg=W0622 store.save() -def delete(key): +def delete(key, ignore_missing=False): """Delete a key""" from plinth.models import KVStore - return KVStore.objects.get(key=key).delete() + try: + return KVStore.objects.get(key=key).delete() + except KVStore.DoesNotExist: + if not ignore_missing: + raise diff --git a/plinth/locale/ar/LC_MESSAGES/django.po b/plinth/locale/ar/LC_MESSAGES/django.po index 50f4866de..a48043d46 100644 --- a/plinth/locale/ar/LC_MESSAGES/django.po +++ b/plinth/locale/ar/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-06-19 20:15-0400\n" +"POT-Creation-Date: 2023-07-31 20:04-0400\n" "PO-Revision-Date: 2022-03-31 09:12+0000\n" "Last-Translator: abidin toumi \n" "Language-Team: Arabic Tor Project website. For " @@ -6026,55 +6040,48 @@ msgid "" "en\">Tor Browser." msgstr "" -#: plinth/modules/tor/__init__.py:30 -#, python-brace-format +#: plinth/modules/tor/__init__.py:37 msgid "" -"A Tor SOCKS port is available on your {box_name} for internal networks on " -"TCP port 9050." +"This app provides relay services to contribute to Tor network and help " +"others overcome censorship." msgstr "" -#: plinth/modules/tor/__init__.py:48 +#: plinth/modules/tor/__init__.py:40 +#, python-brace-format +msgid "" +"This app provides an onion domain to expose {box_name} services via the Tor " +"network. Using Tor browser, one can access {box_name} from the internet even " +"when using an ISP that limits servers at home." +msgstr "" + +#: plinth/modules/tor/__init__.py:60 msgid "Tor" msgstr "" -#: plinth/modules/tor/__init__.py:65 +#: plinth/modules/tor/__init__.py:76 msgid "Tor Onion Service" msgstr "" -#: plinth/modules/tor/__init__.py:69 -msgid "Tor Socks Proxy" -msgstr "" - -#: plinth/modules/tor/__init__.py:73 +#: plinth/modules/tor/__init__.py:80 msgid "Tor Bridge Relay" msgstr "" -#: plinth/modules/tor/__init__.py:132 +#: plinth/modules/tor/__init__.py:135 msgid "Tor relay port available" msgstr "" -#: plinth/modules/tor/__init__.py:143 +#: plinth/modules/tor/__init__.py:146 msgid "Obfs3 transport registered" msgstr "" -#: plinth/modules/tor/__init__.py:153 +#: plinth/modules/tor/__init__.py:156 msgid "Obfs4 transport registered" msgstr "" -#: plinth/modules/tor/__init__.py:165 +#: plinth/modules/tor/__init__.py:168 msgid "Onion service is version 3" msgstr "" -#: plinth/modules/tor/__init__.py:242 -#, python-brace-format -msgid "Access URL {url} on tcp{kind} via Tor" -msgstr "" - -#: plinth/modules/tor/__init__.py:253 -#, python-brace-format -msgid "Confirm Tor usage at {url} on tcp{kind}" -msgstr "" - #: plinth/modules/tor/forms.py:33 msgid "" "Enter a valid bridge with this format: [transport] IP:ORPort [fingerprint]" @@ -6102,11 +6109,11 @@ msgid "" "here. Currently supported transports are none, obfs3, obfs4 and scamblesuit." msgstr "" -#: plinth/modules/tor/forms.py:91 +#: plinth/modules/tor/forms.py:95 msgid "Enable Tor relay" msgstr "" -#: plinth/modules/tor/forms.py:92 +#: plinth/modules/tor/forms.py:96 #, python-brace-format msgid "" "When enabled, your {box_name} will run a Tor relay and donate bandwidth to " @@ -6114,22 +6121,22 @@ msgid "" "download bandwidth." msgstr "" -#: plinth/modules/tor/forms.py:97 +#: plinth/modules/tor/forms.py:101 msgid "Enable Tor bridge relay" msgstr "" -#: plinth/modules/tor/forms.py:99 +#: plinth/modules/tor/forms.py:103 msgid "" "When enabled, relay information is published in the Tor bridge database " "instead of public Tor relay database making it harder to censor this node. " "This helps others circumvent censorship." msgstr "" -#: plinth/modules/tor/forms.py:104 +#: plinth/modules/tor/forms.py:108 msgid "Enable Tor Onion Service" msgstr "" -#: plinth/modules/tor/forms.py:106 +#: plinth/modules/tor/forms.py:110 #, python-brace-format msgid "" "An onion service will allow {box_name} to provide selected services (such as " @@ -6137,26 +6144,15 @@ msgid "" "anonymity yet." msgstr "" -#: plinth/modules/tor/forms.py:111 -msgid "Download software packages over Tor" -msgstr "" - -#: plinth/modules/tor/forms.py:112 -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/forms.py:127 +#: plinth/modules/tor/forms.py:125 msgid "Specify at least one upstream bridge to use upstream bridges." msgstr "" -#: plinth/modules/tor/manifest.py:15 +#: plinth/modules/tor/manifest.py:15 plinth/modules/torproxy/manifest.py:14 msgid "Tor Browser" msgstr "" -#: plinth/modules/tor/manifest.py:31 +#: plinth/modules/tor/manifest.py:31 plinth/modules/torproxy/manifest.py:30 msgid "Orbot: Proxy with Tor" msgstr "" @@ -6168,16 +6164,54 @@ msgstr "" msgid "Ports" msgstr "" -#: plinth/modules/tor/views.py:53 +#: plinth/modules/tor/views.py:53 plinth/modules/torproxy/views.py:51 msgid "Updating configuration" msgstr "" -#: plinth/modules/tor/views.py:70 +#: plinth/modules/tor/views.py:70 plinth/modules/torproxy/views.py:68 #, fuzzy, python-brace-format #| msgid "Error installing application: {error}" msgid "Error configuring app: {error}" msgstr "خطأ أثناء تثبيت التطبيق: {error}" +#: plinth/modules/torproxy/__init__.py:34 +#, python-brace-format +msgid "" +"This app provides a web proxy on your {box_name} for internal networks on " +"TCP port 9050 using the SOCKS protocol. This can be used by various apps to " +"access the internet via the Tor network. ISP censorship can be circumvented " +"using upstream bridges." +msgstr "" + +#: plinth/modules/torproxy/__init__.py:54 +msgid "Tor Proxy" +msgstr "" + +#: plinth/modules/torproxy/__init__.py:79 +msgid "Tor Socks Proxy" +msgstr "" + +#: plinth/modules/torproxy/__init__.py:138 +#, python-brace-format +msgid "Access URL {url} on tcp{kind} via Tor" +msgstr "" + +#: plinth/modules/torproxy/__init__.py:149 +#, python-brace-format +msgid "Confirm Tor usage at {url} on tcp{kind}" +msgstr "" + +#: plinth/modules/torproxy/forms.py:15 +msgid "Download software packages over Tor" +msgstr "" + +#: plinth/modules/torproxy/forms.py:16 +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/transmission/__init__.py:25 msgid "Transmission is a BitTorrent client with a web interface." msgstr "" @@ -6503,14 +6537,14 @@ msgstr "" msgid "Starting distribution upgrade test." msgstr "" -#: plinth/modules/users/__init__.py:29 +#: plinth/modules/users/__init__.py:30 msgid "" "Create and manage user accounts. These accounts serve as centralized " "authentication mechanism for most apps. Some apps further require a user " "account to be part of a group to authorize the user to access the app." msgstr "" -#: plinth/modules/users/__init__.py:34 +#: plinth/modules/users/__init__.py:35 #, python-brace-format msgid "" "Any user may login to {box_name} web interface to see a list of apps " @@ -6518,19 +6552,29 @@ msgid "" "group may alter apps or system settings." msgstr "" -#: plinth/modules/users/__init__.py:55 +#: plinth/modules/users/__init__.py:56 msgid "Users and Groups" msgstr "" -#: plinth/modules/users/__init__.py:80 +#: plinth/modules/users/__init__.py:81 msgid "Access to all services and system settings" msgstr "" -#: plinth/modules/users/__init__.py:116 +#: plinth/modules/users/__init__.py:124 #, python-brace-format msgid "Check LDAP entry \"{search_item}\"" msgstr "" +#: plinth/modules/users/__init__.py:137 +#, python-brace-format +msgid "Check nslcd config \"{key} {value}\"" +msgstr "" + +#: plinth/modules/users/__init__.py:166 +#, python-brace-format +msgid "Check nsswitch config \"{database}\"" +msgstr "" + #: plinth/modules/users/forms.py:35 msgid "Username is taken or is reserved." msgstr "" @@ -7610,7 +7654,11 @@ msgstr "" msgid "Backup" msgstr "" -#: plinth/templates/toolbar.html:51 plinth/templates/toolbar.html:52 +#: plinth/templates/toolbar.html:53 +msgid "Re-run setup" +msgstr "" + +#: plinth/templates/toolbar.html:59 plinth/templates/toolbar.html:60 #: plinth/templates/uninstall.html:30 #, fuzzy #| msgid "Application installed." @@ -7628,11 +7676,11 @@ msgid "" "installed freshly again." msgstr "" -#: plinth/views.py:239 +#: plinth/views.py:241 msgid "Setting unchanged" msgstr "" -#: plinth/views.py:456 +#: plinth/views.py:478 #, python-brace-format msgid "before uninstall of {app_id}" msgstr "" diff --git a/plinth/locale/ar_SA/LC_MESSAGES/django.po b/plinth/locale/ar_SA/LC_MESSAGES/django.po index 22c50f253..923429572 100644 --- a/plinth/locale/ar_SA/LC_MESSAGES/django.po +++ b/plinth/locale/ar_SA/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-06-19 20:15-0400\n" +"POT-Creation-Date: 2023-07-31 20:04-0400\n" "PO-Revision-Date: 2020-06-10 15:41+0000\n" "Last-Translator: aiman an \n" "Language-Team: Arabic (Saudi Arabia) Tor Project website. For " @@ -6030,55 +6044,48 @@ msgid "" "en\">Tor Browser." msgstr "" -#: plinth/modules/tor/__init__.py:30 -#, python-brace-format +#: plinth/modules/tor/__init__.py:37 msgid "" -"A Tor SOCKS port is available on your {box_name} for internal networks on " -"TCP port 9050." +"This app provides relay services to contribute to Tor network and help " +"others overcome censorship." msgstr "" -#: plinth/modules/tor/__init__.py:48 +#: plinth/modules/tor/__init__.py:40 +#, python-brace-format +msgid "" +"This app provides an onion domain to expose {box_name} services via the Tor " +"network. Using Tor browser, one can access {box_name} from the internet even " +"when using an ISP that limits servers at home." +msgstr "" + +#: plinth/modules/tor/__init__.py:60 msgid "Tor" msgstr "" -#: plinth/modules/tor/__init__.py:65 +#: plinth/modules/tor/__init__.py:76 msgid "Tor Onion Service" msgstr "" -#: plinth/modules/tor/__init__.py:69 -msgid "Tor Socks Proxy" -msgstr "" - -#: plinth/modules/tor/__init__.py:73 +#: plinth/modules/tor/__init__.py:80 msgid "Tor Bridge Relay" msgstr "" -#: plinth/modules/tor/__init__.py:132 +#: plinth/modules/tor/__init__.py:135 msgid "Tor relay port available" msgstr "" -#: plinth/modules/tor/__init__.py:143 +#: plinth/modules/tor/__init__.py:146 msgid "Obfs3 transport registered" msgstr "" -#: plinth/modules/tor/__init__.py:153 +#: plinth/modules/tor/__init__.py:156 msgid "Obfs4 transport registered" msgstr "" -#: plinth/modules/tor/__init__.py:165 +#: plinth/modules/tor/__init__.py:168 msgid "Onion service is version 3" msgstr "" -#: plinth/modules/tor/__init__.py:242 -#, python-brace-format -msgid "Access URL {url} on tcp{kind} via Tor" -msgstr "" - -#: plinth/modules/tor/__init__.py:253 -#, python-brace-format -msgid "Confirm Tor usage at {url} on tcp{kind}" -msgstr "" - #: plinth/modules/tor/forms.py:33 msgid "" "Enter a valid bridge with this format: [transport] IP:ORPort [fingerprint]" @@ -6106,11 +6113,11 @@ msgid "" "here. Currently supported transports are none, obfs3, obfs4 and scamblesuit." msgstr "" -#: plinth/modules/tor/forms.py:91 +#: plinth/modules/tor/forms.py:95 msgid "Enable Tor relay" msgstr "" -#: plinth/modules/tor/forms.py:92 +#: plinth/modules/tor/forms.py:96 #, python-brace-format msgid "" "When enabled, your {box_name} will run a Tor relay and donate bandwidth to " @@ -6118,22 +6125,22 @@ msgid "" "download bandwidth." msgstr "" -#: plinth/modules/tor/forms.py:97 +#: plinth/modules/tor/forms.py:101 msgid "Enable Tor bridge relay" msgstr "" -#: plinth/modules/tor/forms.py:99 +#: plinth/modules/tor/forms.py:103 msgid "" "When enabled, relay information is published in the Tor bridge database " "instead of public Tor relay database making it harder to censor this node. " "This helps others circumvent censorship." msgstr "" -#: plinth/modules/tor/forms.py:104 +#: plinth/modules/tor/forms.py:108 msgid "Enable Tor Onion Service" msgstr "" -#: plinth/modules/tor/forms.py:106 +#: plinth/modules/tor/forms.py:110 #, python-brace-format msgid "" "An onion service will allow {box_name} to provide selected services (such as " @@ -6141,26 +6148,15 @@ msgid "" "anonymity yet." msgstr "" -#: plinth/modules/tor/forms.py:111 -msgid "Download software packages over Tor" -msgstr "" - -#: plinth/modules/tor/forms.py:112 -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/forms.py:127 +#: plinth/modules/tor/forms.py:125 msgid "Specify at least one upstream bridge to use upstream bridges." msgstr "" -#: plinth/modules/tor/manifest.py:15 +#: plinth/modules/tor/manifest.py:15 plinth/modules/torproxy/manifest.py:14 msgid "Tor Browser" msgstr "" -#: plinth/modules/tor/manifest.py:31 +#: plinth/modules/tor/manifest.py:31 plinth/modules/torproxy/manifest.py:30 msgid "Orbot: Proxy with Tor" msgstr "" @@ -6172,16 +6168,54 @@ msgstr "" msgid "Ports" msgstr "" -#: plinth/modules/tor/views.py:53 +#: plinth/modules/tor/views.py:53 plinth/modules/torproxy/views.py:51 msgid "Updating configuration" msgstr "" -#: plinth/modules/tor/views.py:70 +#: plinth/modules/tor/views.py:70 plinth/modules/torproxy/views.py:68 #, fuzzy, python-brace-format #| msgid "Error installing application: {error}" msgid "Error configuring app: {error}" msgstr "خطأ في تثبيت التطبيق:{error}" +#: plinth/modules/torproxy/__init__.py:34 +#, python-brace-format +msgid "" +"This app provides a web proxy on your {box_name} for internal networks on " +"TCP port 9050 using the SOCKS protocol. This can be used by various apps to " +"access the internet via the Tor network. ISP censorship can be circumvented " +"using upstream bridges." +msgstr "" + +#: plinth/modules/torproxy/__init__.py:54 +msgid "Tor Proxy" +msgstr "" + +#: plinth/modules/torproxy/__init__.py:79 +msgid "Tor Socks Proxy" +msgstr "" + +#: plinth/modules/torproxy/__init__.py:138 +#, python-brace-format +msgid "Access URL {url} on tcp{kind} via Tor" +msgstr "" + +#: plinth/modules/torproxy/__init__.py:149 +#, python-brace-format +msgid "Confirm Tor usage at {url} on tcp{kind}" +msgstr "" + +#: plinth/modules/torproxy/forms.py:15 +msgid "Download software packages over Tor" +msgstr "" + +#: plinth/modules/torproxy/forms.py:16 +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/transmission/__init__.py:25 msgid "Transmission is a BitTorrent client with a web interface." msgstr "" @@ -6507,14 +6541,14 @@ msgstr "" msgid "Starting distribution upgrade test." msgstr "" -#: plinth/modules/users/__init__.py:29 +#: plinth/modules/users/__init__.py:30 msgid "" "Create and manage user accounts. These accounts serve as centralized " "authentication mechanism for most apps. Some apps further require a user " "account to be part of a group to authorize the user to access the app." msgstr "" -#: plinth/modules/users/__init__.py:34 +#: plinth/modules/users/__init__.py:35 #, python-brace-format msgid "" "Any user may login to {box_name} web interface to see a list of apps " @@ -6522,19 +6556,29 @@ msgid "" "group may alter apps or system settings." msgstr "" -#: plinth/modules/users/__init__.py:55 +#: plinth/modules/users/__init__.py:56 msgid "Users and Groups" msgstr "" -#: plinth/modules/users/__init__.py:80 +#: plinth/modules/users/__init__.py:81 msgid "Access to all services and system settings" msgstr "" -#: plinth/modules/users/__init__.py:116 +#: plinth/modules/users/__init__.py:124 #, python-brace-format msgid "Check LDAP entry \"{search_item}\"" msgstr "" +#: plinth/modules/users/__init__.py:137 +#, python-brace-format +msgid "Check nslcd config \"{key} {value}\"" +msgstr "" + +#: plinth/modules/users/__init__.py:166 +#, python-brace-format +msgid "Check nsswitch config \"{database}\"" +msgstr "" + #: plinth/modules/users/forms.py:35 msgid "Username is taken or is reserved." msgstr "" @@ -7614,7 +7658,11 @@ msgstr "" msgid "Backup" msgstr "" -#: plinth/templates/toolbar.html:51 plinth/templates/toolbar.html:52 +#: plinth/templates/toolbar.html:53 +msgid "Re-run setup" +msgstr "" + +#: plinth/templates/toolbar.html:59 plinth/templates/toolbar.html:60 #: plinth/templates/uninstall.html:30 #, fuzzy #| msgid "Application installed." @@ -7632,11 +7680,11 @@ msgid "" "installed freshly again." msgstr "" -#: plinth/views.py:239 +#: plinth/views.py:241 msgid "Setting unchanged" msgstr "" -#: plinth/views.py:456 +#: plinth/views.py:478 #, python-brace-format msgid "before uninstall of {app_id}" msgstr "" diff --git a/plinth/locale/bg/LC_MESSAGES/django.po b/plinth/locale/bg/LC_MESSAGES/django.po index 98e00f54f..eaeee03b6 100644 --- a/plinth/locale/bg/LC_MESSAGES/django.po +++ b/plinth/locale/bg/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-06-19 20:15-0400\n" +"POT-Creation-Date: 2023-07-31 20:04-0400\n" "PO-Revision-Date: 2023-04-19 09:52+0000\n" "Last-Translator: 109247019824 \n" "Language-Team: Bulgarian Tor Project website. For " @@ -6319,59 +6333,50 @@ msgid "" "en\">Tor Browser." msgstr "" -#: plinth/modules/tor/__init__.py:30 +#: plinth/modules/tor/__init__.py:37 +msgid "" +"This app provides relay services to contribute to Tor network and help " +"others overcome censorship." +msgstr "" + +#: plinth/modules/tor/__init__.py:40 #, python-brace-format msgid "" -"A Tor SOCKS port is available on your {box_name} for internal networks on " -"TCP port 9050." +"This app provides an onion domain to expose {box_name} services via the Tor " +"network. Using Tor browser, one can access {box_name} from the internet even " +"when using an ISP that limits servers at home." msgstr "" -"На {box_name} е достъпен порт на Tor SOCKS за вътрешни мрежи на порт 9050 от " -"TCP." -#: plinth/modules/tor/__init__.py:48 +#: plinth/modules/tor/__init__.py:60 msgid "Tor" msgstr "Тор" -#: plinth/modules/tor/__init__.py:65 +#: plinth/modules/tor/__init__.py:76 msgid "Tor Onion Service" msgstr "Услуга на Тор Onion" -#: plinth/modules/tor/__init__.py:69 -msgid "Tor Socks Proxy" -msgstr "Прокси сървър на Тор за SOCKS" - -#: plinth/modules/tor/__init__.py:73 +#: plinth/modules/tor/__init__.py:80 msgid "Tor Bridge Relay" msgstr "" -#: plinth/modules/tor/__init__.py:132 +#: plinth/modules/tor/__init__.py:135 msgid "Tor relay port available" msgstr "" -#: plinth/modules/tor/__init__.py:143 +#: plinth/modules/tor/__init__.py:146 msgid "Obfs3 transport registered" msgstr "Транспортът Obfs3 е регистриран" -#: plinth/modules/tor/__init__.py:153 +#: plinth/modules/tor/__init__.py:156 msgid "Obfs4 transport registered" msgstr "Транспортът Obfs4 е регистриран" -#: plinth/modules/tor/__init__.py:165 +#: plinth/modules/tor/__init__.py:168 #, fuzzy #| msgid "Onion Service" msgid "Onion service is version 3" msgstr "Услуга на Onion" -#: plinth/modules/tor/__init__.py:242 -#, python-brace-format -msgid "Access URL {url} on tcp{kind} via Tor" -msgstr "Достъп до {url} по tcp{kind} чрез Тор" - -#: plinth/modules/tor/__init__.py:253 -#, python-brace-format -msgid "Confirm Tor usage at {url} on tcp{kind}" -msgstr "" - #: plinth/modules/tor/forms.py:33 msgid "" "Enter a valid bridge with this format: [transport] IP:ORPort [fingerprint]" @@ -6409,11 +6414,11 @@ msgstr "" "информацията за мостовете тук. Текущо поддържаните транспорти са none, " "obfs3, obfs4 и scamblesuit." -#: plinth/modules/tor/forms.py:91 +#: plinth/modules/tor/forms.py:95 msgid "Enable Tor relay" msgstr "" -#: plinth/modules/tor/forms.py:92 +#: plinth/modules/tor/forms.py:96 #, python-brace-format msgid "" "When enabled, your {box_name} will run a Tor relay and donate bandwidth to " @@ -6424,11 +6429,11 @@ msgstr "" "част от пропускателната способност. Направете го ако разполагате с ширина на " "канала по-голяма от 2Мбит/сек." -#: plinth/modules/tor/forms.py:97 +#: plinth/modules/tor/forms.py:101 msgid "Enable Tor bridge relay" msgstr "" -#: plinth/modules/tor/forms.py:99 +#: plinth/modules/tor/forms.py:103 #, fuzzy msgid "" "When enabled, relay information is published in the Tor bridge database " @@ -6436,13 +6441,13 @@ msgid "" "This helps others circumvent censorship." msgstr "Когато е отметнато," -#: plinth/modules/tor/forms.py:104 +#: plinth/modules/tor/forms.py:108 #, fuzzy #| msgid "Enable Tor Hidden Service" msgid "Enable Tor Onion Service" msgstr "Включване на скритата услуга на Тор" -#: plinth/modules/tor/forms.py:106 +#: plinth/modules/tor/forms.py:110 #, fuzzy, python-brace-format #| msgid "" #| "A hidden service will allow {box_name} to provide selected services (such " @@ -6457,29 +6462,15 @@ msgstr "" "(като енциклопедия или бързи съобщения) без да разкрива местоположението си. " "Не използвайте, за да криете самоличността си, все още." -#: plinth/modules/tor/forms.py:111 -msgid "Download software packages over Tor" -msgstr "Изтегляне на софтуерните пакети през Тор" - -#: plinth/modules/tor/forms.py:112 -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/forms.py:127 +#: plinth/modules/tor/forms.py:125 msgid "Specify at least one upstream bridge to use upstream bridges." msgstr "" -#: plinth/modules/tor/manifest.py:15 +#: plinth/modules/tor/manifest.py:15 plinth/modules/torproxy/manifest.py:14 msgid "Tor Browser" msgstr "Четецът Тор" -#: plinth/modules/tor/manifest.py:31 +#: plinth/modules/tor/manifest.py:31 plinth/modules/torproxy/manifest.py:30 msgid "Orbot: Proxy with Tor" msgstr "Орбот: Прокси с Тор" @@ -6491,15 +6482,58 @@ msgstr "Услуга на Onion" msgid "Ports" msgstr "Портове" -#: plinth/modules/tor/views.py:53 +#: plinth/modules/tor/views.py:53 plinth/modules/torproxy/views.py:51 msgid "Updating configuration" msgstr "Настройките са променени" -#: plinth/modules/tor/views.py:70 +#: plinth/modules/tor/views.py:70 plinth/modules/torproxy/views.py:68 #, python-brace-format msgid "Error configuring app: {error}" msgstr "Грешка при настройка на приложението: {error}" +#: plinth/modules/torproxy/__init__.py:34 +#, python-brace-format +msgid "" +"This app provides a web proxy on your {box_name} for internal networks on " +"TCP port 9050 using the SOCKS protocol. This can be used by various apps to " +"access the internet via the Tor network. ISP censorship can be circumvented " +"using upstream bridges." +msgstr "" + +#: plinth/modules/torproxy/__init__.py:54 +#, fuzzy +#| msgid "Tor Socks Proxy" +msgid "Tor Proxy" +msgstr "Прокси сървър на Тор за SOCKS" + +#: plinth/modules/torproxy/__init__.py:79 +msgid "Tor Socks Proxy" +msgstr "Прокси сървър на Тор за SOCKS" + +#: plinth/modules/torproxy/__init__.py:138 +#, python-brace-format +msgid "Access URL {url} on tcp{kind} via Tor" +msgstr "Достъп до {url} по tcp{kind} чрез Тор" + +#: plinth/modules/torproxy/__init__.py:149 +#, python-brace-format +msgid "Confirm Tor usage at {url} on tcp{kind}" +msgstr "" + +#: plinth/modules/torproxy/forms.py:15 +msgid "Download software packages over Tor" +msgstr "Изтегляне на софтуерните пакети през Тор" + +#: plinth/modules/torproxy/forms.py:16 +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/transmission/__init__.py:25 msgid "Transmission is a BitTorrent client with a web interface." msgstr "" @@ -6868,7 +6902,7 @@ msgstr "Честото обновяване на възможности е вк msgid "Starting distribution upgrade test." msgstr "Начало на опит за обновяване на дистрибуцията." -#: plinth/modules/users/__init__.py:29 +#: plinth/modules/users/__init__.py:30 msgid "" "Create and manage user accounts. These accounts serve as centralized " "authentication mechanism for most apps. Some apps further require a user " @@ -6879,7 +6913,7 @@ msgstr "" "получи достъп, някои приложения още имат изискване потребителският профил да " "бъде част от определена група." -#: plinth/modules/users/__init__.py:34 +#: plinth/modules/users/__init__.py:35 #, python-brace-format msgid "" "Any user may login to {box_name} web interface to see a list of apps " @@ -6891,19 +6925,29 @@ msgstr "" "администратори могат да променят приложенията и настройките на " "системата." -#: plinth/modules/users/__init__.py:55 +#: plinth/modules/users/__init__.py:56 msgid "Users and Groups" msgstr "Потребители и групи" -#: plinth/modules/users/__init__.py:80 +#: plinth/modules/users/__init__.py:81 msgid "Access to all services and system settings" msgstr "Достъп до всички услуги и системни настройки" -#: plinth/modules/users/__init__.py:116 +#: plinth/modules/users/__init__.py:124 #, python-brace-format msgid "Check LDAP entry \"{search_item}\"" msgstr "Проверете записа на LDAP „{search_item}“" +#: plinth/modules/users/__init__.py:137 +#, python-brace-format +msgid "Check nslcd config \"{key} {value}\"" +msgstr "" + +#: plinth/modules/users/__init__.py:166 +#, python-brace-format +msgid "Check nsswitch config \"{database}\"" +msgstr "" + #: plinth/modules/users/forms.py:35 msgid "Username is taken or is reserved." msgstr "Потребителското име е заето." @@ -8002,7 +8046,11 @@ msgstr "Обновяване" msgid "Backup" msgstr "Резервни копия" -#: plinth/templates/toolbar.html:51 plinth/templates/toolbar.html:52 +#: plinth/templates/toolbar.html:53 +msgid "Re-run setup" +msgstr "" + +#: plinth/templates/toolbar.html:59 plinth/templates/toolbar.html:60 #: plinth/templates/uninstall.html:30 msgid "Uninstall" msgstr "Премахване" @@ -8020,11 +8068,11 @@ msgstr "" "Всички данни и настройки на приложението ще бъдат загубени. Приложението " "може да бъде инсталирано отново." -#: plinth/views.py:239 +#: plinth/views.py:241 msgid "Setting unchanged" msgstr "Настройките не са променени" -#: plinth/views.py:456 +#: plinth/views.py:478 #, python-brace-format msgid "before uninstall of {app_id}" msgstr "преди премахване на {app_id}" @@ -8033,6 +8081,14 @@ msgstr "преди премахване на {app_id}" msgid "Gujarati" msgstr "Гуджарати" +#, python-brace-format +#~ msgid "" +#~ "A Tor SOCKS port is available on your {box_name} for internal networks on " +#~ "TCP port 9050." +#~ msgstr "" +#~ "На {box_name} е достъпен порт на Tor SOCKS за вътрешни мрежи на порт 9050 " +#~ "от TCP." + #, python-brace-format #~ msgid "" #~ "When enabled, text box for server input is removed from login page and " diff --git a/plinth/locale/bn/LC_MESSAGES/django.po b/plinth/locale/bn/LC_MESSAGES/django.po index c394ea83c..a0d4c7fca 100644 --- a/plinth/locale/bn/LC_MESSAGES/django.po +++ b/plinth/locale/bn/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-06-19 20:15-0400\n" +"POT-Creation-Date: 2023-07-31 20:04-0400\n" "PO-Revision-Date: 2021-06-16 07:33+0000\n" "Last-Translator: Oymate \n" "Language-Team: Bengali Tor Project website. For " @@ -6044,55 +6058,48 @@ msgid "" "en\">Tor Browser." msgstr "" -#: plinth/modules/tor/__init__.py:30 -#, python-brace-format +#: plinth/modules/tor/__init__.py:37 msgid "" -"A Tor SOCKS port is available on your {box_name} for internal networks on " -"TCP port 9050." +"This app provides relay services to contribute to Tor network and help " +"others overcome censorship." msgstr "" -#: plinth/modules/tor/__init__.py:48 +#: plinth/modules/tor/__init__.py:40 +#, python-brace-format +msgid "" +"This app provides an onion domain to expose {box_name} services via the Tor " +"network. Using Tor browser, one can access {box_name} from the internet even " +"when using an ISP that limits servers at home." +msgstr "" + +#: plinth/modules/tor/__init__.py:60 msgid "Tor" msgstr "" -#: plinth/modules/tor/__init__.py:65 +#: plinth/modules/tor/__init__.py:76 msgid "Tor Onion Service" msgstr "" -#: plinth/modules/tor/__init__.py:69 -msgid "Tor Socks Proxy" -msgstr "" - -#: plinth/modules/tor/__init__.py:73 +#: plinth/modules/tor/__init__.py:80 msgid "Tor Bridge Relay" msgstr "" -#: plinth/modules/tor/__init__.py:132 +#: plinth/modules/tor/__init__.py:135 msgid "Tor relay port available" msgstr "" -#: plinth/modules/tor/__init__.py:143 +#: plinth/modules/tor/__init__.py:146 msgid "Obfs3 transport registered" msgstr "" -#: plinth/modules/tor/__init__.py:153 +#: plinth/modules/tor/__init__.py:156 msgid "Obfs4 transport registered" msgstr "" -#: plinth/modules/tor/__init__.py:165 +#: plinth/modules/tor/__init__.py:168 msgid "Onion service is version 3" msgstr "" -#: plinth/modules/tor/__init__.py:242 -#, python-brace-format -msgid "Access URL {url} on tcp{kind} via Tor" -msgstr "" - -#: plinth/modules/tor/__init__.py:253 -#, python-brace-format -msgid "Confirm Tor usage at {url} on tcp{kind}" -msgstr "" - #: plinth/modules/tor/forms.py:33 msgid "" "Enter a valid bridge with this format: [transport] IP:ORPort [fingerprint]" @@ -6120,11 +6127,11 @@ msgid "" "here. Currently supported transports are none, obfs3, obfs4 and scamblesuit." msgstr "" -#: plinth/modules/tor/forms.py:91 +#: plinth/modules/tor/forms.py:95 msgid "Enable Tor relay" msgstr "" -#: plinth/modules/tor/forms.py:92 +#: plinth/modules/tor/forms.py:96 #, python-brace-format msgid "" "When enabled, your {box_name} will run a Tor relay and donate bandwidth to " @@ -6132,22 +6139,22 @@ msgid "" "download bandwidth." msgstr "" -#: plinth/modules/tor/forms.py:97 +#: plinth/modules/tor/forms.py:101 msgid "Enable Tor bridge relay" msgstr "" -#: plinth/modules/tor/forms.py:99 +#: plinth/modules/tor/forms.py:103 msgid "" "When enabled, relay information is published in the Tor bridge database " "instead of public Tor relay database making it harder to censor this node. " "This helps others circumvent censorship." msgstr "" -#: plinth/modules/tor/forms.py:104 +#: plinth/modules/tor/forms.py:108 msgid "Enable Tor Onion Service" msgstr "" -#: plinth/modules/tor/forms.py:106 +#: plinth/modules/tor/forms.py:110 #, python-brace-format msgid "" "An onion service will allow {box_name} to provide selected services (such as " @@ -6155,26 +6162,15 @@ msgid "" "anonymity yet." msgstr "" -#: plinth/modules/tor/forms.py:111 -msgid "Download software packages over Tor" -msgstr "" - -#: plinth/modules/tor/forms.py:112 -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/forms.py:127 +#: plinth/modules/tor/forms.py:125 msgid "Specify at least one upstream bridge to use upstream bridges." msgstr "" -#: plinth/modules/tor/manifest.py:15 +#: plinth/modules/tor/manifest.py:15 plinth/modules/torproxy/manifest.py:14 msgid "Tor Browser" msgstr "" -#: plinth/modules/tor/manifest.py:31 +#: plinth/modules/tor/manifest.py:31 plinth/modules/torproxy/manifest.py:30 msgid "Orbot: Proxy with Tor" msgstr "" @@ -6186,17 +6182,55 @@ msgstr "" msgid "Ports" msgstr "" -#: plinth/modules/tor/views.py:53 +#: plinth/modules/tor/views.py:53 plinth/modules/torproxy/views.py:51 #, fuzzy #| msgid "Configuration" msgid "Updating configuration" msgstr "পছন্দসমূহ" -#: plinth/modules/tor/views.py:70 +#: plinth/modules/tor/views.py:70 plinth/modules/torproxy/views.py:68 #, python-brace-format msgid "Error configuring app: {error}" msgstr "" +#: plinth/modules/torproxy/__init__.py:34 +#, python-brace-format +msgid "" +"This app provides a web proxy on your {box_name} for internal networks on " +"TCP port 9050 using the SOCKS protocol. This can be used by various apps to " +"access the internet via the Tor network. ISP censorship can be circumvented " +"using upstream bridges." +msgstr "" + +#: plinth/modules/torproxy/__init__.py:54 +msgid "Tor Proxy" +msgstr "" + +#: plinth/modules/torproxy/__init__.py:79 +msgid "Tor Socks Proxy" +msgstr "" + +#: plinth/modules/torproxy/__init__.py:138 +#, python-brace-format +msgid "Access URL {url} on tcp{kind} via Tor" +msgstr "" + +#: plinth/modules/torproxy/__init__.py:149 +#, python-brace-format +msgid "Confirm Tor usage at {url} on tcp{kind}" +msgstr "" + +#: plinth/modules/torproxy/forms.py:15 +msgid "Download software packages over Tor" +msgstr "" + +#: plinth/modules/torproxy/forms.py:16 +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/transmission/__init__.py:25 msgid "Transmission is a BitTorrent client with a web interface." msgstr "" @@ -6522,14 +6556,14 @@ msgstr "" msgid "Starting distribution upgrade test." msgstr "" -#: plinth/modules/users/__init__.py:29 +#: plinth/modules/users/__init__.py:30 msgid "" "Create and manage user accounts. These accounts serve as centralized " "authentication mechanism for most apps. Some apps further require a user " "account to be part of a group to authorize the user to access the app." msgstr "" -#: plinth/modules/users/__init__.py:34 +#: plinth/modules/users/__init__.py:35 #, python-brace-format msgid "" "Any user may login to {box_name} web interface to see a list of apps " @@ -6537,19 +6571,29 @@ msgid "" "group may alter apps or system settings." msgstr "" -#: plinth/modules/users/__init__.py:55 +#: plinth/modules/users/__init__.py:56 msgid "Users and Groups" msgstr "" -#: plinth/modules/users/__init__.py:80 +#: plinth/modules/users/__init__.py:81 msgid "Access to all services and system settings" msgstr "" -#: plinth/modules/users/__init__.py:116 +#: plinth/modules/users/__init__.py:124 #, python-brace-format msgid "Check LDAP entry \"{search_item}\"" msgstr "" +#: plinth/modules/users/__init__.py:137 +#, python-brace-format +msgid "Check nslcd config \"{key} {value}\"" +msgstr "" + +#: plinth/modules/users/__init__.py:166 +#, python-brace-format +msgid "Check nsswitch config \"{database}\"" +msgstr "" + #: plinth/modules/users/forms.py:35 msgid "Username is taken or is reserved." msgstr "" @@ -7619,7 +7663,11 @@ msgstr "" msgid "Backup" msgstr "" -#: plinth/templates/toolbar.html:51 plinth/templates/toolbar.html:52 +#: plinth/templates/toolbar.html:53 +msgid "Re-run setup" +msgstr "" + +#: plinth/templates/toolbar.html:59 plinth/templates/toolbar.html:60 #: plinth/templates/uninstall.html:30 msgid "Uninstall" msgstr "" @@ -7635,11 +7683,11 @@ msgid "" "installed freshly again." msgstr "" -#: plinth/views.py:239 +#: plinth/views.py:241 msgid "Setting unchanged" msgstr "" -#: plinth/views.py:456 +#: plinth/views.py:478 #, python-brace-format msgid "before uninstall of {app_id}" msgstr "" diff --git a/plinth/locale/cs/LC_MESSAGES/django.po b/plinth/locale/cs/LC_MESSAGES/django.po index 91069c075..fadd5937f 100644 --- a/plinth/locale/cs/LC_MESSAGES/django.po +++ b/plinth/locale/cs/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-06-19 20:15-0400\n" +"POT-Creation-Date: 2023-07-31 20:04-0400\n" "PO-Revision-Date: 2023-06-14 07:51+0000\n" "Last-Translator: Jiří Podhorecký \n" "Language-Team: Czech Tor Project website. For " @@ -6889,57 +6905,48 @@ msgstr "" "prohlížeč Tor Browser." -#: plinth/modules/tor/__init__.py:30 +#: plinth/modules/tor/__init__.py:37 +msgid "" +"This app provides relay services to contribute to Tor network and help " +"others overcome censorship." +msgstr "" + +#: plinth/modules/tor/__init__.py:40 #, python-brace-format msgid "" -"A Tor SOCKS port is available on your {box_name} for internal networks on " -"TCP port 9050." +"This app provides an onion domain to expose {box_name} services via the Tor " +"network. Using Tor browser, one can access {box_name} from the internet even " +"when using an ISP that limits servers at home." msgstr "" -"Tor SOCKS port je k dispozici na vašem {box_name} pro interní síť na TCP " -"portu 9050." -#: plinth/modules/tor/__init__.py:48 +#: plinth/modules/tor/__init__.py:60 msgid "Tor" msgstr "Tor" -#: plinth/modules/tor/__init__.py:65 +#: plinth/modules/tor/__init__.py:76 msgid "Tor Onion Service" msgstr "Tor Onion Service" -#: plinth/modules/tor/__init__.py:69 -msgid "Tor Socks Proxy" -msgstr "Tor Socks proxy" - -#: plinth/modules/tor/__init__.py:73 +#: plinth/modules/tor/__init__.py:80 msgid "Tor Bridge Relay" msgstr "Předávájící Tor most" -#: plinth/modules/tor/__init__.py:132 +#: plinth/modules/tor/__init__.py:135 msgid "Tor relay port available" msgstr "Port Tor předávání k dispozici" -#: plinth/modules/tor/__init__.py:143 +#: plinth/modules/tor/__init__.py:146 msgid "Obfs3 transport registered" msgstr "Obfs3 transport zaregistrován" -#: plinth/modules/tor/__init__.py:153 +#: plinth/modules/tor/__init__.py:156 msgid "Obfs4 transport registered" msgstr "Obfs4 transport zaregistrován" -#: plinth/modules/tor/__init__.py:165 +#: plinth/modules/tor/__init__.py:168 msgid "Onion service is version 3" msgstr "Onion service je verze 3" -#: plinth/modules/tor/__init__.py:242 -#, python-brace-format -msgid "Access URL {url} on tcp{kind} via Tor" -msgstr "Přistoupit k URL adrese {url} na tcp{kind} prostřednictvím Tor" - -#: plinth/modules/tor/__init__.py:253 -#, python-brace-format -msgid "Confirm Tor usage at {url} on tcp{kind}" -msgstr "Potvrďte použití Tor na adrese {url} na tcp{kind}" - #: plinth/modules/tor/forms.py:33 msgid "" "Enter a valid bridge with this format: [transport] IP:ORPort [fingerprint]" @@ -6974,11 +6981,11 @@ msgstr "" "\">https://bridges.torproject.org/ a zkopírovat informace odtud. V " "současnosti podporované transporty jsou none, obfs3, obfs4 a scamblesuit." -#: plinth/modules/tor/forms.py:91 +#: plinth/modules/tor/forms.py:95 msgid "Enable Tor relay" msgstr "Zapnout Tor předávání" -#: plinth/modules/tor/forms.py:92 +#: plinth/modules/tor/forms.py:96 #, python-brace-format msgid "" "When enabled, your {box_name} will run a Tor relay and donate bandwidth to " @@ -6989,11 +6996,11 @@ msgstr "" "přenosové pásmo pro Tor síť. Toto udělejte pokud má přípojka rychlost více " "než 2 megabity/s v obou směrech." -#: plinth/modules/tor/forms.py:97 +#: plinth/modules/tor/forms.py:101 msgid "Enable Tor bridge relay" msgstr "Zapnout předávání Tor mostu" -#: plinth/modules/tor/forms.py:99 +#: plinth/modules/tor/forms.py:103 msgid "" "When enabled, relay information is published in the Tor bridge database " "instead of public Tor relay database making it harder to censor this node. " @@ -7003,11 +7010,11 @@ msgstr "" "namísto veřejné databázi Tor předávání, čímž je těžší tento uzel cenzurovat. " "Toto ostatním pomůže obcházet cenzuru." -#: plinth/modules/tor/forms.py:104 +#: plinth/modules/tor/forms.py:108 msgid "Enable Tor Onion Service" msgstr "Povolit službu Tor Onion" -#: plinth/modules/tor/forms.py:106 +#: plinth/modules/tor/forms.py:110 #, python-brace-format msgid "" "An onion service will allow {box_name} to provide selected services (such as " @@ -7018,29 +7025,15 @@ msgstr "" "wiki nebo chat), aniž by odhalila svou polohu. Pro silnou anonymitu to zatím " "nepoužívejte." -#: plinth/modules/tor/forms.py:111 -msgid "Download software packages over Tor" -msgstr "Stahovat balíčky software prostřednictvím sítě Tor" - -#: plinth/modules/tor/forms.py:112 -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 "" -"Když je zapnuto, software pro instalaci a aktualizace bude stahováno přes " -"síť Tor. To zlepší soukromí a zabezpečení při stahování software (ale je " -"pomalejší)." - -#: plinth/modules/tor/forms.py:127 +#: plinth/modules/tor/forms.py:125 msgid "Specify at least one upstream bridge to use upstream bridges." msgstr "Pro používání nadřazených mostů je třeba určit alespoň jeden takový." -#: plinth/modules/tor/manifest.py:15 +#: plinth/modules/tor/manifest.py:15 plinth/modules/torproxy/manifest.py:14 msgid "Tor Browser" msgstr "Tor prohlížeč" -#: plinth/modules/tor/manifest.py:31 +#: plinth/modules/tor/manifest.py:31 plinth/modules/torproxy/manifest.py:30 msgid "Orbot: Proxy with Tor" msgstr "Orbot: proxy s Tor" @@ -7052,15 +7045,58 @@ msgstr "Onion služba" msgid "Ports" msgstr "Porty" -#: plinth/modules/tor/views.py:53 +#: plinth/modules/tor/views.py:53 plinth/modules/torproxy/views.py:51 msgid "Updating configuration" msgstr "Aktualizace konfigurace" -#: plinth/modules/tor/views.py:70 +#: plinth/modules/tor/views.py:70 plinth/modules/torproxy/views.py:68 #, python-brace-format msgid "Error configuring app: {error}" msgstr "Chyba při konfiguraci aplikace: {error}" +#: plinth/modules/torproxy/__init__.py:34 +#, python-brace-format +msgid "" +"This app provides a web proxy on your {box_name} for internal networks on " +"TCP port 9050 using the SOCKS protocol. This can be used by various apps to " +"access the internet via the Tor network. ISP censorship can be circumvented " +"using upstream bridges." +msgstr "" + +#: plinth/modules/torproxy/__init__.py:54 +#, fuzzy +#| msgid "Tor Socks Proxy" +msgid "Tor Proxy" +msgstr "Tor Socks proxy" + +#: plinth/modules/torproxy/__init__.py:79 +msgid "Tor Socks Proxy" +msgstr "Tor Socks proxy" + +#: plinth/modules/torproxy/__init__.py:138 +#, python-brace-format +msgid "Access URL {url} on tcp{kind} via Tor" +msgstr "Přistoupit k URL adrese {url} na tcp{kind} prostřednictvím Tor" + +#: plinth/modules/torproxy/__init__.py:149 +#, python-brace-format +msgid "Confirm Tor usage at {url} on tcp{kind}" +msgstr "Potvrďte použití Tor na adrese {url} na tcp{kind}" + +#: plinth/modules/torproxy/forms.py:15 +msgid "Download software packages over Tor" +msgstr "Stahovat balíčky software prostřednictvím sítě Tor" + +#: plinth/modules/torproxy/forms.py:16 +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 "" +"Když je zapnuto, software pro instalaci a aktualizace bude stahováno přes " +"síť Tor. To zlepší soukromí a zabezpečení při stahování software (ale je " +"pomalejší)." + #: plinth/modules/transmission/__init__.py:25 msgid "Transmission is a BitTorrent client with a web interface." msgstr "" @@ -7443,7 +7479,7 @@ msgstr "Aktivovány časté aktualizace funkcí." msgid "Starting distribution upgrade test." msgstr "Zahájení testu aktualizace distribuce." -#: plinth/modules/users/__init__.py:29 +#: plinth/modules/users/__init__.py:30 msgid "" "Create and manage user accounts. These accounts serve as centralized " "authentication mechanism for most apps. Some apps further require a user " @@ -7454,7 +7490,7 @@ msgstr "" "aby uživatelský účet byl součástí skupiny, která uživatele opravňuje k " "přístupu k aplikaci." -#: plinth/modules/users/__init__.py:34 +#: plinth/modules/users/__init__.py:35 #, python-brace-format msgid "" "Any user may login to {box_name} web interface to see a list of apps " @@ -7466,19 +7502,29 @@ msgstr "" "nebo nastavení systému však mohou měnit pouze uživatelé skupiny admin." -#: plinth/modules/users/__init__.py:55 +#: plinth/modules/users/__init__.py:56 msgid "Users and Groups" msgstr "Uživatelé a skupiny" -#: plinth/modules/users/__init__.py:80 +#: plinth/modules/users/__init__.py:81 msgid "Access to all services and system settings" msgstr "Přístup ke všem službám a nastavení systému" -#: plinth/modules/users/__init__.py:116 +#: plinth/modules/users/__init__.py:124 #, python-brace-format msgid "Check LDAP entry \"{search_item}\"" msgstr "Zkontrolujte LDAP položku „{search_item}“" +#: plinth/modules/users/__init__.py:137 +#, python-brace-format +msgid "Check nslcd config \"{key} {value}\"" +msgstr "" + +#: plinth/modules/users/__init__.py:166 +#, python-brace-format +msgid "Check nsswitch config \"{database}\"" +msgstr "" + #: plinth/modules/users/forms.py:35 msgid "Username is taken or is reserved." msgstr "" @@ -8665,7 +8711,13 @@ msgstr "Aktualizovat" msgid "Backup" msgstr "Záloha" -#: plinth/templates/toolbar.html:51 plinth/templates/toolbar.html:52 +#: plinth/templates/toolbar.html:53 +#, fuzzy +#| msgid "Start setup" +msgid "Re-run setup" +msgstr "Zahájit nastavování" + +#: plinth/templates/toolbar.html:59 plinth/templates/toolbar.html:60 #: plinth/templates/uninstall.html:30 msgid "Uninstall" msgstr "Odinstalace" @@ -8683,11 +8735,11 @@ msgstr "" "Všechna data a konfigurace aplikace budou trvale ztraceny. Aplikaci lze " "nainstalovat znovu." -#: plinth/views.py:239 +#: plinth/views.py:241 msgid "Setting unchanged" msgstr "Nastavení se nezměnila" -#: plinth/views.py:456 +#: plinth/views.py:478 #, python-brace-format msgid "before uninstall of {app_id}" msgstr "před odinstalací {app_id}" @@ -8696,6 +8748,14 @@ msgstr "před odinstalací {app_id}" msgid "Gujarati" msgstr "gudžarátština" +#, python-brace-format +#~ msgid "" +#~ "A Tor SOCKS port is available on your {box_name} for internal networks on " +#~ "TCP port 9050." +#~ msgstr "" +#~ "Tor SOCKS port je k dispozici na vašem {box_name} pro interní síť na TCP " +#~ "portu 9050." + #, python-brace-format #~ msgid "" #~ "When enabled, text box for server input is removed from login page and " @@ -9493,9 +9553,6 @@ msgstr "gudžarátština" #~ "opravdu dlouhý čas. V závislosti na rychlosti vašeho %(box_name)s to může " #~ "trvat i hodiny. Pokud je nastavování přerušeno, je možné ho spustit znovu." -#~ msgid "Start setup" -#~ msgstr "Zahájit nastavování" - #~ msgid "OpenVPN setup is running" #~ msgstr "Nastavování OpenVPN je spuštěné" @@ -10147,9 +10204,6 @@ msgstr "gudžarátština" #~ msgid "Error setting default app: {exception}" #~ msgstr "Chyba při nastavování výchozí aplikace: {exception}" -#~ msgid "Default app set" -#~ msgstr "Výchozí sada aplikací" - #~ msgid "Abort" #~ msgstr "Přerušit" diff --git a/plinth/locale/da/LC_MESSAGES/django.po b/plinth/locale/da/LC_MESSAGES/django.po index b94b906d2..427daf17c 100644 --- a/plinth/locale/da/LC_MESSAGES/django.po +++ b/plinth/locale/da/LC_MESSAGES/django.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: FreedomBox UI\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-06-19 20:15-0400\n" +"POT-Creation-Date: 2023-07-31 20:04-0400\n" "PO-Revision-Date: 2022-09-14 17:19+0000\n" "Last-Translator: ikmaak \n" "Language-Team: Danish Tor Project website. For " @@ -6949,60 +6965,52 @@ msgstr "" "du bruger Tor-browseren." -#: plinth/modules/tor/__init__.py:30 -#, fuzzy, python-brace-format -#| msgid "A Tor SOCKS port is available on your %(box_name)s on TCP port 9050." +#: plinth/modules/tor/__init__.py:37 msgid "" -"A Tor SOCKS port is available on your {box_name} for internal networks on " -"TCP port 9050." -msgstr "En Tor SOCKS-port er tilgængelig på din %(box_name)s TCP-port 9050." +"This app provides relay services to contribute to Tor network and help " +"others overcome censorship." +msgstr "" -#: plinth/modules/tor/__init__.py:48 +#: plinth/modules/tor/__init__.py:40 +#, python-brace-format +msgid "" +"This app provides an onion domain to expose {box_name} services via the Tor " +"network. Using Tor browser, one can access {box_name} from the internet even " +"when using an ISP that limits servers at home." +msgstr "" + +#: plinth/modules/tor/__init__.py:60 msgid "Tor" msgstr "" -#: plinth/modules/tor/__init__.py:65 +#: plinth/modules/tor/__init__.py:76 #, fuzzy #| msgid "Tor Hidden Service" msgid "Tor Onion Service" msgstr "Tor Skjult Tjeneste" -#: plinth/modules/tor/__init__.py:69 -msgid "Tor Socks Proxy" -msgstr "" - -#: plinth/modules/tor/__init__.py:73 +#: plinth/modules/tor/__init__.py:80 msgid "Tor Bridge Relay" msgstr "Tor Bridge Relay" -#: plinth/modules/tor/__init__.py:132 +#: plinth/modules/tor/__init__.py:135 msgid "Tor relay port available" msgstr "Tor videresendelsesport tilgængelig" -#: plinth/modules/tor/__init__.py:143 +#: plinth/modules/tor/__init__.py:146 msgid "Obfs3 transport registered" msgstr "Obfs3 transport registreret" -#: plinth/modules/tor/__init__.py:153 +#: plinth/modules/tor/__init__.py:156 msgid "Obfs4 transport registered" msgstr "Obfs4 transport registreret" -#: plinth/modules/tor/__init__.py:165 +#: plinth/modules/tor/__init__.py:168 #, fuzzy #| msgid "Hidden Service" msgid "Onion service is version 3" msgstr "Skjult Tjeneste" -#: plinth/modules/tor/__init__.py:242 -#, 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:253 -#, 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/forms.py:33 msgid "" "Enter a valid bridge with this format: [transport] IP:ORPort [fingerprint]" @@ -7030,13 +7038,13 @@ msgid "" "here. Currently supported transports are none, obfs3, obfs4 and scamblesuit." msgstr "" -#: plinth/modules/tor/forms.py:91 +#: plinth/modules/tor/forms.py:95 #, fuzzy #| msgid "Enable Tor" msgid "Enable Tor relay" msgstr "Aktiver Tor" -#: plinth/modules/tor/forms.py:92 +#: plinth/modules/tor/forms.py:96 #, python-brace-format msgid "" "When enabled, your {box_name} will run a Tor relay and donate bandwidth to " @@ -7044,25 +7052,25 @@ msgid "" "download bandwidth." msgstr "" -#: plinth/modules/tor/forms.py:97 +#: plinth/modules/tor/forms.py:101 #, fuzzy msgid "Enable Tor bridge relay" msgstr "Tor Bridge Relay" -#: plinth/modules/tor/forms.py:99 +#: plinth/modules/tor/forms.py:103 msgid "" "When enabled, relay information is published in the Tor bridge database " "instead of public Tor relay database making it harder to censor this node. " "This helps others circumvent censorship." msgstr "" -#: plinth/modules/tor/forms.py:104 +#: plinth/modules/tor/forms.py:108 #, fuzzy #| msgid "Enable Tor Hidden Service" msgid "Enable Tor Onion Service" msgstr "Aktiver Tor Skjult Tjeneste" -#: plinth/modules/tor/forms.py:106 +#: plinth/modules/tor/forms.py:110 #, fuzzy, python-brace-format #| msgid "" #| "A hidden service will allow {box_name} to provide selected services (such " @@ -7075,29 +7083,15 @@ msgstr "" "En skjult tjeneste tillader {box_name} at levere udvalgte tjenester (såsom " "ownCloud og chat) uden at afsløre sin lokation." -#: plinth/modules/tor/forms.py:111 -msgid "Download software packages over Tor" -msgstr "Hent softwarepakker over Tor" - -#: plinth/modules/tor/forms.py:112 -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/forms.py:127 +#: plinth/modules/tor/forms.py:125 msgid "Specify at least one upstream bridge to use upstream bridges." msgstr "" -#: plinth/modules/tor/manifest.py:15 +#: plinth/modules/tor/manifest.py:15 plinth/modules/torproxy/manifest.py:14 msgid "Tor Browser" msgstr "" -#: plinth/modules/tor/manifest.py:31 +#: plinth/modules/tor/manifest.py:31 plinth/modules/torproxy/manifest.py:30 msgid "Orbot: Proxy with Tor" msgstr "" @@ -7111,18 +7105,61 @@ msgstr "Skjult Tjeneste" msgid "Ports" msgstr "Porte" -#: plinth/modules/tor/views.py:53 +#: plinth/modules/tor/views.py:53 plinth/modules/torproxy/views.py:51 #, fuzzy #| msgid "An error occurred during configuration." msgid "Updating configuration" msgstr "Der opstod en fejl under konfigurationen." -#: plinth/modules/tor/views.py:70 +#: plinth/modules/tor/views.py:70 plinth/modules/torproxy/views.py:68 #, fuzzy, python-brace-format #| msgid "Error installing application: {error}" msgid "Error configuring app: {error}" msgstr "Kunne ikke installere applikation: {error}" +#: plinth/modules/torproxy/__init__.py:34 +#, python-brace-format +msgid "" +"This app provides a web proxy on your {box_name} for internal networks on " +"TCP port 9050 using the SOCKS protocol. This can be used by various apps to " +"access the internet via the Tor network. ISP censorship can be circumvented " +"using upstream bridges." +msgstr "" + +#: plinth/modules/torproxy/__init__.py:54 +#, fuzzy +#| msgid "I2P Proxy" +msgid "Tor Proxy" +msgstr "I2P Proxy" + +#: plinth/modules/torproxy/__init__.py:79 +msgid "Tor Socks Proxy" +msgstr "" + +#: plinth/modules/torproxy/__init__.py:138 +#, 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/torproxy/__init__.py:149 +#, 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/torproxy/forms.py:15 +msgid "Download software packages over Tor" +msgstr "Hent softwarepakker over Tor" + +#: plinth/modules/torproxy/forms.py:16 +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/transmission/__init__.py:25 msgid "Transmission is a BitTorrent client with a web interface." msgstr "" @@ -7519,14 +7556,14 @@ msgstr "" msgid "Starting distribution upgrade test." msgstr "Automatisk opdatering aktiveret" -#: plinth/modules/users/__init__.py:29 +#: plinth/modules/users/__init__.py:30 msgid "" "Create and manage user accounts. These accounts serve as centralized " "authentication mechanism for most apps. Some apps further require a user " "account to be part of a group to authorize the user to access the app." msgstr "" -#: plinth/modules/users/__init__.py:34 +#: plinth/modules/users/__init__.py:35 #, python-brace-format msgid "" "Any user may login to {box_name} web interface to see a list of apps " @@ -7534,19 +7571,29 @@ msgid "" "group may alter apps or system settings." msgstr "" -#: plinth/modules/users/__init__.py:55 +#: plinth/modules/users/__init__.py:56 msgid "Users and Groups" msgstr "Brugere og Grupper" -#: plinth/modules/users/__init__.py:80 +#: plinth/modules/users/__init__.py:81 msgid "Access to all services and system settings" msgstr "" -#: plinth/modules/users/__init__.py:116 +#: plinth/modules/users/__init__.py:124 #, python-brace-format msgid "Check LDAP entry \"{search_item}\"" msgstr "Kontrol af LDAP-konfiguration \"{search_item}\"" +#: plinth/modules/users/__init__.py:137 +#, python-brace-format +msgid "Check nslcd config \"{key} {value}\"" +msgstr "" + +#: plinth/modules/users/__init__.py:166 +#, python-brace-format +msgid "Check nsswitch config \"{database}\"" +msgstr "" + #: plinth/modules/users/forms.py:35 msgid "Username is taken or is reserved." msgstr "" @@ -8772,7 +8819,13 @@ msgstr "Opdater" msgid "Backup" msgstr "Sikkerhedskopiering" -#: plinth/templates/toolbar.html:51 plinth/templates/toolbar.html:52 +#: plinth/templates/toolbar.html:53 +#, fuzzy +#| msgid "Start setup" +msgid "Re-run setup" +msgstr "Start opsætning" + +#: plinth/templates/toolbar.html:59 plinth/templates/toolbar.html:60 #: plinth/templates/uninstall.html:30 #, fuzzy #| msgid "Install" @@ -8791,11 +8844,11 @@ msgid "" "installed freshly again." msgstr "" -#: plinth/views.py:239 +#: plinth/views.py:241 msgid "Setting unchanged" msgstr "Indstilling uændret" -#: plinth/views.py:456 +#: plinth/views.py:478 #, python-brace-format msgid "before uninstall of {app_id}" msgstr "" @@ -8804,6 +8857,14 @@ msgstr "" msgid "Gujarati" msgstr "" +#, fuzzy, python-brace-format +#~| msgid "" +#~| "A Tor SOCKS port is available on your %(box_name)s on TCP port 9050." +#~ msgid "" +#~ "A Tor SOCKS port is available on your {box_name} for internal networks on " +#~ "TCP port 9050." +#~ msgstr "En Tor SOCKS-port er tilgængelig på din %(box_name)s TCP-port 9050." + #~ msgid "ChatSecure" #~ msgstr "ChatSecure" @@ -9432,9 +9493,6 @@ msgstr "" #~ "tager meget lang tid. Afhængig af hvor hurtig din %(box_name)s er, kan " #~ "det tage flere timer. Hvis processen afbrydes kan den blot genstartes." -#~ msgid "Start setup" -#~ msgstr "Start opsætning" - #~ msgid "OpenVPN setup is running" #~ msgstr "OpenVPN-opsætning kører" @@ -9910,11 +9968,6 @@ msgstr "" #~ msgid "Error setting default app: {exception}" #~ msgstr "Kunne ikke sætte sprog: {exception}" -#, fuzzy -#~| msgid "Default" -#~ msgid "Default app set" -#~ msgstr "Standard" - #, fuzzy #~| msgid "NTP client in contact with servers" #~ msgid "chrony client in contact with servers" diff --git a/plinth/locale/de/LC_MESSAGES/django.po b/plinth/locale/de/LC_MESSAGES/django.po index 6da6526b5..c6413698c 100644 --- a/plinth/locale/de/LC_MESSAGES/django.po +++ b/plinth/locale/de/LC_MESSAGES/django.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: FreedomBox UI\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-06-19 20:15-0400\n" +"POT-Creation-Date: 2023-07-31 20:04-0400\n" "PO-Revision-Date: 2023-06-26 16:51+0000\n" "Last-Translator: Ettore Atalan \n" "Language-Team: German Tor Project website. For " @@ -7041,59 +7057,50 @@ msgstr "" "Sie den Tor Browser verwenden." -#: plinth/modules/tor/__init__.py:30 +#: plinth/modules/tor/__init__.py:37 +msgid "" +"This app provides relay services to contribute to Tor network and help " +"others overcome censorship." +msgstr "" + +#: plinth/modules/tor/__init__.py:40 #, python-brace-format msgid "" -"A Tor SOCKS port is available on your {box_name} for internal networks on " -"TCP port 9050." +"This app provides an onion domain to expose {box_name} services via the Tor " +"network. Using Tor browser, one can access {box_name} from the internet even " +"when using an ISP that limits servers at home." msgstr "" -"Tor SOCKS-Port ist auf Ihrer {box_name} für interne Netzwerke auf TCP port " -"9050 verfügbar." -#: plinth/modules/tor/__init__.py:48 +#: plinth/modules/tor/__init__.py:60 msgid "Tor" msgstr "Tor" -#: plinth/modules/tor/__init__.py:65 +#: plinth/modules/tor/__init__.py:76 msgid "Tor Onion Service" msgstr "Tor-Onion-Dienste" -#: plinth/modules/tor/__init__.py:69 -msgid "Tor Socks Proxy" -msgstr "Tor-Socks-Proxy" - -#: plinth/modules/tor/__init__.py:73 +#: plinth/modules/tor/__init__.py:80 msgid "Tor Bridge Relay" msgstr "Tor-Bridge-Relay" -#: plinth/modules/tor/__init__.py:132 +#: plinth/modules/tor/__init__.py:135 msgid "Tor relay port available" msgstr "Tor-Relay-Port ist verfügbar" -#: plinth/modules/tor/__init__.py:143 +#: plinth/modules/tor/__init__.py:146 msgid "Obfs3 transport registered" msgstr "Obfs3-Transport registriert" -#: plinth/modules/tor/__init__.py:153 +#: plinth/modules/tor/__init__.py:156 msgid "Obfs4 transport registered" msgstr "Obfs4-Transport registriert" -#: plinth/modules/tor/__init__.py:165 +#: plinth/modules/tor/__init__.py:168 #, fuzzy #| msgid "Onion Service" msgid "Onion service is version 3" msgstr "Onion-Dienste" -#: plinth/modules/tor/__init__.py:242 -#, 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:253 -#, python-brace-format -msgid "Confirm Tor usage at {url} on tcp{kind}" -msgstr "Tor-Nutzung auf {url} über TCP{kind} bestätigen" - #: plinth/modules/tor/forms.py:33 msgid "" "Enter a valid bridge with this format: [transport] IP:ORPort [fingerprint]" @@ -7131,11 +7138,11 @@ msgstr "" "Informationen von dort kopieren und hier einfügen. Derzeitig unterstützte " "Transports sind „none“, „obfs3“, „obfs4“ und „scamblesuit“." -#: plinth/modules/tor/forms.py:91 +#: plinth/modules/tor/forms.py:95 msgid "Enable Tor relay" msgstr "Tor-Relay einschalten" -#: plinth/modules/tor/forms.py:92 +#: plinth/modules/tor/forms.py:96 #, python-brace-format msgid "" "When enabled, your {box_name} will run a Tor relay and donate bandwidth to " @@ -7147,11 +7154,11 @@ msgstr "" "Upload-Bandbreite zur Verfügung haben, sollten Sie diese Funktion " "aktivieren. (Es verbessert die Anonymisierung)." -#: plinth/modules/tor/forms.py:97 +#: plinth/modules/tor/forms.py:101 msgid "Enable Tor bridge relay" msgstr "Tor-Bridge-Relay aktivieren" -#: plinth/modules/tor/forms.py:99 +#: plinth/modules/tor/forms.py:103 msgid "" "When enabled, relay information is published in the Tor bridge database " "instead of public Tor relay database making it harder to censor this node. " @@ -7161,13 +7168,13 @@ msgstr "" "Datenbank veröffentlicht, anstatt in einer öffentlichen Tor-Relay-Datenbank, " "was die Zensur des Knotens erschwert. Dies hilft anderen, Zensur zu umgehen." -#: plinth/modules/tor/forms.py:104 +#: plinth/modules/tor/forms.py:108 #, fuzzy #| msgid "Enable Tor Hidden Service" msgid "Enable Tor Onion Service" msgstr "Tor Hidden Service aktivieren" -#: plinth/modules/tor/forms.py:106 +#: plinth/modules/tor/forms.py:110 #, fuzzy, python-brace-format #| msgid "" #| "A hidden service will allow {box_name} to provide selected services (such " @@ -7182,31 +7189,17 @@ msgstr "" "B. Wiki oder Chat) bereitzustellen, ohne seinen Standort preiszugeben. " "Verwenden Sie dies noch nicht für starke Anonymität." -#: plinth/modules/tor/forms.py:111 -msgid "Download software packages over Tor" -msgstr "Softwarepakete über das Tor-Netzwerk herunterladen" - -#: plinth/modules/tor/forms.py:112 -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, werden zukünftige Softwarepakete für die Installation und " -"den Aktualisierungen über das Tor-Netzwerk heruntergeladen. Dies erhöht die " -"Privatsphäre und Sicherheit während die Software heruntergeladen wird." - -#: plinth/modules/tor/forms.py:127 +#: plinth/modules/tor/forms.py:125 msgid "Specify at least one upstream bridge to use upstream bridges." msgstr "" "Tragen Sie mindestens eine Upstream-Bridge ein, um Upstream-Bridges zu " "nutzen." -#: plinth/modules/tor/manifest.py:15 +#: plinth/modules/tor/manifest.py:15 plinth/modules/torproxy/manifest.py:14 msgid "Tor Browser" msgstr "Tor Browser" -#: plinth/modules/tor/manifest.py:31 +#: plinth/modules/tor/manifest.py:31 plinth/modules/torproxy/manifest.py:30 msgid "Orbot: Proxy with Tor" msgstr "Orbot: Proxy mit Tor" @@ -7218,15 +7211,58 @@ msgstr "Onion-Dienste" msgid "Ports" msgstr "Ports" -#: plinth/modules/tor/views.py:53 +#: plinth/modules/tor/views.py:53 plinth/modules/torproxy/views.py:51 msgid "Updating configuration" msgstr "Aktualisieren der Konfiguration" -#: plinth/modules/tor/views.py:70 +#: plinth/modules/tor/views.py:70 plinth/modules/torproxy/views.py:68 #, python-brace-format msgid "Error configuring app: {error}" msgstr "Fehler beim Konfigurieren der App: {error}" +#: plinth/modules/torproxy/__init__.py:34 +#, python-brace-format +msgid "" +"This app provides a web proxy on your {box_name} for internal networks on " +"TCP port 9050 using the SOCKS protocol. This can be used by various apps to " +"access the internet via the Tor network. ISP censorship can be circumvented " +"using upstream bridges." +msgstr "" + +#: plinth/modules/torproxy/__init__.py:54 +#, fuzzy +#| msgid "Tor Socks Proxy" +msgid "Tor Proxy" +msgstr "Tor-Socks-Proxy" + +#: plinth/modules/torproxy/__init__.py:79 +msgid "Tor Socks Proxy" +msgstr "Tor-Socks-Proxy" + +#: plinth/modules/torproxy/__init__.py:138 +#, python-brace-format +msgid "Access URL {url} on tcp{kind} via Tor" +msgstr "Zugangs-URL {url} auf TCP{kind} über Tor" + +#: plinth/modules/torproxy/__init__.py:149 +#, python-brace-format +msgid "Confirm Tor usage at {url} on tcp{kind}" +msgstr "Tor-Nutzung auf {url} über TCP{kind} bestätigen" + +#: plinth/modules/torproxy/forms.py:15 +msgid "Download software packages over Tor" +msgstr "Softwarepakete über das Tor-Netzwerk herunterladen" + +#: plinth/modules/torproxy/forms.py:16 +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, werden zukünftige Softwarepakete für die Installation und " +"den Aktualisierungen über das Tor-Netzwerk heruntergeladen. Dies erhöht die " +"Privatsphäre und Sicherheit während die Software heruntergeladen wird." + #: plinth/modules/transmission/__init__.py:25 msgid "Transmission is a BitTorrent client with a web interface." msgstr "Transmission ist ein BitTorrent-Client mit einer Weboberfläche." @@ -7622,7 +7658,7 @@ msgstr "Häufige Funktions-Updates aktiviert." msgid "Starting distribution upgrade test." msgstr "Start des Tests zur Aktualisierung der Distribution." -#: plinth/modules/users/__init__.py:29 +#: plinth/modules/users/__init__.py:30 msgid "" "Create and manage user accounts. These accounts serve as centralized " "authentication mechanism for most apps. Some apps further require a user " @@ -7633,7 +7669,7 @@ msgstr "" "muss ein Benutzerkonto Teil einer Gruppe sein, damit ein Benutzer auf die " "App zugreifen kann." -#: plinth/modules/users/__init__.py:34 +#: plinth/modules/users/__init__.py:35 #, python-brace-format msgid "" "Any user may login to {box_name} web interface to see a list of apps " @@ -7645,19 +7681,29 @@ msgstr "" "dürfen nur Mitglieder der Gruppe admin Apps oder " "Systemeinstellungen ändern." -#: plinth/modules/users/__init__.py:55 +#: plinth/modules/users/__init__.py:56 msgid "Users and Groups" msgstr "Benutzer und Gruppen" -#: plinth/modules/users/__init__.py:80 +#: plinth/modules/users/__init__.py:81 msgid "Access to all services and system settings" msgstr "Zugriff auf alle Anwendungen und Systemeinstellungen" -#: plinth/modules/users/__init__.py:116 +#: plinth/modules/users/__init__.py:124 #, python-brace-format msgid "Check LDAP entry \"{search_item}\"" msgstr "LDAP-Eintrag „{search_item}“ prüfen" +#: plinth/modules/users/__init__.py:137 +#, python-brace-format +msgid "Check nslcd config \"{key} {value}\"" +msgstr "" + +#: plinth/modules/users/__init__.py:166 +#, python-brace-format +msgid "Check nsswitch config \"{database}\"" +msgstr "" + #: plinth/modules/users/forms.py:35 msgid "Username is taken or is reserved." msgstr "Benutzername wird bereits verwendet oder ist reserviert." @@ -8873,7 +8919,13 @@ msgstr "Aktualisieren" msgid "Backup" msgstr "Sicherungskopie" -#: plinth/templates/toolbar.html:51 plinth/templates/toolbar.html:52 +#: plinth/templates/toolbar.html:53 +#, fuzzy +#| msgid "Start setup" +msgid "Re-run setup" +msgstr "Einrichten beginnen" + +#: plinth/templates/toolbar.html:59 plinth/templates/toolbar.html:60 #: plinth/templates/uninstall.html:30 msgid "Uninstall" msgstr "Deinstallieren" @@ -8891,11 +8943,11 @@ msgstr "" "Alle App-Daten und -Konfigurationen gehen dauerhaft verloren. App kann " "wieder frisch installiert werden." -#: plinth/views.py:239 +#: plinth/views.py:241 msgid "Setting unchanged" msgstr "Einstellung unverändert" -#: plinth/views.py:456 +#: plinth/views.py:478 #, python-brace-format msgid "before uninstall of {app_id}" msgstr "vor der Deinstallation von {app_id}" @@ -8904,6 +8956,14 @@ msgstr "vor der Deinstallation von {app_id}" msgid "Gujarati" msgstr "Gujarati" +#, python-brace-format +#~ msgid "" +#~ "A Tor SOCKS port is available on your {box_name} for internal networks on " +#~ "TCP port 9050." +#~ msgstr "" +#~ "Tor SOCKS-Port ist auf Ihrer {box_name} für interne Netzwerke auf TCP " +#~ "port 9050 verfügbar." + #, python-brace-format #~ msgid "" #~ "When enabled, text box for server input is removed from login page and " @@ -9723,9 +9783,6 @@ msgstr "Gujarati" #~ "Stunden dauern. Wenn das Einrichten unterbrochen wird, können Sie es " #~ "erneut zu starten." -#~ msgid "Start setup" -#~ msgstr "Einrichten beginnen" - #~ msgid "OpenVPN setup is running" #~ msgstr "Einrichtung von OpenVPN läuft" @@ -10376,9 +10433,6 @@ msgstr "Gujarati" #~ msgid "Error setting default app: {exception}" #~ msgstr "Fehler beim Einstellen der Standard-Anwendung: {exception}" -#~ msgid "Default app set" -#~ msgstr "Standard-Anwendung eingestellt" - #~ msgid "Abort" #~ msgstr "Abbrechen" diff --git a/plinth/locale/django.pot b/plinth/locale/django.pot index f745ca9b9..5471870b4 100644 --- a/plinth/locale/django.pot +++ b/plinth/locale/django.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-06-19 20:15-0400\n" +"POT-Creation-Date: 2023-07-31 20:04-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -26,7 +26,7 @@ msgstr "" msgid "Static configuration {etc_path} is setup properly" msgstr "" -#: plinth/context_processors.py:23 plinth/views.py:92 +#: plinth/context_processors.py:23 plinth/views.py:94 msgid "FreedomBox" msgstr "" @@ -833,7 +833,8 @@ msgstr "" #: plinth/modules/bepasty/views.py:88 plinth/modules/searx/views.py:35 #: plinth/modules/searx/views.py:46 plinth/modules/security/views.py:56 -#: plinth/modules/tor/views.py:73 plinth/modules/zoph/views.py:74 +#: plinth/modules/tor/views.py:73 plinth/modules/torproxy/views.py:71 +#: plinth/modules/zoph/views.py:74 msgid "Configuration updated." msgstr "" @@ -1915,7 +1916,7 @@ msgstr "" msgid "Host/Target/Value" msgstr "" -#: plinth/modules/firewall/__init__.py:23 +#: plinth/modules/firewall/__init__.py:24 #, python-brace-format msgid "" "Firewall is a security system that controls the incoming and outgoing " @@ -1923,10 +1924,22 @@ msgid "" "configured reduces risk of security threat from the Internet." msgstr "" -#: plinth/modules/firewall/__init__.py:59 +#: plinth/modules/firewall/__init__.py:60 msgid "Firewall" msgstr "" +#: plinth/modules/firewall/__init__.py:269 +msgid "Default zone is external" +msgstr "" + +#: plinth/modules/firewall/__init__.py:276 +msgid "Firewall backend is nftables" +msgstr "" + +#: plinth/modules/firewall/__init__.py:287 +msgid "Direct passthrough rules exist" +msgstr "" + #: plinth/modules/firewall/components.py:134 #, python-brace-format msgid "Port {name} ({details}) available for internal networks" @@ -2499,7 +2512,8 @@ msgstr "" msgid "I2P" msgstr "" -#: plinth/modules/i2p/__init__.py:53 plinth/modules/tor/__init__.py:49 +#: plinth/modules/i2p/__init__.py:53 plinth/modules/tor/__init__.py:61 +#: plinth/modules/torproxy/__init__.py:55 msgid "Anonymity Network" msgstr "" @@ -4763,7 +4777,7 @@ msgstr "" msgid "Web Proxy" msgstr "" -#: plinth/modules/privoxy/__init__.py:113 +#: plinth/modules/privoxy/__init__.py:114 #, python-brace-format msgid "Access {url} with proxy {proxy} on tcp{kind}" msgstr "" @@ -6012,7 +6026,7 @@ msgstr "" msgid "File Synchronization" msgstr "" -#: plinth/modules/tor/__init__.py:23 +#: plinth/modules/tor/__init__.py:31 plinth/modules/torproxy/__init__.py:27 msgid "" "Tor is an anonymous communication system. You can learn more about it from " "the Tor Project website. For " @@ -6021,55 +6035,48 @@ msgid "" "en\">Tor Browser." msgstr "" -#: plinth/modules/tor/__init__.py:30 -#, python-brace-format +#: plinth/modules/tor/__init__.py:37 msgid "" -"A Tor SOCKS port is available on your {box_name} for internal networks on " -"TCP port 9050." +"This app provides relay services to contribute to Tor network and help " +"others overcome censorship." msgstr "" -#: plinth/modules/tor/__init__.py:48 +#: plinth/modules/tor/__init__.py:40 +#, python-brace-format +msgid "" +"This app provides an onion domain to expose {box_name} services via the Tor " +"network. Using Tor browser, one can access {box_name} from the internet even " +"when using an ISP that limits servers at home." +msgstr "" + +#: plinth/modules/tor/__init__.py:60 msgid "Tor" msgstr "" -#: plinth/modules/tor/__init__.py:65 +#: plinth/modules/tor/__init__.py:76 msgid "Tor Onion Service" msgstr "" -#: plinth/modules/tor/__init__.py:69 -msgid "Tor Socks Proxy" -msgstr "" - -#: plinth/modules/tor/__init__.py:73 +#: plinth/modules/tor/__init__.py:80 msgid "Tor Bridge Relay" msgstr "" -#: plinth/modules/tor/__init__.py:132 +#: plinth/modules/tor/__init__.py:135 msgid "Tor relay port available" msgstr "" -#: plinth/modules/tor/__init__.py:143 +#: plinth/modules/tor/__init__.py:146 msgid "Obfs3 transport registered" msgstr "" -#: plinth/modules/tor/__init__.py:153 +#: plinth/modules/tor/__init__.py:156 msgid "Obfs4 transport registered" msgstr "" -#: plinth/modules/tor/__init__.py:165 +#: plinth/modules/tor/__init__.py:168 msgid "Onion service is version 3" msgstr "" -#: plinth/modules/tor/__init__.py:242 -#, python-brace-format -msgid "Access URL {url} on tcp{kind} via Tor" -msgstr "" - -#: plinth/modules/tor/__init__.py:253 -#, python-brace-format -msgid "Confirm Tor usage at {url} on tcp{kind}" -msgstr "" - #: plinth/modules/tor/forms.py:33 msgid "" "Enter a valid bridge with this format: [transport] IP:ORPort [fingerprint]" @@ -6097,11 +6104,11 @@ msgid "" "here. Currently supported transports are none, obfs3, obfs4 and scamblesuit." msgstr "" -#: plinth/modules/tor/forms.py:91 +#: plinth/modules/tor/forms.py:95 msgid "Enable Tor relay" msgstr "" -#: plinth/modules/tor/forms.py:92 +#: plinth/modules/tor/forms.py:96 #, python-brace-format msgid "" "When enabled, your {box_name} will run a Tor relay and donate bandwidth to " @@ -6109,22 +6116,22 @@ msgid "" "download bandwidth." msgstr "" -#: plinth/modules/tor/forms.py:97 +#: plinth/modules/tor/forms.py:101 msgid "Enable Tor bridge relay" msgstr "" -#: plinth/modules/tor/forms.py:99 +#: plinth/modules/tor/forms.py:103 msgid "" "When enabled, relay information is published in the Tor bridge database " "instead of public Tor relay database making it harder to censor this node. " "This helps others circumvent censorship." msgstr "" -#: plinth/modules/tor/forms.py:104 +#: plinth/modules/tor/forms.py:108 msgid "Enable Tor Onion Service" msgstr "" -#: plinth/modules/tor/forms.py:106 +#: plinth/modules/tor/forms.py:110 #, python-brace-format msgid "" "An onion service will allow {box_name} to provide selected services (such as " @@ -6132,26 +6139,15 @@ msgid "" "anonymity yet." msgstr "" -#: plinth/modules/tor/forms.py:111 -msgid "Download software packages over Tor" -msgstr "" - -#: plinth/modules/tor/forms.py:112 -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/forms.py:127 +#: plinth/modules/tor/forms.py:125 msgid "Specify at least one upstream bridge to use upstream bridges." msgstr "" -#: plinth/modules/tor/manifest.py:15 +#: plinth/modules/tor/manifest.py:15 plinth/modules/torproxy/manifest.py:14 msgid "Tor Browser" msgstr "" -#: plinth/modules/tor/manifest.py:31 +#: plinth/modules/tor/manifest.py:31 plinth/modules/torproxy/manifest.py:30 msgid "Orbot: Proxy with Tor" msgstr "" @@ -6163,15 +6159,53 @@ msgstr "" msgid "Ports" msgstr "" -#: plinth/modules/tor/views.py:53 +#: plinth/modules/tor/views.py:53 plinth/modules/torproxy/views.py:51 msgid "Updating configuration" msgstr "" -#: plinth/modules/tor/views.py:70 +#: plinth/modules/tor/views.py:70 plinth/modules/torproxy/views.py:68 #, python-brace-format msgid "Error configuring app: {error}" msgstr "" +#: plinth/modules/torproxy/__init__.py:34 +#, python-brace-format +msgid "" +"This app provides a web proxy on your {box_name} for internal networks on " +"TCP port 9050 using the SOCKS protocol. This can be used by various apps to " +"access the internet via the Tor network. ISP censorship can be circumvented " +"using upstream bridges." +msgstr "" + +#: plinth/modules/torproxy/__init__.py:54 +msgid "Tor Proxy" +msgstr "" + +#: plinth/modules/torproxy/__init__.py:79 +msgid "Tor Socks Proxy" +msgstr "" + +#: plinth/modules/torproxy/__init__.py:138 +#, python-brace-format +msgid "Access URL {url} on tcp{kind} via Tor" +msgstr "" + +#: plinth/modules/torproxy/__init__.py:149 +#, python-brace-format +msgid "Confirm Tor usage at {url} on tcp{kind}" +msgstr "" + +#: plinth/modules/torproxy/forms.py:15 +msgid "Download software packages over Tor" +msgstr "" + +#: plinth/modules/torproxy/forms.py:16 +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/transmission/__init__.py:25 msgid "Transmission is a BitTorrent client with a web interface." msgstr "" @@ -6497,14 +6531,14 @@ msgstr "" msgid "Starting distribution upgrade test." msgstr "" -#: plinth/modules/users/__init__.py:29 +#: plinth/modules/users/__init__.py:30 msgid "" "Create and manage user accounts. These accounts serve as centralized " "authentication mechanism for most apps. Some apps further require a user " "account to be part of a group to authorize the user to access the app." msgstr "" -#: plinth/modules/users/__init__.py:34 +#: plinth/modules/users/__init__.py:35 #, python-brace-format msgid "" "Any user may login to {box_name} web interface to see a list of apps " @@ -6512,19 +6546,29 @@ msgid "" "group may alter apps or system settings." msgstr "" -#: plinth/modules/users/__init__.py:55 +#: plinth/modules/users/__init__.py:56 msgid "Users and Groups" msgstr "" -#: plinth/modules/users/__init__.py:80 +#: plinth/modules/users/__init__.py:81 msgid "Access to all services and system settings" msgstr "" -#: plinth/modules/users/__init__.py:116 +#: plinth/modules/users/__init__.py:124 #, python-brace-format msgid "Check LDAP entry \"{search_item}\"" msgstr "" +#: plinth/modules/users/__init__.py:137 +#, python-brace-format +msgid "Check nslcd config \"{key} {value}\"" +msgstr "" + +#: plinth/modules/users/__init__.py:166 +#, python-brace-format +msgid "Check nsswitch config \"{database}\"" +msgstr "" + #: plinth/modules/users/forms.py:35 msgid "Username is taken or is reserved." msgstr "" @@ -7592,7 +7636,11 @@ msgstr "" msgid "Backup" msgstr "" -#: plinth/templates/toolbar.html:51 plinth/templates/toolbar.html:52 +#: plinth/templates/toolbar.html:53 +msgid "Re-run setup" +msgstr "" + +#: plinth/templates/toolbar.html:59 plinth/templates/toolbar.html:60 #: plinth/templates/uninstall.html:30 msgid "Uninstall" msgstr "" @@ -7608,11 +7656,11 @@ msgid "" "installed freshly again." msgstr "" -#: plinth/views.py:239 +#: plinth/views.py:241 msgid "Setting unchanged" msgstr "" -#: plinth/views.py:456 +#: plinth/views.py:478 #, python-brace-format msgid "before uninstall of {app_id}" msgstr "" diff --git a/plinth/locale/el/LC_MESSAGES/django.po b/plinth/locale/el/LC_MESSAGES/django.po index 73bda582c..4767129b8 100644 --- a/plinth/locale/el/LC_MESSAGES/django.po +++ b/plinth/locale/el/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-06-19 20:15-0400\n" +"POT-Creation-Date: 2023-07-31 20:04-0400\n" "PO-Revision-Date: 2022-09-14 17:20+0000\n" "Last-Translator: ikmaak \n" "Language-Team: Greek Tor Project website. For " @@ -7139,58 +7153,50 @@ msgstr "" "Project συνιστά να χρησιμοποιήσετε το πρόγραμμα περιήγησης διαδικτύου Tor." -#: plinth/modules/tor/__init__.py:30 -#, fuzzy, python-brace-format -#| msgid "A Tor SOCKS port is available on your %(box_name)s on TCP port 9050." +#: plinth/modules/tor/__init__.py:37 msgid "" -"A Tor SOCKS port is available on your {box_name} for internal networks on " -"TCP port 9050." -msgstr "Μια θύρα Tor SOCKS είναι διαθέσιμη στη θύρα 9050 του %(box_name)s σας." +"This app provides relay services to contribute to Tor network and help " +"others overcome censorship." +msgstr "" -#: plinth/modules/tor/__init__.py:48 +#: plinth/modules/tor/__init__.py:40 +#, python-brace-format +msgid "" +"This app provides an onion domain to expose {box_name} services via the Tor " +"network. Using Tor browser, one can access {box_name} from the internet even " +"when using an ISP that limits servers at home." +msgstr "" + +#: plinth/modules/tor/__init__.py:60 msgid "Tor" msgstr "Tor" -#: plinth/modules/tor/__init__.py:65 +#: plinth/modules/tor/__init__.py:76 msgid "Tor Onion Service" msgstr "Υπηρεσία κρεμυδιού Tor" -#: plinth/modules/tor/__init__.py:69 -msgid "Tor Socks Proxy" -msgstr "Tor διακομιστής μεσολάβησης τύπου socks5" - -#: plinth/modules/tor/__init__.py:73 +#: plinth/modules/tor/__init__.py:80 msgid "Tor Bridge Relay" msgstr "Γέφυρα/μεσολαβητής Tor" -#: plinth/modules/tor/__init__.py:132 +#: plinth/modules/tor/__init__.py:135 msgid "Tor relay port available" msgstr "Θύρα μεσολαβητή Tor διαθέσιμη" -#: plinth/modules/tor/__init__.py:143 +#: plinth/modules/tor/__init__.py:146 msgid "Obfs3 transport registered" msgstr "Obfs3 μεταφορά καταχωρήθηκε" -#: plinth/modules/tor/__init__.py:153 +#: plinth/modules/tor/__init__.py:156 msgid "Obfs4 transport registered" msgstr "Obfs4 μεταφορά καταχωρήθηκε" -#: plinth/modules/tor/__init__.py:165 +#: plinth/modules/tor/__init__.py:168 #, fuzzy #| msgid "Onion Service" msgid "Onion service is version 3" msgstr "Υπηρεσία κρεμμυδιού" -#: plinth/modules/tor/__init__.py:242 -#, python-brace-format -msgid "Access URL {url} on tcp{kind} via Tor" -msgstr "Πρόσβαση στη διεύθυνση URL {url} με tcp {kind} μέσω του Tor" - -#: plinth/modules/tor/__init__.py:253 -#, python-brace-format -msgid "Confirm Tor usage at {url} on tcp{kind}" -msgstr "Επιβεβαίωση χρήσης του Tor στο {url} στο προτόκολλο TCP {kind}" - #: plinth/modules/tor/forms.py:33 msgid "" "Enter a valid bridge with this format: [transport] IP:ORPort [fingerprint]" @@ -7228,11 +7234,11 @@ msgstr "" "τις πληροφορίες της γέφυρας εδώ. Οι τρέχουσες υποστηριζόμενες μεταφορές " "είναι 'καμία', obfs3, obfs4 και scamblesuit." -#: plinth/modules/tor/forms.py:91 +#: plinth/modules/tor/forms.py:95 msgid "Enable Tor relay" msgstr "Ενεργοποίηση μεσολαβητή Tor" -#: plinth/modules/tor/forms.py:92 +#: plinth/modules/tor/forms.py:96 #, python-brace-format msgid "" "When enabled, your {box_name} will run a Tor relay and donate bandwidth to " @@ -7243,11 +7249,11 @@ msgstr "" "δωρίσει ένα μερος της ταχήτυτας της σύνδεσής σας στο δίκτυο Tor. Κάντε αυτό " "αν έχετε περισσότερα από 2 Mbps ταχύτητα μεταφόρτωσης και λήψης." -#: plinth/modules/tor/forms.py:97 +#: plinth/modules/tor/forms.py:101 msgid "Enable Tor bridge relay" msgstr "Ενεργοποίηση γέφυρας μεσολαβητή Tor" -#: plinth/modules/tor/forms.py:99 +#: plinth/modules/tor/forms.py:103 msgid "" "When enabled, relay information is published in the Tor bridge database " "instead of public Tor relay database making it harder to censor this node. " @@ -7258,13 +7264,13 @@ msgstr "" "Tor που καθιστά δυσκολότερη τη λογοκρισία αυτού του κόμβου. Αυτό βοηθά τους " "άλλους να παρακάμψουν τη λογοκρισία." -#: plinth/modules/tor/forms.py:104 +#: plinth/modules/tor/forms.py:108 #, fuzzy #| msgid "Enable Tor Hidden Service" msgid "Enable Tor Onion Service" msgstr "Ενεργοποίηση της κρυφής υπηρεσίας Tor" -#: plinth/modules/tor/forms.py:106 +#: plinth/modules/tor/forms.py:110 #, fuzzy, python-brace-format #| msgid "" #| "A hidden service will allow {box_name} to provide selected services (such " @@ -7279,31 +7285,17 @@ msgstr "" "υπηρεσίες (όπως wiki ή chat) χωρίς να αποκαλύψει τη θέση της. Να μην " "χρησιμοποιείται για πληρη ανωνυμία παρόλαυτα." -#: plinth/modules/tor/forms.py:111 -msgid "Download software packages over Tor" -msgstr "Κατεβάστε πακέτα λογισμικού μέσω του Tor" - -#: plinth/modules/tor/forms.py:112 -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/forms.py:127 +#: plinth/modules/tor/forms.py:125 msgid "Specify at least one upstream bridge to use upstream bridges." msgstr "" "Καθορίστε τουλάχιστον μία εξωτερική γέφυρα για να χρησιμοποιήσετε εξωτερικές " "γέφυρες." -#: plinth/modules/tor/manifest.py:15 +#: plinth/modules/tor/manifest.py:15 plinth/modules/torproxy/manifest.py:14 msgid "Tor Browser" msgstr "Tor πρόγραμμα περιήγησης" -#: plinth/modules/tor/manifest.py:31 +#: plinth/modules/tor/manifest.py:31 plinth/modules/torproxy/manifest.py:30 msgid "Orbot: Proxy with Tor" msgstr "Orbot: διακομιστής μεσολάβησης με Tor" @@ -7315,18 +7307,61 @@ msgstr "Υπηρεσία κρεμμυδιού" msgid "Ports" msgstr "Θύρες" -#: plinth/modules/tor/views.py:53 +#: plinth/modules/tor/views.py:53 plinth/modules/torproxy/views.py:51 #, fuzzy #| msgid "An error occurred during configuration." msgid "Updating configuration" msgstr "Παρουσιάστηκε σφάλμα κατά τη ρύθμιση παραμέτρων." -#: plinth/modules/tor/views.py:70 +#: plinth/modules/tor/views.py:70 plinth/modules/torproxy/views.py:68 #, fuzzy, python-brace-format #| msgid "Error installing application: {error}" msgid "Error configuring app: {error}" msgstr "Σφάλμα κατά την εγκατάσταση της εφαρμογής: {error}" +#: plinth/modules/torproxy/__init__.py:34 +#, python-brace-format +msgid "" +"This app provides a web proxy on your {box_name} for internal networks on " +"TCP port 9050 using the SOCKS protocol. This can be used by various apps to " +"access the internet via the Tor network. ISP censorship can be circumvented " +"using upstream bridges." +msgstr "" + +#: plinth/modules/torproxy/__init__.py:54 +#, fuzzy +#| msgid "Tor Socks Proxy" +msgid "Tor Proxy" +msgstr "Tor διακομιστής μεσολάβησης τύπου socks5" + +#: plinth/modules/torproxy/__init__.py:79 +msgid "Tor Socks Proxy" +msgstr "Tor διακομιστής μεσολάβησης τύπου socks5" + +#: plinth/modules/torproxy/__init__.py:138 +#, python-brace-format +msgid "Access URL {url} on tcp{kind} via Tor" +msgstr "Πρόσβαση στη διεύθυνση URL {url} με tcp {kind} μέσω του Tor" + +#: plinth/modules/torproxy/__init__.py:149 +#, python-brace-format +msgid "Confirm Tor usage at {url} on tcp{kind}" +msgstr "Επιβεβαίωση χρήσης του Tor στο {url} στο προτόκολλο TCP {kind}" + +#: plinth/modules/torproxy/forms.py:15 +msgid "Download software packages over Tor" +msgstr "Κατεβάστε πακέτα λογισμικού μέσω του Tor" + +#: plinth/modules/torproxy/forms.py:16 +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/transmission/__init__.py:25 msgid "Transmission is a BitTorrent client with a web interface." msgstr "" @@ -7732,7 +7767,7 @@ msgstr "" msgid "Starting distribution upgrade test." msgstr "Oι αυτόματες ενημερώσεις ενεργοποιήθηκαν" -#: plinth/modules/users/__init__.py:29 +#: plinth/modules/users/__init__.py:30 #, fuzzy #| msgid "" #| "Create and managed user accounts. These accounts serve as centralized " @@ -7749,7 +7784,7 @@ msgstr "" "είναι μέρος μιας ομάδας για να εξουσιοδοτήσουν το χρήστη να αποκτήσει " "πρόσβαση στην εφαρμογή." -#: plinth/modules/users/__init__.py:34 +#: plinth/modules/users/__init__.py:35 #, python-brace-format msgid "" "Any user may login to {box_name} web interface to see a list of apps " @@ -7761,19 +7796,29 @@ msgstr "" "σελίδα. Ωστόσο, μόνο οι χρήστες της ομάδας admin μπορούν να " "τροποποιήσουν τις εφαρμογές ή τις ρυθμίσεις του συστήματος." -#: plinth/modules/users/__init__.py:55 +#: plinth/modules/users/__init__.py:56 msgid "Users and Groups" msgstr "Χρήστες και ομάδες" -#: plinth/modules/users/__init__.py:80 +#: plinth/modules/users/__init__.py:81 msgid "Access to all services and system settings" msgstr "Πρόσβαση σε όλες τις υπηρεσίες και τις ρυθμίσεις συστήματος" -#: plinth/modules/users/__init__.py:116 +#: plinth/modules/users/__init__.py:124 #, python-brace-format msgid "Check LDAP entry \"{search_item}\"" msgstr "Ελέγξτε την καταχώρηση LDAP \"{search_item}\"" +#: plinth/modules/users/__init__.py:137 +#, python-brace-format +msgid "Check nslcd config \"{key} {value}\"" +msgstr "" + +#: plinth/modules/users/__init__.py:166 +#, python-brace-format +msgid "Check nsswitch config \"{database}\"" +msgstr "" + #: plinth/modules/users/forms.py:35 msgid "Username is taken or is reserved." msgstr "Το όνομα χρήστη είναι δεσμευμένο." @@ -9031,7 +9076,13 @@ msgstr "Ενημερωμένη έκδοση" msgid "Backup" msgstr "Αντίγραφα ασφαλείας" -#: plinth/templates/toolbar.html:51 plinth/templates/toolbar.html:52 +#: plinth/templates/toolbar.html:53 +#, fuzzy +#| msgid "Start setup" +msgid "Re-run setup" +msgstr "Έναρξη εγκατάστασης" + +#: plinth/templates/toolbar.html:59 plinth/templates/toolbar.html:60 #: plinth/templates/uninstall.html:30 #, fuzzy #| msgid "Install" @@ -9050,11 +9101,11 @@ msgid "" "installed freshly again." msgstr "" -#: plinth/views.py:239 +#: plinth/views.py:241 msgid "Setting unchanged" msgstr "Οι ρυθμίσεις δεν άλλαξαν" -#: plinth/views.py:456 +#: plinth/views.py:478 #, python-brace-format msgid "before uninstall of {app_id}" msgstr "" @@ -9063,6 +9114,15 @@ msgstr "" msgid "Gujarati" msgstr "Gujarati" +#, fuzzy, python-brace-format +#~| msgid "" +#~| "A Tor SOCKS port is available on your %(box_name)s on TCP port 9050." +#~ msgid "" +#~ "A Tor SOCKS port is available on your {box_name} for internal networks on " +#~ "TCP port 9050." +#~ msgstr "" +#~ "Μια θύρα Tor SOCKS είναι διαθέσιμη στη θύρα 9050 του %(box_name)s σας." + #~ msgid "" #~ "Shadowsocks is a lightweight and secure SOCKS5 proxy, designed to protect " #~ "your Internet traffic. It can be used to bypass Internet filtering and " @@ -9829,9 +9889,6 @@ msgstr "Gujarati" #~ "%(box_name)s, μπορεί να χρειαστούν και ώρες. Εάν η ρύθμιση διακοπεί, " #~ "μπορείτε να την ξεκινήσετε ξανά." -#~ msgid "Start setup" -#~ msgstr "Έναρξη εγκατάστασης" - #~ msgid "OpenVPN setup is running" #~ msgstr "Η εγκατάσταση του OpenVPN εκτελείται" diff --git a/plinth/locale/es/LC_MESSAGES/django.po b/plinth/locale/es/LC_MESSAGES/django.po index 4654cbeac..a95722f64 100644 --- a/plinth/locale/es/LC_MESSAGES/django.po +++ b/plinth/locale/es/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-06-19 20:15-0400\n" +"POT-Creation-Date: 2023-07-31 20:04-0400\n" "PO-Revision-Date: 2023-06-21 13:49+0000\n" "Last-Translator: gallegonovato \n" "Language-Team: Spanish Tor Project website. For " @@ -6935,57 +6951,48 @@ msgstr "" "download/download-easy.html.en\">Navegador Tor para tener la mejor " "protección cuando navega por la red." -#: plinth/modules/tor/__init__.py:30 +#: plinth/modules/tor/__init__.py:37 +msgid "" +"This app provides relay services to contribute to Tor network and help " +"others overcome censorship." +msgstr "" + +#: plinth/modules/tor/__init__.py:40 #, python-brace-format msgid "" -"A Tor SOCKS port is available on your {box_name} for internal networks on " -"TCP port 9050." +"This app provides an onion domain to expose {box_name} services via the Tor " +"network. Using Tor browser, one can access {box_name} from the internet even " +"when using an ISP that limits servers at home." msgstr "" -"Un puerto SOCKS de Tor está disponible para redes internas en su {box_name} " -"en el puerto TCP 9050." -#: plinth/modules/tor/__init__.py:48 +#: plinth/modules/tor/__init__.py:60 msgid "Tor" msgstr "Tor" -#: plinth/modules/tor/__init__.py:65 +#: plinth/modules/tor/__init__.py:76 msgid "Tor Onion Service" msgstr "Servicio Tor Onion" -#: plinth/modules/tor/__init__.py:69 -msgid "Tor Socks Proxy" -msgstr "Proxy Socks para Tor" - -#: plinth/modules/tor/__init__.py:73 +#: plinth/modules/tor/__init__.py:80 msgid "Tor Bridge Relay" msgstr "Puente de retransmisión Tor" -#: plinth/modules/tor/__init__.py:132 +#: plinth/modules/tor/__init__.py:135 msgid "Tor relay port available" msgstr "Puerto de servidor Tor disponible" -#: plinth/modules/tor/__init__.py:143 +#: plinth/modules/tor/__init__.py:146 msgid "Obfs3 transport registered" msgstr "Transporte Obfs3 registrado" -#: plinth/modules/tor/__init__.py:153 +#: plinth/modules/tor/__init__.py:156 msgid "Obfs4 transport registered" msgstr "Transporte Obfs4 registrado" -#: plinth/modules/tor/__init__.py:165 +#: plinth/modules/tor/__init__.py:168 msgid "Onion service is version 3" msgstr "Versión 3 para los servicios de Onion" -#: plinth/modules/tor/__init__.py:242 -#, python-brace-format -msgid "Access URL {url} on tcp{kind} via Tor" -msgstr "Acceso a URL {url} sobre tcp {kind} vía Tor" - -#: plinth/modules/tor/__init__.py:253 -#, python-brace-format -msgid "Confirm Tor usage at {url} on tcp{kind}" -msgstr "Confirmar uso de Tor en {url} sobre tcp {kind}" - #: plinth/modules/tor/forms.py:33 msgid "" "Enter a valid bridge with this format: [transport] IP:ORPort [fingerprint]" @@ -7023,11 +7030,11 @@ msgstr "" "Los tipos de transporte actualmente soportados son ninguno, obfs3, obfs4 y " "scamblesuit." -#: plinth/modules/tor/forms.py:91 +#: plinth/modules/tor/forms.py:95 msgid "Enable Tor relay" msgstr "Activar Tor" -#: plinth/modules/tor/forms.py:92 +#: plinth/modules/tor/forms.py:96 #, python-brace-format msgid "" "When enabled, your {box_name} will run a Tor relay and donate bandwidth to " @@ -7038,11 +7045,11 @@ msgstr "" "ancho de banda a la red Tor. Actívelo si dispone de más de 2 megabits/s de " "ancho de banda para descarga y subida." -#: plinth/modules/tor/forms.py:97 +#: plinth/modules/tor/forms.py:101 msgid "Enable Tor bridge relay" msgstr "Activar puente de retransmisión Tor" -#: plinth/modules/tor/forms.py:99 +#: plinth/modules/tor/forms.py:103 msgid "" "When enabled, relay information is published in the Tor bridge database " "instead of public Tor relay database making it harder to censor this node. " @@ -7052,11 +7059,11 @@ msgstr "" "Tor en vez de en la base de datos pública de Tor, lo que dificulta censurar " "este nodo. Ayuda a otros usuarios a esquivar la censura." -#: plinth/modules/tor/forms.py:104 +#: plinth/modules/tor/forms.py:108 msgid "Enable Tor Onion Service" msgstr "Activar el servicio Tor Onion" -#: plinth/modules/tor/forms.py:106 +#: plinth/modules/tor/forms.py:110 #, python-brace-format msgid "" "An onion service will allow {box_name} to provide selected services (such as " @@ -7067,30 +7074,16 @@ msgstr "" "seleccionados (como wiki o chat) sin revelar tu ubicación. No use esto para " "un fuerte anonimato todavía." -#: plinth/modules/tor/forms.py:111 -msgid "Download software packages over Tor" -msgstr "Descarga de paquetes de software con Tor" - -#: plinth/modules/tor/forms.py:112 -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 "" -"Cuando se activa, el software para instalación o las actualizaciones se " -"descargarán a través de la red Tor. De esta forma se añade un grado de " -"privacidad y seguridad durante la descarga." - -#: plinth/modules/tor/forms.py:127 +#: plinth/modules/tor/forms.py:125 msgid "Specify at least one upstream bridge to use upstream bridges." msgstr "" "Especifique al menos un puente de subida para usar los puentes de subida." -#: plinth/modules/tor/manifest.py:15 +#: plinth/modules/tor/manifest.py:15 plinth/modules/torproxy/manifest.py:14 msgid "Tor Browser" msgstr "Navegador Tor" -#: plinth/modules/tor/manifest.py:31 +#: plinth/modules/tor/manifest.py:31 plinth/modules/torproxy/manifest.py:30 msgid "Orbot: Proxy with Tor" msgstr "Orbot: Proxy con Tor" @@ -7102,15 +7095,58 @@ msgstr "Servicio Onion" msgid "Ports" msgstr "Puertos" -#: plinth/modules/tor/views.py:53 +#: plinth/modules/tor/views.py:53 plinth/modules/torproxy/views.py:51 msgid "Updating configuration" msgstr "Actualizando la configuración" -#: plinth/modules/tor/views.py:70 +#: plinth/modules/tor/views.py:70 plinth/modules/torproxy/views.py:68 #, python-brace-format msgid "Error configuring app: {error}" msgstr "Error al configurar la aplicación: {error}" +#: plinth/modules/torproxy/__init__.py:34 +#, python-brace-format +msgid "" +"This app provides a web proxy on your {box_name} for internal networks on " +"TCP port 9050 using the SOCKS protocol. This can be used by various apps to " +"access the internet via the Tor network. ISP censorship can be circumvented " +"using upstream bridges." +msgstr "" + +#: plinth/modules/torproxy/__init__.py:54 +#, fuzzy +#| msgid "Tor Socks Proxy" +msgid "Tor Proxy" +msgstr "Proxy Socks para Tor" + +#: plinth/modules/torproxy/__init__.py:79 +msgid "Tor Socks Proxy" +msgstr "Proxy Socks para Tor" + +#: plinth/modules/torproxy/__init__.py:138 +#, python-brace-format +msgid "Access URL {url} on tcp{kind} via Tor" +msgstr "Acceso a URL {url} sobre tcp {kind} vía Tor" + +#: plinth/modules/torproxy/__init__.py:149 +#, python-brace-format +msgid "Confirm Tor usage at {url} on tcp{kind}" +msgstr "Confirmar uso de Tor en {url} sobre tcp {kind}" + +#: plinth/modules/torproxy/forms.py:15 +msgid "Download software packages over Tor" +msgstr "Descarga de paquetes de software con Tor" + +#: plinth/modules/torproxy/forms.py:16 +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 "" +"Cuando se activa, el software para instalación o las actualizaciones se " +"descargarán a través de la red Tor. De esta forma se añade un grado de " +"privacidad y seguridad durante la descarga." + #: plinth/modules/transmission/__init__.py:25 msgid "Transmission is a BitTorrent client with a web interface." msgstr "Transmission es un cliente BitTorrent con interfaz web." @@ -7501,7 +7537,7 @@ msgstr "Las actualizaciones funcionales frecuentes están activadas." msgid "Starting distribution upgrade test." msgstr "Comenzando la prueba de la actualización de la distribución." -#: plinth/modules/users/__init__.py:29 +#: plinth/modules/users/__init__.py:30 msgid "" "Create and manage user accounts. These accounts serve as centralized " "authentication mechanism for most apps. Some apps further require a user " @@ -7512,7 +7548,7 @@ msgstr "" "requieren que además la cuenta de usuario conste en un grupo para " "autorizarles a acceder." -#: plinth/modules/users/__init__.py:34 +#: plinth/modules/users/__init__.py:35 #, python-brace-format msgid "" "Any user may login to {box_name} web interface to see a list of apps " @@ -7524,19 +7560,29 @@ msgstr "" "sólo los usuarios del grupo admin pueden cambiar configuraciones de " "apps o del sistema." -#: plinth/modules/users/__init__.py:55 +#: plinth/modules/users/__init__.py:56 msgid "Users and Groups" msgstr "Usuarias/os y grupos" -#: plinth/modules/users/__init__.py:80 +#: plinth/modules/users/__init__.py:81 msgid "Access to all services and system settings" msgstr "Acceso a todos los servicios y configuraciones del sistema" -#: plinth/modules/users/__init__.py:116 +#: plinth/modules/users/__init__.py:124 #, python-brace-format msgid "Check LDAP entry \"{search_item}\"" msgstr "Comprobar la entrada LDAP \"{search_item}\"" +#: plinth/modules/users/__init__.py:137 +#, python-brace-format +msgid "Check nslcd config \"{key} {value}\"" +msgstr "" + +#: plinth/modules/users/__init__.py:166 +#, python-brace-format +msgid "Check nsswitch config \"{database}\"" +msgstr "" + #: plinth/modules/users/forms.py:35 msgid "Username is taken or is reserved." msgstr "El nombre de usuaria/o está en uso o reservado." @@ -8727,7 +8773,13 @@ msgstr "Actualización" msgid "Backup" msgstr "Copia de seguridad" -#: plinth/templates/toolbar.html:51 plinth/templates/toolbar.html:52 +#: plinth/templates/toolbar.html:53 +#, fuzzy +#| msgid "Start setup" +msgid "Re-run setup" +msgstr "Iniciar configuración" + +#: plinth/templates/toolbar.html:59 plinth/templates/toolbar.html:60 #: plinth/templates/uninstall.html:30 msgid "Uninstall" msgstr "Desinstalar" @@ -8745,11 +8797,11 @@ msgstr "" "Todos los datos de la aplicación y la configuración se perderán " "permanentemente. La aplicación se puede instalar de nuevo." -#: plinth/views.py:239 +#: plinth/views.py:241 msgid "Setting unchanged" msgstr "Configuración sin cambio" -#: plinth/views.py:456 +#: plinth/views.py:478 #, python-brace-format msgid "before uninstall of {app_id}" msgstr "antes de desinstalar {app_id}" @@ -8758,6 +8810,14 @@ msgstr "antes de desinstalar {app_id}" msgid "Gujarati" msgstr "Gujarati" +#, python-brace-format +#~ msgid "" +#~ "A Tor SOCKS port is available on your {box_name} for internal networks on " +#~ "TCP port 9050." +#~ msgstr "" +#~ "Un puerto SOCKS de Tor está disponible para redes internas en su " +#~ "{box_name} en el puerto TCP 9050." + #, python-brace-format #~ msgid "" #~ "When enabled, text box for server input is removed from login page and " @@ -9570,9 +9630,6 @@ msgstr "Gujarati" #~ "llevar incluso horas terminarla. Si la configuración se interrumpe " #~ "debería empezarla de nuevo." -#~ msgid "Start setup" -#~ msgstr "Iniciar configuración" - #~ msgid "OpenVPN setup is running" #~ msgstr "Se está ejecutando la configuración de OpenVPN" @@ -10214,9 +10271,6 @@ msgstr "Gujarati" #~ msgid "Error setting default app: {exception}" #~ msgstr "Error al establecer la aplicación por defecto: {exception}" -#~ msgid "Default app set" -#~ msgstr "Aplicación por defecto establecida" - #~ msgid "Abort" #~ msgstr "Cancelar" diff --git a/plinth/locale/fa/LC_MESSAGES/django.po b/plinth/locale/fa/LC_MESSAGES/django.po index 18a158082..fd527b4a3 100644 --- a/plinth/locale/fa/LC_MESSAGES/django.po +++ b/plinth/locale/fa/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-06-19 20:15-0400\n" +"POT-Creation-Date: 2023-07-31 20:04-0400\n" "PO-Revision-Date: 2022-09-14 17:19+0000\n" "Last-Translator: ikmaak \n" "Language-Team: Persian Tor Project website. For " @@ -6659,57 +6675,50 @@ msgid "" "en\">Tor Browser." msgstr "" -#: plinth/modules/tor/__init__.py:30 -#, python-brace-format +#: plinth/modules/tor/__init__.py:37 msgid "" -"A Tor SOCKS port is available on your {box_name} for internal networks on " -"TCP port 9050." +"This app provides relay services to contribute to Tor network and help " +"others overcome censorship." msgstr "" -#: plinth/modules/tor/__init__.py:48 +#: plinth/modules/tor/__init__.py:40 +#, python-brace-format +msgid "" +"This app provides an onion domain to expose {box_name} services via the Tor " +"network. Using Tor browser, one can access {box_name} from the internet even " +"when using an ISP that limits servers at home." +msgstr "" + +#: plinth/modules/tor/__init__.py:60 msgid "Tor" msgstr "" -#: plinth/modules/tor/__init__.py:65 +#: plinth/modules/tor/__init__.py:76 msgid "Tor Onion Service" msgstr "" -#: plinth/modules/tor/__init__.py:69 -msgid "Tor Socks Proxy" -msgstr "" - -#: plinth/modules/tor/__init__.py:73 +#: plinth/modules/tor/__init__.py:80 msgid "Tor Bridge Relay" msgstr "" -#: plinth/modules/tor/__init__.py:132 +#: plinth/modules/tor/__init__.py:135 msgid "Tor relay port available" msgstr "" -#: plinth/modules/tor/__init__.py:143 +#: plinth/modules/tor/__init__.py:146 msgid "Obfs3 transport registered" msgstr "" -#: plinth/modules/tor/__init__.py:153 +#: plinth/modules/tor/__init__.py:156 msgid "Obfs4 transport registered" msgstr "" -#: plinth/modules/tor/__init__.py:165 +#: plinth/modules/tor/__init__.py:168 #, fuzzy #| msgid "Service" msgid "Onion service is version 3" msgstr "سرویس" -#: plinth/modules/tor/__init__.py:242 -#, python-brace-format -msgid "Access URL {url} on tcp{kind} via Tor" -msgstr "" - -#: plinth/modules/tor/__init__.py:253 -#, python-brace-format -msgid "Confirm Tor usage at {url} on tcp{kind}" -msgstr "" - #: plinth/modules/tor/forms.py:33 msgid "" "Enter a valid bridge with this format: [transport] IP:ORPort [fingerprint]" @@ -6737,11 +6746,11 @@ msgid "" "here. Currently supported transports are none, obfs3, obfs4 and scamblesuit." msgstr "" -#: plinth/modules/tor/forms.py:91 +#: plinth/modules/tor/forms.py:95 msgid "Enable Tor relay" msgstr "" -#: plinth/modules/tor/forms.py:92 +#: plinth/modules/tor/forms.py:96 #, python-brace-format msgid "" "When enabled, your {box_name} will run a Tor relay and donate bandwidth to " @@ -6749,24 +6758,24 @@ msgid "" "download bandwidth." msgstr "" -#: plinth/modules/tor/forms.py:97 +#: plinth/modules/tor/forms.py:101 msgid "Enable Tor bridge relay" msgstr "" -#: plinth/modules/tor/forms.py:99 +#: plinth/modules/tor/forms.py:103 msgid "" "When enabled, relay information is published in the Tor bridge database " "instead of public Tor relay database making it harder to censor this node. " "This helps others circumvent censorship." msgstr "" -#: plinth/modules/tor/forms.py:104 +#: plinth/modules/tor/forms.py:108 #, fuzzy #| msgid "Service" msgid "Enable Tor Onion Service" msgstr "سرویس" -#: plinth/modules/tor/forms.py:106 +#: plinth/modules/tor/forms.py:110 #, python-brace-format msgid "" "An onion service will allow {box_name} to provide selected services (such as " @@ -6774,26 +6783,15 @@ msgid "" "anonymity yet." msgstr "" -#: plinth/modules/tor/forms.py:111 -msgid "Download software packages over Tor" -msgstr "" - -#: plinth/modules/tor/forms.py:112 -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/forms.py:127 +#: plinth/modules/tor/forms.py:125 msgid "Specify at least one upstream bridge to use upstream bridges." msgstr "" -#: plinth/modules/tor/manifest.py:15 +#: plinth/modules/tor/manifest.py:15 plinth/modules/torproxy/manifest.py:14 msgid "Tor Browser" msgstr "" -#: plinth/modules/tor/manifest.py:31 +#: plinth/modules/tor/manifest.py:31 plinth/modules/torproxy/manifest.py:30 msgid "Orbot: Proxy with Tor" msgstr "" @@ -6807,18 +6805,56 @@ msgstr "سرویس" msgid "Ports" msgstr "" -#: plinth/modules/tor/views.py:53 +#: plinth/modules/tor/views.py:53 plinth/modules/torproxy/views.py:51 #, fuzzy #| msgid "Current Network Configuration" msgid "Updating configuration" msgstr "پیکربندی فعلی شبکه" -#: plinth/modules/tor/views.py:70 +#: plinth/modules/tor/views.py:70 plinth/modules/torproxy/views.py:68 #, fuzzy, python-brace-format #| msgid "Error installing application: {error}" msgid "Error configuring app: {error}" msgstr "خطا هنگام نصب برنامه: {error}" +#: plinth/modules/torproxy/__init__.py:34 +#, python-brace-format +msgid "" +"This app provides a web proxy on your {box_name} for internal networks on " +"TCP port 9050 using the SOCKS protocol. This can be used by various apps to " +"access the internet via the Tor network. ISP censorship can be circumvented " +"using upstream bridges." +msgstr "" + +#: plinth/modules/torproxy/__init__.py:54 +msgid "Tor Proxy" +msgstr "" + +#: plinth/modules/torproxy/__init__.py:79 +msgid "Tor Socks Proxy" +msgstr "" + +#: plinth/modules/torproxy/__init__.py:138 +#, python-brace-format +msgid "Access URL {url} on tcp{kind} via Tor" +msgstr "" + +#: plinth/modules/torproxy/__init__.py:149 +#, python-brace-format +msgid "Confirm Tor usage at {url} on tcp{kind}" +msgstr "" + +#: plinth/modules/torproxy/forms.py:15 +msgid "Download software packages over Tor" +msgstr "" + +#: plinth/modules/torproxy/forms.py:16 +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/transmission/__init__.py:25 msgid "Transmission is a BitTorrent client with a web interface." msgstr "دِلوگ (Transmission) یک برنامهٔ بیت‌تورنت با رابط کاربری تحت وب است." @@ -7161,14 +7197,14 @@ msgstr "" msgid "Starting distribution upgrade test." msgstr "برنامه نصب شد." -#: plinth/modules/users/__init__.py:29 +#: plinth/modules/users/__init__.py:30 msgid "" "Create and manage user accounts. These accounts serve as centralized " "authentication mechanism for most apps. Some apps further require a user " "account to be part of a group to authorize the user to access the app." msgstr "" -#: plinth/modules/users/__init__.py:34 +#: plinth/modules/users/__init__.py:35 #, python-brace-format msgid "" "Any user may login to {box_name} web interface to see a list of apps " @@ -7176,19 +7212,29 @@ msgid "" "group may alter apps or system settings." msgstr "" -#: plinth/modules/users/__init__.py:55 +#: plinth/modules/users/__init__.py:56 msgid "Users and Groups" msgstr "" -#: plinth/modules/users/__init__.py:80 +#: plinth/modules/users/__init__.py:81 msgid "Access to all services and system settings" msgstr "" -#: plinth/modules/users/__init__.py:116 +#: plinth/modules/users/__init__.py:124 #, python-brace-format msgid "Check LDAP entry \"{search_item}\"" msgstr "" +#: plinth/modules/users/__init__.py:137 +#, python-brace-format +msgid "Check nslcd config \"{key} {value}\"" +msgstr "" + +#: plinth/modules/users/__init__.py:166 +#, python-brace-format +msgid "Check nsswitch config \"{database}\"" +msgstr "" + #: plinth/modules/users/forms.py:35 msgid "Username is taken or is reserved." msgstr "" @@ -8347,7 +8393,11 @@ msgstr "" msgid "Backup" msgstr "ساختن اتصال" -#: plinth/templates/toolbar.html:51 plinth/templates/toolbar.html:52 +#: plinth/templates/toolbar.html:53 +msgid "Re-run setup" +msgstr "" + +#: plinth/templates/toolbar.html:59 plinth/templates/toolbar.html:60 #: plinth/templates/uninstall.html:30 #, fuzzy msgid "Uninstall" @@ -8365,11 +8415,11 @@ msgid "" "installed freshly again." msgstr "" -#: plinth/views.py:239 +#: plinth/views.py:241 msgid "Setting unchanged" msgstr "" -#: plinth/views.py:456 +#: plinth/views.py:478 #, python-brace-format msgid "before uninstall of {app_id}" msgstr "" @@ -9054,11 +9104,6 @@ msgstr "" #~ msgid "Error setting default app: {exception}" #~ msgstr "خطا در هنگام تنظیم زبان: {exception}" -#, fuzzy -#~| msgid "Default" -#~ msgid "Default app set" -#~ msgstr "پیش‌فرض" - #, fuzzy #~| msgid "NTP client in contact with servers" #~ msgid "chrony client in contact with servers" diff --git a/plinth/locale/fake/LC_MESSAGES/django.po b/plinth/locale/fake/LC_MESSAGES/django.po index eafe42c2b..8418fd349 100644 --- a/plinth/locale/fake/LC_MESSAGES/django.po +++ b/plinth/locale/fake/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Plinth 0.6\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-06-19 20:15-0400\n" +"POT-Creation-Date: 2023-07-31 20:04-0400\n" "PO-Revision-Date: 2016-01-31 22:24+0530\n" "Last-Translator: Sunil Mohan Adapa \n" "Language-Team: Plinth Developers " "TOR BROWSER." -#: plinth/modules/tor/__init__.py:30 -#, fuzzy, python-brace-format -#| msgid "A Tor SOCKS port is available on your %(box_name)s on TCP port 9050." +#: plinth/modules/tor/__init__.py:37 msgid "" -"A Tor SOCKS port is available on your {box_name} for internal networks on " -"TCP port 9050." -msgstr "A TOR SOCKS PORT IS AVAILABLE ON YOUR %(box_name)s ON TCP PORT 9050." +"This app provides relay services to contribute to Tor network and help " +"others overcome censorship." +msgstr "" -#: plinth/modules/tor/__init__.py:48 +#: plinth/modules/tor/__init__.py:40 +#, python-brace-format +msgid "" +"This app provides an onion domain to expose {box_name} services via the Tor " +"network. Using Tor browser, one can access {box_name} from the internet even " +"when using an ISP that limits servers at home." +msgstr "" + +#: plinth/modules/tor/__init__.py:60 msgid "Tor" msgstr "" -#: plinth/modules/tor/__init__.py:65 +#: plinth/modules/tor/__init__.py:76 #, fuzzy #| msgid "Tor Hidden Service" msgid "Tor Onion Service" msgstr "TOR HIDDEN SERVICE" -#: plinth/modules/tor/__init__.py:69 -msgid "Tor Socks Proxy" -msgstr "" - -#: plinth/modules/tor/__init__.py:73 +#: plinth/modules/tor/__init__.py:80 msgid "Tor Bridge Relay" msgstr "TOR BRIDGE RELAY" -#: plinth/modules/tor/__init__.py:132 +#: plinth/modules/tor/__init__.py:135 msgid "Tor relay port available" msgstr "TOR RELAY PORT AVAILABLE" -#: plinth/modules/tor/__init__.py:143 +#: plinth/modules/tor/__init__.py:146 msgid "Obfs3 transport registered" msgstr "OBFS3 TRANSPORT REGISTERED" -#: plinth/modules/tor/__init__.py:153 +#: plinth/modules/tor/__init__.py:156 msgid "Obfs4 transport registered" msgstr "OBFS4 TRANSPORT REGISTERED" -#: plinth/modules/tor/__init__.py:165 +#: plinth/modules/tor/__init__.py:168 #, fuzzy #| msgid "Hidden Service" msgid "Onion service is version 3" msgstr "HIDDEN SERVICE" -#: plinth/modules/tor/__init__.py:242 -#, 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:253 -#, python-brace-format -msgid "Confirm Tor usage at {url} on tcp{kind}" -msgstr "CONFIRM TOR USAGE AT {url} ON TCP{kind}" - #: plinth/modules/tor/forms.py:33 msgid "" "Enter a valid bridge with this format: [transport] IP:ORPort [fingerprint]" @@ -7115,13 +7123,13 @@ msgid "" "here. Currently supported transports are none, obfs3, obfs4 and scamblesuit." msgstr "" -#: plinth/modules/tor/forms.py:91 +#: plinth/modules/tor/forms.py:95 #, fuzzy #| msgid "Enable Tor" msgid "Enable Tor relay" msgstr "ENABLE TOR" -#: plinth/modules/tor/forms.py:92 +#: plinth/modules/tor/forms.py:96 #, python-brace-format msgid "" "When enabled, your {box_name} will run a Tor relay and donate bandwidth to " @@ -7129,26 +7137,26 @@ msgid "" "download bandwidth." msgstr "" -#: plinth/modules/tor/forms.py:97 +#: plinth/modules/tor/forms.py:101 #, fuzzy #| msgid "Tor Bridge Relay" msgid "Enable Tor bridge relay" msgstr "TOR BRIDGE RELAY" -#: plinth/modules/tor/forms.py:99 +#: plinth/modules/tor/forms.py:103 msgid "" "When enabled, relay information is published in the Tor bridge database " "instead of public Tor relay database making it harder to censor this node. " "This helps others circumvent censorship." msgstr "" -#: plinth/modules/tor/forms.py:104 +#: plinth/modules/tor/forms.py:108 #, fuzzy #| msgid "Enable Tor Hidden Service" msgid "Enable Tor Onion Service" msgstr "ENABLE TOR HIDDEN SERVICE" -#: plinth/modules/tor/forms.py:106 +#: plinth/modules/tor/forms.py:110 #, fuzzy, python-brace-format #| msgid "" #| "A hidden service will allow {box_name} to provide selected services (such " @@ -7161,29 +7169,15 @@ 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:111 -msgid "Download software packages over Tor" -msgstr "DOWNLOAD SOFTWARE PACKAGES OVER TOR" - -#: plinth/modules/tor/forms.py:112 -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/forms.py:127 +#: plinth/modules/tor/forms.py:125 msgid "Specify at least one upstream bridge to use upstream bridges." msgstr "" -#: plinth/modules/tor/manifest.py:15 +#: plinth/modules/tor/manifest.py:15 plinth/modules/torproxy/manifest.py:14 msgid "Tor Browser" msgstr "" -#: plinth/modules/tor/manifest.py:31 +#: plinth/modules/tor/manifest.py:31 plinth/modules/torproxy/manifest.py:30 msgid "Orbot: Proxy with Tor" msgstr "" @@ -7199,18 +7193,61 @@ msgstr "HIDDEN SERVICE" msgid "Ports" msgstr "PORT" -#: plinth/modules/tor/views.py:53 +#: plinth/modules/tor/views.py:53 plinth/modules/torproxy/views.py:51 #, fuzzy #| msgid "An error occurred during configuration." msgid "Updating configuration" msgstr "AN ERROR OCCURRED DURING CONFIGURATION." -#: plinth/modules/tor/views.py:70 +#: plinth/modules/tor/views.py:70 plinth/modules/torproxy/views.py:68 #, fuzzy, python-brace-format #| msgid "Error installing packages: {string} {details}" msgid "Error configuring app: {error}" msgstr "ERROR INSTALLING PACKAGES: {string} {details}" +#: plinth/modules/torproxy/__init__.py:34 +#, python-brace-format +msgid "" +"This app provides a web proxy on your {box_name} for internal networks on " +"TCP port 9050 using the SOCKS protocol. This can be used by various apps to " +"access the internet via the Tor network. ISP censorship can be circumvented " +"using upstream bridges." +msgstr "" + +#: plinth/modules/torproxy/__init__.py:54 +#, fuzzy +#| msgid "Privoxy Web Proxy" +msgid "Tor Proxy" +msgstr "PRIVOXY WEB PROXY" + +#: plinth/modules/torproxy/__init__.py:79 +msgid "Tor Socks Proxy" +msgstr "" + +#: plinth/modules/torproxy/__init__.py:138 +#, python-brace-format +msgid "Access URL {url} on tcp{kind} via Tor" +msgstr "ACCESS URL {url} ON TCP{kind} VIA TOR" + +#: plinth/modules/torproxy/__init__.py:149 +#, python-brace-format +msgid "Confirm Tor usage at {url} on tcp{kind}" +msgstr "CONFIRM TOR USAGE AT {url} ON TCP{kind}" + +#: plinth/modules/torproxy/forms.py:15 +msgid "Download software packages over Tor" +msgstr "DOWNLOAD SOFTWARE PACKAGES OVER TOR" + +#: plinth/modules/torproxy/forms.py:16 +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/transmission/__init__.py:25 #, fuzzy #| msgid "Deluge is a BitTorrent client that features a Web UI." @@ -7604,14 +7641,14 @@ msgstr "" msgid "Starting distribution upgrade test." msgstr "AUTOMATIC UPGRADES ENABLED" -#: plinth/modules/users/__init__.py:29 +#: plinth/modules/users/__init__.py:30 msgid "" "Create and manage user accounts. These accounts serve as centralized " "authentication mechanism for most apps. Some apps further require a user " "account to be part of a group to authorize the user to access the app." msgstr "" -#: plinth/modules/users/__init__.py:34 +#: plinth/modules/users/__init__.py:35 #, python-brace-format msgid "" "Any user may login to {box_name} web interface to see a list of apps " @@ -7619,19 +7656,29 @@ msgid "" "group may alter apps or system settings." msgstr "" -#: plinth/modules/users/__init__.py:55 +#: plinth/modules/users/__init__.py:56 msgid "Users and Groups" msgstr "USERS AND GROUPS" -#: plinth/modules/users/__init__.py:80 +#: plinth/modules/users/__init__.py:81 msgid "Access to all services and system settings" msgstr "" -#: plinth/modules/users/__init__.py:116 +#: plinth/modules/users/__init__.py:124 #, python-brace-format msgid "Check LDAP entry \"{search_item}\"" msgstr "CHECK LDAP ENTRY \"{search_item}\"" +#: plinth/modules/users/__init__.py:137 +#, python-brace-format +msgid "Check nslcd config \"{key} {value}\"" +msgstr "" + +#: plinth/modules/users/__init__.py:166 +#, python-brace-format +msgid "Check nsswitch config \"{database}\"" +msgstr "" + #: plinth/modules/users/forms.py:35 msgid "Username is taken or is reserved." msgstr "" @@ -8871,7 +8918,13 @@ msgstr "UPDATE URL" msgid "Backup" msgstr "PAGEKITE ACCOUNT" -#: plinth/templates/toolbar.html:51 plinth/templates/toolbar.html:52 +#: plinth/templates/toolbar.html:53 +#, fuzzy +#| msgid "Start setup" +msgid "Re-run setup" +msgstr "START SETUP" + +#: plinth/templates/toolbar.html:59 plinth/templates/toolbar.html:60 #: plinth/templates/uninstall.html:30 #, fuzzy #| msgid "Install" @@ -8890,11 +8943,11 @@ msgid "" "installed freshly again." msgstr "" -#: plinth/views.py:239 +#: plinth/views.py:241 msgid "Setting unchanged" msgstr "SETTING UNCHANGED" -#: plinth/views.py:456 +#: plinth/views.py:478 #, python-brace-format msgid "before uninstall of {app_id}" msgstr "" @@ -8903,6 +8956,15 @@ msgstr "" msgid "Gujarati" msgstr "" +#, fuzzy, python-brace-format +#~| msgid "" +#~| "A Tor SOCKS port is available on your %(box_name)s on TCP port 9050." +#~ msgid "" +#~ "A Tor SOCKS port is available on your {box_name} for internal networks on " +#~ "TCP port 9050." +#~ msgstr "" +#~ "A TOR SOCKS PORT IS AVAILABLE ON YOUR %(box_name)s ON TCP PORT 9050." + #, fuzzy #~| msgid "Web Server" #~ msgid "ChatSecure" @@ -9450,9 +9512,6 @@ msgstr "" #~ "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." -#~ msgid "Start setup" -#~ msgstr "START SETUP" - #~ msgid "OpenVPN setup is running" #~ msgstr "OPENVPN SETUP IS RUNNING" @@ -9856,11 +9915,6 @@ msgstr "" #~ msgid "Error setting default app: {exception}" #~ msgstr "ERROR SETTING LANGUAGE: {exception}" -#, fuzzy -#~| msgid "Default" -#~ msgid "Default app set" -#~ msgstr "DEFAULT" - #, fuzzy #~| msgid "NTP client in contact with servers" #~ msgid "chrony client in contact with servers" diff --git a/plinth/locale/fr/LC_MESSAGES/django.po b/plinth/locale/fr/LC_MESSAGES/django.po index b1f146c7b..9006249dd 100644 --- a/plinth/locale/fr/LC_MESSAGES/django.po +++ b/plinth/locale/fr/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: FreedomBox UI\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-06-19 20:15-0400\n" +"POT-Creation-Date: 2023-07-31 20:04-0400\n" "PO-Revision-Date: 2023-04-07 23:10+0000\n" "Last-Translator: Coucouf \n" "Language-Team: French Tor Project website. For " @@ -7082,59 +7098,50 @@ msgstr "" "recommande l’utilisation du Navigateur Tor." -#: plinth/modules/tor/__init__.py:30 +#: plinth/modules/tor/__init__.py:37 +msgid "" +"This app provides relay services to contribute to Tor network and help " +"others overcome censorship." +msgstr "" + +#: plinth/modules/tor/__init__.py:40 #, python-brace-format msgid "" -"A Tor SOCKS port is available on your {box_name} for internal networks on " -"TCP port 9050." +"This app provides an onion domain to expose {box_name} services via the Tor " +"network. Using Tor browser, one can access {box_name} from the internet even " +"when using an ISP that limits servers at home." msgstr "" -"Un port SOCKS pour Tor est accessible sur votre {box_name} pour les réseaux " -"internes via le port TCP 9050." -#: plinth/modules/tor/__init__.py:48 +#: plinth/modules/tor/__init__.py:60 msgid "Tor" msgstr "Tor" -#: plinth/modules/tor/__init__.py:65 +#: plinth/modules/tor/__init__.py:76 msgid "Tor Onion Service" msgstr "Service onion Tor" -#: plinth/modules/tor/__init__.py:69 -msgid "Tor Socks Proxy" -msgstr "Mandataire Socks Tor" - -#: plinth/modules/tor/__init__.py:73 +#: plinth/modules/tor/__init__.py:80 msgid "Tor Bridge Relay" msgstr "Relais Tor de type pont (« bridge relay »)" -#: plinth/modules/tor/__init__.py:132 +#: plinth/modules/tor/__init__.py:135 msgid "Tor relay port available" msgstr "Le port du relais Tor est disponible" -#: plinth/modules/tor/__init__.py:143 +#: plinth/modules/tor/__init__.py:146 msgid "Obfs3 transport registered" msgstr "Abonné au transport obfs3" -#: plinth/modules/tor/__init__.py:153 +#: plinth/modules/tor/__init__.py:156 msgid "Obfs4 transport registered" msgstr "Abonné au transport obfs4" -#: plinth/modules/tor/__init__.py:165 +#: plinth/modules/tor/__init__.py:168 #, fuzzy #| msgid "Onion Service" msgid "Onion service is version 3" msgstr "Service Onion" -#: plinth/modules/tor/__init__.py:242 -#, 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:253 -#, 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/forms.py:33 msgid "" "Enter a valid bridge with this format: [transport] IP:ORPort [fingerprint]" @@ -7171,11 +7178,11 @@ msgstr "" "coller les informations de pont ici. Les transports pris en charge " "actuellement sont aucun, obfs3, obfs4 et scamblesuit." -#: plinth/modules/tor/forms.py:91 +#: plinth/modules/tor/forms.py:95 msgid "Enable Tor relay" msgstr "Activer le relais Tor" -#: plinth/modules/tor/forms.py:92 +#: plinth/modules/tor/forms.py:96 #, python-brace-format msgid "" "When enabled, your {box_name} will run a Tor relay and donate bandwidth to " @@ -7187,11 +7194,11 @@ msgstr "" "disposez de plus de 2 mégabits/s de bande passante en téléversement et en " "téléchargement." -#: plinth/modules/tor/forms.py:97 +#: plinth/modules/tor/forms.py:101 msgid "Enable Tor bridge relay" msgstr "Activer le relais pont Tor" -#: plinth/modules/tor/forms.py:99 +#: plinth/modules/tor/forms.py:103 msgid "" "When enabled, relay information is published in the Tor bridge database " "instead of public Tor relay database making it harder to censor this node. " @@ -7202,13 +7209,13 @@ msgstr "" "relais Tor, rendant ainsi plus difficile la censure de ce nœud. Ceci aide " "d’autres personnes à contourner la censure." -#: plinth/modules/tor/forms.py:104 +#: plinth/modules/tor/forms.py:108 #, fuzzy #| msgid "Enable Tor Hidden Service" msgid "Enable Tor Onion Service" msgstr "Activer le service Tor caché" -#: plinth/modules/tor/forms.py:106 +#: plinth/modules/tor/forms.py:110 #, fuzzy, python-brace-format #| msgid "" #| "A hidden service will allow {box_name} to provide selected services (such " @@ -7223,30 +7230,15 @@ msgstr "" "services sélectionnés (comme un wiki ou un tchat) sans révéler son " "emplacement. Ne pas utiliser pour l’instant pour de l’anonymisation forte." -#: plinth/modules/tor/forms.py:111 -msgid "Download software packages over Tor" -msgstr "Téléchargez les paquets logiciels via Tor" - -#: plinth/modules/tor/forms.py:112 -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 "" -"En activant cette option, les logiciels seront téléchargés via le réseau Tor " -"lors des installations et des mises à niveau. Ce mode ajoute un niveau de " -"sécurité et de confidentialité supplémentaires pour le téléchargement des " -"logiciels." - -#: plinth/modules/tor/forms.py:127 +#: plinth/modules/tor/forms.py:125 msgid "Specify at least one upstream bridge to use upstream bridges." msgstr "Spécifiez au moins un pont upstream pour utiliser des ponts upstream." -#: plinth/modules/tor/manifest.py:15 +#: plinth/modules/tor/manifest.py:15 plinth/modules/torproxy/manifest.py:14 msgid "Tor Browser" msgstr "Navigateur Tor" -#: plinth/modules/tor/manifest.py:31 +#: plinth/modules/tor/manifest.py:31 plinth/modules/torproxy/manifest.py:30 msgid "Orbot: Proxy with Tor" msgstr "Orbot : Mandataire utilisant Tor" @@ -7258,15 +7250,59 @@ msgstr "Service Onion" msgid "Ports" msgstr "Ports" -#: plinth/modules/tor/views.py:53 +#: plinth/modules/tor/views.py:53 plinth/modules/torproxy/views.py:51 msgid "Updating configuration" msgstr "Mise à jour de la configuration" -#: plinth/modules/tor/views.py:70 +#: plinth/modules/tor/views.py:70 plinth/modules/torproxy/views.py:68 #, python-brace-format msgid "Error configuring app: {error}" msgstr "Erreur lors de la configuration de l’application : {error}" +#: plinth/modules/torproxy/__init__.py:34 +#, python-brace-format +msgid "" +"This app provides a web proxy on your {box_name} for internal networks on " +"TCP port 9050 using the SOCKS protocol. This can be used by various apps to " +"access the internet via the Tor network. ISP censorship can be circumvented " +"using upstream bridges." +msgstr "" + +#: plinth/modules/torproxy/__init__.py:54 +#, fuzzy +#| msgid "Tor Socks Proxy" +msgid "Tor Proxy" +msgstr "Mandataire Socks Tor" + +#: plinth/modules/torproxy/__init__.py:79 +msgid "Tor Socks Proxy" +msgstr "Mandataire Socks Tor" + +#: plinth/modules/torproxy/__init__.py:138 +#, 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/torproxy/__init__.py:149 +#, 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/torproxy/forms.py:15 +msgid "Download software packages over Tor" +msgstr "Téléchargez les paquets logiciels via Tor" + +#: plinth/modules/torproxy/forms.py:16 +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 "" +"En activant cette option, les logiciels seront téléchargés via le réseau Tor " +"lors des installations et des mises à niveau. Ce mode ajoute un niveau de " +"sécurité et de confidentialité supplémentaires pour le téléchargement des " +"logiciels." + #: plinth/modules/transmission/__init__.py:25 msgid "Transmission is a BitTorrent client with a web interface." msgstr "" @@ -7668,7 +7704,7 @@ msgstr "Mise à jour régulière des fonctionnalités activée." msgid "Starting distribution upgrade test." msgstr "Démarrage du test de mise à niveau de la distribution." -#: plinth/modules/users/__init__.py:29 +#: plinth/modules/users/__init__.py:30 msgid "" "Create and manage user accounts. These accounts serve as centralized " "authentication mechanism for most apps. Some apps further require a user " @@ -7679,7 +7715,7 @@ msgstr "" "Certaines applis demandent en outre que les comptes soient membres d’un " "groupe particulier pour pouvoir accéder à l’application." -#: plinth/modules/users/__init__.py:34 +#: plinth/modules/users/__init__.py:35 #, python-brace-format msgid "" "Any user may login to {box_name} web interface to see a list of apps " @@ -7691,19 +7727,29 @@ msgstr "" "principale. En revanche, seuls les utilisateurs membres du groupe admin peuvent modifier les applications ou changer les paramètres système." -#: plinth/modules/users/__init__.py:55 +#: plinth/modules/users/__init__.py:56 msgid "Users and Groups" msgstr "Utilisateurs et groupes" -#: plinth/modules/users/__init__.py:80 +#: plinth/modules/users/__init__.py:81 msgid "Access to all services and system settings" msgstr "Accès à tous les services et à la configuration du système" -#: plinth/modules/users/__init__.py:116 +#: plinth/modules/users/__init__.py:124 #, python-brace-format msgid "Check LDAP entry \"{search_item}\"" msgstr "Vérification de l’entrée LDAP « {search_item} »" +#: plinth/modules/users/__init__.py:137 +#, python-brace-format +msgid "Check nslcd config \"{key} {value}\"" +msgstr "" + +#: plinth/modules/users/__init__.py:166 +#, python-brace-format +msgid "Check nsswitch config \"{database}\"" +msgstr "" + #: plinth/modules/users/forms.py:35 msgid "Username is taken or is reserved." msgstr "Le nom d’utilisateur est déjà pris ou est réservé." @@ -8917,7 +8963,13 @@ msgstr "Mettre à jour" msgid "Backup" msgstr "Sauvegarder" -#: plinth/templates/toolbar.html:51 plinth/templates/toolbar.html:52 +#: plinth/templates/toolbar.html:53 +#, fuzzy +#| msgid "Start setup" +msgid "Re-run setup" +msgstr "Démarrer l’installation" + +#: plinth/templates/toolbar.html:59 plinth/templates/toolbar.html:60 #: plinth/templates/uninstall.html:30 msgid "Uninstall" msgstr "Désinstaller" @@ -8935,11 +8987,11 @@ msgstr "" "L’ensemble données de l’appli et sa configuration seront définitivement " "perdus. Un appli peut toujours être réinstallée de zéro." -#: plinth/views.py:239 +#: plinth/views.py:241 msgid "Setting unchanged" msgstr "Paramètre inchangé" -#: plinth/views.py:456 +#: plinth/views.py:478 #, python-brace-format msgid "before uninstall of {app_id}" msgstr "avant la désinstallation de {app_id}" @@ -8948,6 +9000,14 @@ msgstr "avant la désinstallation de {app_id}" msgid "Gujarati" msgstr "Gujarati" +#, python-brace-format +#~ msgid "" +#~ "A Tor SOCKS port is available on your {box_name} for internal networks on " +#~ "TCP port 9050." +#~ msgstr "" +#~ "Un port SOCKS pour Tor est accessible sur votre {box_name} pour les " +#~ "réseaux internes via le port TCP 9050." + #, python-brace-format #~ msgid "" #~ "When enabled, text box for server input is removed from login page and " @@ -9776,9 +9836,6 @@ msgstr "Gujarati" #~ "%(box_name)s, cela peut prendre jusqu’à plusieurs heures. Si " #~ "l'installation est interrompue, vous devrez la relancer intégralement." -#~ msgid "Start setup" -#~ msgstr "Démarrer l’installation" - #~ msgid "OpenVPN setup is running" #~ msgstr "L’installation d’OpenVPN est en cours" @@ -10453,11 +10510,6 @@ msgstr "Gujarati" #~ msgid "Error setting default app: {exception}" #~ msgstr "Erreur lors de la configuration de la langue : {exception}" -#, fuzzy -#~| msgid "Default" -#~ msgid "Default app set" -#~ msgstr "Défaut" - #~ msgid "Abort" #~ msgstr "Annuler" diff --git a/plinth/locale/gl/LC_MESSAGES/django.po b/plinth/locale/gl/LC_MESSAGES/django.po index 5f8f9ec8a..408909d8e 100644 --- a/plinth/locale/gl/LC_MESSAGES/django.po +++ b/plinth/locale/gl/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-06-19 20:15-0400\n" +"POT-Creation-Date: 2023-07-31 20:04-0400\n" "PO-Revision-Date: 2022-12-30 10:51+0000\n" "Last-Translator: gallegonovato \n" "Language-Team: Galician Tor Project website. For " @@ -6045,55 +6059,48 @@ msgid "" "en\">Tor Browser." msgstr "" -#: plinth/modules/tor/__init__.py:30 -#, python-brace-format +#: plinth/modules/tor/__init__.py:37 msgid "" -"A Tor SOCKS port is available on your {box_name} for internal networks on " -"TCP port 9050." +"This app provides relay services to contribute to Tor network and help " +"others overcome censorship." msgstr "" -#: plinth/modules/tor/__init__.py:48 +#: plinth/modules/tor/__init__.py:40 +#, python-brace-format +msgid "" +"This app provides an onion domain to expose {box_name} services via the Tor " +"network. Using Tor browser, one can access {box_name} from the internet even " +"when using an ISP that limits servers at home." +msgstr "" + +#: plinth/modules/tor/__init__.py:60 msgid "Tor" msgstr "" -#: plinth/modules/tor/__init__.py:65 +#: plinth/modules/tor/__init__.py:76 msgid "Tor Onion Service" msgstr "" -#: plinth/modules/tor/__init__.py:69 -msgid "Tor Socks Proxy" -msgstr "" - -#: plinth/modules/tor/__init__.py:73 +#: plinth/modules/tor/__init__.py:80 msgid "Tor Bridge Relay" msgstr "" -#: plinth/modules/tor/__init__.py:132 +#: plinth/modules/tor/__init__.py:135 msgid "Tor relay port available" msgstr "" -#: plinth/modules/tor/__init__.py:143 +#: plinth/modules/tor/__init__.py:146 msgid "Obfs3 transport registered" msgstr "" -#: plinth/modules/tor/__init__.py:153 +#: plinth/modules/tor/__init__.py:156 msgid "Obfs4 transport registered" msgstr "" -#: plinth/modules/tor/__init__.py:165 +#: plinth/modules/tor/__init__.py:168 msgid "Onion service is version 3" msgstr "" -#: plinth/modules/tor/__init__.py:242 -#, python-brace-format -msgid "Access URL {url} on tcp{kind} via Tor" -msgstr "" - -#: plinth/modules/tor/__init__.py:253 -#, python-brace-format -msgid "Confirm Tor usage at {url} on tcp{kind}" -msgstr "" - #: plinth/modules/tor/forms.py:33 msgid "" "Enter a valid bridge with this format: [transport] IP:ORPort [fingerprint]" @@ -6121,11 +6128,11 @@ msgid "" "here. Currently supported transports are none, obfs3, obfs4 and scamblesuit." msgstr "" -#: plinth/modules/tor/forms.py:91 +#: plinth/modules/tor/forms.py:95 msgid "Enable Tor relay" msgstr "" -#: plinth/modules/tor/forms.py:92 +#: plinth/modules/tor/forms.py:96 #, python-brace-format msgid "" "When enabled, your {box_name} will run a Tor relay and donate bandwidth to " @@ -6133,22 +6140,22 @@ msgid "" "download bandwidth." msgstr "" -#: plinth/modules/tor/forms.py:97 +#: plinth/modules/tor/forms.py:101 msgid "Enable Tor bridge relay" msgstr "" -#: plinth/modules/tor/forms.py:99 +#: plinth/modules/tor/forms.py:103 msgid "" "When enabled, relay information is published in the Tor bridge database " "instead of public Tor relay database making it harder to censor this node. " "This helps others circumvent censorship." msgstr "" -#: plinth/modules/tor/forms.py:104 +#: plinth/modules/tor/forms.py:108 msgid "Enable Tor Onion Service" msgstr "" -#: plinth/modules/tor/forms.py:106 +#: plinth/modules/tor/forms.py:110 #, python-brace-format msgid "" "An onion service will allow {box_name} to provide selected services (such as " @@ -6156,26 +6163,15 @@ msgid "" "anonymity yet." msgstr "" -#: plinth/modules/tor/forms.py:111 -msgid "Download software packages over Tor" -msgstr "" - -#: plinth/modules/tor/forms.py:112 -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/forms.py:127 +#: plinth/modules/tor/forms.py:125 msgid "Specify at least one upstream bridge to use upstream bridges." msgstr "" -#: plinth/modules/tor/manifest.py:15 +#: plinth/modules/tor/manifest.py:15 plinth/modules/torproxy/manifest.py:14 msgid "Tor Browser" msgstr "" -#: plinth/modules/tor/manifest.py:31 +#: plinth/modules/tor/manifest.py:31 plinth/modules/torproxy/manifest.py:30 msgid "Orbot: Proxy with Tor" msgstr "" @@ -6187,16 +6183,54 @@ msgstr "" msgid "Ports" msgstr "" -#: plinth/modules/tor/views.py:53 +#: plinth/modules/tor/views.py:53 plinth/modules/torproxy/views.py:51 msgid "Updating configuration" msgstr "" -#: plinth/modules/tor/views.py:70 +#: plinth/modules/tor/views.py:70 plinth/modules/torproxy/views.py:68 #, fuzzy, python-brace-format #| msgid "Error installing application: {error}" msgid "Error configuring app: {error}" msgstr "Produciuse un erro ao instalar o aplicativo: {error}" +#: plinth/modules/torproxy/__init__.py:34 +#, python-brace-format +msgid "" +"This app provides a web proxy on your {box_name} for internal networks on " +"TCP port 9050 using the SOCKS protocol. This can be used by various apps to " +"access the internet via the Tor network. ISP censorship can be circumvented " +"using upstream bridges." +msgstr "" + +#: plinth/modules/torproxy/__init__.py:54 +msgid "Tor Proxy" +msgstr "" + +#: plinth/modules/torproxy/__init__.py:79 +msgid "Tor Socks Proxy" +msgstr "" + +#: plinth/modules/torproxy/__init__.py:138 +#, python-brace-format +msgid "Access URL {url} on tcp{kind} via Tor" +msgstr "" + +#: plinth/modules/torproxy/__init__.py:149 +#, python-brace-format +msgid "Confirm Tor usage at {url} on tcp{kind}" +msgstr "" + +#: plinth/modules/torproxy/forms.py:15 +msgid "Download software packages over Tor" +msgstr "" + +#: plinth/modules/torproxy/forms.py:16 +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/transmission/__init__.py:25 msgid "Transmission is a BitTorrent client with a web interface." msgstr "" @@ -6528,14 +6562,14 @@ msgstr "" msgid "Starting distribution upgrade test." msgstr "" -#: plinth/modules/users/__init__.py:29 +#: plinth/modules/users/__init__.py:30 msgid "" "Create and manage user accounts. These accounts serve as centralized " "authentication mechanism for most apps. Some apps further require a user " "account to be part of a group to authorize the user to access the app." msgstr "" -#: plinth/modules/users/__init__.py:34 +#: plinth/modules/users/__init__.py:35 #, python-brace-format msgid "" "Any user may login to {box_name} web interface to see a list of apps " @@ -6543,19 +6577,29 @@ msgid "" "group may alter apps or system settings." msgstr "" -#: plinth/modules/users/__init__.py:55 +#: plinth/modules/users/__init__.py:56 msgid "Users and Groups" msgstr "" -#: plinth/modules/users/__init__.py:80 +#: plinth/modules/users/__init__.py:81 msgid "Access to all services and system settings" msgstr "" -#: plinth/modules/users/__init__.py:116 +#: plinth/modules/users/__init__.py:124 #, python-brace-format msgid "Check LDAP entry \"{search_item}\"" msgstr "" +#: plinth/modules/users/__init__.py:137 +#, python-brace-format +msgid "Check nslcd config \"{key} {value}\"" +msgstr "" + +#: plinth/modules/users/__init__.py:166 +#, python-brace-format +msgid "Check nsswitch config \"{database}\"" +msgstr "" + #: plinth/modules/users/forms.py:35 msgid "Username is taken or is reserved." msgstr "" @@ -7640,7 +7684,11 @@ msgstr "" msgid "Backup" msgstr "" -#: plinth/templates/toolbar.html:51 plinth/templates/toolbar.html:52 +#: plinth/templates/toolbar.html:53 +msgid "Re-run setup" +msgstr "" + +#: plinth/templates/toolbar.html:59 plinth/templates/toolbar.html:60 #: plinth/templates/uninstall.html:30 #, fuzzy #| msgid "Application installed." @@ -7658,11 +7706,11 @@ msgid "" "installed freshly again." msgstr "" -#: plinth/views.py:239 +#: plinth/views.py:241 msgid "Setting unchanged" msgstr "" -#: plinth/views.py:456 +#: plinth/views.py:478 #, python-brace-format msgid "before uninstall of {app_id}" msgstr "" diff --git a/plinth/locale/gu/LC_MESSAGES/django.po b/plinth/locale/gu/LC_MESSAGES/django.po index 2cee1bf66..9ca9f0e37 100644 --- a/plinth/locale/gu/LC_MESSAGES/django.po +++ b/plinth/locale/gu/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-06-19 20:15-0400\n" +"POT-Creation-Date: 2023-07-31 20:04-0400\n" "PO-Revision-Date: 2021-01-18 12:32+0000\n" "Last-Translator: ikmaak \n" "Language-Team: Gujarati Tor Project website. For " @@ -6323,57 +6337,50 @@ msgid "" "en\">Tor Browser." msgstr "" -#: plinth/modules/tor/__init__.py:30 -#, python-brace-format +#: plinth/modules/tor/__init__.py:37 msgid "" -"A Tor SOCKS port is available on your {box_name} for internal networks on " -"TCP port 9050." +"This app provides relay services to contribute to Tor network and help " +"others overcome censorship." msgstr "" -#: plinth/modules/tor/__init__.py:48 +#: plinth/modules/tor/__init__.py:40 +#, python-brace-format +msgid "" +"This app provides an onion domain to expose {box_name} services via the Tor " +"network. Using Tor browser, one can access {box_name} from the internet even " +"when using an ISP that limits servers at home." +msgstr "" + +#: plinth/modules/tor/__init__.py:60 msgid "Tor" msgstr "" -#: plinth/modules/tor/__init__.py:65 +#: plinth/modules/tor/__init__.py:76 msgid "Tor Onion Service" msgstr "" -#: plinth/modules/tor/__init__.py:69 -msgid "Tor Socks Proxy" -msgstr "" - -#: plinth/modules/tor/__init__.py:73 +#: plinth/modules/tor/__init__.py:80 msgid "Tor Bridge Relay" msgstr "" -#: plinth/modules/tor/__init__.py:132 +#: plinth/modules/tor/__init__.py:135 msgid "Tor relay port available" msgstr "" -#: plinth/modules/tor/__init__.py:143 +#: plinth/modules/tor/__init__.py:146 msgid "Obfs3 transport registered" msgstr "" -#: plinth/modules/tor/__init__.py:153 +#: plinth/modules/tor/__init__.py:156 msgid "Obfs4 transport registered" msgstr "" -#: plinth/modules/tor/__init__.py:165 +#: plinth/modules/tor/__init__.py:168 #, fuzzy #| msgid "Dynamic DNS Service" msgid "Onion service is version 3" msgstr "ડાયનેમિક DNS સેવા" -#: plinth/modules/tor/__init__.py:242 -#, python-brace-format -msgid "Access URL {url} on tcp{kind} via Tor" -msgstr "" - -#: plinth/modules/tor/__init__.py:253 -#, python-brace-format -msgid "Confirm Tor usage at {url} on tcp{kind}" -msgstr "" - #: plinth/modules/tor/forms.py:33 msgid "" "Enter a valid bridge with this format: [transport] IP:ORPort [fingerprint]" @@ -6401,11 +6408,11 @@ msgid "" "here. Currently supported transports are none, obfs3, obfs4 and scamblesuit." msgstr "" -#: plinth/modules/tor/forms.py:91 +#: plinth/modules/tor/forms.py:95 msgid "Enable Tor relay" msgstr "" -#: plinth/modules/tor/forms.py:92 +#: plinth/modules/tor/forms.py:96 #, python-brace-format msgid "" "When enabled, your {box_name} will run a Tor relay and donate bandwidth to " @@ -6413,24 +6420,24 @@ msgid "" "download bandwidth." msgstr "" -#: plinth/modules/tor/forms.py:97 +#: plinth/modules/tor/forms.py:101 msgid "Enable Tor bridge relay" msgstr "" -#: plinth/modules/tor/forms.py:99 +#: plinth/modules/tor/forms.py:103 msgid "" "When enabled, relay information is published in the Tor bridge database " "instead of public Tor relay database making it harder to censor this node. " "This helps others circumvent censorship." msgstr "" -#: plinth/modules/tor/forms.py:104 +#: plinth/modules/tor/forms.py:108 #, fuzzy #| msgid "Dynamic DNS Service" msgid "Enable Tor Onion Service" msgstr "ડાયનેમિક DNS સેવા" -#: plinth/modules/tor/forms.py:106 +#: plinth/modules/tor/forms.py:110 #, python-brace-format msgid "" "An onion service will allow {box_name} to provide selected services (such as " @@ -6438,26 +6445,15 @@ msgid "" "anonymity yet." msgstr "" -#: plinth/modules/tor/forms.py:111 -msgid "Download software packages over Tor" -msgstr "" - -#: plinth/modules/tor/forms.py:112 -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/forms.py:127 +#: plinth/modules/tor/forms.py:125 msgid "Specify at least one upstream bridge to use upstream bridges." msgstr "" -#: plinth/modules/tor/manifest.py:15 +#: plinth/modules/tor/manifest.py:15 plinth/modules/torproxy/manifest.py:14 msgid "Tor Browser" msgstr "" -#: plinth/modules/tor/manifest.py:31 +#: plinth/modules/tor/manifest.py:31 plinth/modules/torproxy/manifest.py:30 msgid "Orbot: Proxy with Tor" msgstr "" @@ -6471,18 +6467,56 @@ msgstr "ડાયનેમિક DNS સેવા" msgid "Ports" msgstr "" -#: plinth/modules/tor/views.py:53 +#: plinth/modules/tor/views.py:53 plinth/modules/torproxy/views.py:51 #, fuzzy #| msgid "General Configuration" msgid "Updating configuration" msgstr "સામાન્ય ગોઠવણી" -#: plinth/modules/tor/views.py:70 +#: plinth/modules/tor/views.py:70 plinth/modules/torproxy/views.py:68 #, fuzzy, python-brace-format #| msgid "Error installing application: {error}" msgid "Error configuring app: {error}" msgstr "એપ્લીકેશન પ્રસ્થાપિત કરતાં ભૂલ થઇ છે: {error}" +#: plinth/modules/torproxy/__init__.py:34 +#, python-brace-format +msgid "" +"This app provides a web proxy on your {box_name} for internal networks on " +"TCP port 9050 using the SOCKS protocol. This can be used by various apps to " +"access the internet via the Tor network. ISP censorship can be circumvented " +"using upstream bridges." +msgstr "" + +#: plinth/modules/torproxy/__init__.py:54 +msgid "Tor Proxy" +msgstr "" + +#: plinth/modules/torproxy/__init__.py:79 +msgid "Tor Socks Proxy" +msgstr "" + +#: plinth/modules/torproxy/__init__.py:138 +#, python-brace-format +msgid "Access URL {url} on tcp{kind} via Tor" +msgstr "" + +#: plinth/modules/torproxy/__init__.py:149 +#, python-brace-format +msgid "Confirm Tor usage at {url} on tcp{kind}" +msgstr "" + +#: plinth/modules/torproxy/forms.py:15 +msgid "Download software packages over Tor" +msgstr "" + +#: plinth/modules/torproxy/forms.py:16 +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/transmission/__init__.py:25 msgid "Transmission is a BitTorrent client with a web interface." msgstr "Transmission બીટ ટોરેન્ટ ક્લાયન્ટ છે જે વેબ UI ધરાવે છે." @@ -6838,14 +6872,14 @@ msgstr "" msgid "Starting distribution upgrade test." msgstr "વપરાશકર્તા રજીસ્ટ્રેશન અક્ષમ છે" -#: plinth/modules/users/__init__.py:29 +#: plinth/modules/users/__init__.py:30 msgid "" "Create and manage user accounts. These accounts serve as centralized " "authentication mechanism for most apps. Some apps further require a user " "account to be part of a group to authorize the user to access the app." msgstr "" -#: plinth/modules/users/__init__.py:34 +#: plinth/modules/users/__init__.py:35 #, python-brace-format msgid "" "Any user may login to {box_name} web interface to see a list of apps " @@ -6853,19 +6887,29 @@ msgid "" "group may alter apps or system settings." msgstr "" -#: plinth/modules/users/__init__.py:55 +#: plinth/modules/users/__init__.py:56 msgid "Users and Groups" msgstr "" -#: plinth/modules/users/__init__.py:80 +#: plinth/modules/users/__init__.py:81 msgid "Access to all services and system settings" msgstr "" -#: plinth/modules/users/__init__.py:116 +#: plinth/modules/users/__init__.py:124 #, python-brace-format msgid "Check LDAP entry \"{search_item}\"" msgstr "" +#: plinth/modules/users/__init__.py:137 +#, python-brace-format +msgid "Check nslcd config \"{key} {value}\"" +msgstr "" + +#: plinth/modules/users/__init__.py:166 +#, python-brace-format +msgid "Check nsswitch config \"{database}\"" +msgstr "" + #: plinth/modules/users/forms.py:35 msgid "Username is taken or is reserved." msgstr "" @@ -7997,7 +8041,11 @@ msgstr "" msgid "Backup" msgstr "" -#: plinth/templates/toolbar.html:51 plinth/templates/toolbar.html:52 +#: plinth/templates/toolbar.html:53 +msgid "Re-run setup" +msgstr "" + +#: plinth/templates/toolbar.html:59 plinth/templates/toolbar.html:60 #: plinth/templates/uninstall.html:30 #, fuzzy #| msgid "Application installed." @@ -8015,11 +8063,11 @@ msgid "" "installed freshly again." msgstr "" -#: plinth/views.py:239 +#: plinth/views.py:241 msgid "Setting unchanged" msgstr "સેટિંગ યથાવત" -#: plinth/views.py:456 +#: plinth/views.py:478 #, python-brace-format msgid "before uninstall of {app_id}" msgstr "" diff --git a/plinth/locale/hi/LC_MESSAGES/django.po b/plinth/locale/hi/LC_MESSAGES/django.po index 2fad4a6b8..6be17db76 100644 --- a/plinth/locale/hi/LC_MESSAGES/django.po +++ b/plinth/locale/hi/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-06-19 20:15-0400\n" +"POT-Creation-Date: 2023-07-31 20:04-0400\n" "PO-Revision-Date: 2021-01-18 12:32+0000\n" "Last-Translator: ikmaak \n" "Language-Team: Hindi %(service_name)s is available only on internal networks." @@ -2884,7 +2899,8 @@ msgstr "एप्लिकेशन सक्षम करें" msgid "I2P" msgstr "" -#: plinth/modules/i2p/__init__.py:53 plinth/modules/tor/__init__.py:49 +#: plinth/modules/i2p/__init__.py:53 plinth/modules/tor/__init__.py:61 +#: plinth/modules/torproxy/__init__.py:55 msgid "Anonymity Network" msgstr "गुमनामी नेटवर्क" @@ -5455,7 +5471,7 @@ msgstr "प्रिवोक्सी" msgid "Web Proxy" msgstr "वेब प्रॉक्सी" -#: plinth/modules/privoxy/__init__.py:113 +#: plinth/modules/privoxy/__init__.py:114 #, python-brace-format msgid "Access {url} with proxy {proxy} on tcp{kind}" msgstr "{url} ऐकसेस करें प्रॉक्सी लेकर {proxy} टीसीपी पर{kind}" @@ -6938,7 +6954,7 @@ msgstr "सिंकतिन्ग" msgid "File Synchronization" msgstr "फ़ाइल सिंक्रनाइज़ेशन" -#: plinth/modules/tor/__init__.py:23 +#: plinth/modules/tor/__init__.py:31 plinth/modules/torproxy/__init__.py:27 msgid "" "Tor is an anonymous communication system. You can learn more about it from " "the Tor Project website. For " @@ -6951,60 +6967,52 @@ msgstr "" "टो प्रोजेक्ट सिफारिश की है कि आप टो ब्राउज़र उपयोग करें." -#: plinth/modules/tor/__init__.py:30 -#, fuzzy, python-brace-format -#| msgid "A Tor SOCKS port is available on your %(box_name)s on TCP port 9050." +#: plinth/modules/tor/__init__.py:37 msgid "" -"A Tor SOCKS port is available on your {box_name} for internal networks on " -"TCP port 9050." -msgstr "एक टोर सॉक्स पोर्ट आपका %(box_name)s र उपलब्ध है, TCP पोर्ट ९०५० पर." +"This app provides relay services to contribute to Tor network and help " +"others overcome censorship." +msgstr "" -#: plinth/modules/tor/__init__.py:48 +#: plinth/modules/tor/__init__.py:40 +#, python-brace-format +msgid "" +"This app provides an onion domain to expose {box_name} services via the Tor " +"network. Using Tor browser, one can access {box_name} from the internet even " +"when using an ISP that limits servers at home." +msgstr "" + +#: plinth/modules/tor/__init__.py:60 msgid "Tor" msgstr "टोर" -#: plinth/modules/tor/__init__.py:65 +#: plinth/modules/tor/__init__.py:76 #, fuzzy #| msgid "Tor Hidden Service" msgid "Tor Onion Service" msgstr "टोर हिडन सर्विस" -#: plinth/modules/tor/__init__.py:69 -msgid "Tor Socks Proxy" -msgstr "टोर सोक्स प्रॉक्सी" - -#: plinth/modules/tor/__init__.py:73 +#: plinth/modules/tor/__init__.py:80 msgid "Tor Bridge Relay" msgstr "टो ब्रिज रीले" -#: plinth/modules/tor/__init__.py:132 +#: plinth/modules/tor/__init__.py:135 msgid "Tor relay port available" msgstr "टोर रीले पोर्ट उपलब्ध है" -#: plinth/modules/tor/__init__.py:143 +#: plinth/modules/tor/__init__.py:146 msgid "Obfs3 transport registered" msgstr "Obfs3 ट्रांसपोर्ट पंजीकृत" -#: plinth/modules/tor/__init__.py:153 +#: plinth/modules/tor/__init__.py:156 msgid "Obfs4 transport registered" msgstr "Obfs4 ट्रांसपोर्ट पंजीकृत" -#: plinth/modules/tor/__init__.py:165 +#: plinth/modules/tor/__init__.py:168 #, fuzzy #| msgid "Hidden Service" msgid "Onion service is version 3" msgstr "हिडन सर्विस" -#: plinth/modules/tor/__init__.py:242 -#, python-brace-format -msgid "Access URL {url} on tcp{kind} via Tor" -msgstr "यूआरएल एक्सेस करें {url} टीसीपी पर {kind} टोर के माध्यम से" - -#: plinth/modules/tor/__init__.py:253 -#, python-brace-format -msgid "Confirm Tor usage at {url} on tcp{kind}" -msgstr "टोर उपयोग की पुष्टि करें {url} पर टीसीपी पर {kind}" - #: plinth/modules/tor/forms.py:33 msgid "" "Enter a valid bridge with this format: [transport] IP:ORPort [fingerprint]" @@ -7039,11 +7047,11 @@ msgstr "" "\">https://bridges.torproject.org/ और ब्रिज जानकारी यहाॅं से कॉपी/पेस्ट कर सकते " "हैं. वर्तमान में समर्थित ट्रांसपोर्ट्स कोई नहीं, obfs3, obfs4 और scamblesuit हैं." -#: plinth/modules/tor/forms.py:91 +#: plinth/modules/tor/forms.py:95 msgid "Enable Tor relay" msgstr "टोर रीले सक्षम करें" -#: plinth/modules/tor/forms.py:92 +#: plinth/modules/tor/forms.py:96 #, python-brace-format msgid "" "When enabled, your {box_name} will run a Tor relay and donate bandwidth to " @@ -7054,11 +7062,11 @@ msgstr "" "अगर आपके पास दो से अधिक मेगाबिट से अपलोड \n" "आैर डाउनलोड बैंडविड्थ है यह करें." -#: plinth/modules/tor/forms.py:97 +#: plinth/modules/tor/forms.py:101 msgid "Enable Tor bridge relay" msgstr "टोर ब्रिज रीले सक्षम करें" -#: plinth/modules/tor/forms.py:99 +#: plinth/modules/tor/forms.py:103 msgid "" "When enabled, relay information is published in the Tor bridge database " "instead of public Tor relay database making it harder to censor this node. " @@ -7068,13 +7076,13 @@ msgstr "" "और इस नोड सेंसर करने के लिए और मुश्किल होगा. यह दूसरों को सेंसरशिप से टाल करने के लिये मदद " "करता है." -#: plinth/modules/tor/forms.py:104 +#: plinth/modules/tor/forms.py:108 #, fuzzy #| msgid "Enable Tor Hidden Service" msgid "Enable Tor Onion Service" msgstr "टोर हिडन सर्विस सक्षम करें" -#: plinth/modules/tor/forms.py:106 +#: plinth/modules/tor/forms.py:110 #, fuzzy, python-brace-format #| msgid "" #| "A hidden service will allow {box_name} to provide selected services (such " @@ -7088,28 +7096,15 @@ msgstr "" "हिडन सर्विस {box_name} को इसके स्थान को प्रकट किए बिना चयनित सर्विसस प्रदान करने की " "अनुमति देगी. स्ट्रॉन्ग गुमनामी के लिए इससे अभी न करें." -#: plinth/modules/tor/forms.py:111 -msgid "Download software packages over Tor" -msgstr "टो पर सॉफ्टवेयर पैकेजस डाउनलोड करें" - -#: plinth/modules/tor/forms.py:112 -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/forms.py:127 +#: plinth/modules/tor/forms.py:125 msgid "Specify at least one upstream bridge to use upstream bridges." msgstr "अपस्ट्रीम ब्रिजस उपयोग करने के लिए एक अपस्ट्रीम ब्रिजस निर्दिष्ट करें." -#: plinth/modules/tor/manifest.py:15 +#: plinth/modules/tor/manifest.py:15 plinth/modules/torproxy/manifest.py:14 msgid "Tor Browser" msgstr "टोर ब्राउजर" -#: plinth/modules/tor/manifest.py:31 +#: plinth/modules/tor/manifest.py:31 plinth/modules/torproxy/manifest.py:30 msgid "Orbot: Proxy with Tor" msgstr "अोरबोट: टोर के साथ प्रॉक्सी" @@ -7123,18 +7118,60 @@ msgstr "हिडन सर्विस" msgid "Ports" msgstr "पोर्टस" -#: plinth/modules/tor/views.py:53 +#: plinth/modules/tor/views.py:53 plinth/modules/torproxy/views.py:51 #, fuzzy #| msgid "An error occurred during configuration." msgid "Updating configuration" msgstr "कॉंफ़िगरेशन के दौरान कूछ त्रुटि हुई." -#: plinth/modules/tor/views.py:70 +#: plinth/modules/tor/views.py:70 plinth/modules/torproxy/views.py:68 #, fuzzy, python-brace-format #| msgid "Error installing application: {error}" msgid "Error configuring app: {error}" msgstr "एप्लिकेशन नहीं इंस्टॉल जा सकता: {error}" +#: plinth/modules/torproxy/__init__.py:34 +#, python-brace-format +msgid "" +"This app provides a web proxy on your {box_name} for internal networks on " +"TCP port 9050 using the SOCKS protocol. This can be used by various apps to " +"access the internet via the Tor network. ISP censorship can be circumvented " +"using upstream bridges." +msgstr "" + +#: plinth/modules/torproxy/__init__.py:54 +#, fuzzy +#| msgid "Tor Socks Proxy" +msgid "Tor Proxy" +msgstr "टोर सोक्स प्रॉक्सी" + +#: plinth/modules/torproxy/__init__.py:79 +msgid "Tor Socks Proxy" +msgstr "टोर सोक्स प्रॉक्सी" + +#: plinth/modules/torproxy/__init__.py:138 +#, python-brace-format +msgid "Access URL {url} on tcp{kind} via Tor" +msgstr "यूआरएल एक्सेस करें {url} टीसीपी पर {kind} टोर के माध्यम से" + +#: plinth/modules/torproxy/__init__.py:149 +#, python-brace-format +msgid "Confirm Tor usage at {url} on tcp{kind}" +msgstr "टोर उपयोग की पुष्टि करें {url} पर टीसीपी पर {kind}" + +#: plinth/modules/torproxy/forms.py:15 +msgid "Download software packages over Tor" +msgstr "टो पर सॉफ्टवेयर पैकेजस डाउनलोड करें" + +#: plinth/modules/torproxy/forms.py:16 +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/transmission/__init__.py:25 #, fuzzy #| msgid "Deluge is a BitTorrent client that features a Web UI." @@ -7543,14 +7580,14 @@ msgstr "" msgid "Starting distribution upgrade test." msgstr "ऑटोमेटिक अपग्रेडस सक्षम किया गया" -#: plinth/modules/users/__init__.py:29 +#: plinth/modules/users/__init__.py:30 msgid "" "Create and manage user accounts. These accounts serve as centralized " "authentication mechanism for most apps. Some apps further require a user " "account to be part of a group to authorize the user to access the app." msgstr "" -#: plinth/modules/users/__init__.py:34 +#: plinth/modules/users/__init__.py:35 #, python-brace-format msgid "" "Any user may login to {box_name} web interface to see a list of apps " @@ -7558,19 +7595,29 @@ msgid "" "group may alter apps or system settings." msgstr "" -#: plinth/modules/users/__init__.py:55 +#: plinth/modules/users/__init__.py:56 msgid "Users and Groups" msgstr "यूसरस और समूह" -#: plinth/modules/users/__init__.py:80 +#: plinth/modules/users/__init__.py:81 msgid "Access to all services and system settings" msgstr "सब सर्विसस और सिस्टम सेटिंग्स तक पहुंच" -#: plinth/modules/users/__init__.py:116 +#: plinth/modules/users/__init__.py:124 #, python-brace-format msgid "Check LDAP entry \"{search_item}\"" msgstr "एलडीएपी प्रविष्टि चेक करें \"{search_item}\"" +#: plinth/modules/users/__init__.py:137 +#, python-brace-format +msgid "Check nslcd config \"{key} {value}\"" +msgstr "" + +#: plinth/modules/users/__init__.py:166 +#, python-brace-format +msgid "Check nsswitch config \"{database}\"" +msgstr "" + #: plinth/modules/users/forms.py:35 msgid "Username is taken or is reserved." msgstr "यूसरनाम लिया है या आरक्षित है." @@ -8802,7 +8849,13 @@ msgstr "अपडेट" msgid "Backup" msgstr "बैकअप" -#: plinth/templates/toolbar.html:51 plinth/templates/toolbar.html:52 +#: plinth/templates/toolbar.html:53 +#, fuzzy +#| msgid "Start setup" +msgid "Re-run setup" +msgstr "सटअप शुरु करें" + +#: plinth/templates/toolbar.html:59 plinth/templates/toolbar.html:60 #: plinth/templates/uninstall.html:30 #, fuzzy #| msgid "Install" @@ -8821,11 +8874,11 @@ msgid "" "installed freshly again." msgstr "" -#: plinth/views.py:239 +#: plinth/views.py:241 msgid "Setting unchanged" msgstr "सेटिंग स्थिर है" -#: plinth/views.py:456 +#: plinth/views.py:478 #, python-brace-format msgid "before uninstall of {app_id}" msgstr "" @@ -8834,6 +8887,14 @@ msgstr "" msgid "Gujarati" msgstr "" +#, fuzzy, python-brace-format +#~| msgid "" +#~| "A Tor SOCKS port is available on your %(box_name)s on TCP port 9050." +#~ msgid "" +#~ "A Tor SOCKS port is available on your {box_name} for internal networks on " +#~ "TCP port 9050." +#~ msgstr "एक टोर सॉक्स पोर्ट आपका %(box_name)s र उपलब्ध है, TCP पोर्ट ९०५० पर." + #~ msgid "" #~ "Shadowsocks is a lightweight and secure SOCKS5 proxy, designed to protect " #~ "your Internet traffic. It can be used to bypass Internet filtering and " @@ -9529,9 +9590,6 @@ msgstr "" #~ "होगा. इस पर निर्भर करता है कि आपका%(box_name)s कितना तेज़ है, ये घंटों भी लग सकते. " #~ "अगर सेटअप बाधित हो गया, फिर से शरु कर सकता है." -#~ msgid "Start setup" -#~ msgstr "सटअप शुरु करें" - #~ msgid "OpenVPN setup is running" #~ msgstr "ओपनवीपीएन सेटअप चल रहा है" @@ -10183,9 +10241,6 @@ msgstr "" #~ msgid "Error setting default app: {exception}" #~ msgstr "{exception}: डिफ़ॉल्ट एेप सेट करने में एरर" -#~ msgid "Default app set" -#~ msgstr "डिफ़ॉल्ट एेप सेट" - #, fuzzy #~| msgid "NTP client in contact with servers" #~ msgid "chrony client in contact with servers" diff --git a/plinth/locale/hu/LC_MESSAGES/django.po b/plinth/locale/hu/LC_MESSAGES/django.po index 15776d55b..18ce92bc7 100644 --- a/plinth/locale/hu/LC_MESSAGES/django.po +++ b/plinth/locale/hu/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-06-19 20:15-0400\n" +"POT-Creation-Date: 2023-07-31 20:04-0400\n" "PO-Revision-Date: 2022-10-24 18:39+0000\n" "Last-Translator: Sunil Mohan Adapa \n" "Language-Team: Hungarian Tor Project website. For " @@ -6996,59 +7012,50 @@ msgstr "" "torproject.org/download/download-easy.html.en\">Tor böngésző használatát " "javasolja." -#: plinth/modules/tor/__init__.py:30 +#: plinth/modules/tor/__init__.py:37 +msgid "" +"This app provides relay services to contribute to Tor network and help " +"others overcome censorship." +msgstr "" + +#: plinth/modules/tor/__init__.py:40 #, python-brace-format msgid "" -"A Tor SOCKS port is available on your {box_name} for internal networks on " -"TCP port 9050." +"This app provides an onion domain to expose {box_name} services via the Tor " +"network. Using Tor browser, one can access {box_name} from the internet even " +"when using an ISP that limits servers at home." msgstr "" -"Egy Tor SOCKS port elérhető a {box_name} eszközöd 9050-es TCP-portján a " -"belső hálózat számára." -#: plinth/modules/tor/__init__.py:48 +#: plinth/modules/tor/__init__.py:60 msgid "Tor" msgstr "Tor" -#: plinth/modules/tor/__init__.py:65 +#: plinth/modules/tor/__init__.py:76 msgid "Tor Onion Service" msgstr "Tor Onion szolgáltatás" -#: plinth/modules/tor/__init__.py:69 -msgid "Tor Socks Proxy" -msgstr "Tor Socks proxy" - -#: plinth/modules/tor/__init__.py:73 +#: plinth/modules/tor/__init__.py:80 msgid "Tor Bridge Relay" msgstr "Tor híd relay" -#: plinth/modules/tor/__init__.py:132 +#: plinth/modules/tor/__init__.py:135 msgid "Tor relay port available" msgstr "Tor relay port elérhető" -#: plinth/modules/tor/__init__.py:143 +#: plinth/modules/tor/__init__.py:146 msgid "Obfs3 transport registered" msgstr "Obfs3 átvitel regisztrálva" -#: plinth/modules/tor/__init__.py:153 +#: plinth/modules/tor/__init__.py:156 msgid "Obfs4 transport registered" msgstr "Obfs4 átvitel regisztrálva" -#: plinth/modules/tor/__init__.py:165 +#: plinth/modules/tor/__init__.py:168 #, fuzzy #| msgid "Onion Service" msgid "Onion service is version 3" msgstr "Onion-szolgáltatás" -#: plinth/modules/tor/__init__.py:242 -#, python-brace-format -msgid "Access URL {url} on tcp{kind} via Tor" -msgstr "Hozzáférés a {url} URL-hez tcp{kind}-on Tor használatával" - -#: plinth/modules/tor/__init__.py:253 -#, python-brace-format -msgid "Confirm Tor usage at {url} on tcp{kind}" -msgstr "Hagyd jóvá a Tor használatát {url} célcímhez tcp{kind} protokollon" - #: plinth/modules/tor/forms.py:33 msgid "" "Enter a valid bridge with this format: [transport] IP:ORPort [fingerprint]" @@ -7086,11 +7093,11 @@ msgstr "" "információit ide. A jelenleg támogatott átvitelek: none (nincs), obfs3, " "obfs4 és scamblesuit." -#: plinth/modules/tor/forms.py:91 +#: plinth/modules/tor/forms.py:95 msgid "Enable Tor relay" msgstr "Tor relay engedélyezése" -#: plinth/modules/tor/forms.py:92 +#: plinth/modules/tor/forms.py:96 #, python-brace-format msgid "" "When enabled, your {box_name} will run a Tor relay and donate bandwidth to " @@ -7102,11 +7109,11 @@ msgstr "" "legalább 2 megabit/másodperc feltöltési és letöltési sávszélességgel " "rendelkezel." -#: plinth/modules/tor/forms.py:97 +#: plinth/modules/tor/forms.py:101 msgid "Enable Tor bridge relay" msgstr "Tor híd relay engedélyezése" -#: plinth/modules/tor/forms.py:99 +#: plinth/modules/tor/forms.py:103 msgid "" "When enabled, relay information is published in the Tor bridge database " "instead of public Tor relay database making it harder to censor this node. " @@ -7116,13 +7123,13 @@ msgstr "" "helyett a Tor híd adatbázisban jelennek meg, ami megnehezíti a csomópont " "cenzúrázását. Ez segít másoknak megkerülni a cenzúrát." -#: plinth/modules/tor/forms.py:104 +#: plinth/modules/tor/forms.py:108 #, fuzzy #| msgid "Enable Tor Hidden Service" msgid "Enable Tor Onion Service" msgstr "Tor rejtett szolgáltatás engedélyezése" -#: plinth/modules/tor/forms.py:106 +#: plinth/modules/tor/forms.py:110 #, fuzzy, python-brace-format #| msgid "" #| "A hidden service will allow {box_name} to provide selected services (such " @@ -7137,29 +7144,15 @@ msgstr "" "kiválasztott szolgáltatásokat nyújthasson (pl. wiki vagy chat) anélkül, hogy " "felfedné a helyét. Ezt még ne használd erős anonimitás eléréséhez." -#: plinth/modules/tor/forms.py:111 -msgid "Download software packages over Tor" -msgstr "A szoftvercsomagok Tor-on keresztüli letöltése" - -#: plinth/modules/tor/forms.py:112 -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 "" -"Ha engedélyezett, akkor minden telepítéshez és frissítéshez szükséges " -"szoftver a Tor hálózaton keresztül töltődik le. Ez magasabb szintű " -"biztonságot jelent szoftverek letöltésekor." - -#: plinth/modules/tor/forms.py:127 +#: plinth/modules/tor/forms.py:125 msgid "Specify at least one upstream bridge to use upstream bridges." msgstr "Felmenő híd használatához adj meg legalább egyet." -#: plinth/modules/tor/manifest.py:15 +#: plinth/modules/tor/manifest.py:15 plinth/modules/torproxy/manifest.py:14 msgid "Tor Browser" msgstr "Tor böngésző" -#: plinth/modules/tor/manifest.py:31 +#: plinth/modules/tor/manifest.py:31 plinth/modules/torproxy/manifest.py:30 msgid "Orbot: Proxy with Tor" msgstr "Orbot: Tor proxy Android platformra" @@ -7171,15 +7164,58 @@ msgstr "Onion-szolgáltatás" msgid "Ports" msgstr "Portok" -#: plinth/modules/tor/views.py:53 +#: plinth/modules/tor/views.py:53 plinth/modules/torproxy/views.py:51 msgid "Updating configuration" msgstr "Beállítások frissítése" -#: plinth/modules/tor/views.py:70 +#: plinth/modules/tor/views.py:70 plinth/modules/torproxy/views.py:68 #, python-brace-format msgid "Error configuring app: {error}" msgstr "Hiba lépett fel az alkalmazás konfigurációja során: {error}" +#: plinth/modules/torproxy/__init__.py:34 +#, python-brace-format +msgid "" +"This app provides a web proxy on your {box_name} for internal networks on " +"TCP port 9050 using the SOCKS protocol. This can be used by various apps to " +"access the internet via the Tor network. ISP censorship can be circumvented " +"using upstream bridges." +msgstr "" + +#: plinth/modules/torproxy/__init__.py:54 +#, fuzzy +#| msgid "Tor Socks Proxy" +msgid "Tor Proxy" +msgstr "Tor Socks proxy" + +#: plinth/modules/torproxy/__init__.py:79 +msgid "Tor Socks Proxy" +msgstr "Tor Socks proxy" + +#: plinth/modules/torproxy/__init__.py:138 +#, python-brace-format +msgid "Access URL {url} on tcp{kind} via Tor" +msgstr "Hozzáférés a {url} URL-hez tcp{kind}-on Tor használatával" + +#: plinth/modules/torproxy/__init__.py:149 +#, python-brace-format +msgid "Confirm Tor usage at {url} on tcp{kind}" +msgstr "Hagyd jóvá a Tor használatát {url} célcímhez tcp{kind} protokollon" + +#: plinth/modules/torproxy/forms.py:15 +msgid "Download software packages over Tor" +msgstr "A szoftvercsomagok Tor-on keresztüli letöltése" + +#: plinth/modules/torproxy/forms.py:16 +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 "" +"Ha engedélyezett, akkor minden telepítéshez és frissítéshez szükséges " +"szoftver a Tor hálózaton keresztül töltődik le. Ez magasabb szintű " +"biztonságot jelent szoftverek letöltésekor." + #: plinth/modules/transmission/__init__.py:25 msgid "Transmission is a BitTorrent client with a web interface." msgstr "A Transmission egy webes felülettel rendelkező BitTorrent-kliens." @@ -7574,7 +7610,7 @@ msgstr "Gyakori funkciófrissítések aktiválva." msgid "Starting distribution upgrade test." msgstr "Disztribúció frissítés engedélyezve" -#: plinth/modules/users/__init__.py:29 +#: plinth/modules/users/__init__.py:30 msgid "" "Create and manage user accounts. These accounts serve as centralized " "authentication mechanism for most apps. Some apps further require a user " @@ -7585,7 +7621,7 @@ msgstr "" "alkalmazások megkövetelik továbbá, hogy a felhasználói fiók egy csoport " "tagja legyen, hogy a felhasználó hozzáférhessen az alkalmazáshoz." -#: plinth/modules/users/__init__.py:34 +#: plinth/modules/users/__init__.py:35 #, python-brace-format msgid "" "Any user may login to {box_name} web interface to see a list of apps " @@ -7597,19 +7633,29 @@ msgstr "" "az admin csoport felhasználói módosíthatják az alkalmazásokat vagy " "a rendszerbeállításokat." -#: plinth/modules/users/__init__.py:55 +#: plinth/modules/users/__init__.py:56 msgid "Users and Groups" msgstr "Felhasználók és csoportok" -#: plinth/modules/users/__init__.py:80 +#: plinth/modules/users/__init__.py:81 msgid "Access to all services and system settings" msgstr "Hozzáférés az összes szolgáltatáshoz és rendszerbeállításhoz" -#: plinth/modules/users/__init__.py:116 +#: plinth/modules/users/__init__.py:124 #, python-brace-format msgid "Check LDAP entry \"{search_item}\"" msgstr "LDAP-bejegyzés ellenőrzése: \"{search_item}\"" +#: plinth/modules/users/__init__.py:137 +#, python-brace-format +msgid "Check nslcd config \"{key} {value}\"" +msgstr "" + +#: plinth/modules/users/__init__.py:166 +#, python-brace-format +msgid "Check nsswitch config \"{database}\"" +msgstr "" + #: plinth/modules/users/forms.py:35 msgid "Username is taken or is reserved." msgstr "A felhasználónév foglalt." @@ -8837,7 +8883,13 @@ msgstr "Frissítés" msgid "Backup" msgstr "Biztonsági mentések" -#: plinth/templates/toolbar.html:51 plinth/templates/toolbar.html:52 +#: plinth/templates/toolbar.html:53 +#, fuzzy +#| msgid "Start setup" +msgid "Re-run setup" +msgstr "Beállítás elindítása" + +#: plinth/templates/toolbar.html:59 plinth/templates/toolbar.html:60 #: plinth/templates/uninstall.html:30 #, fuzzy #| msgid "Install" @@ -8856,11 +8908,11 @@ msgid "" "installed freshly again." msgstr "" -#: plinth/views.py:239 +#: plinth/views.py:241 msgid "Setting unchanged" msgstr "A beállítás változatlan" -#: plinth/views.py:456 +#: plinth/views.py:478 #, python-brace-format msgid "before uninstall of {app_id}" msgstr "" @@ -8869,6 +8921,14 @@ msgstr "" msgid "Gujarati" msgstr "Gudzsaráti" +#, python-brace-format +#~ msgid "" +#~ "A Tor SOCKS port is available on your {box_name} for internal networks on " +#~ "TCP port 9050." +#~ msgstr "" +#~ "Egy Tor SOCKS port elérhető a {box_name} eszközöd 9050-es TCP-portján a " +#~ "belső hálózat számára." + #, python-brace-format #~ msgid "" #~ "When enabled, text box for server input is removed from login page and " @@ -9677,9 +9737,6 @@ msgstr "Gudzsaráti" #~ "akár órákig is eltarthat. Ha a beállítás megszakad, akkor később újra " #~ "lehet kezdeni." -#~ msgid "Start setup" -#~ msgstr "Beállítás elindítása" - #~ msgid "OpenVPN setup is running" #~ msgstr "OpenVPN beállítás fut" @@ -10343,9 +10400,6 @@ msgstr "Gudzsaráti" #~ msgid "Error setting default app: {exception}" #~ msgstr "Az alapértelmezett alkalmazás beállítása sikertelen: {exception}" -#~ msgid "Default app set" -#~ msgstr "Alapértelmezett alkalmazás beállítva" - #~ msgid "Abort" #~ msgstr "Megszakítás" diff --git a/plinth/locale/id/LC_MESSAGES/django.po b/plinth/locale/id/LC_MESSAGES/django.po index 9234a110d..9394579ae 100644 --- a/plinth/locale/id/LC_MESSAGES/django.po +++ b/plinth/locale/id/LC_MESSAGES/django.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Indonesian (FreedomBox)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-06-19 20:15-0400\n" +"POT-Creation-Date: 2023-07-31 20:04-0400\n" "PO-Revision-Date: 2022-09-14 17:19+0000\n" "Last-Translator: ikmaak \n" "Language-Team: Indonesian Tor Project website. For " @@ -6500,57 +6514,50 @@ msgid "" "en\">Tor Browser." msgstr "" -#: plinth/modules/tor/__init__.py:30 -#, python-brace-format +#: plinth/modules/tor/__init__.py:37 msgid "" -"A Tor SOCKS port is available on your {box_name} for internal networks on " -"TCP port 9050." +"This app provides relay services to contribute to Tor network and help " +"others overcome censorship." msgstr "" -#: plinth/modules/tor/__init__.py:48 +#: plinth/modules/tor/__init__.py:40 +#, python-brace-format +msgid "" +"This app provides an onion domain to expose {box_name} services via the Tor " +"network. Using Tor browser, one can access {box_name} from the internet even " +"when using an ISP that limits servers at home." +msgstr "" + +#: plinth/modules/tor/__init__.py:60 msgid "Tor" msgstr "Tor" -#: plinth/modules/tor/__init__.py:65 +#: plinth/modules/tor/__init__.py:76 msgid "Tor Onion Service" msgstr "" -#: plinth/modules/tor/__init__.py:69 -msgid "Tor Socks Proxy" -msgstr "" - -#: plinth/modules/tor/__init__.py:73 +#: plinth/modules/tor/__init__.py:80 msgid "Tor Bridge Relay" msgstr "" -#: plinth/modules/tor/__init__.py:132 +#: plinth/modules/tor/__init__.py:135 msgid "Tor relay port available" msgstr "" -#: plinth/modules/tor/__init__.py:143 +#: plinth/modules/tor/__init__.py:146 msgid "Obfs3 transport registered" msgstr "" -#: plinth/modules/tor/__init__.py:153 +#: plinth/modules/tor/__init__.py:156 msgid "Obfs4 transport registered" msgstr "" -#: plinth/modules/tor/__init__.py:165 +#: plinth/modules/tor/__init__.py:168 #, fuzzy #| msgid "Service" msgid "Onion service is version 3" msgstr "Layanan" -#: plinth/modules/tor/__init__.py:242 -#, python-brace-format -msgid "Access URL {url} on tcp{kind} via Tor" -msgstr "" - -#: plinth/modules/tor/__init__.py:253 -#, python-brace-format -msgid "Confirm Tor usage at {url} on tcp{kind}" -msgstr "" - #: plinth/modules/tor/forms.py:33 msgid "" "Enter a valid bridge with this format: [transport] IP:ORPort [fingerprint]" @@ -6578,11 +6585,11 @@ msgid "" "here. Currently supported transports are none, obfs3, obfs4 and scamblesuit." msgstr "" -#: plinth/modules/tor/forms.py:91 +#: plinth/modules/tor/forms.py:95 msgid "Enable Tor relay" msgstr "Aktifkan Tor relay" -#: plinth/modules/tor/forms.py:92 +#: plinth/modules/tor/forms.py:96 #, python-brace-format msgid "" "When enabled, your {box_name} will run a Tor relay and donate bandwidth to " @@ -6590,24 +6597,24 @@ msgid "" "download bandwidth." msgstr "" -#: plinth/modules/tor/forms.py:97 +#: plinth/modules/tor/forms.py:101 msgid "Enable Tor bridge relay" msgstr "" -#: plinth/modules/tor/forms.py:99 +#: plinth/modules/tor/forms.py:103 msgid "" "When enabled, relay information is published in the Tor bridge database " "instead of public Tor relay database making it harder to censor this node. " "This helps others circumvent censorship." msgstr "" -#: plinth/modules/tor/forms.py:104 +#: plinth/modules/tor/forms.py:108 #, fuzzy #| msgid "Enable Tor relay" msgid "Enable Tor Onion Service" msgstr "Aktifkan Tor relay" -#: plinth/modules/tor/forms.py:106 +#: plinth/modules/tor/forms.py:110 #, python-brace-format msgid "" "An onion service will allow {box_name} to provide selected services (such as " @@ -6615,26 +6622,15 @@ msgid "" "anonymity yet." msgstr "" -#: plinth/modules/tor/forms.py:111 -msgid "Download software packages over Tor" -msgstr "" - -#: plinth/modules/tor/forms.py:112 -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/forms.py:127 +#: plinth/modules/tor/forms.py:125 msgid "Specify at least one upstream bridge to use upstream bridges." msgstr "" -#: plinth/modules/tor/manifest.py:15 +#: plinth/modules/tor/manifest.py:15 plinth/modules/torproxy/manifest.py:14 msgid "Tor Browser" msgstr "" -#: plinth/modules/tor/manifest.py:31 +#: plinth/modules/tor/manifest.py:31 plinth/modules/torproxy/manifest.py:30 msgid "Orbot: Proxy with Tor" msgstr "" @@ -6648,18 +6644,58 @@ msgstr "Layanan" msgid "Ports" msgstr "Port" -#: plinth/modules/tor/views.py:53 +#: plinth/modules/tor/views.py:53 plinth/modules/torproxy/views.py:51 #, fuzzy #| msgid "An error occurred during configuration." msgid "Updating configuration" msgstr "Terjadi kesalahan selama konfigurasi." -#: plinth/modules/tor/views.py:70 +#: plinth/modules/tor/views.py:70 plinth/modules/torproxy/views.py:68 #, fuzzy, python-brace-format #| msgid "Error installing application: {error}" msgid "Error configuring app: {error}" msgstr "Kesalahan pemasangan aplikasi: {error}" +#: plinth/modules/torproxy/__init__.py:34 +#, python-brace-format +msgid "" +"This app provides a web proxy on your {box_name} for internal networks on " +"TCP port 9050 using the SOCKS protocol. This can be used by various apps to " +"access the internet via the Tor network. ISP censorship can be circumvented " +"using upstream bridges." +msgstr "" + +#: plinth/modules/torproxy/__init__.py:54 +#, fuzzy +#| msgid "I2P Proxy" +msgid "Tor Proxy" +msgstr "I2p proxy" + +#: plinth/modules/torproxy/__init__.py:79 +msgid "Tor Socks Proxy" +msgstr "" + +#: plinth/modules/torproxy/__init__.py:138 +#, python-brace-format +msgid "Access URL {url} on tcp{kind} via Tor" +msgstr "" + +#: plinth/modules/torproxy/__init__.py:149 +#, python-brace-format +msgid "Confirm Tor usage at {url} on tcp{kind}" +msgstr "" + +#: plinth/modules/torproxy/forms.py:15 +msgid "Download software packages over Tor" +msgstr "" + +#: plinth/modules/torproxy/forms.py:16 +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/transmission/__init__.py:25 msgid "Transmission is a BitTorrent client with a web interface." msgstr "" @@ -7018,14 +7054,14 @@ msgstr "" msgid "Starting distribution upgrade test." msgstr "Pembaruan distribusi dinonaktifkan" -#: plinth/modules/users/__init__.py:29 +#: plinth/modules/users/__init__.py:30 msgid "" "Create and manage user accounts. These accounts serve as centralized " "authentication mechanism for most apps. Some apps further require a user " "account to be part of a group to authorize the user to access the app." msgstr "" -#: plinth/modules/users/__init__.py:34 +#: plinth/modules/users/__init__.py:35 #, python-brace-format msgid "" "Any user may login to {box_name} web interface to see a list of apps " @@ -7033,19 +7069,29 @@ msgid "" "group may alter apps or system settings." msgstr "" -#: plinth/modules/users/__init__.py:55 +#: plinth/modules/users/__init__.py:56 msgid "Users and Groups" msgstr "" -#: plinth/modules/users/__init__.py:80 +#: plinth/modules/users/__init__.py:81 msgid "Access to all services and system settings" msgstr "" -#: plinth/modules/users/__init__.py:116 +#: plinth/modules/users/__init__.py:124 #, python-brace-format msgid "Check LDAP entry \"{search_item}\"" msgstr "" +#: plinth/modules/users/__init__.py:137 +#, python-brace-format +msgid "Check nslcd config \"{key} {value}\"" +msgstr "" + +#: plinth/modules/users/__init__.py:166 +#, python-brace-format +msgid "Check nsswitch config \"{database}\"" +msgstr "" + #: plinth/modules/users/forms.py:35 msgid "Username is taken or is reserved." msgstr "" @@ -8171,7 +8217,13 @@ msgstr "Memperbarui" msgid "Backup" msgstr "Cadangan" -#: plinth/templates/toolbar.html:51 plinth/templates/toolbar.html:52 +#: plinth/templates/toolbar.html:53 +#, fuzzy +#| msgid "Start setup" +msgid "Re-run setup" +msgstr "Jalankan pengaturan" + +#: plinth/templates/toolbar.html:59 plinth/templates/toolbar.html:60 #: plinth/templates/uninstall.html:30 #, fuzzy #| msgid "Install" @@ -8190,11 +8242,11 @@ msgid "" "installed freshly again." msgstr "" -#: plinth/views.py:239 +#: plinth/views.py:241 msgid "Setting unchanged" msgstr "" -#: plinth/views.py:456 +#: plinth/views.py:478 #, python-brace-format msgid "before uninstall of {app_id}" msgstr "" @@ -8693,9 +8745,6 @@ msgstr "Bahasa Gujarat" #~ msgid "Disk Name" #~ msgstr "Nama" -#~ msgid "Start setup" -#~ msgstr "Jalankan pengaturan" - #~ msgid "Setup completed." #~ msgstr "Pengaturan selesai." diff --git a/plinth/locale/it/LC_MESSAGES/django.po b/plinth/locale/it/LC_MESSAGES/django.po index a222d78d7..69c113012 100644 --- a/plinth/locale/it/LC_MESSAGES/django.po +++ b/plinth/locale/it/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-06-19 20:15-0400\n" +"POT-Creation-Date: 2023-07-31 20:04-0400\n" "PO-Revision-Date: 2022-09-14 17:19+0000\n" "Last-Translator: ikmaak \n" "Language-Team: Italian Tor Project website. For " @@ -6628,57 +6644,50 @@ msgid "" "en\">Tor Browser." msgstr "" -#: plinth/modules/tor/__init__.py:30 -#, python-brace-format +#: plinth/modules/tor/__init__.py:37 msgid "" -"A Tor SOCKS port is available on your {box_name} for internal networks on " -"TCP port 9050." +"This app provides relay services to contribute to Tor network and help " +"others overcome censorship." msgstr "" -#: plinth/modules/tor/__init__.py:48 +#: plinth/modules/tor/__init__.py:40 +#, python-brace-format +msgid "" +"This app provides an onion domain to expose {box_name} services via the Tor " +"network. Using Tor browser, one can access {box_name} from the internet even " +"when using an ISP that limits servers at home." +msgstr "" + +#: plinth/modules/tor/__init__.py:60 msgid "Tor" msgstr "Tor" -#: plinth/modules/tor/__init__.py:65 +#: plinth/modules/tor/__init__.py:76 msgid "Tor Onion Service" msgstr "" -#: plinth/modules/tor/__init__.py:69 -msgid "Tor Socks Proxy" -msgstr "" - -#: plinth/modules/tor/__init__.py:73 +#: plinth/modules/tor/__init__.py:80 msgid "Tor Bridge Relay" msgstr "" -#: plinth/modules/tor/__init__.py:132 +#: plinth/modules/tor/__init__.py:135 msgid "Tor relay port available" msgstr "" -#: plinth/modules/tor/__init__.py:143 +#: plinth/modules/tor/__init__.py:146 msgid "Obfs3 transport registered" msgstr "" -#: plinth/modules/tor/__init__.py:153 +#: plinth/modules/tor/__init__.py:156 msgid "Obfs4 transport registered" msgstr "" -#: plinth/modules/tor/__init__.py:165 +#: plinth/modules/tor/__init__.py:168 #, fuzzy #| msgid "Onion Service" msgid "Onion service is version 3" msgstr "Servizio Onion" -#: plinth/modules/tor/__init__.py:242 -#, python-brace-format -msgid "Access URL {url} on tcp{kind} via Tor" -msgstr "" - -#: plinth/modules/tor/__init__.py:253 -#, python-brace-format -msgid "Confirm Tor usage at {url} on tcp{kind}" -msgstr "" - #: plinth/modules/tor/forms.py:33 msgid "" "Enter a valid bridge with this format: [transport] IP:ORPort [fingerprint]" @@ -6706,11 +6715,11 @@ msgid "" "here. Currently supported transports are none, obfs3, obfs4 and scamblesuit." msgstr "" -#: plinth/modules/tor/forms.py:91 +#: plinth/modules/tor/forms.py:95 msgid "Enable Tor relay" msgstr "" -#: plinth/modules/tor/forms.py:92 +#: plinth/modules/tor/forms.py:96 #, python-brace-format msgid "" "When enabled, your {box_name} will run a Tor relay and donate bandwidth to " @@ -6718,24 +6727,24 @@ msgid "" "download bandwidth." msgstr "" -#: plinth/modules/tor/forms.py:97 +#: plinth/modules/tor/forms.py:101 msgid "Enable Tor bridge relay" msgstr "" -#: plinth/modules/tor/forms.py:99 +#: plinth/modules/tor/forms.py:103 msgid "" "When enabled, relay information is published in the Tor bridge database " "instead of public Tor relay database making it harder to censor this node. " "This helps others circumvent censorship." msgstr "" -#: plinth/modules/tor/forms.py:104 +#: plinth/modules/tor/forms.py:108 #, fuzzy #| msgid "Enable Tor Hidden Service" msgid "Enable Tor Onion Service" msgstr "Abilita Tor Hidden Service" -#: plinth/modules/tor/forms.py:106 +#: plinth/modules/tor/forms.py:110 #, python-brace-format msgid "" "An onion service will allow {box_name} to provide selected services (such as " @@ -6743,26 +6752,15 @@ msgid "" "anonymity yet." msgstr "" -#: plinth/modules/tor/forms.py:111 -msgid "Download software packages over Tor" -msgstr "" - -#: plinth/modules/tor/forms.py:112 -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/forms.py:127 +#: plinth/modules/tor/forms.py:125 msgid "Specify at least one upstream bridge to use upstream bridges." msgstr "" -#: plinth/modules/tor/manifest.py:15 +#: plinth/modules/tor/manifest.py:15 plinth/modules/torproxy/manifest.py:14 msgid "Tor Browser" msgstr "" -#: plinth/modules/tor/manifest.py:31 +#: plinth/modules/tor/manifest.py:31 plinth/modules/torproxy/manifest.py:30 msgid "Orbot: Proxy with Tor" msgstr "" @@ -6774,16 +6772,56 @@ msgstr "Servizio Onion" msgid "Ports" msgstr "Ports" -#: plinth/modules/tor/views.py:53 +#: plinth/modules/tor/views.py:53 plinth/modules/torproxy/views.py:51 msgid "Updating configuration" msgstr "Aggiornamento della configurazione" -#: plinth/modules/tor/views.py:70 +#: plinth/modules/tor/views.py:70 plinth/modules/torproxy/views.py:68 #, fuzzy, python-brace-format #| msgid "Error installing application: {error}" msgid "Error configuring app: {error}" msgstr "Errore durante l'installazione dell'applicazione: {error}" +#: plinth/modules/torproxy/__init__.py:34 +#, python-brace-format +msgid "" +"This app provides a web proxy on your {box_name} for internal networks on " +"TCP port 9050 using the SOCKS protocol. This can be used by various apps to " +"access the internet via the Tor network. ISP censorship can be circumvented " +"using upstream bridges." +msgstr "" + +#: plinth/modules/torproxy/__init__.py:54 +#, fuzzy +#| msgid "I2P Proxy" +msgid "Tor Proxy" +msgstr "Proxy I2P" + +#: plinth/modules/torproxy/__init__.py:79 +msgid "Tor Socks Proxy" +msgstr "" + +#: plinth/modules/torproxy/__init__.py:138 +#, python-brace-format +msgid "Access URL {url} on tcp{kind} via Tor" +msgstr "" + +#: plinth/modules/torproxy/__init__.py:149 +#, python-brace-format +msgid "Confirm Tor usage at {url} on tcp{kind}" +msgstr "" + +#: plinth/modules/torproxy/forms.py:15 +msgid "Download software packages over Tor" +msgstr "" + +#: plinth/modules/torproxy/forms.py:16 +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/transmission/__init__.py:25 msgid "Transmission is a BitTorrent client with a web interface." msgstr "Transmission è un client BitTorrent che può essere gestito da Web UI." @@ -7124,14 +7162,14 @@ msgstr "" msgid "Starting distribution upgrade test." msgstr "" -#: plinth/modules/users/__init__.py:29 +#: plinth/modules/users/__init__.py:30 msgid "" "Create and manage user accounts. These accounts serve as centralized " "authentication mechanism for most apps. Some apps further require a user " "account to be part of a group to authorize the user to access the app." msgstr "" -#: plinth/modules/users/__init__.py:34 +#: plinth/modules/users/__init__.py:35 #, python-brace-format msgid "" "Any user may login to {box_name} web interface to see a list of apps " @@ -7139,19 +7177,29 @@ msgid "" "group may alter apps or system settings." msgstr "" -#: plinth/modules/users/__init__.py:55 +#: plinth/modules/users/__init__.py:56 msgid "Users and Groups" msgstr "" -#: plinth/modules/users/__init__.py:80 +#: plinth/modules/users/__init__.py:81 msgid "Access to all services and system settings" msgstr "" -#: plinth/modules/users/__init__.py:116 +#: plinth/modules/users/__init__.py:124 #, python-brace-format msgid "Check LDAP entry \"{search_item}\"" msgstr "" +#: plinth/modules/users/__init__.py:137 +#, python-brace-format +msgid "Check nslcd config \"{key} {value}\"" +msgstr "" + +#: plinth/modules/users/__init__.py:166 +#, python-brace-format +msgid "Check nsswitch config \"{database}\"" +msgstr "" + #: plinth/modules/users/forms.py:35 msgid "Username is taken or is reserved." msgstr "" @@ -8248,7 +8296,13 @@ msgstr "" msgid "Backup" msgstr "Backup" -#: plinth/templates/toolbar.html:51 plinth/templates/toolbar.html:52 +#: plinth/templates/toolbar.html:53 +#, fuzzy +#| msgid "Start setup" +msgid "Re-run setup" +msgstr "Avvia setup" + +#: plinth/templates/toolbar.html:59 plinth/templates/toolbar.html:60 #: plinth/templates/uninstall.html:30 msgid "Uninstall" msgstr "Disinstalla" @@ -8265,11 +8319,11 @@ msgid "" "installed freshly again." msgstr "" -#: plinth/views.py:239 +#: plinth/views.py:241 msgid "Setting unchanged" msgstr "Impostazioni invariate" -#: plinth/views.py:456 +#: plinth/views.py:478 #, python-brace-format msgid "before uninstall of {app_id}" msgstr "" @@ -8798,9 +8852,6 @@ msgstr "Gujarati" #~ "può impiegare anche delle ore. Se il setup viene interroto, è possibile " #~ "riavviarlo." -#~ msgid "Start setup" -#~ msgstr "Avvia setup" - #~ msgid "OpenVPN setup is running" #~ msgstr "Setup OpenVPN in corso" @@ -9302,11 +9353,6 @@ msgstr "Gujarati" #~ msgid "Error setting default app: {exception}" #~ msgstr "Errore impostazione nome di dominio: {exception}" -#, fuzzy -#~| msgid "Default" -#~ msgid "Default app set" -#~ msgstr "Default" - #, fuzzy #~| msgid "NTP client in contact with servers" #~ msgid "chrony client in contact with servers" diff --git a/plinth/locale/ja/LC_MESSAGES/django.po b/plinth/locale/ja/LC_MESSAGES/django.po index 3833557a3..4afb9deda 100644 --- a/plinth/locale/ja/LC_MESSAGES/django.po +++ b/plinth/locale/ja/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-06-19 20:15-0400\n" +"POT-Creation-Date: 2023-07-31 20:04-0400\n" "PO-Revision-Date: 2023-05-07 23:50+0000\n" "Last-Translator: Nobuhiro Iwamatsu \n" "Language-Team: Japanese Tor Project website. For " @@ -6023,55 +6037,48 @@ msgid "" "en\">Tor Browser." msgstr "" -#: plinth/modules/tor/__init__.py:30 -#, python-brace-format +#: plinth/modules/tor/__init__.py:37 msgid "" -"A Tor SOCKS port is available on your {box_name} for internal networks on " -"TCP port 9050." +"This app provides relay services to contribute to Tor network and help " +"others overcome censorship." msgstr "" -#: plinth/modules/tor/__init__.py:48 +#: plinth/modules/tor/__init__.py:40 +#, python-brace-format +msgid "" +"This app provides an onion domain to expose {box_name} services via the Tor " +"network. Using Tor browser, one can access {box_name} from the internet even " +"when using an ISP that limits servers at home." +msgstr "" + +#: plinth/modules/tor/__init__.py:60 msgid "Tor" msgstr "" -#: plinth/modules/tor/__init__.py:65 +#: plinth/modules/tor/__init__.py:76 msgid "Tor Onion Service" msgstr "" -#: plinth/modules/tor/__init__.py:69 -msgid "Tor Socks Proxy" -msgstr "" - -#: plinth/modules/tor/__init__.py:73 +#: plinth/modules/tor/__init__.py:80 msgid "Tor Bridge Relay" msgstr "" -#: plinth/modules/tor/__init__.py:132 +#: plinth/modules/tor/__init__.py:135 msgid "Tor relay port available" msgstr "" -#: plinth/modules/tor/__init__.py:143 +#: plinth/modules/tor/__init__.py:146 msgid "Obfs3 transport registered" msgstr "" -#: plinth/modules/tor/__init__.py:153 +#: plinth/modules/tor/__init__.py:156 msgid "Obfs4 transport registered" msgstr "" -#: plinth/modules/tor/__init__.py:165 +#: plinth/modules/tor/__init__.py:168 msgid "Onion service is version 3" msgstr "" -#: plinth/modules/tor/__init__.py:242 -#, python-brace-format -msgid "Access URL {url} on tcp{kind} via Tor" -msgstr "" - -#: plinth/modules/tor/__init__.py:253 -#, python-brace-format -msgid "Confirm Tor usage at {url} on tcp{kind}" -msgstr "" - #: plinth/modules/tor/forms.py:33 msgid "" "Enter a valid bridge with this format: [transport] IP:ORPort [fingerprint]" @@ -6099,11 +6106,11 @@ msgid "" "here. Currently supported transports are none, obfs3, obfs4 and scamblesuit." msgstr "" -#: plinth/modules/tor/forms.py:91 +#: plinth/modules/tor/forms.py:95 msgid "Enable Tor relay" msgstr "" -#: plinth/modules/tor/forms.py:92 +#: plinth/modules/tor/forms.py:96 #, python-brace-format msgid "" "When enabled, your {box_name} will run a Tor relay and donate bandwidth to " @@ -6111,22 +6118,22 @@ msgid "" "download bandwidth." msgstr "" -#: plinth/modules/tor/forms.py:97 +#: plinth/modules/tor/forms.py:101 msgid "Enable Tor bridge relay" msgstr "" -#: plinth/modules/tor/forms.py:99 +#: plinth/modules/tor/forms.py:103 msgid "" "When enabled, relay information is published in the Tor bridge database " "instead of public Tor relay database making it harder to censor this node. " "This helps others circumvent censorship." msgstr "" -#: plinth/modules/tor/forms.py:104 +#: plinth/modules/tor/forms.py:108 msgid "Enable Tor Onion Service" msgstr "" -#: plinth/modules/tor/forms.py:106 +#: plinth/modules/tor/forms.py:110 #, python-brace-format msgid "" "An onion service will allow {box_name} to provide selected services (such as " @@ -6134,26 +6141,15 @@ msgid "" "anonymity yet." msgstr "" -#: plinth/modules/tor/forms.py:111 -msgid "Download software packages over Tor" -msgstr "" - -#: plinth/modules/tor/forms.py:112 -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/forms.py:127 +#: plinth/modules/tor/forms.py:125 msgid "Specify at least one upstream bridge to use upstream bridges." msgstr "" -#: plinth/modules/tor/manifest.py:15 +#: plinth/modules/tor/manifest.py:15 plinth/modules/torproxy/manifest.py:14 msgid "Tor Browser" msgstr "" -#: plinth/modules/tor/manifest.py:31 +#: plinth/modules/tor/manifest.py:31 plinth/modules/torproxy/manifest.py:30 msgid "Orbot: Proxy with Tor" msgstr "" @@ -6165,15 +6161,53 @@ msgstr "" msgid "Ports" msgstr "" -#: plinth/modules/tor/views.py:53 +#: plinth/modules/tor/views.py:53 plinth/modules/torproxy/views.py:51 msgid "Updating configuration" msgstr "" -#: plinth/modules/tor/views.py:70 +#: plinth/modules/tor/views.py:70 plinth/modules/torproxy/views.py:68 #, python-brace-format msgid "Error configuring app: {error}" msgstr "" +#: plinth/modules/torproxy/__init__.py:34 +#, python-brace-format +msgid "" +"This app provides a web proxy on your {box_name} for internal networks on " +"TCP port 9050 using the SOCKS protocol. This can be used by various apps to " +"access the internet via the Tor network. ISP censorship can be circumvented " +"using upstream bridges." +msgstr "" + +#: plinth/modules/torproxy/__init__.py:54 +msgid "Tor Proxy" +msgstr "" + +#: plinth/modules/torproxy/__init__.py:79 +msgid "Tor Socks Proxy" +msgstr "" + +#: plinth/modules/torproxy/__init__.py:138 +#, python-brace-format +msgid "Access URL {url} on tcp{kind} via Tor" +msgstr "" + +#: plinth/modules/torproxy/__init__.py:149 +#, python-brace-format +msgid "Confirm Tor usage at {url} on tcp{kind}" +msgstr "" + +#: plinth/modules/torproxy/forms.py:15 +msgid "Download software packages over Tor" +msgstr "" + +#: plinth/modules/torproxy/forms.py:16 +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/transmission/__init__.py:25 msgid "Transmission is a BitTorrent client with a web interface." msgstr "" @@ -6499,14 +6533,14 @@ msgstr "" msgid "Starting distribution upgrade test." msgstr "" -#: plinth/modules/users/__init__.py:29 +#: plinth/modules/users/__init__.py:30 msgid "" "Create and manage user accounts. These accounts serve as centralized " "authentication mechanism for most apps. Some apps further require a user " "account to be part of a group to authorize the user to access the app." msgstr "" -#: plinth/modules/users/__init__.py:34 +#: plinth/modules/users/__init__.py:35 #, python-brace-format msgid "" "Any user may login to {box_name} web interface to see a list of apps " @@ -6514,19 +6548,29 @@ msgid "" "group may alter apps or system settings." msgstr "" -#: plinth/modules/users/__init__.py:55 +#: plinth/modules/users/__init__.py:56 msgid "Users and Groups" msgstr "" -#: plinth/modules/users/__init__.py:80 +#: plinth/modules/users/__init__.py:81 msgid "Access to all services and system settings" msgstr "" -#: plinth/modules/users/__init__.py:116 +#: plinth/modules/users/__init__.py:124 #, python-brace-format msgid "Check LDAP entry \"{search_item}\"" msgstr "" +#: plinth/modules/users/__init__.py:137 +#, python-brace-format +msgid "Check nslcd config \"{key} {value}\"" +msgstr "" + +#: plinth/modules/users/__init__.py:166 +#, python-brace-format +msgid "Check nsswitch config \"{database}\"" +msgstr "" + #: plinth/modules/users/forms.py:35 msgid "Username is taken or is reserved." msgstr "" @@ -7594,7 +7638,11 @@ msgstr "" msgid "Backup" msgstr "" -#: plinth/templates/toolbar.html:51 plinth/templates/toolbar.html:52 +#: plinth/templates/toolbar.html:53 +msgid "Re-run setup" +msgstr "" + +#: plinth/templates/toolbar.html:59 plinth/templates/toolbar.html:60 #: plinth/templates/uninstall.html:30 msgid "Uninstall" msgstr "" @@ -7610,11 +7658,11 @@ msgid "" "installed freshly again." msgstr "" -#: plinth/views.py:239 +#: plinth/views.py:241 msgid "Setting unchanged" msgstr "" -#: plinth/views.py:456 +#: plinth/views.py:478 #, python-brace-format msgid "before uninstall of {app_id}" msgstr "" diff --git a/plinth/locale/kn/LC_MESSAGES/django.po b/plinth/locale/kn/LC_MESSAGES/django.po index ff1c6a035..71995e587 100644 --- a/plinth/locale/kn/LC_MESSAGES/django.po +++ b/plinth/locale/kn/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-06-19 20:15-0400\n" +"POT-Creation-Date: 2023-07-31 20:04-0400\n" "PO-Revision-Date: 2020-07-16 16:41+0000\n" "Last-Translator: Yogesh \n" "Language-Team: Kannada Tor Project website. For " @@ -6025,55 +6039,48 @@ msgid "" "en\">Tor Browser." msgstr "" -#: plinth/modules/tor/__init__.py:30 -#, python-brace-format +#: plinth/modules/tor/__init__.py:37 msgid "" -"A Tor SOCKS port is available on your {box_name} for internal networks on " -"TCP port 9050." +"This app provides relay services to contribute to Tor network and help " +"others overcome censorship." msgstr "" -#: plinth/modules/tor/__init__.py:48 +#: plinth/modules/tor/__init__.py:40 +#, python-brace-format +msgid "" +"This app provides an onion domain to expose {box_name} services via the Tor " +"network. Using Tor browser, one can access {box_name} from the internet even " +"when using an ISP that limits servers at home." +msgstr "" + +#: plinth/modules/tor/__init__.py:60 msgid "Tor" msgstr "" -#: plinth/modules/tor/__init__.py:65 +#: plinth/modules/tor/__init__.py:76 msgid "Tor Onion Service" msgstr "" -#: plinth/modules/tor/__init__.py:69 -msgid "Tor Socks Proxy" -msgstr "" - -#: plinth/modules/tor/__init__.py:73 +#: plinth/modules/tor/__init__.py:80 msgid "Tor Bridge Relay" msgstr "" -#: plinth/modules/tor/__init__.py:132 +#: plinth/modules/tor/__init__.py:135 msgid "Tor relay port available" msgstr "" -#: plinth/modules/tor/__init__.py:143 +#: plinth/modules/tor/__init__.py:146 msgid "Obfs3 transport registered" msgstr "" -#: plinth/modules/tor/__init__.py:153 +#: plinth/modules/tor/__init__.py:156 msgid "Obfs4 transport registered" msgstr "" -#: plinth/modules/tor/__init__.py:165 +#: plinth/modules/tor/__init__.py:168 msgid "Onion service is version 3" msgstr "" -#: plinth/modules/tor/__init__.py:242 -#, python-brace-format -msgid "Access URL {url} on tcp{kind} via Tor" -msgstr "" - -#: plinth/modules/tor/__init__.py:253 -#, python-brace-format -msgid "Confirm Tor usage at {url} on tcp{kind}" -msgstr "" - #: plinth/modules/tor/forms.py:33 msgid "" "Enter a valid bridge with this format: [transport] IP:ORPort [fingerprint]" @@ -6101,11 +6108,11 @@ msgid "" "here. Currently supported transports are none, obfs3, obfs4 and scamblesuit." msgstr "" -#: plinth/modules/tor/forms.py:91 +#: plinth/modules/tor/forms.py:95 msgid "Enable Tor relay" msgstr "" -#: plinth/modules/tor/forms.py:92 +#: plinth/modules/tor/forms.py:96 #, python-brace-format msgid "" "When enabled, your {box_name} will run a Tor relay and donate bandwidth to " @@ -6113,22 +6120,22 @@ msgid "" "download bandwidth." msgstr "" -#: plinth/modules/tor/forms.py:97 +#: plinth/modules/tor/forms.py:101 msgid "Enable Tor bridge relay" msgstr "" -#: plinth/modules/tor/forms.py:99 +#: plinth/modules/tor/forms.py:103 msgid "" "When enabled, relay information is published in the Tor bridge database " "instead of public Tor relay database making it harder to censor this node. " "This helps others circumvent censorship." msgstr "" -#: plinth/modules/tor/forms.py:104 +#: plinth/modules/tor/forms.py:108 msgid "Enable Tor Onion Service" msgstr "" -#: plinth/modules/tor/forms.py:106 +#: plinth/modules/tor/forms.py:110 #, python-brace-format msgid "" "An onion service will allow {box_name} to provide selected services (such as " @@ -6136,26 +6143,15 @@ msgid "" "anonymity yet." msgstr "" -#: plinth/modules/tor/forms.py:111 -msgid "Download software packages over Tor" -msgstr "" - -#: plinth/modules/tor/forms.py:112 -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/forms.py:127 +#: plinth/modules/tor/forms.py:125 msgid "Specify at least one upstream bridge to use upstream bridges." msgstr "" -#: plinth/modules/tor/manifest.py:15 +#: plinth/modules/tor/manifest.py:15 plinth/modules/torproxy/manifest.py:14 msgid "Tor Browser" msgstr "" -#: plinth/modules/tor/manifest.py:31 +#: plinth/modules/tor/manifest.py:31 plinth/modules/torproxy/manifest.py:30 msgid "Orbot: Proxy with Tor" msgstr "" @@ -6167,15 +6163,53 @@ msgstr "" msgid "Ports" msgstr "" -#: plinth/modules/tor/views.py:53 +#: plinth/modules/tor/views.py:53 plinth/modules/torproxy/views.py:51 msgid "Updating configuration" msgstr "" -#: plinth/modules/tor/views.py:70 +#: plinth/modules/tor/views.py:70 plinth/modules/torproxy/views.py:68 #, python-brace-format msgid "Error configuring app: {error}" msgstr "" +#: plinth/modules/torproxy/__init__.py:34 +#, python-brace-format +msgid "" +"This app provides a web proxy on your {box_name} for internal networks on " +"TCP port 9050 using the SOCKS protocol. This can be used by various apps to " +"access the internet via the Tor network. ISP censorship can be circumvented " +"using upstream bridges." +msgstr "" + +#: plinth/modules/torproxy/__init__.py:54 +msgid "Tor Proxy" +msgstr "" + +#: plinth/modules/torproxy/__init__.py:79 +msgid "Tor Socks Proxy" +msgstr "" + +#: plinth/modules/torproxy/__init__.py:138 +#, python-brace-format +msgid "Access URL {url} on tcp{kind} via Tor" +msgstr "" + +#: plinth/modules/torproxy/__init__.py:149 +#, python-brace-format +msgid "Confirm Tor usage at {url} on tcp{kind}" +msgstr "" + +#: plinth/modules/torproxy/forms.py:15 +msgid "Download software packages over Tor" +msgstr "" + +#: plinth/modules/torproxy/forms.py:16 +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/transmission/__init__.py:25 msgid "Transmission is a BitTorrent client with a web interface." msgstr "" @@ -6501,14 +6535,14 @@ msgstr "" msgid "Starting distribution upgrade test." msgstr "" -#: plinth/modules/users/__init__.py:29 +#: plinth/modules/users/__init__.py:30 msgid "" "Create and manage user accounts. These accounts serve as centralized " "authentication mechanism for most apps. Some apps further require a user " "account to be part of a group to authorize the user to access the app." msgstr "" -#: plinth/modules/users/__init__.py:34 +#: plinth/modules/users/__init__.py:35 #, python-brace-format msgid "" "Any user may login to {box_name} web interface to see a list of apps " @@ -6516,19 +6550,29 @@ msgid "" "group may alter apps or system settings." msgstr "" -#: plinth/modules/users/__init__.py:55 +#: plinth/modules/users/__init__.py:56 msgid "Users and Groups" msgstr "" -#: plinth/modules/users/__init__.py:80 +#: plinth/modules/users/__init__.py:81 msgid "Access to all services and system settings" msgstr "" -#: plinth/modules/users/__init__.py:116 +#: plinth/modules/users/__init__.py:124 #, python-brace-format msgid "Check LDAP entry \"{search_item}\"" msgstr "" +#: plinth/modules/users/__init__.py:137 +#, python-brace-format +msgid "Check nslcd config \"{key} {value}\"" +msgstr "" + +#: plinth/modules/users/__init__.py:166 +#, python-brace-format +msgid "Check nsswitch config \"{database}\"" +msgstr "" + #: plinth/modules/users/forms.py:35 msgid "Username is taken or is reserved." msgstr "" @@ -7596,7 +7640,11 @@ msgstr "" msgid "Backup" msgstr "" -#: plinth/templates/toolbar.html:51 plinth/templates/toolbar.html:52 +#: plinth/templates/toolbar.html:53 +msgid "Re-run setup" +msgstr "" + +#: plinth/templates/toolbar.html:59 plinth/templates/toolbar.html:60 #: plinth/templates/uninstall.html:30 msgid "Uninstall" msgstr "" @@ -7612,11 +7660,11 @@ msgid "" "installed freshly again." msgstr "" -#: plinth/views.py:239 +#: plinth/views.py:241 msgid "Setting unchanged" msgstr "" -#: plinth/views.py:456 +#: plinth/views.py:478 #, python-brace-format msgid "before uninstall of {app_id}" msgstr "" diff --git a/plinth/locale/lt/LC_MESSAGES/django.po b/plinth/locale/lt/LC_MESSAGES/django.po index ace97ee89..bb620be71 100644 --- a/plinth/locale/lt/LC_MESSAGES/django.po +++ b/plinth/locale/lt/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-06-19 20:15-0400\n" +"POT-Creation-Date: 2023-07-31 20:04-0400\n" "PO-Revision-Date: 2022-09-14 17:19+0000\n" "Last-Translator: ikmaak \n" "Language-Team: Lithuanian Tor Project website. For " @@ -6025,55 +6039,48 @@ msgid "" "en\">Tor Browser." msgstr "" -#: plinth/modules/tor/__init__.py:30 -#, python-brace-format +#: plinth/modules/tor/__init__.py:37 msgid "" -"A Tor SOCKS port is available on your {box_name} for internal networks on " -"TCP port 9050." +"This app provides relay services to contribute to Tor network and help " +"others overcome censorship." msgstr "" -#: plinth/modules/tor/__init__.py:48 +#: plinth/modules/tor/__init__.py:40 +#, python-brace-format +msgid "" +"This app provides an onion domain to expose {box_name} services via the Tor " +"network. Using Tor browser, one can access {box_name} from the internet even " +"when using an ISP that limits servers at home." +msgstr "" + +#: plinth/modules/tor/__init__.py:60 msgid "Tor" msgstr "" -#: plinth/modules/tor/__init__.py:65 +#: plinth/modules/tor/__init__.py:76 msgid "Tor Onion Service" msgstr "" -#: plinth/modules/tor/__init__.py:69 -msgid "Tor Socks Proxy" -msgstr "" - -#: plinth/modules/tor/__init__.py:73 +#: plinth/modules/tor/__init__.py:80 msgid "Tor Bridge Relay" msgstr "" -#: plinth/modules/tor/__init__.py:132 +#: plinth/modules/tor/__init__.py:135 msgid "Tor relay port available" msgstr "" -#: plinth/modules/tor/__init__.py:143 +#: plinth/modules/tor/__init__.py:146 msgid "Obfs3 transport registered" msgstr "" -#: plinth/modules/tor/__init__.py:153 +#: plinth/modules/tor/__init__.py:156 msgid "Obfs4 transport registered" msgstr "" -#: plinth/modules/tor/__init__.py:165 +#: plinth/modules/tor/__init__.py:168 msgid "Onion service is version 3" msgstr "" -#: plinth/modules/tor/__init__.py:242 -#, python-brace-format -msgid "Access URL {url} on tcp{kind} via Tor" -msgstr "" - -#: plinth/modules/tor/__init__.py:253 -#, python-brace-format -msgid "Confirm Tor usage at {url} on tcp{kind}" -msgstr "" - #: plinth/modules/tor/forms.py:33 msgid "" "Enter a valid bridge with this format: [transport] IP:ORPort [fingerprint]" @@ -6101,11 +6108,11 @@ msgid "" "here. Currently supported transports are none, obfs3, obfs4 and scamblesuit." msgstr "" -#: plinth/modules/tor/forms.py:91 +#: plinth/modules/tor/forms.py:95 msgid "Enable Tor relay" msgstr "" -#: plinth/modules/tor/forms.py:92 +#: plinth/modules/tor/forms.py:96 #, python-brace-format msgid "" "When enabled, your {box_name} will run a Tor relay and donate bandwidth to " @@ -6113,22 +6120,22 @@ msgid "" "download bandwidth." msgstr "" -#: plinth/modules/tor/forms.py:97 +#: plinth/modules/tor/forms.py:101 msgid "Enable Tor bridge relay" msgstr "" -#: plinth/modules/tor/forms.py:99 +#: plinth/modules/tor/forms.py:103 msgid "" "When enabled, relay information is published in the Tor bridge database " "instead of public Tor relay database making it harder to censor this node. " "This helps others circumvent censorship." msgstr "" -#: plinth/modules/tor/forms.py:104 +#: plinth/modules/tor/forms.py:108 msgid "Enable Tor Onion Service" msgstr "" -#: plinth/modules/tor/forms.py:106 +#: plinth/modules/tor/forms.py:110 #, python-brace-format msgid "" "An onion service will allow {box_name} to provide selected services (such as " @@ -6136,26 +6143,15 @@ msgid "" "anonymity yet." msgstr "" -#: plinth/modules/tor/forms.py:111 -msgid "Download software packages over Tor" -msgstr "" - -#: plinth/modules/tor/forms.py:112 -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/forms.py:127 +#: plinth/modules/tor/forms.py:125 msgid "Specify at least one upstream bridge to use upstream bridges." msgstr "" -#: plinth/modules/tor/manifest.py:15 +#: plinth/modules/tor/manifest.py:15 plinth/modules/torproxy/manifest.py:14 msgid "Tor Browser" msgstr "" -#: plinth/modules/tor/manifest.py:31 +#: plinth/modules/tor/manifest.py:31 plinth/modules/torproxy/manifest.py:30 msgid "Orbot: Proxy with Tor" msgstr "" @@ -6167,15 +6163,55 @@ msgstr "" msgid "Ports" msgstr "" -#: plinth/modules/tor/views.py:53 +#: plinth/modules/tor/views.py:53 plinth/modules/torproxy/views.py:51 msgid "Updating configuration" msgstr "" -#: plinth/modules/tor/views.py:70 +#: plinth/modules/tor/views.py:70 plinth/modules/torproxy/views.py:68 #, python-brace-format msgid "Error configuring app: {error}" msgstr "" +#: plinth/modules/torproxy/__init__.py:34 +#, python-brace-format +msgid "" +"This app provides a web proxy on your {box_name} for internal networks on " +"TCP port 9050 using the SOCKS protocol. This can be used by various apps to " +"access the internet via the Tor network. ISP censorship can be circumvented " +"using upstream bridges." +msgstr "" + +#: plinth/modules/torproxy/__init__.py:54 +#, fuzzy +#| msgid "I2P Proxy" +msgid "Tor Proxy" +msgstr "I2P Proxy" + +#: plinth/modules/torproxy/__init__.py:79 +msgid "Tor Socks Proxy" +msgstr "" + +#: plinth/modules/torproxy/__init__.py:138 +#, python-brace-format +msgid "Access URL {url} on tcp{kind} via Tor" +msgstr "" + +#: plinth/modules/torproxy/__init__.py:149 +#, python-brace-format +msgid "Confirm Tor usage at {url} on tcp{kind}" +msgstr "" + +#: plinth/modules/torproxy/forms.py:15 +msgid "Download software packages over Tor" +msgstr "" + +#: plinth/modules/torproxy/forms.py:16 +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/transmission/__init__.py:25 msgid "Transmission is a BitTorrent client with a web interface." msgstr "" @@ -6501,14 +6537,14 @@ msgstr "" msgid "Starting distribution upgrade test." msgstr "" -#: plinth/modules/users/__init__.py:29 +#: plinth/modules/users/__init__.py:30 msgid "" "Create and manage user accounts. These accounts serve as centralized " "authentication mechanism for most apps. Some apps further require a user " "account to be part of a group to authorize the user to access the app." msgstr "" -#: plinth/modules/users/__init__.py:34 +#: plinth/modules/users/__init__.py:35 #, python-brace-format msgid "" "Any user may login to {box_name} web interface to see a list of apps " @@ -6516,19 +6552,29 @@ msgid "" "group may alter apps or system settings." msgstr "" -#: plinth/modules/users/__init__.py:55 +#: plinth/modules/users/__init__.py:56 msgid "Users and Groups" msgstr "" -#: plinth/modules/users/__init__.py:80 +#: plinth/modules/users/__init__.py:81 msgid "Access to all services and system settings" msgstr "" -#: plinth/modules/users/__init__.py:116 +#: plinth/modules/users/__init__.py:124 #, python-brace-format msgid "Check LDAP entry \"{search_item}\"" msgstr "" +#: plinth/modules/users/__init__.py:137 +#, python-brace-format +msgid "Check nslcd config \"{key} {value}\"" +msgstr "" + +#: plinth/modules/users/__init__.py:166 +#, python-brace-format +msgid "Check nsswitch config \"{database}\"" +msgstr "" + #: plinth/modules/users/forms.py:35 msgid "Username is taken or is reserved." msgstr "" @@ -7596,7 +7642,11 @@ msgstr "" msgid "Backup" msgstr "" -#: plinth/templates/toolbar.html:51 plinth/templates/toolbar.html:52 +#: plinth/templates/toolbar.html:53 +msgid "Re-run setup" +msgstr "" + +#: plinth/templates/toolbar.html:59 plinth/templates/toolbar.html:60 #: plinth/templates/uninstall.html:30 msgid "Uninstall" msgstr "" @@ -7612,11 +7662,11 @@ msgid "" "installed freshly again." msgstr "" -#: plinth/views.py:239 +#: plinth/views.py:241 msgid "Setting unchanged" msgstr "" -#: plinth/views.py:456 +#: plinth/views.py:478 #, python-brace-format msgid "before uninstall of {app_id}" msgstr "" diff --git a/plinth/locale/lv/LC_MESSAGES/django.po b/plinth/locale/lv/LC_MESSAGES/django.po index 2049bc5a2..52c4b2cd1 100644 --- a/plinth/locale/lv/LC_MESSAGES/django.po +++ b/plinth/locale/lv/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-06-19 20:15-0400\n" +"POT-Creation-Date: 2023-07-31 20:04-0400\n" "PO-Revision-Date: 2022-09-14 17:20+0000\n" "Last-Translator: ikmaak \n" "Language-Team: Latvian Tor Project website. For " @@ -6024,55 +6038,48 @@ msgid "" "en\">Tor Browser." msgstr "" -#: plinth/modules/tor/__init__.py:30 -#, python-brace-format +#: plinth/modules/tor/__init__.py:37 msgid "" -"A Tor SOCKS port is available on your {box_name} for internal networks on " -"TCP port 9050." +"This app provides relay services to contribute to Tor network and help " +"others overcome censorship." msgstr "" -#: plinth/modules/tor/__init__.py:48 +#: plinth/modules/tor/__init__.py:40 +#, python-brace-format +msgid "" +"This app provides an onion domain to expose {box_name} services via the Tor " +"network. Using Tor browser, one can access {box_name} from the internet even " +"when using an ISP that limits servers at home." +msgstr "" + +#: plinth/modules/tor/__init__.py:60 msgid "Tor" msgstr "" -#: plinth/modules/tor/__init__.py:65 +#: plinth/modules/tor/__init__.py:76 msgid "Tor Onion Service" msgstr "" -#: plinth/modules/tor/__init__.py:69 -msgid "Tor Socks Proxy" -msgstr "" - -#: plinth/modules/tor/__init__.py:73 +#: plinth/modules/tor/__init__.py:80 msgid "Tor Bridge Relay" msgstr "" -#: plinth/modules/tor/__init__.py:132 +#: plinth/modules/tor/__init__.py:135 msgid "Tor relay port available" msgstr "" -#: plinth/modules/tor/__init__.py:143 +#: plinth/modules/tor/__init__.py:146 msgid "Obfs3 transport registered" msgstr "" -#: plinth/modules/tor/__init__.py:153 +#: plinth/modules/tor/__init__.py:156 msgid "Obfs4 transport registered" msgstr "" -#: plinth/modules/tor/__init__.py:165 +#: plinth/modules/tor/__init__.py:168 msgid "Onion service is version 3" msgstr "" -#: plinth/modules/tor/__init__.py:242 -#, python-brace-format -msgid "Access URL {url} on tcp{kind} via Tor" -msgstr "" - -#: plinth/modules/tor/__init__.py:253 -#, python-brace-format -msgid "Confirm Tor usage at {url} on tcp{kind}" -msgstr "" - #: plinth/modules/tor/forms.py:33 msgid "" "Enter a valid bridge with this format: [transport] IP:ORPort [fingerprint]" @@ -6100,11 +6107,11 @@ msgid "" "here. Currently supported transports are none, obfs3, obfs4 and scamblesuit." msgstr "" -#: plinth/modules/tor/forms.py:91 +#: plinth/modules/tor/forms.py:95 msgid "Enable Tor relay" msgstr "" -#: plinth/modules/tor/forms.py:92 +#: plinth/modules/tor/forms.py:96 #, python-brace-format msgid "" "When enabled, your {box_name} will run a Tor relay and donate bandwidth to " @@ -6112,22 +6119,22 @@ msgid "" "download bandwidth." msgstr "" -#: plinth/modules/tor/forms.py:97 +#: plinth/modules/tor/forms.py:101 msgid "Enable Tor bridge relay" msgstr "" -#: plinth/modules/tor/forms.py:99 +#: plinth/modules/tor/forms.py:103 msgid "" "When enabled, relay information is published in the Tor bridge database " "instead of public Tor relay database making it harder to censor this node. " "This helps others circumvent censorship." msgstr "" -#: plinth/modules/tor/forms.py:104 +#: plinth/modules/tor/forms.py:108 msgid "Enable Tor Onion Service" msgstr "" -#: plinth/modules/tor/forms.py:106 +#: plinth/modules/tor/forms.py:110 #, python-brace-format msgid "" "An onion service will allow {box_name} to provide selected services (such as " @@ -6135,26 +6142,15 @@ msgid "" "anonymity yet." msgstr "" -#: plinth/modules/tor/forms.py:111 -msgid "Download software packages over Tor" -msgstr "" - -#: plinth/modules/tor/forms.py:112 -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/forms.py:127 +#: plinth/modules/tor/forms.py:125 msgid "Specify at least one upstream bridge to use upstream bridges." msgstr "" -#: plinth/modules/tor/manifest.py:15 +#: plinth/modules/tor/manifest.py:15 plinth/modules/torproxy/manifest.py:14 msgid "Tor Browser" msgstr "" -#: plinth/modules/tor/manifest.py:31 +#: plinth/modules/tor/manifest.py:31 plinth/modules/torproxy/manifest.py:30 msgid "Orbot: Proxy with Tor" msgstr "" @@ -6166,15 +6162,55 @@ msgstr "" msgid "Ports" msgstr "" -#: plinth/modules/tor/views.py:53 +#: plinth/modules/tor/views.py:53 plinth/modules/torproxy/views.py:51 msgid "Updating configuration" msgstr "" -#: plinth/modules/tor/views.py:70 +#: plinth/modules/tor/views.py:70 plinth/modules/torproxy/views.py:68 #, python-brace-format msgid "Error configuring app: {error}" msgstr "" +#: plinth/modules/torproxy/__init__.py:34 +#, python-brace-format +msgid "" +"This app provides a web proxy on your {box_name} for internal networks on " +"TCP port 9050 using the SOCKS protocol. This can be used by various apps to " +"access the internet via the Tor network. ISP censorship can be circumvented " +"using upstream bridges." +msgstr "" + +#: plinth/modules/torproxy/__init__.py:54 +#, fuzzy +#| msgid "I2P Proxy" +msgid "Tor Proxy" +msgstr "I2P Proxy" + +#: plinth/modules/torproxy/__init__.py:79 +msgid "Tor Socks Proxy" +msgstr "" + +#: plinth/modules/torproxy/__init__.py:138 +#, python-brace-format +msgid "Access URL {url} on tcp{kind} via Tor" +msgstr "" + +#: plinth/modules/torproxy/__init__.py:149 +#, python-brace-format +msgid "Confirm Tor usage at {url} on tcp{kind}" +msgstr "" + +#: plinth/modules/torproxy/forms.py:15 +msgid "Download software packages over Tor" +msgstr "" + +#: plinth/modules/torproxy/forms.py:16 +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/transmission/__init__.py:25 msgid "Transmission is a BitTorrent client with a web interface." msgstr "" @@ -6500,14 +6536,14 @@ msgstr "" msgid "Starting distribution upgrade test." msgstr "" -#: plinth/modules/users/__init__.py:29 +#: plinth/modules/users/__init__.py:30 msgid "" "Create and manage user accounts. These accounts serve as centralized " "authentication mechanism for most apps. Some apps further require a user " "account to be part of a group to authorize the user to access the app." msgstr "" -#: plinth/modules/users/__init__.py:34 +#: plinth/modules/users/__init__.py:35 #, python-brace-format msgid "" "Any user may login to {box_name} web interface to see a list of apps " @@ -6515,19 +6551,29 @@ msgid "" "group may alter apps or system settings." msgstr "" -#: plinth/modules/users/__init__.py:55 +#: plinth/modules/users/__init__.py:56 msgid "Users and Groups" msgstr "" -#: plinth/modules/users/__init__.py:80 +#: plinth/modules/users/__init__.py:81 msgid "Access to all services and system settings" msgstr "" -#: plinth/modules/users/__init__.py:116 +#: plinth/modules/users/__init__.py:124 #, python-brace-format msgid "Check LDAP entry \"{search_item}\"" msgstr "" +#: plinth/modules/users/__init__.py:137 +#, python-brace-format +msgid "Check nslcd config \"{key} {value}\"" +msgstr "" + +#: plinth/modules/users/__init__.py:166 +#, python-brace-format +msgid "Check nsswitch config \"{database}\"" +msgstr "" + #: plinth/modules/users/forms.py:35 msgid "Username is taken or is reserved." msgstr "" @@ -7595,7 +7641,11 @@ msgstr "" msgid "Backup" msgstr "" -#: plinth/templates/toolbar.html:51 plinth/templates/toolbar.html:52 +#: plinth/templates/toolbar.html:53 +msgid "Re-run setup" +msgstr "" + +#: plinth/templates/toolbar.html:59 plinth/templates/toolbar.html:60 #: plinth/templates/uninstall.html:30 msgid "Uninstall" msgstr "" @@ -7611,11 +7661,11 @@ msgid "" "installed freshly again." msgstr "" -#: plinth/views.py:239 +#: plinth/views.py:241 msgid "Setting unchanged" msgstr "" -#: plinth/views.py:456 +#: plinth/views.py:478 #, python-brace-format msgid "before uninstall of {app_id}" msgstr "" diff --git a/plinth/locale/nb/LC_MESSAGES/django.po b/plinth/locale/nb/LC_MESSAGES/django.po index 37cb870f8..1d321bb9a 100644 --- a/plinth/locale/nb/LC_MESSAGES/django.po +++ b/plinth/locale/nb/LC_MESSAGES/django.po @@ -15,7 +15,7 @@ msgid "" msgstr "" "Project-Id-Version: FreedomBox UI\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-06-19 20:15-0400\n" +"POT-Creation-Date: 2023-07-31 20:04-0400\n" "PO-Revision-Date: 2022-11-07 10:05+0000\n" "Last-Translator: Petter Reinholdtsen \n" "Language-Team: Norwegian Bokmål Tor Project website. For " @@ -7014,59 +7030,50 @@ msgstr "" "href=\"https://www.torproject.org/download/download-easy.html.en\">Tor " "Browser." -#: plinth/modules/tor/__init__.py:30 +#: plinth/modules/tor/__init__.py:37 +msgid "" +"This app provides relay services to contribute to Tor network and help " +"others overcome censorship." +msgstr "" + +#: plinth/modules/tor/__init__.py:40 #, python-brace-format msgid "" -"A Tor SOCKS port is available on your {box_name} for internal networks on " -"TCP port 9050." +"This app provides an onion domain to expose {box_name} services via the Tor " +"network. Using Tor browser, one can access {box_name} from the internet even " +"when using an ISP that limits servers at home." msgstr "" -"En Tor SOCKS-port er tilgjengelig på din {box_name} for interne nettverk på " -"TCP port 9050." -#: plinth/modules/tor/__init__.py:48 +#: plinth/modules/tor/__init__.py:60 msgid "Tor" msgstr "Tor" -#: plinth/modules/tor/__init__.py:65 +#: plinth/modules/tor/__init__.py:76 msgid "Tor Onion Service" msgstr "Tor-løktjeneste" -#: plinth/modules/tor/__init__.py:69 -msgid "Tor Socks Proxy" -msgstr "Tor Socks-mellomtjener" - -#: plinth/modules/tor/__init__.py:73 +#: plinth/modules/tor/__init__.py:80 msgid "Tor Bridge Relay" msgstr "Tor bro-stafettvideresendingsoppsett" -#: plinth/modules/tor/__init__.py:132 +#: plinth/modules/tor/__init__.py:135 msgid "Tor relay port available" msgstr "Tor relay-port tilgjengelig" -#: plinth/modules/tor/__init__.py:143 +#: plinth/modules/tor/__init__.py:146 msgid "Obfs3 transport registered" msgstr "Obfs3-transport registrert" -#: plinth/modules/tor/__init__.py:153 +#: plinth/modules/tor/__init__.py:156 msgid "Obfs4 transport registered" msgstr "Obfs4-transport registrert" -#: plinth/modules/tor/__init__.py:165 +#: plinth/modules/tor/__init__.py:168 #, fuzzy #| msgid "Onion Service" msgid "Onion service is version 3" msgstr "Løktjeneste" -#: plinth/modules/tor/__init__.py:242 -#, python-brace-format -msgid "Access URL {url} on tcp{kind} via Tor" -msgstr "Adgang til URL {url} på tcp{kind} via Tor" - -#: plinth/modules/tor/__init__.py:253 -#, python-brace-format -msgid "Confirm Tor usage at {url} on tcp{kind}" -msgstr "Bekreft Tor-bruk på {url} via tcp{kind}" - #: plinth/modules/tor/forms.py:33 msgid "" "Enter a valid bridge with this format: [transport] IP:ORPort [fingerprint]" @@ -7102,11 +7109,11 @@ msgstr "" "bridges.torproject.org/ og kopiere/lime inn broinfoen her. For " "øyeblikket støttes ingen transporter, obfs3, obfs4 og scamblesuit." -#: plinth/modules/tor/forms.py:91 +#: plinth/modules/tor/forms.py:95 msgid "Enable Tor relay" msgstr "Aktiver Tor-videresending" -#: plinth/modules/tor/forms.py:92 +#: plinth/modules/tor/forms.py:96 #, python-brace-format msgid "" "When enabled, your {box_name} will run a Tor relay and donate bandwidth to " @@ -7117,11 +7124,11 @@ msgstr "" "båndbredde til Tor-nettverket. Gjør dette hvis båndbredden din for " "opplasting og nestlasting er mer enn 2 Mbits/s." -#: plinth/modules/tor/forms.py:97 +#: plinth/modules/tor/forms.py:101 msgid "Enable Tor bridge relay" msgstr "Aktiver Tor-bru-videresending" -#: plinth/modules/tor/forms.py:99 +#: plinth/modules/tor/forms.py:103 msgid "" "When enabled, relay information is published in the Tor bridge database " "instead of public Tor relay database making it harder to censor this node. " @@ -7131,13 +7138,13 @@ msgstr "" "stedet for den offentlige databasen over Tor-videresendere, hvilket gjør det " "vanskeligere å sensurere denne noden. Dette hjelper andre å unngå sensur." -#: plinth/modules/tor/forms.py:104 +#: plinth/modules/tor/forms.py:108 #, fuzzy #| msgid "Enable Tor Hidden Service" msgid "Enable Tor Onion Service" msgstr "Aktiver skjult Tor-tjeneste" -#: plinth/modules/tor/forms.py:106 +#: plinth/modules/tor/forms.py:110 #, fuzzy, python-brace-format #| msgid "" #| "A hidden service will allow {box_name} to provide selected services (such " @@ -7152,29 +7159,15 @@ msgstr "" "eller nettprat) uten å avsløre sin beliggenhet. Ikke bruk dette for å oppnå " "sterk anonymitet enda." -#: plinth/modules/tor/forms.py:111 -msgid "Download software packages over Tor" -msgstr "Last ned programpakker via Tor" - -#: plinth/modules/tor/forms.py:112 -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 " -"(personvern) og sikkerhet under nedlasting av programvare." - -#: plinth/modules/tor/forms.py:127 +#: plinth/modules/tor/forms.py:125 msgid "Specify at least one upstream bridge to use upstream bridges." msgstr "Angi minst én oppstrøms bro for å bruke oppstrøms broer." -#: plinth/modules/tor/manifest.py:15 +#: plinth/modules/tor/manifest.py:15 plinth/modules/torproxy/manifest.py:14 msgid "Tor Browser" msgstr "Tor-nettleseren" -#: plinth/modules/tor/manifest.py:31 +#: plinth/modules/tor/manifest.py:31 plinth/modules/torproxy/manifest.py:30 msgid "Orbot: Proxy with Tor" msgstr "Orbot: Mellomtjener med Tor" @@ -7186,16 +7179,59 @@ msgstr "Løktjeneste" msgid "Ports" msgstr "Porter" -#: plinth/modules/tor/views.py:53 +#: plinth/modules/tor/views.py:53 plinth/modules/torproxy/views.py:51 msgid "Updating configuration" msgstr "Oppdaterer oppsett" -#: plinth/modules/tor/views.py:70 +#: plinth/modules/tor/views.py:70 plinth/modules/torproxy/views.py:68 #, fuzzy, python-brace-format #| msgid "Error installing application: {error}" msgid "Error configuring app: {error}" msgstr "Feil ved programinstallering: {error}" +#: plinth/modules/torproxy/__init__.py:34 +#, python-brace-format +msgid "" +"This app provides a web proxy on your {box_name} for internal networks on " +"TCP port 9050 using the SOCKS protocol. This can be used by various apps to " +"access the internet via the Tor network. ISP censorship can be circumvented " +"using upstream bridges." +msgstr "" + +#: plinth/modules/torproxy/__init__.py:54 +#, fuzzy +#| msgid "Tor Socks Proxy" +msgid "Tor Proxy" +msgstr "Tor Socks-mellomtjener" + +#: plinth/modules/torproxy/__init__.py:79 +msgid "Tor Socks Proxy" +msgstr "Tor Socks-mellomtjener" + +#: plinth/modules/torproxy/__init__.py:138 +#, python-brace-format +msgid "Access URL {url} on tcp{kind} via Tor" +msgstr "Adgang til URL {url} på tcp{kind} via Tor" + +#: plinth/modules/torproxy/__init__.py:149 +#, python-brace-format +msgid "Confirm Tor usage at {url} on tcp{kind}" +msgstr "Bekreft Tor-bruk på {url} via tcp{kind}" + +#: plinth/modules/torproxy/forms.py:15 +msgid "Download software packages over Tor" +msgstr "Last ned programpakker via Tor" + +#: plinth/modules/torproxy/forms.py:16 +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 " +"(personvern) og sikkerhet under nedlasting av programvare." + #: plinth/modules/transmission/__init__.py:25 msgid "Transmission is a BitTorrent client with a web interface." msgstr "Transmission er en BitTorrent-klient som har et Web-grensesnitt." @@ -7587,7 +7623,7 @@ msgstr "" msgid "Starting distribution upgrade test." msgstr "Starter test av distribusjonsoppgradering." -#: plinth/modules/users/__init__.py:29 +#: plinth/modules/users/__init__.py:30 msgid "" "Create and manage user accounts. These accounts serve as centralized " "authentication mechanism for most apps. Some apps further require a user " @@ -7598,7 +7634,7 @@ msgstr "" "kan kreve at en brukerkonto er medlem av en gruppe for å gi brukeren tilgang " "til programmet." -#: plinth/modules/users/__init__.py:34 +#: plinth/modules/users/__init__.py:35 #, python-brace-format msgid "" "Any user may login to {box_name} web interface to see a list of apps " @@ -7609,19 +7645,29 @@ msgstr "" "liste over programmer som er relevante for dem på hjemmesiden. Dog kan kun " "brukere av admin-gruppen endre programmer eller systeminnstillinger." -#: plinth/modules/users/__init__.py:55 +#: plinth/modules/users/__init__.py:56 msgid "Users and Groups" msgstr "Brukere og grupper" -#: plinth/modules/users/__init__.py:80 +#: plinth/modules/users/__init__.py:81 msgid "Access to all services and system settings" msgstr "Tilgang til alle tjenester og systeminnstillinger" -#: plinth/modules/users/__init__.py:116 +#: plinth/modules/users/__init__.py:124 #, python-brace-format msgid "Check LDAP entry \"{search_item}\"" msgstr "Sjekk LDAP-oppføring «{search_item}»" +#: plinth/modules/users/__init__.py:137 +#, python-brace-format +msgid "Check nslcd config \"{key} {value}\"" +msgstr "" + +#: plinth/modules/users/__init__.py:166 +#, python-brace-format +msgid "Check nsswitch config \"{database}\"" +msgstr "" + #: plinth/modules/users/forms.py:35 msgid "Username is taken or is reserved." msgstr "Brukernavnet er opptatt eller reservert." @@ -8824,7 +8870,13 @@ msgstr "Oppdater" msgid "Backup" msgstr "Sikkerhetskopier" -#: plinth/templates/toolbar.html:51 plinth/templates/toolbar.html:52 +#: plinth/templates/toolbar.html:53 +#, fuzzy +#| msgid "Start setup" +msgid "Re-run setup" +msgstr "Start oppsett" + +#: plinth/templates/toolbar.html:59 plinth/templates/toolbar.html:60 #: plinth/templates/uninstall.html:30 #, fuzzy #| msgid "Install" @@ -8844,11 +8896,11 @@ msgstr "" "All programdata og oppsett blir permanent borte. Programmet kan installeres " "på nytt igjen." -#: plinth/views.py:239 +#: plinth/views.py:241 msgid "Setting unchanged" msgstr "Oppsett uendret" -#: plinth/views.py:456 +#: plinth/views.py:478 #, python-brace-format msgid "before uninstall of {app_id}" msgstr "før avinstallering av {app_id}" @@ -8857,6 +8909,14 @@ msgstr "før avinstallering av {app_id}" msgid "Gujarati" msgstr "Gujarati" +#, python-brace-format +#~ msgid "" +#~ "A Tor SOCKS port is available on your {box_name} for internal networks on " +#~ "TCP port 9050." +#~ msgstr "" +#~ "En Tor SOCKS-port er tilgjengelig på din {box_name} for interne nettverk " +#~ "på TCP port 9050." + #~ msgid "" #~ "Shadowsocks is a lightweight and secure SOCKS5 proxy, designed to protect " #~ "your Internet traffic. It can be used to bypass Internet filtering and " @@ -9613,9 +9673,6 @@ msgstr "Gujarati" #~ "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." -#~ msgid "Start setup" -#~ msgstr "Start oppsett" - #~ msgid "OpenVPN setup is running" #~ msgstr "OpenVPN-oppsett kjører" @@ -10260,9 +10317,6 @@ msgstr "Gujarati" #~ msgid "Error setting default app: {exception}" #~ msgstr "Feil ved endring av forvalgsprogram: {exception}" -#~ msgid "Default app set" -#~ msgstr "Forvalgsprogram satt" - #~ msgid "Abort" #~ msgstr "Anuller" diff --git a/plinth/locale/nl/LC_MESSAGES/django.po b/plinth/locale/nl/LC_MESSAGES/django.po index c72c5e462..e5f481cc2 100644 --- a/plinth/locale/nl/LC_MESSAGES/django.po +++ b/plinth/locale/nl/LC_MESSAGES/django.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-06-19 20:15-0400\n" -"PO-Revision-Date: 2023-06-10 15:51+0000\n" +"POT-Creation-Date: 2023-07-31 20:04-0400\n" +"PO-Revision-Date: 2023-07-19 18:07+0000\n" "Last-Translator: ikmaak \n" "Language-Team: Dutch \n" @@ -17,7 +17,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.18-dev\n" +"X-Generator: Weblate 5.0-dev\n" "X-Language: nl_NL\n" "X-Source-Language: C\n" @@ -30,7 +30,7 @@ msgstr "Paginabron" msgid "Static configuration {etc_path} is setup properly" msgstr "Statische configuratie {etc_path} is correct ingesteld" -#: plinth/context_processors.py:23 plinth/views.py:92 +#: plinth/context_processors.py:23 plinth/views.py:94 msgid "FreedomBox" msgstr "FreedomBox" @@ -914,7 +914,8 @@ msgstr "Admin" #: plinth/modules/bepasty/views.py:88 plinth/modules/searx/views.py:35 #: plinth/modules/searx/views.py:46 plinth/modules/security/views.py:56 -#: plinth/modules/tor/views.py:73 plinth/modules/zoph/views.py:74 +#: plinth/modules/tor/views.py:73 plinth/modules/torproxy/views.py:71 +#: plinth/modules/zoph/views.py:74 msgid "Configuration updated." msgstr "Configuratie bijgewerkt." @@ -2153,7 +2154,7 @@ msgstr "Poort" msgid "Host/Target/Value" msgstr "Host/Target/Value" -#: plinth/modules/firewall/__init__.py:23 +#: plinth/modules/firewall/__init__.py:24 #, python-brace-format msgid "" "Firewall is a security system that controls the incoming and outgoing " @@ -2164,10 +2165,24 @@ msgstr "" "datastromen van {box_name} stuurt. Een geactiveerde en goed ingestelde " "firewall vermindert het risico op beveiligingsrisico's vanuit internet." -#: plinth/modules/firewall/__init__.py:59 +#: plinth/modules/firewall/__init__.py:60 msgid "Firewall" msgstr "Firewall" +#: plinth/modules/firewall/__init__.py:269 +#, fuzzy +#| msgid "Default" +msgid "Default zone is external" +msgstr "Standaard" + +#: plinth/modules/firewall/__init__.py:276 +msgid "Firewall backend is nftables" +msgstr "" + +#: plinth/modules/firewall/__init__.py:287 +msgid "Direct passthrough rules exist" +msgstr "" + #: plinth/modules/firewall/components.py:134 #, python-brace-format msgid "Port {name} ({details}) available for internal networks" @@ -2854,7 +2869,8 @@ msgstr "I2P-toepassing beheren" msgid "I2P" msgstr "I2P" -#: plinth/modules/i2p/__init__.py:53 plinth/modules/tor/__init__.py:49 +#: plinth/modules/i2p/__init__.py:53 plinth/modules/tor/__init__.py:61 +#: plinth/modules/torproxy/__init__.py:55 msgid "Anonymity Network" msgstr "Anonimiteitsnetwerk" @@ -3842,7 +3858,7 @@ msgid "" "each type of name, it is shown whether the HTTP, HTTPS, and SSH services are " "enabled or disabled for incoming connections through the given name." msgstr "" -"Name Services biedt een overzicht van de manieren waarop {box_name} " +"Domeindiensten biedt een overzicht van de manieren waarop {box_name} " "bereikbaar is via het openbare internet: domeinnaam, Tor-onionservice en " "Pagekite. Voor elk type naam wordt weergegeven of de HTTP-, HTTPS- en SSH-" "services zijn ingeschakeld of uitgeschakeld voor binnenkomende verbindingen " @@ -3850,7 +3866,7 @@ msgstr "" #: plinth/modules/names/__init__.py:43 msgid "Name Services" -msgstr "Domeinnamen" +msgstr "Domeindiensten" #: plinth/modules/names/components.py:12 msgid "All" @@ -5253,7 +5269,7 @@ msgstr "Deze dienst is al beschikbaar als een standaarddienst." #: plinth/modules/pagekite/forms.py:169 msgid "Added custom service" -msgstr "Aangepaste dienst toevoegen" +msgstr "Aangepaste dienst toegevoegd" #: plinth/modules/pagekite/forms.py:172 msgid "This service already exists" @@ -5494,7 +5510,7 @@ msgstr "Privoxy" msgid "Web Proxy" msgstr "Web Proxy" -#: plinth/modules/privoxy/__init__.py:113 +#: plinth/modules/privoxy/__init__.py:114 #, python-brace-format msgid "Access {url} with proxy {proxy} on tcp{kind}" msgstr "Gebruik {url} via proxy {proxy} op tcp{kind}" @@ -5707,6 +5723,11 @@ msgid "" "uncheck this option. When unchecked, a text entry field is added to the " "login page so the user can specify to which account they wish to connect." msgstr "" +"Als dit ingeschakeld is kunnen gebruikers alleen mails lezen en verzenden " +"via deze {box_name}. Om Roundcube te gebruiken met een extern e-mailaccount, " +"zoals Gmail, moet deze optie uitgevinkt zijn. Als dit uitgeschakeld is wordt " +"een tekstinvoerveld toegevoegd aan de inlogpagina, zodat de gebruiker kan " +"aangeven met welk account verbinding moet worden gemaakt." #: plinth/modules/rssbridge/__init__.py:21 msgid "" @@ -6944,7 +6965,7 @@ msgstr "Syncthing" msgid "File Synchronization" msgstr "Bestandssynchronisatie" -#: plinth/modules/tor/__init__.py:23 +#: plinth/modules/tor/__init__.py:31 plinth/modules/torproxy/__init__.py:27 msgid "" "Tor is an anonymous communication system. You can learn more about it from " "the Tor Project website. For " @@ -6958,57 +6979,48 @@ msgstr "" "de Tor " "Browser aan." -#: plinth/modules/tor/__init__.py:30 +#: plinth/modules/tor/__init__.py:37 +msgid "" +"This app provides relay services to contribute to Tor network and help " +"others overcome censorship." +msgstr "" + +#: plinth/modules/tor/__init__.py:40 #, python-brace-format msgid "" -"A Tor SOCKS port is available on your {box_name} for internal networks on " -"TCP port 9050." +"This app provides an onion domain to expose {box_name} services via the Tor " +"network. Using Tor browser, one can access {box_name} from the internet even " +"when using an ISP that limits servers at home." msgstr "" -"Een Tor SOCKS poort is beschikbaar op {box_name} voor interne netwerken op " -"TCP poort 9050." -#: plinth/modules/tor/__init__.py:48 +#: plinth/modules/tor/__init__.py:60 msgid "Tor" msgstr "Tor" -#: plinth/modules/tor/__init__.py:65 +#: plinth/modules/tor/__init__.py:76 msgid "Tor Onion Service" msgstr "Tor-Onion Dienst" -#: plinth/modules/tor/__init__.py:69 -msgid "Tor Socks Proxy" -msgstr "Tor Socks Proxy" - -#: plinth/modules/tor/__init__.py:73 +#: plinth/modules/tor/__init__.py:80 msgid "Tor Bridge Relay" msgstr "Tor Bridge Relay" -#: plinth/modules/tor/__init__.py:132 +#: plinth/modules/tor/__init__.py:135 msgid "Tor relay port available" msgstr "Tor relay poort beschikbaar" -#: plinth/modules/tor/__init__.py:143 +#: plinth/modules/tor/__init__.py:146 msgid "Obfs3 transport registered" msgstr "Obfs3 transport geregistreerd" -#: plinth/modules/tor/__init__.py:153 +#: plinth/modules/tor/__init__.py:156 msgid "Obfs4 transport registered" msgstr "Obfs4 transport geregistreerd" -#: plinth/modules/tor/__init__.py:165 +#: plinth/modules/tor/__init__.py:168 msgid "Onion service is version 3" msgstr "Onion service is versie 3" -#: plinth/modules/tor/__init__.py:242 -#, 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:253 -#, python-brace-format -msgid "Confirm Tor usage at {url} on tcp{kind}" -msgstr "Bevestig Tor gebruik met {url} via tcp{kind}" - #: plinth/modules/tor/forms.py:33 msgid "" "Enter a valid bridge with this format: [transport] IP:ORPort [fingerprint]" @@ -7046,11 +7058,11 @@ msgstr "" "Momenteel worden de volgende transportmethoden ondersteund; geen, obfs3, " "obfs4 en scamblesuit." -#: plinth/modules/tor/forms.py:91 +#: plinth/modules/tor/forms.py:95 msgid "Enable Tor relay" msgstr "Tor Relay Inschakelen" -#: plinth/modules/tor/forms.py:92 +#: plinth/modules/tor/forms.py:96 #, python-brace-format msgid "" "When enabled, your {box_name} will run a Tor relay and donate bandwidth to " @@ -7061,11 +7073,11 @@ msgstr "" "bandbreedte delen met het Tor-netwerk. Doe dit alleen als er meer dan 2 " "megabit/s upload- en download bandbreedte beschikbaar is." -#: plinth/modules/tor/forms.py:97 +#: plinth/modules/tor/forms.py:101 msgid "Enable Tor bridge relay" msgstr "Tor Bridge Relay inschakelen" -#: plinth/modules/tor/forms.py:99 +#: plinth/modules/tor/forms.py:103 msgid "" "When enabled, relay information is published in the Tor bridge database " "instead of public Tor relay database making it harder to censor this node. " @@ -7076,11 +7088,11 @@ msgstr "" "moeilijker om dit knooppunt te censureren. Dit helpt anderen censuur te " "omzeilen." -#: plinth/modules/tor/forms.py:104 +#: plinth/modules/tor/forms.py:108 msgid "Enable Tor Onion Service" msgstr "Tor Onion Service inschakelen" -#: plinth/modules/tor/forms.py:106 +#: plinth/modules/tor/forms.py:110 #, python-brace-format msgid "" "An onion service will allow {box_name} to provide selected services (such as " @@ -7091,31 +7103,17 @@ msgstr "" "(zoals wiki of chat) kan aanbieden zonder de locatie te onthullen. Deze " "dienst nog niet gebruiken als sterke anonimiteit vereist is." -#: plinth/modules/tor/forms.py:111 -msgid "Download software packages over Tor" -msgstr "Download Softwarepakketen via Tor" - -#: plinth/modules/tor/forms.py:112 -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/forms.py:127 +#: plinth/modules/tor/forms.py:125 msgid "Specify at least one upstream bridge to use upstream bridges." msgstr "" "Geef ten minste één upstream brug in voor het gebruik van de upstream " "bruggen." -#: plinth/modules/tor/manifest.py:15 +#: plinth/modules/tor/manifest.py:15 plinth/modules/torproxy/manifest.py:14 msgid "Tor Browser" msgstr "Tor Browser" -#: plinth/modules/tor/manifest.py:31 +#: plinth/modules/tor/manifest.py:31 plinth/modules/torproxy/manifest.py:30 msgid "Orbot: Proxy with Tor" msgstr "Orbot: Proxy met Tor" @@ -7127,15 +7125,58 @@ msgstr "Onion Service" msgid "Ports" msgstr "Poorten" -#: plinth/modules/tor/views.py:53 +#: plinth/modules/tor/views.py:53 plinth/modules/torproxy/views.py:51 msgid "Updating configuration" msgstr "Configuratie bijwerken" -#: plinth/modules/tor/views.py:70 +#: plinth/modules/tor/views.py:70 plinth/modules/torproxy/views.py:68 #, python-brace-format msgid "Error configuring app: {error}" msgstr "Fout bij het configureren van de toepassing: {error}" +#: plinth/modules/torproxy/__init__.py:34 +#, python-brace-format +msgid "" +"This app provides a web proxy on your {box_name} for internal networks on " +"TCP port 9050 using the SOCKS protocol. This can be used by various apps to " +"access the internet via the Tor network. ISP censorship can be circumvented " +"using upstream bridges." +msgstr "" + +#: plinth/modules/torproxy/__init__.py:54 +#, fuzzy +#| msgid "Tor Socks Proxy" +msgid "Tor Proxy" +msgstr "Tor Socks Proxy" + +#: plinth/modules/torproxy/__init__.py:79 +msgid "Tor Socks Proxy" +msgstr "Tor Socks Proxy" + +#: plinth/modules/torproxy/__init__.py:138 +#, python-brace-format +msgid "Access URL {url} on tcp{kind} via Tor" +msgstr "Gebruik URL {url} op tcp{kind} via Tor" + +#: plinth/modules/torproxy/__init__.py:149 +#, python-brace-format +msgid "Confirm Tor usage at {url} on tcp{kind}" +msgstr "Bevestig Tor gebruik met {url} via tcp{kind}" + +#: plinth/modules/torproxy/forms.py:15 +msgid "Download software packages over Tor" +msgstr "Download Softwarepakketen via Tor" + +#: plinth/modules/torproxy/forms.py:16 +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/transmission/__init__.py:25 msgid "Transmission is a BitTorrent client with a web interface." msgstr "Transmission is een BitTorrent-client met een webinterface." @@ -7521,7 +7562,7 @@ msgstr "Tussentijdse Software Updates zijn ingeschakeld." msgid "Starting distribution upgrade test." msgstr "Start de distributie upgrade test." -#: plinth/modules/users/__init__.py:29 +#: plinth/modules/users/__init__.py:30 msgid "" "Create and manage user accounts. These accounts serve as centralized " "authentication mechanism for most apps. Some apps further require a user " @@ -7532,7 +7573,7 @@ msgstr "" "apps moet een gebruikersaccount deel uitmaken van een groep om de gebruiker " "toegang te geven tot de toepassing." -#: plinth/modules/users/__init__.py:34 +#: plinth/modules/users/__init__.py:35 #, python-brace-format msgid "" "Any user may login to {box_name} web interface to see a list of apps " @@ -7544,19 +7585,29 @@ msgstr "" "die lid zijn van de admin -groep mogen toepassings- of " "systeeminstellingen wijzigen." -#: plinth/modules/users/__init__.py:55 +#: plinth/modules/users/__init__.py:56 msgid "Users and Groups" msgstr "Gebruikers en Groepen" -#: plinth/modules/users/__init__.py:80 +#: plinth/modules/users/__init__.py:81 msgid "Access to all services and system settings" msgstr "Toegang tot alle diensten en systeeminstellingen" -#: plinth/modules/users/__init__.py:116 +#: plinth/modules/users/__init__.py:124 #, python-brace-format msgid "Check LDAP entry \"{search_item}\"" msgstr "Zoek LDAP item \"{search_item}\"" +#: plinth/modules/users/__init__.py:137 +#, python-brace-format +msgid "Check nslcd config \"{key} {value}\"" +msgstr "" + +#: plinth/modules/users/__init__.py:166 +#, python-brace-format +msgid "Check nsswitch config \"{database}\"" +msgstr "" + #: plinth/modules/users/forms.py:35 msgid "Username is taken or is reserved." msgstr "Gebruikersnaam is in gebruik of is gereserveerd." @@ -8754,7 +8805,13 @@ msgstr "Update" msgid "Backup" msgstr "Back-up" -#: plinth/templates/toolbar.html:51 plinth/templates/toolbar.html:52 +#: plinth/templates/toolbar.html:53 +#, fuzzy +#| msgid "Start setup" +msgid "Re-run setup" +msgstr "Setup starten" + +#: plinth/templates/toolbar.html:59 plinth/templates/toolbar.html:60 #: plinth/templates/uninstall.html:30 msgid "Uninstall" msgstr "Verwijderen" @@ -8772,11 +8829,11 @@ msgstr "" "Alle toepassings-gegevens en configuratie gaan permanent verloren. de " "toepassing kan opnieuw vers worden geïnstalleerd." -#: plinth/views.py:239 +#: plinth/views.py:241 msgid "Setting unchanged" msgstr "Instelling onveranderd" -#: plinth/views.py:456 +#: plinth/views.py:478 #, python-brace-format msgid "before uninstall of {app_id}" msgstr "voor het verwijderen van {app_id}" @@ -8785,6 +8842,14 @@ msgstr "voor het verwijderen van {app_id}" msgid "Gujarati" msgstr "Gujarati" +#, python-brace-format +#~ msgid "" +#~ "A Tor SOCKS port is available on your {box_name} for internal networks on " +#~ "TCP port 9050." +#~ msgstr "" +#~ "Een Tor SOCKS poort is beschikbaar op {box_name} voor interne netwerken " +#~ "op TCP poort 9050." + #, python-brace-format #~ msgid "" #~ "When enabled, text box for server input is removed from login page and " @@ -9597,9 +9662,6 @@ msgstr "Gujarati" #~ "Afhankelijk van de snelheid van %(box_name)s kan dit zelfs uren duren. " #~ "Als de installatie wordt onderbroken, kan deze opnieuw gestart worden." -#~ msgid "Start setup" -#~ msgstr "Setup starten" - #~ msgid "OpenVPN setup is running" #~ msgstr "OpenVPN setup draait" @@ -10290,11 +10352,6 @@ msgstr "Gujarati" #~ msgid "Error setting default app: {exception}" #~ msgstr "Taal instellen mislukt: {exception}" -#, fuzzy -#~| msgid "Default" -#~ msgid "Default app set" -#~ msgstr "Standaard" - #, fuzzy #~| msgid "NTP client in contact with servers" #~ msgid "chrony client in contact with servers" diff --git a/plinth/locale/pl/LC_MESSAGES/django.po b/plinth/locale/pl/LC_MESSAGES/django.po index c136f4af9..a474172b2 100644 --- a/plinth/locale/pl/LC_MESSAGES/django.po +++ b/plinth/locale/pl/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-06-19 20:15-0400\n" +"POT-Creation-Date: 2023-07-31 20:04-0400\n" "PO-Revision-Date: 2022-09-14 17:19+0000\n" "Last-Translator: ikmaak \n" "Language-Team: Polish Tor Project website. For " @@ -6482,57 +6496,50 @@ msgid "" "en\">Tor Browser." msgstr "" -#: plinth/modules/tor/__init__.py:30 -#, python-brace-format +#: plinth/modules/tor/__init__.py:37 msgid "" -"A Tor SOCKS port is available on your {box_name} for internal networks on " -"TCP port 9050." +"This app provides relay services to contribute to Tor network and help " +"others overcome censorship." msgstr "" -#: plinth/modules/tor/__init__.py:48 +#: plinth/modules/tor/__init__.py:40 +#, python-brace-format +msgid "" +"This app provides an onion domain to expose {box_name} services via the Tor " +"network. Using Tor browser, one can access {box_name} from the internet even " +"when using an ISP that limits servers at home." +msgstr "" + +#: plinth/modules/tor/__init__.py:60 msgid "Tor" msgstr "" -#: plinth/modules/tor/__init__.py:65 +#: plinth/modules/tor/__init__.py:76 msgid "Tor Onion Service" msgstr "" -#: plinth/modules/tor/__init__.py:69 -msgid "Tor Socks Proxy" -msgstr "" - -#: plinth/modules/tor/__init__.py:73 +#: plinth/modules/tor/__init__.py:80 msgid "Tor Bridge Relay" msgstr "" -#: plinth/modules/tor/__init__.py:132 +#: plinth/modules/tor/__init__.py:135 msgid "Tor relay port available" msgstr "" -#: plinth/modules/tor/__init__.py:143 +#: plinth/modules/tor/__init__.py:146 msgid "Obfs3 transport registered" msgstr "" -#: plinth/modules/tor/__init__.py:153 +#: plinth/modules/tor/__init__.py:156 msgid "Obfs4 transport registered" msgstr "" -#: plinth/modules/tor/__init__.py:165 +#: plinth/modules/tor/__init__.py:168 #, fuzzy #| msgid "Dynamic DNS Service" msgid "Onion service is version 3" msgstr "Usługa dynamicznego DNS" -#: plinth/modules/tor/__init__.py:242 -#, python-brace-format -msgid "Access URL {url} on tcp{kind} via Tor" -msgstr "" - -#: plinth/modules/tor/__init__.py:253 -#, python-brace-format -msgid "Confirm Tor usage at {url} on tcp{kind}" -msgstr "" - #: plinth/modules/tor/forms.py:33 msgid "" "Enter a valid bridge with this format: [transport] IP:ORPort [fingerprint]" @@ -6560,11 +6567,11 @@ msgid "" "here. Currently supported transports are none, obfs3, obfs4 and scamblesuit." msgstr "" -#: plinth/modules/tor/forms.py:91 +#: plinth/modules/tor/forms.py:95 msgid "Enable Tor relay" msgstr "Włącz przekaźnik Tora" -#: plinth/modules/tor/forms.py:92 +#: plinth/modules/tor/forms.py:96 #, python-brace-format msgid "" "When enabled, your {box_name} will run a Tor relay and donate bandwidth to " @@ -6572,24 +6579,24 @@ msgid "" "download bandwidth." msgstr "" -#: plinth/modules/tor/forms.py:97 +#: plinth/modules/tor/forms.py:101 msgid "Enable Tor bridge relay" msgstr "" -#: plinth/modules/tor/forms.py:99 +#: plinth/modules/tor/forms.py:103 msgid "" "When enabled, relay information is published in the Tor bridge database " "instead of public Tor relay database making it harder to censor this node. " "This helps others circumvent censorship." msgstr "" -#: plinth/modules/tor/forms.py:104 +#: plinth/modules/tor/forms.py:108 #, fuzzy #| msgid "Enable Tor relay" msgid "Enable Tor Onion Service" msgstr "Włącz przekaźnik Tora" -#: plinth/modules/tor/forms.py:106 +#: plinth/modules/tor/forms.py:110 #, python-brace-format msgid "" "An onion service will allow {box_name} to provide selected services (such as " @@ -6597,26 +6604,15 @@ msgid "" "anonymity yet." msgstr "" -#: plinth/modules/tor/forms.py:111 -msgid "Download software packages over Tor" -msgstr "" - -#: plinth/modules/tor/forms.py:112 -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/forms.py:127 +#: plinth/modules/tor/forms.py:125 msgid "Specify at least one upstream bridge to use upstream bridges." msgstr "" -#: plinth/modules/tor/manifest.py:15 +#: plinth/modules/tor/manifest.py:15 plinth/modules/torproxy/manifest.py:14 msgid "Tor Browser" msgstr "" -#: plinth/modules/tor/manifest.py:31 +#: plinth/modules/tor/manifest.py:31 plinth/modules/torproxy/manifest.py:30 msgid "Orbot: Proxy with Tor" msgstr "" @@ -6630,18 +6626,58 @@ msgstr "Usługa dynamicznego DNS" msgid "Ports" msgstr "" -#: plinth/modules/tor/views.py:53 +#: plinth/modules/tor/views.py:53 plinth/modules/torproxy/views.py:51 #, fuzzy #| msgid "An error occurred during configuration." msgid "Updating configuration" msgstr "Podczas konfiguracji wystąpił błąd." -#: plinth/modules/tor/views.py:70 +#: plinth/modules/tor/views.py:70 plinth/modules/torproxy/views.py:68 #, fuzzy, python-brace-format #| msgid "Error installing application: {error}" msgid "Error configuring app: {error}" msgstr "Błąd podczas instalowania aplikacji: {error}" +#: plinth/modules/torproxy/__init__.py:34 +#, python-brace-format +msgid "" +"This app provides a web proxy on your {box_name} for internal networks on " +"TCP port 9050 using the SOCKS protocol. This can be used by various apps to " +"access the internet via the Tor network. ISP censorship can be circumvented " +"using upstream bridges." +msgstr "" + +#: plinth/modules/torproxy/__init__.py:54 +#, fuzzy +#| msgid "I2P Proxy" +msgid "Tor Proxy" +msgstr "I2P Proxy" + +#: plinth/modules/torproxy/__init__.py:79 +msgid "Tor Socks Proxy" +msgstr "" + +#: plinth/modules/torproxy/__init__.py:138 +#, python-brace-format +msgid "Access URL {url} on tcp{kind} via Tor" +msgstr "" + +#: plinth/modules/torproxy/__init__.py:149 +#, python-brace-format +msgid "Confirm Tor usage at {url} on tcp{kind}" +msgstr "" + +#: plinth/modules/torproxy/forms.py:15 +msgid "Download software packages over Tor" +msgstr "" + +#: plinth/modules/torproxy/forms.py:16 +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/transmission/__init__.py:25 msgid "Transmission is a BitTorrent client with a web interface." msgstr "Transmission to klient BitTorrent z interfejsem webowym." @@ -7003,14 +7039,14 @@ msgstr "" msgid "Starting distribution upgrade test." msgstr "Rejestracja użytkowników wyłączona" -#: plinth/modules/users/__init__.py:29 +#: plinth/modules/users/__init__.py:30 msgid "" "Create and manage user accounts. These accounts serve as centralized " "authentication mechanism for most apps. Some apps further require a user " "account to be part of a group to authorize the user to access the app." msgstr "" -#: plinth/modules/users/__init__.py:34 +#: plinth/modules/users/__init__.py:35 #, python-brace-format msgid "" "Any user may login to {box_name} web interface to see a list of apps " @@ -7018,19 +7054,29 @@ msgid "" "group may alter apps or system settings." msgstr "" -#: plinth/modules/users/__init__.py:55 +#: plinth/modules/users/__init__.py:56 msgid "Users and Groups" msgstr "" -#: plinth/modules/users/__init__.py:80 +#: plinth/modules/users/__init__.py:81 msgid "Access to all services and system settings" msgstr "" -#: plinth/modules/users/__init__.py:116 +#: plinth/modules/users/__init__.py:124 #, python-brace-format msgid "Check LDAP entry \"{search_item}\"" msgstr "" +#: plinth/modules/users/__init__.py:137 +#, python-brace-format +msgid "Check nslcd config \"{key} {value}\"" +msgstr "" + +#: plinth/modules/users/__init__.py:166 +#, python-brace-format +msgid "Check nsswitch config \"{database}\"" +msgstr "" + #: plinth/modules/users/forms.py:35 msgid "Username is taken or is reserved." msgstr "" @@ -8232,7 +8278,11 @@ msgstr "" msgid "Backup" msgstr "Kopie zapasowe" -#: plinth/templates/toolbar.html:51 plinth/templates/toolbar.html:52 +#: plinth/templates/toolbar.html:53 +msgid "Re-run setup" +msgstr "" + +#: plinth/templates/toolbar.html:59 plinth/templates/toolbar.html:60 #: plinth/templates/uninstall.html:30 #, fuzzy #| msgid "Application installed." @@ -8251,11 +8301,11 @@ msgid "" "installed freshly again." msgstr "" -#: plinth/views.py:239 +#: plinth/views.py:241 msgid "Setting unchanged" msgstr "Ustawienie bez zmian" -#: plinth/views.py:456 +#: plinth/views.py:478 #, python-brace-format msgid "before uninstall of {app_id}" msgstr "" diff --git a/plinth/locale/pt/LC_MESSAGES/django.po b/plinth/locale/pt/LC_MESSAGES/django.po index 3f9d299a0..7909ef656 100644 --- a/plinth/locale/pt/LC_MESSAGES/django.po +++ b/plinth/locale/pt/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-06-19 20:15-0400\n" +"POT-Creation-Date: 2023-07-31 20:04-0400\n" "PO-Revision-Date: 2023-05-22 15:50+0000\n" "Last-Translator: Frederico Gomes \n" "Language-Team: Portuguese Tor Project website. For " @@ -6337,57 +6351,50 @@ msgid "" "en\">Tor Browser." msgstr "" -#: plinth/modules/tor/__init__.py:30 -#, python-brace-format +#: plinth/modules/tor/__init__.py:37 msgid "" -"A Tor SOCKS port is available on your {box_name} for internal networks on " -"TCP port 9050." +"This app provides relay services to contribute to Tor network and help " +"others overcome censorship." msgstr "" -#: plinth/modules/tor/__init__.py:48 +#: plinth/modules/tor/__init__.py:40 +#, python-brace-format +msgid "" +"This app provides an onion domain to expose {box_name} services via the Tor " +"network. Using Tor browser, one can access {box_name} from the internet even " +"when using an ISP that limits servers at home." +msgstr "" + +#: plinth/modules/tor/__init__.py:60 msgid "Tor" msgstr "" -#: plinth/modules/tor/__init__.py:65 +#: plinth/modules/tor/__init__.py:76 msgid "Tor Onion Service" msgstr "" -#: plinth/modules/tor/__init__.py:69 -msgid "Tor Socks Proxy" -msgstr "" - -#: plinth/modules/tor/__init__.py:73 +#: plinth/modules/tor/__init__.py:80 msgid "Tor Bridge Relay" msgstr "" -#: plinth/modules/tor/__init__.py:132 +#: plinth/modules/tor/__init__.py:135 msgid "Tor relay port available" msgstr "" -#: plinth/modules/tor/__init__.py:143 +#: plinth/modules/tor/__init__.py:146 msgid "Obfs3 transport registered" msgstr "" -#: plinth/modules/tor/__init__.py:153 +#: plinth/modules/tor/__init__.py:156 msgid "Obfs4 transport registered" msgstr "" -#: plinth/modules/tor/__init__.py:165 +#: plinth/modules/tor/__init__.py:168 #, fuzzy #| msgid "Service discovery server is running" msgid "Onion service is version 3" msgstr "O Servidor da descoberta do serviço está a correr" -#: plinth/modules/tor/__init__.py:242 -#, python-brace-format -msgid "Access URL {url} on tcp{kind} via Tor" -msgstr "" - -#: plinth/modules/tor/__init__.py:253 -#, python-brace-format -msgid "Confirm Tor usage at {url} on tcp{kind}" -msgstr "" - #: plinth/modules/tor/forms.py:33 msgid "" "Enter a valid bridge with this format: [transport] IP:ORPort [fingerprint]" @@ -6415,13 +6422,13 @@ msgid "" "here. Currently supported transports are none, obfs3, obfs4 and scamblesuit." msgstr "" -#: plinth/modules/tor/forms.py:91 +#: plinth/modules/tor/forms.py:95 #, fuzzy #| msgid "Enable network time" msgid "Enable Tor relay" msgstr "Ativar tempo da rede" -#: plinth/modules/tor/forms.py:92 +#: plinth/modules/tor/forms.py:96 #, python-brace-format msgid "" "When enabled, your {box_name} will run a Tor relay and donate bandwidth to " @@ -6429,24 +6436,24 @@ msgid "" "download bandwidth." msgstr "" -#: plinth/modules/tor/forms.py:97 +#: plinth/modules/tor/forms.py:101 msgid "Enable Tor bridge relay" msgstr "" -#: plinth/modules/tor/forms.py:99 +#: plinth/modules/tor/forms.py:103 msgid "" "When enabled, relay information is published in the Tor bridge database " "instead of public Tor relay database making it harder to censor this node. " "This helps others circumvent censorship." msgstr "" -#: plinth/modules/tor/forms.py:104 +#: plinth/modules/tor/forms.py:108 #, fuzzy #| msgid "Enable service discovery" msgid "Enable Tor Onion Service" msgstr "Permitir descoberta do serviço" -#: plinth/modules/tor/forms.py:106 +#: plinth/modules/tor/forms.py:110 #, python-brace-format msgid "" "An onion service will allow {box_name} to provide selected services (such as " @@ -6454,26 +6461,15 @@ msgid "" "anonymity yet." msgstr "" -#: plinth/modules/tor/forms.py:111 -msgid "Download software packages over Tor" -msgstr "" - -#: plinth/modules/tor/forms.py:112 -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/forms.py:127 +#: plinth/modules/tor/forms.py:125 msgid "Specify at least one upstream bridge to use upstream bridges." msgstr "" -#: plinth/modules/tor/manifest.py:15 +#: plinth/modules/tor/manifest.py:15 plinth/modules/torproxy/manifest.py:14 msgid "Tor Browser" msgstr "" -#: plinth/modules/tor/manifest.py:31 +#: plinth/modules/tor/manifest.py:31 plinth/modules/torproxy/manifest.py:30 msgid "Orbot: Proxy with Tor" msgstr "" @@ -6485,18 +6481,58 @@ msgstr "" msgid "Ports" msgstr "" -#: plinth/modules/tor/views.py:53 +#: plinth/modules/tor/views.py:53 plinth/modules/torproxy/views.py:51 #, fuzzy #| msgid "General Configuration" msgid "Updating configuration" msgstr "Configuração Geral" -#: plinth/modules/tor/views.py:70 +#: plinth/modules/tor/views.py:70 plinth/modules/torproxy/views.py:68 #, fuzzy, python-brace-format #| msgid "Error installing application: {error}" msgid "Error configuring app: {error}" msgstr "Erro a instalar a aplicação: {error}" +#: plinth/modules/torproxy/__init__.py:34 +#, python-brace-format +msgid "" +"This app provides a web proxy on your {box_name} for internal networks on " +"TCP port 9050 using the SOCKS protocol. This can be used by various apps to " +"access the internet via the Tor network. ISP censorship can be circumvented " +"using upstream bridges." +msgstr "" + +#: plinth/modules/torproxy/__init__.py:54 +#, fuzzy +#| msgid "I2P Proxy" +msgid "Tor Proxy" +msgstr "I2P Proxy" + +#: plinth/modules/torproxy/__init__.py:79 +msgid "Tor Socks Proxy" +msgstr "" + +#: plinth/modules/torproxy/__init__.py:138 +#, python-brace-format +msgid "Access URL {url} on tcp{kind} via Tor" +msgstr "" + +#: plinth/modules/torproxy/__init__.py:149 +#, python-brace-format +msgid "Confirm Tor usage at {url} on tcp{kind}" +msgstr "" + +#: plinth/modules/torproxy/forms.py:15 +msgid "Download software packages over Tor" +msgstr "" + +#: plinth/modules/torproxy/forms.py:16 +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/transmission/__init__.py:25 msgid "Transmission is a BitTorrent client with a web interface." msgstr "" @@ -6840,14 +6876,14 @@ msgstr "" msgid "Starting distribution upgrade test." msgstr "A iniciar teste de atualização de distribuição." -#: plinth/modules/users/__init__.py:29 +#: plinth/modules/users/__init__.py:30 msgid "" "Create and manage user accounts. These accounts serve as centralized " "authentication mechanism for most apps. Some apps further require a user " "account to be part of a group to authorize the user to access the app." msgstr "" -#: plinth/modules/users/__init__.py:34 +#: plinth/modules/users/__init__.py:35 #, python-brace-format msgid "" "Any user may login to {box_name} web interface to see a list of apps " @@ -6855,19 +6891,29 @@ msgid "" "group may alter apps or system settings." msgstr "" -#: plinth/modules/users/__init__.py:55 +#: plinth/modules/users/__init__.py:56 msgid "Users and Groups" msgstr "" -#: plinth/modules/users/__init__.py:80 +#: plinth/modules/users/__init__.py:81 msgid "Access to all services and system settings" msgstr "" -#: plinth/modules/users/__init__.py:116 +#: plinth/modules/users/__init__.py:124 #, python-brace-format msgid "Check LDAP entry \"{search_item}\"" msgstr "" +#: plinth/modules/users/__init__.py:137 +#, python-brace-format +msgid "Check nslcd config \"{key} {value}\"" +msgstr "" + +#: plinth/modules/users/__init__.py:166 +#, python-brace-format +msgid "Check nsswitch config \"{database}\"" +msgstr "" + #: plinth/modules/users/forms.py:35 msgid "Username is taken or is reserved." msgstr "" @@ -7996,7 +8042,11 @@ msgstr "" msgid "Backup" msgstr "Cópia de segurança" -#: plinth/templates/toolbar.html:51 plinth/templates/toolbar.html:52 +#: plinth/templates/toolbar.html:53 +msgid "Re-run setup" +msgstr "" + +#: plinth/templates/toolbar.html:59 plinth/templates/toolbar.html:60 #: plinth/templates/uninstall.html:30 #, fuzzy #| msgid "Install" @@ -8014,11 +8064,11 @@ msgid "" "installed freshly again." msgstr "" -#: plinth/views.py:239 +#: plinth/views.py:241 msgid "Setting unchanged" msgstr "Definição inalterada" -#: plinth/views.py:456 +#: plinth/views.py:478 #, python-brace-format msgid "before uninstall of {app_id}" msgstr "" diff --git a/plinth/locale/ru/LC_MESSAGES/django.po b/plinth/locale/ru/LC_MESSAGES/django.po index 6aa7a0e9e..22906018c 100644 --- a/plinth/locale/ru/LC_MESSAGES/django.po +++ b/plinth/locale/ru/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-06-19 20:15-0400\n" +"POT-Creation-Date: 2023-07-31 20:04-0400\n" "PO-Revision-Date: 2022-10-10 18:05+0000\n" "Last-Translator: Nikita Epifanov \n" "Language-Team: Russian Tor Project website. For " @@ -6944,58 +6960,50 @@ msgstr "" "href=\"https://www.torproject.org/download/download-easy.html.en\">Tor " "Browser." -#: plinth/modules/tor/__init__.py:30 +#: plinth/modules/tor/__init__.py:37 +msgid "" +"This app provides relay services to contribute to Tor network and help " +"others overcome censorship." +msgstr "" + +#: plinth/modules/tor/__init__.py:40 #, python-brace-format msgid "" -"A Tor SOCKS port is available on your {box_name} for internal networks on " -"TCP port 9050." +"This app provides an onion domain to expose {box_name} services via the Tor " +"network. Using Tor browser, one can access {box_name} from the internet even " +"when using an ISP that limits servers at home." msgstr "" -"Порт Tor SOCKS доступен на {box_name} для внутренних сетей на TCP-порту 9050." -#: plinth/modules/tor/__init__.py:48 +#: plinth/modules/tor/__init__.py:60 msgid "Tor" msgstr "Tor" -#: plinth/modules/tor/__init__.py:65 +#: plinth/modules/tor/__init__.py:76 msgid "Tor Onion Service" msgstr "Сервис Tor Onion" -#: plinth/modules/tor/__init__.py:69 -msgid "Tor Socks Proxy" -msgstr "Tor Socks прокси" - -#: plinth/modules/tor/__init__.py:73 +#: plinth/modules/tor/__init__.py:80 msgid "Tor Bridge Relay" msgstr "Ретранслятор Tor типа мост" -#: plinth/modules/tor/__init__.py:132 +#: plinth/modules/tor/__init__.py:135 msgid "Tor relay port available" msgstr "Доступен порт трансляции Tor" -#: plinth/modules/tor/__init__.py:143 +#: plinth/modules/tor/__init__.py:146 msgid "Obfs3 transport registered" msgstr "Obfs3 транспорт зарегестрирован" -#: plinth/modules/tor/__init__.py:153 +#: plinth/modules/tor/__init__.py:156 msgid "Obfs4 transport registered" msgstr "Obfs4 транспорт зарегистрирован" -#: plinth/modules/tor/__init__.py:165 +#: plinth/modules/tor/__init__.py:168 #, fuzzy #| msgid "Onion Service" msgid "Onion service is version 3" msgstr "Onion сервис" -#: plinth/modules/tor/__init__.py:242 -#, python-brace-format -msgid "Access URL {url} on tcp{kind} via Tor" -msgstr "Доступ к {url} по tcp{kind} через Tor" - -#: plinth/modules/tor/__init__.py:253 -#, python-brace-format -msgid "Confirm Tor usage at {url} on tcp{kind}" -msgstr "Подтверждение использования Tor в {url} по tcp {kind}" - #: plinth/modules/tor/forms.py:33 msgid "" "Enter a valid bridge with this format: [transport] IP:ORPort [fingerprint]" @@ -7032,11 +7040,11 @@ msgstr "" "org/\">https://bridges.torproject.org/и скопировать/вставить информацию " "сюда. В данное время поддерживаются «none», «obfs3», «obfs4» и «scamblesuit»." -#: plinth/modules/tor/forms.py:91 +#: plinth/modules/tor/forms.py:95 msgid "Enable Tor relay" msgstr "Включить ретранслятор Tor" -#: plinth/modules/tor/forms.py:92 +#: plinth/modules/tor/forms.py:96 #, python-brace-format msgid "" "When enabled, your {box_name} will run a Tor relay and donate bandwidth to " @@ -7047,11 +7055,11 @@ msgstr "" "часть пропускной способности сети Tor. Сделайте это, если у вас более ширина " "канала более 2Мбит/c." -#: plinth/modules/tor/forms.py:97 +#: plinth/modules/tor/forms.py:101 msgid "Enable Tor bridge relay" msgstr "Ретранслятор Tor типа мост" -#: plinth/modules/tor/forms.py:99 +#: plinth/modules/tor/forms.py:103 msgid "" "When enabled, relay information is published in the Tor bridge database " "instead of public Tor relay database making it harder to censor this node. " @@ -7061,13 +7069,13 @@ msgstr "" "общественной базы данных ретрансляции Tor. Это помогает другим обойти " "цензуру." -#: plinth/modules/tor/forms.py:104 +#: plinth/modules/tor/forms.py:108 #, fuzzy #| msgid "Enable Tor Hidden Service" msgid "Enable Tor Onion Service" msgstr "Включить скрытый сервис Tor" -#: plinth/modules/tor/forms.py:106 +#: plinth/modules/tor/forms.py:110 #, fuzzy, python-brace-format #| msgid "" #| "A hidden service will allow {box_name} to provide selected services (such " @@ -7082,29 +7090,15 @@ msgstr "" "wiki или чат), не раскрывая своего местоположения. Не используйте это для " "повышения анонимности." -#: plinth/modules/tor/forms.py:111 -msgid "Download software packages over Tor" -msgstr "Скачать пакеты программного обеспечения через Tor" - -#: plinth/modules/tor/forms.py:112 -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/forms.py:127 +#: plinth/modules/tor/forms.py:125 msgid "Specify at least one upstream bridge to use upstream bridges." msgstr "Укажите по крайней мере один upstream bridge чтобы использовать их." -#: plinth/modules/tor/manifest.py:15 +#: plinth/modules/tor/manifest.py:15 plinth/modules/torproxy/manifest.py:14 msgid "Tor Browser" msgstr "Tor Browser" -#: plinth/modules/tor/manifest.py:31 +#: plinth/modules/tor/manifest.py:31 plinth/modules/torproxy/manifest.py:30 msgid "Orbot: Proxy with Tor" msgstr "Orbot: Прокси с Tor" @@ -7116,18 +7110,61 @@ msgstr "Onion сервис" msgid "Ports" msgstr "Порты" -#: plinth/modules/tor/views.py:53 +#: plinth/modules/tor/views.py:53 plinth/modules/torproxy/views.py:51 #, fuzzy #| msgid "An error occurred during configuration." msgid "Updating configuration" msgstr "Произошла ошибка во время настройки." -#: plinth/modules/tor/views.py:70 +#: plinth/modules/tor/views.py:70 plinth/modules/torproxy/views.py:68 #, fuzzy, python-brace-format #| msgid "Error installing application: {error}" msgid "Error configuring app: {error}" msgstr "Ошибка при установке приложения: {error}" +#: plinth/modules/torproxy/__init__.py:34 +#, python-brace-format +msgid "" +"This app provides a web proxy on your {box_name} for internal networks on " +"TCP port 9050 using the SOCKS protocol. This can be used by various apps to " +"access the internet via the Tor network. ISP censorship can be circumvented " +"using upstream bridges." +msgstr "" + +#: plinth/modules/torproxy/__init__.py:54 +#, fuzzy +#| msgid "Tor Socks Proxy" +msgid "Tor Proxy" +msgstr "Tor Socks прокси" + +#: plinth/modules/torproxy/__init__.py:79 +msgid "Tor Socks Proxy" +msgstr "Tor Socks прокси" + +#: plinth/modules/torproxy/__init__.py:138 +#, python-brace-format +msgid "Access URL {url} on tcp{kind} via Tor" +msgstr "Доступ к {url} по tcp{kind} через Tor" + +#: plinth/modules/torproxy/__init__.py:149 +#, python-brace-format +msgid "Confirm Tor usage at {url} on tcp{kind}" +msgstr "Подтверждение использования Tor в {url} по tcp {kind}" + +#: plinth/modules/torproxy/forms.py:15 +msgid "Download software packages over Tor" +msgstr "Скачать пакеты программного обеспечения через Tor" + +#: plinth/modules/torproxy/forms.py:16 +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/transmission/__init__.py:25 msgid "Transmission is a BitTorrent client with a web interface." msgstr "Transmission это клиент BitTorrent, имеющий веб-интерфейс." @@ -7521,7 +7558,7 @@ msgstr "Активированы частые обновления функци msgid "Starting distribution upgrade test." msgstr "Обновление дистрибутива включено" -#: plinth/modules/users/__init__.py:29 +#: plinth/modules/users/__init__.py:30 msgid "" "Create and manage user accounts. These accounts serve as centralized " "authentication mechanism for most apps. Some apps further require a user " @@ -7533,7 +7570,7 @@ msgstr "" "запись пользователя была частью группы, чтобы разрешить пользователю доступ " "к приложению." -#: plinth/modules/users/__init__.py:34 +#: plinth/modules/users/__init__.py:35 #, python-brace-format msgid "" "Any user may login to {box_name} web interface to see a list of apps " @@ -7545,19 +7582,29 @@ msgstr "" "пользователи группы admin могут изменять приложения или системные " "настройки." -#: plinth/modules/users/__init__.py:55 +#: plinth/modules/users/__init__.py:56 msgid "Users and Groups" msgstr "Пользователи и группы" -#: plinth/modules/users/__init__.py:80 +#: plinth/modules/users/__init__.py:81 msgid "Access to all services and system settings" msgstr "Доступ ко всем сервисам и настройкам системы" -#: plinth/modules/users/__init__.py:116 +#: plinth/modules/users/__init__.py:124 #, python-brace-format msgid "Check LDAP entry \"{search_item}\"" msgstr "Проверьте запись LDAP \"{search_item}\"" +#: plinth/modules/users/__init__.py:137 +#, python-brace-format +msgid "Check nslcd config \"{key} {value}\"" +msgstr "" + +#: plinth/modules/users/__init__.py:166 +#, python-brace-format +msgid "Check nsswitch config \"{database}\"" +msgstr "" + #: plinth/modules/users/forms.py:35 msgid "Username is taken or is reserved." msgstr "Имя пользователя уже занято." @@ -8781,7 +8828,13 @@ msgstr "Обновление" msgid "Backup" msgstr "Резервные копии" -#: plinth/templates/toolbar.html:51 plinth/templates/toolbar.html:52 +#: plinth/templates/toolbar.html:53 +#, fuzzy +#| msgid "Start setup" +msgid "Re-run setup" +msgstr "Запуск программы установки" + +#: plinth/templates/toolbar.html:59 plinth/templates/toolbar.html:60 #: plinth/templates/uninstall.html:30 #, fuzzy #| msgid "Install" @@ -8800,11 +8853,11 @@ msgid "" "installed freshly again." msgstr "" -#: plinth/views.py:239 +#: plinth/views.py:241 msgid "Setting unchanged" msgstr "Настройки без изменений" -#: plinth/views.py:456 +#: plinth/views.py:478 #, python-brace-format msgid "before uninstall of {app_id}" msgstr "" @@ -8813,6 +8866,14 @@ msgstr "" msgid "Gujarati" msgstr "Гуджарати" +#, python-brace-format +#~ msgid "" +#~ "A Tor SOCKS port is available on your {box_name} for internal networks on " +#~ "TCP port 9050." +#~ msgstr "" +#~ "Порт Tor SOCKS доступен на {box_name} для внутренних сетей на TCP-порту " +#~ "9050." + #, python-brace-format #~ msgid "" #~ "When enabled, text box for server input is removed from login page and " @@ -9610,9 +9671,6 @@ msgstr "Гуджарати" #~ "занять продолжительное время. Если установка прерывается, вы можете " #~ "начать её снова." -#~ msgid "Start setup" -#~ msgstr "Запуск программы установки" - #~ msgid "OpenVPN setup is running" #~ msgstr "Выполняется установка OpenVPN" @@ -10208,9 +10266,6 @@ msgstr "Гуджарати" #~ msgid "Error setting default app: {exception}" #~ msgstr "Ошибка настройки приложения по умолчанию: {exception}" -#~ msgid "Default app set" -#~ msgstr "Приложение по умолчанию настроено" - #, fuzzy #~| msgid "NTP client in contact with servers" #~ msgid "chrony client in contact with servers" diff --git a/plinth/locale/si/LC_MESSAGES/django.po b/plinth/locale/si/LC_MESSAGES/django.po index ea1410b5f..bdec48326 100644 --- a/plinth/locale/si/LC_MESSAGES/django.po +++ b/plinth/locale/si/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-06-19 20:15-0400\n" +"POT-Creation-Date: 2023-07-31 20:04-0400\n" "PO-Revision-Date: 2021-04-27 13:32+0000\n" "Last-Translator: HelaBasa \n" "Language-Team: Sinhala Tor Project website. For " @@ -6023,55 +6037,48 @@ msgid "" "en\">Tor Browser." msgstr "" -#: plinth/modules/tor/__init__.py:30 -#, python-brace-format +#: plinth/modules/tor/__init__.py:37 msgid "" -"A Tor SOCKS port is available on your {box_name} for internal networks on " -"TCP port 9050." +"This app provides relay services to contribute to Tor network and help " +"others overcome censorship." msgstr "" -#: plinth/modules/tor/__init__.py:48 +#: plinth/modules/tor/__init__.py:40 +#, python-brace-format +msgid "" +"This app provides an onion domain to expose {box_name} services via the Tor " +"network. Using Tor browser, one can access {box_name} from the internet even " +"when using an ISP that limits servers at home." +msgstr "" + +#: plinth/modules/tor/__init__.py:60 msgid "Tor" msgstr "" -#: plinth/modules/tor/__init__.py:65 +#: plinth/modules/tor/__init__.py:76 msgid "Tor Onion Service" msgstr "" -#: plinth/modules/tor/__init__.py:69 -msgid "Tor Socks Proxy" -msgstr "" - -#: plinth/modules/tor/__init__.py:73 +#: plinth/modules/tor/__init__.py:80 msgid "Tor Bridge Relay" msgstr "" -#: plinth/modules/tor/__init__.py:132 +#: plinth/modules/tor/__init__.py:135 msgid "Tor relay port available" msgstr "" -#: plinth/modules/tor/__init__.py:143 +#: plinth/modules/tor/__init__.py:146 msgid "Obfs3 transport registered" msgstr "" -#: plinth/modules/tor/__init__.py:153 +#: plinth/modules/tor/__init__.py:156 msgid "Obfs4 transport registered" msgstr "" -#: plinth/modules/tor/__init__.py:165 +#: plinth/modules/tor/__init__.py:168 msgid "Onion service is version 3" msgstr "" -#: plinth/modules/tor/__init__.py:242 -#, python-brace-format -msgid "Access URL {url} on tcp{kind} via Tor" -msgstr "" - -#: plinth/modules/tor/__init__.py:253 -#, python-brace-format -msgid "Confirm Tor usage at {url} on tcp{kind}" -msgstr "" - #: plinth/modules/tor/forms.py:33 msgid "" "Enter a valid bridge with this format: [transport] IP:ORPort [fingerprint]" @@ -6099,11 +6106,11 @@ msgid "" "here. Currently supported transports are none, obfs3, obfs4 and scamblesuit." msgstr "" -#: plinth/modules/tor/forms.py:91 +#: plinth/modules/tor/forms.py:95 msgid "Enable Tor relay" msgstr "" -#: plinth/modules/tor/forms.py:92 +#: plinth/modules/tor/forms.py:96 #, python-brace-format msgid "" "When enabled, your {box_name} will run a Tor relay and donate bandwidth to " @@ -6111,22 +6118,22 @@ msgid "" "download bandwidth." msgstr "" -#: plinth/modules/tor/forms.py:97 +#: plinth/modules/tor/forms.py:101 msgid "Enable Tor bridge relay" msgstr "" -#: plinth/modules/tor/forms.py:99 +#: plinth/modules/tor/forms.py:103 msgid "" "When enabled, relay information is published in the Tor bridge database " "instead of public Tor relay database making it harder to censor this node. " "This helps others circumvent censorship." msgstr "" -#: plinth/modules/tor/forms.py:104 +#: plinth/modules/tor/forms.py:108 msgid "Enable Tor Onion Service" msgstr "" -#: plinth/modules/tor/forms.py:106 +#: plinth/modules/tor/forms.py:110 #, python-brace-format msgid "" "An onion service will allow {box_name} to provide selected services (such as " @@ -6134,26 +6141,15 @@ msgid "" "anonymity yet." msgstr "" -#: plinth/modules/tor/forms.py:111 -msgid "Download software packages over Tor" -msgstr "" - -#: plinth/modules/tor/forms.py:112 -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/forms.py:127 +#: plinth/modules/tor/forms.py:125 msgid "Specify at least one upstream bridge to use upstream bridges." msgstr "" -#: plinth/modules/tor/manifest.py:15 +#: plinth/modules/tor/manifest.py:15 plinth/modules/torproxy/manifest.py:14 msgid "Tor Browser" msgstr "" -#: plinth/modules/tor/manifest.py:31 +#: plinth/modules/tor/manifest.py:31 plinth/modules/torproxy/manifest.py:30 msgid "Orbot: Proxy with Tor" msgstr "" @@ -6165,15 +6161,53 @@ msgstr "" msgid "Ports" msgstr "" -#: plinth/modules/tor/views.py:53 +#: plinth/modules/tor/views.py:53 plinth/modules/torproxy/views.py:51 msgid "Updating configuration" msgstr "" -#: plinth/modules/tor/views.py:70 +#: plinth/modules/tor/views.py:70 plinth/modules/torproxy/views.py:68 #, python-brace-format msgid "Error configuring app: {error}" msgstr "" +#: plinth/modules/torproxy/__init__.py:34 +#, python-brace-format +msgid "" +"This app provides a web proxy on your {box_name} for internal networks on " +"TCP port 9050 using the SOCKS protocol. This can be used by various apps to " +"access the internet via the Tor network. ISP censorship can be circumvented " +"using upstream bridges." +msgstr "" + +#: plinth/modules/torproxy/__init__.py:54 +msgid "Tor Proxy" +msgstr "" + +#: plinth/modules/torproxy/__init__.py:79 +msgid "Tor Socks Proxy" +msgstr "" + +#: plinth/modules/torproxy/__init__.py:138 +#, python-brace-format +msgid "Access URL {url} on tcp{kind} via Tor" +msgstr "" + +#: plinth/modules/torproxy/__init__.py:149 +#, python-brace-format +msgid "Confirm Tor usage at {url} on tcp{kind}" +msgstr "" + +#: plinth/modules/torproxy/forms.py:15 +msgid "Download software packages over Tor" +msgstr "" + +#: plinth/modules/torproxy/forms.py:16 +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/transmission/__init__.py:25 msgid "Transmission is a BitTorrent client with a web interface." msgstr "" @@ -6499,14 +6533,14 @@ msgstr "" msgid "Starting distribution upgrade test." msgstr "" -#: plinth/modules/users/__init__.py:29 +#: plinth/modules/users/__init__.py:30 msgid "" "Create and manage user accounts. These accounts serve as centralized " "authentication mechanism for most apps. Some apps further require a user " "account to be part of a group to authorize the user to access the app." msgstr "" -#: plinth/modules/users/__init__.py:34 +#: plinth/modules/users/__init__.py:35 #, python-brace-format msgid "" "Any user may login to {box_name} web interface to see a list of apps " @@ -6514,19 +6548,29 @@ msgid "" "group may alter apps or system settings." msgstr "" -#: plinth/modules/users/__init__.py:55 +#: plinth/modules/users/__init__.py:56 msgid "Users and Groups" msgstr "" -#: plinth/modules/users/__init__.py:80 +#: plinth/modules/users/__init__.py:81 msgid "Access to all services and system settings" msgstr "" -#: plinth/modules/users/__init__.py:116 +#: plinth/modules/users/__init__.py:124 #, python-brace-format msgid "Check LDAP entry \"{search_item}\"" msgstr "" +#: plinth/modules/users/__init__.py:137 +#, python-brace-format +msgid "Check nslcd config \"{key} {value}\"" +msgstr "" + +#: plinth/modules/users/__init__.py:166 +#, python-brace-format +msgid "Check nsswitch config \"{database}\"" +msgstr "" + #: plinth/modules/users/forms.py:35 msgid "Username is taken or is reserved." msgstr "" @@ -7594,7 +7638,11 @@ msgstr "" msgid "Backup" msgstr "" -#: plinth/templates/toolbar.html:51 plinth/templates/toolbar.html:52 +#: plinth/templates/toolbar.html:53 +msgid "Re-run setup" +msgstr "" + +#: plinth/templates/toolbar.html:59 plinth/templates/toolbar.html:60 #: plinth/templates/uninstall.html:30 msgid "Uninstall" msgstr "" @@ -7610,11 +7658,11 @@ msgid "" "installed freshly again." msgstr "" -#: plinth/views.py:239 +#: plinth/views.py:241 msgid "Setting unchanged" msgstr "" -#: plinth/views.py:456 +#: plinth/views.py:478 #, python-brace-format msgid "before uninstall of {app_id}" msgstr "" diff --git a/plinth/locale/sl/LC_MESSAGES/django.po b/plinth/locale/sl/LC_MESSAGES/django.po index 13a93daf3..5b2f83c0b 100644 --- a/plinth/locale/sl/LC_MESSAGES/django.po +++ b/plinth/locale/sl/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-06-19 20:15-0400\n" +"POT-Creation-Date: 2023-07-31 20:04-0400\n" "PO-Revision-Date: 2022-09-14 17:19+0000\n" "Last-Translator: ikmaak \n" "Language-Team: Slovenian Tor Project website. For " @@ -6273,55 +6287,48 @@ msgid "" "en\">Tor Browser." msgstr "" -#: plinth/modules/tor/__init__.py:30 -#, python-brace-format +#: plinth/modules/tor/__init__.py:37 msgid "" -"A Tor SOCKS port is available on your {box_name} for internal networks on " -"TCP port 9050." +"This app provides relay services to contribute to Tor network and help " +"others overcome censorship." msgstr "" -#: plinth/modules/tor/__init__.py:48 +#: plinth/modules/tor/__init__.py:40 +#, python-brace-format +msgid "" +"This app provides an onion domain to expose {box_name} services via the Tor " +"network. Using Tor browser, one can access {box_name} from the internet even " +"when using an ISP that limits servers at home." +msgstr "" + +#: plinth/modules/tor/__init__.py:60 msgid "Tor" msgstr "" -#: plinth/modules/tor/__init__.py:65 +#: plinth/modules/tor/__init__.py:76 msgid "Tor Onion Service" msgstr "" -#: plinth/modules/tor/__init__.py:69 -msgid "Tor Socks Proxy" -msgstr "" - -#: plinth/modules/tor/__init__.py:73 +#: plinth/modules/tor/__init__.py:80 msgid "Tor Bridge Relay" msgstr "" -#: plinth/modules/tor/__init__.py:132 +#: plinth/modules/tor/__init__.py:135 msgid "Tor relay port available" msgstr "" -#: plinth/modules/tor/__init__.py:143 +#: plinth/modules/tor/__init__.py:146 msgid "Obfs3 transport registered" msgstr "" -#: plinth/modules/tor/__init__.py:153 +#: plinth/modules/tor/__init__.py:156 msgid "Obfs4 transport registered" msgstr "" -#: plinth/modules/tor/__init__.py:165 +#: plinth/modules/tor/__init__.py:168 msgid "Onion service is version 3" msgstr "" -#: plinth/modules/tor/__init__.py:242 -#, python-brace-format -msgid "Access URL {url} on tcp{kind} via Tor" -msgstr "" - -#: plinth/modules/tor/__init__.py:253 -#, python-brace-format -msgid "Confirm Tor usage at {url} on tcp{kind}" -msgstr "" - #: plinth/modules/tor/forms.py:33 msgid "" "Enter a valid bridge with this format: [transport] IP:ORPort [fingerprint]" @@ -6349,11 +6356,11 @@ msgid "" "here. Currently supported transports are none, obfs3, obfs4 and scamblesuit." msgstr "" -#: plinth/modules/tor/forms.py:91 +#: plinth/modules/tor/forms.py:95 msgid "Enable Tor relay" msgstr "" -#: plinth/modules/tor/forms.py:92 +#: plinth/modules/tor/forms.py:96 #, python-brace-format msgid "" "When enabled, your {box_name} will run a Tor relay and donate bandwidth to " @@ -6361,22 +6368,22 @@ msgid "" "download bandwidth." msgstr "" -#: plinth/modules/tor/forms.py:97 +#: plinth/modules/tor/forms.py:101 msgid "Enable Tor bridge relay" msgstr "" -#: plinth/modules/tor/forms.py:99 +#: plinth/modules/tor/forms.py:103 msgid "" "When enabled, relay information is published in the Tor bridge database " "instead of public Tor relay database making it harder to censor this node. " "This helps others circumvent censorship." msgstr "" -#: plinth/modules/tor/forms.py:104 +#: plinth/modules/tor/forms.py:108 msgid "Enable Tor Onion Service" msgstr "" -#: plinth/modules/tor/forms.py:106 +#: plinth/modules/tor/forms.py:110 #, python-brace-format msgid "" "An onion service will allow {box_name} to provide selected services (such as " @@ -6384,26 +6391,15 @@ msgid "" "anonymity yet." msgstr "" -#: plinth/modules/tor/forms.py:111 -msgid "Download software packages over Tor" -msgstr "" - -#: plinth/modules/tor/forms.py:112 -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/forms.py:127 +#: plinth/modules/tor/forms.py:125 msgid "Specify at least one upstream bridge to use upstream bridges." msgstr "" -#: plinth/modules/tor/manifest.py:15 +#: plinth/modules/tor/manifest.py:15 plinth/modules/torproxy/manifest.py:14 msgid "Tor Browser" msgstr "" -#: plinth/modules/tor/manifest.py:31 +#: plinth/modules/tor/manifest.py:31 plinth/modules/torproxy/manifest.py:30 msgid "Orbot: Proxy with Tor" msgstr "" @@ -6415,18 +6411,58 @@ msgstr "" msgid "Ports" msgstr "" -#: plinth/modules/tor/views.py:53 +#: plinth/modules/tor/views.py:53 plinth/modules/torproxy/views.py:51 #, fuzzy #| msgid "Configuration updated" msgid "Updating configuration" msgstr "Konfiguracija je posodobljena" -#: plinth/modules/tor/views.py:70 +#: plinth/modules/tor/views.py:70 plinth/modules/torproxy/views.py:68 #, fuzzy, python-brace-format #| msgid "Error installing application: {error}" msgid "Error configuring app: {error}" msgstr "Napaka ob nameščanju aplikacije: {error}" +#: plinth/modules/torproxy/__init__.py:34 +#, python-brace-format +msgid "" +"This app provides a web proxy on your {box_name} for internal networks on " +"TCP port 9050 using the SOCKS protocol. This can be used by various apps to " +"access the internet via the Tor network. ISP censorship can be circumvented " +"using upstream bridges." +msgstr "" + +#: plinth/modules/torproxy/__init__.py:54 +#, fuzzy +#| msgid "I2P Proxy" +msgid "Tor Proxy" +msgstr "I2P Proxy" + +#: plinth/modules/torproxy/__init__.py:79 +msgid "Tor Socks Proxy" +msgstr "" + +#: plinth/modules/torproxy/__init__.py:138 +#, python-brace-format +msgid "Access URL {url} on tcp{kind} via Tor" +msgstr "" + +#: plinth/modules/torproxy/__init__.py:149 +#, python-brace-format +msgid "Confirm Tor usage at {url} on tcp{kind}" +msgstr "" + +#: plinth/modules/torproxy/forms.py:15 +msgid "Download software packages over Tor" +msgstr "" + +#: plinth/modules/torproxy/forms.py:16 +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/transmission/__init__.py:25 msgid "Transmission is a BitTorrent client with a web interface." msgstr "" @@ -6776,14 +6812,14 @@ msgstr "" msgid "Starting distribution upgrade test." msgstr "" -#: plinth/modules/users/__init__.py:29 +#: plinth/modules/users/__init__.py:30 msgid "" "Create and manage user accounts. These accounts serve as centralized " "authentication mechanism for most apps. Some apps further require a user " "account to be part of a group to authorize the user to access the app." msgstr "" -#: plinth/modules/users/__init__.py:34 +#: plinth/modules/users/__init__.py:35 #, python-brace-format msgid "" "Any user may login to {box_name} web interface to see a list of apps " @@ -6791,19 +6827,29 @@ msgid "" "group may alter apps or system settings." msgstr "" -#: plinth/modules/users/__init__.py:55 +#: plinth/modules/users/__init__.py:56 msgid "Users and Groups" msgstr "" -#: plinth/modules/users/__init__.py:80 +#: plinth/modules/users/__init__.py:81 msgid "Access to all services and system settings" msgstr "" -#: plinth/modules/users/__init__.py:116 +#: plinth/modules/users/__init__.py:124 #, python-brace-format msgid "Check LDAP entry \"{search_item}\"" msgstr "" +#: plinth/modules/users/__init__.py:137 +#, python-brace-format +msgid "Check nslcd config \"{key} {value}\"" +msgstr "" + +#: plinth/modules/users/__init__.py:166 +#, python-brace-format +msgid "Check nsswitch config \"{database}\"" +msgstr "" + #: plinth/modules/users/forms.py:35 msgid "Username is taken or is reserved." msgstr "" @@ -7926,7 +7972,11 @@ msgstr "" msgid "Backup" msgstr "Rezervne kopije" -#: plinth/templates/toolbar.html:51 plinth/templates/toolbar.html:52 +#: plinth/templates/toolbar.html:53 +msgid "Re-run setup" +msgstr "" + +#: plinth/templates/toolbar.html:59 plinth/templates/toolbar.html:60 #: plinth/templates/uninstall.html:30 #, fuzzy #| msgid "Application installed." @@ -7945,11 +7995,11 @@ msgid "" "installed freshly again." msgstr "" -#: plinth/views.py:239 +#: plinth/views.py:241 msgid "Setting unchanged" msgstr "" -#: plinth/views.py:456 +#: plinth/views.py:478 #, python-brace-format msgid "before uninstall of {app_id}" msgstr "" diff --git a/plinth/locale/sq/LC_MESSAGES/django.po b/plinth/locale/sq/LC_MESSAGES/django.po index a7b599aa9..2e04aa069 100644 --- a/plinth/locale/sq/LC_MESSAGES/django.po +++ b/plinth/locale/sq/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-06-19 20:15-0400\n" +"POT-Creation-Date: 2023-07-31 20:04-0400\n" "PO-Revision-Date: 2023-02-25 11:36+0000\n" "Last-Translator: Besnik Bleta \n" "Language-Team: Albanian Tor Project website. For " @@ -6978,59 +6992,50 @@ msgstr "" "përdorni Shfletuesin Tor." -#: plinth/modules/tor/__init__.py:30 +#: plinth/modules/tor/__init__.py:37 +msgid "" +"This app provides relay services to contribute to Tor network and help " +"others overcome censorship." +msgstr "" + +#: plinth/modules/tor/__init__.py:40 #, python-brace-format msgid "" -"A Tor SOCKS port is available on your {box_name} for internal networks on " -"TCP port 9050." +"This app provides an onion domain to expose {box_name} services via the Tor " +"network. Using Tor browser, one can access {box_name} from the internet even " +"when using an ISP that limits servers at home." msgstr "" -"Një portë SOCKS Tor-i për rrjete të brendshëm në {box_name} tuaj gjendet në " -"portën TCP 9050." -#: plinth/modules/tor/__init__.py:48 +#: plinth/modules/tor/__init__.py:60 msgid "Tor" msgstr "Tor" -#: plinth/modules/tor/__init__.py:65 +#: plinth/modules/tor/__init__.py:76 msgid "Tor Onion Service" msgstr "Shërbim Onion Tor" -#: plinth/modules/tor/__init__.py:69 -msgid "Tor Socks Proxy" -msgstr "Ndërmjetës SOCKS Tor" - -#: plinth/modules/tor/__init__.py:73 +#: plinth/modules/tor/__init__.py:80 msgid "Tor Bridge Relay" msgstr "Rele Ure Tor" -#: plinth/modules/tor/__init__.py:132 +#: plinth/modules/tor/__init__.py:135 msgid "Tor relay port available" msgstr "Portë releje Tor e gatshme" -#: plinth/modules/tor/__init__.py:143 +#: plinth/modules/tor/__init__.py:146 msgid "Obfs3 transport registered" msgstr "U regjistruar transport Obfs3" -#: plinth/modules/tor/__init__.py:153 +#: plinth/modules/tor/__init__.py:156 msgid "Obfs4 transport registered" msgstr "U regjistruar transport Obfs3" -#: plinth/modules/tor/__init__.py:165 +#: plinth/modules/tor/__init__.py:168 #, fuzzy #| msgid "Onion Service" msgid "Onion service is version 3" msgstr "Shërbim Onion" -#: plinth/modules/tor/__init__.py:242 -#, python-brace-format -msgid "Access URL {url} on tcp{kind} via Tor" -msgstr "URL hyrjesh {url} në tcp{kind} përmes Tor-i" - -#: plinth/modules/tor/__init__.py:253 -#, python-brace-format -msgid "Confirm Tor usage at {url} on tcp{kind}" -msgstr "Ripohoni përdorim Tor-i te {url} në tcp{kind}" - #: plinth/modules/tor/forms.py:33 msgid "" "Enter a valid bridge with this format: [transport] IP:ORPort [fingerprint]" @@ -7068,11 +7073,11 @@ msgstr "" "em>obfs3</em>, <em>obfs4</em> dhe <em>" "scamblesuit</em>." -#: plinth/modules/tor/forms.py:91 +#: plinth/modules/tor/forms.py:95 msgid "Enable Tor relay" msgstr "Aktivizo rele Tor" -#: plinth/modules/tor/forms.py:92 +#: plinth/modules/tor/forms.py:96 #, python-brace-format msgid "" "When enabled, your {box_name} will run a Tor relay and donate bandwidth to " @@ -7083,11 +7088,11 @@ msgstr "" "dhurojë gjerësi bande për rrjetin Tor. Bëjeni këtë nëse keni gjerësi bande " "ngarkimesh dhe shkarkimesh më tepër se 2 megabite/s." -#: plinth/modules/tor/forms.py:97 +#: plinth/modules/tor/forms.py:101 msgid "Enable Tor bridge relay" msgstr "Aktivizo rele ure Tor" -#: plinth/modules/tor/forms.py:99 +#: plinth/modules/tor/forms.py:103 msgid "" "When enabled, relay information is published in the Tor bridge database " "instead of public Tor relay database making it harder to censor this node. " @@ -7098,13 +7103,13 @@ msgstr "" "më të vështirë censurimin e kësaj nyjeje. Kjo i ndihmon të tjerët të " "anashkalojnë censurimin." -#: plinth/modules/tor/forms.py:104 +#: plinth/modules/tor/forms.py:108 #, fuzzy #| msgid "Enable Tor Hidden Service" msgid "Enable Tor Onion Service" msgstr "Aktivizo Shërbim Tor të Fshehur" -#: plinth/modules/tor/forms.py:106 +#: plinth/modules/tor/forms.py:110 #, fuzzy, python-brace-format #| msgid "" #| "A hidden service will allow {box_name} to provide selected services (such " @@ -7119,30 +7124,16 @@ msgstr "" "përzgjedhura (bie fjala, wiki, ose fjalosje) pa treguar vendndodhjen e tyre. " "Mos e përdorni këtë ende për anonimitet të fortë." -#: plinth/modules/tor/forms.py:111 -msgid "Download software packages over Tor" -msgstr "Shkarkoni paketa software përmes Tor-i" - -#: plinth/modules/tor/forms.py:112 -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 "" -"Kur aktivizohet, për instalime dhe përmirësime software-i do të shkarkohet " -"përmes rrjeti Tor. Kjo shton një shkallë privatësie dhe sigurie gjatë " -"shkarkimit të software-it." - -#: plinth/modules/tor/forms.py:127 +#: plinth/modules/tor/forms.py:125 msgid "Specify at least one upstream bridge to use upstream bridges." msgstr "" "Që të përdoren ura “upstream”, përcaktoni të paktën një urë “upstream”." -#: plinth/modules/tor/manifest.py:15 +#: plinth/modules/tor/manifest.py:15 plinth/modules/torproxy/manifest.py:14 msgid "Tor Browser" msgstr "Shfletuesi Tor" -#: plinth/modules/tor/manifest.py:31 +#: plinth/modules/tor/manifest.py:31 plinth/modules/torproxy/manifest.py:30 msgid "Orbot: Proxy with Tor" msgstr "Orbot: Ndërmjetës me Tor" @@ -7154,15 +7145,58 @@ msgstr "Shërbim Onion" msgid "Ports" msgstr "Porta" -#: plinth/modules/tor/views.py:53 +#: plinth/modules/tor/views.py:53 plinth/modules/torproxy/views.py:51 msgid "Updating configuration" msgstr "Po përditësohet formësimi" -#: plinth/modules/tor/views.py:70 +#: plinth/modules/tor/views.py:70 plinth/modules/torproxy/views.py:68 #, python-brace-format msgid "Error configuring app: {error}" msgstr "Gabim në formësimin e aplikacionit: {error}" +#: plinth/modules/torproxy/__init__.py:34 +#, python-brace-format +msgid "" +"This app provides a web proxy on your {box_name} for internal networks on " +"TCP port 9050 using the SOCKS protocol. This can be used by various apps to " +"access the internet via the Tor network. ISP censorship can be circumvented " +"using upstream bridges." +msgstr "" + +#: plinth/modules/torproxy/__init__.py:54 +#, fuzzy +#| msgid "Tor Socks Proxy" +msgid "Tor Proxy" +msgstr "Ndërmjetës SOCKS Tor" + +#: plinth/modules/torproxy/__init__.py:79 +msgid "Tor Socks Proxy" +msgstr "Ndërmjetës SOCKS Tor" + +#: plinth/modules/torproxy/__init__.py:138 +#, python-brace-format +msgid "Access URL {url} on tcp{kind} via Tor" +msgstr "URL hyrjesh {url} në tcp{kind} përmes Tor-i" + +#: plinth/modules/torproxy/__init__.py:149 +#, python-brace-format +msgid "Confirm Tor usage at {url} on tcp{kind}" +msgstr "Ripohoni përdorim Tor-i te {url} në tcp{kind}" + +#: plinth/modules/torproxy/forms.py:15 +msgid "Download software packages over Tor" +msgstr "Shkarkoni paketa software përmes Tor-i" + +#: plinth/modules/torproxy/forms.py:16 +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 "" +"Kur aktivizohet, për instalime dhe përmirësime software-i do të shkarkohet " +"përmes rrjeti Tor. Kjo shton një shkallë privatësie dhe sigurie gjatë " +"shkarkimit të software-it." + #: plinth/modules/transmission/__init__.py:25 msgid "Transmission is a BitTorrent client with a web interface." msgstr "Transmission është një klient BitTorrent me një ndërfaqe web." @@ -7557,7 +7591,7 @@ msgstr "Përditësime të shpeshta veçorish të aktivizuara." msgid "Starting distribution upgrade test." msgstr "Po fillohet provë përmirësimi shpërndarjeje." -#: plinth/modules/users/__init__.py:29 +#: plinth/modules/users/__init__.py:30 msgid "" "Create and manage user accounts. These accounts serve as centralized " "authentication mechanism for most apps. Some apps further require a user " @@ -7568,7 +7602,7 @@ msgstr "" "aplikacione kërkojnë doemos një llogari përdoruesi, për të qenë pjesë e një " "grupi që autorizon përdoruesin të përdorë aplikacionin." -#: plinth/modules/users/__init__.py:34 +#: plinth/modules/users/__init__.py:35 #, python-brace-format msgid "" "Any user may login to {box_name} web interface to see a list of apps " @@ -7580,19 +7614,29 @@ msgstr "" "vetëm përdoruesit e grupit përgjegjës mund të ndryshojnë " "aplikacionet, apo rregullimet e sistemit." -#: plinth/modules/users/__init__.py:55 +#: plinth/modules/users/__init__.py:56 msgid "Users and Groups" msgstr "Përdorues dhe Grupe" -#: plinth/modules/users/__init__.py:80 +#: plinth/modules/users/__init__.py:81 msgid "Access to all services and system settings" msgstr "Hyrje te krejt shërbimet dhe rregullime të sistemit" -#: plinth/modules/users/__init__.py:116 +#: plinth/modules/users/__init__.py:124 #, python-brace-format msgid "Check LDAP entry \"{search_item}\"" msgstr "Kontrolloni zërin LDAP \"{search_item}\"" +#: plinth/modules/users/__init__.py:137 +#, python-brace-format +msgid "Check nslcd config \"{key} {value}\"" +msgstr "" + +#: plinth/modules/users/__init__.py:166 +#, python-brace-format +msgid "Check nsswitch config \"{database}\"" +msgstr "" + #: plinth/modules/users/forms.py:35 msgid "Username is taken or is reserved." msgstr "Emri i përdoruesit është i zënë, ose i rezervuar." @@ -8791,7 +8835,11 @@ msgstr "Përditësoje" msgid "Backup" msgstr "Kopjeruajtje" -#: plinth/templates/toolbar.html:51 plinth/templates/toolbar.html:52 +#: plinth/templates/toolbar.html:53 +msgid "Re-run setup" +msgstr "" + +#: plinth/templates/toolbar.html:59 plinth/templates/toolbar.html:60 #: plinth/templates/uninstall.html:30 msgid "Uninstall" msgstr "Çinstaloje" @@ -8809,11 +8857,11 @@ msgstr "" "Krejt të dhënat dhe formësimi i aplikacionit do të humbin përgjithnjë. " "Aplikacioni mund të instalohet sërish nga e para." -#: plinth/views.py:239 +#: plinth/views.py:241 msgid "Setting unchanged" msgstr "Rregullim i pandryshuar" -#: plinth/views.py:456 +#: plinth/views.py:478 #, python-brace-format msgid "before uninstall of {app_id}" msgstr "para çinstalimit të {app_id}" @@ -8822,6 +8870,14 @@ msgstr "para çinstalimit të {app_id}" msgid "Gujarati" msgstr "Gujaratase" +#, python-brace-format +#~ msgid "" +#~ "A Tor SOCKS port is available on your {box_name} for internal networks on " +#~ "TCP port 9050." +#~ msgstr "" +#~ "Një portë SOCKS Tor-i për rrjete të brendshëm në {box_name} tuaj gjendet " +#~ "në portën TCP 9050." + #, python-brace-format #~ msgid "" #~ "When enabled, text box for server input is removed from login page and " diff --git a/plinth/locale/sr/LC_MESSAGES/django.po b/plinth/locale/sr/LC_MESSAGES/django.po index 1ec293c0a..cf864cd95 100644 --- a/plinth/locale/sr/LC_MESSAGES/django.po +++ b/plinth/locale/sr/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-06-19 20:15-0400\n" +"POT-Creation-Date: 2023-07-31 20:04-0400\n" "PO-Revision-Date: 2022-09-14 17:20+0000\n" "Last-Translator: ikmaak \n" "Language-Team: Serbian Tor Project website. For " @@ -6147,55 +6161,48 @@ msgid "" "en\">Tor Browser." msgstr "" -#: plinth/modules/tor/__init__.py:30 -#, python-brace-format +#: plinth/modules/tor/__init__.py:37 msgid "" -"A Tor SOCKS port is available on your {box_name} for internal networks on " -"TCP port 9050." +"This app provides relay services to contribute to Tor network and help " +"others overcome censorship." msgstr "" -#: plinth/modules/tor/__init__.py:48 +#: plinth/modules/tor/__init__.py:40 +#, python-brace-format +msgid "" +"This app provides an onion domain to expose {box_name} services via the Tor " +"network. Using Tor browser, one can access {box_name} from the internet even " +"when using an ISP that limits servers at home." +msgstr "" + +#: plinth/modules/tor/__init__.py:60 msgid "Tor" msgstr "" -#: plinth/modules/tor/__init__.py:65 +#: plinth/modules/tor/__init__.py:76 msgid "Tor Onion Service" msgstr "" -#: plinth/modules/tor/__init__.py:69 -msgid "Tor Socks Proxy" -msgstr "" - -#: plinth/modules/tor/__init__.py:73 +#: plinth/modules/tor/__init__.py:80 msgid "Tor Bridge Relay" msgstr "" -#: plinth/modules/tor/__init__.py:132 +#: plinth/modules/tor/__init__.py:135 msgid "Tor relay port available" msgstr "" -#: plinth/modules/tor/__init__.py:143 +#: plinth/modules/tor/__init__.py:146 msgid "Obfs3 transport registered" msgstr "" -#: plinth/modules/tor/__init__.py:153 +#: plinth/modules/tor/__init__.py:156 msgid "Obfs4 transport registered" msgstr "" -#: plinth/modules/tor/__init__.py:165 +#: plinth/modules/tor/__init__.py:168 msgid "Onion service is version 3" msgstr "" -#: plinth/modules/tor/__init__.py:242 -#, python-brace-format -msgid "Access URL {url} on tcp{kind} via Tor" -msgstr "" - -#: plinth/modules/tor/__init__.py:253 -#, python-brace-format -msgid "Confirm Tor usage at {url} on tcp{kind}" -msgstr "" - #: plinth/modules/tor/forms.py:33 msgid "" "Enter a valid bridge with this format: [transport] IP:ORPort [fingerprint]" @@ -6223,11 +6230,11 @@ msgid "" "here. Currently supported transports are none, obfs3, obfs4 and scamblesuit." msgstr "" -#: plinth/modules/tor/forms.py:91 +#: plinth/modules/tor/forms.py:95 msgid "Enable Tor relay" msgstr "" -#: plinth/modules/tor/forms.py:92 +#: plinth/modules/tor/forms.py:96 #, python-brace-format msgid "" "When enabled, your {box_name} will run a Tor relay and donate bandwidth to " @@ -6235,22 +6242,22 @@ msgid "" "download bandwidth." msgstr "" -#: plinth/modules/tor/forms.py:97 +#: plinth/modules/tor/forms.py:101 msgid "Enable Tor bridge relay" msgstr "" -#: plinth/modules/tor/forms.py:99 +#: plinth/modules/tor/forms.py:103 msgid "" "When enabled, relay information is published in the Tor bridge database " "instead of public Tor relay database making it harder to censor this node. " "This helps others circumvent censorship." msgstr "" -#: plinth/modules/tor/forms.py:104 +#: plinth/modules/tor/forms.py:108 msgid "Enable Tor Onion Service" msgstr "" -#: plinth/modules/tor/forms.py:106 +#: plinth/modules/tor/forms.py:110 #, python-brace-format msgid "" "An onion service will allow {box_name} to provide selected services (such as " @@ -6258,26 +6265,15 @@ msgid "" "anonymity yet." msgstr "" -#: plinth/modules/tor/forms.py:111 -msgid "Download software packages over Tor" -msgstr "" - -#: plinth/modules/tor/forms.py:112 -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/forms.py:127 +#: plinth/modules/tor/forms.py:125 msgid "Specify at least one upstream bridge to use upstream bridges." msgstr "" -#: plinth/modules/tor/manifest.py:15 +#: plinth/modules/tor/manifest.py:15 plinth/modules/torproxy/manifest.py:14 msgid "Tor Browser" msgstr "" -#: plinth/modules/tor/manifest.py:31 +#: plinth/modules/tor/manifest.py:31 plinth/modules/torproxy/manifest.py:30 msgid "Orbot: Proxy with Tor" msgstr "" @@ -6289,18 +6285,58 @@ msgstr "" msgid "Ports" msgstr "" -#: plinth/modules/tor/views.py:53 +#: plinth/modules/tor/views.py:53 plinth/modules/torproxy/views.py:51 #, fuzzy #| msgid "Configuration updated" msgid "Updating configuration" msgstr "Konfiguracija sačuvana" -#: plinth/modules/tor/views.py:70 +#: plinth/modules/tor/views.py:70 plinth/modules/torproxy/views.py:68 #, fuzzy, python-brace-format #| msgid "Error installing application: {error}" msgid "Error configuring app: {error}" msgstr "Greška prilikom instaliranja aplikacije: {error}" +#: plinth/modules/torproxy/__init__.py:34 +#, python-brace-format +msgid "" +"This app provides a web proxy on your {box_name} for internal networks on " +"TCP port 9050 using the SOCKS protocol. This can be used by various apps to " +"access the internet via the Tor network. ISP censorship can be circumvented " +"using upstream bridges." +msgstr "" + +#: plinth/modules/torproxy/__init__.py:54 +#, fuzzy +#| msgid "I2P Proxy" +msgid "Tor Proxy" +msgstr "I2P Proxy" + +#: plinth/modules/torproxy/__init__.py:79 +msgid "Tor Socks Proxy" +msgstr "" + +#: plinth/modules/torproxy/__init__.py:138 +#, python-brace-format +msgid "Access URL {url} on tcp{kind} via Tor" +msgstr "" + +#: plinth/modules/torproxy/__init__.py:149 +#, python-brace-format +msgid "Confirm Tor usage at {url} on tcp{kind}" +msgstr "" + +#: plinth/modules/torproxy/forms.py:15 +msgid "Download software packages over Tor" +msgstr "" + +#: plinth/modules/torproxy/forms.py:16 +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/transmission/__init__.py:25 msgid "Transmission is a BitTorrent client with a web interface." msgstr "" @@ -6636,14 +6672,14 @@ msgstr "" msgid "Starting distribution upgrade test." msgstr "" -#: plinth/modules/users/__init__.py:29 +#: plinth/modules/users/__init__.py:30 msgid "" "Create and manage user accounts. These accounts serve as centralized " "authentication mechanism for most apps. Some apps further require a user " "account to be part of a group to authorize the user to access the app." msgstr "" -#: plinth/modules/users/__init__.py:34 +#: plinth/modules/users/__init__.py:35 #, python-brace-format msgid "" "Any user may login to {box_name} web interface to see a list of apps " @@ -6651,19 +6687,29 @@ msgid "" "group may alter apps or system settings." msgstr "" -#: plinth/modules/users/__init__.py:55 +#: plinth/modules/users/__init__.py:56 msgid "Users and Groups" msgstr "" -#: plinth/modules/users/__init__.py:80 +#: plinth/modules/users/__init__.py:81 msgid "Access to all services and system settings" msgstr "" -#: plinth/modules/users/__init__.py:116 +#: plinth/modules/users/__init__.py:124 #, python-brace-format msgid "Check LDAP entry \"{search_item}\"" msgstr "" +#: plinth/modules/users/__init__.py:137 +#, python-brace-format +msgid "Check nslcd config \"{key} {value}\"" +msgstr "" + +#: plinth/modules/users/__init__.py:166 +#, python-brace-format +msgid "Check nsswitch config \"{database}\"" +msgstr "" + #: plinth/modules/users/forms.py:35 msgid "Username is taken or is reserved." msgstr "" @@ -7747,7 +7793,11 @@ msgstr "" msgid "Backup" msgstr "Sigurnosne kopije" -#: plinth/templates/toolbar.html:51 plinth/templates/toolbar.html:52 +#: plinth/templates/toolbar.html:53 +msgid "Re-run setup" +msgstr "" + +#: plinth/templates/toolbar.html:59 plinth/templates/toolbar.html:60 #: plinth/templates/uninstall.html:30 #, fuzzy #| msgid "Application installed." @@ -7765,11 +7815,11 @@ msgid "" "installed freshly again." msgstr "" -#: plinth/views.py:239 +#: plinth/views.py:241 msgid "Setting unchanged" msgstr "" -#: plinth/views.py:456 +#: plinth/views.py:478 #, python-brace-format msgid "before uninstall of {app_id}" msgstr "" diff --git a/plinth/locale/sv/LC_MESSAGES/django.po b/plinth/locale/sv/LC_MESSAGES/django.po index f011018e5..94dc8e107 100644 --- a/plinth/locale/sv/LC_MESSAGES/django.po +++ b/plinth/locale/sv/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-06-19 20:15-0400\n" +"POT-Creation-Date: 2023-07-31 20:04-0400\n" "PO-Revision-Date: 2023-02-26 18:38+0000\n" "Last-Translator: Michael Breidenbach \n" "Language-Team: Swedish Tor Project website. For " @@ -6911,59 +6925,50 @@ msgstr "" "använder TOR Browser." -#: plinth/modules/tor/__init__.py:30 +#: plinth/modules/tor/__init__.py:37 +msgid "" +"This app provides relay services to contribute to Tor network and help " +"others overcome censorship." +msgstr "" + +#: plinth/modules/tor/__init__.py:40 #, python-brace-format msgid "" -"A Tor SOCKS port is available on your {box_name} for internal networks on " -"TCP port 9050." +"This app provides an onion domain to expose {box_name} services via the Tor " +"network. Using Tor browser, one can access {box_name} from the internet even " +"when using an ISP that limits servers at home." msgstr "" -"En Tor SOCKS-port finns tillgängligt på din {box_name} för interna nätverk " -"på TCP-port 9050." -#: plinth/modules/tor/__init__.py:48 +#: plinth/modules/tor/__init__.py:60 msgid "Tor" msgstr "Tor" -#: plinth/modules/tor/__init__.py:65 +#: plinth/modules/tor/__init__.py:76 msgid "Tor Onion Service" msgstr "Tor Onion service" -#: plinth/modules/tor/__init__.py:69 -msgid "Tor Socks Proxy" -msgstr "Tor SOCKS-proxy" - -#: plinth/modules/tor/__init__.py:73 +#: plinth/modules/tor/__init__.py:80 msgid "Tor Bridge Relay" msgstr "Tor Bridge Relay" -#: plinth/modules/tor/__init__.py:132 +#: plinth/modules/tor/__init__.py:135 msgid "Tor relay port available" msgstr "Tor relä port tillgänglig" -#: plinth/modules/tor/__init__.py:143 +#: plinth/modules/tor/__init__.py:146 msgid "Obfs3 transport registered" msgstr "Obfs3 transport registrerad" -#: plinth/modules/tor/__init__.py:153 +#: plinth/modules/tor/__init__.py:156 msgid "Obfs4 transport registered" msgstr "Obfs4 transport registrerad" -#: plinth/modules/tor/__init__.py:165 +#: plinth/modules/tor/__init__.py:168 #, fuzzy #| msgid "Onion Service" msgid "Onion service is version 3" msgstr "Onion tjänst" -#: plinth/modules/tor/__init__.py:242 -#, python-brace-format -msgid "Access URL {url} on tcp{kind} via Tor" -msgstr "Tillgång URL {url} på TCP {kind} via Tor" - -#: plinth/modules/tor/__init__.py:253 -#, python-brace-format -msgid "Confirm Tor usage at {url} on tcp{kind}" -msgstr "Bekräfta Tor-användning vid {url} på TCP {kind}" - #: plinth/modules/tor/forms.py:33 msgid "" "Enter a valid bridge with this format: [transport] IP:ORPort [fingerprint]" @@ -7001,11 +7006,11 @@ msgstr "" "informationen här. För närvarande stöds transporter är ingen, obfs3, obfs4 " "och scamblesuit." -#: plinth/modules/tor/forms.py:91 +#: plinth/modules/tor/forms.py:95 msgid "Enable Tor relay" msgstr "Aktivera Tor Relay" -#: plinth/modules/tor/forms.py:92 +#: plinth/modules/tor/forms.py:96 #, python-brace-format msgid "" "When enabled, your {box_name} will run a Tor relay and donate bandwidth to " @@ -7016,11 +7021,11 @@ msgstr "" "bandbredd till Tor-nätverket. Gör detta om du har mer än 2 megabits/s av " "uppladdning och nedladdning bandbredd." -#: plinth/modules/tor/forms.py:97 +#: plinth/modules/tor/forms.py:101 msgid "Enable Tor bridge relay" msgstr "Aktivera Tor Bridge Relay" -#: plinth/modules/tor/forms.py:99 +#: plinth/modules/tor/forms.py:103 msgid "" "When enabled, relay information is published in the Tor bridge database " "instead of public Tor relay database making it harder to censor this node. " @@ -7030,13 +7035,13 @@ msgstr "" "stället för public Tor Relay-databasen, vilket gör det svårare att censurera " "den här noden. Detta hjälper andra att kringgå censur." -#: plinth/modules/tor/forms.py:104 +#: plinth/modules/tor/forms.py:108 #, fuzzy #| msgid "Enable Tor Hidden Service" msgid "Enable Tor Onion Service" msgstr "Aktivera Tor Hidden service" -#: plinth/modules/tor/forms.py:106 +#: plinth/modules/tor/forms.py:110 #, fuzzy, python-brace-format #| msgid "" #| "A hidden service will allow {box_name} to provide selected services (such " @@ -7051,29 +7056,15 @@ msgstr "" "tjänster (till exempel wiki eller chatt) utan att avslöja dess plats. Använd " "inte detta för stark anonymitet ännu." -#: plinth/modules/tor/forms.py:111 -msgid "Download software packages over Tor" -msgstr "Ladda ner mjukvarupaket över Tor" - -#: plinth/modules/tor/forms.py:112 -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 är aktiverad kommer programvara att laddas ner via Tor-nätverket för " -"installationer och uppgraderingar. Detta ger en viss grad av integritet och " -"säkerhet under Programnedladdningar." - -#: plinth/modules/tor/forms.py:127 +#: plinth/modules/tor/forms.py:125 msgid "Specify at least one upstream bridge to use upstream bridges." msgstr "Ange minst en uppströms bro för att använda uppströms broar." -#: plinth/modules/tor/manifest.py:15 +#: plinth/modules/tor/manifest.py:15 plinth/modules/torproxy/manifest.py:14 msgid "Tor Browser" msgstr "TOR Browser" -#: plinth/modules/tor/manifest.py:31 +#: plinth/modules/tor/manifest.py:31 plinth/modules/torproxy/manifest.py:30 msgid "Orbot: Proxy with Tor" msgstr "Orbot: proxy med Tor" @@ -7085,15 +7076,58 @@ msgstr "Onion tjänst" msgid "Ports" msgstr "Portar" -#: plinth/modules/tor/views.py:53 +#: plinth/modules/tor/views.py:53 plinth/modules/torproxy/views.py:51 msgid "Updating configuration" msgstr "Uppdatera konfigurationen" -#: plinth/modules/tor/views.py:70 +#: plinth/modules/tor/views.py:70 plinth/modules/torproxy/views.py:68 #, python-brace-format msgid "Error configuring app: {error}" msgstr "Fel vid konfigurering av appen: {error}" +#: plinth/modules/torproxy/__init__.py:34 +#, python-brace-format +msgid "" +"This app provides a web proxy on your {box_name} for internal networks on " +"TCP port 9050 using the SOCKS protocol. This can be used by various apps to " +"access the internet via the Tor network. ISP censorship can be circumvented " +"using upstream bridges." +msgstr "" + +#: plinth/modules/torproxy/__init__.py:54 +#, fuzzy +#| msgid "Tor Socks Proxy" +msgid "Tor Proxy" +msgstr "Tor SOCKS-proxy" + +#: plinth/modules/torproxy/__init__.py:79 +msgid "Tor Socks Proxy" +msgstr "Tor SOCKS-proxy" + +#: plinth/modules/torproxy/__init__.py:138 +#, python-brace-format +msgid "Access URL {url} on tcp{kind} via Tor" +msgstr "Tillgång URL {url} på TCP {kind} via Tor" + +#: plinth/modules/torproxy/__init__.py:149 +#, python-brace-format +msgid "Confirm Tor usage at {url} on tcp{kind}" +msgstr "Bekräfta Tor-användning vid {url} på TCP {kind}" + +#: plinth/modules/torproxy/forms.py:15 +msgid "Download software packages over Tor" +msgstr "Ladda ner mjukvarupaket över Tor" + +#: plinth/modules/torproxy/forms.py:16 +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 är aktiverad kommer programvara att laddas ner via Tor-nätverket för " +"installationer och uppgraderingar. Detta ger en viss grad av integritet och " +"säkerhet under Programnedladdningar." + #: plinth/modules/transmission/__init__.py:25 msgid "Transmission is a BitTorrent client with a web interface." msgstr "" @@ -7483,7 +7517,7 @@ msgstr "Frekventa funktionsuppdateringar aktiverade." msgid "Starting distribution upgrade test." msgstr "Startar distributionsuppgraderingstest." -#: plinth/modules/users/__init__.py:29 +#: plinth/modules/users/__init__.py:30 msgid "" "Create and manage user accounts. These accounts serve as centralized " "authentication mechanism for most apps. Some apps further require a user " @@ -7494,7 +7528,7 @@ msgstr "" "ett användarkonto för att vara en del av en grupp för att auktorisera " "användaren att komma åt appen." -#: plinth/modules/users/__init__.py:34 +#: plinth/modules/users/__init__.py:35 #, python-brace-format msgid "" "Any user may login to {box_name} web interface to see a list of apps " @@ -7505,19 +7539,29 @@ msgstr "" "över appar som är relevanta för dem på startsidan. Endast användare av " "gruppen admin kan dock ändra appar eller Systeminställningar." -#: plinth/modules/users/__init__.py:55 +#: plinth/modules/users/__init__.py:56 msgid "Users and Groups" msgstr "Användare och grupper" -#: plinth/modules/users/__init__.py:80 +#: plinth/modules/users/__init__.py:81 msgid "Access to all services and system settings" msgstr "Tillgång till alla tjänster och systeminställningar" -#: plinth/modules/users/__init__.py:116 +#: plinth/modules/users/__init__.py:124 #, python-brace-format msgid "Check LDAP entry \"{search_item}\"" msgstr "Kontrollera LDAP-posten \"{search_item}\"" +#: plinth/modules/users/__init__.py:137 +#, python-brace-format +msgid "Check nslcd config \"{key} {value}\"" +msgstr "" + +#: plinth/modules/users/__init__.py:166 +#, python-brace-format +msgid "Check nsswitch config \"{database}\"" +msgstr "" + #: plinth/modules/users/forms.py:35 msgid "Username is taken or is reserved." msgstr "Användarnamnet är upptaget eller är reserverade." @@ -8712,7 +8756,13 @@ msgstr "Uppdatera" msgid "Backup" msgstr "Säkerhetskopia" -#: plinth/templates/toolbar.html:51 plinth/templates/toolbar.html:52 +#: plinth/templates/toolbar.html:53 +#, fuzzy +#| msgid "Start setup" +msgid "Re-run setup" +msgstr "Starta installation" + +#: plinth/templates/toolbar.html:59 plinth/templates/toolbar.html:60 #: plinth/templates/uninstall.html:30 msgid "Uninstall" msgstr "avinstallera" @@ -8730,11 +8780,11 @@ msgstr "" "All appdata och konfiguration kommer att gå förlorad permanent. Appen kan " "installeras på nytt igen." -#: plinth/views.py:239 +#: plinth/views.py:241 msgid "Setting unchanged" msgstr "Instänllningar oförändrade" -#: plinth/views.py:456 +#: plinth/views.py:478 #, python-brace-format msgid "before uninstall of {app_id}" msgstr "innan du avinstallerar {app_id}" @@ -8743,6 +8793,14 @@ msgstr "innan du avinstallerar {app_id}" msgid "Gujarati" msgstr "Gujarati" +#, python-brace-format +#~ msgid "" +#~ "A Tor SOCKS port is available on your {box_name} for internal networks on " +#~ "TCP port 9050." +#~ msgstr "" +#~ "En Tor SOCKS-port finns tillgängligt på din {box_name} för interna " +#~ "nätverk på TCP-port 9050." + #, python-brace-format #~ msgid "" #~ "When enabled, text box for server input is removed from login page and " @@ -9545,9 +9603,6 @@ msgstr "Gujarati" #~ "säker installation. Beroende på hur snabbt din %(box_name)s är, kan det " #~ "även ta timmar. Om installationen avbryts kan du starta den igen." -#~ msgid "Start setup" -#~ msgstr "Starta installation" - #~ msgid "OpenVPN setup is running" #~ msgstr "OpenVPN-installationen körs" diff --git a/plinth/locale/ta/LC_MESSAGES/django.po b/plinth/locale/ta/LC_MESSAGES/django.po index 971ca2748..0d6dbfc41 100644 --- a/plinth/locale/ta/LC_MESSAGES/django.po +++ b/plinth/locale/ta/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-06-19 20:15-0400\n" +"POT-Creation-Date: 2023-07-31 20:04-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -27,7 +27,7 @@ msgstr "" msgid "Static configuration {etc_path} is setup properly" msgstr "" -#: plinth/context_processors.py:23 plinth/views.py:92 +#: plinth/context_processors.py:23 plinth/views.py:94 msgid "FreedomBox" msgstr "" @@ -834,7 +834,8 @@ msgstr "" #: plinth/modules/bepasty/views.py:88 plinth/modules/searx/views.py:35 #: plinth/modules/searx/views.py:46 plinth/modules/security/views.py:56 -#: plinth/modules/tor/views.py:73 plinth/modules/zoph/views.py:74 +#: plinth/modules/tor/views.py:73 plinth/modules/torproxy/views.py:71 +#: plinth/modules/zoph/views.py:74 msgid "Configuration updated." msgstr "" @@ -1916,7 +1917,7 @@ msgstr "" msgid "Host/Target/Value" msgstr "" -#: plinth/modules/firewall/__init__.py:23 +#: plinth/modules/firewall/__init__.py:24 #, python-brace-format msgid "" "Firewall is a security system that controls the incoming and outgoing " @@ -1924,10 +1925,22 @@ msgid "" "configured reduces risk of security threat from the Internet." msgstr "" -#: plinth/modules/firewall/__init__.py:59 +#: plinth/modules/firewall/__init__.py:60 msgid "Firewall" msgstr "" +#: plinth/modules/firewall/__init__.py:269 +msgid "Default zone is external" +msgstr "" + +#: plinth/modules/firewall/__init__.py:276 +msgid "Firewall backend is nftables" +msgstr "" + +#: plinth/modules/firewall/__init__.py:287 +msgid "Direct passthrough rules exist" +msgstr "" + #: plinth/modules/firewall/components.py:134 #, python-brace-format msgid "Port {name} ({details}) available for internal networks" @@ -2500,7 +2513,8 @@ msgstr "" msgid "I2P" msgstr "" -#: plinth/modules/i2p/__init__.py:53 plinth/modules/tor/__init__.py:49 +#: plinth/modules/i2p/__init__.py:53 plinth/modules/tor/__init__.py:61 +#: plinth/modules/torproxy/__init__.py:55 msgid "Anonymity Network" msgstr "" @@ -4764,7 +4778,7 @@ msgstr "" msgid "Web Proxy" msgstr "" -#: plinth/modules/privoxy/__init__.py:113 +#: plinth/modules/privoxy/__init__.py:114 #, python-brace-format msgid "Access {url} with proxy {proxy} on tcp{kind}" msgstr "" @@ -6013,7 +6027,7 @@ msgstr "" msgid "File Synchronization" msgstr "" -#: plinth/modules/tor/__init__.py:23 +#: plinth/modules/tor/__init__.py:31 plinth/modules/torproxy/__init__.py:27 msgid "" "Tor is an anonymous communication system. You can learn more about it from " "the Tor Project website. For " @@ -6022,55 +6036,48 @@ msgid "" "en\">Tor Browser." msgstr "" -#: plinth/modules/tor/__init__.py:30 -#, python-brace-format +#: plinth/modules/tor/__init__.py:37 msgid "" -"A Tor SOCKS port is available on your {box_name} for internal networks on " -"TCP port 9050." +"This app provides relay services to contribute to Tor network and help " +"others overcome censorship." msgstr "" -#: plinth/modules/tor/__init__.py:48 +#: plinth/modules/tor/__init__.py:40 +#, python-brace-format +msgid "" +"This app provides an onion domain to expose {box_name} services via the Tor " +"network. Using Tor browser, one can access {box_name} from the internet even " +"when using an ISP that limits servers at home." +msgstr "" + +#: plinth/modules/tor/__init__.py:60 msgid "Tor" msgstr "" -#: plinth/modules/tor/__init__.py:65 +#: plinth/modules/tor/__init__.py:76 msgid "Tor Onion Service" msgstr "" -#: plinth/modules/tor/__init__.py:69 -msgid "Tor Socks Proxy" -msgstr "" - -#: plinth/modules/tor/__init__.py:73 +#: plinth/modules/tor/__init__.py:80 msgid "Tor Bridge Relay" msgstr "" -#: plinth/modules/tor/__init__.py:132 +#: plinth/modules/tor/__init__.py:135 msgid "Tor relay port available" msgstr "" -#: plinth/modules/tor/__init__.py:143 +#: plinth/modules/tor/__init__.py:146 msgid "Obfs3 transport registered" msgstr "" -#: plinth/modules/tor/__init__.py:153 +#: plinth/modules/tor/__init__.py:156 msgid "Obfs4 transport registered" msgstr "" -#: plinth/modules/tor/__init__.py:165 +#: plinth/modules/tor/__init__.py:168 msgid "Onion service is version 3" msgstr "" -#: plinth/modules/tor/__init__.py:242 -#, python-brace-format -msgid "Access URL {url} on tcp{kind} via Tor" -msgstr "" - -#: plinth/modules/tor/__init__.py:253 -#, python-brace-format -msgid "Confirm Tor usage at {url} on tcp{kind}" -msgstr "" - #: plinth/modules/tor/forms.py:33 msgid "" "Enter a valid bridge with this format: [transport] IP:ORPort [fingerprint]" @@ -6098,11 +6105,11 @@ msgid "" "here. Currently supported transports are none, obfs3, obfs4 and scamblesuit." msgstr "" -#: plinth/modules/tor/forms.py:91 +#: plinth/modules/tor/forms.py:95 msgid "Enable Tor relay" msgstr "" -#: plinth/modules/tor/forms.py:92 +#: plinth/modules/tor/forms.py:96 #, python-brace-format msgid "" "When enabled, your {box_name} will run a Tor relay and donate bandwidth to " @@ -6110,22 +6117,22 @@ msgid "" "download bandwidth." msgstr "" -#: plinth/modules/tor/forms.py:97 +#: plinth/modules/tor/forms.py:101 msgid "Enable Tor bridge relay" msgstr "" -#: plinth/modules/tor/forms.py:99 +#: plinth/modules/tor/forms.py:103 msgid "" "When enabled, relay information is published in the Tor bridge database " "instead of public Tor relay database making it harder to censor this node. " "This helps others circumvent censorship." msgstr "" -#: plinth/modules/tor/forms.py:104 +#: plinth/modules/tor/forms.py:108 msgid "Enable Tor Onion Service" msgstr "" -#: plinth/modules/tor/forms.py:106 +#: plinth/modules/tor/forms.py:110 #, python-brace-format msgid "" "An onion service will allow {box_name} to provide selected services (such as " @@ -6133,26 +6140,15 @@ msgid "" "anonymity yet." msgstr "" -#: plinth/modules/tor/forms.py:111 -msgid "Download software packages over Tor" -msgstr "" - -#: plinth/modules/tor/forms.py:112 -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/forms.py:127 +#: plinth/modules/tor/forms.py:125 msgid "Specify at least one upstream bridge to use upstream bridges." msgstr "" -#: plinth/modules/tor/manifest.py:15 +#: plinth/modules/tor/manifest.py:15 plinth/modules/torproxy/manifest.py:14 msgid "Tor Browser" msgstr "" -#: plinth/modules/tor/manifest.py:31 +#: plinth/modules/tor/manifest.py:31 plinth/modules/torproxy/manifest.py:30 msgid "Orbot: Proxy with Tor" msgstr "" @@ -6164,15 +6160,53 @@ msgstr "" msgid "Ports" msgstr "" -#: plinth/modules/tor/views.py:53 +#: plinth/modules/tor/views.py:53 plinth/modules/torproxy/views.py:51 msgid "Updating configuration" msgstr "" -#: plinth/modules/tor/views.py:70 +#: plinth/modules/tor/views.py:70 plinth/modules/torproxy/views.py:68 #, python-brace-format msgid "Error configuring app: {error}" msgstr "" +#: plinth/modules/torproxy/__init__.py:34 +#, python-brace-format +msgid "" +"This app provides a web proxy on your {box_name} for internal networks on " +"TCP port 9050 using the SOCKS protocol. This can be used by various apps to " +"access the internet via the Tor network. ISP censorship can be circumvented " +"using upstream bridges." +msgstr "" + +#: plinth/modules/torproxy/__init__.py:54 +msgid "Tor Proxy" +msgstr "" + +#: plinth/modules/torproxy/__init__.py:79 +msgid "Tor Socks Proxy" +msgstr "" + +#: plinth/modules/torproxy/__init__.py:138 +#, python-brace-format +msgid "Access URL {url} on tcp{kind} via Tor" +msgstr "" + +#: plinth/modules/torproxy/__init__.py:149 +#, python-brace-format +msgid "Confirm Tor usage at {url} on tcp{kind}" +msgstr "" + +#: plinth/modules/torproxy/forms.py:15 +msgid "Download software packages over Tor" +msgstr "" + +#: plinth/modules/torproxy/forms.py:16 +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/transmission/__init__.py:25 msgid "Transmission is a BitTorrent client with a web interface." msgstr "" @@ -6498,14 +6532,14 @@ msgstr "" msgid "Starting distribution upgrade test." msgstr "" -#: plinth/modules/users/__init__.py:29 +#: plinth/modules/users/__init__.py:30 msgid "" "Create and manage user accounts. These accounts serve as centralized " "authentication mechanism for most apps. Some apps further require a user " "account to be part of a group to authorize the user to access the app." msgstr "" -#: plinth/modules/users/__init__.py:34 +#: plinth/modules/users/__init__.py:35 #, python-brace-format msgid "" "Any user may login to {box_name} web interface to see a list of apps " @@ -6513,19 +6547,29 @@ msgid "" "group may alter apps or system settings." msgstr "" -#: plinth/modules/users/__init__.py:55 +#: plinth/modules/users/__init__.py:56 msgid "Users and Groups" msgstr "" -#: plinth/modules/users/__init__.py:80 +#: plinth/modules/users/__init__.py:81 msgid "Access to all services and system settings" msgstr "" -#: plinth/modules/users/__init__.py:116 +#: plinth/modules/users/__init__.py:124 #, python-brace-format msgid "Check LDAP entry \"{search_item}\"" msgstr "" +#: plinth/modules/users/__init__.py:137 +#, python-brace-format +msgid "Check nslcd config \"{key} {value}\"" +msgstr "" + +#: plinth/modules/users/__init__.py:166 +#, python-brace-format +msgid "Check nsswitch config \"{database}\"" +msgstr "" + #: plinth/modules/users/forms.py:35 msgid "Username is taken or is reserved." msgstr "" @@ -7593,7 +7637,11 @@ msgstr "" msgid "Backup" msgstr "" -#: plinth/templates/toolbar.html:51 plinth/templates/toolbar.html:52 +#: plinth/templates/toolbar.html:53 +msgid "Re-run setup" +msgstr "" + +#: plinth/templates/toolbar.html:59 plinth/templates/toolbar.html:60 #: plinth/templates/uninstall.html:30 msgid "Uninstall" msgstr "" @@ -7609,11 +7657,11 @@ msgid "" "installed freshly again." msgstr "" -#: plinth/views.py:239 +#: plinth/views.py:241 msgid "Setting unchanged" msgstr "" -#: plinth/views.py:456 +#: plinth/views.py:478 #, python-brace-format msgid "before uninstall of {app_id}" msgstr "" diff --git a/plinth/locale/te/LC_MESSAGES/django.po b/plinth/locale/te/LC_MESSAGES/django.po index bf1a958a6..64e8666d7 100644 --- a/plinth/locale/te/LC_MESSAGES/django.po +++ b/plinth/locale/te/LC_MESSAGES/django.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: FreedomBox UI\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-06-19 20:15-0400\n" +"POT-Creation-Date: 2023-07-31 20:04-0400\n" "PO-Revision-Date: 2022-03-02 12:27+0000\n" "Last-Translator: James Valleroy \n" "Language-Team: Telugu Tor Project website. For " @@ -6722,58 +6738,50 @@ msgstr "" "టార్ ప్రాజెక్ట్ మీరు టార్ బ్రౌజర్ ను ఉపయోగించాలని సిఫార్సు చేస్తున్నారు." -#: plinth/modules/tor/__init__.py:30 -#, fuzzy, python-brace-format -#| msgid "A Tor SOCKS port is available on your %(box_name)s on TCP port 9050." +#: plinth/modules/tor/__init__.py:37 msgid "" -"A Tor SOCKS port is available on your {box_name} for internal networks on " -"TCP port 9050." -msgstr "టిసిపి పోర్ట్ 9050 పై ఒక టార్ సొక్స్ పోర్ట్ మీ %(box_name)sలో అందుబాటులో ఉంది." +"This app provides relay services to contribute to Tor network and help " +"others overcome censorship." +msgstr "" -#: plinth/modules/tor/__init__.py:48 +#: plinth/modules/tor/__init__.py:40 +#, python-brace-format +msgid "" +"This app provides an onion domain to expose {box_name} services via the Tor " +"network. Using Tor browser, one can access {box_name} from the internet even " +"when using an ISP that limits servers at home." +msgstr "" + +#: plinth/modules/tor/__init__.py:60 msgid "Tor" msgstr "టార్" -#: plinth/modules/tor/__init__.py:65 +#: plinth/modules/tor/__init__.py:76 msgid "Tor Onion Service" msgstr "టోర్ ఉల్లిపాయ సేవ" -#: plinth/modules/tor/__init__.py:69 -msgid "Tor Socks Proxy" -msgstr "టోర్ సాక్స్ ప్రాతినిధ్య" - -#: plinth/modules/tor/__init__.py:73 +#: plinth/modules/tor/__init__.py:80 msgid "Tor Bridge Relay" msgstr "టార్ బ్రిడ్జ్ రిలే" -#: plinth/modules/tor/__init__.py:132 +#: plinth/modules/tor/__init__.py:135 msgid "Tor relay port available" msgstr "టార్ రిలే పోర్ట్ అందుబాటులో ఉంది" -#: plinth/modules/tor/__init__.py:143 +#: plinth/modules/tor/__init__.py:146 msgid "Obfs3 transport registered" msgstr "Obfs3 రవాణా నమోదు చేయబడింది" -#: plinth/modules/tor/__init__.py:153 +#: plinth/modules/tor/__init__.py:156 msgid "Obfs4 transport registered" msgstr "Obfs4 రవాణా నమోదు చేయబడింది" -#: plinth/modules/tor/__init__.py:165 +#: plinth/modules/tor/__init__.py:168 #, fuzzy #| msgid "Onion Service" msgid "Onion service is version 3" msgstr "ఉల్లిపాయ సేవ" -#: plinth/modules/tor/__init__.py:242 -#, python-brace-format -msgid "Access URL {url} on tcp{kind} via Tor" -msgstr "టార్ ద్వారా {kind} లో {url} ను ఆక్సెస్ చెయ్యండి" - -#: plinth/modules/tor/__init__.py:253 -#, python-brace-format -msgid "Confirm Tor usage at {url} on tcp{kind}" -msgstr "టోర్ వాడుకను నిర్ధారించండి{url} టీ సి పి పై{kind}" - #: plinth/modules/tor/forms.py:33 msgid "" "Enter a valid bridge with this format: [transport] IP:ORPort [fingerprint]" @@ -6808,11 +6816,11 @@ msgstr "" "torproject.org/ నుండి కొన్ని బ్రిడ్జెస్ పొందవచ్చు మరియు ఇక్కడ బ్రిడ్జె సమాచారాన్ని కాపీ / పేస్ట్ " "చెయ్యండి. ప్రస్తుతం మద్దతిచ్చే ట్రాన్స్పోర్ట్ లు none, obfs3, obfs4 మరియు scamblesuit." -#: plinth/modules/tor/forms.py:91 +#: plinth/modules/tor/forms.py:95 msgid "Enable Tor relay" msgstr "టోర్ రిలేని ప్రారంభించండి" -#: plinth/modules/tor/forms.py:92 +#: plinth/modules/tor/forms.py:96 #, python-brace-format msgid "" "When enabled, your {box_name} will run a Tor relay and donate bandwidth to " @@ -6822,11 +6830,11 @@ msgstr "" "ప్రారంభించినప్పుడు, మీ {box_name} 1 టోర్ రిలేని అమలు చేస్తుంది మరియు టార్ నెట్వర్క్కి బ్యాండ్విడ్త్ని దానం " "చేస్తుంది. మీరు 2 megabits / s కంటే ఎక్కువ అప్లోడ్ మరియు డౌన్లోడ్ బ్యాండ్విడ్త్ ఉంటే దీన్ని చేయండి." -#: plinth/modules/tor/forms.py:97 +#: plinth/modules/tor/forms.py:101 msgid "Enable Tor bridge relay" msgstr "టార్ వంతెన రిలేను ప్రారంభించండి." -#: plinth/modules/tor/forms.py:99 +#: plinth/modules/tor/forms.py:103 msgid "" "When enabled, relay information is published in the Tor bridge database " "instead of public Tor relay database making it harder to censor this node. " @@ -6836,13 +6844,13 @@ msgstr "" "ప్రచురించబడుతుంది, ఇది ఈ నోడ్ను సెన్సార్ చేయడానికి కష్టతరం చేస్తుంది. ఇతరులు సెన్సార్షిప్ను " "తప్పించుకునేందుకు ఇది దోహదపడుతుంది." -#: plinth/modules/tor/forms.py:104 +#: plinth/modules/tor/forms.py:108 #, fuzzy #| msgid "Enable Tor Hidden Service" msgid "Enable Tor Onion Service" msgstr "టోర్ హిడెన్ సర్వీస్‌ని ప్రారంభించండి" -#: plinth/modules/tor/forms.py:106 +#: plinth/modules/tor/forms.py:110 #, fuzzy, python-brace-format msgid "" "An onion service will allow {box_name} to provide selected services (such as " @@ -6852,28 +6860,15 @@ msgstr "" "దాచిన సేవ దాని స్థానాన్ని బహిర్గతం చేయకుండా ఎంచుకున్న సేవలను (వికీ లేదా చాట్ వంటివి) అందించడానికి " "బాక్స్_నామని అనుమతిస్తుంది. ఇంకా బలమైన అనామకత్వం కోసం దీన్ని ఉపయోగించవద్దు. {box_name}" -#: plinth/modules/tor/forms.py:111 -msgid "Download software packages over Tor" -msgstr "టార్ పై సాఫ్ట్వేర్ ప్యాకేజీలను డౌన్లోడ్ చేయండి" - -#: plinth/modules/tor/forms.py:112 -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/forms.py:127 +#: plinth/modules/tor/forms.py:125 msgid "Specify at least one upstream bridge to use upstream bridges." msgstr "అప్స్ట్రీమ్ వంతెనలను ఉపయోగించడానికి కనీసం ఒక అప్స్ట్రీమ్ వంతెనను పేర్కొనండి." -#: plinth/modules/tor/manifest.py:15 +#: plinth/modules/tor/manifest.py:15 plinth/modules/torproxy/manifest.py:14 msgid "Tor Browser" msgstr "టార్ బ్రౌజర్" -#: plinth/modules/tor/manifest.py:31 +#: plinth/modules/tor/manifest.py:31 plinth/modules/torproxy/manifest.py:30 msgid "Orbot: Proxy with Tor" msgstr "ఆర్బోట్: టోర్ తో ప్రాక్సీ" @@ -6885,18 +6880,60 @@ msgstr "ఉల్లిపాయ సేవ" msgid "Ports" msgstr "పోర్ట్స్" -#: plinth/modules/tor/views.py:53 +#: plinth/modules/tor/views.py:53 plinth/modules/torproxy/views.py:51 #, fuzzy #| msgid "An error occurred during configuration." msgid "Updating configuration" msgstr "అక్రుతీకరణలో ఒక పొరపాటు జరిగింది." -#: plinth/modules/tor/views.py:70 +#: plinth/modules/tor/views.py:70 plinth/modules/torproxy/views.py:68 #, fuzzy, python-brace-format #| msgid "Error installing application: {error}" msgid "Error configuring app: {error}" msgstr "అనువర్తనం స్థాపించుటలో దోషం: {error}" +#: plinth/modules/torproxy/__init__.py:34 +#, python-brace-format +msgid "" +"This app provides a web proxy on your {box_name} for internal networks on " +"TCP port 9050 using the SOCKS protocol. This can be used by various apps to " +"access the internet via the Tor network. ISP censorship can be circumvented " +"using upstream bridges." +msgstr "" + +#: plinth/modules/torproxy/__init__.py:54 +#, fuzzy +#| msgid "Tor Socks Proxy" +msgid "Tor Proxy" +msgstr "టోర్ సాక్స్ ప్రాతినిధ్య" + +#: plinth/modules/torproxy/__init__.py:79 +msgid "Tor Socks Proxy" +msgstr "టోర్ సాక్స్ ప్రాతినిధ్య" + +#: plinth/modules/torproxy/__init__.py:138 +#, python-brace-format +msgid "Access URL {url} on tcp{kind} via Tor" +msgstr "టార్ ద్వారా {kind} లో {url} ను ఆక్సెస్ చెయ్యండి" + +#: plinth/modules/torproxy/__init__.py:149 +#, python-brace-format +msgid "Confirm Tor usage at {url} on tcp{kind}" +msgstr "టోర్ వాడుకను నిర్ధారించండి{url} టీ సి పి పై{kind}" + +#: plinth/modules/torproxy/forms.py:15 +msgid "Download software packages over Tor" +msgstr "టార్ పై సాఫ్ట్వేర్ ప్యాకేజీలను డౌన్లోడ్ చేయండి" + +#: plinth/modules/torproxy/forms.py:16 +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/transmission/__init__.py:25 msgid "Transmission is a BitTorrent client with a web interface." msgstr "ప్రసరణ అనేది వెబ్ ఇంటర్‌ఫేస్‌తో కూడిన బిట్‌టొరెంట్ క్లయింట్." @@ -7277,7 +7314,7 @@ msgstr "తరచుగా ఫీచర్ అప్‌డేట్‌లు య msgid "Starting distribution upgrade test." msgstr "పంపిణీ మెరుగుపరుచడం ప్రారంభించబడింది" -#: plinth/modules/users/__init__.py:29 +#: plinth/modules/users/__init__.py:30 msgid "" "Create and manage user accounts. These accounts serve as centralized " "authentication mechanism for most apps. Some apps further require a user " @@ -7287,7 +7324,7 @@ msgstr "" "విధానంగా పనిచేస్తాయి. కొన్ని యాప్‌లకు యాప్‌ను యాక్సెస్ చేయడానికి వినియోగదారుని ప్రామాణీకరించడానికి సమూహంలో భాగంగా " "వినియోగదారు ఖాతా అవసరం" -#: plinth/modules/users/__init__.py:34 +#: plinth/modules/users/__init__.py:35 #, python-brace-format msgid "" "Any user may login to {box_name} web interface to see a list of apps " @@ -7298,19 +7335,29 @@ msgstr "" "చేయవచ్చు. అయినప్పటికీ, అడ్మిన్ సమూహం యొక్క వినియోగదారులు మాత్రమే యాప్‌లు లేదా సిస్టమ్ " "సెట్టింగ్‌లను మార్చవచ్చు." -#: plinth/modules/users/__init__.py:55 +#: plinth/modules/users/__init__.py:56 msgid "Users and Groups" msgstr "వినియోగదారులు మరియు సమూహాలు" -#: plinth/modules/users/__init__.py:80 +#: plinth/modules/users/__init__.py:81 msgid "Access to all services and system settings" msgstr "అన్ని సేవలకు మరియు సిస్టమ్ అమరికలకు ప్రాప్యత" -#: plinth/modules/users/__init__.py:116 +#: plinth/modules/users/__init__.py:124 #, python-brace-format msgid "Check LDAP entry \"{search_item}\"" msgstr "LDAP నమోదు \"{search_item}\" తనిఖీ" +#: plinth/modules/users/__init__.py:137 +#, python-brace-format +msgid "Check nslcd config \"{key} {value}\"" +msgstr "" + +#: plinth/modules/users/__init__.py:166 +#, python-brace-format +msgid "Check nsswitch config \"{database}\"" +msgstr "" + #: plinth/modules/users/forms.py:35 msgid "Username is taken or is reserved." msgstr "యూజర్ పేరు తీసుకోబడింది లేదా రిజర్వ్ చేయబడింది." @@ -8502,7 +8549,13 @@ msgstr "నవీకరణ" msgid "Backup" msgstr "బ్యాకప్స్" -#: plinth/templates/toolbar.html:51 plinth/templates/toolbar.html:52 +#: plinth/templates/toolbar.html:53 +#, fuzzy +#| msgid "Start setup" +msgid "Re-run setup" +msgstr "అమర్చిపెట్టు ప్రారంభం" + +#: plinth/templates/toolbar.html:59 plinth/templates/toolbar.html:60 #: plinth/templates/uninstall.html:30 #, fuzzy #| msgid "Install" @@ -8521,11 +8574,11 @@ msgid "" "installed freshly again." msgstr "" -#: plinth/views.py:239 +#: plinth/views.py:241 msgid "Setting unchanged" msgstr "మారకుండా అమర్చుతోంది" -#: plinth/views.py:456 +#: plinth/views.py:478 #, python-brace-format msgid "before uninstall of {app_id}" msgstr "" @@ -8534,6 +8587,14 @@ msgstr "" msgid "Gujarati" msgstr "గుజరాతీ" +#, fuzzy, python-brace-format +#~| msgid "" +#~| "A Tor SOCKS port is available on your %(box_name)s on TCP port 9050." +#~ msgid "" +#~ "A Tor SOCKS port is available on your {box_name} for internal networks on " +#~ "TCP port 9050." +#~ msgstr "టిసిపి పోర్ట్ 9050 పై ఒక టార్ సొక్స్ పోర్ట్ మీ %(box_name)sలో అందుబాటులో ఉంది." + #, python-brace-format #~ msgid "" #~ "When enabled, text box for server input is removed from login page and " @@ -9287,9 +9348,6 @@ msgstr "గుజరాతీ" #~ "(box_name) లు 1 ఆధారపడి, అది కూడా గంటల సమయం పట్టవచ్చు. సెటప్ ఆటకం, మీరు మళ్ళీ దాన్ని " #~ "మొదలు పెడతాయి." -#~ msgid "Start setup" -#~ msgstr "అమర్చిపెట్టు ప్రారంభం" - #~ msgid "OpenVPN setup is running" #~ msgstr "అమర్చిపెటినా తెరిచినVPNనడుస్తుంది" @@ -9941,11 +9999,6 @@ msgstr "గుజరాతీ" #~ msgid "Error setting default app: {exception}" #~ msgstr "భాషను అమర్చుటలో లోపం: {exception}" -#, fuzzy -#~| msgid "Default" -#~ msgid "Default app set" -#~ msgstr "అప్రమేయం" - #, fuzzy #~| msgid "NTP client in contact with servers" #~ msgid "chrony client in contact with servers" diff --git a/plinth/locale/tr/LC_MESSAGES/django.po b/plinth/locale/tr/LC_MESSAGES/django.po index 14795b4ac..b273902fc 100644 --- a/plinth/locale/tr/LC_MESSAGES/django.po +++ b/plinth/locale/tr/LC_MESSAGES/django.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-06-19 20:15-0400\n" +"POT-Creation-Date: 2023-07-31 20:04-0400\n" "PO-Revision-Date: 2023-06-21 13:49+0000\n" "Last-Translator: Burak Yavuz \n" "Language-Team: Turkish Tor Project website. For " @@ -6926,57 +6942,48 @@ msgstr "" "gezinirken en iyi koruma için Tor Projesi, Tor Tarayıcı kullanmanızı önerir." -#: plinth/modules/tor/__init__.py:30 +#: plinth/modules/tor/__init__.py:37 +msgid "" +"This app provides relay services to contribute to Tor network and help " +"others overcome censorship." +msgstr "" + +#: plinth/modules/tor/__init__.py:40 #, python-brace-format msgid "" -"A Tor SOCKS port is available on your {box_name} for internal networks on " -"TCP port 9050." +"This app provides an onion domain to expose {box_name} services via the Tor " +"network. Using Tor browser, one can access {box_name} from the internet even " +"when using an ISP that limits servers at home." msgstr "" -"9050 nolu TCP bağlantı noktası üzerindeki dahili ağlar için {box_name} " -"cihazınızda bir Tor SOCKS bağlantı noktası kullanılabilir." -#: plinth/modules/tor/__init__.py:48 +#: plinth/modules/tor/__init__.py:60 msgid "Tor" msgstr "Tor" -#: plinth/modules/tor/__init__.py:65 +#: plinth/modules/tor/__init__.py:76 msgid "Tor Onion Service" msgstr "Tor Onion Hizmeti" -#: plinth/modules/tor/__init__.py:69 -msgid "Tor Socks Proxy" -msgstr "Tor Socks Vekil Sunucusu" - -#: plinth/modules/tor/__init__.py:73 +#: plinth/modules/tor/__init__.py:80 msgid "Tor Bridge Relay" msgstr "Tor Köprüsü Aktarımı" -#: plinth/modules/tor/__init__.py:132 +#: plinth/modules/tor/__init__.py:135 msgid "Tor relay port available" msgstr "Tor aktarımı bağlantı noktası kullanılabilir" -#: plinth/modules/tor/__init__.py:143 +#: plinth/modules/tor/__init__.py:146 msgid "Obfs3 transport registered" msgstr "Obfs3 taşıma kayıtlı" -#: plinth/modules/tor/__init__.py:153 +#: plinth/modules/tor/__init__.py:156 msgid "Obfs4 transport registered" msgstr "Obfs4 taşıma kayıtlı" -#: plinth/modules/tor/__init__.py:165 +#: plinth/modules/tor/__init__.py:168 msgid "Onion service is version 3" msgstr "Onion hizmeti sürüm 3'tür" -#: plinth/modules/tor/__init__.py:242 -#, python-brace-format -msgid "Access URL {url} on tcp{kind} via Tor" -msgstr "Tor aracılığıyla tcp{kind} üzerinde erişim URL'si {url}" - -#: plinth/modules/tor/__init__.py:253 -#, python-brace-format -msgid "Confirm Tor usage at {url} on tcp{kind}" -msgstr "Tcp{kind} üzerinde {url} adresinde Tor kullanımını onaylama" - #: plinth/modules/tor/forms.py:33 msgid "" "Enter a valid bridge with this format: [transport] IP:ORPort [fingerprint]" @@ -7012,11 +7019,11 @@ msgstr "" "yapıştır yapabilirsiniz. Şu anda desteklenen taşımalar none, obfs3, obfs4 ve " "scamblesuit'tir." -#: plinth/modules/tor/forms.py:91 +#: plinth/modules/tor/forms.py:95 msgid "Enable Tor relay" msgstr "Tor aktarımını etkinleştir" -#: plinth/modules/tor/forms.py:92 +#: plinth/modules/tor/forms.py:96 #, python-brace-format msgid "" "When enabled, your {box_name} will run a Tor relay and donate bandwidth to " @@ -7027,11 +7034,11 @@ msgstr "" "Tor ağına bant genişliği bağışlayacaktır. 2 megabit/s'den daha fazla " "gönderme ve indirme bant genişliğiniz varsa bunu yapın." -#: plinth/modules/tor/forms.py:97 +#: plinth/modules/tor/forms.py:101 msgid "Enable Tor bridge relay" msgstr "Tor köprüsü aktarımını etkinleştir" -#: plinth/modules/tor/forms.py:99 +#: plinth/modules/tor/forms.py:103 msgid "" "When enabled, relay information is published in the Tor bridge database " "instead of public Tor relay database making it harder to censor this node. " @@ -7041,11 +7048,11 @@ msgstr "" "zorlaştıran herkese açık Tor aktarımı veritabanı yerine Tor köprüsü " "veritabanında yayınlanır. Bu, başkalarının sansürü atlatmasına yardımcı olur." -#: plinth/modules/tor/forms.py:104 +#: plinth/modules/tor/forms.py:108 msgid "Enable Tor Onion Service" msgstr "Tor Onion Hizmetini etkinleştir" -#: plinth/modules/tor/forms.py:106 +#: plinth/modules/tor/forms.py:110 #, python-brace-format msgid "" "An onion service will allow {box_name} to provide selected services (such as " @@ -7056,31 +7063,17 @@ msgstr "" "hizmetleri (viki veya sohbet gibi) sağlaması için izin verecektir. Bunu " "henüz güçlü bir isim gizliliği için kullanmayın." -#: plinth/modules/tor/forms.py:111 -msgid "Download software packages over Tor" -msgstr "Yazılım paketlerini Tor üzerinden indir" - -#: plinth/modules/tor/forms.py:112 -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, kurulumlar ve yükseltmeler için yazılım Tor ağı " -"üzerinden indirilecektir. Bu, yazılım indirmeleri sırasında bir derece " -"gizlilik ve güvenlik sağlar." - -#: plinth/modules/tor/forms.py:127 +#: plinth/modules/tor/forms.py:125 msgid "Specify at least one upstream bridge to use upstream bridges." msgstr "" "Yukarı akış köprülerini kullanmak için en az bir yukarı akış köprüsü " "belirtin." -#: plinth/modules/tor/manifest.py:15 +#: plinth/modules/tor/manifest.py:15 plinth/modules/torproxy/manifest.py:14 msgid "Tor Browser" msgstr "Tor Tarayıcı" -#: plinth/modules/tor/manifest.py:31 +#: plinth/modules/tor/manifest.py:31 plinth/modules/torproxy/manifest.py:30 msgid "Orbot: Proxy with Tor" msgstr "Orbot: Tor ile Vekil Sunucu" @@ -7092,15 +7085,58 @@ msgstr "Onion Hizmeti" msgid "Ports" msgstr "Bağlantı Noktaları" -#: plinth/modules/tor/views.py:53 +#: plinth/modules/tor/views.py:53 plinth/modules/torproxy/views.py:51 msgid "Updating configuration" msgstr "Yapılandırma güncelleniyor" -#: plinth/modules/tor/views.py:70 +#: plinth/modules/tor/views.py:70 plinth/modules/torproxy/views.py:68 #, python-brace-format msgid "Error configuring app: {error}" msgstr "Uygulama yapılandırılırken hata oldu: {error}" +#: plinth/modules/torproxy/__init__.py:34 +#, python-brace-format +msgid "" +"This app provides a web proxy on your {box_name} for internal networks on " +"TCP port 9050 using the SOCKS protocol. This can be used by various apps to " +"access the internet via the Tor network. ISP censorship can be circumvented " +"using upstream bridges." +msgstr "" + +#: plinth/modules/torproxy/__init__.py:54 +#, fuzzy +#| msgid "Tor Socks Proxy" +msgid "Tor Proxy" +msgstr "Tor Socks Vekil Sunucusu" + +#: plinth/modules/torproxy/__init__.py:79 +msgid "Tor Socks Proxy" +msgstr "Tor Socks Vekil Sunucusu" + +#: plinth/modules/torproxy/__init__.py:138 +#, python-brace-format +msgid "Access URL {url} on tcp{kind} via Tor" +msgstr "Tor aracılığıyla tcp{kind} üzerinde erişim URL'si {url}" + +#: plinth/modules/torproxy/__init__.py:149 +#, python-brace-format +msgid "Confirm Tor usage at {url} on tcp{kind}" +msgstr "Tcp{kind} üzerinde {url} adresinde Tor kullanımını onaylama" + +#: plinth/modules/torproxy/forms.py:15 +msgid "Download software packages over Tor" +msgstr "Yazılım paketlerini Tor üzerinden indir" + +#: plinth/modules/torproxy/forms.py:16 +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, kurulumlar ve yükseltmeler için yazılım Tor ağı " +"üzerinden indirilecektir. Bu, yazılım indirmeleri sırasında bir derece " +"gizlilik ve güvenlik sağlar." + #: plinth/modules/transmission/__init__.py:25 msgid "Transmission is a BitTorrent client with a web interface." msgstr "Transmission, Web kullanıcı arayüzü olan bir BitTorrent istemcisidir." @@ -7490,7 +7526,7 @@ msgstr "Sık yapılan özellik güncellemeleri etkinleştirildi." msgid "Starting distribution upgrade test." msgstr "Dağıtım yükseltmesi denemesi başlatılıyor." -#: plinth/modules/users/__init__.py:29 +#: plinth/modules/users/__init__.py:30 msgid "" "Create and manage user accounts. These accounts serve as centralized " "authentication mechanism for most apps. Some apps further require a user " @@ -7501,7 +7537,7 @@ msgstr "" "kullanıcıya, uygulamaya erişme yetkisi vermek için bir kullanıcı hesabının " "bir grubun parçası olmasını gerektirir." -#: plinth/modules/users/__init__.py:34 +#: plinth/modules/users/__init__.py:35 #, python-brace-format msgid "" "Any user may login to {box_name} web interface to see a list of apps " @@ -7513,19 +7549,29 @@ msgstr "" "sadece admin grubunun kullanıcıları uygulamaları veya sistem " "ayarlarını değiştirebilir." -#: plinth/modules/users/__init__.py:55 +#: plinth/modules/users/__init__.py:56 msgid "Users and Groups" msgstr "Kullanıcılar ve Gruplar" -#: plinth/modules/users/__init__.py:80 +#: plinth/modules/users/__init__.py:81 msgid "Access to all services and system settings" msgstr "Tüm hizmetlere ve sistem ayarlarına erişim" -#: plinth/modules/users/__init__.py:116 +#: plinth/modules/users/__init__.py:124 #, python-brace-format msgid "Check LDAP entry \"{search_item}\"" msgstr "LDAP \"{search_item}\" girişini denetleme" +#: plinth/modules/users/__init__.py:137 +#, python-brace-format +msgid "Check nslcd config \"{key} {value}\"" +msgstr "" + +#: plinth/modules/users/__init__.py:166 +#, python-brace-format +msgid "Check nsswitch config \"{database}\"" +msgstr "" + #: plinth/modules/users/forms.py:35 msgid "Username is taken or is reserved." msgstr "Kullanıcı adı alınmış veya ayrılmış." @@ -8715,7 +8761,13 @@ msgstr "Güncelle" msgid "Backup" msgstr "Yedekle" -#: plinth/templates/toolbar.html:51 plinth/templates/toolbar.html:52 +#: plinth/templates/toolbar.html:53 +#, fuzzy +#| msgid "Start setup" +msgid "Re-run setup" +msgstr "Ayarlamayı başlat" + +#: plinth/templates/toolbar.html:59 plinth/templates/toolbar.html:60 #: plinth/templates/uninstall.html:30 msgid "Uninstall" msgstr "Kaldır" @@ -8733,11 +8785,11 @@ msgstr "" "Tüm uygulama verileri ve yapılandırması kalıcı olarak kaybolacaktır. " "Uygulama tekrar yeni olarak yüklenebilir." -#: plinth/views.py:239 +#: plinth/views.py:241 msgid "Setting unchanged" msgstr "Ayar değişmedi" -#: plinth/views.py:456 +#: plinth/views.py:478 #, python-brace-format msgid "before uninstall of {app_id}" msgstr "{app_id} kaldırılmadan önce" @@ -8746,6 +8798,14 @@ msgstr "{app_id} kaldırılmadan önce" msgid "Gujarati" msgstr "Gujarati" +#, python-brace-format +#~ msgid "" +#~ "A Tor SOCKS port is available on your {box_name} for internal networks on " +#~ "TCP port 9050." +#~ msgstr "" +#~ "9050 nolu TCP bağlantı noktası üzerindeki dahili ağlar için {box_name} " +#~ "cihazınızda bir Tor SOCKS bağlantı noktası kullanılabilir." + #, python-brace-format #~ msgid "" #~ "When enabled, text box for server input is removed from login page and " @@ -9556,9 +9616,6 @@ msgstr "Gujarati" #~ "olarak saatler bile sürebilir. Eğer ayarlama yarıda kesilirse, tekrar " #~ "başlatabilirsiniz." -#~ msgid "Start setup" -#~ msgstr "Ayarlamayı başlat" - #~ msgid "OpenVPN setup is running" #~ msgstr "OpenVPN ayarlaması çalışıyor" @@ -10235,11 +10292,6 @@ msgstr "Gujarati" #~ msgid "Error setting default app: {exception}" #~ msgstr "Dilin ayarlanmasında hata: {exception}" -#, fuzzy -#~| msgid "Default" -#~ msgid "Default app set" -#~ msgstr "Varsayılan" - #, fuzzy #~| msgid "NTP client in contact with servers" #~ msgid "chrony client in contact with servers" diff --git a/plinth/locale/uk/LC_MESSAGES/django.po b/plinth/locale/uk/LC_MESSAGES/django.po index 9889b82ce..56afeb699 100644 --- a/plinth/locale/uk/LC_MESSAGES/django.po +++ b/plinth/locale/uk/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-06-19 20:15-0400\n" +"POT-Creation-Date: 2023-07-31 20:04-0400\n" "PO-Revision-Date: 2023-06-21 13:49+0000\n" "Last-Translator: Ihor Hordiichuk \n" "Language-Team: Ukrainian Tor Project website. For " @@ -6925,56 +6939,48 @@ msgstr "" "під час вебсерфінгу, проєкт Tor радить використовувати Tor Browser." -#: plinth/modules/tor/__init__.py:30 +#: plinth/modules/tor/__init__.py:37 +msgid "" +"This app provides relay services to contribute to Tor network and help " +"others overcome censorship." +msgstr "" + +#: plinth/modules/tor/__init__.py:40 #, python-brace-format msgid "" -"A Tor SOCKS port is available on your {box_name} for internal networks on " -"TCP port 9050." +"This app provides an onion domain to expose {box_name} services via the Tor " +"network. Using Tor browser, one can access {box_name} from the internet even " +"when using an ISP that limits servers at home." msgstr "" -"Порт SOCKS для Tor на Вашому {box_name} для внутрішніх мереж – TCP 9050." -#: plinth/modules/tor/__init__.py:48 +#: plinth/modules/tor/__init__.py:60 msgid "Tor" msgstr "Tor" -#: plinth/modules/tor/__init__.py:65 +#: plinth/modules/tor/__init__.py:76 msgid "Tor Onion Service" msgstr "Сервіс Tor Onion" -#: plinth/modules/tor/__init__.py:69 -msgid "Tor Socks Proxy" -msgstr "Проксі Tor Socks" - -#: plinth/modules/tor/__init__.py:73 +#: plinth/modules/tor/__init__.py:80 msgid "Tor Bridge Relay" msgstr "Ретранслятор Tor типу міст" -#: plinth/modules/tor/__init__.py:132 +#: plinth/modules/tor/__init__.py:135 msgid "Tor relay port available" msgstr "Доступний порт ретрансляції Tor" -#: plinth/modules/tor/__init__.py:143 +#: plinth/modules/tor/__init__.py:146 msgid "Obfs3 transport registered" msgstr "Зареєстровано транспорт Obfs3" -#: plinth/modules/tor/__init__.py:153 +#: plinth/modules/tor/__init__.py:156 msgid "Obfs4 transport registered" msgstr "Зареєстровано транспорт Obfs4" -#: plinth/modules/tor/__init__.py:165 +#: plinth/modules/tor/__init__.py:168 msgid "Onion service is version 3" msgstr "Служба Onion версії 3" -#: plinth/modules/tor/__init__.py:242 -#, python-brace-format -msgid "Access URL {url} on tcp{kind} via Tor" -msgstr "Доступ за адресою {url} на tcp{kind} через Tor" - -#: plinth/modules/tor/__init__.py:253 -#, python-brace-format -msgid "Confirm Tor usage at {url} on tcp{kind}" -msgstr "Підтвердити використання Tor можна за посиланням {url} на tcp{kind}" - #: plinth/modules/tor/forms.py:33 msgid "" "Enter a valid bridge with this format: [transport] IP:ORPort [fingerprint]" @@ -7010,11 +7016,11 @@ msgstr "" "сюди. Наразі підтримуються такі види транспорту: none, obfs3, obfs4 та " "scamblesuit." -#: plinth/modules/tor/forms.py:91 +#: plinth/modules/tor/forms.py:95 msgid "Enable Tor relay" msgstr "Увімкнути ретранслятор Tor" -#: plinth/modules/tor/forms.py:92 +#: plinth/modules/tor/forms.py:96 #, python-brace-format msgid "" "When enabled, your {box_name} will run a Tor relay and donate bandwidth to " @@ -7025,11 +7031,11 @@ msgstr "" "пропускну здатність мережі Tor. Зробіть це, якщо у вас є більше 2 мегабіт/с " "пропускної здатності для завантаження і вивантаження." -#: plinth/modules/tor/forms.py:97 +#: plinth/modules/tor/forms.py:101 msgid "Enable Tor bridge relay" msgstr "Увімкнути ретранслятор моста Tor" -#: plinth/modules/tor/forms.py:99 +#: plinth/modules/tor/forms.py:103 msgid "" "When enabled, relay information is published in the Tor bridge database " "instead of public Tor relay database making it harder to censor this node. " @@ -7039,11 +7045,11 @@ msgstr "" "не в загальнодоступній базі даних ретрансляції Tor, що ускладнює цензуру " "цього вузла. Це допомагає іншим обходити цензуру." -#: plinth/modules/tor/forms.py:104 +#: plinth/modules/tor/forms.py:108 msgid "Enable Tor Onion Service" msgstr "Увімкнути службу Tor Onion" -#: plinth/modules/tor/forms.py:106 +#: plinth/modules/tor/forms.py:110 #, python-brace-format msgid "" "An onion service will allow {box_name} to provide selected services (such as " @@ -7054,30 +7060,16 @@ msgstr "" "чат), не розкриваючи свого місця перебування. Не використовуйте це для " "повної анонімності." -#: plinth/modules/tor/forms.py:111 -msgid "Download software packages over Tor" -msgstr "Завантажувати пакунки програмного забезпечення через Tor" - -#: plinth/modules/tor/forms.py:112 -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/forms.py:127 +#: plinth/modules/tor/forms.py:125 msgid "Specify at least one upstream bridge to use upstream bridges." msgstr "" "Указати хоча б один upstream-міст для використання мостів вище за течією." -#: plinth/modules/tor/manifest.py:15 +#: plinth/modules/tor/manifest.py:15 plinth/modules/torproxy/manifest.py:14 msgid "Tor Browser" msgstr "Tor Browser" -#: plinth/modules/tor/manifest.py:31 +#: plinth/modules/tor/manifest.py:31 plinth/modules/torproxy/manifest.py:30 msgid "Orbot: Proxy with Tor" msgstr "Orbot: проксі з Tor" @@ -7089,15 +7081,58 @@ msgstr "Сервіс Onion" msgid "Ports" msgstr "Порти" -#: plinth/modules/tor/views.py:53 +#: plinth/modules/tor/views.py:53 plinth/modules/torproxy/views.py:51 msgid "Updating configuration" msgstr "Оновлення налаштувань" -#: plinth/modules/tor/views.py:70 +#: plinth/modules/tor/views.py:70 plinth/modules/torproxy/views.py:68 #, python-brace-format msgid "Error configuring app: {error}" msgstr "Помилка налаштування застосунку: {error}" +#: plinth/modules/torproxy/__init__.py:34 +#, python-brace-format +msgid "" +"This app provides a web proxy on your {box_name} for internal networks on " +"TCP port 9050 using the SOCKS protocol. This can be used by various apps to " +"access the internet via the Tor network. ISP censorship can be circumvented " +"using upstream bridges." +msgstr "" + +#: plinth/modules/torproxy/__init__.py:54 +#, fuzzy +#| msgid "Tor Socks Proxy" +msgid "Tor Proxy" +msgstr "Проксі Tor Socks" + +#: plinth/modules/torproxy/__init__.py:79 +msgid "Tor Socks Proxy" +msgstr "Проксі Tor Socks" + +#: plinth/modules/torproxy/__init__.py:138 +#, python-brace-format +msgid "Access URL {url} on tcp{kind} via Tor" +msgstr "Доступ за адресою {url} на tcp{kind} через Tor" + +#: plinth/modules/torproxy/__init__.py:149 +#, python-brace-format +msgid "Confirm Tor usage at {url} on tcp{kind}" +msgstr "Підтвердити використання Tor можна за посиланням {url} на tcp{kind}" + +#: plinth/modules/torproxy/forms.py:15 +msgid "Download software packages over Tor" +msgstr "Завантажувати пакунки програмного забезпечення через Tor" + +#: plinth/modules/torproxy/forms.py:16 +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/transmission/__init__.py:25 msgid "Transmission is a BitTorrent client with a web interface." msgstr "Transmission – це клієнт BitTorrent із вебінтерфейсом." @@ -7483,7 +7518,7 @@ msgstr "Оновлення частих можливостей активова msgid "Starting distribution upgrade test." msgstr "Запуск тесту оновлення дистрибутиву." -#: plinth/modules/users/__init__.py:29 +#: plinth/modules/users/__init__.py:30 msgid "" "Create and manage user accounts. These accounts serve as centralized " "authentication mechanism for most apps. Some apps further require a user " @@ -7494,7 +7529,7 @@ msgstr "" "застосунки також вимагають, щоб обліковий запис був частиною групи, щоб " "отримати авторизований доступ до застосунку." -#: plinth/modules/users/__init__.py:34 +#: plinth/modules/users/__init__.py:35 #, python-brace-format msgid "" "Any user may login to {box_name} web interface to see a list of apps " @@ -7506,19 +7541,29 @@ msgstr "" "користувачі з групи admin можуть змінювати застосунки або системні " "налаштування." -#: plinth/modules/users/__init__.py:55 +#: plinth/modules/users/__init__.py:56 msgid "Users and Groups" msgstr "Користувачі і групи" -#: plinth/modules/users/__init__.py:80 +#: plinth/modules/users/__init__.py:81 msgid "Access to all services and system settings" msgstr "Доступ до всіх сервісів і налаштувань системи" -#: plinth/modules/users/__init__.py:116 +#: plinth/modules/users/__init__.py:124 #, python-brace-format msgid "Check LDAP entry \"{search_item}\"" msgstr "Перевірка запису LDAP \"{search_item}\"" +#: plinth/modules/users/__init__.py:137 +#, python-brace-format +msgid "Check nslcd config \"{key} {value}\"" +msgstr "" + +#: plinth/modules/users/__init__.py:166 +#, python-brace-format +msgid "Check nsswitch config \"{database}\"" +msgstr "" + #: plinth/modules/users/forms.py:35 msgid "Username is taken or is reserved." msgstr "Імʼя користувача зайняте або зарезервоване." @@ -8706,7 +8751,11 @@ msgstr "Оновити" msgid "Backup" msgstr "Резервна копія" -#: plinth/templates/toolbar.html:51 plinth/templates/toolbar.html:52 +#: plinth/templates/toolbar.html:53 +msgid "Re-run setup" +msgstr "" + +#: plinth/templates/toolbar.html:59 plinth/templates/toolbar.html:60 #: plinth/templates/uninstall.html:30 msgid "Uninstall" msgstr "Видалити" @@ -8724,11 +8773,11 @@ msgstr "" "Усі дані програми та налаштування буде втрачено назавжди. Застосунок можна " "встановити начисто ще раз." -#: plinth/views.py:239 +#: plinth/views.py:241 msgid "Setting unchanged" msgstr "Налаштування не змінено" -#: plinth/views.py:456 +#: plinth/views.py:478 #, python-brace-format msgid "before uninstall of {app_id}" msgstr "перед видаленням {app_id}" @@ -8737,6 +8786,13 @@ msgstr "перед видаленням {app_id}" msgid "Gujarati" msgstr "Gujarati" +#, python-brace-format +#~ msgid "" +#~ "A Tor SOCKS port is available on your {box_name} for internal networks on " +#~ "TCP port 9050." +#~ msgstr "" +#~ "Порт SOCKS для Tor на Вашому {box_name} для внутрішніх мереж – TCP 9050." + #, python-brace-format #~ msgid "" #~ "When enabled, text box for server input is removed from login page and " diff --git a/plinth/locale/vi/LC_MESSAGES/django.po b/plinth/locale/vi/LC_MESSAGES/django.po index fc4b7e513..890051506 100644 --- a/plinth/locale/vi/LC_MESSAGES/django.po +++ b/plinth/locale/vi/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-06-19 20:15-0400\n" +"POT-Creation-Date: 2023-07-31 20:04-0400\n" "PO-Revision-Date: 2021-07-28 08:34+0000\n" "Last-Translator: bruh \n" "Language-Team: Vietnamese Tor Project website. For " @@ -6271,55 +6285,48 @@ msgid "" "en\">Tor Browser." msgstr "" -#: plinth/modules/tor/__init__.py:30 -#, python-brace-format +#: plinth/modules/tor/__init__.py:37 msgid "" -"A Tor SOCKS port is available on your {box_name} for internal networks on " -"TCP port 9050." +"This app provides relay services to contribute to Tor network and help " +"others overcome censorship." msgstr "" -#: plinth/modules/tor/__init__.py:48 +#: plinth/modules/tor/__init__.py:40 +#, python-brace-format +msgid "" +"This app provides an onion domain to expose {box_name} services via the Tor " +"network. Using Tor browser, one can access {box_name} from the internet even " +"when using an ISP that limits servers at home." +msgstr "" + +#: plinth/modules/tor/__init__.py:60 msgid "Tor" msgstr "" -#: plinth/modules/tor/__init__.py:65 +#: plinth/modules/tor/__init__.py:76 msgid "Tor Onion Service" msgstr "" -#: plinth/modules/tor/__init__.py:69 -msgid "Tor Socks Proxy" -msgstr "" - -#: plinth/modules/tor/__init__.py:73 +#: plinth/modules/tor/__init__.py:80 msgid "Tor Bridge Relay" msgstr "" -#: plinth/modules/tor/__init__.py:132 +#: plinth/modules/tor/__init__.py:135 msgid "Tor relay port available" msgstr "" -#: plinth/modules/tor/__init__.py:143 +#: plinth/modules/tor/__init__.py:146 msgid "Obfs3 transport registered" msgstr "" -#: plinth/modules/tor/__init__.py:153 +#: plinth/modules/tor/__init__.py:156 msgid "Obfs4 transport registered" msgstr "" -#: plinth/modules/tor/__init__.py:165 +#: plinth/modules/tor/__init__.py:168 msgid "Onion service is version 3" msgstr "" -#: plinth/modules/tor/__init__.py:242 -#, python-brace-format -msgid "Access URL {url} on tcp{kind} via Tor" -msgstr "" - -#: plinth/modules/tor/__init__.py:253 -#, python-brace-format -msgid "Confirm Tor usage at {url} on tcp{kind}" -msgstr "" - #: plinth/modules/tor/forms.py:33 msgid "" "Enter a valid bridge with this format: [transport] IP:ORPort [fingerprint]" @@ -6347,11 +6354,11 @@ msgid "" "here. Currently supported transports are none, obfs3, obfs4 and scamblesuit." msgstr "" -#: plinth/modules/tor/forms.py:91 +#: plinth/modules/tor/forms.py:95 msgid "Enable Tor relay" msgstr "" -#: plinth/modules/tor/forms.py:92 +#: plinth/modules/tor/forms.py:96 #, python-brace-format msgid "" "When enabled, your {box_name} will run a Tor relay and donate bandwidth to " @@ -6359,22 +6366,22 @@ msgid "" "download bandwidth." msgstr "" -#: plinth/modules/tor/forms.py:97 +#: plinth/modules/tor/forms.py:101 msgid "Enable Tor bridge relay" msgstr "" -#: plinth/modules/tor/forms.py:99 +#: plinth/modules/tor/forms.py:103 msgid "" "When enabled, relay information is published in the Tor bridge database " "instead of public Tor relay database making it harder to censor this node. " "This helps others circumvent censorship." msgstr "" -#: plinth/modules/tor/forms.py:104 +#: plinth/modules/tor/forms.py:108 msgid "Enable Tor Onion Service" msgstr "" -#: plinth/modules/tor/forms.py:106 +#: plinth/modules/tor/forms.py:110 #, python-brace-format msgid "" "An onion service will allow {box_name} to provide selected services (such as " @@ -6382,26 +6389,15 @@ msgid "" "anonymity yet." msgstr "" -#: plinth/modules/tor/forms.py:111 -msgid "Download software packages over Tor" -msgstr "" - -#: plinth/modules/tor/forms.py:112 -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/forms.py:127 +#: plinth/modules/tor/forms.py:125 msgid "Specify at least one upstream bridge to use upstream bridges." msgstr "" -#: plinth/modules/tor/manifest.py:15 +#: plinth/modules/tor/manifest.py:15 plinth/modules/torproxy/manifest.py:14 msgid "Tor Browser" msgstr "" -#: plinth/modules/tor/manifest.py:31 +#: plinth/modules/tor/manifest.py:31 plinth/modules/torproxy/manifest.py:30 msgid "Orbot: Proxy with Tor" msgstr "" @@ -6413,18 +6409,56 @@ msgstr "" msgid "Ports" msgstr "" -#: plinth/modules/tor/views.py:53 +#: plinth/modules/tor/views.py:53 plinth/modules/torproxy/views.py:51 #, fuzzy #| msgid "An error occurred during configuration." msgid "Updating configuration" msgstr "Đã xảy ra lỗi trong khi thiết lập." -#: plinth/modules/tor/views.py:70 +#: plinth/modules/tor/views.py:70 plinth/modules/torproxy/views.py:68 #, fuzzy, python-brace-format #| msgid "Error installing application: {error}" msgid "Error configuring app: {error}" msgstr "Lỗi khi cài đặt ứng dụng: {error}" +#: plinth/modules/torproxy/__init__.py:34 +#, python-brace-format +msgid "" +"This app provides a web proxy on your {box_name} for internal networks on " +"TCP port 9050 using the SOCKS protocol. This can be used by various apps to " +"access the internet via the Tor network. ISP censorship can be circumvented " +"using upstream bridges." +msgstr "" + +#: plinth/modules/torproxy/__init__.py:54 +msgid "Tor Proxy" +msgstr "" + +#: plinth/modules/torproxy/__init__.py:79 +msgid "Tor Socks Proxy" +msgstr "" + +#: plinth/modules/torproxy/__init__.py:138 +#, python-brace-format +msgid "Access URL {url} on tcp{kind} via Tor" +msgstr "" + +#: plinth/modules/torproxy/__init__.py:149 +#, python-brace-format +msgid "Confirm Tor usage at {url} on tcp{kind}" +msgstr "" + +#: plinth/modules/torproxy/forms.py:15 +msgid "Download software packages over Tor" +msgstr "" + +#: plinth/modules/torproxy/forms.py:16 +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/transmission/__init__.py:25 msgid "Transmission is a BitTorrent client with a web interface." msgstr "" @@ -6760,14 +6794,14 @@ msgstr "" msgid "Starting distribution upgrade test." msgstr "" -#: plinth/modules/users/__init__.py:29 +#: plinth/modules/users/__init__.py:30 msgid "" "Create and manage user accounts. These accounts serve as centralized " "authentication mechanism for most apps. Some apps further require a user " "account to be part of a group to authorize the user to access the app." msgstr "" -#: plinth/modules/users/__init__.py:34 +#: plinth/modules/users/__init__.py:35 #, python-brace-format msgid "" "Any user may login to {box_name} web interface to see a list of apps " @@ -6775,19 +6809,29 @@ msgid "" "group may alter apps or system settings." msgstr "" -#: plinth/modules/users/__init__.py:55 +#: plinth/modules/users/__init__.py:56 msgid "Users and Groups" msgstr "" -#: plinth/modules/users/__init__.py:80 +#: plinth/modules/users/__init__.py:81 msgid "Access to all services and system settings" msgstr "" -#: plinth/modules/users/__init__.py:116 +#: plinth/modules/users/__init__.py:124 #, python-brace-format msgid "Check LDAP entry \"{search_item}\"" msgstr "" +#: plinth/modules/users/__init__.py:137 +#, python-brace-format +msgid "Check nslcd config \"{key} {value}\"" +msgstr "" + +#: plinth/modules/users/__init__.py:166 +#, python-brace-format +msgid "Check nsswitch config \"{database}\"" +msgstr "" + #: plinth/modules/users/forms.py:35 msgid "Username is taken or is reserved." msgstr "" @@ -7872,7 +7916,11 @@ msgstr "Cập nhật" msgid "Backup" msgstr "Sao lưu" -#: plinth/templates/toolbar.html:51 plinth/templates/toolbar.html:52 +#: plinth/templates/toolbar.html:53 +msgid "Re-run setup" +msgstr "" + +#: plinth/templates/toolbar.html:59 plinth/templates/toolbar.html:60 #: plinth/templates/uninstall.html:30 #, fuzzy #| msgid "Application installed." @@ -7891,11 +7939,11 @@ msgid "" "installed freshly again." msgstr "" -#: plinth/views.py:239 +#: plinth/views.py:241 msgid "Setting unchanged" msgstr "" -#: plinth/views.py:456 +#: plinth/views.py:478 #, python-brace-format msgid "before uninstall of {app_id}" msgstr "" diff --git a/plinth/locale/zh_Hans/LC_MESSAGES/django.po b/plinth/locale/zh_Hans/LC_MESSAGES/django.po index 37a800dfb..aa1573d21 100644 --- a/plinth/locale/zh_Hans/LC_MESSAGES/django.po +++ b/plinth/locale/zh_Hans/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Plinth\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-06-19 20:15-0400\n" +"POT-Creation-Date: 2023-07-31 20:04-0400\n" "PO-Revision-Date: 2022-12-07 20:48+0000\n" "Last-Translator: Eric \n" "Language-Team: Chinese (Simplified) Tor Project website. For " @@ -6274,57 +6290,50 @@ msgstr "" "href=\"https://www.torproject.org/download/download-easy.html.en\">Tor浏览器" "。" -#: plinth/modules/tor/__init__.py:30 +#: plinth/modules/tor/__init__.py:37 +msgid "" +"This app provides relay services to contribute to Tor network and help " +"others overcome censorship." +msgstr "" + +#: plinth/modules/tor/__init__.py:40 #, python-brace-format msgid "" -"A Tor SOCKS port is available on your {box_name} for internal networks on " -"TCP port 9050." -msgstr "你的 {box_name} 有一个 Tor SOCKS 端口在 TCP 端口 9050 上对内网可用。" +"This app provides an onion domain to expose {box_name} services via the Tor " +"network. Using Tor browser, one can access {box_name} from the internet even " +"when using an ISP that limits servers at home." +msgstr "" -#: plinth/modules/tor/__init__.py:48 +#: plinth/modules/tor/__init__.py:60 msgid "Tor" msgstr "" -#: plinth/modules/tor/__init__.py:65 +#: plinth/modules/tor/__init__.py:76 msgid "Tor Onion Service" msgstr "Tor 洋葱服务" -#: plinth/modules/tor/__init__.py:69 -msgid "Tor Socks Proxy" -msgstr "" - -#: plinth/modules/tor/__init__.py:73 +#: plinth/modules/tor/__init__.py:80 msgid "Tor Bridge Relay" msgstr "Tor 网桥中继" -#: plinth/modules/tor/__init__.py:132 +#: plinth/modules/tor/__init__.py:135 msgid "Tor relay port available" msgstr "Tor 中继端口可用" -#: plinth/modules/tor/__init__.py:143 +#: plinth/modules/tor/__init__.py:146 msgid "Obfs3 transport registered" msgstr "已注册 Obfs3 传输" -#: plinth/modules/tor/__init__.py:153 +#: plinth/modules/tor/__init__.py:156 msgid "Obfs4 transport registered" msgstr "已注册 Obfs4 传输" -#: plinth/modules/tor/__init__.py:165 +#: plinth/modules/tor/__init__.py:168 #, fuzzy #| msgid "Onion Service" msgid "Onion service is version 3" msgstr "洋葱服务" -#: plinth/modules/tor/__init__.py:242 -#, python-brace-format -msgid "Access URL {url} on tcp{kind} via Tor" -msgstr "在 tcp{kind} 上通过 Tor 访问 {url}" - -#: plinth/modules/tor/__init__.py:253 -#, python-brace-format -msgid "Confirm Tor usage at {url} on tcp{kind}" -msgstr "确认使用 Tor 通过 tcp{kind} 访问 {url}" - #: plinth/modules/tor/forms.py:33 msgid "" "Enter a valid bridge with this format: [transport] IP:ORPort [fingerprint]" @@ -6352,11 +6361,11 @@ msgid "" "here. Currently supported transports are none, obfs3, obfs4 and scamblesuit." msgstr "" -#: plinth/modules/tor/forms.py:91 +#: plinth/modules/tor/forms.py:95 msgid "Enable Tor relay" msgstr "启用 Tor 中继" -#: plinth/modules/tor/forms.py:92 +#: plinth/modules/tor/forms.py:96 #, python-brace-format msgid "" "When enabled, your {box_name} will run a Tor relay and donate bandwidth to " @@ -6366,11 +6375,11 @@ msgstr "" "启用后,您的 {box_name} 将运行 Tor 中继,并向 Tor 网络分配带宽。如果您的上传" "和下载带宽超过 2 MB/s,请执行此操作。" -#: plinth/modules/tor/forms.py:97 +#: plinth/modules/tor/forms.py:101 msgid "Enable Tor bridge relay" msgstr "启用 Tor 网桥中继" -#: plinth/modules/tor/forms.py:99 +#: plinth/modules/tor/forms.py:103 msgid "" "When enabled, relay information is published in the Tor bridge database " "instead of public Tor relay database making it harder to censor this node. " @@ -6379,13 +6388,13 @@ msgstr "" "当启用时,中继信息在 Tor 桥数据库中发布,而不是公共 Tor 中继数据库,使得更难" "以检查此节点。这有助于其他人绕过审查。" -#: plinth/modules/tor/forms.py:104 +#: plinth/modules/tor/forms.py:108 #, fuzzy #| msgid "Enable Tor Hidden Service" msgid "Enable Tor Onion Service" msgstr "启用 Tor 隐藏服务" -#: plinth/modules/tor/forms.py:106 +#: plinth/modules/tor/forms.py:110 #, fuzzy, python-brace-format #| msgid "" #| "A hidden service will allow {box_name} to provide selected services (such " @@ -6399,28 +6408,15 @@ msgstr "" "隐藏的服务将允许 {box_name} 提供所选服务(如维基或聊天),而不暴露其位置。如" "果对匿名性要求很高,暂时不要使用它。" -#: plinth/modules/tor/forms.py:111 -msgid "Download software packages over Tor" -msgstr "通过 Tor 下载软件包" - -#: plinth/modules/tor/forms.py:112 -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/forms.py:127 +#: plinth/modules/tor/forms.py:125 msgid "Specify at least one upstream bridge to use upstream bridges." msgstr "" -#: plinth/modules/tor/manifest.py:15 +#: plinth/modules/tor/manifest.py:15 plinth/modules/torproxy/manifest.py:14 msgid "Tor Browser" msgstr "洋葱浏览器" -#: plinth/modules/tor/manifest.py:31 +#: plinth/modules/tor/manifest.py:31 plinth/modules/torproxy/manifest.py:30 msgid "Orbot: Proxy with Tor" msgstr "" @@ -6432,15 +6428,57 @@ msgstr "洋葱服务" msgid "Ports" msgstr "端口" -#: plinth/modules/tor/views.py:53 +#: plinth/modules/tor/views.py:53 plinth/modules/torproxy/views.py:51 msgid "Updating configuration" msgstr "更新配置" -#: plinth/modules/tor/views.py:70 +#: plinth/modules/tor/views.py:70 plinth/modules/torproxy/views.py:68 #, python-brace-format msgid "Error configuring app: {error}" msgstr "配置应用出错:{error}" +#: plinth/modules/torproxy/__init__.py:34 +#, python-brace-format +msgid "" +"This app provides a web proxy on your {box_name} for internal networks on " +"TCP port 9050 using the SOCKS protocol. This can be used by various apps to " +"access the internet via the Tor network. ISP censorship can be circumvented " +"using upstream bridges." +msgstr "" + +#: plinth/modules/torproxy/__init__.py:54 +#, fuzzy +#| msgid "I2P Proxy" +msgid "Tor Proxy" +msgstr "I2P 代理" + +#: plinth/modules/torproxy/__init__.py:79 +msgid "Tor Socks Proxy" +msgstr "" + +#: plinth/modules/torproxy/__init__.py:138 +#, python-brace-format +msgid "Access URL {url} on tcp{kind} via Tor" +msgstr "在 tcp{kind} 上通过 Tor 访问 {url}" + +#: plinth/modules/torproxy/__init__.py:149 +#, python-brace-format +msgid "Confirm Tor usage at {url} on tcp{kind}" +msgstr "确认使用 Tor 通过 tcp{kind} 访问 {url}" + +#: plinth/modules/torproxy/forms.py:15 +msgid "Download software packages over Tor" +msgstr "通过 Tor 下载软件包" + +#: plinth/modules/torproxy/forms.py:16 +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/transmission/__init__.py:25 msgid "Transmission is a BitTorrent client with a web interface." msgstr "Transmission 是一个有网页界面的 BitTorrent 客户端。" @@ -6779,14 +6817,14 @@ msgstr "" msgid "Starting distribution upgrade test." msgstr "启动分发升级测试。" -#: plinth/modules/users/__init__.py:29 +#: plinth/modules/users/__init__.py:30 msgid "" "Create and manage user accounts. These accounts serve as centralized " "authentication mechanism for most apps. Some apps further require a user " "account to be part of a group to authorize the user to access the app." msgstr "" -#: plinth/modules/users/__init__.py:34 +#: plinth/modules/users/__init__.py:35 #, python-brace-format msgid "" "Any user may login to {box_name} web interface to see a list of apps " @@ -6794,19 +6832,29 @@ msgid "" "group may alter apps or system settings." msgstr "" -#: plinth/modules/users/__init__.py:55 +#: plinth/modules/users/__init__.py:56 msgid "Users and Groups" msgstr "用户和组" -#: plinth/modules/users/__init__.py:80 +#: plinth/modules/users/__init__.py:81 msgid "Access to all services and system settings" msgstr "" -#: plinth/modules/users/__init__.py:116 +#: plinth/modules/users/__init__.py:124 #, python-brace-format msgid "Check LDAP entry \"{search_item}\"" msgstr "请检查 LDAP 条目“{search_item}”" +#: plinth/modules/users/__init__.py:137 +#, python-brace-format +msgid "Check nslcd config \"{key} {value}\"" +msgstr "" + +#: plinth/modules/users/__init__.py:166 +#, python-brace-format +msgid "Check nsswitch config \"{database}\"" +msgstr "" + #: plinth/modules/users/forms.py:35 msgid "Username is taken or is reserved." msgstr "用户名已经占用或保留。" @@ -7897,7 +7945,13 @@ msgstr "更新" msgid "Backup" msgstr "备份" -#: plinth/templates/toolbar.html:51 plinth/templates/toolbar.html:52 +#: plinth/templates/toolbar.html:53 +#, fuzzy +#| msgid "Start setup" +msgid "Re-run setup" +msgstr "启动安装程序" + +#: plinth/templates/toolbar.html:59 plinth/templates/toolbar.html:60 #: plinth/templates/uninstall.html:30 msgid "Uninstall" msgstr "卸载" @@ -7913,11 +7967,11 @@ msgid "" "installed freshly again." msgstr "" -#: plinth/views.py:239 +#: plinth/views.py:241 msgid "Setting unchanged" msgstr "设置未改变" -#: plinth/views.py:456 +#: plinth/views.py:478 #, python-brace-format msgid "before uninstall of {app_id}" msgstr "" @@ -7926,6 +7980,13 @@ msgstr "" msgid "Gujarati" msgstr "古吉拉特语" +#, python-brace-format +#~ msgid "" +#~ "A Tor SOCKS port is available on your {box_name} for internal networks on " +#~ "TCP port 9050." +#~ msgstr "" +#~ "你的 {box_name} 有一个 Tor SOCKS 端口在 TCP 端口 9050 上对内网可用。" + #~ msgid "ChatSecure" #~ msgstr "ChatSecure" @@ -8474,9 +8535,6 @@ msgstr "古吉拉特语" #~ "OpenVPN 尚未安装。 执行安全的安装需要很长的时间。 根据您的 %(box_name)s 运" #~ "行速度,它甚至可能需要小时。 如果安装程序中断,您可以重新启动。" -#~ msgid "Start setup" -#~ msgstr "启动安装程序" - #~ msgid "OpenVPN setup is running" #~ msgstr "OpenVPN 安装程序正在运行" @@ -8926,11 +8984,6 @@ msgstr "古吉拉特语" #~ msgid "Error setting default app: {exception}" #~ msgstr "设置语言错误:{exception}" -#, fuzzy -#~| msgid "Default" -#~ msgid "Default app set" -#~ msgstr "默认" - #, fuzzy #~| msgid "NTP client in contact with servers" #~ msgid "chrony client in contact with servers" diff --git a/plinth/locale/zh_Hant/LC_MESSAGES/django.po b/plinth/locale/zh_Hant/LC_MESSAGES/django.po index a1ea0a13f..c47461f6f 100644 --- a/plinth/locale/zh_Hant/LC_MESSAGES/django.po +++ b/plinth/locale/zh_Hant/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-06-19 20:15-0400\n" +"POT-Creation-Date: 2023-07-31 20:04-0400\n" "PO-Revision-Date: 2021-12-23 12:50+0000\n" "Last-Translator: pesder \n" "Language-Team: Chinese (Traditional) Tor Project website. For " @@ -6143,55 +6157,48 @@ msgid "" "en\">Tor Browser." msgstr "" -#: plinth/modules/tor/__init__.py:30 -#, python-brace-format +#: plinth/modules/tor/__init__.py:37 msgid "" -"A Tor SOCKS port is available on your {box_name} for internal networks on " -"TCP port 9050." +"This app provides relay services to contribute to Tor network and help " +"others overcome censorship." msgstr "" -#: plinth/modules/tor/__init__.py:48 +#: plinth/modules/tor/__init__.py:40 +#, python-brace-format +msgid "" +"This app provides an onion domain to expose {box_name} services via the Tor " +"network. Using Tor browser, one can access {box_name} from the internet even " +"when using an ISP that limits servers at home." +msgstr "" + +#: plinth/modules/tor/__init__.py:60 msgid "Tor" msgstr "" -#: plinth/modules/tor/__init__.py:65 +#: plinth/modules/tor/__init__.py:76 msgid "Tor Onion Service" msgstr "" -#: plinth/modules/tor/__init__.py:69 -msgid "Tor Socks Proxy" -msgstr "" - -#: plinth/modules/tor/__init__.py:73 +#: plinth/modules/tor/__init__.py:80 msgid "Tor Bridge Relay" msgstr "" -#: plinth/modules/tor/__init__.py:132 +#: plinth/modules/tor/__init__.py:135 msgid "Tor relay port available" msgstr "" -#: plinth/modules/tor/__init__.py:143 +#: plinth/modules/tor/__init__.py:146 msgid "Obfs3 transport registered" msgstr "" -#: plinth/modules/tor/__init__.py:153 +#: plinth/modules/tor/__init__.py:156 msgid "Obfs4 transport registered" msgstr "" -#: plinth/modules/tor/__init__.py:165 +#: plinth/modules/tor/__init__.py:168 msgid "Onion service is version 3" msgstr "" -#: plinth/modules/tor/__init__.py:242 -#, python-brace-format -msgid "Access URL {url} on tcp{kind} via Tor" -msgstr "" - -#: plinth/modules/tor/__init__.py:253 -#, python-brace-format -msgid "Confirm Tor usage at {url} on tcp{kind}" -msgstr "" - #: plinth/modules/tor/forms.py:33 msgid "" "Enter a valid bridge with this format: [transport] IP:ORPort [fingerprint]" @@ -6219,11 +6226,11 @@ msgid "" "here. Currently supported transports are none, obfs3, obfs4 and scamblesuit." msgstr "" -#: plinth/modules/tor/forms.py:91 +#: plinth/modules/tor/forms.py:95 msgid "Enable Tor relay" msgstr "" -#: plinth/modules/tor/forms.py:92 +#: plinth/modules/tor/forms.py:96 #, python-brace-format msgid "" "When enabled, your {box_name} will run a Tor relay and donate bandwidth to " @@ -6231,22 +6238,22 @@ msgid "" "download bandwidth." msgstr "" -#: plinth/modules/tor/forms.py:97 +#: plinth/modules/tor/forms.py:101 msgid "Enable Tor bridge relay" msgstr "" -#: plinth/modules/tor/forms.py:99 +#: plinth/modules/tor/forms.py:103 msgid "" "When enabled, relay information is published in the Tor bridge database " "instead of public Tor relay database making it harder to censor this node. " "This helps others circumvent censorship." msgstr "" -#: plinth/modules/tor/forms.py:104 +#: plinth/modules/tor/forms.py:108 msgid "Enable Tor Onion Service" msgstr "" -#: plinth/modules/tor/forms.py:106 +#: plinth/modules/tor/forms.py:110 #, python-brace-format msgid "" "An onion service will allow {box_name} to provide selected services (such as " @@ -6254,26 +6261,15 @@ msgid "" "anonymity yet." msgstr "" -#: plinth/modules/tor/forms.py:111 -msgid "Download software packages over Tor" -msgstr "" - -#: plinth/modules/tor/forms.py:112 -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/forms.py:127 +#: plinth/modules/tor/forms.py:125 msgid "Specify at least one upstream bridge to use upstream bridges." msgstr "" -#: plinth/modules/tor/manifest.py:15 +#: plinth/modules/tor/manifest.py:15 plinth/modules/torproxy/manifest.py:14 msgid "Tor Browser" msgstr "" -#: plinth/modules/tor/manifest.py:31 +#: plinth/modules/tor/manifest.py:31 plinth/modules/torproxy/manifest.py:30 msgid "Orbot: Proxy with Tor" msgstr "" @@ -6285,18 +6281,56 @@ msgstr "" msgid "Ports" msgstr "" -#: plinth/modules/tor/views.py:53 +#: plinth/modules/tor/views.py:53 plinth/modules/torproxy/views.py:51 #, fuzzy #| msgid "An error occurred during configuration." msgid "Updating configuration" msgstr "設置過程中發生錯誤。" -#: plinth/modules/tor/views.py:70 +#: plinth/modules/tor/views.py:70 plinth/modules/torproxy/views.py:68 #, fuzzy, python-brace-format #| msgid "Error installing application: {error}" msgid "Error configuring app: {error}" msgstr "安裝應用遇到錯誤:{error}" +#: plinth/modules/torproxy/__init__.py:34 +#, python-brace-format +msgid "" +"This app provides a web proxy on your {box_name} for internal networks on " +"TCP port 9050 using the SOCKS protocol. This can be used by various apps to " +"access the internet via the Tor network. ISP censorship can be circumvented " +"using upstream bridges." +msgstr "" + +#: plinth/modules/torproxy/__init__.py:54 +msgid "Tor Proxy" +msgstr "" + +#: plinth/modules/torproxy/__init__.py:79 +msgid "Tor Socks Proxy" +msgstr "" + +#: plinth/modules/torproxy/__init__.py:138 +#, python-brace-format +msgid "Access URL {url} on tcp{kind} via Tor" +msgstr "" + +#: plinth/modules/torproxy/__init__.py:149 +#, python-brace-format +msgid "Confirm Tor usage at {url} on tcp{kind}" +msgstr "" + +#: plinth/modules/torproxy/forms.py:15 +msgid "Download software packages over Tor" +msgstr "" + +#: plinth/modules/torproxy/forms.py:16 +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/transmission/__init__.py:25 msgid "Transmission is a BitTorrent client with a web interface." msgstr "" @@ -6632,14 +6666,14 @@ msgstr "" msgid "Starting distribution upgrade test." msgstr "" -#: plinth/modules/users/__init__.py:29 +#: plinth/modules/users/__init__.py:30 msgid "" "Create and manage user accounts. These accounts serve as centralized " "authentication mechanism for most apps. Some apps further require a user " "account to be part of a group to authorize the user to access the app." msgstr "" -#: plinth/modules/users/__init__.py:34 +#: plinth/modules/users/__init__.py:35 #, python-brace-format msgid "" "Any user may login to {box_name} web interface to see a list of apps " @@ -6647,19 +6681,29 @@ msgid "" "group may alter apps or system settings." msgstr "" -#: plinth/modules/users/__init__.py:55 +#: plinth/modules/users/__init__.py:56 msgid "Users and Groups" msgstr "" -#: plinth/modules/users/__init__.py:80 +#: plinth/modules/users/__init__.py:81 msgid "Access to all services and system settings" msgstr "" -#: plinth/modules/users/__init__.py:116 +#: plinth/modules/users/__init__.py:124 #, python-brace-format msgid "Check LDAP entry \"{search_item}\"" msgstr "" +#: plinth/modules/users/__init__.py:137 +#, python-brace-format +msgid "Check nslcd config \"{key} {value}\"" +msgstr "" + +#: plinth/modules/users/__init__.py:166 +#, python-brace-format +msgid "Check nsswitch config \"{database}\"" +msgstr "" + #: plinth/modules/users/forms.py:35 msgid "Username is taken or is reserved." msgstr "" @@ -7744,7 +7788,11 @@ msgstr "" msgid "Backup" msgstr "Backups 模組" -#: plinth/templates/toolbar.html:51 plinth/templates/toolbar.html:52 +#: plinth/templates/toolbar.html:53 +msgid "Re-run setup" +msgstr "" + +#: plinth/templates/toolbar.html:59 plinth/templates/toolbar.html:60 #: plinth/templates/uninstall.html:30 #, fuzzy #| msgid "Application installed." @@ -7762,11 +7810,11 @@ msgid "" "installed freshly again." msgstr "" -#: plinth/views.py:239 +#: plinth/views.py:241 msgid "Setting unchanged" msgstr "" -#: plinth/views.py:456 +#: plinth/views.py:478 #, python-brace-format msgid "before uninstall of {app_id}" msgstr "" diff --git a/plinth/modules/bepasty/__init__.py b/plinth/modules/bepasty/__init__.py index ac0a47863..784650814 100644 --- a/plinth/modules/bepasty/__init__.py +++ b/plinth/modules/bepasty/__init__.py @@ -100,7 +100,9 @@ class BepastyApp(app_module.App): """Install and configure the app.""" super().setup(old_version) privileged.setup('freedombox.local') - self.enable() + if not old_version: + self.enable() + if old_version == 1 and not privileged.get_configuration().get( 'DEFAULT_PERMISSIONS'): # Upgrade to a better default only if user hasn't changed the diff --git a/plinth/modules/bind/__init__.py b/plinth/modules/bind/__init__.py index fe2f114a5..0f4c6449d 100644 --- a/plinth/modules/bind/__init__.py +++ b/plinth/modules/bind/__init__.py @@ -67,7 +67,8 @@ class BindApp(app_module.App): """Install and configure the app.""" super().setup(old_version) privileged.setup(old_version) - self.enable() + if not old_version: + self.enable() def force_upgrade(self, _packages): """Force upgrade the managed packages to resolve conffile prompt.""" diff --git a/plinth/modules/deluge/__init__.py b/plinth/modules/deluge/__init__.py index d2e1dc5ba..385abe2c5 100644 --- a/plinth/modules/deluge/__init__.py +++ b/plinth/modules/deluge/__init__.py @@ -105,7 +105,8 @@ class DelugeApp(app_module.App): super().setup(old_version) add_user_to_share_group(SYSTEM_USER) privileged.setup() - self.enable() + if not old_version: + self.enable() def uninstall(self): """De-configure and uninstall the app.""" diff --git a/plinth/modules/ejabberd/__init__.py b/plinth/modules/ejabberd/__init__.py index f0484ec1b..0dbb12e54 100644 --- a/plinth/modules/ejabberd/__init__.py +++ b/plinth/modules/ejabberd/__init__.py @@ -146,7 +146,8 @@ class EjabberdApp(app_module.App): self.get_component('letsencrypt-ejabberd').setup_certificates( [domainname]) privileged.setup(domainname) - self.enable() + if not old_version: + self.enable() # Configure STUN/TURN only if there's a valid TLS domain set for Coturn configuration = self.get_component('turn-ejabberd').get_configuration() diff --git a/plinth/modules/firewall/__init__.py b/plinth/modules/firewall/__init__.py index 1b0340501..a4c2161ee 100644 --- a/plinth/modules/firewall/__init__.py +++ b/plinth/modules/firewall/__init__.py @@ -4,6 +4,7 @@ import contextlib import logging +from django.utils.translation import gettext from django.utils.translation import gettext_lazy as _ from plinth import app as app_module @@ -94,6 +95,15 @@ class FirewallApp(app_module.App): _run_setup() return True + def diagnose(self): + """Run diagnostics and return the results.""" + results = super().diagnose() + config = privileged.get_config() + results.append(_diagnose_default_zone(config)) + results.append(_diagnose_firewall_backend(config)) + results.append(_diagnose_direct_passthroughs(config)) + return results + def _run_setup(): """Run firewalld setup.""" @@ -252,3 +262,28 @@ def remove_passthrough(ipv, *args): config_direct = _get_dbus_proxy(_CONFIG_OBJECT, _CONFIG_DIRECT_INTERFACE) if config_direct.queryPassthrough('(sas)', ipv, args): config_direct.removePassthrough('(sas)', ipv, args) + + +def _diagnose_default_zone(config): + """Diagnose whether the default zone is external.""" + testname = gettext('Default zone is external') + result = 'passed' if config['default_zone'] == 'external' else 'failed' + return [testname, result] + + +def _diagnose_firewall_backend(config): + """Diagnose whether the firewall backend is nftables.""" + testname = gettext('Firewall backend is nftables') + result = 'passed' if config['backend'] == 'nftables' else 'failed' + return [testname, result] + + +def _diagnose_direct_passthroughs(config): + """Diagnose direct passthroughs for local service protection. + + Currently, we just check that the number of passthroughs is at least 12, + which are the number that are added by firewall's setup. + """ + testname = gettext('Direct passthrough rules exist') + result = 'passed' if len(config['passthroughs']) >= 12 else 'failed' + return [testname, result] diff --git a/plinth/modules/firewall/privileged.py b/plinth/modules/firewall/privileged.py index 6bf4d9ebd..f673b50dc 100644 --- a/plinth/modules/firewall/privileged.py +++ b/plinth/modules/firewall/privileged.py @@ -129,3 +129,31 @@ def setup(): set_firewall_backend('nftables') _setup_local_service_protection() + + +@privileged +def get_config(): + """Return firewalld configuration for diagnostics.""" + config = {} + + # Get the default zone. + output = subprocess.check_output(['firewall-cmd', '--get-default-zone']) + config['default_zone'] = output.decode().strip() + + # Load Augeas lens. + conf_file = '/etc/firewalld/firewalld.conf' + aug = augeas.Augeas(flags=augeas.Augeas.NO_LOAD + + augeas.Augeas.NO_MODL_AUTOLOAD) + aug.transform('Shellvars', conf_file) + aug.set('/augeas/context', '/files' + conf_file) + aug.load() + + # Get the firewall backend. + config['backend'] = aug.get('FirewallBackend') + + # Get the list of direct passthroughs. + output = subprocess.check_output( + ['firewall-cmd', '--direct', '--get-all-passthroughs']) + config['passthroughs'] = output.decode().strip().split('\n') + + return config diff --git a/plinth/modules/gitweb/__init__.py b/plinth/modules/gitweb/__init__.py index 95f826bed..26c9c968b 100644 --- a/plinth/modules/gitweb/__init__.py +++ b/plinth/modules/gitweb/__init__.py @@ -131,7 +131,8 @@ class GitwebApp(app_module.App): """Install and configure the app.""" super().setup(old_version) privileged.setup() - self.enable() + if not old_version: + self.enable() def uninstall(self): """De-configure and uninstall the app.""" diff --git a/plinth/modules/ikiwiki/__init__.py b/plinth/modules/ikiwiki/__init__.py index cc3f30794..3c81712f9 100644 --- a/plinth/modules/ikiwiki/__init__.py +++ b/plinth/modules/ikiwiki/__init__.py @@ -118,7 +118,8 @@ class IkiwikiApp(app_module.App): """Install and configure the app.""" super().setup(old_version) privileged.setup() - self.enable() + if not old_version: + self.enable() def uninstall(self): """De-configure and uninstall the app.""" diff --git a/plinth/modules/infinoted/__init__.py b/plinth/modules/infinoted/__init__.py index f00338e11..aa0b6f884 100644 --- a/plinth/modules/infinoted/__init__.py +++ b/plinth/modules/infinoted/__init__.py @@ -77,7 +77,8 @@ class InfinotedApp(app_module.App): """Install and configure the app.""" super().setup(old_version) privileged.setup() - self.enable() + if not old_version: + self.enable() def uninstall(self): """De-configure and uninstall the app.""" diff --git a/plinth/modules/infinoted/privileged.py b/plinth/modules/infinoted/privileged.py index a9a125d7c..c37f4680e 100644 --- a/plinth/modules/infinoted/privileged.py +++ b/plinth/modules/infinoted/privileged.py @@ -9,7 +9,6 @@ import shutil import subprocess import time -from plinth import action_utils from plinth.actions import privileged DATA_DIR = '/var/lib/infinoted' @@ -167,8 +166,6 @@ def setup(): shutil.chown(KEY_DIR + '/infinoted-key.pem', user='infinoted', group='infinoted') - action_utils.service_enable('infinoted') - @privileged def uninstall(): diff --git a/plinth/modules/janus/__init__.py b/plinth/modules/janus/__init__.py index 8d26e3d25..74428d3cd 100644 --- a/plinth/modules/janus/__init__.py +++ b/plinth/modules/janus/__init__.py @@ -96,7 +96,8 @@ class JanusApp(app_module.App): """Install and configure the app.""" super().setup(old_version) privileged.setup() - self.enable() + if not old_version: + self.enable() def force_upgrade(self, packages): """Force upgrade janus to resolve conffile prompts.""" diff --git a/plinth/modules/jsxc/__init__.py b/plinth/modules/jsxc/__init__.py index a5c4d10d1..39194eef4 100644 --- a/plinth/modules/jsxc/__init__.py +++ b/plinth/modules/jsxc/__init__.py @@ -80,4 +80,5 @@ class JSXCApp(app_module.App): def setup(self, old_version): """Install and configure the app.""" super().setup(old_version) - self.enable() + if not old_version: + self.enable() diff --git a/plinth/modules/mediawiki/__init__.py b/plinth/modules/mediawiki/__init__.py index 433143381..1bec60eea 100644 --- a/plinth/modules/mediawiki/__init__.py +++ b/plinth/modules/mediawiki/__init__.py @@ -101,7 +101,8 @@ class MediaWikiApp(app_module.App): super().setup(old_version) privileged.setup() privileged.update() - self.enable() + if not old_version: + self.enable() def uninstall(self): """De-configure and uninstall the app.""" diff --git a/plinth/modules/minetest/__init__.py b/plinth/modules/minetest/__init__.py index e7402ac0f..e3f44c204 100644 --- a/plinth/modules/minetest/__init__.py +++ b/plinth/modules/minetest/__init__.py @@ -96,7 +96,8 @@ class MinetestApp(app_module.App): def setup(self, old_version): """Install and configure the app.""" super().setup(old_version) - self.enable() + if not old_version: + self.enable() def force_upgrade(self, packages): """Force upgrade minetest to resolve conffile prompt.""" diff --git a/plinth/modules/openvpn/__init__.py b/plinth/modules/openvpn/__init__.py index 40991a7b2..30604a1b6 100644 --- a/plinth/modules/openvpn/__init__.py +++ b/plinth/modules/openvpn/__init__.py @@ -90,7 +90,8 @@ class OpenVPNApp(app_module.App): """Install and configure the app.""" super().setup(old_version) privileged.setup() - self.enable() + if not old_version: + self.enable() def uninstall(self): """De-configure and uninstall the app.""" diff --git a/plinth/modules/performance/__init__.py b/plinth/modules/performance/__init__.py index 6fa9f5cf0..0d79fee77 100644 --- a/plinth/modules/performance/__init__.py +++ b/plinth/modules/performance/__init__.py @@ -75,4 +75,5 @@ class PerformanceApp(app_module.App): def setup(self, old_version): """Install and configure the app.""" super().setup(old_version) - self.enable() + if not old_version: + self.enable() diff --git a/plinth/modules/privoxy/__init__.py b/plinth/modules/privoxy/__init__.py index 75dc3f6c6..4e0f781ec 100644 --- a/plinth/modules/privoxy/__init__.py +++ b/plinth/modules/privoxy/__init__.py @@ -97,7 +97,8 @@ class PrivoxyApp(app_module.App): privileged.pre_install() super().setup(old_version) privileged.setup() - self.enable() + if not old_version: + self.enable() def diagnose_url_with_proxy(): diff --git a/plinth/modules/quassel/__init__.py b/plinth/modules/quassel/__init__.py index 284e67642..b6bcc06dc 100644 --- a/plinth/modules/quassel/__init__.py +++ b/plinth/modules/quassel/__init__.py @@ -98,7 +98,9 @@ class QuasselApp(app_module.App): def setup(self, old_version): """Install and configure the app.""" super().setup(old_version) - self.enable() + if not old_version: + self.enable() + self.get_component('letsencrypt-quassel').setup_certificates() diff --git a/plinth/modules/radicale/__init__.py b/plinth/modules/radicale/__init__.py index 0dc219af4..c2b72ff79 100644 --- a/plinth/modules/radicale/__init__.py +++ b/plinth/modules/radicale/__init__.py @@ -104,7 +104,8 @@ class RadicaleApp(app_module.App): def setup(self, old_version): """Install and configure the app.""" super().setup(old_version) - self.enable() + if not old_version: + self.enable() def force_upgrade(self, packages): """Force upgrade radicale to resolve conffile prompt.""" diff --git a/plinth/modules/rssbridge/__init__.py b/plinth/modules/rssbridge/__init__.py index 083c39448..49520a7a0 100644 --- a/plinth/modules/rssbridge/__init__.py +++ b/plinth/modules/rssbridge/__init__.py @@ -93,7 +93,8 @@ class RSSBridgeApp(app_module.App): """Install and configure the app.""" super().setup(old_version) privileged.setup() - self.enable() + if not old_version: + self.enable() def uninstall(self): """De-configure and uninstall the app.""" diff --git a/plinth/modules/shaarli/__init__.py b/plinth/modules/shaarli/__init__.py index ed7f054f2..a6db3aa60 100644 --- a/plinth/modules/shaarli/__init__.py +++ b/plinth/modules/shaarli/__init__.py @@ -68,4 +68,5 @@ class ShaarliApp(app_module.App): def setup(self, old_version): """Install and configure the app.""" super().setup(old_version) - self.enable() + if not old_version: + self.enable() diff --git a/plinth/modules/sharing/__init__.py b/plinth/modules/sharing/__init__.py index 9cb5d4efc..0d43274cc 100644 --- a/plinth/modules/sharing/__init__.py +++ b/plinth/modules/sharing/__init__.py @@ -60,7 +60,8 @@ class SharingApp(app_module.App): """Install and configure the app.""" super().setup(old_version) privileged.setup() - self.enable() + if not old_version: + self.enable() def uninstall(self): """De-configure and uninstall the app.""" diff --git a/plinth/modules/tor/__init__.py b/plinth/modules/tor/__init__.py index 226db8854..7429269c8 100644 --- a/plinth/modules/tor/__init__.py +++ b/plinth/modules/tor/__init__.py @@ -1,17 +1,23 @@ # SPDX-License-Identifier: AGPL-3.0-or-later """FreedomBox app to configure Tor.""" +import json +import logging + from django.utils.translation import gettext_lazy as _ from plinth import action_utils from plinth import app as app_module -from plinth import cfg, menu +from plinth import cfg, kvstore, menu +from plinth import setup as setup_module from plinth.daemon import (Daemon, app_is_running, diagnose_netcat, diagnose_port_listening) -from plinth.modules.apache.components import Webserver, diagnose_url +from plinth.modules import torproxy +from plinth.modules.apache.components import Webserver from plinth.modules.backups.components import BackupRestore from plinth.modules.firewall.components import Firewall from plinth.modules.names.components import DomainType +from plinth.modules.torproxy.utils import is_apt_transport_tor_enabled from plinth.modules.users.components import UsersAndGroups from plinth.package import Packages from plinth.signals import domain_added, domain_removed @@ -19,6 +25,8 @@ from plinth.utils import format_lazy from . import manifest, privileged, utils +logger = logging.getLogger(__name__) + _description = [ _('Tor is an anonymous communication system. You can learn more ' 'about it from the Tor ' @@ -26,9 +34,13 @@ _description = [ 'Tor Project recommends that you use the ' '' 'Tor Browser.'), + _('This app provides relay services to contribute to Tor network and help ' + 'others overcome censorship.'), format_lazy( - _('A Tor SOCKS port is available on your {box_name} for internal ' - 'networks on TCP port 9050.'), box_name=_(cfg.box_name)) + _('This app provides an onion domain to expose {box_name} services ' + 'via the Tor network. Using Tor browser, one can access {box_name} ' + 'from the internet even when using an ISP that limits servers at ' + 'home.'), box_name=_(cfg.box_name)), ] @@ -37,7 +49,7 @@ class TorApp(app_module.App): app_id = 'tor' - _version = 6 + _version = 7 def __init__(self): """Create components for the app.""" @@ -57,28 +69,20 @@ class TorApp(app_module.App): parent_url_name='apps') self.add(menu_item) - packages = Packages('packages-tor', [ - 'tor', 'tor-geoipdb', 'torsocks', 'obfs4proxy', 'apt-transport-tor' - ]) + packages = Packages('packages-tor', + ['tor', 'tor-geoipdb', 'obfs4proxy']) self.add(packages) domain_type = DomainType('domain-type-tor', _('Tor Onion Service'), 'tor:index', can_have_certificate=False) self.add(domain_type) - firewall = Firewall('firewall-tor-socks', _('Tor Socks Proxy'), - ports=['tor-socks'], is_external=False) - self.add(firewall) - firewall = Firewall('firewall-tor-relay', _('Tor Bridge Relay'), ports=['tor-orport', 'tor-obfs3', 'tor-obfs4'], is_external=True) self.add(firewall) - daemon = Daemon( - 'daemon-tor', 'tor@plinth', strict_check=True, - listen_ports=[(9050, 'tcp4'), (9050, 'tcp6'), (9040, 'tcp4'), - (9040, 'tcp6'), (9053, 'udp4'), (9053, 'udp6')]) + daemon = Daemon('daemon-tor', 'tor@plinth', strict_check=True) self.add(daemon) webserver = Webserver('webserver-onion-location', @@ -113,8 +117,7 @@ class TorApp(app_module.App): update_hidden_service_domain() def disable(self): - """Disable APT use of Tor before disabling.""" - privileged.configure(apt_transport_tor=False) + """Disable the app and remove HS domain.""" super().disable() update_hidden_service_domain() @@ -166,22 +169,14 @@ class TorApp(app_module.App): 'passed' if len(hs_hostname) == 56 else 'failed' ]) - results.append(_diagnose_url_via_tor('http://www.debian.org', '4')) - results.append(_diagnose_url_via_tor('http://www.debian.org', '6')) - - results.append(_diagnose_tor_use('https://check.torproject.org', '4')) - results.append(_diagnose_tor_use('https://check.torproject.org', '6')) - return results def setup(self, old_version): """Install and configure the app.""" super().setup(old_version) privileged.setup(old_version) - if not old_version: - privileged.configure(apt_transport_tor=True) - - update_hidden_service_domain(utils.get_status()) + status = utils.get_status() + update_hidden_service_domain(status) # Enable/disable Onion-Location component based on app status. # Component was introduced in version 6. @@ -189,11 +184,30 @@ class TorApp(app_module.App): daemon_component = self.get_component('daemon-tor') component = self.get_component('webserver-onion-location') if daemon_component.is_enabled(): + logger.info('Enabling Onion-Location component') component.enable() else: + logger.info('Disabling Onion-Location component') component.disable() + # The SOCKS proxy and "Download software packages using Tor" features + # were moved into a new app, Tor Proxy, in version 7. If Tor is + # enabled, then store the relevant configuration, and install Tor + # Proxy. + if old_version and old_version < 7 and self.is_enabled(): + logger.info('Tor Proxy app will be installed') + config = { + 'use_upstream_bridges': status['use_upstream_bridges'], + 'upstream_bridges': status['upstream_bridges'], + 'apt_transport_tor': is_apt_transport_tor_enabled() + } + kvstore.set(torproxy.PREINSTALL_CONFIG_KEY, json.dumps(config)) + # This creates the operation, which will run after the current + # operation (Tor setup) is completed. + setup_module.run_setup_on_app('torproxy') + if not old_version: + logger.info('Enabling Tor app') self.enable() def uninstall(self): @@ -234,23 +248,3 @@ def _diagnose_control_port(): negate=negate)) return results - - -def _diagnose_url_via_tor(url, kind=None): - """Diagnose whether a URL is reachable via Tor.""" - result = diagnose_url(url, kind=kind, wrapper='torsocks') - result[0] = _('Access URL {url} on tcp{kind} via Tor') \ - .format(url=url, kind=kind) - - return result - - -def _diagnose_tor_use(url, kind=None): - """Diagnose whether webpage at URL reports that we are using Tor.""" - expected_output = 'Congratulations. This browser is configured to use Tor.' - result = diagnose_url(url, kind=kind, wrapper='torsocks', - expected_output=expected_output) - result[0] = _('Confirm Tor usage at {url} on tcp{kind}') \ - .format(url=url, kind=kind) - - return result diff --git a/plinth/modules/tor/forms.py b/plinth/modules/tor/forms.py index cbf1551f2..d09684064 100644 --- a/plinth/modules/tor/forms.py +++ b/plinth/modules/tor/forms.py @@ -70,8 +70,8 @@ def bridges_validator(bridges): raise validation_error -class TorForm(forms.Form): # pylint: disable=W0232 - """Tor configuration form.""" +class TorCommonForm(forms.Form): + """Tor common configuration form.""" use_upstream_bridges = forms.BooleanField( label=_('Use upstream bridges to connect to Tor network'), required=False, help_text=_( @@ -87,6 +87,10 @@ class TorForm(forms.Form): # pylint: disable=W0232 'https://bridges.torproject.org/ and copy/paste the bridge ' 'information here. Currently supported transports are none, ' 'obfs3, obfs4 and scamblesuit.'), validators=[bridges_validator]) + + +class TorForm(TorCommonForm): + """Tor configuration form.""" relay_enabled = forms.BooleanField( label=_('Enable Tor relay'), required=False, help_text=format_lazy( _('When enabled, your {box_name} will run a Tor relay and donate ' @@ -107,12 +111,6 @@ class TorForm(forms.Form): # pylint: disable=W0232 'services (such as wiki or chat) without revealing its ' 'location. Do not use this for strong anonymity yet.'), 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.')) def clean(self): """Validate the form for cross-field integrity.""" diff --git a/plinth/modules/tor/manifest.py b/plinth/modules/tor/manifest.py index 0657b6c06..b2e0aa1bd 100644 --- a/plinth/modules/tor/manifest.py +++ b/plinth/modules/tor/manifest.py @@ -44,11 +44,11 @@ clients = [{ backup = { 'config': { - 'directories': ['/etc/tor/'], + 'directories': ['/etc/tor/instances/plinth/'], 'files': [str(privileged.TOR_APACHE_SITE)] }, 'secrets': { - 'directories': ['/var/lib/tor/', '/var/lib/tor-instances/'] + 'directories': ['/var/lib/tor-instances/plinth/'] }, 'services': ['tor@plinth'] } diff --git a/plinth/modules/tor/privileged.py b/plinth/modules/tor/privileged.py index 455068a63..31906ca7a 100644 --- a/plinth/modules/tor/privileged.py +++ b/plinth/modules/tor/privileged.py @@ -2,6 +2,7 @@ """Configure Tor service.""" import codecs +import logging import os import pathlib import re @@ -15,20 +16,29 @@ import augeas from plinth import action_utils from plinth.actions import privileged -from plinth.modules.tor.utils import APT_TOR_PREFIX, get_augeas, iter_apt_uris +INSTANCE_NAME = 'plinth' SERVICE_FILE = '/etc/firewalld/services/tor-{0}.xml' -TOR_CONFIG = '/files/etc/tor/instances/plinth/torrc' -TOR_STATE_FILE = '/var/lib/tor-instances/plinth/state' -TOR_AUTH_COOKIE = '/var/run/tor-instances/plinth/control.authcookie' +SERVICE_NAME = f'tor@{INSTANCE_NAME}' +TOR_CONFIG = f'/etc/tor/instances/{INSTANCE_NAME}/torrc' +TOR_CONFIG_AUG = f'/files/{TOR_CONFIG}' +TOR_STATE_FILE = f'/var/lib/tor-instances/{INSTANCE_NAME}/state' +TOR_AUTH_COOKIE = f'/var/run/tor-instances/{INSTANCE_NAME}/control.authcookie' TOR_APACHE_SITE = '/etc/apache2/conf-available/onion-location-freedombox.conf' +logger = logging.getLogger(__name__) + @privileged def setup(old_version: int): """Setup Tor configuration after installing it.""" - if old_version and old_version <= 4: - _upgrade_orport_value() + if old_version: + if old_version <= 4: + _upgrade_orport_value() + + if old_version <= 6: + _remove_proxy() + return _first_time_setup() @@ -37,50 +47,39 @@ def setup(old_version: int): def _first_time_setup(): """Setup Tor configuration for the first time setting defaults.""" + logger.info('Performing first time setup for Tor') # Disable default tor service. We will use tor@plinth instance # instead. - _disable_apt_transport_tor() - action_utils.service_disable('tor') + action_utils.service_disable('tor@default') - subprocess.run(['tor-instance-create', 'plinth'], check=True) + subprocess.run(['tor-instance-create', INSTANCE_NAME], check=True) # Remove line starting with +SocksPort, since our augeas lens # doesn't handle it correctly. - with open('/etc/tor/instances/plinth/torrc', 'r', - encoding='utf-8') as torrc: + with open(TOR_CONFIG, 'r', encoding='utf-8') as torrc: torrc_lines = torrc.readlines() - with open('/etc/tor/instances/plinth/torrc', 'w', - encoding='utf-8') as torrc: + with open(TOR_CONFIG, 'w', encoding='utf-8') as torrc: for line in torrc_lines: if not line.startswith('+'): torrc.write(line) aug = augeas_load() - aug.set(TOR_CONFIG + '/SocksPort[1]', '[::]:9050') - aug.set(TOR_CONFIG + '/SocksPort[2]', '0.0.0.0:9050') - aug.set(TOR_CONFIG + '/ControlPort', '9051') + aug.set(TOR_CONFIG_AUG + '/ControlPort', '9051') _enable_relay(relay=True, bridge=True, aug=aug) - aug.set(TOR_CONFIG + '/ExitPolicy[1]', 'reject *:*') - aug.set(TOR_CONFIG + '/ExitPolicy[2]', 'reject6 *:*') + aug.set(TOR_CONFIG_AUG + '/ExitPolicy[1]', 'reject *:*') + aug.set(TOR_CONFIG_AUG + '/ExitPolicy[2]', 'reject6 *:*') - aug.set(TOR_CONFIG + '/VirtualAddrNetworkIPv4', '10.192.0.0/10') - aug.set(TOR_CONFIG + '/AutomapHostsOnResolve', '1') - aug.set(TOR_CONFIG + '/TransPort[1]', '127.0.0.1:9040') - aug.set(TOR_CONFIG + '/TransPort[2]', '[::1]:9040') - aug.set(TOR_CONFIG + '/DNSPort[1]', '127.0.0.1:9053') - aug.set(TOR_CONFIG + '/DNSPort[2]', '[::1]:9053') - - aug.set(TOR_CONFIG + '/HiddenServiceDir', - '/var/lib/tor-instances/plinth/hidden_service') - aug.set(TOR_CONFIG + '/HiddenServicePort[1]', '22 127.0.0.1:22') - aug.set(TOR_CONFIG + '/HiddenServicePort[2]', '80 127.0.0.1:80') - aug.set(TOR_CONFIG + '/HiddenServicePort[3]', '443 127.0.0.1:443') + aug.set(TOR_CONFIG_AUG + '/HiddenServiceDir', + f'/var/lib/tor-instances/{INSTANCE_NAME}/hidden_service') + aug.set(TOR_CONFIG_AUG + '/HiddenServicePort[1]', '22 127.0.0.1:22') + aug.set(TOR_CONFIG_AUG + '/HiddenServicePort[2]', '80 127.0.0.1:80') + aug.set(TOR_CONFIG_AUG + '/HiddenServicePort[3]', '443 127.0.0.1:443') aug.save() - action_utils.service_enable('tor@plinth') - action_utils.service_restart('tor@plinth') + action_utils.service_enable(SERVICE_NAME) + action_utils.service_restart(SERVICE_NAME) _update_ports() # wait until hidden service information is available @@ -110,28 +109,45 @@ def _upgrade_orport_value(): 443 is not possible in FreedomBox due it is use for other purposes. """ + logger.info('Upgrading ORPort value for Tor') aug = augeas_load() if _is_relay_enabled(aug): - aug.set(TOR_CONFIG + '/ORPort[1]', '9001') - aug.set(TOR_CONFIG + '/ORPort[2]', '[::]:9001') + aug.set(TOR_CONFIG_AUG + '/ORPort[1]', '9001') + aug.set(TOR_CONFIG_AUG + '/ORPort[2]', '[::]:9001') aug.save() - action_utils.service_try_restart('tor@plinth') + action_utils.service_try_restart(SERVICE_NAME) # Tor may not be running, don't try to read/update all ports _update_port('orport', 9001) action_utils.service_restart('firewalld') +def _remove_proxy(): + """Remove SocksProxy from configuration. + + This functionality was split off to a separate app, Tor Proxy. + """ + logger.info('Removing SocksProxy from Tor configuration') + aug = augeas_load() + for config in [ + 'SocksPort', 'VirtualAddrNetworkIPv4', 'AutomapHostsOnResolve', + 'TransPort', 'DNSPort' + ]: + aug.remove(TOR_CONFIG_AUG + '/' + config) + + aug.save() + action_utils.service_try_restart(SERVICE_NAME) + + @privileged def configure(use_upstream_bridges: Optional[bool] = None, upstream_bridges: Optional[str] = None, relay: Optional[bool] = None, bridge_relay: Optional[bool] = None, - hidden_service: Optional[bool] = None, - apt_transport_tor: Optional[bool] = None): + hidden_service: Optional[bool] = None): """Configure Tor.""" aug = augeas_load() @@ -151,11 +167,6 @@ def configure(use_upstream_bridges: Optional[bool] = None, elif hidden_service is not None: _disable_hs(aug=aug) - if apt_transport_tor: - _enable_apt_transport_tor() - elif apt_transport_tor is not None: - _disable_apt_transport_tor() - @privileged def update_ports(): @@ -166,12 +177,12 @@ def update_ports(): @privileged def restart(): """Restart Tor.""" - if (action_utils.service_is_enabled('tor@plinth', strict_check=True) - and action_utils.service_is_running('tor@plinth')): - action_utils.service_restart('tor@plinth') + if (action_utils.service_is_enabled(SERVICE_NAME, strict_check=True) + and action_utils.service_is_running(SERVICE_NAME)): + action_utils.service_restart(SERVICE_NAME) aug = augeas_load() - if aug.get(TOR_CONFIG + '/HiddenServiceDir'): + if aug.get(TOR_CONFIG_AUG + '/HiddenServiceDir'): # wait until hidden service information is available tries = 0 while not _get_hidden_service()['enabled']: @@ -197,26 +208,26 @@ def get_status() -> dict[str, Union[bool, str, dict[str, Any]]]: def _are_upstream_bridges_enabled(aug) -> bool: """Return whether upstream bridges are being used.""" - use_bridges = aug.get(TOR_CONFIG + '/UseBridges') + use_bridges = aug.get(TOR_CONFIG_AUG + '/UseBridges') return use_bridges == '1' def _get_upstream_bridges(aug) -> str: """Return upstream bridges separated by newlines.""" - matches = aug.match(TOR_CONFIG + '/Bridge') + matches = aug.match(TOR_CONFIG_AUG + '/Bridge') bridges = [aug.get(match) for match in matches] return '\n'.join(bridges) def _is_relay_enabled(aug) -> bool: """Return whether a relay is enabled.""" - orport = aug.get(TOR_CONFIG + '/ORPort[1]') + orport = aug.get(TOR_CONFIG_AUG + '/ORPort[1]') return bool(orport) and orport != '0' def _is_bridge_relay_enabled(aug) -> bool: """Return whether bridge relay is enabled.""" - bridge = aug.get(TOR_CONFIG + '/BridgeRelay') + bridge = aug.get(TOR_CONFIG_AUG + '/BridgeRelay') return bridge == '1' @@ -272,8 +283,8 @@ def _get_hidden_service(aug=None) -> dict[str, Any]: if not aug: aug = augeas_load() - hs_dir = aug.get(TOR_CONFIG + '/HiddenServiceDir') - hs_port_paths = aug.match(TOR_CONFIG + '/HiddenServicePort') + hs_dir = aug.get(TOR_CONFIG_AUG + '/HiddenServiceDir') + hs_port_paths = aug.match(TOR_CONFIG_AUG + '/HiddenServicePort') for hs_port_path in hs_port_paths: port_info = aug.get(hs_port_path).split() @@ -300,14 +311,13 @@ def _get_hidden_service(aug=None) -> dict[str, Any]: def _enable(): """Enable and start the service.""" - action_utils.service_enable('tor@plinth') + action_utils.service_enable(SERVICE_NAME) _update_ports() def _disable(): """Disable and stop the service.""" - _disable_apt_transport_tor() - action_utils.service_disable('tor@plinth') + action_utils.service_disable(SERVICE_NAME) def _use_upstream_bridges(use_upstream_bridges: Optional[bool] = None, @@ -320,9 +330,9 @@ def _use_upstream_bridges(use_upstream_bridges: Optional[bool] = None, aug = augeas_load() if use_upstream_bridges: - aug.set(TOR_CONFIG + '/UseBridges', '1') + aug.set(TOR_CONFIG_AUG + '/UseBridges', '1') else: - aug.set(TOR_CONFIG + '/UseBridges', '0') + aug.set(TOR_CONFIG_AUG + '/UseBridges', '0') aug.save() @@ -335,16 +345,16 @@ def _set_upstream_bridges(upstream_bridges=None, aug=None): if not aug: aug = augeas_load() - aug.remove(TOR_CONFIG + '/Bridge') + aug.remove(TOR_CONFIG_AUG + '/Bridge') if upstream_bridges: bridges = [bridge.strip() for bridge in upstream_bridges.split('\n')] bridges = [bridge for bridge in bridges if bridge] for bridge in bridges: parts = [part for part in bridge.split() if part] bridge = ' '.join(parts) - aug.set(TOR_CONFIG + '/Bridge[last() + 1]', bridge.strip()) + aug.set(TOR_CONFIG_AUG + '/Bridge[last() + 1]', bridge.strip()) - aug.set(TOR_CONFIG + '/ClientTransportPlugin', + aug.set(TOR_CONFIG_AUG + '/ClientTransportPlugin', 'obfs3,scramblesuit,obfs4 exec /usr/bin/obfs4proxy') aug.save() @@ -362,20 +372,20 @@ def _enable_relay(relay: Optional[bool], bridge: Optional[bool], use_upstream_bridges = _are_upstream_bridges_enabled(aug) if relay and not use_upstream_bridges: - aug.set(TOR_CONFIG + '/ORPort[1]', '9001') - aug.set(TOR_CONFIG + '/ORPort[2]', '[::]:9001') + aug.set(TOR_CONFIG_AUG + '/ORPort[1]', '9001') + aug.set(TOR_CONFIG_AUG + '/ORPort[2]', '[::]:9001') elif relay is not None: - aug.remove(TOR_CONFIG + '/ORPort') + aug.remove(TOR_CONFIG_AUG + '/ORPort') if bridge and not use_upstream_bridges: - aug.set(TOR_CONFIG + '/BridgeRelay', '1') - aug.set(TOR_CONFIG + '/ServerTransportPlugin', + aug.set(TOR_CONFIG_AUG + '/BridgeRelay', '1') + aug.set(TOR_CONFIG_AUG + '/ServerTransportPlugin', 'obfs3,obfs4 exec /usr/bin/obfs4proxy') - aug.set(TOR_CONFIG + '/ExtORPort', 'auto') + aug.set(TOR_CONFIG_AUG + '/ExtORPort', 'auto') elif bridge is not None: - aug.remove(TOR_CONFIG + '/BridgeRelay') - aug.remove(TOR_CONFIG + '/ServerTransportPlugin') - aug.remove(TOR_CONFIG + '/ExtORPort') + aug.remove(TOR_CONFIG_AUG + '/BridgeRelay') + aug.remove(TOR_CONFIG_AUG + '/ServerTransportPlugin') + aug.remove(TOR_CONFIG_AUG + '/ExtORPort') aug.save() @@ -388,11 +398,11 @@ def _enable_hs(aug=None): if _get_hidden_service(aug)['enabled']: return - aug.set(TOR_CONFIG + '/HiddenServiceDir', - '/var/lib/tor-instances/plinth/hidden_service') - aug.set(TOR_CONFIG + '/HiddenServicePort[1]', '22 127.0.0.1:22') - aug.set(TOR_CONFIG + '/HiddenServicePort[2]', '80 127.0.0.1:80') - aug.set(TOR_CONFIG + '/HiddenServicePort[3]', '443 127.0.0.1:443') + aug.set(TOR_CONFIG_AUG + '/HiddenServiceDir', + f'/var/lib/tor-instances/{INSTANCE_NAME}/hidden_service') + aug.set(TOR_CONFIG_AUG + '/HiddenServicePort[1]', '22 127.0.0.1:22') + aug.set(TOR_CONFIG_AUG + '/HiddenServicePort[2]', '80 127.0.0.1:80') + aug.set(TOR_CONFIG_AUG + '/HiddenServicePort[3]', '443 127.0.0.1:443') aug.save() _set_onion_header(_get_hidden_service(aug)) @@ -405,39 +415,12 @@ def _disable_hs(aug=None): if not _get_hidden_service(aug)['enabled']: return - aug.remove(TOR_CONFIG + '/HiddenServiceDir') - aug.remove(TOR_CONFIG + '/HiddenServicePort') + aug.remove(TOR_CONFIG_AUG + '/HiddenServiceDir') + aug.remove(TOR_CONFIG_AUG + '/HiddenServicePort') aug.save() _set_onion_header(None) -def _enable_apt_transport_tor(): - """Enable package download over Tor.""" - aug = get_augeas() - for uri_path in iter_apt_uris(aug): - uri = aug.get(uri_path) - if uri.startswith('http://') or uri.startswith('https://'): - aug.set(uri_path, APT_TOR_PREFIX + uri) - - aug.save() - - -def _disable_apt_transport_tor(): - """Disable package download over Tor.""" - try: - aug = get_augeas() - except Exception: - # Disable what we can, so APT is not unusable. - pass - - for uri_path in iter_apt_uris(aug): - uri = aug.get(uri_path) - if uri.startswith(APT_TOR_PREFIX): - aug.set(uri_path, uri[len(APT_TOR_PREFIX):]) - - aug.save() - - def _update_port(name, number): """Update firewall service information for single port.""" lines = """ @@ -485,14 +468,14 @@ def augeas_load(): aug = augeas.Augeas(flags=augeas.Augeas.NO_LOAD + augeas.Augeas.NO_MODL_AUTOLOAD) aug.set('/augeas/load/Tor/lens', 'Tor.lns') - aug.set('/augeas/load/Tor/incl[last() + 1]', - '/etc/tor/instances/plinth/torrc') + aug.set('/augeas/load/Tor/incl[last() + 1]', TOR_CONFIG) aug.load() return aug def _set_onion_header(hidden_service): """Set Apache configuration for the Onion-Location header.""" + logger.info('Setting Onion-Location header for Apache') config_file = pathlib.Path(TOR_APACHE_SITE) if hidden_service and hidden_service['enabled']: # https://community.torproject.org/onion-services/advanced/onion-location/ @@ -512,10 +495,13 @@ def _set_onion_header(hidden_service): @privileged def uninstall(): - """Remove create instances.""" + """Remove plinth instance.""" directories = [ - '/etc/tor/instances/', '/var/lib/tor-instances/', - '/var/run/tor-instances/' + f'/etc/tor/instances/{INSTANCE_NAME}/', + f'/var/lib/tor-instances/{INSTANCE_NAME}/', + f'/var/run/tor-instances/{INSTANCE_NAME}/' ] for directory in directories: shutil.rmtree(directory, ignore_errors=True) + + os.unlink(f'/var/run/tor-instances/{INSTANCE_NAME}.defaults') diff --git a/plinth/modules/tor/tests/test_functional.py b/plinth/modules/tor/tests/test_functional.py index a1ce6bcef..6ab77831c 100644 --- a/plinth/modules/tor/tests/test_functional.py +++ b/plinth/modules/tor/tests/test_functional.py @@ -11,7 +11,6 @@ _TOR_FEATURE_TO_ELEMENT = { 'relay': 'tor-relay_enabled', 'bridge-relay': 'tor-bridge_relay_enabled', 'hidden-services': 'tor-hs_enabled', - 'software': 'tor-apt_transport_tor_enabled' } pytestmark = [pytest.mark.apps, pytest.mark.domain, pytest.mark.tor] @@ -21,9 +20,6 @@ class TestTorApp(functional.BaseAppTests): app_name = 'tor' has_service = True has_web = False - # TODO: Investigate why accessing IPv6 sites through Tor fails in - # container. - check_diagnostics = False def test_set_tor_relay_configuration(self, session_browser): """Test setting Tor relay configuration.""" @@ -52,13 +48,6 @@ class TestTorApp(functional.BaseAppTests): enabled=True) _assert_hidden_services(session_browser) - def test_set_download_software_packages_over_tor(self, session_browser): - """Test setting download software packages over Tor.""" - functional.app_enable(session_browser, 'tor') - _feature_enable(session_browser, 'software', should_enable=True) - _feature_enable(session_browser, 'software', should_enable=False) - _assert_feature_enabled(session_browser, 'software', enabled=False) - # TODO: Test more thoroughly by checking same hidden service is restored # and by actually connecting using Tor. @pytest.mark.backups diff --git a/plinth/modules/tor/tests/test_tor.py b/plinth/modules/tor/tests/test_tor.py index de0939a9a..3c61a57b6 100644 --- a/plinth/modules/tor/tests/test_tor.py +++ b/plinth/modules/tor/tests/test_tor.py @@ -14,14 +14,6 @@ from plinth.modules.tor import forms, utils class TestTor: """Test cases for testing the Tor module.""" - @staticmethod - @pytest.mark.usefixtures('needs_root') - def test_is_apt_transport_tor_enabled(): - """Test that is_apt_transport_tor_enabled does not raise any unhandled - exceptions. - """ - utils.is_apt_transport_tor_enabled() - @staticmethod @patch('plinth.app.App.get') @pytest.mark.usefixtures('needs_root', 'load_cfg') @@ -29,7 +21,7 @@ class TestTor: """Test that get_status does not raise any unhandled exceptions. This should work regardless of whether tor is installed, or - /etc/tor/torrc exists. + /etc/tor/instances/plinth/torrc exists. """ utils.get_status() diff --git a/plinth/modules/tor/utils.py b/plinth/modules/tor/utils.py index ff53b9c9a..0f16251e7 100644 --- a/plinth/modules/tor/utils.py +++ b/plinth/modules/tor/utils.py @@ -1,21 +1,12 @@ # SPDX-License-Identifier: AGPL-3.0-or-later """Tor utility functions.""" -import itertools - -import augeas - from plinth import app as app_module from plinth.daemon import app_is_running from plinth.modules.names.components import DomainName from . import privileged -APT_SOURCES_URI_PATHS = ('/files/etc/apt/sources.list/*/uri', - '/files/etc/apt/sources.list.d/*/*/uri', - '/files/etc/apt/sources.list.d/*/*/URIs/*') -APT_TOR_PREFIX = 'tor+' - def get_status(initialized=True): """Return current Tor status.""" @@ -53,50 +44,4 @@ def get_status(initialized=True): 'hs_hostname': hs_info['hostname'], 'hs_ports': hs_info['ports'], 'hs_services': hs_services, - 'apt_transport_tor_enabled': is_apt_transport_tor_enabled() } - - -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_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.set('/augeas/load/Aptsources822/lens', 'Aptsources822.lns') - aug.set('/augeas/load/Aptsources822/incl[last() + 1]', - '/etc/apt/sources.list.d/*.sources') - aug.load() - - # Check for any errors in parsing sources lists. - 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') - - return aug - - -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. - return False - - for uri_path in iter_apt_uris(aug): - uri = aug.get(uri_path) - if not uri.startswith(APT_TOR_PREFIX) and \ - (uri.startswith('http://') or uri.startswith('https://')): - return False - - return True diff --git a/plinth/modules/tor/views.py b/plinth/modules/tor/views.py index 9d7c3d4ab..1e6004093 100644 --- a/plinth/modules/tor/views.py +++ b/plinth/modules/tor/views.py @@ -79,43 +79,31 @@ def _apply_changes(old_status, new_status): def __apply_changes(old_status, new_status): """Apply the changes.""" - needs_restart = False arguments = {} - app = app_module.App.get('tor') is_enabled = app.is_enabled() if old_status['relay_enabled'] != new_status['relay_enabled']: arguments['relay'] = new_status['relay_enabled'] - needs_restart = True if old_status['bridge_relay_enabled'] != \ new_status['bridge_relay_enabled']: arguments['bridge_relay'] = new_status['bridge_relay_enabled'] - needs_restart = True if old_status['hs_enabled'] != new_status['hs_enabled']: arguments['hidden_service'] = new_status['hs_enabled'] - needs_restart = True - - if old_status['apt_transport_tor_enabled'] != \ - new_status['apt_transport_tor_enabled']: - arguments['apt_transport_tor'] = ( - is_enabled and new_status['apt_transport_tor_enabled']) if old_status['use_upstream_bridges'] != \ new_status['use_upstream_bridges']: arguments['use_upstream_bridges'] = new_status['use_upstream_bridges'] - needs_restart = True if old_status['upstream_bridges'] != new_status['upstream_bridges']: arguments['upstream_bridges'] = new_status['upstream_bridges'] - needs_restart = True if arguments: privileged.configure(**arguments) - if needs_restart and is_enabled: - privileged.restart() - status = tor_utils.get_status() - tor.update_hidden_service_domain(status) + if is_enabled: + privileged.restart() + status = tor_utils.get_status() + tor.update_hidden_service_domain(status) diff --git a/plinth/modules/torproxy/__init__.py b/plinth/modules/torproxy/__init__.py new file mode 100644 index 000000000..80e4a580a --- /dev/null +++ b/plinth/modules/torproxy/__init__.py @@ -0,0 +1,152 @@ +# SPDX-License-Identifier: AGPL-3.0-or-later +"""FreedomBox app to configure Tor Proxy.""" + +import json +import logging + +from django.urls import reverse_lazy +from django.utils.translation import gettext_lazy as _ + +from plinth import app as app_module +from plinth import cfg, frontpage, kvstore, menu +from plinth.daemon import Daemon +from plinth.modules.apache.components import diagnose_url +from plinth.modules.backups.components import BackupRestore +from plinth.modules.firewall.components import Firewall +from plinth.modules.users.components import UsersAndGroups +from plinth.package import Packages +from plinth.utils import format_lazy + +from . import manifest, privileged + +logger = logging.getLogger(__name__) + +PREINSTALL_CONFIG_KEY = 'torproxy_preinstall_config' + +_description = [ + _('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.'), + format_lazy( + _('This app provides a web proxy on your {box_name} for internal ' + 'networks on TCP port 9050 using the SOCKS protocol. This can be ' + 'used by various apps to access the internet via the Tor network. ' + 'ISP censorship can be circumvented using upstream bridges.'), + box_name=_(cfg.box_name)) +] + + +class TorProxyApp(app_module.App): + """FreedomBox app for Tor Proxy.""" + + app_id = 'torproxy' + + _version = 1 + + def __init__(self): + """Create components for the app.""" + super().__init__() + + info = app_module.Info(app_id=self.app_id, version=self._version, + name=_('Tor Proxy'), icon_filename='torproxy', + short_description=_('Anonymity Network'), + description=_description, + manual_page='TorProxy', + clients=manifest.clients, + donation_url='https://donate.torproject.org/') + self.add(info) + + menu_item = menu.Menu('menu-torproxy', info.name, + info.short_description, info.icon_filename, + 'torproxy:index', parent_url_name='apps') + self.add(menu_item) + + shortcut = frontpage.Shortcut( + 'shortcut-torproxy', info.name, + short_description=info.short_description, icon=info.icon_filename, + description=info.description, manual_page=info.manual_page, + configure_url=reverse_lazy('torproxy:index'), login_required=True) + self.add(shortcut) + + packages = Packages('packages-torproxy', [ + 'tor', 'tor-geoipdb', 'torsocks', 'obfs4proxy', 'apt-transport-tor' + ]) + self.add(packages) + + firewall = Firewall('firewall-torproxy-socks', _('Tor Socks Proxy'), + ports=['tor-socks'], is_external=False) + self.add(firewall) + + daemon = Daemon( + 'daemon-torproxy', 'tor@fbxproxy', strict_check=True, + listen_ports=[(9050, 'tcp4'), (9050, 'tcp6'), (9040, 'tcp4'), + (9040, 'tcp6'), (9053, 'udp4'), (9053, 'udp6')]) + self.add(daemon) + + users_and_groups = UsersAndGroups('users-and-groups-torproxy', + reserved_usernames=['debian-tor']) + self.add(users_and_groups) + + backup_restore = BackupRestore('backup-restore-torproxy', + **manifest.backup) + self.add(backup_restore) + + def disable(self): + """Disable APT use of Tor before disabling.""" + privileged.configure(apt_transport_tor=False) + super().disable() + + def diagnose(self): + """Run diagnostics and return the results.""" + results = super().diagnose() + results.append(_diagnose_url_via_tor('http://www.debian.org', '4')) + results.append(_diagnose_url_via_tor('http://www.debian.org', '6')) + results.append(_diagnose_tor_use('https://check.torproject.org', '4')) + results.append(_diagnose_tor_use('https://check.torproject.org', '6')) + return results + + def setup(self, old_version): + """Install and configure the app.""" + super().setup(old_version) + privileged.setup(old_version) + if not old_version: + logger.info('Enabling apt-transport-tor') + config = kvstore.get_default(PREINSTALL_CONFIG_KEY, '{}') + config = json.loads(config) + config = { + 'use_upstream_bridges': config.get('use_upstream_bridges'), + 'upstream_bridges': config.get('upstream_bridges'), + 'apt_transport_tor': config.get('apt_transport_tor', True), + } + privileged.configure(**config) + logger.info('Enabling Tor Proxy app') + self.enable() + kvstore.delete(PREINSTALL_CONFIG_KEY, ignore_missing=True) + + def uninstall(self): + """De-configure and uninstall the app.""" + super().uninstall() + privileged.uninstall() + + +def _diagnose_url_via_tor(url, kind=None): + """Diagnose whether a URL is reachable via Tor.""" + result = diagnose_url(url, kind=kind, wrapper='torsocks') + result[0] = _('Access URL {url} on tcp{kind} via Tor') \ + .format(url=url, kind=kind) + + return result + + +def _diagnose_tor_use(url, kind=None): + """Diagnose whether webpage at URL reports that we are using Tor.""" + expected_output = 'Congratulations. This browser is configured to use Tor.' + result = diagnose_url(url, kind=kind, wrapper='torsocks', + expected_output=expected_output) + result[0] = _('Confirm Tor usage at {url} on tcp{kind}') \ + .format(url=url, kind=kind) + + return result diff --git a/plinth/modules/torproxy/data/usr/share/freedombox/modules-enabled/torproxy b/plinth/modules/torproxy/data/usr/share/freedombox/modules-enabled/torproxy new file mode 100644 index 000000000..08a91a7d9 --- /dev/null +++ b/plinth/modules/torproxy/data/usr/share/freedombox/modules-enabled/torproxy @@ -0,0 +1 @@ +plinth.modules.torproxy diff --git a/plinth/modules/torproxy/forms.py b/plinth/modules/torproxy/forms.py new file mode 100644 index 000000000..1f70e212f --- /dev/null +++ b/plinth/modules/torproxy/forms.py @@ -0,0 +1,19 @@ +# SPDX-License-Identifier: AGPL-3.0-or-later +""" +Forms for configuring Tor Proxy. +""" + +from django import forms +from django.utils.translation import gettext_lazy as _ + +from plinth.modules.tor.forms import TorCommonForm + + +class TorProxyForm(TorCommonForm): + """Tor Proxy configuration form.""" + 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 --git a/plinth/modules/torproxy/manifest.py b/plinth/modules/torproxy/manifest.py new file mode 100644 index 000000000..a5a2fb777 --- /dev/null +++ b/plinth/modules/torproxy/manifest.py @@ -0,0 +1,52 @@ +# SPDX-License-Identifier: AGPL-3.0-or-later +"""App manifest for Tor Proxy.""" + +from django.utils.translation import gettext_lazy as _ + +from plinth.clients import store_url + +_ORBOT_PACKAGE_ID = 'org.torproject.android' +_TOR_BROWSER_DOWNLOAD_URL = \ + 'https://www.torproject.org/download/download-easy.html' + +clients = [{ + 'name': + _('Tor Browser'), + 'platforms': [{ + 'type': 'download', + 'os': 'windows', + 'url': _TOR_BROWSER_DOWNLOAD_URL, + }, { + 'type': 'download', + 'os': 'gnu-linux', + 'url': _TOR_BROWSER_DOWNLOAD_URL, + }, { + 'type': 'download', + 'os': 'macos', + 'url': _TOR_BROWSER_DOWNLOAD_URL, + }] +}, { + 'name': + _('Orbot: Proxy with Tor'), + 'platforms': [{ + 'type': 'store', + 'os': 'android', + 'store_name': 'google-play', + 'url': store_url('google-play', _ORBOT_PACKAGE_ID) + }, { + 'type': 'store', + 'os': 'android', + 'store_name': 'f-droid', + 'url': store_url('f-droid', _ORBOT_PACKAGE_ID) + }] +}] + +backup = { + 'config': { + 'directories': ['/etc/tor/instances/fbxproxy/'], + }, + 'secrets': { + 'directories': ['/var/lib/tor-instances/fbxproxy/'] + }, + 'services': ['tor@fbxproxy'] +} diff --git a/plinth/modules/torproxy/privileged.py b/plinth/modules/torproxy/privileged.py new file mode 100644 index 000000000..57216af9d --- /dev/null +++ b/plinth/modules/torproxy/privileged.py @@ -0,0 +1,217 @@ +# SPDX-License-Identifier: AGPL-3.0-or-later +"""Configure Tor Proxy service.""" + +import logging +import os +import shutil +import subprocess +from typing import Any, Optional, Union + +import augeas + +from plinth import action_utils +from plinth.actions import privileged +from plinth.modules.torproxy.utils import (APT_TOR_PREFIX, get_augeas, + iter_apt_uris) + +logger = logging.getLogger(__name__) + +INSTANCE_NAME = 'fbxproxy' +SERVICE_FILE = '/etc/firewalld/services/tor-{0}.xml' +SERVICE_NAME = f'tor@{INSTANCE_NAME}' +TORPROXY_CONFIG = f'/etc/tor/instances/{INSTANCE_NAME}/torrc' +TORPROXY_CONFIG_AUG = f'/files/{TORPROXY_CONFIG}' + + +@privileged +def setup(old_version: int): + """Setup Tor configuration after installing it.""" + _first_time_setup() + + +def _first_time_setup(): + """Setup Tor configuration for the first time setting defaults.""" + logger.info('Performing first time setup for Tor Proxy') + # Disable default tor service. We will use tor@fbxproxy instance + # instead. + _disable_apt_transport_tor() + action_utils.service_disable('tor@default') + + subprocess.run(['tor-instance-create', INSTANCE_NAME], check=True) + + # Remove line starting with +SocksPort, since our augeas lens + # doesn't handle it correctly. + with open(TORPROXY_CONFIG, 'r', encoding='utf-8') as torrc: + torrc_lines = torrc.readlines() + with open(TORPROXY_CONFIG, 'w', encoding='utf-8') as torrc: + for line in torrc_lines: + if not line.startswith('+'): + torrc.write(line) + + aug = augeas_load() + + aug.set(TORPROXY_CONFIG_AUG + '/SocksPort[1]', '[::]:9050') + aug.set(TORPROXY_CONFIG_AUG + '/SocksPort[2]', '0.0.0.0:9050') + aug.set(TORPROXY_CONFIG_AUG + '/VirtualAddrNetworkIPv4', '10.192.0.0/10') + aug.set(TORPROXY_CONFIG_AUG + '/AutomapHostsOnResolve', '1') + aug.set(TORPROXY_CONFIG_AUG + '/TransPort[1]', '127.0.0.1:9040') + aug.set(TORPROXY_CONFIG_AUG + '/TransPort[2]', '[::1]:9040') + aug.set(TORPROXY_CONFIG_AUG + '/DNSPort[1]', '127.0.0.1:9053') + aug.set(TORPROXY_CONFIG_AUG + '/DNSPort[2]', '[::1]:9053') + + aug.save() + + action_utils.service_enable(SERVICE_NAME) + action_utils.service_restart(SERVICE_NAME) + + +@privileged +def configure(use_upstream_bridges: Optional[bool] = None, + upstream_bridges: Optional[str] = None, + apt_transport_tor: Optional[bool] = None): + """Configure Tor.""" + aug = augeas_load() + + _use_upstream_bridges(use_upstream_bridges, aug=aug) + + if upstream_bridges: + _set_upstream_bridges(upstream_bridges, aug=aug) + + if apt_transport_tor: + _enable_apt_transport_tor() + elif apt_transport_tor is not None: + _disable_apt_transport_tor() + + +@privileged +def restart(): + """Restart Tor.""" + if (action_utils.service_is_enabled(SERVICE_NAME, strict_check=True) + and action_utils.service_is_running(SERVICE_NAME)): + action_utils.service_restart(SERVICE_NAME) + + +@privileged +def get_status() -> dict[str, Union[bool, str, dict[str, Any]]]: + """Return dict with Tor Proxy status.""" + aug = augeas_load() + return { + 'use_upstream_bridges': _are_upstream_bridges_enabled(aug), + 'upstream_bridges': _get_upstream_bridges(aug) + } + + +def _are_upstream_bridges_enabled(aug) -> bool: + """Return whether upstream bridges are being used.""" + use_bridges = aug.get(TORPROXY_CONFIG_AUG + '/UseBridges') + return use_bridges == '1' + + +def _get_upstream_bridges(aug) -> str: + """Return upstream bridges separated by newlines.""" + matches = aug.match(TORPROXY_CONFIG_AUG + '/Bridge') + bridges = [aug.get(match) for match in matches] + return '\n'.join(bridges) + + +def _enable(): + """Enable and start the service.""" + action_utils.service_enable(SERVICE_NAME) + + +def _disable(): + """Disable and stop the service.""" + _disable_apt_transport_tor() + action_utils.service_disable(SERVICE_NAME) + + +def _use_upstream_bridges(use_upstream_bridges: Optional[bool] = None, + aug=None): + """Enable use of upstream bridges.""" + if use_upstream_bridges is None: + return + + if not aug: + aug = augeas_load() + + if use_upstream_bridges: + aug.set(TORPROXY_CONFIG_AUG + '/UseBridges', '1') + else: + aug.set(TORPROXY_CONFIG_AUG + '/UseBridges', '0') + + aug.save() + + +def _set_upstream_bridges(upstream_bridges=None, aug=None): + """Set list of upstream bridges.""" + if upstream_bridges is None: + return + + if not aug: + aug = augeas_load() + + aug.remove(TORPROXY_CONFIG_AUG + '/Bridge') + if upstream_bridges: + bridges = [bridge.strip() for bridge in upstream_bridges.split('\n')] + bridges = [bridge for bridge in bridges if bridge] + for bridge in bridges: + parts = [part for part in bridge.split() if part] + bridge = ' '.join(parts) + aug.set(TORPROXY_CONFIG_AUG + '/Bridge[last() + 1]', + bridge.strip()) + + aug.set(TORPROXY_CONFIG_AUG + '/ClientTransportPlugin', + 'obfs3,scramblesuit,obfs4 exec /usr/bin/obfs4proxy') + + aug.save() + + +def _enable_apt_transport_tor(): + """Enable package download over Tor.""" + aug = get_augeas() + for uri_path in iter_apt_uris(aug): + uri = aug.get(uri_path) + if uri.startswith('http://') or uri.startswith('https://'): + aug.set(uri_path, APT_TOR_PREFIX + uri) + + aug.save() + + +def _disable_apt_transport_tor(): + """Disable package download over Tor.""" + try: + aug = get_augeas() + except Exception: + # Disable what we can, so APT is not unusable. + pass + + for uri_path in iter_apt_uris(aug): + uri = aug.get(uri_path) + if uri.startswith(APT_TOR_PREFIX): + aug.set(uri_path, uri[len(APT_TOR_PREFIX):]) + + aug.save() + + +def augeas_load(): + """Initialize Augeas.""" + aug = augeas.Augeas(flags=augeas.Augeas.NO_LOAD + + augeas.Augeas.NO_MODL_AUTOLOAD) + aug.set('/augeas/load/Tor/lens', 'Tor.lns') + aug.set('/augeas/load/Tor/incl[last() + 1]', TORPROXY_CONFIG) + aug.load() + return aug + + +@privileged +def uninstall(): + """Remove fbxproxy instance.""" + directories = [ + f'/etc/tor/instances/{INSTANCE_NAME}/', + f'/var/lib/tor-instances/{INSTANCE_NAME}/', + f'/var/run/tor-instances/{INSTANCE_NAME}/' + ] + for directory in directories: + shutil.rmtree(directory, ignore_errors=True) + + os.unlink(f'/var/run/tor-instances/{INSTANCE_NAME}.defaults') diff --git a/plinth/modules/torproxy/static/icons/torproxy.png b/plinth/modules/torproxy/static/icons/torproxy.png new file mode 100644 index 000000000..e23f23312 Binary files /dev/null and b/plinth/modules/torproxy/static/icons/torproxy.png differ diff --git a/plinth/modules/torproxy/static/icons/torproxy.svg b/plinth/modules/torproxy/static/icons/torproxy.svg new file mode 100644 index 000000000..f64723078 --- /dev/null +++ b/plinth/modules/torproxy/static/icons/torproxy.svg @@ -0,0 +1,112 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/plinth/modules/torproxy/static/torproxy.js b/plinth/modules/torproxy/static/torproxy.js new file mode 100644 index 000000000..3469c5a88 --- /dev/null +++ b/plinth/modules/torproxy/static/torproxy.js @@ -0,0 +1,33 @@ +// SPDX-License-Identifier: AGPL-3.0-or-later +/** + * @licstart The following is the entire license notice for the JavaScript + * code in this page. + * + * This file is part of FreedomBox. + * + * 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 . + * + * @licend The above is the entire license notice for the JavaScript code + * in this page. + */ + +(function($) { + $('#id_torproxy-use_upstream_bridges').change(function() { + if ($('#id_torproxy-use_upstream_bridges').prop('checked')) { + $('#id_torproxy-upstream_bridges').parent().parent().show('slow'); + } else { + $('#id_torproxy-upstream_bridges').parent().parent().hide('slow'); + } + }).change(); +})(jQuery); diff --git a/plinth/modules/torproxy/templates/torproxy.html b/plinth/modules/torproxy/templates/torproxy.html new file mode 100644 index 000000000..fdfb9fde3 --- /dev/null +++ b/plinth/modules/torproxy/templates/torproxy.html @@ -0,0 +1,10 @@ +{% extends "app.html" %} +{% comment %} +# SPDX-License-Identifier: AGPL-3.0-or-later +{% endcomment %} + +{% load static %} + +{% block page_js %} + +{% endblock %} diff --git a/plinth/modules/torproxy/tests/__init__.py b/plinth/modules/torproxy/tests/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/plinth/modules/torproxy/tests/test_functional.py b/plinth/modules/torproxy/tests/test_functional.py new file mode 100644 index 000000000..12e91af65 --- /dev/null +++ b/plinth/modules/torproxy/tests/test_functional.py @@ -0,0 +1,64 @@ +# SPDX-License-Identifier: AGPL-3.0-or-later +""" +Functional, browser based tests for Tor Proxy app. +""" + +import pytest + +from plinth.tests import functional + +_TOR_FEATURE_TO_ELEMENT = {'software': 'torproxy-apt_transport_tor_enabled'} + +pytestmark = [pytest.mark.apps, pytest.mark.torproxy] + + +class TestTorProxyApp(functional.BaseAppTests): + """Tests for the Tor Proxy app.""" + app_name = 'torproxy' + has_service = True + has_web = False + # TODO: Investigate why accessing IPv6 sites through Tor fails in + # container. + check_diagnostics = False + + def test_set_download_software_packages_over_tor(self, session_browser): + """Test setting download software packages over Tor.""" + functional.app_enable(session_browser, 'torproxy') + _feature_enable(session_browser, 'software', should_enable=True) + _feature_enable(session_browser, 'software', should_enable=False) + _assert_feature_enabled(session_browser, 'software', enabled=False) + + @pytest.mark.backups + def test_backup_restore(self, session_browser): + """Test backup and restore of configuration.""" + functional.app_enable(session_browser, 'torproxy') + # TODO: Check that upstream bridges are restored. + functional.backup_create(session_browser, 'torproxy', 'test_torproxy') + + functional.backup_restore(session_browser, 'torproxy', 'test_torproxy') + + assert functional.service_is_running(session_browser, 'torproxy') + + +def _feature_enable(browser, feature, should_enable): + """Enable/disable a Tor Proxy feature.""" + element_name = _TOR_FEATURE_TO_ELEMENT[feature] + functional.nav_to_module(browser, 'torproxy') + checkbox_element = browser.find_by_name(element_name).first + if should_enable == checkbox_element.checked: + return + + if should_enable: + checkbox_element.check() + else: + checkbox_element.uncheck() + + functional.submit(browser, form_class='form-configuration') + functional.wait_for_config_update(browser, 'torproxy') + + +def _assert_feature_enabled(browser, feature, enabled): + """Assert whether Tor Proxy feature is enabled or disabled.""" + element_name = _TOR_FEATURE_TO_ELEMENT[feature] + functional.nav_to_module(browser, 'torproxy') + assert browser.find_by_name(element_name).first.checked == enabled diff --git a/plinth/modules/torproxy/tests/test_torproxy.py b/plinth/modules/torproxy/tests/test_torproxy.py new file mode 100644 index 000000000..8bd2970d5 --- /dev/null +++ b/plinth/modules/torproxy/tests/test_torproxy.py @@ -0,0 +1,33 @@ +# SPDX-License-Identifier: AGPL-3.0-or-later +""" +Tests for Tor Proxy module. +""" + +from unittest.mock import patch + +import pytest + +from plinth.modules.torproxy import utils + + +class TestTorProxy: + """Test cases for testing the Tor Proxy module.""" + + @staticmethod + @pytest.mark.usefixtures('needs_root') + def test_is_apt_transport_tor_enabled(): + """Test that is_apt_transport_tor_enabled does not raise any unhandled + exceptions. + """ + utils.is_apt_transport_tor_enabled() + + @staticmethod + @patch('plinth.app.App.get') + @pytest.mark.usefixtures('needs_root', 'load_cfg') + def test_get_status(_app_get): + """Test that get_status does not raise any unhandled exceptions. + + This should work regardless of whether tor is installed, or + /etc/tor/instances/fbxproxy/torrc exists. + """ + utils.get_status() diff --git a/plinth/modules/torproxy/urls.py b/plinth/modules/torproxy/urls.py new file mode 100644 index 000000000..c894ae769 --- /dev/null +++ b/plinth/modules/torproxy/urls.py @@ -0,0 +1,13 @@ +# SPDX-License-Identifier: AGPL-3.0-or-later +""" +URLs for the Tor Proxy module. +""" + +from django.urls import re_path + +from . import views + +urlpatterns = [ + re_path(r'^apps/torproxy/$', views.TorProxyAppView.as_view(), + name='index'), +] diff --git a/plinth/modules/torproxy/utils.py b/plinth/modules/torproxy/utils.py new file mode 100644 index 000000000..82f1e810e --- /dev/null +++ b/plinth/modules/torproxy/utils.py @@ -0,0 +1,75 @@ +# SPDX-License-Identifier: AGPL-3.0-or-later +"""Tor Proxy utility functions.""" + +import itertools + +import augeas + +from plinth import app as app_module +from plinth.daemon import app_is_running + +from . import privileged + +APT_SOURCES_URI_PATHS = ('/files/etc/apt/sources.list/*/uri', + '/files/etc/apt/sources.list.d/*/*/uri', + '/files/etc/apt/sources.list.d/*/*/URIs/*') +APT_TOR_PREFIX = 'tor+' + + +def get_status(initialized=True): + """Return current Tor status.""" + status = privileged.get_status() + + app = app_module.App.get('torproxy') + return { + 'enabled': app.is_enabled() if initialized else False, + 'is_running': app_is_running(app) if initialized else False, + 'use_upstream_bridges': status['use_upstream_bridges'], + 'upstream_bridges': status['upstream_bridges'], + 'apt_transport_tor_enabled': is_apt_transport_tor_enabled() + } + + +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_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.set('/augeas/load/Aptsources822/lens', 'Aptsources822.lns') + aug.set('/augeas/load/Aptsources822/incl[last() + 1]', + '/etc/apt/sources.list.d/*.sources') + aug.load() + + # Check for any errors in parsing sources lists. + 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') + + return aug + + +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. + return False + + for uri_path in iter_apt_uris(aug): + uri = aug.get(uri_path) + if not uri.startswith(APT_TOR_PREFIX) and \ + (uri.startswith('http://') or uri.startswith('https://')): + return False + + return True diff --git a/plinth/modules/torproxy/views.py b/plinth/modules/torproxy/views.py new file mode 100644 index 000000000..b4de80d9e --- /dev/null +++ b/plinth/modules/torproxy/views.py @@ -0,0 +1,104 @@ +# SPDX-License-Identifier: AGPL-3.0-or-later +"""FreedomBox app for configuring Tor Proxy.""" + +import logging + +from django.utils.translation import gettext_noop +from django.views.generic.edit import FormView + +from plinth import app as app_module +from plinth import operation as operation_module +from plinth.views import AppView + +from . import privileged +from . import utils as tor_utils +from .forms import TorProxyForm + +logger = logging.getLogger(__name__) + + +class TorProxyAppView(AppView): + """Show Tor Proxy app main page.""" + + app_id = 'torproxy' + template_name = 'torproxy.html' + form_class = TorProxyForm + prefix = 'torproxy' + + status = None + + def get_initial(self): + """Return the values to fill in the form.""" + if not self.status: + self.status = tor_utils.get_status() + + initial = super().get_initial() + initial.update(self.status) + return initial + + def get_context_data(self, *args, **kwargs): + """Add additional context data for template.""" + if not self.status: + self.status = tor_utils.get_status() + + context = super().get_context_data(*args, **kwargs) + context['status'] = self.status + return context + + def form_valid(self, form): + """Configure tor app on successful form submission.""" + operation_module.manager.new(self.app_id, + gettext_noop('Updating configuration'), + _apply_changes, + [form.initial, form.cleaned_data], + show_notification=False) + # Skip check for 'Settings unchanged' message by calling grandparent + return super(FormView, self).form_valid(form) + + +def _apply_changes(old_status, new_status): + """Try to apply changes and handle errors.""" + logger.info('torproxy: applying configuration changes') + exception_to_update = None + message = None + try: + __apply_changes(old_status, new_status) + except Exception as exception: + exception_to_update = exception + message = gettext_noop('Error configuring app: {error}').format( + error=exception) + else: + message = gettext_noop('Configuration updated.') + + logger.info('torproxy: configuration changes completed') + operation = operation_module.Operation.get_operation() + operation.on_update(message, exception_to_update) + + +def __apply_changes(old_status, new_status): + """Apply the changes.""" + needs_restart = False + arguments = {} + + app = app_module.App.get('torproxy') + is_enabled = app.is_enabled() + + if old_status['apt_transport_tor_enabled'] != \ + new_status['apt_transport_tor_enabled']: + arguments['apt_transport_tor'] = ( + is_enabled and new_status['apt_transport_tor_enabled']) + + if old_status['use_upstream_bridges'] != \ + new_status['use_upstream_bridges']: + arguments['use_upstream_bridges'] = new_status['use_upstream_bridges'] + needs_restart = True + + if old_status['upstream_bridges'] != new_status['upstream_bridges']: + arguments['upstream_bridges'] = new_status['upstream_bridges'] + needs_restart = True + + if arguments: + privileged.configure(**arguments) + + if needs_restart and is_enabled: + privileged.restart() diff --git a/plinth/modules/ttrss/__init__.py b/plinth/modules/ttrss/__init__.py index abc152eae..9445fcf67 100644 --- a/plinth/modules/ttrss/__init__.py +++ b/plinth/modules/ttrss/__init__.py @@ -117,7 +117,8 @@ class TTRSSApp(app_module.App): privileged.pre_setup() super().setup(old_version) privileged.setup() - self.enable() + if not old_version: + self.enable() def force_upgrade(self, packages): """Force update package to resolve conffile prompts.""" diff --git a/plinth/modules/upgrades/__init__.py b/plinth/modules/upgrades/__init__.py index 72435c8a6..88c908d18 100644 --- a/plinth/modules/upgrades/__init__.py +++ b/plinth/modules/upgrades/__init__.py @@ -53,7 +53,7 @@ class UpgradesApp(app_module.App): app_id = 'upgrades' - _version = 16 + _version = 17 can_be_disabled = False diff --git a/plinth/modules/upgrades/data/usr/share/freedombox/etc/apt/apt.conf.d/60unattended-upgrades b/plinth/modules/upgrades/data/usr/share/freedombox/etc/apt/apt.conf.d/60unattended-upgrades index 363873f00..1e2506132 100644 --- a/plinth/modules/upgrades/data/usr/share/freedombox/etc/apt/apt.conf.d/60unattended-upgrades +++ b/plinth/modules/upgrades/data/usr/share/freedombox/etc/apt/apt.conf.d/60unattended-upgrades @@ -12,7 +12,7 @@ Unattended-Upgrade::Remove-Unused-Dependencies "true"; // ignored. Only packages that have higher priority set explicitly will get // upgraded. Only selected FreedomBox packages have high priority set on them. Unattended-Upgrade::Origins-Pattern { - "o=Debian Backports,a=${distro_codename}-backports,l=Debian Backports"; + "o=Debian Backports,n=${distro_codename}-backports,l=Debian Backports"; }; // Automatically reboot *WITHOUT CONFIRMATION* if diff --git a/plinth/modules/upgrades/privileged.py b/plinth/modules/upgrades/privileged.py index b537702ae..fd020a8cb 100644 --- a/plinth/modules/upgrades/privileged.py +++ b/plinth/modules/upgrades/privileged.py @@ -33,7 +33,7 @@ APT_PREFERENCES_FREEDOMBOX = \ '''Explanation: This file is managed by FreedomBox, do not edit. Explanation: Allow carefully selected updates to 'freedombox' from backports. Package: src:freedombox -Pin: release a={}-backports +Pin: release n={}-backports Pin-Priority: 500 ''' diff --git a/plinth/modules/users/__init__.py b/plinth/modules/users/__init__.py index 6dc4a186d..5be7435dd 100644 --- a/plinth/modules/users/__init__.py +++ b/plinth/modules/users/__init__.py @@ -4,6 +4,7 @@ import grp import subprocess +import augeas from django.utils.text import format_lazy from django.utils.translation import gettext_lazy as _ @@ -90,6 +91,13 @@ class UsersApp(app_module.App): results.append(_diagnose_ldap_entry('ou=people')) results.append(_diagnose_ldap_entry('ou=groups')) + config = privileged.get_nslcd_config() + results.append(_diagnose_nslcd_config(config, 'uri', 'ldapi:///')) + results.append(_diagnose_nslcd_config(config, 'base', 'dc=thisbox')) + results.append(_diagnose_nslcd_config(config, 'sasl_mech', 'EXTERNAL')) + + results.extend(_diagnose_nsswitch_config()) + return results def setup(self, old_version): @@ -119,6 +127,50 @@ def _diagnose_ldap_entry(search_item): return [testname, result] +def _diagnose_nslcd_config(config, key, value): + """Diagnose that nslcd has a configuration.""" + try: + result = 'passed' if config[key] == value else 'failed' + except KeyError: + result = 'failed' + + template = _('Check nslcd config "{key} {value}"') + testname = format_lazy(template, key=key, value=value) + + return [testname, result] + + +def _diagnose_nsswitch_config(): + """Diagnose that Name Service Switch is configured to use LDAP.""" + nsswitch_conf = '/etc/nsswitch.conf' + aug = augeas.Augeas(flags=augeas.Augeas.NO_LOAD + + augeas.Augeas.NO_MODL_AUTOLOAD) + aug.transform('Nsswitch', nsswitch_conf) + aug.set('/augeas/context', '/files' + nsswitch_conf) + aug.load() + + results = [] + for database in ['passwd', 'group', 'shadow']: + result = 'failed' + for match in aug.match('database'): + if aug.get(match) != database: + continue + + for service_match in aug.match(match + '/service'): + if 'ldap' == aug.get(service_match): + result = 'passed' + break + + break + + template = _('Check nsswitch config "{database}"') + testname = format_lazy(template, database=database) + + results.append([testname, result]) + + return results + + def get_last_admin_user(): """If there is only one admin user return its name else return None.""" admin_users = privileged.get_group_users('admin') diff --git a/plinth/modules/users/privileged.py b/plinth/modules/users/privileged.py index 099e24c44..7483474b1 100644 --- a/plinth/modules/users/privileged.py +++ b/plinth/modules/users/privileged.py @@ -178,6 +178,23 @@ def _configure_ldapscripts(): aug.save() +@privileged +def get_nslcd_config(): + """Get nslcd configuration for diagnostics.""" + nslcd_conf = '/etc/nslcd.conf' + aug = augeas.Augeas(flags=augeas.Augeas.NO_LOAD + + augeas.Augeas.NO_MODL_AUTOLOAD) + aug.transform('Nslcd', nslcd_conf) + aug.set('/augeas/context', '/files' + nslcd_conf) + aug.load() + + return { + 'uri': aug.get('uri/1'), + 'base': aug.get('base'), + 'sasl_mech': aug.get('sasl_mech') + } + + def _get_samba_users(): """Get users from the Samba user database.""" # 'pdbedit -L' is better for listing users but is installed only with samba diff --git a/plinth/modules/wireguard/__init__.py b/plinth/modules/wireguard/__init__.py index 0dc632196..49297e1e4 100644 --- a/plinth/modules/wireguard/__init__.py +++ b/plinth/modules/wireguard/__init__.py @@ -95,4 +95,5 @@ class WireguardApp(app_module.App): def setup(self, old_version): """Install and configure the app.""" super().setup(old_version) - self.enable() + if not old_version: + self.enable() diff --git a/plinth/modules/zoph/__init__.py b/plinth/modules/zoph/__init__.py index 09aa395f5..2dd82f7d7 100644 --- a/plinth/modules/zoph/__init__.py +++ b/plinth/modules/zoph/__init__.py @@ -89,7 +89,8 @@ class ZophApp(app_module.App): privileged.pre_install() super().setup(old_version) privileged.setup() - self.enable() + if not old_version: + self.enable() class ZophBackupRestore(BackupRestore): diff --git a/plinth/setup.py b/plinth/setup.py index dddbe40bf..6d4ed71ab 100644 --- a/plinth/setup.py +++ b/plinth/setup.py @@ -29,12 +29,12 @@ _is_shutting_down = False _force_upgrader = None -def run_setup_on_app(app_id, allow_install=True): +def run_setup_on_app(app_id, allow_install=True, rerun=False): """Execute the setup process in a thread.""" # App is already up-to-date app = app_module.App.get(app_id) current_version = app.get_setup_version() - if current_version >= app.info.version: + if not rerun and current_version >= app.info.version: return if not current_version: diff --git a/plinth/templates/toolbar.html b/plinth/templates/toolbar.html index ffd03b7a1..26d19b314 100644 --- a/plinth/templates/toolbar.html +++ b/plinth/templates/toolbar.html @@ -45,6 +45,14 @@ {% trans "Restore" %} {% endif %} + {% if show_rerun_setup %} +
+ {% csrf_token %} + +
+ {% endif %} {% if show_uninstall %} [1-9a-z\-_]+)/$', views.UninstallView.as_view(), name='uninstall'), + re_path(r'^rerun-setup/(?P[1-9a-z\-_]+)/$', views.rerun_setup_view, + name='rerun-setup'), # captcha urls are public re_path(r'^captcha/image/(?P\w+)/$', public(cviews.captcha_image), diff --git a/plinth/views.py b/plinth/views.py index 6d6e295de..8cb5d4c20 100644 --- a/plinth/views.py +++ b/plinth/views.py @@ -10,9 +10,11 @@ import urllib.parse from django.contrib import messages from django.core.exceptions import ImproperlyConfigured from django.http import Http404, HttpResponseBadRequest, HttpResponseRedirect +from django.shortcuts import redirect from django.template.response import TemplateResponse from django.urls import reverse from django.utils.translation import gettext as _ +from django.views.decorators.http import require_POST from django.views.generic import TemplateView from django.views.generic.edit import FormView from stronghold.decorators import public @@ -275,6 +277,7 @@ class AppView(FormView): context['has_diagnostics'] = self.app.has_diagnostics() context['port_forwarding_info'] = get_port_forwarding_info(self.app) context['app_enable_disable_form'] = self.get_enable_disable_form() + context['show_rerun_setup'] = True context['show_uninstall'] = not self.app.info.is_essential context['refresh_page_sec'] = None @@ -335,6 +338,7 @@ class SetupView(TemplateView): setup_state = app.get_setup_state() context['setup_state'] = setup_state context['operations'] = operation.manager.filter(app.app_id) + context['show_rerun_setup'] = False context['show_uninstall'] = ( not app.info.is_essential and setup_state != app_module.App.SetupState.NEEDS_SETUP) @@ -399,6 +403,24 @@ class SetupView(TemplateView): if component.has_unavailable_packages()) +@require_POST +def rerun_setup_view(request, app_id): + """Re-run setup on an app. + + This should be safe to perform on an already setup/running app. This may be + useful in situations where the app is broken for unknown reason as notified + by the diagnostics tests. + """ + # Start the application setup, and refresh the page every few seconds to + # keep displaying the status. + setup.run_setup_on_app(app_id, rerun=True) + + # Give a moment for the setup process to start and show meaningful status. + time.sleep(1) + + return redirect(reverse(f'{app_id}:index')) + + class UninstallView(FormView): """View to uninstall apps."""