pax_global_header00006660000000000000000000000064150555667400014527gustar00rootroot0000000000000052 comment=090042fec5181621e2fd8cfef9fc446ed86db98b malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/000077500000000000000000000000001505556674000215745ustar00rootroot00000000000000malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/.gitlab-ci.yml000066400000000000000000000032321505556674000242300ustar00rootroot00000000000000stages: - build - deploy cache: paths: - _ccache/ variables: DEBIAN_IMAGE: "registry.freedesktop.org/pwithnall/malcontent/debian-unstable:v7" MESON_TEST_TIMEOUT_MULTIPLIER: 2 G_MESSAGES_DEBUG: all MESON_COMMON_OPTIONS: "--buildtype debug --wrap-mode=nodownload" .only-default: only: - branches except: - tags .build: extends: .only-default before_script: - cp -r $HOME/subprojects/* subprojects/ debian: extends: .build image: $DEBIAN_IMAGE stage: build variables: CFLAGS: "-coverage -ftest-coverage -fprofile-arcs" script: - meson setup ${MESON_COMMON_OPTIONS} --werror -Db_coverage=true -Dinstalled_tests=true -Dprivileged_group=sudo _build - meson compile -C _build - mkdir -p _coverage - lcov --config-file .gitlab-ci/lcovrc --directory _build --capture --initial --output-file "_coverage/${CI_JOB_NAME}-baseline.lcov" - .gitlab-ci/run-tests.sh - lcov --config-file .gitlab-ci/lcovrc --directory _build --capture --output-file "_coverage/${CI_JOB_NAME}.lcov" - bash -x ./.gitlab-ci/coverage-docker.sh coverage: '/^\s+lines\.+:\s+([\d.]+\%)\s+/' artifacts: reports: junit: "_build/${CI_JOB_NAME}-report.xml" name: "malcontent-${CI_JOB_NAME}-${CI_COMMIT_REF_NAME}" when: always paths: - "_build/config.h" - "_build/meson-logs" - "_build/${CI_JOB_NAME}-report.xml" - "_coverage" # FIXME: Run gtkdoc-check when we can. See: # https://github.com/mesonbuild/meson/issues/3580 pages: stage: deploy only: - main script: - mv _coverage/ public/ artifacts: paths: - public malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/.gitlab-ci/000077500000000000000000000000001505556674000235055ustar00rootroot00000000000000malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/.gitlab-ci/README.md000066400000000000000000000021201505556674000247570ustar00rootroot00000000000000# CI support stuff ## Docker image GitLab CI jobs run in a Docker image, defined here. To update that image (perhaps to install some more packages): 1. Edit `.gitlab-ci/Dockerfile` with the changes you want 1. Run `.gitlab-ci/run-docker.sh build --base=debian-unstable --base-version=1` to build the new image (bump the version from the latest listed for that `base` on https://gitlab.freedesktop.org/pwithnall/malcontent/container_registry) 1. Run `.gitlab-ci/run-docker.sh push --base=debian-unstable --base-version=1` to upload the new image to the GNOME GitLab Docker registry * If this is the first time you're doing this, you'll need to log into the registry * If you use 2-factor authentication on your GNOME GitLab account, you'll need to [create a personal access token][pat] and use that rather than your normal password — the token should have `read_registry` and `write_registry` permissions 1. Edit `.gitlab-ci.yml` (in the root of this repository) to use your new image [pat]: https://gitlab.freedesktop.org/profile/personal_access_tokens malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/.gitlab-ci/cache-subprojects.sh000077500000000000000000000003551505556674000274530ustar00rootroot00000000000000#!/bin/bash set -e git clone --depth 1 --no-tags https://gitlab.freedesktop.org/pwithnall/malcontent.git meson subprojects download --sourcedir malcontent rm malcontent/subprojects/*.wrap mv malcontent/subprojects/ . rm -rf malcontent malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/.gitlab-ci/coverage-docker.sh000077500000000000000000000011501505556674000271010ustar00rootroot00000000000000#!/bin/bash set -e for path in _coverage/*.lcov; do # Remove coverage from generated code in the build directory lcov --config-file .gitlab-ci/lcovrc -r "${path}" '*/_build/*' -o "$(pwd)/${path}" # Remove any coverage from system files lcov --config-file .gitlab-ci/lcovrc -e "${path}" "$(pwd)/*" -o "$(pwd)/${path}" done genhtml \ --ignore-errors=source \ --config-file .gitlab-ci/lcovrc \ _coverage/*.lcov \ -o _coverage/coverage cd _coverage rm -f ./*.lcov cat >index.html < EOL malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/.gitlab-ci/debian-unstable.Dockerfile000066400000000000000000000017611505556674000305400ustar00rootroot00000000000000FROM debian:unstable RUN apt-get update -qq && apt-get install --no-install-recommends -qq -y \ appstream \ desktop-file-utils \ gettext \ git \ gtk-doc-tools \ itstool \ lcov \ libadwaita-1-dev \ libaccountsservice-dev \ libappstream-dev \ libdbus-1-dev \ libflatpak-dev \ libgirepository1.0-dev \ libglib2.0-dev \ libglib-testing-0-dev \ libgtk-4-dev \ libpam0g-dev \ libpolkit-gobject-1-dev \ libtimedate-perl \ libxml2-utils \ locales \ meson \ pkg-config \ polkitd \ python3-pip \ && rm -rf /usr/share/doc/* /usr/share/man/* # Locale for our build RUN locale-gen C.UTF-8 && /usr/sbin/update-locale LANG=C.UTF-8 ENV LANG=C.UTF-8 LANGUAGE=C.UTF-8 LC_ALL=C.UTF-8 ARG HOST_USER_ID=5555 ENV HOST_USER_ID ${HOST_USER_ID} RUN useradd -u $HOST_USER_ID -ms /bin/bash user USER user WORKDIR /home/user COPY cache-subprojects.sh . RUN ./cache-subprojects.sh ENV LANG=C.UTF-8 LANGUAGE=C.UTF-8 LC_ALL=C.UTF-8 malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/.gitlab-ci/lcovrc000066400000000000000000000011011505556674000247110ustar00rootroot00000000000000# lcov and genhtml configuration # See http://ltp.sourceforge.net/coverage/lcov/lcovrc.5.php # Always enable branch coverage lcov_branch_coverage = 1 # Exclude precondition assertions, as we can never reasonably get full branch # coverage of them, as they should never normally fail. # See https://github.com/linux-test-project/lcov/issues/44 lcov_excl_br_line = LCOV_EXCL_BR_LINE|g_return_if_fail|g_return_val_if_fail|g_assert|g_assert_ # Similarly for unreachable assertions. lcov_excl_line = LCOV_EXCL_LINE|g_return_if_reached|g_return_val_if_reached|g_assert_not_reachedmalcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/.gitlab-ci/meson-junit-report.py000077500000000000000000000074311505556674000276500ustar00rootroot00000000000000#!/usr/bin/env python3 # Turns a Meson testlog.json file into a JUnit XML report # # Copyright 2019 GNOME Foundation # # SPDX-License-Identifier: LGPL-2.1-or-later # # Original author: Emmanuele Bassi import argparse import datetime import json import os import sys import xml.etree.ElementTree as ET aparser = argparse.ArgumentParser(description='Turns a Meson test log into a JUnit report') aparser.add_argument('--project-name', metavar='NAME', help='The project name', default='unknown') aparser.add_argument('--job-id', metavar='ID', help='The job ID for the report', default='Unknown') aparser.add_argument('--branch', metavar='NAME', help='Branch of the project being tested', default='main') aparser.add_argument('--output', metavar='FILE', help='The output file, stdout by default', type=argparse.FileType('w', encoding='UTF-8'), default=sys.stdout) aparser.add_argument('infile', metavar='FILE', help='The input testlog.json, stdin by default', type=argparse.FileType('r', encoding='UTF-8'), default=sys.stdin) args = aparser.parse_args() outfile = args.output testsuites = ET.Element('testsuites') testsuites.set('id', '{}/{}'.format(args.job_id, args.branch)) testsuites.set('package', args.project_name) testsuites.set('timestamp', datetime.datetime.utcnow().isoformat()) suites = {} for line in args.infile: data = json.loads(line) (full_suite, unit_name) = data['name'].split(' / ') try: (project_name, suite_name) = full_suite.split(':') except ValueError: project_name = full_suite suite_name = full_suite duration = data['duration'] return_code = data['returncode'] log = data['stdout'] log_stderr = data.get('stderr', '') unit = { 'suite': suite_name, 'name': unit_name, 'duration': duration, 'returncode': return_code, 'stdout': log, 'stderr': log_stderr, } units = suites.setdefault(suite_name, []) units.append(unit) for name, units in suites.items(): print('Processing suite {} (units: {})'.format(name, len(units))) def if_failed(unit): if unit['returncode'] != 0: return True return False def if_succeded(unit): if unit['returncode'] == 0: return True return False successes = list(filter(if_succeded, units)) failures = list(filter(if_failed, units)) print(' - {}: {} pass, {} fail'.format(name, len(successes), len(failures))) testsuite = ET.SubElement(testsuites, 'testsuite') testsuite.set('name', '{}/{}'.format(args.project_name, name)) testsuite.set('tests', str(len(units))) testsuite.set('errors', str(len(failures))) testsuite.set('failures', str(len(failures))) for unit in successes: testcase = ET.SubElement(testsuite, 'testcase') testcase.set('classname', '{}/{}'.format(args.project_name, unit['suite'])) testcase.set('name', unit['name']) testcase.set('time', str(unit['duration'])) for unit in failures: testcase = ET.SubElement(testsuite, 'testcase') testcase.set('classname', '{}/{}'.format(args.project_name, unit['suite'])) testcase.set('name', unit['name']) testcase.set('time', str(unit['duration'])) failure = ET.SubElement(testcase, 'failure') failure.set('classname', '{}/{}'.format(args.project_name, unit['suite'])) failure.set('name', unit['name']) failure.set('type', 'error') failure.text = unit['stdout'] + '\n' + unit['stderr'] output = ET.tostring(testsuites, encoding='unicode') outfile.write(output) malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/.gitlab-ci/run-docker.sh000077500000000000000000000066221505556674000261230ustar00rootroot00000000000000#!/bin/bash read_arg() { # $1 = arg name # $2 = arg value # $3 = arg parameter local rematch='^[^=]*=(.*)$' if [[ $2 =~ $rematch ]]; then read -r "$1" <<< "${BASH_REMATCH[1]}" else read -r "$1" <<< "$3" # There is no way to shift our callers args, so # return 1 to indicate they should do it instead. return 1 fi } SUDO_CMD="sudo" if docker -v |& grep -q podman; then # Using podman SUDO_CMD="" # Docker is actually implemented by podman, and its OCI output # is incompatible with some of the dockerd instances on GitLab # CI runners. export BUILDAH_FORMAT=docker fi set -e base="" base_version="" build=0 run=0 push=0 list=0 print_help=0 no_login=0 while (($# > 0)); do case "${1%%=*}" in build) build=1;; run) run=1;; push) push=1;; list) list=1;; help) print_help=1;; --base|-b) read_arg base "$@" || shift;; --base-version) read_arg base_version "$@" || shift;; --no-login) no_login=1;; *) echo -e "\e[1;31mERROR\e[0m: Unknown option '$1'"; exit 1;; esac shift done if [ $print_help == 1 ]; then echo "$0 - Build and run Docker images" echo "" echo "Usage: $0 [options] [basename]" echo "" echo "Available commands" echo "" echo " build --base= - Build Docker image .Dockerfile" echo " run --base= - Run Docker image " echo " push --base= - Push Docker image to the registry" echo " list - List available images" echo " help - This help message" echo "" exit 0 fi cd "$(dirname "$0")" if [ $list == 1 ]; then echo "Available Docker images:" for f in *.Dockerfile; do filename=$( basename -- "$f" ) basename="${filename%.*}" echo -e " \e[1;39m$basename\e[0m" done exit 0 fi # All commands after this require --base to be set if [ -z "${base}" ]; then echo "Usage: $0 " exit 1 fi if [ ! -f "$base.Dockerfile" ]; then echo -e "\e[1;31mERROR\e[0m: Dockerfile for '$base' not found" exit 1 fi if [ -z "${base_version}" ]; then base_version="latest" else base_version="v$base_version" fi TAG="registry.freedesktop.org/pwithnall/malcontent/${base}:${base_version}" if [ $build == 1 ]; then echo -e "\e[1;32mBUILDING\e[0m: ${base} as ${TAG}" $SUDO_CMD docker build \ --build-arg HOST_USER_ID="$UID" \ --tag "${TAG}" \ --file "${base}.Dockerfile" . exit $? fi if [ $push == 1 ]; then echo -e "\e[1;32mPUSHING\e[0m: ${base} as ${TAG}" if [ $no_login == 0 ]; then $SUDO_CMD docker login registry.freedesktop.org fi $SUDO_CMD docker push $TAG exit $? fi if [ $run == 1 ]; then echo -e "\e[1;32mRUNNING\e[0m: ${base} as ${TAG}" $SUDO_CMD docker run \ --rm \ --volume "$(pwd)/..:/home/user/app" \ --workdir "/home/user/app" \ --tty \ --interactive "${TAG}" \ bash exit $? fi malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/.gitlab-ci/run-tests.sh000077500000000000000000000010001505556674000257770ustar00rootroot00000000000000#!/bin/bash set +e case "$1" in --log-file) log_file="$2" shift shift ;; *) log_file="_build/meson-logs/testlog.json" esac meson test \ -C _build \ --timeout-multiplier "${MESON_TEST_TIMEOUT_MULTIPLIER}" \ --no-suite flaky \ "$@" exit_code=$? python3 .gitlab-ci/meson-junit-report.py \ --project-name=malcontent \ --job-id "${CI_JOB_NAME}" \ --output "_build/${CI_JOB_NAME}-report.xml" \ "${log_file}" exit $exit_code malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/COPYING000066400000000000000000000636421505556674000226420ustar00rootroot00000000000000 GNU LESSER GENERAL PUBLIC LICENSE Version 2.1, February 1999 Copyright (C) 1991, 1999 Free Software Foundation, Inc. 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. [This is the first released version of the Lesser GPL. It also counts as the successor of the GNU Library Public License, version 2, hence the version number 2.1.] Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This license, the Lesser General Public License, applies to some specially designated software packages--typically libraries--of the Free Software Foundation and other authors who decide to use it. You can use it too, but we suggest you first think carefully about whether this license or the ordinary General Public License is the better strategy to use in any particular case, based on the explanations below. When we speak of free software, we are referring to freedom of use, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish); that you receive source code or can get it if you want it; that you can change the software and use pieces of it in new free programs; and that you are informed that you can do these things. To protect your rights, we need to make restrictions that forbid distributors to deny you these rights or to ask you to surrender these rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library or if you modify it. For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link other code with the library, you must provide complete object files to the recipients, so that they can relink them with the library after making changes to the library and recompiling it. And you must show them these terms so they know their rights. We protect your rights with a two-step method: (1) we copyright the library, and (2) we offer you this license, which gives you legal permission to copy, distribute and/or modify the library. To protect each distributor, we want to make it very clear that there is no warranty for the free library. Also, if the library is modified by someone else and passed on, the recipients should know that what they have is not the original version, so that the original author's reputation will not be affected by problems that might be introduced by others. Finally, software patents pose a constant threat to the existence of any free program. We wish to make sure that a company cannot effectively restrict the users of a free program by obtaining a restrictive license from a patent holder. Therefore, we insist that any patent license obtained for a version of the library must be consistent with the full freedom of use specified in this license. Most GNU software, including some libraries, is covered by the ordinary GNU General Public License. This license, the GNU Lesser General Public License, applies to certain designated libraries, and is quite different from the ordinary General Public License. We use this license for certain libraries in order to permit linking those libraries into non-free programs. When a program is linked with a library, whether statically or using a shared library, the combination of the two is legally speaking a combined work, a derivative of the original library. The ordinary General Public License therefore permits such linking only if the entire combination fits its criteria of freedom. The Lesser General Public License permits more lax criteria for linking other code with the library. We call this license the "Lesser" General Public License because it does Less to protect the user's freedom than the ordinary General Public License. It also provides other free software developers Less of an advantage over competing non-free programs. These disadvantages are the reason we use the ordinary General Public License for many libraries. However, the Lesser license provides advantages in certain special circumstances. For example, on rare occasions, there may be a special need to encourage the widest possible use of a certain library, so that it becomes a de-facto standard. To achieve this, non-free programs must be allowed to use the library. A more frequent case is that a free library does the same job as widely used non-free libraries. In this case, there is little to gain by limiting the free library to free software only, so we use the Lesser General Public License. In other cases, permission to use a particular library in non-free programs enables a greater number of people to use a large body of free software. For example, permission to use the GNU C Library in non-free programs enables many more people to use the whole GNU operating system, as well as its variant, the GNU/Linux operating system. Although the Lesser General Public License is Less protective of the users' freedom, it does ensure that the user of a program that is linked with the Library has the freedom and the wherewithal to run that program using a modified version of the Library. The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, whereas the latter must be combined with the library in order to run. GNU LESSER GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License Agreement applies to any software library or other program which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Lesser General Public License (also called "this License"). Each licensee is addressed as "you". A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables. The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".) "Source code" for a work means the preferred form of the work for making modifications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the library. Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. 1. You may copy and distribute verbatim copies of the Library's complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and distribute a copy of this License along with the Library. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) The modified work must itself be a software library. b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change. c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License. d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful. (For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Library. In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. This option is useful when you wish to copy part of the code of the Library into a program that is not a library. 4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange. If distribution of object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code. 5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License. However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables. When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law. If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.) Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. 6. As an exception to the Sections above, you may also combine or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications. You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things: a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.) b) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (1) uses at run time a copy of the library already present on the user's computer system, rather than copying library functions into the executable, and (2) will operate properly with a modified version of the library, if the user installs one, as long as the modified version is interface-compatible with the version that the work was made with. c) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution. d) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place. e) Verify that the user has already received a copy of these materials or that you have already sent this user a copy. For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the materials to be distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. 7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above. b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 9. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it. 10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties with this License. 11. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Library. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 13. The Free Software Foundation may publish revised and/or new versions of the Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Library specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. 14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Libraries If you develop a new library, and you want it to be of the greatest possible use to the public, we recommend making it free software that everyone can redistribute and change. You can do so by permitting redistribution under these terms (or, alternatively, under the terms of the ordinary General Public License). To apply these terms, attach the following notices to the library. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Also add information on how to contact you by electronic and paper mail. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the library, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the library `Frob' (a library for tweaking knobs) written by James Random Hacker. , 1 April 1990 Ty Coon, President of Vice That's all there is to it! malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/COPYING-DOCS000066400000000000000000000465041505556674000233660ustar00rootroot00000000000000Attribution-ShareAlike 3.0 Unported CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE LEGAL SERVICES. DISTRIBUTION OF THIS LICENSE DOES NOT CREATE AN ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES REGARDING THE INFORMATION PROVIDED, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM ITS USE. License THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED. BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE TO BE BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE MAY BE CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU THE RIGHTS CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND CONDITIONS. 1. Definitions "Adaptation" means a work based upon the Work, or upon the Work and other pre-existing works, such as a translation, adaptation, derivative work, arrangement of music or other alterations of a literary or artistic work, or phonogram or performance and includes cinematographic adaptations or any other form in which the Work may be recast, transformed, or adapted including in any form recognizably derived from the original, except that a work that constitutes a Collection will not be considered an Adaptation for the purpose of this License. For the avoidance of doubt, where the Work is a musical work, performance or phonogram, the synchronization of the Work in timed-relation with a moving image ("synching") will be considered an Adaptation for the purpose of this License. "Collection" means a collection of literary or artistic works, such as encyclopedias and anthologies, or performances, phonograms or broadcasts, or other works or subject matter other than works listed in Section 1(f) below, which, by reason of the selection and arrangement of their contents, constitute intellectual creations, in which the Work is included in its entirety in unmodified form along with one or more other contributions, each constituting separate and independent works in themselves, which together are assembled into a collective whole. A work that constitutes a Collection will not be considered an Adaptation (as defined below) for the purposes of this License. "Creative Commons Compatible License" means a license that is listed at http://creativecommons.org/compatiblelicenses that has been approved by Creative Commons as being essentially equivalent to this License, including, at a minimum, because that license: (i) contains terms that have the same purpose, meaning and effect as the License Elements of this License; and, (ii) explicitly permits the relicensing of adaptations of works made available under that license under this License or a Creative Commons jurisdiction license with the same License Elements as this License. "Distribute" means to make available to the public the original and copies of the Work or Adaptation, as appropriate, through sale or other transfer of ownership. "License Elements" means the following high-level license attributes as selected by Licensor and indicated in the title of this License: Attribution, ShareAlike. "Licensor" means the individual, individuals, entity or entities that offer(s) the Work under the terms of this License. "Original Author" means, in the case of a literary or artistic work, the individual, individuals, entity or entities who created the Work or if no individual or entity can be identified, the publisher; and in addition (i) in the case of a performance the actors, singers, musicians, dancers, and other persons who act, sing, deliver, declaim, play in, interpret or otherwise perform literary or artistic works or expressions of folklore; (ii) in the case of a phonogram the producer being the person or legal entity who first fixes the sounds of a performance or other sounds; and, (iii) in the case of broadcasts, the organization that transmits the broadcast. "Work" means the literary and/or artistic work offered under the terms of this License including without limitation any production in the literary, scientific and artistic domain, whatever may be the mode or form of its expression including digital form, such as a book, pamphlet and other writing; a lecture, address, sermon or other work of the same nature; a dramatic or dramatico-musical work; a choreographic work or entertainment in dumb show; a musical composition with or without words; a cinematographic work to which are assimilated works expressed by a process analogous to cinematography; a work of drawing, painting, architecture, sculpture, engraving or lithography; a photographic work to which are assimilated works expressed by a process analogous to photography; a work of applied art; an illustration, map, plan, sketch or three-dimensional work relative to geography, topography, architecture or science; a performance; a broadcast; a phonogram; a compilation of data to the extent it is protected as a copyrightable work; or a work performed by a variety or circus performer to the extent it is not otherwise considered a literary or artistic work. "You" means an individual or entity exercising rights under this License who has not previously violated the terms of this License with respect to the Work, or who has received express permission from the Licensor to exercise rights under this License despite a previous violation. "Publicly Perform" means to perform public recitations of the Work and to communicate to the public those public recitations, by any means or process, including by wire or wireless means or public digital performances; to make available to the public Works in such a way that members of the public may access these Works from a place and at a place individually chosen by them; to perform the Work to the public by any means or process and the communication to the public of the performances of the Work, including by public digital performance; to broadcast and rebroadcast the Work by any means including signs, sounds or images. "Reproduce" means to make copies of the Work by any means including without limitation by sound or visual recordings and the right of fixation and reproducing fixations of the Work, including storage of a protected performance or phonogram in digital form or other electronic medium. 2. Fair Dealing Rights. Nothing in this License is intended to reduce, limit, or restrict any uses free from copyright or rights arising from limitations or exceptions that are provided for in connection with the copyright protection under copyright law or other applicable laws. 3. License Grant. Subject to the terms and conditions of this License, Licensor hereby grants You a worldwide, royalty-free, non-exclusive, perpetual (for the duration of the applicable copyright) license to exercise the rights in the Work as stated below: to Reproduce the Work, to incorporate the Work into one or more Collections, and to Reproduce the Work as incorporated in the Collections; to create and Reproduce Adaptations provided that any such Adaptation, including any translation in any medium, takes reasonable steps to clearly label, demarcate or otherwise identify that changes were made to the original Work. For example, a translation could be marked "The original work was translated from English to Spanish," or a modification could indicate "The original work has been modified."; to Distribute and Publicly Perform the Work including as incorporated in Collections; and, to Distribute and Publicly Perform Adaptations. For the avoidance of doubt: Non-waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme cannot be waived, the Licensor reserves the exclusive right to collect such royalties for any exercise by You of the rights granted under this License; Waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme can be waived, the Licensor waives the exclusive right to collect such royalties for any exercise by You of the rights granted under this License; and, Voluntary License Schemes. The Licensor waives the right to collect royalties, whether individually or, in the event that the Licensor is a member of a collecting society that administers voluntary licensing schemes, via that society, from any exercise by You of the rights granted under this License. The above rights may be exercised in all media and formats whether now known or hereafter devised. The above rights include the right to make such modifications as are technically necessary to exercise the rights in other media and formats. Subject to Section 8(f), all rights not expressly granted by Licensor are hereby reserved. 4. Restrictions. The license granted in Section 3 above is expressly made subject to and limited by the following restrictions: You may Distribute or Publicly Perform the Work only under the terms of this License. You must include a copy of, or the Uniform Resource Identifier (URI) for, this License with every copy of the Work You Distribute or Publicly Perform. You may not offer or impose any terms on the Work that restrict the terms of this License or the ability of the recipient of the Work to exercise the rights granted to that recipient under the terms of the License. You may not sublicense the Work. You must keep intact all notices that refer to this License and to the disclaimer of warranties with every copy of the Work You Distribute or Publicly Perform. When You Distribute or Publicly Perform the Work, You may not impose any effective technological measures on the Work that restrict the ability of a recipient of the Work from You to exercise the rights granted to that recipient under the terms of the License. This Section 4(a) applies to the Work as incorporated in a Collection, but this does not require the Collection apart from the Work itself to be made subject to the terms of this License. If You create a Collection, upon notice from any Licensor You must, to the extent practicable, remove from the Collection any credit as required by Section 4(c), as requested. If You create an Adaptation, upon notice from any Licensor You must, to the extent practicable, remove from the Adaptation any credit as required by Section 4(c), as requested. You may Distribute or Publicly Perform an Adaptation only under the terms of: (i) this License; (ii) a later version of this License with the same License Elements as this License; (iii) a Creative Commons jurisdiction license (either this or a later license version) that contains the same License Elements as this License (e.g., Attribution-ShareAlike 3.0 US)); (iv) a Creative Commons Compatible License. If you license the Adaptation under one of the licenses mentioned in (iv), you must comply with the terms of that license. If you license the Adaptation under the terms of any of the licenses mentioned in (i), (ii) or (iii) (the "Applicable License"), you must comply with the terms of the Applicable License generally and the following provisions: (I) You must include a copy of, or the URI for, the Applicable License with every copy of each Adaptation You Distribute or Publicly Perform; (II) You may not offer or impose any terms on the Adaptation that restrict the terms of the Applicable License or the ability of the recipient of the Adaptation to exercise the rights granted to that recipient under the terms of the Applicable License; (III) You must keep intact all notices that refer to the Applicable License and to the disclaimer of warranties with every copy of the Work as included in the Adaptation You Distribute or Publicly Perform; (IV) when You Distribute or Publicly Perform the Adaptation, You may not impose any effective technological measures on the Adaptation that restrict the ability of a recipient of the Adaptation from You to exercise the rights granted to that recipient under the terms of the Applicable License. This Section 4(b) applies to the Adaptation as incorporated in a Collection, but this does not require the Collection apart from the Adaptation itself to be made subject to the terms of the Applicable License. If You Distribute, or Publicly Perform the Work or any Adaptations or Collections, You must, unless a request has been made pursuant to Section 4(a), keep intact all copyright notices for the Work and provide, reasonable to the medium or means You are utilizing: (i) the name of the Original Author (or pseudonym, if applicable) if supplied, and/or if the Original Author and/or Licensor designate another party or parties (e.g., a sponsor institute, publishing entity, journal) for attribution ("Attribution Parties") in Licensor's copyright notice, terms of service or by other reasonable means, the name of such party or parties; (ii) the title of the Work if supplied; (iii) to the extent reasonably practicable, the URI, if any, that Licensor specifies to be associated with the Work, unless such URI does not refer to the copyright notice or licensing information for the Work; and (iv) , consistent with Ssection 3(b), in the case of an Adaptation, a credit identifying the use of the Work in the Adaptation (e.g., "French translation of the Work by Original Author," or "Screenplay based on original Work by Original Author"). The credit required by this Section 4(c) may be implemented in any reasonable manner; provided, however, that in the case of a Adaptation or Collection, at a minimum such credit will appear, if a credit for all contributing authors of the Adaptation or Collection appears, then as part of these credits and in a manner at least as prominent as the credits for the other contributing authors. For the avoidance of doubt, You may only use the credit required by this Section for the purpose of attribution in the manner set out above and, by exercising Your rights under this License, You may not implicitly or explicitly assert or imply any connection with, sponsorship or endorsement by the Original Author, Licensor and/or Attribution Parties, as appropriate, of You or Your use of the Work, without the separate, express prior written permission of the Original Author, Licensor and/or Attribution Parties. Except as otherwise agreed in writing by the Licensor or as may be otherwise permitted by applicable law, if You Reproduce, Distribute or Publicly Perform the Work either by itself or as part of any Adaptations or Collections, You must not distort, mutilate, modify or take other derogatory action in relation to the Work which would be prejudicial to the Original Author's honor or reputation. Licensor agrees that in those jurisdictions (e.g. Japan), in which any exercise of the right granted in Section 3(b) of this License (the right to make Adaptations) would be deemed to be a distortion, mutilation, modification or other derogatory action prejudicial to the Original Author's honor and reputation, the Licensor will waive or not assert, as appropriate, this Section, to the fullest extent permitted by the applicable national law, to enable You to reasonably exercise Your right under Section 3(b) of this License (right to make Adaptations) but not otherwise. 5. Representations, Warranties and Disclaimer UNLESS OTHERWISE MUTUALLY AGREED TO BY THE PARTIES IN WRITING, LICENSOR OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS, WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED WARRANTIES, SO SUCH EXCLUSION MAY NOT APPLY TO YOU. 6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 7. Termination This License and the rights granted hereunder will terminate automatically upon any breach by You of the terms of this License. Individuals or entities who have received Adaptations or Collections from You under this License, however, will not have their licenses terminated provided such individuals or entities remain in full compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 will survive any termination of this License. Subject to the above terms and conditions, the license granted here is perpetual (for the duration of the applicable copyright in the Work). Notwithstanding the above, Licensor reserves the right to release the Work under different license terms or to stop distributing the Work at any time; provided, however that any such election will not serve to withdraw this License (or any other license that has been, or is required to be, granted under the terms of this License), and this License will continue in full force and effect unless terminated as stated above. 8. Miscellaneous Each time You Distribute or Publicly Perform the Work or a Collection, the Licensor offers to the recipient a license to the Work on the same terms and conditions as the license granted to You under this License. Each time You Distribute or Publicly Perform an Adaptation, Licensor offers to the recipient a license to the original Work on the same terms and conditions as the license granted to You under this License. If any provision of this License is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this License, and without further action by the parties to this agreement, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable. No term or provision of this License shall be deemed waived and no breach consented to unless such waiver or consent shall be in writing and signed by the party to be charged with such waiver or consent. This License constitutes the entire agreement between the parties with respect to the Work licensed here. There are no understandings, agreements or representations with respect to the Work not specified here. Licensor shall not be bound by any additional provisions that may appear in any communication from You. This License may not be modified without the mutual written agreement of the Licensor and You. The rights granted under, and the subject matter referenced, in this License were drafted utilizing the terminology of the Berne Convention for the Protection of Literary and Artistic Works (as amended on September 28, 1979), the Rome Convention of 1961, the WIPO Copyright Treaty of 1996, the WIPO Performances and Phonograms Treaty of 1996 and the Universal Copyright Convention (as revised on July 24, 1971). These rights and subject matter take effect in the relevant jurisdiction in which the License terms are sought to be enforced according to the corresponding provisions of the implementation of those treaty provisions in the applicable national law. If the standard suite of rights granted under applicable copyright law includes additional rights not granted under this License, such additional rights are deemed to be included in the License; this License is not intended to restrict the license of any rights under applicable law. malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/HACKING.md000066400000000000000000000020201505556674000231540ustar00rootroot00000000000000Terminology ----------- The main terminology used in malcontent is ‘parental controls’, which are implemented by ‘administrators’ and enforced on ‘child users’. The feature applies to a range of other carer/caree relationships, though, where the ‘caree’ user might need to be protected from doing things on the computer which aren’t suitable for them. The terminology ‘parental controls’ is used consistently, despite not all situations actually involving a parent or child, because that’s how most users will find the functionality. To remain as inclusive as possible, there are some rules about which terminology to use: - Use ‘parental controls’ to refer to the overall feature - Refer to ‘administrators’ or ‘administrator accounts’ rather than ‘parents’ - Refer to ‘child users’ in general contexts, but refer to particular user accounts using their full name — don’t mention ‘child’ in that case Reference: https://gitlab.freedesktop.org/pwithnall/malcontent/-/issues/13 malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/NEWS000066400000000000000000000374421505556674000223050ustar00rootroot00000000000000Overview of changes in malcontent 0.13.1 ======================================== * Bugs fixed: - #103 Crashes on fedora when switching from one kid's account to another's, (or any click on carousel's icons) (Philip Withnall) - !244 malcontent-control: Fix callback argument list Overview of changes in malcontent 0.13.0 ======================================== * Bugs fixed: - #48 Parental controls app: show the launcher, or merge into Settings? (Philip Withnall) - !172 Update fa.po - !173 Update Czech translation - !176 malcontent-control: Update metainfo file - !177 Update Swedish translation - !179 docs: Add list of legal references for relevant countries’ laws - !180 po: Update Slovenian translation - !181 Update Polish translation 240909 - !182 Add Chinese translation - !183 application: Fix opening Settings - !184 malcontent-control: Call setlocale() earlier to fix early i18n - !185 restrict-applications-selector: Fix pending changes being lost on search - !186 libmalcontent-ui: Port to libadwaita 1.6 - !187 app-filter: Fix logic for allowlist filtering on GAppInfo * Translation updates: - Chinese (China) (lumingzh) - Czech (AsciiWolf) - Persian (Danial Behzadi) - Polish (Piotr Drąg) - Slovenian (Martin Srebotnjak) - Swedish (Anders Jonsson) Overview of changes in malcontent 0.12.0 ======================================== * Bugs fixed: - #31 Support searching list of apps to restrict (Philip Withnall) - #53 Keynav focus disappears after GTK4 port (Philip Withnall) - #56 Confusing sentence in user-controls.ui: above, below? (Philip Withnall) - #66 mct_app_filter_is_appinfo_allowed fails when desktop entry is missing Exec key (Philip Withnall) - #68 “All Ages” option for Application Suitability is misleading (Philip Withnall) - !153 Update pt_BR translation - !157 Add AppInfo support to malcontent-client check-app-filter - !159 Update Czech translation - !160 update ru.po - !161 Update Swedish translation - !162 data: Update appdata - !163 build: Hide private structs from generated GIR files - !165 Various build and dependency cleanups for GTK 4.12 - !166 Update Turkish translation - !167 Update pt_BR translation - !168 Update Polish translation 240303 - !169 Update Hungarian translation - !170 malcontent-client: Fix syntax error in appinfo support * Translation updates: - Czech (AsciiWolf) - Hungarian (Balázs Úr) - Polish (Piotr Drąg) - Portuguese (Brazil) (Matheus Polkorny) - Russian (Ser82-png) - Swedish (Anders Jonsson) - Turkish (Sabri Ünal) Overview of changes in malcontent 0.11.1 ======================================== * Bugs fixed: - !147 0.11.0 - !148 build: Switch to Meson’s gnome.post_install function - !149 po: add Georgian translation - !150 Update Hungarian translation - !151 Update Hindi (hi) translation - !152 doc: Add Turkish Translation * Translation updates: - Georgian (NorwayFun) - Hindi (Hemish) - Hungarian (Balázs Úr) - Turkish (Sabri Unal) Overview of changes in malcontent 0.11.0 ======================================== * libmalcontent-ui, and the malcontent-control application, now use libappstream rather than appstream-glib. (#51) * libmalcontent-ui, and the malcontent-control application, now use GTK 4 and libadwaita rather than GTK+ 3. (!141) * As a result of these changes, the pkg-config name has been bumped to libmalcontent-ui-1, and the gobject-introspection name to MalcontentUi-1. * Improve keyboard navigation of the malcontent-control application. (#52) * Translation updates: - Italian - Russian Overview of changes in malcontent 0.10.5 ======================================== * Bugs fixed: - !134 Update it.po - !135 Add German help translation - !136 Update pt_BR.po - !137 Update tr.po - !138 Update Chinese (Taiwan) translation file. * Translation updates: - Chinese (Taiwan) - Italian - Portuguese (Brazil) - Turkish Overview of changes in malcontent 0.10.4 ======================================== * Bugs fixed: - !127 Update Catalan translation - !128 Update German proof-read translation from https://l10n.gnome.org/vertimus/malcontent/main/po/de/ - !129 Update it.po - !132 Remove superfluous arguments to i18n.merge_file - !133 help: Add Italian help translation * Translation updates: - Catalan - German - Italian Overview of changes in malcontent 0.10.3 ======================================== * Bugs fixed: - #44 Do not make malcontent-control user uninstallable using gui - !123 Add Czech translation - !124 Update Czech translation - !125 malcontent-control: Fix an unterminated option entry array - !126 malcontent-control: Focus controls rather than user selector * Translation updates: - Czech Overview of changes in malcontent 0.10.2 ======================================== * Hide the launcher for malcontent-control from gnome-shell if using the GNOME desktop; find it via gnome-control-center instead (!119) * Bugs fixed: - !118 ci: Limit depth of clone of subprojects - !119 malcontent-control: Hide application in GNOME - !121 ci: Rename master to main branch * Translation updates: - Indonesian - Italian Overview of changes in malcontent 0.10.1 ======================================== * Bugs fixed: - #32 App sort key does not match displayed name - !112 Update Swedish translation - !113 Update Polish translation 201220 - !116 libmalcontent-ui: Drop handling of eos-link desktop files * Translation updates: - Polish - Swedish Overview of changes in malcontent 0.10.0 ======================================== * Improve support for systems without accountsservice (#27) * Fix some data loss-causing state synchronisation problems (#18, #28) * Hide support for flatpak user repositories, as they are typically not configured on systems (#30) * Bugs fixed: - #4 Add manpage docs for malcontent-client monitor, set and oars-section commands - #13 Consider terminology of ‘parental controls’ - #15 Improving padding/spacing in malcontent-control UI - #18 Reload ‘Restrict Apps’ list when installed apps change on system - #19 Add command line option to malcontent-control to pre-select a user - #23 appdata not validating - #25 Parental controls app empty state is misleading - #27 Fails closed if accountsservice isn't available on the bus - #28 ‘Restrict Applications’ dialogue is empty if MctUserControls is created with empty app filter - #30 ‘Restrict App Installation’ tickboxes are confusing - !85 Update Ukrainian translation - !86 l10n: Update Italian translation - !87 l10n-sv - !88 Add Danish translation - !91 libmalcontent: Rationalise a couple of translatable strings - !92 Fix several issues with the app list in the restrict applications dialogue - !93 Update Ukrainian translation - !94 Update Polish translation 201018 - !96 Update Polish translation 201025 - !100 Bump appstream-glib dep and update content rating code - !101 Fix partial loss of parental controls settings when partially updating them - !102 user-controls: Only save the app filter if it’s changed - !103 malcontent-control: Add link to guidance on how to set parental controls - !104 docs: Add a development principles section to the README - !106 Update Danish translation - !107 Update Ukrainian translation - !108 Update Ukrainian translation - !109 Update Ukrainian translation - !111 accounts-service: Allow installation to the system repo by default * Translation updates: - Danish - Italian - Polish - Swedish - Ukrainian Overview of changes in malcontent 0.9.0 ======================================= * Use appstream-glib code for content rating systems if available — this adds a dependency on appstream-glib, but no particular version (see #7) * Rename three APIs in `app-filter.h` to avoid discriminatory language: - `mct_app_filter_builder_blacklist_path` → `…_blocklist_path` - `…_blacklist_flatpak_ref` → `…_blocklist_flatpak_ref` - `…_blacklist_content_type` → `…_blocklist_content_type` This is an API break. (See !72) * Add a `privileged_group` configure option to set the name of the system sudo group — it might be `sudo` or `wheel` (thanks to Sergey Shatunov; see #22) * Bugs fixed: - #7 Lift GNOME Software content rating implementation into appstream-glib, and fix it - #21 No references to homosexuality - #22 Polkit rules should use wheel group instead of sudo - !69 Two small UI tweaks - !72 tree-wide: Replace usages of whitelist/blacklist - !73 po: Update translations from downstream in Endless - !74 Update Ukrainian translation - !75 Update Polish translation 200614 - !77 all: Fix various typos and incorrect terminology - !78 build: Use meson.current_source_dir() instead of source_root() - !79 build: Re-add libglib-testing subproject - !80 Update Brazilian Portuguese translation - !81 ci: Use pre-built Docker images for CI builds - !82 subprojects: Limit depth when cloning - !83 Update Spanish translation * Translation updates: - Afrikaans - Arabic - Bangla - Basque - Bokmål, Norwegian - Bulgarian - Catalan - Catalan — valencia.UTF-8 - Chinese (Taiwan) - Croatian - Czech - Danish - Dutch - Esperanto - Finnish - French - Friulian - Gaelic - Galician - German - Greek, Modern (1453-) - Hebrew - Hindi - Hungarian - Indonesian - Italian - Kazakh - Korean - Latvian - Lithuanian - Malay - Malayalam - Occitan (post 1500) - Panjabi - Persian - Polish - Portuguese - Portuguese (Brazil) - Romanian - Russian - Serbian - Serbian — latin.UTF-8 - Slovak - Slovenian - Spanish - Swedish - Thai - Turkish - Ukrainian - Vietnamese Overview of changes in malcontent 0.8.0 ======================================= * Add user manual (!51) * Add a header bar and primary menu to the main UI (!58) * Bump Meson dependency to 0.50.0 (!59) * Fix translation of libmalcontent-ui widgets when used in other applications (!68) * Bugs fixed: - !3 Remove use of libglib-testing subproject - !50 Various meson cleanups - !51 Add user manual/documentation - !52 Update Polish translation 200329 - !53 Added Indonesian translation - !54 Update Ukrainian translation - !55 libmalcontent: Add enum types to fix introspection of MctManagerError - !56 Update Polish translation 200405 - !57 Update Ukrainian translation + docs translation - !58 malcontent-control: Add a header bar and primary menu - !59 meson: bump minimum version to 0.50.0 - !60 user-controls: Add a fallback bus connection - !62 Added Indonesian help translation - !63 Import translations from Endless - !64 Import zh_TW translation from Endless - !65 Add translator comments for about dialog strings - !66 Update Brazilian Portuguese translation - !67 Add Brazilian Portuguese translation - !68 Fix translation of libmalcontent-ui * Translation updates: - Afrikaans - Arabic - Bangla - Basque - Bokmål, Norwegian - Bulgarian - Catalan - Catalan — valencia.UTF-8 - Chinese (Taiwan) - Croatian - Czech - Danish - Dutch - Esperanto - Finnish - French - Friulian - Gaelic - Galician - German - Greek, Modern (1453-) - Hebrew - Hindi - Hungarian - Indonesian - Italian - Kazakh - Korean - Latvian - Lithuanian - Malay - Malayalam - Occitan (post 1500) - Panjabi - Persian - Polish - Portuguese - Portuguese (Brazil) - Romanian - Russian - Serbian - Serbian — latin.UTF-8 - Slovak - Slovenian - Spanish - Swedish - Thai - Turkish - Ukrainian - Vietnamese Overview of changes in malcontent 0.7.0 ======================================= * Add `-Dui` configure option to help work around circular dependency with flatpak (#16) * Add data serialization and deserialization methods for app filters and session limits (!45) * Add mct_app_filter_is_enabled() and mct_session_limits_is_enabled() APIs for determining whether filtering/limits are enabled at a high level (!47) * Bugs fixed: - #16 Circular dependency on flatpak - !35 Update Ukrainian translation - !37 Drop a few unnecessary dependencies - !39 Add Polish translation - !40 Use libglib-testing submodule only as fallback - !41 Fix typo in malcontent-client.8 - !42 docs: Update license information in README and meson.build - !43 user-controls: Make OARS drop down open to the right - !44 Fix updating the UI when a user’s locale changes - !45 Support data serialisation and deserialisation - !46 Fix papercuts when editing parental controls of current user - !47 app-filter: Add mct_app_filter_is_enabled() API - !48 Update POTFILES.in 200320 - !49 malcontent-control: Refactor bus initialisation * Translation updates: - Polish - Ukrainian Overview of changes in malcontent 0.6.0 ======================================= * Add icon for `malcontent-control` (thanks Jakub Steiner) (#9) * Redesign `malcontent-control` UI in response to design feedback (#11) * Add `AccountInfo` interface for metadata on parent accounts (!26) * Fix translation of the UI (!31) * Bugs fixed: - #9 Add icon for malcontent-control - #11 User controls UI tweaks - !26 accounts-service: Add AccountInfo interface - !27 user-selector: Fix some const-to-non-const cast warnings - !29 po: Add some missing files to POTFILES.in - !30 Add Ukrainian translation - !31 build: Fix definition of PACKAGE_LOCALE_DIR - !32 Add Brazilian Portuguese translation - !33 po: Order LINGUAS alphabetically - !34 More small UI tweaks * Translation updates: - Portuguese (Brazil) - Ukrainian Overview of changes in malcontent 0.5.0 ======================================= * Add libmalcontent-ui library for parental controls widgets * Add malcontent-control parental controls app * Add initial support for session limits (but more needs to be done) * Rename some of the commands for `malcontent-client` and rename some C APIs (but with compatibility defines) * Bugs fixed: - #6 Align GLib dependency requirements - !16 docs: Improve documentation of "app-filter-changed" signal - !18 build: Port meson-make-symlink script to Python - !19 Add session limits support and PAM module - !20 Initial version of parental controls app - !21 build: Fix default value of pamlibdir - !22 Iterate on UI of parental controls app - !23 Split widgets into separate library - !24 Allow user controls to be used for not-yet-existing users Overview of changes in malcontent 0.4.0 ======================================= * Implement `--quiet` in the `check` and `set` subcommands of `malcontent-client` to make it nicer to use from scripts (!13) * Add support for filtering apps by content type (!15) * Bugs fixed: - !2 tests: Use gdbus-codegen to drop hand-coded interface definitions - !12 libmalcontent: Add missing field initialisers to BUILDER_INIT - !13 Implement --quiet in the check and set subcommands of malcontent-client - !14 Improve README coverage of whole system design - !15 Add support to filter by content type Overview of changes in malcontent 0.3.0 ======================================= * API change for getting app filters: use `mct_manager_get_app_filter()` now, rather than `mct_get_app_filter()` (#1, !6) * Support signalling that a user’s app filter has changed using `MctManager::app-filter-changed` (#1) * Add a `MCT_APP_FILTER_ERROR_DISABLED` error to distinguish between the app filter not being installed/supported, and temporarily not working (!9) * Add a top-level header file: use `#include ` * Bugs fixed: - #1 Emit a signal when a user’s parental controls change - !5 docs: Fix NEWS entry - !6 lib: Change allow_interactive_authorization bool to flags - !7 build: Post-release version bump - !8 docs: Expand README to be more informative - !9 libmalcontent: Add MCT_APP_FILTER_ERROR_DISABLED error - !11 libmalcontent: Add a top-level header file Overview of changes in malcontent 0.2.0 ======================================= * Renamed project from eos-parental-controls to malcontent * Bugs fixed: - !1 Rename projectmalcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/README.md000066400000000000000000000135401505556674000230560ustar00rootroot00000000000000malcontent ========== malcontent implements support for restricting the type of content accessible to non-administrator accounts on a Linux system. Typically, when this is used, a non-administrator account will be for a child using the system; and the administrator accounts will be for the parents; and the content being filtered will be apps which are not suitable for the child to use, due to (for example) being too violent. It provides an [accounts-service](https://gitlab.freedesktop.org/accountsservice/accountsservice) vendor extension for storing an app filter to restrict the child’s access to certain applications; a simple library for accessing and applying the app filter; and a UI program (`malcontent-control`) for viewing and changing the parental controls settings on users. The parental controls policy is stored in `/var/lib/AccountsService/users/${user}`, which is a key file readable and writable only by the accounts-service daemon. Access to the data is mediated through accounts-service’s D-Bus interface, which libmalcontent is a client library for. All the library APIs are currently unstable and are likely to change wildly. Two kinds of policy are currently supported: * A filter specifying whether installed applications are allowed to be run; this is typically set up to restrict access to a limited set of already-installed applications — but it can be set up to only allow access to a fixed list of applications and deny access to all others. Applications which are not currently installed are not subject to this filter. * A set of mappings from [OARS categories](https://hughsie.github.io/oars/) to the maximum ratings for those categories which are permissible for a user to install apps with. For example, a mapping of `violence-realistic=mild` would prevent any applications containing more than ‘mild’ violence from being installed. Applications which are already installed are not subject to this filter. Additional policies may be added in future, such as filtering by content type or limiting the amount of time a user is allowed to use the system for. Any application or service which provides the user with access to content which should be parentally filtered is responsible for querying the user’s parental controls filter and refusing to provide the content if not permitted by the filter. This could mean refusing to launch a flatpak app, hiding a search result in gnome-shell, or hiding an app in gnome-software because of its high OARS rating. A sufficiently technically advanced user may always work around these parental controls. malcontent is not a mandatory access control (MAC) system like AppArmor or SELinux. However, its correct use by applications should provide enough of an obstacle to prevent users easily or accidentally having access to content which they shouldn’t. Development principles --- malcontent exists to make it easier for parents to responsibly set limits on what their children can do on the computer (similarly, for other carer/caree relationships). It should provide guidance on, and nudge parents towards, following the best practice for discussing, choosing and setting restrictions on their child’s computer use. Restrictions should be supported which allow giving children access to material which is appropriate to their age/stage of development, but which can restrict access to other material so they are not overwhelmed with too many, or too complex, ideas for their stage of development. Similarly, restrictions should be supported to control unsupervised communication with unknown people online, as being coerced or bullied is one of the more common harms for children online. Best practices should be research and evidence-based, and supported by large international or national childrens’ organisations or charities. They may change over time. malcontent is a tool to help with a social problem. In the hands of a bad parent, it can be used to do bad things. Features in malcontent should be designed with that in mind, such that if they are used maliciously, they should not give the parent radically more power over their child than they would have had without malcontent. Example usage --- malcontent ships a `malcontent-client` application which can be used to get and set parental controls policies for users. ``` $ # This sets the parental controls policy for user ‘philip’ to allow no \\ installation of apps with anything more than ‘none’ for realistic violence, \\ and to blocklist running the org.freedesktop.Bustle flatpak: $ malcontent-client set philip \\ violence-realistic=none \\ app/org.freedesktop.Bustle/x86_64/stable App filter for user 1000 set ``` With that policy in place, other applications which are aware of malcontent will apply the policy: ``` $ flatpak run org.freedesktop.Bustle error: Running app/org.freedesktop.Bustle/x86_64/stable is not allowed by the policy set by your administrator ``` Development ----------- When developing malcontent, you should be able to run an uninstalled version of `malcontent-client` or `malcontent-control`, as long as the polkit files from `accounts-service/` and `malcontent-control/org.freedesktop.MalcontentControl.policy.in` have been installed system-wide (typically under `/usr/share/polkit-1`) where your system copy of polkitd can find them. Dependencies ------------ * accounts-service * appstream * dbus-daemon * flatpak * gio-2.0 ≥ 2.60 * gio-unix-2.0 ≥ 2.60 * glib-2.0 ≥ 2.60 * gobject-2.0 ≥ 2.60 * gtk4 * libadwaita * polkit-gobject-1 Licensing --------- All code in the libraries in this project is licensed under LGPL-2.1+. Code in the `malcontent-control` application is licensed under GPL-2.0+. See `COPYING` and the copyright headers in individual files for more details. Bugs ---- Bug reports and patches should be filed in [GitLab](https://gitlab.freedesktop.org/pwithnall/malcontent). malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/accounts-service/000077500000000000000000000000001505556674000250515ustar00rootroot00000000000000com.endlessm.ParentalControls.AccountInfo.xml000066400000000000000000000027741505556674000356150ustar00rootroot00000000000000malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/accounts-service com.endlessm.ParentalControls.AppFilter.xml000066400000000000000000000077751505556674000353010ustar00rootroot00000000000000malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/accounts-service com.endlessm.ParentalControls.SessionLimits.xml000066400000000000000000000042641505556674000362060ustar00rootroot00000000000000malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/accounts-service com.endlessm.ParentalControls.policy.in000066400000000000000000000113411505556674000345000ustar00rootroot00000000000000malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/accounts-service Change your own app filter Authentication is required to change your app filter. auth_admin_keep auth_admin_keep auth_admin_keep Read your own app filter Authentication is required to read your app filter. yes yes yes Change another user’s app filter Authentication is required to change another user’s app filter. auth_admin_keep auth_admin_keep auth_admin_keep Read another user’s app filter Authentication is required to read another user’s app filter. auth_admin_keep auth_admin_keep auth_admin_keep Change your own session limits Authentication is required to change your session limits. auth_admin_keep auth_admin_keep auth_admin_keep Read your own session limits Authentication is required to read your session limits. yes yes yes Change another user’s session limits Authentication is required to change another user’s session limits. auth_admin_keep auth_admin_keep auth_admin_keep Read another user’s session limits Authentication is required to read another user’s session limits. auth_admin_keep auth_admin_keep auth_admin_keep Change your own account info Authentication is required to change your account info. auth_admin_keep auth_admin_keep auth_admin_keep Read your own account info Authentication is required to read your account info. yes yes yes Change another user’s account info Authentication is required to change another user’s account info. auth_admin_keep auth_admin_keep auth_admin_keep Read another user’s account info Authentication is required to read another user’s account info. yes yes yes com.endlessm.ParentalControls.rules.in000066400000000000000000000027731505556674000343440ustar00rootroot00000000000000malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/accounts-service/* * Copyright © 2019 Endless Mobile, Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * * Authors: * - Philip Withnall */ polkit.addRule(function(action, subject) { /* Allow administrators to read parental controls (for any account) without * needing an additional polkit authorisation dialogue. */ if ((action.id == "com.endlessm.ParentalControls.AppFilter.ReadOwn" || action.id == "com.endlessm.ParentalControls.AppFilter.ReadAny" || action.id == "com.endlessm.ParentalControls.SessionLimits.ReadOwn" || action.id == "com.endlessm.ParentalControls.SessionLimits.ReadAny") && subject.active && subject.local && subject.isInGroup("@PRIVILEGED_GROUP@")) { return polkit.Result.YES; } return polkit.Result.NOT_HANDLED; }); malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/accounts-service/meson.build000066400000000000000000000017161505556674000272200ustar00rootroot00000000000000i18n.merge_file( input: 'com.endlessm.ParentalControls.policy.in', output: 'com.endlessm.ParentalControls.policy', po_dir: po_dir, install: true, install_dir: polkitpolicydir, ) dbus_interfaces = [ 'com.endlessm.ParentalControls.AccountInfo', 'com.endlessm.ParentalControls.AppFilter', 'com.endlessm.ParentalControls.SessionLimits', ] foreach dbus_interface: dbus_interfaces filename = dbus_interface + '.xml' install_data(filename, install_dir: dbusinterfacesdir) meson.add_install_script(meson_make_symlink, join_paths(dbusinterfacesdir, filename), join_paths(accountsserviceinterfacesdir, filename)) endforeach polkit_conf = configuration_data() polkit_conf.set('PRIVILEGED_GROUP', get_option('privileged_group')) configure_file( input: 'com.endlessm.ParentalControls.rules.in', output: 'com.endlessm.ParentalControls.rules', configuration: polkit_conf, install_dir: join_paths(get_option('datadir'), 'polkit-1', 'rules.d') ) malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/docs/000077500000000000000000000000001505556674000225245ustar00rootroot00000000000000malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/docs/legal-references.md000066400000000000000000000010221505556674000262440ustar00rootroot00000000000000Title: Legal References SPDX-License-Identifier: LGPL-2.1-or-later SPDX-FileCopyrightText: 2024 GNOME Foundation, Inc. # Legal References The subject of parental controls in digital devices is governed by law, to some extend, in some jurisdictions. This document is a list of the ones we know about. It may not be complete, and it will grow over time. ## France * https://www.service-public.fr/particuliers/actualites/A15553?lang=en * https://www.dataguidance.com/news/france-cnils-issues-opinion-parental-access-controls malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/help/000077500000000000000000000000001505556674000225245ustar00rootroot00000000000000malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/help/C/000077500000000000000000000000001505556674000227065ustar00rootroot00000000000000malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/help/C/creating-a-child-user.page000066400000000000000000000017441505556674000276210ustar00rootroot00000000000000 Creating a child user on the computer. Creating a Child User

Parental controls can only be applied to non-administrator accounts. Such an account may have been created when the computer was initially set up. If not, a new child user may be created from the Parental Controls application if no child users already exist; and otherwise may be created from the Control Center.

To create a new child user, see Add a new user account. As soon as the new user is created, it will appear in the Parental Controls window so that its parental controls settings can be configured.

malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/help/C/index.page000066400000000000000000000012221505556674000246500ustar00rootroot00000000000000 Philip Withnall withnall@endlessm.com 2020 Parental Controls Help
Introduction & Setup
Controls to Apply
malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/help/C/internet.page000066400000000000000000000020541505556674000253750ustar00rootroot00000000000000 Restricting a child user’s access to the internet. Restricting Access to the Internet

You can restrict a user’s access to the internet. This will prevent them using a web browser, but it will not prevent them using the internet (in potentially more limited forms) through other applications. For example, it will not prevent access to e-mail accounts using Evolution, and it will not prevent software updates being downloaded and applied.

To restrict a user’s access to the internet:

Open the Parental Controls application.

Select the user in the tabs at the top.

Enable the Restrict Web Browsers checkbox.

malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/help/C/introduction.page000066400000000000000000000032311505556674000262640ustar00rootroot00000000000000 Overview of parental controls, the Parental Controls application and its use in other situations where access restrictions are needed on a user. Introduction to Parental Controls

Parental controls are a way to restrict what non-administrator accounts can do on the computer, with the aim of allowing parents to restrict what their children can do when using the computer unsupervised or under limited supervision.

This functionality can be used in other situations ­– such as other carer/caree relationships – but is labelled as ‘parental controls’ so that it’s easy to find, as that’s what most people will be looking for.

The parental controls for any user can be queried and set using the Parental Controls application. This lists the non-administrator accounts in tabs along its top bar, and shows their current parental controls settings below. Changes to the parental controls apply immediately.

Restrictions on using the computer can only be applied to non-administrator accounts. The parental controls settings for a user can only be changed by an administrator, although the administrator can do so from the user’s account by entering their password when prompted by the Parental Controls application.

malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/help/C/legal.xml000066400000000000000000000004471505556674000245210ustar00rootroot00000000000000

This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.

malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/help/C/restricting-applications.page000066400000000000000000000030171505556674000305660ustar00rootroot00000000000000 Restricting a child user from running already-installed applications. Restricting Access to Installed Applications

You can prevent a user from running specific applications which are already installed on the computer. This could be useful if other users need those applications but they are not appropriate for a child.

When installing additional software, you should consider whether that needs to be restricted for some users — newly installed software is usable by all users by default.

To restrict a user’s access to a specific application:

Open the Parental Controls application.

Select the user in the tabs at the top.

Press the Restrict Applications button.

Enable the switch in the row for each application you would like to restrict the user from accessing.

Close the Restrict Applications window.

Restricting access to specific applications is often used in conjunction with to prevent a user from installing additional software which has not been vetted.

malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/help/C/software-installation.page000066400000000000000000000064351505556674000301050ustar00rootroot00000000000000 Restricting the software a child user can install, or preventing them installing additional software entirely. Restricting Software Installation

You can prevent a user from installing additional software on the system. They will still be able to search for new software to install, but will need an administrator to authorize the installation when they try to install an application. This applies whether they are trying to install the application system-wide (for all users) or just for themselves.

Additionally, you can restrict which software a user can browse or search for in the Software catalog by age categories.

To prevent a user from running an application which has already been installed, see .

Preventing Software Installation

To prevent a user from installing additional software:

Open the Parental Controls application.

Select the user in the tabs at the top.

Enable the Restrict Application Installation checkbox.

Restricting Software Installation by Age

Applications in the Software catalog have information about content they contain which might be inappropriate for some ages — for example, various forms of violence, unmoderated chat with other people on the internet, or the possibility of spending money.

For each application, this information is summarized as the minimum age child it is typically suitable to be used by — for example, “suitable for ages 7+”. These age ratings are presented in region-specific schemes which can be compared with the ratings schemes used for films and games.

The applications shown to a user in the Software catalog can be filtered by their age suitability. Applications which are not suitable for the user will be hidden, and will not be installable by that user. They will be installable by other users (if their age suitability is set high enough).

To filter the applications seen by a user in the Software catalog to only those suitable for a certain age:

Open the Parental Controls application.

Select the user in the tabs at the top.

In the Application Suitability list, select the age which applications should be suitable for.

The user’s actual age is not stored, so the Application Suitability is not automatically updated over time as the child grows older. You must periodically re-assess the appropriate Application Suitability for each user.

malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/help/LINGUAS000066400000000000000000000001251505556674000235470ustar00rootroot00000000000000# please keep this list sorted alphabetically da de es hu id it pl pt_BR ru sv tr uk malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/help/da/000077500000000000000000000000001505556674000231105ustar00rootroot00000000000000malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/help/da/da.po000066400000000000000000000455011505556674000240410ustar00rootroot00000000000000# Danish translation for malcontent. # Copyright (C) 2020 malcontent's COPYRIGHT HOLDER # This file is distributed under the same license as the malcontent package. # scootergrisen, 2020. # scootergrisen: oversættelsen er ikke afprøvet msgid "" msgstr "" "Project-Id-Version: malcontent master\n" "POT-Creation-Date: 2020-10-11 03:28+0000\n" "PO-Revision-Date: 2020-11-18 00:00+0200\n" "Last-Translator: scootergrisen\n" "Language-Team: Danish\n" "Language: da\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #. Put one translator per line, in the form NAME , YEAR1, YEAR2 msgctxt "_" msgid "translator-credits" msgstr "scootergrisen <>, 2020" #. (itstool) path: info/desc #: C/creating-a-child-user.page:6 msgid "Creating a child user on the computer." msgstr "Oprettelse af en barnebruger på computeren." #. (itstool) path: page/title #: C/creating-a-child-user.page:9 msgid "Creating a Child User" msgstr "Oprettelse af en barnebruger" #. (itstool) path: page/p #: C/creating-a-child-user.page:11 msgid "" "Parental controls can only be applied to non-administrator accounts. Such an " "account may have been created when the computer was initially set up. If " "not, a new child user may be created from the Parental Controls " "application if no child users already exist; and otherwise may be created " "from the Control Center." msgstr "" "Forældrestyring kan kun anvendes på konti som ikke er administrator. En " "sådan konto kan være blevet oprettet, første gang computeren blev opsat. Er " "det ikke tilfældet, så kan der oprettes en ny barnebruger i programmet " "Forældrestyring, hvis der ikke allerede findes en barnebruger, " "ellers kan den oprettes i Kontrolpanel." #. (itstool) path: page/p #: C/creating-a-child-user.page:17 msgid "" "To create a new child user, see Add a new user account. As soon as the new user is " "created, it will appear in the Parental Controls window so that " "its parental controls settings can be configured." msgstr "" "Se Tilføj en ny brugerkonto, for at oprette en ny barnebruger. Den nye bruger vises i " "vinduet Forældrestyring, så snart den er oprettet, så dens " "forældrestyringsindstillinger kan konfigureres." #. (itstool) path: credit/name #: C/index.page:6 msgid "Philip Withnall" msgstr "Philip Withnall" #. (itstool) path: credit/years #: C/index.page:8 msgid "2020" msgstr "2020" #. (itstool) path: page/title #: C/index.page:12 msgid "Parental Controls Help" msgstr "Hjælp til Forældrestyring" #. (itstool) path: section/title #: C/index.page:15 msgid "Introduction & Setup" msgstr "Introduktion og opsætning" #. (itstool) path: section/title #: C/index.page:19 msgid "Controls to Apply" msgstr "Styring som kan anvendes" #. (itstool) path: info/desc #: C/internet.page:6 msgid "Restricting a child user’s access to the internet." msgstr "Begrænsning af en barnebrugers adgang til internettet." #. (itstool) path: page/title #: C/internet.page:9 msgid "Restricting Access to the Internet" msgstr "Begrænsning af adgang til internettet" #. (itstool) path: page/p #: C/internet.page:11 msgid "" "You can restrict a user’s access to the internet. This will prevent them " "using a web browser, but it will not prevent them using the internet (in " "potentially more limited forms) through other applications. For example, it " "will not prevent access to e-mail accounts using Evolution, and " "it will not prevent software updates being downloaded and applied." msgstr "" "Du kan begrænse en brugers adgang til internettet. Det forhindrer dem i at " "bruge en webbrowser, men det forhindrer dem ikke i at bruge internettet (i " "potentielt mere begrænset form) gennem andre programmer. Det vil f.eks. " "ikke forhindre adgang til e-mailkonti med Evolution og det " "forhindrer ikke softwareopdateringer i at blive downloadet og installeret." #. (itstool) path: page/p #: C/internet.page:17 msgid "To restrict a user’s access to the internet:" msgstr "Sådan begrænses en brugers adgang til internettet:" #. (itstool) path: item/p #: C/internet.page:19 C/restricting-applications.page:20 #: C/software-installation.page:27 C/software-installation.page:64 msgid "Open the Parental Controls application." msgstr "Åbn programmet Forældrestyring." #. (itstool) path: item/p #: C/internet.page:20 C/restricting-applications.page:21 #: C/software-installation.page:28 C/software-installation.page:65 msgid "Select the user in the tabs at the top." msgstr "Vælg brugeren i fanebladene øverst." #. (itstool) path: item/p #: C/internet.page:21 msgid "" "Enable the Restrict Web Browsers checkbox." msgstr "" "Aktivér afkrydsningsboksen Begræns webbrowsere." #. (itstool) path: info/desc #: C/introduction.page:6 msgid "" "Overview of parental controls and the Parental Controls " "application." msgstr "Overblik over forældrestyring og programmet Forældrestyring." #. (itstool) path: page/title #: C/introduction.page:10 msgid "Introduction to Parental Controls" msgstr "Introduktion til Forældrestyring" #. (itstool) path: page/p #: C/introduction.page:12 msgid "" "Parental controls are a way to restrict what non-administrator accounts can " "do on the computer, with the aim of allowing parents to restrict what their " "children can do when using the computer unsupervised or under limited " "supervision." msgstr "" "Forældrestyring er et måde til at begrænse, hvad konti, som ikke er " "administrator, kan gøre på computeren med det mål at give forældre mulighed " "for at begrænse, hvad deres børn kan, når de bruger computeren uden opsyn " "eller under begrænset opsyn." # scootergrisen: fra gennemlæsning: det skal nok ikke forstås som en plejesituation som på et plejehjem, men som et forhold mellem dem, der bestemmer, og dem der bliver bestemt over # scootergrisen: fra gennemlæsning: Prøv med: såsom andre forhold mellem myndige og umyndige #. (itstool) path: page/p #: C/introduction.page:16 msgid "" "This functionality can be used in other situations ­– such as other carer/" "caree relationships – but is labelled as ‘parental controls’ so that it’s " "easy to find." msgstr "" "Funktionaliteten kan bruges i andre situationer ­– såsom et andet forhold mellem " "plejer og plejede – men kaldes ‘forældrestyring’ for at det skal være let at finde." #. (itstool) path: page/p #: C/introduction.page:19 msgid "" "The parental controls for any user can be queried and set using the " "Parental Controls application. This lists the non-administrator " "accounts in tabs along its top bar, and shows their current parental " "controls settings below. Changes to the parental controls apply immediately." msgstr "" "Forældrestyringen kan for alle brugere forespørges og indstilles med " "programmet Forældrestyring. Det viser de konti, som ikke er " "administrator, i faneblade langs den øverste linje og viser deres nuværende " "forældrestyringsindstillinger nedenfor. Ændringer til forældrestyringen " "anvendes straks." #. (itstool) path: page/p #: C/introduction.page:23 msgid "" "Restrictions on using the computer can only be applied to non-administrator " "accounts. The parental controls settings for a user can only be changed by " "an administrator, although the administrator can do so from the user’s " "account by entering their password when prompted by the Parental " "Controls application." msgstr "" "Begrænsninger i at bruge computeren kan kun anvendes på konti som ikke er " "administrator. Forældrestyringsindstillingerne til en bruger kan kun ændres " "af en administrator, dog kan administratoren gøre det fra brugerens konto " "ved at indtaste deres adgangskode når de bliver spurgt om det i programmet " "Forældrestyring." #. (itstool) path: p/link #: C/legal.xml:4 msgid "Creative Commons Attribution-ShareAlike 3.0 Unported License" msgstr "" "Creative Commons Kreditering-Deling på samme vilkår 3.0 Ikke porteret-licens" #. (itstool) path: license/p #: C/legal.xml:3 msgid "This work is licensed under a <_:link-1/>." msgstr "Værket er licenseret under en <_:link-1/>." #. (itstool) path: info/desc #: C/restricting-applications.page:6 msgid "Restricting a child user from running already-installed applications." msgstr "" "Begrænsning af en barnebruger i at køre programmer som allerede er " "installeret." #. (itstool) path: page/title #: C/restricting-applications.page:9 msgid "Restricting Access to Installed Applications" msgstr "Begrænsning af adgang til installerede programmer" #. (itstool) path: page/p #: C/restricting-applications.page:11 msgid "" "You can prevent a user from running specific applications which are already " "installed on the computer. This could be useful if other users need those " "applications but they are not appropriate for a child." msgstr "" "Du kan forhindre en bruger i at køre bestemte programmer som allerede er " "installeret på computeren. Det kan være nyttigt hvis andre brugere har brug " "for de programmet men de ikke er egnet til et barn." #. (itstool) path: page/p #: C/restricting-applications.page:14 msgid "" "When installing additional software, you should consider whether that needs " "to be restricted for some users — newly installed software is usable by all " "users by default." msgstr "" "Når der installeres yderligere software bør du overveje om det skal " "begrænses til nogle brugere — nyligt " "installeret software kan bruges af alle brugere som standard." #. (itstool) path: page/p #: C/restricting-applications.page:18 msgid "To restrict a user’s access to a specific application:" msgstr "Sådan begrænses en brugers adgang til et bestemt program:" #. (itstool) path: item/p #: C/restricting-applications.page:22 msgid "Press the Restrict Applications button." msgstr "Tryk på knappen Begræns programmer." #. (itstool) path: item/p #: C/restricting-applications.page:23 msgid "" "Enable the switch in the row for each application you would like to restrict " "the user from accessing." msgstr "" "Aktivér kontakten i rækken ved de programmer du vil begrænse brugeren i at få " "adgang til." #. (itstool) path: item/p #: C/restricting-applications.page:24 msgid "Close the Restrict Applications window." msgstr "Luk vinduet Begræns programmer." #. (itstool) path: page/p #: C/restricting-applications.page:27 msgid "" "Restricting access to specific applications is often used in conjunction " "with to prevent a user from " "installing additional software which has not been vetted." msgstr "" "Begrænsning af adgang til bestemte programmer bruges ofte sammen med for at forhindre en bruger i at installere " "yderligere software som ikke er blevet undersøgt." # scootergrisen: her er både "Restricting" og "preventing" brugt # scootergrisen: så måske de ikke begge skal være samme ord #. (itstool) path: info/desc #: C/software-installation.page:6 msgid "" "Restricting the software a child user can install, or preventing them " "installing additional software entirely." msgstr "" "Begrænsning af den software en barnebruger kan installere eller helt forhindre " "dem i at installere yderligere software." #. (itstool) path: page/title #: C/software-installation.page:9 msgid "Restricting Software Installation" msgstr "Begrænsning af softwareinstallation" #. (itstool) path: page/p #: C/software-installation.page:11 msgid "" "You can prevent a user from installing additional software, either for the " "entire system, or just for themselves. They will still be able to search for " "new software to install, but will need an administrator to authorize the " "installation when they try to install an application." msgstr "" "Du kan forhindre en bruger i at installere yderligere software, enten for " "hele systemet eller blot sig selv. De vil stadigvæk være i stand til at søge " "efter ny software der skal installeres, men en administrator skal godkende " "installationen når de forsøger at installere et program." #. (itstool) path: page/p #: C/software-installation.page:16 msgid "" "Additionally, you can restrict which software a user can browse or search " "for in the Software catalog by age categories." msgstr "" "Derudover kan du begrænse, hvilken software en bruger kan gennemse eller søge " "efter i Software-kataloget efter aldersgruppekategorier." #. (itstool) path: page/p #: C/software-installation.page:19 msgid "" "To prevent a user from running an application which has already been " "installed, see ." msgstr "" "For at forhindre en bruger i at køre et program som allerede er blevet " "installeret, se ." #. (itstool) path: section/title #: C/software-installation.page:23 msgid "Preventing Software Installation" msgstr "Forhindring af softwareinstallation" #. (itstool) path: section/p #: C/software-installation.page:25 msgid "To prevent a user from installing additional software:" msgstr "Sådan forhindres en bruger i at installere yderligere software:" #. (itstool) path: item/p #: C/software-installation.page:29 msgid "" "Enable the Restrict Application Installation " "checkbox." msgstr "" "Aktivér afkrydsningsboksen Begræns " "programinstallation." #. (itstool) path: item/p #: C/software-installation.page:30 msgid "" "Or enable the Restrict Application Installation for " "Others checkbox." msgstr "" "Eller aktivér afkrydsningsboksen Begræns " "programinstallation for andre." #. (itstool) path: section/p #: C/software-installation.page:33 msgid "" "The Restrict Application Installation for Others checkbox allows the user to install additional software for themselves, " "but prevents that software from being made available to other users. It " "could be used, for example, if there were two child users, one of whom is " "mature enough to be allowed to install additional software, but the other " "isn’t — enabling Restrict Application Installation " "for Others would prevent the more mature child from installing " "applications which are inappropriate for the other child and making them " "available to the other child." msgstr "" "Afkrydsningsboksen Begræns programinstallation for " "andre giver brugeren mulighed for at installere yderligere software " "til sig selv, men forhindrer softwaren i at blive gjort tilgængelig for andre " "brugere. Det kan f.eks. bruges, hvis der er to barnebrugere, hvoraf en af dem " "er moden nok til at få tilladelse til at installere yderligere software, men " "den anden ikke er — hvis Begræns programinstallation " "for andre tillades vil det forhindre det modne barn i at installere " "programmer, som kan være uegnet for det andet barn og gøre dem tilgængelige " "for det andet barn." #. (itstool) path: section/title #: C/software-installation.page:45 msgid "Restricting Software Installation by Age" msgstr "Begrænsning af softwareinstallation efter aldersgruppe" # scootergrisen: find god oversættelse af "unmoderated" #. (itstool) path: section/p #: C/software-installation.page:47 msgid "" "Applications in the Software catalog have information about " "content they contain which might be inappropriate for some ages — for " "example, various forms of violence, unmoderated chat with other people on " "the internet, or the possibility of spending money." msgstr "" "Programmer i Software-kataloget har information om deres indhold " "som kan være uegnet til nogle aldersgrupper — f.eks. diverse former for " "vold, umodereret chat med andre personer på internettet eller muligheden for " "at bruge penge." # scootergrisen: find ud af hvordan "suitable for ages 7+" er oversat andet sted #. (itstool) path: section/p #: C/software-installation.page:51 msgid "" "For each application, this information is summarized as the minimum age " "child it is typically suitable to be used by — for example, “suitable for " "ages 7+”. These age ratings are presented in region-specific schemes which " "can be compared with the ratings schemes used for films and games." msgstr "" "Informationen er opsummeret i hvert program som den laveste alder for børn " "det typisk er egnet for at blive brugt af — f.eks. “suitable for ages 7+”. " "Disse aldersvurderinger præsenteres i områdespecifikke modeller som kan " "sammenlignes med de vurderingsmodeller som bruges til film og spil." # scootergrisen: tjek "age suitability". Findes to gange #. (itstool) path: section/p #: C/software-installation.page:55 msgid "" "The applications shown to a user in the Software catalog can be " "filtered by their age suitability. Applications which are not suitable for " "the user will be hidden, and will not be installable by that user. They will " "be installable by other users (if their age suitability is set high enough)." msgstr "" "De programmer, som vises til en bruger i Software-kataloget, kan " "filtreres efter den aldersgruppe, de er egnet til. Programmer, som ikke er " "egnet til brugeren, skjules og kan ikke installeres af den bruger. De kan " "installeres af andre brugere (hvis aldersgruppen de er egnet til er " "indstillet højt nok)." #. (itstool) path: section/p #: C/software-installation.page:61 msgid "" "To filter the applications seen by a user in the Software catalog " "to only those suitable for a certain age:" msgstr "" "Sådan filtreres de programmer en bruger kan se i " "Software-kataloget til dem der kun er egnet til en bestemt " "aldersgruppe:" #. (itstool) path: item/p #: C/software-installation.page:66 msgid "" "In the Application Suitability list, select the age which " "applications should be suitable for." msgstr "" "Vælg den aldersgruppe som programmerne " "skal være egnet til i listen Programegnethed." #. (itstool) path: note/p #: C/software-installation.page:70 msgid "" "The user’s actual age is not stored, so the Application Suitability is not automatically updated over time as the child grows older. You " "must periodically re-assess the appropriate Application Suitability for each user." msgstr "" "Brugerens rigtige alder gemmes ikke, så Programegnethed opdateres " "ikke automatisk efterhånden som barnet bliver ældre. Du skal periodisk " "revurdere den passende Programegnethed til hver bruger." malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/help/de/000077500000000000000000000000001505556674000231145ustar00rootroot00000000000000malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/help/de/de.po000066400000000000000000000312031505556674000240430ustar00rootroot00000000000000# German translation for malcontent. # Copyright (C) 2021 malcontent's COPYRIGHT HOLDER # This file is distributed under the same license as the malcontent package. # Christian Kirbach , 2021. # msgid "" msgstr "" "Project-Id-Version: malcontent main\n" "POT-Creation-Date: 2021-12-29 15:34+0000\n" "PO-Revision-Date: 2021-12-31 13:36+0100\n" "Last-Translator: Tim Sabsch \n" "Language-Team: German \n" "Language: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Poedit 3.0\n" #. Put one translator per line, in the form NAME , YEAR1, YEAR2 msgctxt "_" msgid "translator-credits" msgstr "Christian Kirbach , 2021." #. (itstool) path: info/desc #: C/creating-a-child-user.page:6 msgid "Creating a child user on the computer." msgstr "So legen Sie ein Kinderkonto auf dem Rechner an." #. (itstool) path: page/title #: C/creating-a-child-user.page:9 msgid "Creating a Child User" msgstr "Ein Kinderkonto anlegen" #. (itstool) path: page/p #: C/creating-a-child-user.page:11 msgid "" "Parental controls can only be applied to non-administrator accounts. Such an " "account may have been created when the computer was initially set up. If " "not, a new child user may be created from the Parental Controls " "application if no child users already exist; and otherwise may be created " "from the Control Center." msgstr "" "Die Kindersicherung kann für alle Konten außer Administrator-Konten " "eingerichtet werden. Ein solches Konto wurde vermutlich bei der " "Ersteinrichtung des Rechners angelegt. Falls nicht, können Sie ein neues " "Kinderkonto in der Anwendung Kindersicherung anlegen, und " "alternativ in den Einstellungen." #. (itstool) path: page/p #: C/creating-a-child-user.page:17 msgid "" "To create a new child user, see Add a new user account. As soon as the new user is " "created, it will appear in the Parental Controls window so that " "its parental controls settings can be configured." msgstr "" "Folgen Sie den Anweisungen Ein neues Benutzerkonto anlegen, um ein neues Kinderkonto " "anzulegen. Sobald der neue Benutzer angelegt wurde, erscheint er im Fenster " "von Kindersicherung. Die Einrichtung der Kindersicherung wird " "dort durchgeführt." #. (itstool) path: credit/name #: C/index.page:6 msgid "Philip Withnall" msgstr "Philip Withnall" #. (itstool) path: credit/years #: C/index.page:8 msgid "2020" msgstr "2020" #. (itstool) path: page/title #: C/index.page:12 msgid "Parental Controls Help" msgstr "Hilfe zur Kindersicherung" #. (itstool) path: section/title #: C/index.page:15 msgid "Introduction & Setup" msgstr "Einführung und Einrichtung" #. (itstool) path: section/title #: C/index.page:19 msgid "Controls to Apply" msgstr "" #. (itstool) path: info/desc #: C/internet.page:6 msgid "Restricting a child user’s access to the internet." msgstr "Den Internet-Zugang eines Kinderkontos einschränken." #. (itstool) path: page/title #: C/internet.page:9 msgid "Restricting Access to the Internet" msgstr "Den Zugriff auf das Internet einschränken" #. (itstool) path: page/p #: C/internet.page:11 msgid "" "You can restrict a user’s access to the internet. This will prevent them " "using a web browser, but it will not prevent them using the internet (in " "potentially more limited forms) through other applications. For example, it " "will not prevent access to e-mail accounts using Evolution, and " "it will not prevent software updates being downloaded and applied." msgstr "" #. (itstool) path: page/p #: C/internet.page:17 msgid "To restrict a user’s access to the internet:" msgstr "So schränken Sie den Internet-Zugang eines Kinderkontos ein:" #. (itstool) path: item/p #: C/internet.page:19 C/restricting-applications.page:20 #: C/software-installation.page:28 C/software-installation.page:54 msgid "Open the Parental Controls application." msgstr "Öffnen Sie die Anwendung Kindersicherung." #. (itstool) path: item/p #: C/internet.page:20 C/restricting-applications.page:21 #: C/software-installation.page:29 C/software-installation.page:55 msgid "Select the user in the tabs at the top." msgstr "Wählen Sie den Benutzer oben in den Reitern." #. (itstool) path: item/p #: C/internet.page:21 msgid "" "Enable the Restrict Web Browsers checkbox." msgstr "" "Aktivieren Sie das Ankreuzfeld Web-Browser " "einschränken." #. (itstool) path: info/desc #: C/introduction.page:6 msgid "" "Overview of parental controls, the Parental Controls application " "and its use in other situations where access restrictions are needed on a " "user." msgstr "" #. (itstool) path: page/title #: C/introduction.page:12 msgid "Introduction to Parental Controls" msgstr "Einführung in die Kindersicherung" #. (itstool) path: page/p #: C/introduction.page:14 msgid "" "Parental controls are a way to restrict what non-administrator accounts can " "do on the computer, with the aim of allowing parents to restrict what their " "children can do when using the computer unsupervised or under limited " "supervision." msgstr "" #. (itstool) path: page/p #: C/introduction.page:18 msgid "" "This functionality can be used in other situations ­– such as other carer/" "caree relationships – but is labelled as ‘parental controls’ so that it’s " "easy to find, as that’s what most people will be looking for." msgstr "" #. (itstool) path: page/p #: C/introduction.page:21 msgid "" "The parental controls for any user can be queried and set using the " "Parental Controls application. This lists the non-administrator " "accounts in tabs along its top bar, and shows their current parental " "controls settings below. Changes to the parental controls apply immediately." msgstr "" #. (itstool) path: page/p #: C/introduction.page:25 msgid "" "Restrictions on using the computer can only be applied to non-administrator " "accounts. The parental controls settings for a user can only be changed by " "an administrator, although the administrator can do so from the user’s " "account by entering their password when prompted by the Parental " "Controls application." msgstr "" #. (itstool) path: p/link #: C/legal.xml:4 msgid "Creative Commons Attribution-ShareAlike 3.0 Unported License" msgstr "Creative Commons Attribution-ShareAlike 3.0 Unported License" #. (itstool) path: license/p #: C/legal.xml:3 msgid "This work is licensed under a <_:link-1/>." msgstr "Dieses Werk wird unter einer <_:link-1/> verbreitet." #. (itstool) path: info/desc #: C/restricting-applications.page:6 msgid "Restricting a child user from running already-installed applications." msgstr "" #. (itstool) path: page/title #: C/restricting-applications.page:9 msgid "Restricting Access to Installed Applications" msgstr "Den Zugriff auf installierte Anwendungen einschränken" #. (itstool) path: page/p #: C/restricting-applications.page:11 msgid "" "You can prevent a user from running specific applications which are already " "installed on the computer. This could be useful if other users need those " "applications but they are not appropriate for a child." msgstr "" "Sie können Benutzer daran hindern, bestimmte Anwendungen auszuführen, die " "auf dem Rechner installiert sind. Dies ist nützlich, wenn andere Benutzer " "die Anwendungen benötigen, diese aber nicht für Kinder geeignet sind." #. (itstool) path: page/p #: C/restricting-applications.page:14 msgid "" "When installing additional software, you should consider whether that needs " "to be restricted for some users — newly installed software is usable by all " "users by default." msgstr "" "Wenn Sie weitere Software installieren, sollten Sie berücksichtigen, ob sie " "für einige Benutzer eingeschränkt werden muss. Neu installierte Software ist " "standardmäßig für alle Benutzer nutzbar." #. (itstool) path: page/p #: C/restricting-applications.page:18 msgid "To restrict a user’s access to a specific application:" msgstr "" "So schränken Sie den Zugriff eines Benutzers auf bestimmte Anwendungen ein:" #. (itstool) path: item/p #: C/restricting-applications.page:22 msgid "Press the Restrict Applications button." msgstr "" #. (itstool) path: item/p #: C/restricting-applications.page:23 msgid "" "Enable the switch in the row for each application you would like to restrict " "the user from accessing." msgstr "" #. (itstool) path: item/p #: C/restricting-applications.page:24 msgid "Close the Restrict Applications window." msgstr "" #. (itstool) path: page/p #: C/restricting-applications.page:27 msgid "" "Restricting access to specific applications is often used in conjunction " "with to prevent a user from " "installing additional software which has not been vetted." msgstr "" #. (itstool) path: info/desc #: C/software-installation.page:6 msgid "" "Restricting the software a child user can install, or preventing them " "installing additional software entirely." msgstr "" #. (itstool) path: page/title #: C/software-installation.page:9 msgid "Restricting Software Installation" msgstr "Software-Installation einschränken" #. (itstool) path: page/p #: C/software-installation.page:11 msgid "" "You can prevent a user from installing additional software on the system. " "They will still be able to search for new software to install, but will need " "an administrator to authorize the installation when they try to install an " "application. This applies whether they are trying to install the application " "system-wide (for all users) or just for themselves." msgstr "" #. (itstool) path: page/p #: C/software-installation.page:17 msgid "" "Additionally, you can restrict which software a user can browse or search " "for in the Software catalog by age categories." msgstr "" #. (itstool) path: page/p #: C/software-installation.page:20 msgid "" "To prevent a user from running an application which has already been " "installed, see ." msgstr "" #. (itstool) path: section/title #: C/software-installation.page:24 msgid "Preventing Software Installation" msgstr "" #. (itstool) path: section/p #: C/software-installation.page:26 msgid "To prevent a user from installing additional software:" msgstr "" #. (itstool) path: item/p #: C/software-installation.page:30 msgid "" "Enable the Restrict Application Installation " "checkbox." msgstr "" #. (itstool) path: section/title #: C/software-installation.page:35 msgid "Restricting Software Installation by Age" msgstr "" #. (itstool) path: section/p #: C/software-installation.page:37 msgid "" "Applications in the Software catalog have information about " "content they contain which might be inappropriate for some ages — for " "example, various forms of violence, unmoderated chat with other people on " "the internet, or the possibility of spending money." msgstr "" #. (itstool) path: section/p #: C/software-installation.page:41 msgid "" "For each application, this information is summarized as the minimum age " "child it is typically suitable to be used by — for example, “suitable for " "ages 7+”. These age ratings are presented in region-specific schemes which " "can be compared with the ratings schemes used for films and games." msgstr "" #. (itstool) path: section/p #: C/software-installation.page:45 msgid "" "The applications shown to a user in the Software catalog can be " "filtered by their age suitability. Applications which are not suitable for " "the user will be hidden, and will not be installable by that user. They will " "be installable by other users (if their age suitability is set high enough)." msgstr "" #. (itstool) path: section/p #: C/software-installation.page:51 msgid "" "To filter the applications seen by a user in the Software catalog " "to only those suitable for a certain age:" msgstr "" #. (itstool) path: item/p #: C/software-installation.page:56 msgid "" "In the Application Suitability list, select the age which " "applications should be suitable for." msgstr "" #. (itstool) path: note/p #: C/software-installation.page:60 msgid "" "The user’s actual age is not stored, so the Application Suitability is not automatically updated over time as the child grows older. You " "must periodically re-assess the appropriate Application Suitability for each user." msgstr "" malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/help/es/000077500000000000000000000000001505556674000231335ustar00rootroot00000000000000malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/help/es/es.po000066400000000000000000000450071505556674000241100ustar00rootroot00000000000000# Spanish translations for malcontent. # Copyright © 2020 the malcontent authors. # This file is distributed under the same license as the malcontent package. # Adolfo Jayme Barrientos , 2020. # msgid "" msgstr "" "Project-Id-Version: malcontent master\n" "POT-Creation-Date: 2020-04-24 15:30+0000\n" "PO-Revision-Date: 2020-08-22 09:41-0500\n" "Last-Translator: Adolfo Jayme Barrientos \n" "Language-Team: \n" "Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Poedit 2.4.1\n" #. Put one translator per line, in the form NAME , YEAR1, YEAR2 msgctxt "_" msgid "translator-credits" msgstr "Adolfo Jayme Barrientos , 2020" #. (itstool) path: info/desc #: C/creating-a-child-user.page:6 msgid "Creating a child user on the computer." msgstr "Crear una cuenta infantil en el equipo." #. (itstool) path: page/title #: C/creating-a-child-user.page:9 msgid "Creating a Child User" msgstr "Crear una cuenta infantil" #. (itstool) path: page/p #: C/creating-a-child-user.page:11 msgid "" "Parental controls can only be applied to non-administrator accounts. Such an " "account may have been created when the computer was initially set up. If " "not, a new child user may be created from the Parental Controls " "application if no child users already exist; and otherwise may be created " "from the Control Center." msgstr "" "Los controles parentales pueden aplicarse únicamente a las cuentas no " "administrativas. Puede que se haya creado una cuenta de este tipo al momento " "de la configuración inicial del equipo. Si no es así, es posible crear una " "cuenta infantil nueva desde la aplicación Controles parentales o " "mediante la Configuración." #. (itstool) path: page/p #: C/creating-a-child-user.page:17 msgid "" "To create a new child user, see Add a new user account. As soon as the new user is " "created, it will appear in the Parental Controls window so that " "its parental controls settings can be configured." msgstr "" "Para crear una cuenta infantil, consulte Añadir una cuenta de usuario nueva. Tan pronto " "como haya creado la cuenta nueva, esta figurará en la ventana de " "Controles parentales para que puedan definirse sus " "configuraciones de control parental." #. (itstool) path: credit/name #: C/index.page:6 msgid "Philip Withnall" msgstr "Philip Withnall" #. (itstool) path: credit/years #: C/index.page:8 msgid "2020" msgstr "2020" #. (itstool) path: page/title #: C/index.page:12 msgid "Parental Controls Help" msgstr "Ayuda sobre los controles parentales" #. (itstool) path: section/title #: C/index.page:15 msgid "Introduction & Setup" msgstr "Introducción y configuración" #. (itstool) path: section/title #: C/index.page:19 msgid "Controls to Apply" msgstr "Controles para aplicar" #. (itstool) path: info/desc #: C/internet.page:6 msgid "Restricting a child user’s access to the internet." msgstr "Restringir el acceso a Internet por parte de un menor" #. (itstool) path: page/title #: C/internet.page:9 msgid "Restricting Access to the Internet" msgstr "Restringir el acceso a Internet" #. (itstool) path: page/p #: C/internet.page:11 msgid "" "You can restrict a user’s access to the internet. This will prevent them " "using a web browser, but it will not prevent them using the internet (in " "potentially more limited forms) through other applications. For example, it " "will not prevent access to e-mail accounts using Evolution, and " "it will not prevent software updates being downloaded and applied." msgstr "" "Es posible restringir el acceso de un usuario a Internet. Esto le impedirá " "utilizar un navegador web, pero no restringirá la conexión a Internet de " "otras aplicaciones. Por ejemplo, no impedirá el acceso a las cuentas de " "correo electrónico mediante Evolution, ni impedirá la descarga y " "aplicación de actualizaciones de software." #. (itstool) path: page/p #: C/internet.page:17 msgid "To restrict a user’s access to the internet:" msgstr "Para restringir el acceso de un usuario a Internet:" #. (itstool) path: item/p #: C/internet.page:19 C/restricting-applications.page:20 #: C/software-installation.page:27 C/software-installation.page:64 msgid "Open the Parental Controls application." msgstr "Abra la aplicación Controles parentales." #. (itstool) path: item/p #: C/internet.page:20 C/restricting-applications.page:21 #: C/software-installation.page:28 C/software-installation.page:65 msgid "Select the user in the tabs at the top." msgstr "En las pestañas de la parte superior, seleccione la cuenta deseada." #. (itstool) path: item/p #: C/internet.page:21 msgid "" "Enable the Restrict Web Browsers checkbox." msgstr "" "Active la casilla Restringir navegadores web." #. (itstool) path: info/desc #: C/introduction.page:6 msgid "" "Overview of parental controls and the Parental Controls " "application." msgstr "" "Visión de conjunto de los controles parentales y la aplicación " "Controles parentales." #. (itstool) path: page/title #: C/introduction.page:10 msgid "Introduction to Parental Controls" msgstr "Introducción al control parental" #. (itstool) path: page/p #: C/introduction.page:12 msgid "" "Parental controls are a way to restrict what non-administrator accounts can " "do on the computer, with the aim of allowing parents to restrict what their " "children can do when using the computer unsupervised or under limited " "supervision." msgstr "" "Los controles parentales representan una manera de restringir lo que las " "cuentas no administrativas pueden efectuar en el equipo, con el objetivo de " "permitir que los padres restrinjan las acciones de sus hijos al utilizar el " "equipo sin supervisión o bajo supervisión limitada." #. (itstool) path: page/p #: C/introduction.page:16 msgid "" "This functionality can be used in other situations ­– such as other carer/" "caree relationships – but is labelled as ‘parental controls’ so that it’s " "easy to find." msgstr "" "Esta funcionalidad puede ser de utilidad en otras situaciones —como las " "relaciones entre cuidadores y tutelados—, pero se denomina «controles " "parentales» para facilitar su localización." #. (itstool) path: page/p #: C/introduction.page:19 msgid "" "The parental controls for any user can be queried and set using the " "Parental Controls application. This lists the non-administrator " "accounts in tabs along its top bar, and shows their current parental " "controls settings below. Changes to the parental controls apply immediately." msgstr "" "La aplicación Controles parentales permite realizar consultas " "sobre cualquier cuenta y definir controles por cada una. La aplicación " "enumera todas las cuentas no administrativas en forma de pestañas en la " "barra superior de la ventana, y por debajo muestra los controles definidos " "actualmente. Las modificaciones a los controles parentales surten efecto de " "inmediato." #. (itstool) path: page/p #: C/introduction.page:23 msgid "" "Restrictions on using the computer can only be applied to non-administrator " "accounts. The parental controls settings for a user can only be changed by " "an administrator, although the administrator can do so from the user’s " "account by entering their password when prompted by the Parental " "Controls application." msgstr "" "Solo se puede aplicar restricciones de uso del equipo sobre cuentas no " "administrativas. Únicamente los administradores pueden establecer las " "configuraciones de controles parentales para una cuenta determinada. Es " "posible hacer esto sin salir de la cuenta; basta con proporcionar la " "contraseña administrativa cuando Controles parentales la solicite." #. (itstool) path: p/link #: C/legal.xml:4 msgid "Creative Commons Attribution-ShareAlike 3.0 Unported License" msgstr "" "Licencia genérica Creative Commons 3.0 de atribución e igual compartición" #. (itstool) path: license/p #: C/legal.xml:3 msgid "This work is licensed under a <_:link-1/>." msgstr "Esta obra está disponible en virtud de la <_:link-1/>." #. (itstool) path: info/desc #: C/restricting-applications.page:6 msgid "Restricting a child user from running already-installed applications." msgstr "Restringir a los menores el uso de aplicaciones ya instaladas." #. (itstool) path: page/title #: C/restricting-applications.page:9 msgid "Restricting Access to Installed Applications" msgstr "Restringir el acceso a las aplicaciones instaladas" #. (itstool) path: page/p #: C/restricting-applications.page:11 msgid "" "You can prevent a user from running specific applications which are already " "installed on the computer. This could be useful if other users need those " "applications but they are not appropriate for a child." msgstr "" "Puede impedir que una cuenta ejecute determinadas aplicaciones instaladas en " "el equipo. Esto puede ser útil si hay otros usuarios que necesitan estas " "aplicaciones, pese a ser inadecuadas para un menor." #. (itstool) path: page/p #: C/restricting-applications.page:14 msgid "" "When installing additional software, you should consider whether that needs " "to be restricted for some users — newly installed software is usable by all " "users by default." msgstr "" "Tras instalar software adicional, es recomendable que considere si hace " "falta restringírselo a determinados usuarios, dado que, de manera " "predeterminada, todos los usuarios pueden utilizarlo." #. (itstool) path: page/p #: C/restricting-applications.page:18 msgid "To restrict a user’s access to a specific application:" msgstr "Para restringir el acceso de una cuenta a una aplicación concreta:" #. (itstool) path: item/p #: C/restricting-applications.page:22 msgid "Press the Restrict Applications button." msgstr "Pulse el botón Restringir aplicaciones." #. (itstool) path: item/p #: C/restricting-applications.page:23 msgid "" "Enable the switch in the row for each application you would like to restrict " "the user from accessing." msgstr "" "Active el interruptor en la fila de cada aplicación que quiera restringir." #. (itstool) path: item/p #: C/restricting-applications.page:24 msgid "Close the Restrict Applications window." msgstr "Cierre la ventana Restringir aplicaciones." #. (itstool) path: page/p #: C/restricting-applications.page:27 msgid "" "Restricting access to specific applications is often used in conjunction " "with to prevent a user from " "installing additional software which has not been vetted." msgstr "" "La restricción de acceso a aplicaciones determinadas se emplea a menudo " "junto con para evitar que se instale " "software sin que usted lo examine." #. (itstool) path: info/desc #: C/software-installation.page:6 msgid "" "Restricting the software a child user can install, or preventing them " "installing additional software entirely." msgstr "" "Restringir el software que un menor puede instalar, o bien evitar que " "instalen software adicional por completo." #. (itstool) path: page/title #: C/software-installation.page:9 msgid "Restricting Software Installation" msgstr "Restringir la instalación de software" #. (itstool) path: page/p #: C/software-installation.page:11 msgid "" "You can prevent a user from installing additional software, either for the " "entire system, or just for themselves. They will still be able to search for " "new software to install, but will need an administrator to authorize the " "installation when they try to install an application." msgstr "" "Puede impedir que un usuario instale software adicional, bien para todo el " "sistema, bien para sí mismo. Todavía será capaz de buscar software nuevo " "para instalar, pero si intenta instalarlo deberá contar con la ayuda de un " "administrador para que este lo autorice." #. (itstool) path: page/p #: C/software-installation.page:16 msgid "" "Additionally, you can restrict which software a user can browse or search " "for in the Software catalog by age categories." msgstr "" "Además, si se sirve de las categorías por edades en Software, " "puede restringir qué software se podrá explorar en su catálogo." #. (itstool) path: page/p #: C/software-installation.page:19 msgid "" "To prevent a user from running an application which has already been " "installed, see ." msgstr "" "Para evitar que un usuario ejecute una aplicación previamente instalada, " "consulte ." #. (itstool) path: section/title #: C/software-installation.page:23 msgid "Preventing Software Installation" msgstr "Evitar la instalación de software" #. (itstool) path: section/p #: C/software-installation.page:25 msgid "To prevent a user from installing additional software:" msgstr "" "Siga este procedimiento para impedir la instalación de software adicional:" #. (itstool) path: item/p #: C/software-installation.page:29 msgid "" "Enable the Restrict Application Installation " "checkbox." msgstr "" "Active la casilla Restringir instalación de " "aplicaciones." #. (itstool) path: item/p #: C/software-installation.page:30 msgid "" "Or enable the Restrict Application Installation for " "Others checkbox." msgstr "" "O bien, active la casilla Restringir instalación de " "aplicaciones para los otros." #. (itstool) path: section/p #: C/software-installation.page:33 msgid "" "The Restrict Application Installation for Others checkbox allows the user to install additional software for themselves, " "but prevents that software from being made available to other users. It " "could be used, for example, if there were two child users, one of whom is " "mature enough to be allowed to install additional software, but the other " "isn’t — enabling Restrict Application Installation " "for Others would prevent the more mature child from installing " "applications which are inappropriate for the other child and making them " "available to the other child." msgstr "" "La casilla Restringir instalación de aplicaciones a " "los otros permite la instalación de software adicional para uno mismo, " "pero restringe su disponibilidad a las demás cuentas. Se puede sacar " "provecho de esta función, por ejemplo, si tiene dos menores, de los cuales " "solo uno es lo suficientemente maduro para permitírsele la instalación de " "software; activar Restringir instalación de " "aplicaciones a los otros impedirá que el menor más maduro instale " "aplicaciones inapropiadas para el otro niño." #. (itstool) path: section/title #: C/software-installation.page:45 msgid "Restricting Software Installation by Age" msgstr "Restringir la instalación de software por edades" #. (itstool) path: section/p #: C/software-installation.page:47 msgid "" "Applications in the Software catalog have information about " "content they contain which might be inappropriate for some ages — for " "example, various forms of violence, unmoderated chat with other people on " "the internet, or the possibility of spending money." msgstr "" "Las aplicaciones que se incluyen en el catálogo de Software " "incluyen información relativa al contenido que poseen y la aptitud de este " "según la edad, notando detalles como: diversas formas de violencia, chat no " "moderado con otras personas a través de internet, o la posibilidad de gastar " "dinero." #. (itstool) path: section/p #: C/software-installation.page:51 msgid "" "For each application, this information is summarized as the minimum age " "child it is typically suitable to be used by — for example, “suitable for " "ages 7+”. These age ratings are presented in region-specific schemes which " "can be compared with the ratings schemes used for films and games." msgstr "" "En cada aplicación, esta información se condensa como la edad mínima en la " "que se considera adecuado que un menor la utilice; por ejemplo, «de 7 años " "en adelante». Estas clasificaciones se presentan de conformidad con ciertos " "esquemas regionales, comparables con los que se utilizan para clasificar " "películas y juegos." #. (itstool) path: section/p #: C/software-installation.page:55 msgid "" "The applications shown to a user in the Software catalog can be " "filtered by their age suitability. Applications which are not suitable for " "the user will be hidden, and will not be installable by that user. They will " "be installable by other users (if their age suitability is set high enough)." msgstr "" "Las aplicaciones que Software muestra a cada usuario se pueden " "filtrar por adecuación a la edad. Aquellas aplicaciones que no sean " "adecuadas para una cuenta se ocultarán del catálogo y no se podrán instalar. " "Otros usuarios las podrán instalar (si es que su clasificación de edad lo " "permite)." #. (itstool) path: section/p #: C/software-installation.page:61 msgid "" "To filter the applications seen by a user in the Software catalog " "to only those suitable for a certain age:" msgstr "" "Para filtrar las aplicaciones que un usuario ve en el catálogo de " "Software y que se muestren solo las adecuadas para una " "determinada edad:" #. (itstool) path: item/p #: C/software-installation.page:66 msgid "" "In the Application Suitability list, select the age which " "applications should be suitable for." msgstr "" "En la lista Idoneidad de aplicaciones, seleccione la edad deseada." #. (itstool) path: note/p #: C/software-installation.page:70 msgid "" "The user’s actual age is not stored, so the Application Suitability is not automatically updated over time as the child grows older. You " "must periodically re-assess the appropriate Application Suitability for each user." msgstr "" "Como no se almacena la edad del usuario, la idoneidad de aplicaciones no se actualiza automáticamente a medida que crece el menor. Debe " "revalorar periódicamente el nivel adecuado de Idoneidad de " "aplicaciones para cada una de las cuentas." malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/help/hu/000077500000000000000000000000001505556674000231405ustar00rootroot00000000000000malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/help/hu/hu.po000066400000000000000000000447761505556674000241360ustar00rootroot00000000000000# Hungarian translation for malcontent. # Copyright (C) 2022 Free Software Foundation, Inc. # This file is distributed under the same license as the malcontent package. # # Balázs Úr , 2022. msgid "" msgstr "" "Project-Id-Version: malcontent main\n" "Report-Msgid-Bugs-To: https://gitlab.freedesktop.org/pwithnall/malcontent/" "issues\n" "POT-Creation-Date: 2022-09-21 15:25+0000\n" "PO-Revision-Date: 2022-09-22 23:43+0200\n" "Last-Translator: Balázs Úr \n" "Language-Team: Hungarian \n" "Language: hu\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Lokalize 19.12.3\n" #. Put one translator per line, in the form NAME , YEAR1, YEAR2 msgctxt "_" msgid "translator-credits" msgstr "Úr Balázs , 2022." #. (itstool) path: info/desc #: C/creating-a-child-user.page:6 msgid "Creating a child user on the computer." msgstr "Gyermekfelhasználó létrehozása a számítógépen." #. (itstool) path: page/title #: C/creating-a-child-user.page:9 msgid "Creating a Child User" msgstr "Gyermekfelhasználó létrehozása" #. (itstool) path: page/p #: C/creating-a-child-user.page:11 msgid "" "Parental controls can only be applied to non-administrator accounts. Such an " "account may have been created when the computer was initially set up. If " "not, a new child user may be created from the Parental Controls " "application if no child users already exist; and otherwise may be created " "from the Control Center." msgstr "" "A szülői felügyelet csak a nem rendszergazdai fiókokra alkalmazható. Ilyen " "fiókot esetleg a számítógép kezdeti beállításakor hozhattak létre. Ha nem, " "akkor új gyermekfelhasználó hozható létre a Szülői felügyelet " "alkalmazásból, ha még nem létezik gyermekfelhasználó, egyébként pedig a " "Vezérlőközpont alkalmazásból hozható létre." #. (itstool) path: page/p #: C/creating-a-child-user.page:17 msgid "" "To create a new child user, see Add a new user account. As soon as the new user is " "created, it will appear in the Parental Controls window so that " "its parental controls settings can be configured." msgstr "" "Új gyermekfelhasználó létrehozásához nézze meg az Új felhasználói fiók hozzáadása " "fejezetet. Amint az új felhasználó létrejött, megjelenik a Szülői " "felügyelet ablakban, így a szülői felügyeleti beállításai " "konfigurálhatók." #. (itstool) path: credit/name #: C/index.page:6 msgid "Philip Withnall" msgstr "Philip Withnall" #. (itstool) path: credit/years #: C/index.page:8 msgid "2020" msgstr "2020" #. (itstool) path: page/title #: C/index.page:12 msgid "Parental Controls Help" msgstr "Szülői felügyelet súgó" #. (itstool) path: section/title #: C/index.page:15 msgid "Introduction & Setup" msgstr "Bevezetés és beállítás" #. (itstool) path: section/title #: C/index.page:19 msgid "Controls to Apply" msgstr "Alkalmazandó szabályozások" #. (itstool) path: info/desc #: C/internet.page:6 msgid "Restricting a child user’s access to the internet." msgstr "Egy gyermekfelhasználó internet-hozzáférésének korlátozása." #. (itstool) path: page/title #: C/internet.page:9 msgid "Restricting Access to the Internet" msgstr "Internet-hozzáférés korlátozása" #. (itstool) path: page/p #: C/internet.page:11 msgid "" "You can restrict a user’s access to the internet. This will prevent them " "using a web browser, but it will not prevent them using the internet (in " "potentially more limited forms) through other applications. For example, it " "will not prevent access to e-mail accounts using Evolution, and " "it will not prevent software updates being downloaded and applied." msgstr "" "Korlátozhatja egy felhasználó internet-hozzáférését. Ez megakadályozza őt a " "webböngésző használatában, de nem akadályozza meg abban, hogy az internetet " "(esetleg korlátozottabb formában) más alkalmazásokon keresztül használja. " "Például nem akadályozza meg az e-mail fiókokhoz való hozzáférést az " "Evolution használatával, és nem akadályozza meg a " "szoftverfrissítések letöltését és alkalmazását." #. (itstool) path: page/p #: C/internet.page:17 msgid "To restrict a user’s access to the internet:" msgstr "Egy felhasználó internet-hozzáférésének korlátozásához:" #. (itstool) path: item/p #: C/internet.page:19 C/restricting-applications.page:20 #: C/software-installation.page:28 C/software-installation.page:54 msgid "Open the Parental Controls application." msgstr "Nyissa meg a Szülői felügyelet alkalmazást." #. (itstool) path: item/p #: C/internet.page:20 C/restricting-applications.page:21 #: C/software-installation.page:29 C/software-installation.page:55 msgid "Select the user in the tabs at the top." msgstr "Válassza ki a felhasználót a fenti lapokon." #. (itstool) path: item/p #: C/internet.page:21 msgid "" "Enable the Restrict Web Browsers checkbox." msgstr "" "Jelölje be a Webböngészők korlátozása " "jelölőnégyzetet." #. (itstool) path: info/desc #: C/introduction.page:6 msgid "" "Overview of parental controls, the Parental Controls application " "and its use in other situations where access restrictions are needed on a " "user." msgstr "" "A szülői felügyelet áttekintése, a Szülői felügyelet alkalmazás " "és annak használata olyan egyéb helyzetekben, amikor egy felhasználó " "hozzáférésének korlátozásai szükségesek." #. (itstool) path: page/title #: C/introduction.page:12 msgid "Introduction to Parental Controls" msgstr "Bevezetés a szülői felügyeletbe" #. (itstool) path: page/p #: C/introduction.page:14 msgid "" "Parental controls are a way to restrict what non-administrator accounts can " "do on the computer, with the aim of allowing parents to restrict what their " "children can do when using the computer unsupervised or under limited " "supervision." msgstr "" "A szülői felügyelet segítségével korlátozható, hogy a nem rendszergazdai " "fiókok mit tehetnek a számítógépen, azzal a céllal, hogy a szülők " "korlátozhassák, hogy mit tehetnek a gyermekeik, amikor felügyelet nélkül " "vagy korlátozott felügyelet mellett használják a számítógépet." #. (itstool) path: page/p #: C/introduction.page:18 msgid "" "This functionality can be used in other situations ­– such as other carer/" "caree relationships – but is labelled as ‘parental controls’ so that it’s " "easy to find, as that’s what most people will be looking for." msgstr "" "Ez a funkció más helyzetekben is használható – például egyéb gondozó-" "gondozott kapcsolatokban –, de „szülői felügyelet” címkével van ellátva, " "hogy könnyen megtalálható legyen, mivel a legtöbb ember ezt keresi." #. (itstool) path: page/p #: C/introduction.page:21 msgid "" "The parental controls for any user can be queried and set using the " "Parental Controls application. This lists the non-administrator " "accounts in tabs along its top bar, and shows their current parental " "controls settings below. Changes to the parental controls apply immediately." msgstr "" "A szülői felügyelet bármely felhasználóhoz lekérdezhető és beállítható a " "Szülői felügyelet alkalmazás használatával. Ez a felső sávjában " "lévő lapokon felsorolja a nem rendszergazdai fiókokat, és alatta megjeleníti " "az aktuális szülői felügyeleti beállításokat. A szülői felügyelet " "változtatásai azonnal érvénybe lépnek." #. (itstool) path: page/p #: C/introduction.page:25 msgid "" "Restrictions on using the computer can only be applied to non-administrator " "accounts. The parental controls settings for a user can only be changed by " "an administrator, although the administrator can do so from the user’s " "account by entering their password when prompted by the Parental " "Controls application." msgstr "" "A számítógép használatára vonatkozó korlátozások csak a nem rendszergazdai " "fiókokra alkalmazhatók. Egy felhasználó szülői felügyeleti beállításait csak " "egy rendszergazda változtathatja meg, bár a rendszergazda ezt a felhasználó " "fiókjából is megteheti a jelszavának megadásával, amikor a Szülői " "felügyelet alkalmazás erre kéri." #. (itstool) path: p/link #: C/legal.xml:4 msgid "Creative Commons Attribution-ShareAlike 3.0 Unported License" msgstr "Creative Commons Nevezd meg! - Így add tovább! 3.0 átíratlan licenc" #. (itstool) path: license/p #: C/legal.xml:3 msgid "This work is licensed under a <_:link-1/>." msgstr "Ez a mű a <_:link-1/> szerint licencelt." #. (itstool) path: info/desc #: C/restricting-applications.page:6 msgid "Restricting a child user from running already-installed applications." msgstr "" "Egy gyermekfelhasználó korlátozása a már telepített alkalmazások " "futtatásában." #. (itstool) path: page/title #: C/restricting-applications.page:9 msgid "Restricting Access to Installed Applications" msgstr "A telepített alkalmazásokhoz való hozzáférés korlátozása" #. (itstool) path: page/p #: C/restricting-applications.page:11 msgid "" "You can prevent a user from running specific applications which are already " "installed on the computer. This could be useful if other users need those " "applications but they are not appropriate for a child." msgstr "" "Megakadályozhatja, hogy egy felhasználó a számítógépre már telepített " "bizonyos alkalmazásokat futtasson. Ez akkor lehet hasznos, ha más " "felhasználóknak szükségük van ezekre az alkalmazásokra, de egy gyermek " "számára nem megfelelőek." #. (itstool) path: page/p #: C/restricting-applications.page:14 msgid "" "When installing additional software, you should consider whether that needs " "to be restricted for some users — newly installed software is usable by all " "users by default." msgstr "" "További szoftverek telepítésekor meg kell fontolnia, hogy nem kell-e " "korlátozni azokat egyes felhasználók számára, ugyanis az újonnan telepített " "szoftverek alapértelmezetten minden felhasználó számára használhatóak." #. (itstool) path: page/p #: C/restricting-applications.page:18 msgid "To restrict a user’s access to a specific application:" msgstr "" "Egy felhasználó adott alkalmazáshoz való hozzáférésének korlátozásához:" #. (itstool) path: item/p #: C/restricting-applications.page:22 msgid "Press the Restrict Applications button." msgstr "" "Nyomja meg az Alkalmazások korlátozása gombot." #. (itstool) path: item/p #: C/restricting-applications.page:23 msgid "" "Enable the switch in the row for each application you would like to restrict " "the user from accessing." msgstr "" "Kapcsolja be a kapcsolót minden olyan alkalmazás sorában, amelyhez a " "felhasználó hozzáférését korlátozni szeretné." #. (itstool) path: item/p #: C/restricting-applications.page:24 msgid "Close the Restrict Applications window." msgstr "Zárja be az Alkalmazások korlátozása ablakot." #. (itstool) path: page/p #: C/restricting-applications.page:27 msgid "" "Restricting access to specific applications is often used in conjunction " "with to prevent a user from " "installing additional software which has not been vetted." msgstr "" "Bizonyos alkalmazásokhoz való hozzáférés korlátozását gyakran használják a " " korlátozással együtt, hogy " "megakadályozzanak egy felhasználót a további, nem ellenőrzött szoftverek " "telepítésében." #. (itstool) path: info/desc #: C/software-installation.page:6 msgid "" "Restricting the software a child user can install, or preventing them " "installing additional software entirely." msgstr "" "Egy gyermekfelhasználó által telepíthető szoftverek korlátozása, vagy " "további szoftverek telepítésének teljes megakadályozása." #. (itstool) path: page/title #: C/software-installation.page:9 msgid "Restricting Software Installation" msgstr "Szoftvertelepítés korlátozása" #. (itstool) path: page/p #: C/software-installation.page:11 msgid "" "You can prevent a user from installing additional software on the system. " "They will still be able to search for new software to install, but will need " "an administrator to authorize the installation when they try to install an " "application. This applies whether they are trying to install the application " "system-wide (for all users) or just for themselves." msgstr "" "Megakadályozhat egy felhasználót abban, hogy további szoftvereket telepítsen " "a rendszerre. A felhasználó továbbra is kereshet új telepítendő szoftvert, " "de rendszergazdára lesz szüksége a telepítés felhatalmazásához, amikor " "megpróbál telepíteni egy alkalmazást. Ez arra is vonatkozik, hogy az " "alkalmazást rendszerszinten (minden felhasználónak) vagy csak saját magának " "próbálja telepíteni." #. (itstool) path: page/p #: C/software-installation.page:17 msgid "" "Additionally, you can restrict which software a user can browse or search " "for in the Software catalog by age categories." msgstr "" "Ezenkívül azt is korlátozhatja az életkor kategória alapján, hogy egy " "felhasználó milyen szoftvereket böngészhet vagy kereshet a Szoftver katalógusában." #. (itstool) path: page/p #: C/software-installation.page:20 msgid "" "To prevent a user from running an application which has already been " "installed, see ." msgstr "" "Annak megakadályozásához, hogy egy felhasználó egy már telepített " "alkalmazást futtasson, nézze meg az fejezetet." #. (itstool) path: section/title #: C/software-installation.page:24 msgid "Preventing Software Installation" msgstr "Szoftvertelepítés megakadályozása" #. (itstool) path: section/p #: C/software-installation.page:26 msgid "To prevent a user from installing additional software:" msgstr "" "Annak megakadályozásához, hogy a felhasználó további szoftvereket telepítsen:" #. (itstool) path: item/p #: C/software-installation.page:30 msgid "" "Enable the Restrict Application Installation " "checkbox." msgstr "" "Jelölje be az Alkalmazástelepítés korlátozása " "jelölőnégyzetet." #. (itstool) path: section/title #: C/software-installation.page:35 msgid "Restricting Software Installation by Age" msgstr "Szoftvertelepítés korlátozása életkor alapján" #. (itstool) path: section/p #: C/software-installation.page:37 msgid "" "Applications in the Software catalog have information about " "content they contain which might be inappropriate for some ages — for " "example, various forms of violence, unmoderated chat with other people on " "the internet, or the possibility of spending money." msgstr "" "A Szoftver katalógusában található alkalmazások információval " "rendelkeznek az általuk tartalmazott tartalommal kapcsolatban, hogy melyek " "lehetnek bizonyos korosztályok számára nem megfelelőek – például az erőszak " "különböző formái, moderálatlan csevegés az interneten más emberekkel, vagy a " "pénzköltés lehetősége." #. (itstool) path: section/p #: C/software-installation.page:41 msgid "" "For each application, this information is summarized as the minimum age " "child it is typically suitable to be used by — for example, “suitable for " "ages 7+”. These age ratings are presented in region-specific schemes which " "can be compared with the ratings schemes used for films and games." msgstr "" "Minden egyes alkalmazás esetében ez az információ összefoglalja, hogy az " "adott alkalmazás jellemzően legalább milyen korú gyermek számára alkalmas – " "például „7 év felettiek számára alkalmas”. Ezek a korhatár-besorolások régió-" "specifikus sémákban jelennek meg, amelyek összehasonlíthatók a filmek és " "játékok esetében használt besorolási sémákkal." #. (itstool) path: section/p #: C/software-installation.page:45 msgid "" "The applications shown to a user in the Software catalog can be " "filtered by their age suitability. Applications which are not suitable for " "the user will be hidden, and will not be installable by that user. They will " "be installable by other users (if their age suitability is set high enough)." msgstr "" "A Szoftver katalógusában egy felhasználó számára megjelenített " "alkalmazások szűrhetők az életkori alkalmasságuk alapján. A felhasználó " "számára nem megfelelő alkalmazások el lesznek rejtve, és nem lesznek " "telepíthetők az adott felhasználó számára. Más felhasználók számára " "telepíthetők lesznek (ha az életkori alkalmasságuk elég magasra van állítva)." #. (itstool) path: section/p #: C/software-installation.page:51 msgid "" "To filter the applications seen by a user in the Software catalog " "to only those suitable for a certain age:" msgstr "" "A Szoftver katalógusában egy felhasználó által látott " "alkalmazások szűréséhez, hogy csak egy bizonyos korosztály számára legyenek " "alkalmasak:" #. (itstool) path: item/p #: C/software-installation.page:56 msgid "" "In the Application Suitability list, select the age which " "applications should be suitable for." msgstr "" "Az Alkalmazás alkalmassága listából válassza ki azt az életkort, " "amelyre az alkalmazásoknak alkalmasnak kell lenniük." #. (itstool) path: note/p #: C/software-installation.page:60 msgid "" "The user’s actual age is not stored, so the Application Suitability is not automatically updated over time as the child grows older. You " "must periodically re-assess the appropriate Application Suitability for each user." msgstr "" "A felhasználó tényleges életkora nem kerül tárolásra, így az Alkalmazás " "alkalmassága nem frissül automatikusan az idő múlásával, ahogy a " "gyermek idősebbé válik. Rendszeresen újra kell értékelnie a megfelelő " "Alkalmazás alkalmassága értéket minden egyes felhasználónál." malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/help/id/000077500000000000000000000000001505556674000231205ustar00rootroot00000000000000malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/help/id/id.po000066400000000000000000000421461505556674000240630ustar00rootroot00000000000000# Indonesian translation for malcontent. # Copyright (C) 2020 malcontent's COPYRIGHT HOLDER # This file is distributed under the same license as the malcontent package. # Andika Triwidada , 2020, 2021. # msgid "" msgstr "" "Project-Id-Version: malcontent master\n" "POT-Creation-Date: 2020-12-18 15:14+0000\n" "PO-Revision-Date: 2021-08-30 18:26+0700\n" "Last-Translator: Andika Triwidada \n" "Language-Team: Indonesian \n" "Language: id\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 2.4.3\n" #. Put one translator per line, in the form NAME , YEAR1, YEAR2 msgctxt "_" msgid "translator-credits" msgstr "Andika Triwidada , 2020, 2021." #. (itstool) path: info/desc #: C/creating-a-child-user.page:6 msgid "Creating a child user on the computer." msgstr "Membuat pengguna anak pada komputer." #. (itstool) path: page/title #: C/creating-a-child-user.page:9 msgid "Creating a Child User" msgstr "Membuat Pengguna Anak" #. (itstool) path: page/p #: C/creating-a-child-user.page:11 msgid "" "Parental controls can only be applied to non-administrator accounts. Such an " "account may have been created when the computer was initially set up. If " "not, a new child user may be created from the Parental Controls " "application if no child users already exist; and otherwise may be created " "from the Control Center." msgstr "" "Pengawasan orang tua hanya dapat diterapkan untuk akun non-administrator. " "Akun tersebut mungkin telah dibuat saat komputer awalnya diatur. Jika tidak, " "pengguna anak baru dapat dibuat dari aplikasi Pengawasan Orang Tua jika tidak ada pengguna anak yang sudah ada; dan sebaliknya dapat " "dibuat dari Pusat Kontrol." #. (itstool) path: page/p #: C/creating-a-child-user.page:17 msgid "" "To create a new child user, see Add a new user account. As soon as the new user is " "created, it will appear in the Parental Controls window so that " "its parental controls settings can be configured." msgstr "" "Untuk membuat pengguna anak baru, lihat Menambahkan akun pengguna baru. Segera setelah " "pengguna baru dibuat, itu akan muncul di jendela Pengawasan Orang Tua sehingga pengaturan pengawasan orang tua dapat dikonfigurasi." #. (itstool) path: credit/name #: C/index.page:6 msgid "Philip Withnall" msgstr "Philip Withnall" #. (itstool) path: credit/years #: C/index.page:8 msgid "2020" msgstr "2020" #. (itstool) path: page/title #: C/index.page:12 msgid "Parental Controls Help" msgstr "Bantuan Pengawasan Orang Tua" #. (itstool) path: section/title #: C/index.page:15 msgid "Introduction & Setup" msgstr "Pendahuluan & Penyiapan" #. (itstool) path: section/title #: C/index.page:19 msgid "Controls to Apply" msgstr "Pengawasan yang Diterapkan" #. (itstool) path: info/desc #: C/internet.page:6 msgid "Restricting a child user’s access to the internet." msgstr "Membatasi akses pengguna anak ke Internet." #. (itstool) path: page/title #: C/internet.page:9 msgid "Restricting Access to the Internet" msgstr "Membatasi Akses ke Internet" #. (itstool) path: page/p #: C/internet.page:11 msgid "" "You can restrict a user’s access to the internet. This will prevent them " "using a web browser, but it will not prevent them using the internet (in " "potentially more limited forms) through other applications. For example, it " "will not prevent access to e-mail accounts using Evolution, and " "it will not prevent software updates being downloaded and applied." msgstr "" "Anda dapat membatasi akses pengguna ke internet. Ini akan mencegah mereka " "menggunakan peramban web, tetapi tidak akan mencegah mereka menggunakan " "internet (dalam bentuk yang berpotensi lebih terbatas) melalui aplikasi " "lain. Sebagai contoh, itu tidak akan mencegah akses ke akun surel " "menggunakan Evolution, dan tidak akan mencegah pembaruan " "perangkat lunak yang diunduh dan diterapkan." #. (itstool) path: page/p #: C/internet.page:17 msgid "To restrict a user’s access to the internet:" msgstr "Untuk membatasi akses pengguna ke internet:" #. (itstool) path: item/p #: C/internet.page:19 C/restricting-applications.page:20 #: C/software-installation.page:28 C/software-installation.page:54 msgid "Open the Parental Controls application." msgstr "Buka aplikasi Pengawasan Orang Tua." #. (itstool) path: item/p #: C/internet.page:20 C/restricting-applications.page:21 #: C/software-installation.page:29 C/software-installation.page:55 msgid "Select the user in the tabs at the top." msgstr "Pilih pengguna di tab di bagian atas." #. (itstool) path: item/p #: C/internet.page:21 msgid "" "Enable the Restrict Web Browsers checkbox." msgstr "" "Fungsikan kotak centang Batasi Peramban Web." #. (itstool) path: info/desc #: C/introduction.page:6 msgid "" "Overview of parental controls, the Parental Controls application " "and its use in other situations where access restrictions are needed on a " "user." msgstr "" "Ikhtisar pengawasan orang tua, aplikasi Pengawasan Orang Tua, dan " "penggunaannya dalam situasi lain dimana pembatasan akses diperlukan pada " "seorang pengguna." #. (itstool) path: page/title #: C/introduction.page:12 msgid "Introduction to Parental Controls" msgstr "Pengenalan untuk Pengawasan Orang Tua" #. (itstool) path: page/p #: C/introduction.page:14 msgid "" "Parental controls are a way to restrict what non-administrator accounts can " "do on the computer, with the aim of allowing parents to restrict what their " "children can do when using the computer unsupervised or under limited " "supervision." msgstr "" "Pengawasan orang tua adalah cara untuk membatasi apa yang dapat dilakukan " "oleh akun non-administrator pada komputer, dengan tujuan memperbolehkan " "orangtua membatasi apa yang dapat dilakukan anak mereka saat menggunakan " "komputer tanpa pengawasan atau di bawah supervisi yang terbatas." #. (itstool) path: page/p #: C/introduction.page:18 msgid "" "This functionality can be used in other situations ­– such as other carer/" "caree relationships – but is labelled as ‘parental controls’ so that it’s " "easy to find, as that’s what most people will be looking for." msgstr "" "Fungsi ini dapat digunakan dalam situasi lain – seperti hubungan perawat/" "terrawat lainnya – tetapi diberi label sebagai 'pengawasan orang tua' " "sehingga mudah ditemukan, karena itulah yang kebanyakan orang akan cari." #. (itstool) path: page/p #: C/introduction.page:21 msgid "" "The parental controls for any user can be queried and set using the " "Parental Controls application. This lists the non-administrator " "accounts in tabs along its top bar, and shows their current parental " "controls settings below. Changes to the parental controls apply immediately." msgstr "" "Pengawasan orang tua untuk setiap pengguna dapat ditanyakan dan diatur " "menggunakan aplikasi Pengawasan Orang Tua. Ini mencantumkan akun " "non-administrator di tab di sepanjang bilah atasnya, dan menunjukkan setelan " "pengawasan orang tua mereka saat ini di bawah. Perubahan pada pengawasan " "orang tua akan segera berlaku." #. (itstool) path: page/p #: C/introduction.page:25 msgid "" "Restrictions on using the computer can only be applied to non-administrator " "accounts. The parental controls settings for a user can only be changed by " "an administrator, although the administrator can do so from the user’s " "account by entering their password when prompted by the Parental " "Controls application." msgstr "" "Pembatasan penggunaan komputer hanya dapat diterapkan pada akun non-" "administrator. Setelan pengawasan orang tua untuk pengguna hanya dapat " "diubah oleh administrator, meskipun administrator dapat melakukannya dari " "akun pengguna dengan memasukkan kata sandi saat diminta oleh aplikasi " "Pengawasan Orang Tua ." #. (itstool) path: p/link #: C/legal.xml:4 msgid "Creative Commons Attribution-ShareAlike 3.0 Unported License" msgstr "Creative Commons Attribution-ShareAlike 3.0 Unported License" #. (itstool) path: license/p #: C/legal.xml:3 msgid "This work is licensed under a <_:link-1/>." msgstr "Karya ini dilisensikan di bawah <_:link-1/>." #. (itstool) path: info/desc #: C/restricting-applications.page:6 msgid "Restricting a child user from running already-installed applications." msgstr "Membatasi pengguna anak dari menjalankan aplikasi yang sudah diinstal." #. (itstool) path: page/title #: C/restricting-applications.page:9 msgid "Restricting Access to Installed Applications" msgstr "Membatasi Akses ke Aplikasi yang Terinstal" #. (itstool) path: page/p #: C/restricting-applications.page:11 msgid "" "You can prevent a user from running specific applications which are already " "installed on the computer. This could be useful if other users need those " "applications but they are not appropriate for a child." msgstr "" "Anda dapat mencegah pengguna menjalankan aplikasi tertentu yang telah " "diinstal di komputer. Hal ini dapat berguna jika pengguna lain membutuhkan " "aplikasi tersebut tetapi mereka tidak sesuai untuk anak." #. (itstool) path: page/p #: C/restricting-applications.page:14 msgid "" "When installing additional software, you should consider whether that needs " "to be restricted for some users — newly installed software is usable by all " "users by default." msgstr "" "Ketika menginstal perangkat lunak tambahan, Anda harus mempertimbangkan " "apakah yang perlu dibatasi untuk beberapa pengguna — perangkat lunak yang " "baru diinstal dapat dipakai oleh semua pengguna secara baku." #. (itstool) path: page/p #: C/restricting-applications.page:18 msgid "To restrict a user’s access to a specific application:" msgstr "Untuk membatasi akses pengguna ke aplikasi tertentu:" #. (itstool) path: item/p #: C/restricting-applications.page:22 msgid "Press the Restrict Applications button." msgstr "Tekan tombol Batasi Aplikasi." #. (itstool) path: item/p #: C/restricting-applications.page:23 msgid "" "Enable the switch in the row for each application you would like to restrict " "the user from accessing." msgstr "" "Fungsikan saklar di baris untuk setiap aplikasi yang Anda ingin membatasi " "pengguna dari mengaksesnya." #. (itstool) path: item/p #: C/restricting-applications.page:24 msgid "Close the Restrict Applications window." msgstr "Tutup jendela Batasi Aplikasi." #. (itstool) path: page/p #: C/restricting-applications.page:27 msgid "" "Restricting access to specific applications is often used in conjunction " "with to prevent a user from " "installing additional software which has not been vetted." msgstr "" "Membatasi akses ke aplikasi tertentu sering digunakan dalam hubungannya " "dengan untuk mencegah pengguna dari " "menginstal perangkat lunak tambahan yang belum diperiksa." #. (itstool) path: info/desc #: C/software-installation.page:6 msgid "" "Restricting the software a child user can install, or preventing them " "installing additional software entirely." msgstr "" "Membatasi perangkat lunak yang dapat dipasang pengguna anak, atau mencegah " "mereka menginstal perangkat lunak tambahan sepenuhnya." #. (itstool) path: page/title #: C/software-installation.page:9 msgid "Restricting Software Installation" msgstr "Membatasi Instalasi Perangkat Lunak" #. (itstool) path: page/p #: C/software-installation.page:11 msgid "" "You can prevent a user from installing additional software on the system. " "They will still be able to search for new software to install, but will need " "an administrator to authorize the installation when they try to install an " "application. This applies whether they are trying to install the application " "system-wide (for all users) or just for themselves." msgstr "" "Anda dapat mencegah pengguna dari memasang perangkat lunak tambahan, baik " "untuk seluruh sistem, atau hanya untuk diri mereka sendiri. Mereka masih " "akan dapat mencari perangkat lunak baru untuk dipasang, tetapi akan " "memerlukan administrator untuk mengesahkan instalasi ketika mereka mencoba " "untuk memasang aplikasi." #. (itstool) path: page/p #: C/software-installation.page:17 msgid "" "Additionally, you can restrict which software a user can browse or search " "for in the Software catalog by age categories." msgstr "" "Selain itu, Anda dapat membatasi perangkat lunak yang dapat ditelusuri atau " "dicari oleh pengguna di katalog Perangkat Lunak berdasarkan " "kategori usia." #. (itstool) path: page/p #: C/software-installation.page:20 msgid "" "To prevent a user from running an application which has already been " "installed, see ." msgstr "" "Untuk mencegah pengguna menjalankan aplikasi yang sudah terinstal, lihat " " ." #. (itstool) path: section/title #: C/software-installation.page:24 msgid "Preventing Software Installation" msgstr "Mencegah Instalasi Perangkat Lunak" #. (itstool) path: section/p #: C/software-installation.page:26 msgid "To prevent a user from installing additional software:" msgstr "Untuk mencegah pengguna menginstal perangkat lunak tambahan:" #. (itstool) path: item/p #: C/software-installation.page:30 msgid "" "Enable the Restrict Application Installation " "checkbox." msgstr "" "Fungsikan kotak centang Batasi Pemasangan Aplikasi." #. (itstool) path: section/title #: C/software-installation.page:35 msgid "Restricting Software Installation by Age" msgstr "Membatasi Instalasi Perangkat Lunak berdasarkan Umur" #. (itstool) path: section/p #: C/software-installation.page:37 msgid "" "Applications in the Software catalog have information about " "content they contain which might be inappropriate for some ages — for " "example, various forms of violence, unmoderated chat with other people on " "the internet, or the possibility of spending money." msgstr "" "Aplikasi dalam katalog Perangkat Lunak memiliki informasi tentang " "konten yang mereka kandung yang mungkin tidak pantas untuk usia tertentu — " "misalnya, berbagai bentuk kekerasan, obrolan tanpa moderator dengan orang " "lain di internet, atau kemungkinan membelanjakan uang." #. (itstool) path: section/p #: C/software-installation.page:41 msgid "" "For each application, this information is summarized as the minimum age " "child it is typically suitable to be used by — for example, “suitable for " "ages 7+”. These age ratings are presented in region-specific schemes which " "can be compared with the ratings schemes used for films and games." msgstr "" "Untuk setiap aplikasi, informasi ini diringkas sebagai yang biasanya cocok " "untuk digunakan oleh usia minimum anak berapa — misalnya, \"cocok untuk usia " "7+\". Peringkat usia ini disajikan dalam skema spesifik wilayah yang dapat " "dibandingkan dengan skema penilaian yang digunakan untuk film dan permainan." #. (itstool) path: section/p #: C/software-installation.page:45 msgid "" "The applications shown to a user in the Software catalog can be " "filtered by their age suitability. Applications which are not suitable for " "the user will be hidden, and will not be installable by that user. They will " "be installable by other users (if their age suitability is set high enough)." msgstr "" "Aplikasi yang ditampilkan kepada pengguna di katalog Perangkat Lunak dapat difilter menurut kesesuaian usia mereka. Aplikasi yang tidak " "cocok untuk pengguna akan disembunyikan, dan tidak akan dapat diinstal oleh " "pengguna tersebut. Mereka akan dapat diinstal oleh pengguna lain (jika " "kesesuaian usia mereka ditetapkan cukup tinggi)." #. (itstool) path: section/p #: C/software-installation.page:51 msgid "" "To filter the applications seen by a user in the Software catalog " "to only those suitable for a certain age:" msgstr "" "Untuk menyaring aplikasi yang dilihat oleh pengguna dalam katalog " "Perangkat Lunak agar hanya yang cocok untuk usia tertentu:" #. (itstool) path: item/p #: C/software-installation.page:56 msgid "" "In the Application Suitability list, select the age which " "applications should be suitable for." msgstr "" "Dalam daftar Kesesuaian Aplikasi, pilih usia mana aplikasi mesti " "cocok." #. (itstool) path: note/p #: C/software-installation.page:60 msgid "" "The user’s actual age is not stored, so the Application Suitability is not automatically updated over time as the child grows older. You " "must periodically re-assess the appropriate Application Suitability for each user." msgstr "" "Usia pengguna yang sebenarnya tidak disimpan, sehingga Kesesuaian " "Aplikasi tidak diperbarui secara otomatis dari waktu saat anak tumbuh " "lebih tua. Anda harus secara berkala menilai kembali Kesesuaian " "Aplikasi yang sesuai untuk setiap pengguna." malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/help/it/000077500000000000000000000000001505556674000231405ustar00rootroot00000000000000malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/help/it/it.po000066400000000000000000000447431505556674000241300ustar00rootroot00000000000000# Italian translations for malcontent. # Copyright © 2020 the malcontent authors. # This file is distributed under the same license as the malcontent package. # Albano Battistella , 2022. # msgid "" msgstr "" "Project-Id-Version: malcontent master\n" "POT-Creation-Date: 2020-04-24 15:30+0000\n" "PO-Revision-Date: 2022-01-07 15:41+0100\n" "Last-Translator: Albano Battistella \n" "Language-Team: Italian\n" "Language: it\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Poedit 2.4.1\n" #. Put one translator per line, in the form NAME , YEAR1, YEAR2 msgctxt "_" msgid "translator-credits" msgstr "Albano Battistella , 2022." #. (itstool) path: info/desc #: C/creating-a-child-user.page:6 msgid "Creating a child user on the computer." msgstr "Creazione di un account per bambini sul computer." #. (itstool) path: page/title #: C/creating-a-child-user.page:9 msgid "Creating a Child User" msgstr "Creazione un Account per Bambini" #. (itstool) path: page/p #: C/creating-a-child-user.page:11 msgid "" "Parental controls can only be applied to non-administrator accounts. Such an " "account may have been created when the computer was initially set up. If " "not, a new child user may be created from the Parental Controls " "application if no child users already exist; and otherwise may be created " "from the Control Center." msgstr "" "Il controllo parentale può essere applicato solo agli account non-amministratore." "Al momento potrebbe essere stato creato un account di questo tipo " "dalla configurazione iniziale del computer. In caso contrario, è possibile creare un " "nuovo account per bambino dall'applicazione Controllo Parentale o " "tramite le Impostazioni." #. (itstool) path: page/p #: C/creating-a-child-user.page:17 msgid "" "To create a new child user, see Add a new user account. As soon as the new user is " "created, it will appear in the Parental Controls window so that " "its parental controls settings can be configured." msgstr "" "Per creare un nuovo utente per bambino, vedere Aggiungi un nuovo account utente. Non appena il nuovo utente sarà " "creato, apparirà nella finestra Controllo Parentale in modo che " "le sue impostazioni di controllo parentale possano essere configurate." #. (itstool) path: credit/name #: C/index.page:6 msgid "Philip Withnall" msgstr "Philip Withnall" #. (itstool) path: credit/years #: C/index.page:8 msgid "2020" msgstr "2020" #. (itstool) path: page/title #: C/index.page:12 msgid "Parental Controls Help" msgstr "Aiuto sui controlli parentali" #. (itstool) path: section/title #: C/index.page:15 msgid "Introduction & Setup" msgstr "Introduzione e configurazione" #. (itstool) path: section/title #: C/index.page:19 msgid "Controls to Apply" msgstr "Controlli da applicare" #. (itstool) path: info/desc #: C/internet.page:6 msgid "Restricting a child user’s access to the internet." msgstr "Limitare l'accesso a Internet da parte di un minore" #. (itstool) path: page/title #: C/internet.page:9 msgid "Restricting Access to the Internet" msgstr "Limitare l'accesso a Internet" #. (itstool) path: page/p #: C/internet.page:11 msgid "" "You can restrict a user’s access to the internet. This will prevent them " "using a web browser, but it will not prevent them using the internet (in " "potentially more limited forms) through other applications. For example, it " "will not prevent access to e-mail accounts using Evolution, and " "it will not prevent software updates being downloaded and applied." msgstr "" "È possibile limitare l'accesso di un utente a Internet. Questo gli impedirà " "di usare un browser web, ma non limiterà la connessione a Internet (in forma limitata) di " "altre applicazioni. Ad esempio, non impedirà l'accesso agli account di " "e-mail utilizzando Evolution, né impedirà il download ed " "applicazione di aggiornamenti software." #. (itstool) path: page/p #: C/internet.page:17 msgid "To restrict a user’s access to the internet:" msgstr "Per limitare l'accesso di un utente a Internet:" #. (itstool) path: item/p #: C/internet.page:19 C/restricting-applications.page:20 #: C/software-installation.page:27 C/software-installation.page:64 msgid "Open the Parental Controls application." msgstr "Apri l'app Controllo Parentale." #. (itstool) path: item/p #: C/internet.page:20 C/restricting-applications.page:21 #: C/software-installation.page:28 C/software-installation.page:65 msgid "Select the user in the tabs at the top." msgstr "Nelle schede in alto, seleziona l'account desiderato." #. (itstool) path: item/p #: C/internet.page:21 msgid "" "Enable the Restrict Web Browsers checkbox." msgstr "" "Seleziona la casella Limita i browser web." #. (itstool) path: info/desc #: C/introduction.page:6 msgid "" "Overview of parental controls and the Parental Controls " "application." msgstr "" "Panoramica del controllo parentale e dell'applicazione " "Controllo Parentale." #. (itstool) path: page/title #: C/introduction.page:10 msgid "Introduction to Parental Controls" msgstr "Introduzione al Controllo Parentale" #. (itstool) path: page/p #: C/introduction.page:12 msgid "" "Parental controls are a way to restrict what non-administrator accounts can " "do on the computer, with the aim of allowing parents to restrict what their " "children can do when using the computer unsupervised or under limited " "supervision." msgstr "" "Il controllo parentale è un modo per limitare ciò che gli account non-amministratore possono " "fare al computer, con l'obiettivo di consentire ai genitori di limitare ciò che i loro " "bambini possono fare quando usano il computer senza sorveglianza o sotto una supervisione " "limitata." #. (itstool) path: page/p #: C/introduction.page:16 msgid "" "This functionality can be used in other situations ­– such as other carer/" "caree relationships – but is labelled as ‘parental controls’ so that it’s " "easy to find." msgstr "" "Questa funzionalità può essere utilizzata in altre situazioni, ad esempio per altri tutori/" "relazioni di carriera - ma è etichettato come’controllo parentale’ in modo che sia " "facile da trovare." #. (itstool) path: page/p #: C/introduction.page:19 msgid "" "The parental controls for any user can be queried and set using the " "Parental Controls application. This lists the non-administrator " "accounts in tabs along its top bar, and shows their current parental " "controls settings below. Changes to the parental controls apply immediately." msgstr "" "L'applicazione Controllo Parentale consente le query " "a qualsiasi titolo e definisce i controlli per ciascuno. L'applicazione " "elenca tutti gli account non-amministratore sotto forma di schede nella " "barra superiore della finestra e sotto mostra i controlli definiti " "attualmente. Le modifiche al controllo parentale hanno effetto immediato." #. (itstool) path: page/p #: C/introduction.page:23 msgid "" "Restrictions on using the computer can only be applied to non-administrator " "accounts. The parental controls settings for a user can only be changed by " "an administrator, although the administrator can do so from the user’s " "account by entering their password when prompted by the Parental " "Controls application." msgstr "" "Le restrizioni sull'uso dei computer possono essere applicate solo agli account " "non-amministratore. Le impostazioni del controllo parentale per un utente possono " "essere modificate solo da un amministratore, anche se l'amministratore può farlo dall'utente " "account inserendo la password quando richiesto dall'applicazione " "Controllo Parentale." #. (itstool) path: p/link #: C/legal.xml:4 msgid "Creative Commons Attribution-ShareAlike 3.0 Unported License" msgstr "Creative Commons Attribution-ShareAlike 3.0 Unported License" #. (itstool) path: license/p #: C/legal.xml:3 msgid "This work is licensed under a <_:link-1/>." msgstr "Quest'opera è sotto licenza <_:link-1/>." #. (itstool) path: info/desc #: C/restricting-applications.page:6 msgid "Restricting a child user from running already-installed applications." msgstr "Limita l'utilizzo di applicazioni già installate ai minori." #. (itstool) path: page/title #: C/restricting-applications.page:9 msgid "Restricting Access to Installed Applications" msgstr "Limita l'accesso alle applicazioni installate" #. (itstool) path: page/p #: C/restricting-applications.page:11 msgid "" "You can prevent a user from running specific applications which are already " "installed on the computer. This could be useful if other users need those " "applications but they are not appropriate for a child." msgstr "" "Puoi impedire ad un utente di eseguire applicazioni specifiche che sono già " "installate nel computer. Questo potrebbe essere utile se altri utenti hanno bisogno " "di queste applicazioni ma che non siano appropriate per un bambino." #. (itstool) path: page/p #: C/restricting-applications.page:14 msgid "" "When installing additional software, you should consider whether that needs " "to be restricted for some users — newly installed software is usable by all " "users by default." msgstr "" "Durante l'installazione di software aggiuntivo, è necessario considerare se sia necessario " "limitarlo per alcuni utenti: il software appena installato è utilizzabile da tutti gli " "utenti per impostazione predefinita." #. (itstool) path: page/p #: C/restricting-applications.page:18 msgid "To restrict a user’s access to a specific application:" msgstr "Per limitare l'accesso di un utente a un'applicazione specifica:" #. (itstool) path: item/p #: C/restricting-applications.page:22 msgid "Press the Restrict Applications button." msgstr "Premi il pulsante Limita Applicazioni." #. (itstool) path: item/p #: C/restricting-applications.page:23 msgid "" "Enable the switch in the row for each application you would like to restrict " "the user from accessing." msgstr "" "Attiva l'interruttore nella riga per ogni app che desideri limitare." #. (itstool) path: item/p #: C/restricting-applications.page:24 msgid "Close the Restrict Applications window." msgstr "Chiudi la finestra Limita Applicazioni." #. (itstool) path: page/p #: C/restricting-applications.page:27 msgid "" "Restricting access to specific applications is often used in conjunction " "with to prevent a user from " "installing additional software which has not been vetted." msgstr "" "Spesso viene utilizzata la limitazione dell'accesso a determinate applicazioni " "Con per evitare che venga installato " "software senza che sia stato verificato." #. (itstool) path: info/desc #: C/software-installation.page:6 msgid "" "Restricting the software a child user can install, or preventing them " "installing additional software entirely." msgstr "" "Limita il software che un minore può installare o impediscigli di " "installare completamente software aggiuntivo." #. (itstool) path: page/title #: C/software-installation.page:9 msgid "Restricting Software Installation" msgstr "Limitare Installazione di Software" #. (itstool) path: page/p #: C/software-installation.page:11 msgid "" "You can prevent a user from installing additional software, either for the " "entire system, or just for themselves. They will still be able to search for " "new software to install, but will need an administrator to authorize the " "installation when they try to install an application." msgstr "" "Puoi impedire ad un utente di installare software aggiuntivo, sia per l'intero " "sistema, sia per te stesso. Sarà ancora in grado di cercare nuovo software " "da installare, ma se proverà ad installarlo dovrà avere l'aiuto di un " "amministratore per l'autorizzazione." #. (itstool) path: page/p #: C/software-installation.page:16 msgid "" "Additionally, you can restrict which software a user can browse or search " "for in the Software catalog by age categories." msgstr "" "Inoltre, se utilizzi le categorie di età in Software, " "puoi limitare quale software può essere sfogliato nel tuo catalogo." #. (itstool) path: page/p #: C/software-installation.page:19 msgid "" "To prevent a user from running an application which has already been " "installed, see ." msgstr "" "Per impedire a un utente di eseguire un'applicazione precedentemente installata, " "vedere ." #. (itstool) path: section/title #: C/software-installation.page:23 msgid "Preventing Software Installation" msgstr "Evitare l'installazione di software" #. (itstool) path: section/p #: C/software-installation.page:25 msgid "To prevent a user from installing additional software:" msgstr "" "Seguire questa procedura per impedire l'installazione di software aggiuntivo:" #. (itstool) path: item/p #: C/software-installation.page:29 msgid "" "Enable the Restrict Application Installation " "checkbox." msgstr "" "Selezionare la casella Limita l'installazione di " "Applicazioni." #. (itstool) path: item/p #: C/software-installation.page:30 msgid "" "Or enable the Restrict Application Installation for " "Others checkbox." msgstr "" "Oppure, seleziona la casella Limita l'installazione di " "applicazioni per gli altri." #. (itstool) path: section/p #: C/software-installation.page:33 msgid "" "The Restrict Application Installation for Others checkbox allows the user to install additional software for themselves, " "but prevents that software from being made available to other users. It " "could be used, for exampcheckboxle, if there were two child users, one of whom is " "mature enough to be allowed to install additional software, but the other " "isn’t — enabling Restrict Application Installation " "for Others would prevent the more mature child from installing " "applications which are inappropriate for the other child and making them " "available to the other child." msgstr "" "La casella Limita l'installazione di applicazioni " "ad altri consente l'installazione di software aggiuntivo per se stessi, " "ma ne limita la disponibilità agli altri account. Potrebbe essere usato " "approfittando di questa funzione, ad esempio, se hai due minorenni, di cui " "solo uno è abbastanza maturo da potersi installare software " "abilitando Limita l'installazione di " "applicazioni ad altri impedirà al minore più maturo di installare " "applicazioni inadeguate per l'altro bambino." #. (itstool) path: section/title #: C/software-installation.page:45 msgid "Restricting Software Installation by Age" msgstr "Limitare l'installazione del software in base all'età" #. (itstool) path: section/p #: C/software-installation.page:47 msgid "" "Applications in the Software catalog have information about " "content they contain which might be inappropriate for some ages — for " "example, various forms of violence, unmoderated chat with other people on " "the internet, or the possibility of spending money." msgstr "" "Le applicazioni incluse nel catalogo di Software " "includono informazioni riguardanti il ​​contenuto che possiedono e la sua idoneità " "secondo l'età, annotando dettagli come: varie forme di violenza, chat non " "moderate con altre persone tramite internet, o la capacità di spendere " "soldi." #. (itstool) path: section/p #: C/software-installation.page:51 msgid "" "For each application, this information is summarized as the minimum age " "child it is typically suitable to be used by — for example, “suitable for " "ages 7+”. These age ratings are presented in region-specific schemes which " "can be compared with the ratings schemes used for films and games." msgstr "" "In ogni applicazione, questa informazione è condensata come l'età minima " "che è ritenuta appropriata per un minore utilizzarla; ad esempio,“7 anni o +“. " "Queste classificazioni sono presentate in conformità con alcuni " "schemi regionali, paragonabili a quelli utilizzati per classificare " "film e giochi." #. (itstool) path: section/p #: C/software-installation.page:55 msgid "" "The applications shown to a user in the Software catalog can be " "filtered by their age suitability. Applications which are not suitable for " "the user will be hidden, and will not be installable by that user. They will " "be installable by other users (if their age suitability is set high enough)." msgstr "" "Le applicazioni Software mostrate a ciascun utente possono essere " "filtrate per adeguatezza all'età. Le applicazioni non adatte per un account " "verranno nascoste dal catalogo e non potranno essere installate. " "Altri utenti potranno installarle (se la loro fascia d'età è tale che lo si permetta)." #. (itstool) path: section/p #: C/software-installation.page:61 msgid "" "To filter the applications seen by a user in the Software catalog " "to only those suitable for a certain age:" msgstr "" "Per filtrare le applicazioni che vede un utente nel catalogo " "Software e che solo quelli appropriati vengono mostrati per una " "certa età:" #. (itstool) path: item/p #: C/software-installation.page:66 msgid "" "In the Application Suitability list, select the age which " "applications should be suitable for." msgstr "" "Nella lista Idoneità dell'applicazione, selezionare l'età desiderata." #. (itstool) path: note/p #: C/software-installation.page:70 msgid "" "The user’s actual age is not stored, so the Application Suitability is not automatically updated over time as the child grows older. You " "must periodically re-assess the appropriate Application Suitability for each user." msgstr "" "Poiché l'età dell'utente non viene memorizzata, l' Idoneità dell'applicazione non viene aggiornata automaticamente man mano che il minore cresce. Si dovrebbe " "rivalutare periodicamente il livello appropriato di Idoneità dell'applicazione per ciascuno degli account." malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/help/meson.build000066400000000000000000000004651505556674000246730ustar00rootroot00000000000000help_media = [ ] help_files = [ 'creating-a-child-user.page', 'index.page', 'internet.page', 'introduction.page', 'legal.xml', 'restricting-applications.page', 'software-installation.page', ] gnome.yelp(meson.project_name(), sources: help_files, media: help_media, symlink_media: true, ) malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/help/pl/000077500000000000000000000000001505556674000231375ustar00rootroot00000000000000malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/help/pl/pl.po000066400000000000000000000434741505556674000241260ustar00rootroot00000000000000# Polish translation for malcontent help. # Copyright © 2020 the malcontent authors. # This file is distributed under the same license as the malcontent help. # Piotr Drąg , 2020. # Aviary.pl , 2020. # msgid "" msgstr "" "Project-Id-Version: malcontent-help\n" "POT-Creation-Date: 2020-12-18 15:14+0000\n" "PO-Revision-Date: 2020-12-20 13:22+0100\n" "Last-Translator: Piotr Drąg \n" "Language-Team: Polish \n" "Language: pl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " "|| n%100>=20) ? 1 : 2);\n" #. Put one translator per line, in the form NAME , YEAR1, YEAR2 msgctxt "_" msgid "translator-credits" msgstr "" "Piotr Drąg , 2020\n" "Aviary.pl , 2020" #. (itstool) path: info/desc #: C/creating-a-child-user.page:6 msgid "Creating a child user on the computer." msgstr "Tworzenie konta dziecka na komputerze." #. (itstool) path: page/title #: C/creating-a-child-user.page:9 msgid "Creating a Child User" msgstr "Tworzenie konta dziecka" #. (itstool) path: page/p #: C/creating-a-child-user.page:11 msgid "" "Parental controls can only be applied to non-administrator accounts. Such an " "account may have been created when the computer was initially set up. If " "not, a new child user may be created from the Parental Controls " "application if no child users already exist; and otherwise may be created " "from the Control Center." msgstr "" "Kontrola rodzicielska może zostać zastosowana tylko na kontach niebędących " "administratorami. Takie konto można utworzyć podczas początkowej " "konfiguracji komputera. Jeśli nie zostało wtedy utworzone, to można to " "zrobić w programie Kontrola rodzicielska, jeśli żadne konto " "dziecka jeszcze nie istnieje. W przeciwnym wypadku można je utworzyć " "w programie Ustawienia." #. (itstool) path: page/p #: C/creating-a-child-user.page:17 msgid "" "To create a new child user, see Add a new user account. As soon as the new user is " "created, it will appear in the Parental Controls window so that " "its parental controls settings can be configured." msgstr "" "Dokumentacja " "środowiska zawiera informacje o tym, jak utworzyć nowe konto " "użytkownika. Po utworzeniu pojawi się ono w oknie programu Kontrola " "rodzicielska, gdzie można skonfigurować jego ustawienia kontroli " "rodzicielskiej." #. (itstool) path: credit/name #: C/index.page:6 msgid "Philip Withnall" msgstr "Philip Withnall" #. (itstool) path: credit/years #: C/index.page:8 msgid "2020" msgstr "2020" #. (itstool) path: page/title #: C/index.page:12 msgid "Parental Controls Help" msgstr "Kontrola rodzicielska" #. (itstool) path: section/title #: C/index.page:15 msgid "Introduction & Setup" msgstr "Wprowadzenie i konfiguracja" #. (itstool) path: section/title #: C/index.page:19 msgid "Controls to Apply" msgstr "Ograniczenia do zastosowania" #. (itstool) path: info/desc #: C/internet.page:6 msgid "Restricting a child user’s access to the internet." msgstr "Ograniczanie dostępu konta dziecka do Internetu." #. (itstool) path: page/title #: C/internet.page:9 msgid "Restricting Access to the Internet" msgstr "Ograniczanie dostępu do Internetu" #. (itstool) path: page/p #: C/internet.page:11 msgid "" "You can restrict a user’s access to the internet. This will prevent them " "using a web browser, but it will not prevent them using the internet (in " "potentially more limited forms) through other applications. For example, it " "will not prevent access to e-mail accounts using Evolution, and " "it will not prevent software updates being downloaded and applied." msgstr "" "Można ograniczyć użytkownikowi dostęp do Internetu. Uniemożliwi im to " "używanie przeglądarki internetowej, ale nie uniemożliwi im korzystania " "z Internetu (w potencjalnie bardziej ograniczonej formie) za pomocą innych " "programów. Na przykład nie uniemożliwi dostępu do kont e-mail za pomocą " "programu Evolution oraz nie zatrzyma pobierania i instalowania " "aktualizacji oprogramowania." #. (itstool) path: page/p #: C/internet.page:17 msgid "To restrict a user’s access to the internet:" msgstr "Aby ograniczyć dostęp użytkownika do Internetu:" #. (itstool) path: item/p #: C/internet.page:19 C/restricting-applications.page:20 #: C/software-installation.page:28 C/software-installation.page:54 msgid "Open the Parental Controls application." msgstr "Otwórz program Kontrola rodzicielska." #. (itstool) path: item/p #: C/internet.page:20 C/restricting-applications.page:21 #: C/software-installation.page:29 C/software-installation.page:55 msgid "Select the user in the tabs at the top." msgstr "Wybierz użytkownika z kart na górze." #. (itstool) path: item/p #: C/internet.page:21 msgid "" "Enable the Restrict Web Browsers checkbox." msgstr "" "Zaznacz pole Ograniczanie przeglądarek " "internetowych." #. (itstool) path: info/desc #: C/introduction.page:6 msgid "" "Overview of parental controls, the Parental Controls application " "and its use in other situations where access restrictions are needed on a " "user." msgstr "" "Przegląd kontroli rodzicielskiej, programu Kontrola rodzicielska " "i jego użycia w innych sytuacjach, w których potrzebne są ograniczenia " "dostępu użytkownika." #. (itstool) path: page/title #: C/introduction.page:12 msgid "Introduction to Parental Controls" msgstr "Wprowadzenie do kontroli rodzicielskiej" #. (itstool) path: page/p #: C/introduction.page:14 msgid "" "Parental controls are a way to restrict what non-administrator accounts can " "do on the computer, with the aim of allowing parents to restrict what their " "children can do when using the computer unsupervised or under limited " "supervision." msgstr "" "Kontrola rodzicielska to sposób na ograniczanie tego, co nieadministracyjne " "konta mogą robić na komputerze, którego celem jest umożliwienie rodzicom " "ograniczania, co ich dzieci mogą robić w czasie korzystania z komputera bez " "nadzoru lub z minimalnym nadzorem." #. (itstool) path: page/p #: C/introduction.page:18 msgid "" "This functionality can be used in other situations ­– such as other carer/" "caree relationships – but is labelled as ‘parental controls’ so that it’s " "easy to find, as that’s what most people will be looking for." msgstr "" "Ta funkcjonalność może być używana w innych sytuacjach — takich jak inne " "relacje opiekuńcze — ale nazywa się „kontrola rodzicielska”, aby można ją " "było łatwo znaleźć, jako że większość osób będzie szukać tego terminu." #. (itstool) path: page/p #: C/introduction.page:21 msgid "" "The parental controls for any user can be queried and set using the " "Parental Controls application. This lists the non-administrator " "accounts in tabs along its top bar, and shows their current parental " "controls settings below. Changes to the parental controls apply immediately." msgstr "" "Za pomocą programu Kontrola rodzicielska można sprawdzać " "i ustawiać kontrolę rodzicielską dla każdego konta. Zawiera on listę kont " "niebędących administratorami w kartach na górnym pasku i ich obecne " "ustawienia kontroli rodzicielskiej poniżej. Zmiany kontroli rodzicielskiej " "są uwzględniane od razu." #. (itstool) path: page/p #: C/introduction.page:25 msgid "" "Restrictions on using the computer can only be applied to non-administrator " "accounts. The parental controls settings for a user can only be changed by " "an administrator, although the administrator can do so from the user’s " "account by entering their password when prompted by the Parental " "Controls application." msgstr "" "Ograniczenia korzystania z komputera można stosować tylko na kontach " "nieadministracyjnych. Ustawienia kontroli rodzicielskiej użytkownika mogą " "być zmieniane tylko przez administratora, ale administrator może robić to " "z konta użytkownika wpisując swoje hasło, kiedy program Kontrola " "rodzicielska o nie poprosi." #. (itstool) path: p/link #: C/legal.xml:4 msgid "Creative Commons Attribution-ShareAlike 3.0 Unported License" msgstr "Creative Commons Attribution-ShareAlike 3.0 Unported" #. (itstool) path: license/p #: C/legal.xml:3 msgid "This work is licensed under a <_:link-1/>." msgstr "Na warunkach licencji <_:link-1/>." #. (itstool) path: info/desc #: C/restricting-applications.page:6 msgid "Restricting a child user from running already-installed applications." msgstr "" "Ograniczanie kontu dziecka możliwości uruchamiania już zainstalowanych " "programów." #. (itstool) path: page/title #: C/restricting-applications.page:9 msgid "Restricting Access to Installed Applications" msgstr "Ograniczanie dostępu do zainstalowanych programów" #. (itstool) path: page/p #: C/restricting-applications.page:11 msgid "" "You can prevent a user from running specific applications which are already " "installed on the computer. This could be useful if other users need those " "applications but they are not appropriate for a child." msgstr "" "Można uniemożliwić użytkownikowi uruchamianie określonych programów, które " "są już zainstalowane na komputerze. Może to być przydatne, jeśli pozostali " "użytkownicy potrzebują tych programów, ale nie są one odpowiednie dla " "dziecka." #. (itstool) path: page/p #: C/restricting-applications.page:14 msgid "" "When installing additional software, you should consider whether that needs " "to be restricted for some users — newly installed software is usable by all " "users by default." msgstr "" "Podczas instalowania dodatkowego oprogramowania należy rozważyć, czy musi " "ono być ograniczone dla części użytkowników — nowo zainstalowane " "oprogramowanie domyślnie może być używane przez wszystkich użytkowników." #. (itstool) path: page/p #: C/restricting-applications.page:18 msgid "To restrict a user’s access to a specific application:" msgstr "Aby ograniczyć dostęp użytkownika do danego programu:" #. (itstool) path: item/p #: C/restricting-applications.page:22 msgid "Press the Restrict Applications button." msgstr "Kliknij przycisk Ograniczanie programów." #. (itstool) path: item/p #: C/restricting-applications.page:23 msgid "" "Enable the switch in the row for each application you would like to restrict " "the user from accessing." msgstr "" "Kliknij przełącznik w rzędzie każdego programu, do którego użytkownik ma " "mieć ograniczony dostęp." #. (itstool) path: item/p #: C/restricting-applications.page:24 msgid "Close the Restrict Applications window." msgstr "Zamknij okno Ograniczanie programów." #. (itstool) path: page/p #: C/restricting-applications.page:27 msgid "" "Restricting access to specific applications is often used in conjunction " "with to prevent a user from " "installing additional software which has not been vetted." msgstr "" "Ograniczanie dostępu do określonych programów jest często używane " "jednocześnie z funkcją , aby " "uniemożliwić użytkownikowi instalowanie dodatkowego oprogramowania, które " "nie zostało jeszcze zatwierdzone." #. (itstool) path: info/desc #: C/software-installation.page:6 msgid "" "Restricting the software a child user can install, or preventing them " "installing additional software entirely." msgstr "" "Ograniczanie oprogramowania, które dziecko może instalować lub całkowite " "uniemożliwianie im instalowania dodatkowego oprogramowania." #. (itstool) path: page/title #: C/software-installation.page:9 msgid "Restricting Software Installation" msgstr "Ograniczanie instalacji oprogramowania" #. (itstool) path: page/p #: C/software-installation.page:11 msgid "" "You can prevent a user from installing additional software on the system. " "They will still be able to search for new software to install, but will need " "an administrator to authorize the installation when they try to install an " "application. This applies whether they are trying to install the application " "system-wide (for all users) or just for themselves." msgstr "" "Można uniemożliwić użytkownikowi instalowanie dodatkowego oprogramowania na " "komputerze. Nadal będzie on mógł wyszukiwać nowe oprogramowanie, ale do jego " "zainstalowania będzie potrzebował upoważnienia administratora. Ma to " "zastosowanie niezależnie od tego, czy użytkownik próbuje zainstalować " "program w systemie (dla wszystkich użytkowników) czy tylko dla siebie." #. (itstool) path: page/p #: C/software-installation.page:17 msgid "" "Additionally, you can restrict which software a user can browse or search " "for in the Software catalog by age categories." msgstr "" "Dodatkowe można ograniczyć, które oprogramowanie użytkownik może przeglądać " "i wyszukiwać w katalogu Menedżera oprogramowania według kategorii " "wiekowych." #. (itstool) path: page/p #: C/software-installation.page:20 msgid "" "To prevent a user from running an application which has already been " "installed, see ." msgstr "" " zawiera informacje o tym, jak " "uniemożliwić użytkownikowi uruchamianie już zainstalowanego programu." #. (itstool) path: section/title #: C/software-installation.page:24 msgid "Preventing Software Installation" msgstr "Uniemożliwianie instalacji oprogramowania" #. (itstool) path: section/p #: C/software-installation.page:26 msgid "To prevent a user from installing additional software:" msgstr "" "Aby uniemożliwić użytkownikowi instalowanie dodatkowego oprogramowania:" #. (itstool) path: item/p #: C/software-installation.page:30 msgid "" "Enable the Restrict Application Installation " "checkbox." msgstr "" "Zaznacz pole Ograniczanie instalacji programów." #. (itstool) path: section/title #: C/software-installation.page:35 msgid "Restricting Software Installation by Age" msgstr "Ograniczanie instalacji oprogramowania według wieku" #. (itstool) path: section/p #: C/software-installation.page:37 msgid "" "Applications in the Software catalog have information about " "content they contain which might be inappropriate for some ages — for " "example, various forms of violence, unmoderated chat with other people on " "the internet, or the possibility of spending money." msgstr "" "Programy w katalogu Menedżera oprogramowania mają informacje " "o zawieranej treści, która może być nieodpowiednia dla osób w pewnym wieku — " "na przykład różne formy przemocy, niemoderowany czat z innymi osobami " "w Internecie lub możliwość wydawania pieniędzy." #. (itstool) path: section/p #: C/software-installation.page:41 msgid "" "For each application, this information is summarized as the minimum age " "child it is typically suitable to be used by — for example, “suitable for " "ages 7+”. These age ratings are presented in region-specific schemes which " "can be compared with the ratings schemes used for films and games." msgstr "" "Dla każdego programu ta informacja jest podsumowana jako minimalny wiek " "dziecka, w jakim zazwyczaj jest odpowiedni — na przykład „odpowiednie dla " "dzieci siedmioletnich i starszych”. Te oceny wiekowe są przestawiane " "w formie dla danego regionu, które można porównywać z ocenami używanymi dla " "filmów i gier." #. (itstool) path: section/p #: C/software-installation.page:45 msgid "" "The applications shown to a user in the Software catalog can be " "filtered by their age suitability. Applications which are not suitable for " "the user will be hidden, and will not be installable by that user. They will " "be installable by other users (if their age suitability is set high enough)." msgstr "" "Programy wyświetlane użytkownikowi w katalogu Menedżera oprogramowania mogą być filtrowane według ich kategorii wiekowych. Programy " "nieodpowiednie dla użytkownika będą ukryte i nie będzie on mógł ich " "instalować. Pozostali użytkownicy będą mogli je instalować (jeśli ich " "kategoria wiekowa jest ustawiona odpowiednio wysoko)." #. (itstool) path: section/p #: C/software-installation.page:51 msgid "" "To filter the applications seen by a user in the Software catalog " "to only those suitable for a certain age:" msgstr "" "Aby odfiltrować nieodpowiednie programy widoczne dla użytkownika w katalogu " "Menedżera oprogramowania:" #. (itstool) path: item/p #: C/software-installation.page:56 msgid "" "In the Application Suitability list, select the age which " "applications should be suitable for." msgstr "" "Na liście Odpowiedniość programów wybierz wiek, dla którego " "programy powinny być odpowiednie." #. (itstool) path: note/p #: C/software-installation.page:60 msgid "" "The user’s actual age is not stored, so the Application Suitability is not automatically updated over time as the child grows older. You " "must periodically re-assess the appropriate Application Suitability for each user." msgstr "" "Rzeczywisty wiek użytkownika nie jest przechowywany, więc opcja " "Odpowiedniość programów nie jest automatycznie aktualizowana wraz " "z upływem czasu i dorastania dziecka. Należy okresowo sprawdzać, czy opcja " "Odpowiedniość programów jest właściwie ustawiona dla każdego " "użytkownika." malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/help/pt_BR/000077500000000000000000000000001505556674000235325ustar00rootroot00000000000000malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/help/pt_BR/pt_BR.po000066400000000000000000000463121505556674000251060ustar00rootroot00000000000000# Brazilian Portuguese translation for malcontent. # Copyright © 2020-2024 malcontent's COPYRIGHT HOLDER # This file is distributed under the same license as the malcontent package. # Rafael Fontenelle , 2020. # Matheus Polkorny , 2024. # msgid "" msgstr "" "Project-Id-Version: malcontent master\n" "POT-Creation-Date: 2020-04-24 15:30+0000\n" "PO-Revision-Date: 2024-02-27 22:34-0300\n" "Last-Translator: Matheus Polkorny \n" "Language-Team: Brazilian Portuguese \n" "Language: pt_BR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" "X-Generator: Poedit 3.4.2\n" #. Put one translator per line, in the form NAME , YEAR1, YEAR2 msgctxt "_" msgid "translator-credits" msgstr "" "Rafael Fontenelle , 2020\n" "Matheus Polkorny , 2024" #. (itstool) path: info/desc #: C/creating-a-child-user.page:6 msgid "Creating a child user on the computer." msgstr "Criando um usuário filho no computador." #. (itstool) path: page/title #: C/creating-a-child-user.page:9 msgid "Creating a Child User" msgstr "Criando um usuário filho" #. (itstool) path: page/p #: C/creating-a-child-user.page:11 msgid "" "Parental controls can only be applied to non-administrator accounts. Such an " "account may have been created when the computer was initially set up. If not, " "a new child user may be created from the Parental Controls " "application if no child users already exist; and otherwise may be created " "from the Control Center." msgstr "" "Os controles dos pais podem ser aplicados apenas a contas de não " "administrador. Essa conta pode ter sido criada quando o computador foi " "configurado inicialmente. Caso contrário, um novo usuário filho poderá ser " "criado a partir do aplicativo Controle parental se nenhum usuário " "filho já existir; e, caso contrário, pode ser criado no Controle " "parental." #. (itstool) path: page/p #: C/creating-a-child-user.page:17 msgid "" "To create a new child user, see Add a new user account. As soon as the new user is created, " "it will appear in the Parental Controls window so that its " "parental controls settings can be configured." msgstr "" "Para criar um novo usuário filho, consulte Adicionando uma nova conta de usuário. Assim que " "o novo usuário for criado, ele aparecerá na janela do Controle parental para que suas configurações de controle parental possam ser definidas." #. (itstool) path: credit/name #: C/index.page:6 msgid "Philip Withnall" msgstr "Philip Withnall" #. (itstool) path: credit/years #: C/index.page:8 msgid "2020" msgstr "2020" #. (itstool) path: page/title #: C/index.page:12 msgid "Parental Controls Help" msgstr "Ajuda do Controle parental" #. (itstool) path: section/title #: C/index.page:15 msgid "Introduction & Setup" msgstr "Introdução & configuração" #. (itstool) path: section/title #: C/index.page:19 msgid "Controls to Apply" msgstr "Controles para aplicar" #. (itstool) path: info/desc #: C/internet.page:6 msgid "Restricting a child user’s access to the internet." msgstr "Restringindo o acesso do usuário filho à Internet." #. (itstool) path: page/title #: C/internet.page:9 msgid "Restricting Access to the Internet" msgstr "Restringindo acesso à Internet" #. (itstool) path: page/p #: C/internet.page:11 msgid "" "You can restrict a user’s access to the internet. This will prevent them " "using a web browser, but it will not prevent them using the internet (in " "potentially more limited forms) through other applications. For example, it " "will not prevent access to e-mail accounts using Evolution, and it " "will not prevent software updates being downloaded and applied." msgstr "" "Você pode restringir o acesso de um usuário à Internet. Isso os impedirá de " "usar um navegador web, mas não os impedirá de usar a Internet (em formas " "potencialmente mais limitadas) por meio de outros aplicativos. Por exemplo, " "não impedirá o acesso a contas de e-mail usando o Evolution, nem " "impedirá o download e aplicação de atualizações de software." #. (itstool) path: page/p #: C/internet.page:17 msgid "To restrict a user’s access to the internet:" msgstr "Para restringir o acesso de um usuário à Internet:" #. (itstool) path: item/p #: C/internet.page:19 C/restricting-applications.page:20 #: C/software-installation.page:27 C/software-installation.page:64 msgid "Open the Parental Controls application." msgstr "Abra o aplicativo Controle parental." #. (itstool) path: item/p #: C/internet.page:20 C/restricting-applications.page:21 #: C/software-installation.page:28 C/software-installation.page:65 msgid "Select the user in the tabs at the top." msgstr "Selecione o usuário nas abas no topo." #. (itstool) path: item/p #: C/internet.page:21 msgid "Enable the Restrict Web Browsers checkbox." msgstr "" "Habilite a caixa de seleção Restringir navegadores " "web." #. (itstool) path: info/desc #: C/introduction.page:6 msgid "" "Overview of parental controls, the Parental Controls " "application and its use in other situations where access restrictions are " "needed on a user." msgstr "" "Visão geral do Controle Parental, o aplicativo Controle parental e " "seu uso em outras situações em que sejam necessárias restrições de acesso a " "um usuário." #. (itstool) path: page/title #: C/introduction.page:10 msgid "Introduction to Parental Controls" msgstr "Introdução ao Controle Parental" #. (itstool) path: page/p #: C/introduction.page:12 msgid "" "Parental controls are a way to restrict what non-administrator accounts can " "do on the computer, with the aim of allowing parents to restrict what their " "children can do when using the computer unsupervised or under limited " "supervision." msgstr "" "O controle parental é uma maneira de restringir o que as contas não-" "administradoras podem fazer no computador, com o objetivo de permitir que os " "pais restrinjam o que seus filhos podem fazer ao usar o computador sem " "supervisão ou sob supervisão limitada." #. (itstool) path: page/p #: C/introduction.page:16 msgid "" "This functionality can be used in other situations ­– such as other carer/" "caree relationships – but is labelled as ‘parental controls’ so that it’s " "easy to find, as that’s what most people will be looking for." msgstr "" "Essa funcionalidade pode ser usada em outras situações, como outras relações " "de tutor/tutelado, mas é rotulada como “controle parental”, para que seja " "fácil de encontrar, pois é isso que a maioria das pessoas procura." #. (itstool) path: page/p #: C/introduction.page:19 msgid "" "The parental controls for any user can be queried and set using the " "Parental Controls application. This lists the non-administrator " "accounts in tabs along its top bar, and shows their current parental controls " "settings below. Changes to the parental controls apply immediately." msgstr "" "O controle parental para qualquer usuário pode ser consultado e definido " "usando o aplicativo Controle parental. Isso lista as contas de não " "administrador nas abas na barra superior e mostra as configurações atuais do " "controle parental abaixo. Alterações no controle parental se aplicam " "imediatamente." #. (itstool) path: page/p #: C/introduction.page:23 msgid "" "Restrictions on using the computer can only be applied to non-administrator " "accounts. The parental controls settings for a user can only be changed by an " "administrator, although the administrator can do so from the user’s account " "by entering their password when prompted by the Parental Controls " "application." msgstr "" "Restrições ao uso do computador podem ser aplicadas apenas a contas de não " "administrador. As configurações de controle parental de um usuário só podem " "ser alteradas por um administrador, embora o administrador possa fazer isso " "da conta do usuário digitando sua senha quando solicitado pelo aplicativo " "Controle parental." #. (itstool) path: p/link #: C/legal.xml:4 msgid "Creative Commons Attribution-ShareAlike 3.0 Unported License" msgstr "Creative Commons Atribuição Compartilhada Igual 3.0 Não Adaptada" #. (itstool) path: license/p #: C/legal.xml:3 msgid "This work is licensed under a <_:link-1/>." msgstr "Essa obra está licenciada sob uma licença <_:link-1/>." #. (itstool) path: info/desc #: C/restricting-applications.page:6 msgid "Restricting a child user from running already-installed applications." msgstr "Restringindo um usuário filho de executar aplicativos já instalados." #. (itstool) path: page/title #: C/restricting-applications.page:9 msgid "Restricting Access to Installed Applications" msgstr "Restringindo o acesso aos aplicativos instalados" #. (itstool) path: page/p #: C/restricting-applications.page:11 msgid "" "You can prevent a user from running specific applications which are already " "installed on the computer. This could be useful if other users need those " "applications but they are not appropriate for a child." msgstr "" "Você pode impedir que um usuário execute aplicativos específicos que já estão " "instalados no computador. Isso pode ser útil se outros usuários precisarem " "desses aplicativos, mas não forem apropriados para uma criança." #. (itstool) path: page/p #: C/restricting-applications.page:14 msgid "" "When installing additional software, you should consider whether that needs " "to be restricted for some users — newly installed software is usable by all " "users by default." msgstr "" "Ao instalar software adicional, considere se isso precisa ser restrito para " "alguns usuários — o software recém-instalado é utilizável por todos os " "usuários por padrão." #. (itstool) path: page/p #: C/restricting-applications.page:18 msgid "To restrict a user’s access to a specific application:" msgstr "Para restringir o acesso de um usuário a um aplicativo específico:" #. (itstool) path: item/p #: C/restricting-applications.page:22 msgid "Press the Restrict Applications button." msgstr "Pressione o botão Restringir aplicativos." #. (itstool) path: item/p #: C/restricting-applications.page:23 msgid "" "Enable the switch in the row for each application you would like to restrict " "the user from accessing." msgstr "" "Habilite a opção na linha de cada aplicativo que você gostaria de restringir " "o acesso do usuário." #. (itstool) path: item/p #: C/restricting-applications.page:24 msgid "Close the Restrict Applications window." msgstr "Feche a janela Restringir aplicativos." #. (itstool) path: page/p #: C/restricting-applications.page:27 msgid "" "Restricting access to specific applications is often used in conjunction with " " to prevent a user from installing " "additional software which has not been vetted." msgstr "" "A restrição de acesso a aplicativos específicos é frequentemente usada em " "conjunto com para impedir que um " "usuário instale um software adicional que ainda não foi verificado." #. (itstool) path: info/desc #: C/software-installation.page:6 msgid "" "Restricting the software a child user can install, or preventing them " "installing additional software entirely." msgstr "" "Restringindo o software que um usuário filho pode instalar ou impedindo-o de " "instalar completamente software adicional." #. (itstool) path: page/title #: C/software-installation.page:9 msgid "Restricting Software Installation" msgstr "Restringindo instalação de software" #. (itstool) path: page/p #: C/software-installation.page:11 msgid "" "You can prevent a user from installing additional software on the system. " "They will still be able to search for new software to install, but will need " "an administrator to authorize the installation when they try to install an " "application. This applies whether they are trying to install the application " "system-wide (for all users) or just for themselves." msgstr "" "Você pode impedir que um usuário instale software adicional no sistema. Eles " "ainda poderão procurar novos softwares para instalar, mas precisarão de um " "administrador para autorizar a instalação quando tentarem instalar um " "aplicativo. Isso se aplica quer eles estejam tentando instalar o aplicativo " "em todo o sistema (para todos os usuários) ou apenas para eles próprios." #. (itstool) path: page/p #: C/software-installation.page:16 msgid "" "Additionally, you can restrict which software a user can browse or search for " "in the Software catalog by age categories." msgstr "" "Além disso, você pode restringir o software que um usuário pode procurar ou " "procurar no catálogo Software por categorias de idade." #. (itstool) path: page/p #: C/software-installation.page:19 msgid "" "To prevent a user from running an application which has already been " "installed, see ." msgstr "" "Para impedir que um usuário execute um aplicativo que já foi instalado, " "consulte ." #. (itstool) path: section/title #: C/software-installation.page:23 msgid "Preventing Software Installation" msgstr "Impedindo a instalação do software" #. (itstool) path: section/p #: C/software-installation.page:25 msgid "To prevent a user from installing additional software:" msgstr "Para impedir que um usuário instale software adicional:" #. (itstool) path: item/p #: C/software-installation.page:29 msgid "" "Enable the Restrict Application Installation " "checkbox." msgstr "" "Marque a caixa de seleção Restringir instalação de " "aplicativo." #. (itstool) path: item/p #: C/software-installation.page:30 msgid "" "Or enable the Restrict Application Installation for " "Others checkbox." msgstr "" "Ou habilite a caixa de seleção Restringir instalação " "de aplicativo para outros." #. (itstool) path: section/p #: C/software-installation.page:33 msgid "" "The Restrict Application Installation for Others checkbox allows the user to install additional software for themselves, " "but prevents that software from being made available to other users. It could " "be used, for example, if there were two child users, one of whom is mature " "enough to be allowed to install additional software, but the other isn’t — " "enabling Restrict Application Installation for " "Others would prevent the more mature child from installing applications " "which are inappropriate for the other child and making them available to the " "other child." msgstr "" "A caixa de seleção Restringir instalação de " "aplicativo para outros permite ao usuário instalar software adicional " "para eles mesmos, mas impede que esse software seja disponibilizado para " "outros usuários. Poderia ser usado, por exemplo, se houvesse dois usuários " "filhos, um deles maduro o suficiente para poder instalar software adicional, " "mas o outro não — habilitando Restringir a instalação " "de aplicativo para outros impediria a criança mais madura de instalar " "aplicativos inadequados para a outra criança e disponibilizá-los para a outra " "criança." #. (itstool) path: section/title #: C/software-installation.page:45 msgid "Restricting Software Installation by Age" msgstr "Restringindo instalação de software por idade" #. (itstool) path: section/p #: C/software-installation.page:47 msgid "" "Applications in the Software catalog have information about " "content they contain which might be inappropriate for some ages — for " "example, various forms of violence, unmoderated chat with other people on the " "internet, or the possibility of spending money." msgstr "" "Os aplicativos no catálogo Software contêm informações sobre o " "conteúdo que podem ser inadequadas por algumas idades — por exemplo, várias " "formas de violência, bate-papo moderado com outras pessoas na Internet ou a " "possibilidade de gastar dinheiro." #. (itstool) path: section/p #: C/software-installation.page:51 msgid "" "For each application, this information is summarized as the minimum age child " "it is typically suitable to be used by — for example, “suitable for ages 7+”. " "These age ratings are presented in region-specific schemes which can be " "compared with the ratings schemes used for films and games." msgstr "" "Para cada aplicativo, essas informações são resumidas como a criança com " "idade mínima em que normalmente é adequada para ser usada por — por exemplo, " "“adequada para idades acima de 7 anos”. Essas classificações etárias são " "apresentadas em esquemas de região específica que podem ser comparados com os " "esquemas de classificação usados para filmes e jogos." #. (itstool) path: section/p #: C/software-installation.page:55 msgid "" "The applications shown to a user in the Software catalog can be " "filtered by their age suitability. Applications which are not suitable for " "the user will be hidden, and will not be installable by that user. They will " "be installable by other users (if their age suitability is set high enough)." msgstr "" "Os aplicativos mostrados a um usuário no catálogo Software podem " "ser filtrados de acordo com a sua idade. Os aplicativos que não são adequados " "para o usuário serão ocultados e não serão instaláveis por esse usuário. Eles " "serão instaláveis por outros usuários (se a adequação à idade for alta o " "suficiente)." #. (itstool) path: section/p #: C/software-installation.page:61 msgid "" "To filter the applications seen by a user in the Software catalog " "to only those suitable for a certain age:" msgstr "" "Para filtrar os aplicativos vistos por um usuário no catálogo Software apenas para aqueles adequados para uma certa idade:" #. (itstool) path: item/p #: C/software-installation.page:66 msgid "" "In the Application Suitability list, select the age which " "applications should be suitable for." msgstr "" "Na lista Adequação do aplicativo, selecione a idade para a qual os " "aplicativos devem ser adequados." #. (itstool) path: note/p #: C/software-installation.page:70 msgid "" "The user’s actual age is not stored, so the Application Suitability is not automatically updated over time as the child grows older. You " "must periodically re-assess the appropriate Application Suitability for each user." msgstr "" "A idade real do usuário não é armazenada, portanto, a Adequação do " "aplicativo não é atualizada automaticamente ao longo do tempo à medida " "que a criança cresce. Você deve reavaliar periodicamente a Adequação do " "aplicativo para cada usuário." malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/help/ru/000077500000000000000000000000001505556674000231525ustar00rootroot00000000000000malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/help/ru/ru.po000066400000000000000000000557711505556674000241570ustar00rootroot00000000000000# Russian translation for malcontent. # Copyright (C) 2022 malcontent's COPYRIGHT HOLDER # This file is distributed under the same license as the malcontent package. # Sergej A. , 2022. # msgid "" msgstr "" "Project-Id-Version: malcontent main\n" "POT-Creation-Date: 2022-06-04 15:25+0000\n" "PO-Revision-Date: 2022-06-05 11:41+1000\n" "Last-Translator: Ser82-png \n" "Language-Team: Russian \n" "Language: ru\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" "X-Generator: Poedit 2.3\n" #. Put one translator per line, in the form NAME , YEAR1, YEAR2 msgctxt "_" msgid "translator-credits" msgstr "Ser82-png , 2022" #. (itstool) path: info/desc #: C/creating-a-child-user.page:6 msgid "Creating a child user on the computer." msgstr "Создание записи пользователя-ребёнка на компьютере." #. (itstool) path: page/title #: C/creating-a-child-user.page:9 msgid "Creating a Child User" msgstr "Создание записи пользователя-ребёнка" #. (itstool) path: page/p #: C/creating-a-child-user.page:11 msgid "" "Parental controls can only be applied to non-administrator accounts. Such an " "account may have been created when the computer was initially set up. If " "not, a new child user may be created from the Parental Controls " "application if no child users already exist; and otherwise may be created " "from the Control Center." msgstr "" "Родительский контроль можно применять только к учётным записям без " "административных прав. Такая учётная запись могла быть создана при " "первоначальной настройке системы. Если этого не было сделано, можно создать " "новую детскую учётную запись с помощью приложения Родительский " "контроль. Кроме того, такую учётную запись можно создать с помощью " "Центра управления." #. (itstool) path: page/p #: C/creating-a-child-user.page:17 msgid "" "To create a new child user, see Add a new user account. As soon as the new user is " "created, it will appear in the Parental Controls window so that " "its parental controls settings can be configured." msgstr "" "Чтобы создать нового пользователя ребёнка, смотрите Добавление новой учётной записи " "пользователя. Как только новый пользователь будет создан, он появится " "в окне Родительский контроль, чтобы можно было для него настроить " "параметры родительского контроля." #. (itstool) path: credit/name #: C/index.page:6 msgid "Philip Withnall" msgstr "Philip Withnall" #. (itstool) path: credit/years #: C/index.page:8 msgid "2020" msgstr "2020" #. (itstool) path: page/title #: C/index.page:12 msgid "Parental Controls Help" msgstr "Справка по родительскому контролю" #. (itstool) path: section/title #: C/index.page:15 msgid "Introduction & Setup" msgstr "Введение & Настройка" #. (itstool) path: section/title #: C/index.page:19 msgid "Controls to Apply" msgstr "Средства контроля, которые можно применить" #. (itstool) path: info/desc #: C/internet.page:6 msgid "Restricting a child user’s access to the internet." msgstr "Ограничение доступа ребёнка к интернету." #. (itstool) path: page/title #: C/internet.page:9 msgid "Restricting Access to the Internet" msgstr "Ограничение доступа к интернету" #. (itstool) path: page/p #: C/internet.page:11 msgid "" "You can restrict a user’s access to the internet. This will prevent them " "using a web browser, but it will not prevent them using the internet (in " "potentially more limited forms) through other applications. For example, it " "will not prevent access to e-mail accounts using Evolution, and " "it will not prevent software updates being downloaded and applied." msgstr "" "Вы можете ограничить доступ пользователя к интернету. Этим способом можно " "запретить пользователю использовать веб-браузер, но доступ к сети интернет " "будет сохранён (в потенциально более ограниченной форме) с помощью других " "приложений. Например, пользователь будет иметь доступ к учётным записям " "электронной почты с помощью Evolution, а также не будет " "ограничений для загрузки и обновления программного обеспечения." #. (itstool) path: page/p #: C/internet.page:17 msgid "To restrict a user’s access to the internet:" msgstr "Чтобы ограничить доступ пользователя к интернету:" #. (itstool) path: item/p #: C/internet.page:19 C/restricting-applications.page:20 #: C/software-installation.page:28 C/software-installation.page:54 msgid "Open the Parental Controls application." msgstr "Откройте приложение Родительский контроль." #. (itstool) path: item/p #: C/internet.page:20 C/restricting-applications.page:21 #: C/software-installation.page:29 C/software-installation.page:55 msgid "Select the user in the tabs at the top." msgstr "Выберите пользователя во вкладках верхней части окна." #. (itstool) path: item/p #: C/internet.page:21 msgid "" "Enable the Restrict Web Browsers checkbox." msgstr "" "Установите флажок Ограничить доступ к Веб-браузерам." #. (itstool) path: info/desc #: C/introduction.page:6 msgid "" "Overview of parental controls, the Parental Controls application " "and its use in other situations where access restrictions are needed on a " "user." msgstr "" "Обзор родительского контроля, приложения Родительский контроль и " "его использования в различных ситуациях, когда необходимо ограничить доступ " "для пользователя." #. (itstool) path: page/title #: C/introduction.page:12 msgid "Introduction to Parental Controls" msgstr "Введение в родительский контроль" #. (itstool) path: page/p #: C/introduction.page:14 msgid "" "Parental controls are a way to restrict what non-administrator accounts can " "do on the computer, with the aim of allowing parents to restrict what their " "children can do when using the computer unsupervised or under limited " "supervision." msgstr "" "Родительский контроль — это способ ограничить перечень возможных действий на " "компьютере пользователям не имеющим учётных записей администратора. Целью " "является ограничение родителями действий детей при работе на компьютере, " "находящихся без присмотра или под ограниченным присмотром." #. (itstool) path: page/p #: C/introduction.page:18 msgid "" "This functionality can be used in other situations ­– such as other carer/" "caree relationships – but is labelled as ‘parental controls’ so that it’s " "easy to find, as that’s what most people will be looking for." msgstr "" "Эту функцию также можно использовать и в других ситуациях, например, в " "отношениях «сиделка/пациент», но она помечена как «родительский контроль» " "только для удобства поиска, поскольку именно это будут искать большинство " "пользователей." #. (itstool) path: page/p #: C/introduction.page:21 msgid "" "The parental controls for any user can be queried and set using the " "Parental Controls application. This lists the non-administrator " "accounts in tabs along its top bar, and shows their current parental " "controls settings below. Changes to the parental controls apply immediately." msgstr "" "Для любого пользователя можно просмотреть и установить родительский контроль " "с помощью приложения Родительский контроль. В окне программы на " "вкладках вдоль верхней панели перечислены учётные записи без прав " "администратора, а ниже показаны их текущие настройки родительского контроля. " "Изменения в родительском контроле вступают в силу немедленно." #. (itstool) path: page/p #: C/introduction.page:25 msgid "" "Restrictions on using the computer can only be applied to non-administrator " "accounts. The parental controls settings for a user can only be changed by " "an administrator, although the administrator can do so from the user’s " "account by entering their password when prompted by the Parental " "Controls application." msgstr "" "Ограничения на использование компьютера могут применяться только к учётным " "записям без прав администратора. Настройки родительского контроля для " "пользователя может изменить только администратор, хотя он может сделать это " "из учётной записи пользователя, введя свой пароль при запросе приложения " "Родительский контроль." #. (itstool) path: p/link #: C/legal.xml:4 msgid "Creative Commons Attribution-ShareAlike 3.0 Unported License" msgstr "Creative Commons Attribution-ShareAlike 3.0 Unported License" #. (itstool) path: license/p #: C/legal.xml:3 msgid "This work is licensed under a <_:link-1/>." msgstr "Данная работа находится под лицензией <_:link-1/>." #. (itstool) path: info/desc #: C/restricting-applications.page:6 msgid "Restricting a child user from running already-installed applications." msgstr "Запретить ребёнку запускать уже установленные приложения." #. (itstool) path: page/title #: C/restricting-applications.page:9 msgid "Restricting Access to Installed Applications" msgstr "Ограничение доступа к установленным приложениям" #. (itstool) path: page/p #: C/restricting-applications.page:11 msgid "" "You can prevent a user from running specific applications which are already " "installed on the computer. This could be useful if other users need those " "applications but they are not appropriate for a child." msgstr "" "Вы можете запретить пользователю запускать определённые приложения, уже " "установленные на компьютере. Это может быть полезно, если эти приложения " "необходимы другим пользователям, но не подходят для ребёнка." #. (itstool) path: page/p #: C/restricting-applications.page:14 msgid "" "When installing additional software, you should consider whether that needs " "to be restricted for some users — newly installed software is usable by all " "users by default." msgstr "" "При установке дополнительного программного обеспечения вам следует " "учитывать, нужно ли ограничивать доступ для некоторых пользователей — новое " "установленное программное обеспечение по умолчанию может использоваться " "всеми пользователями." #. (itstool) path: page/p #: C/restricting-applications.page:18 msgid "To restrict a user’s access to a specific application:" msgstr "Чтобы ограничить доступ пользователя к определенному приложению:" #. (itstool) path: item/p #: C/restricting-applications.page:22 msgid "Press the Restrict Applications button." msgstr "" "Нажмите кнопку Ограничить доступ к приложениям." #. (itstool) path: item/p #: C/restricting-applications.page:23 msgid "" "Enable the switch in the row for each application you would like to restrict " "the user from accessing." msgstr "" "Измените положение переключателя в строке для каждого приложения, к которому " "вы хотите ограничить доступ пользователя." #. (itstool) path: item/p #: C/restricting-applications.page:24 msgid "Close the Restrict Applications window." msgstr "Закройте окно Ограничить доступ к приложениям." #. (itstool) path: page/p #: C/restricting-applications.page:27 msgid "" "Restricting access to specific applications is often used in conjunction " "with to prevent a user from " "installing additional software which has not been vetted." msgstr "" "Ограничение доступа к определённым приложениям часто используется в " "сочетании с , чтобы запретить " "пользователю устанавливать непроверенное программное обеспечение." #. (itstool) path: info/desc #: C/software-installation.page:6 msgid "" "Restricting the software a child user can install, or preventing them " "installing additional software entirely." msgstr "" "Ограничение перечная программного обеспечения, которое ребёнок может " "установить, или полный запрет на его установку." #. (itstool) path: page/title #: C/software-installation.page:9 msgid "Restricting Software Installation" msgstr "Ограничения на установку программного обеспечения по возрасту" #. (itstool) path: page/p #: C/software-installation.page:11 msgid "" "You can prevent a user from installing additional software on the system. " "They will still be able to search for new software to install, but will need " "an administrator to authorize the installation when they try to install an " "application. This applies whether they are trying to install the application " "system-wide (for all users) or just for themselves." msgstr "" "Вы можете запретить пользователям устанавливать дополнительное программное " "обеспечение. Хотя они по-прежнему смогут искать программное обеспечение для " "установки, но при попытке установить приложение им потребуется разрешение " "администратора. Это не зависит от того, пытаются ли установить приложение в " "масштабах всей системы (для всех пользователей) или только для себя." #. (itstool) path: page/p #: C/software-installation.page:17 msgid "" "Additionally, you can restrict which software a user can browse or search " "for in the Software catalog by age categories." msgstr "" "Кроме того, вы можете ограничить по возрастному критерию, какое программное " "обеспечение пользователь может просматривать или искать в Центре " "приложений." #. (itstool) path: page/p #: C/software-installation.page:20 msgid "" "To prevent a user from running an application which has already been " "installed, see ." msgstr "" "Чтобы запретить пользователю запускать уже установленное приложение, " "смотрите раздел ." #. (itstool) path: section/title #: C/software-installation.page:24 msgid "Preventing Software Installation" msgstr "Предотвращение установки программного обеспечения" #. (itstool) path: section/p #: C/software-installation.page:26 msgid "To prevent a user from installing additional software:" msgstr "" "Чтобы запретить пользователю устанавливать дополнительное программное " "обеспечение:" #. (itstool) path: item/p #: C/software-installation.page:30 msgid "" "Enable the Restrict Application Installation " "checkbox." msgstr "" "Установите флажок Ограничить установку приложений." #. (itstool) path: section/title #: C/software-installation.page:35 msgid "Restricting Software Installation by Age" msgstr "Ограничения на установку программного обеспечения по возрасту" #. (itstool) path: section/p #: C/software-installation.page:37 msgid "" "Applications in the Software catalog have information about " "content they contain which might be inappropriate for some ages — for " "example, various forms of violence, unmoderated chat with other people on " "the internet, or the possibility of spending money." msgstr "" "В описании к приложениям из каталога Центра приложений содержатся " "сведения, которые могут быть неприемлемыми для определённых возрастных групп " "— например, различные формы насилия, неограниченные возможности по общению с " "другими людьми в интернете или возможность расходовать деньги." #. (itstool) path: section/p #: C/software-installation.page:41 msgid "" "For each application, this information is summarized as the minimum age " "child it is typically suitable to be used by — for example, “suitable for " "ages 7+”. These age ratings are presented in region-specific schemes which " "can be compared with the ratings schemes used for films and games." msgstr "" "Для каждого приложения в этих сведениях содержится информация о минимальном " "возрасте ребенка, с которого его можно допустить к использованию данного " "приложения. Например, «подходит для возраста 7+». Эти возрастные оценки " "представлены в виде специфических для региона схем, сопоставимых со схемами " "рейтингов для фильмов и видеоигр." #. (itstool) path: section/p #: C/software-installation.page:45 msgid "" "The applications shown to a user in the Software catalog can be " "filtered by their age suitability. Applications which are not suitable for " "the user will be hidden, and will not be installable by that user. They will " "be installable by other users (if their age suitability is set high enough)." msgstr "" "Приложения, показанные в каталоге Центра приложений, могут быть " "отфильтрованы по возрастным критериям. Приложения, которые не подходят для " "конкретного пользователя, будут скрыты и не смогут быть установлены. Но для " "других пользователей они будут доступны (если пользователи будут " "соответствовать установленным возрастным критериям)." #. (itstool) path: section/p #: C/software-installation.page:51 msgid "" "To filter the applications seen by a user in the Software catalog " "to only those suitable for a certain age:" msgstr "" "Чтобы отфильтровать приложения, представленные пользователю в каталоге " "Центра приложений, по возрастному критерию:" #. (itstool) path: item/p #: C/software-installation.page:56 msgid "" "In the Application Suitability list, select the age which " "applications should be suitable for." msgstr "" "В списке Пригодность приложений выберите возраст, для которого " "должны быть подходящими приложения." #. (itstool) path: note/p #: C/software-installation.page:60 msgid "" "The user’s actual age is not stored, so the Application Suitability is not automatically updated over time as the child grows older. You " "must periodically re-assess the appropriate Application Suitability for each user." msgstr "" "Возраст пользователя в системе не сохраняется, поэтому Пригодность " "приложений по мере взросления ребёнка автоматически не обновляется. Вы " "должны периодически пересматривать соответствующую для каждого пользователя " "Пригодность приложений." malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/help/sv/000077500000000000000000000000001505556674000231545ustar00rootroot00000000000000malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/help/sv/sv.po000066400000000000000000000461161505556674000241540ustar00rootroot00000000000000# Swedish translation for malcontent. # Copyright (C) 2020 malcontent's COPYRIGHT HOLDER # This file is distributed under the same license as the malcontent package. # Anders Jonsson , 2020. # msgid "" msgstr "" "Project-Id-Version: malcontent master\n" "POT-Creation-Date: 2020-12-08 15:28+0000\n" "PO-Revision-Date: 2020-12-17 18:25+0100\n" "Last-Translator: Anders Jonsson \n" "Language-Team: Swedish \n" "Language: sv\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Poedit 2.4.2\n" #. Put one translator per line, in the form NAME , YEAR1, YEAR2 msgctxt "_" msgid "translator-credits" msgstr "Anders Jonsson " #. (itstool) path: info/desc #: C/creating-a-child-user.page:6 msgid "Creating a child user on the computer." msgstr "Skapa en barnanvändare på datorn." #. (itstool) path: page/title #: C/creating-a-child-user.page:9 msgid "Creating a Child User" msgstr "Skapa en barnanvändare" #. (itstool) path: page/p #: C/creating-a-child-user.page:11 msgid "" "Parental controls can only be applied to non-administrator accounts. Such an " "account may have been created when the computer was initially set up. If " "not, a new child user may be created from the Parental Controls " "application if no child users already exist; and otherwise may be created " "from the Control Center." msgstr "" "Föräldrakontroller kan endast tillämpas på konton som inte är " "administratörer. Ett sådant konto kan ha skapats när datorn ursprungligen " "konfigurerades. Om inte så kan en ny barnanvändare skapas från programmet " "Föräldrakontroller om det inte redan finns några barnanvändare. " "Annars kan de skapas från Kontrollpanel." #. (itstool) path: page/p #: C/creating-a-child-user.page:17 msgid "" "To create a new child user, see Add a new user account. As soon as the new user is " "created, it will appear in the Parental Controls window so that " "its parental controls settings can be configured." msgstr "" "För att skapa en ny barnanvändare, se Lägg till ett nytt användarkonto. Så snart användaren " "har skapats kommer den dyka upp i Föräldrakontroller-fönstret så " "att dess inställningar för föräldrakontroll kan konfigureras." #. (itstool) path: credit/name #: C/index.page:6 msgid "Philip Withnall" msgstr "Philip Withnall" #. (itstool) path: credit/years #: C/index.page:8 msgid "2020" msgstr "2020" #. (itstool) path: page/title #: C/index.page:12 msgid "Parental Controls Help" msgstr "Hjälp för Föräldrakontroller" #. (itstool) path: section/title #: C/index.page:15 msgid "Introduction & Setup" msgstr "Introduktion & konfiguration" #. (itstool) path: section/title #: C/index.page:19 msgid "Controls to Apply" msgstr "Kontroller att tillämpa" #. (itstool) path: info/desc #: C/internet.page:6 msgid "Restricting a child user’s access to the internet." msgstr "Begränsa en barnanvändares åtkomst till internet." #. (itstool) path: page/title #: C/internet.page:9 msgid "Restricting Access to the Internet" msgstr "Begränsa åtkomst till internet" #. (itstool) path: page/p #: C/internet.page:11 msgid "" "You can restrict a user’s access to the internet. This will prevent them " "using a web browser, but it will not prevent them using the internet (in " "potentially more limited forms) through other applications. For example, it " "will not prevent access to e-mail accounts using Evolution, and " "it will not prevent software updates being downloaded and applied." msgstr "" "Du kan begränsa en användares åtkomst till internet. Detta kommer att " "förhindra dem från att använda en webbläsare, men det kommer inte att hindra " "dem från att använda internet (potentiellt i mer begränsade former) genom " "andra program. Det kommer till exempel inte förhindra åtkomst till e-" "postkonton genom Evolution, och kommer inte förhindra att " "programvaruuppdateringar hämtas och tillämpas." #. (itstool) path: page/p #: C/internet.page:17 msgid "To restrict a user’s access to the internet:" msgstr "För att begränsa en användares åtkomst till internet:" #. (itstool) path: item/p #: C/internet.page:19 C/restricting-applications.page:20 #: C/software-installation.page:28 C/software-installation.page:54 msgid "Open the Parental Controls application." msgstr "Öppna programmet Föräldrakontroller." #. (itstool) path: item/p #: C/internet.page:20 C/restricting-applications.page:21 #: C/software-installation.page:29 C/software-installation.page:55 msgid "Select the user in the tabs at the top." msgstr "Välj användaren i flikarna högst upp." #. (itstool) path: item/p #: C/internet.page:21 msgid "" "Enable the Restrict Web Browsers checkbox." msgstr "Aktivera kryssrutan Begränsa webbläsare." #. (itstool) path: info/desc #: C/introduction.page:6 msgid "" "Overview of parental controls, the Parental Controls application " "and its use in other situations where access restrictions are needed on a " "user." msgstr "" "Översikt över föräldrakontroller, programmet Föräldrakontroller " "och dess användning i andra situationer där åtkomstbegränsningar behövs för " "en användare." #. (itstool) path: page/title #: C/introduction.page:12 msgid "Introduction to Parental Controls" msgstr "Introduktion till Föräldrakontroller" #. (itstool) path: page/p #: C/introduction.page:14 msgid "" "Parental controls are a way to restrict what non-administrator accounts can " "do on the computer, with the aim of allowing parents to restrict what their " "children can do when using the computer unsupervised or under limited " "supervision." msgstr "" "Föräldrakontroller är ett sätt att begränsa vad icke-administratörskonton " "kan göra på datorn, med målet att låta föräldrar begränsa vad deras barn kan " "göra när de använder datorn utan översikt eller med begränsad översikt." #. (itstool) path: page/p #: C/introduction.page:18 msgid "" "This functionality can be used in other situations ­– such as other carer/" "caree relationships – but is labelled as ‘parental controls’ so that it’s " "easy to find, as that’s what most people will be looking for." msgstr "" "Denna funktionalitet kan användas i andra situationer – som i andra " "relationer där ena parten har ansvar för den andra – men kallas " "”föräldrakontroller” för att vara lätt att hitta, då det är vad de flesta " "kommer att söka efter." #. (itstool) path: page/p #: C/introduction.page:21 msgid "" "The parental controls for any user can be queried and set using the " "Parental Controls application. This lists the non-administrator " "accounts in tabs along its top bar, and shows their current parental " "controls settings below. Changes to the parental controls apply immediately." msgstr "" "Föräldrakontrollerna för alla användare kan efterfrågas och ställas in med " "programmet Föräldrakontroller. Detta listar icke-" "administratörskontona i flikar i en rad högst upp, och visar deras aktuella " "inställningar för föräldrakontroller nedanför. Ändringar till " "föräldrakontrollerna tillämpas omedelbart." #. (itstool) path: page/p #: C/introduction.page:25 msgid "" "Restrictions on using the computer can only be applied to non-administrator " "accounts. The parental controls settings for a user can only be changed by " "an administrator, although the administrator can do so from the user’s " "account by entering their password when prompted by the Parental " "Controls application." msgstr "" "Begränsningar på användning av datorn kan endast ställas in för konton som " "inte är administratörer. Inställningarna för föräldrakontroller för en " "användare kan endast ändras av en administratör, även om administratören kan " "göra det från användarens konto genom att ange sitt lösenord då programmet " "Föräldrakontroller efterfrågar det." #. (itstool) path: p/link #: C/legal.xml:4 msgid "Creative Commons Attribution-ShareAlike 3.0 Unported License" msgstr "Creative Commons Erkännande-DelaLika 3.0 Unported" #. (itstool) path: license/p #: C/legal.xml:3 msgid "This work is licensed under a <_:link-1/>." msgstr "Detta verk licensieras under licensen <_:link-1/>." #. (itstool) path: info/desc #: C/restricting-applications.page:6 msgid "Restricting a child user from running already-installed applications." msgstr "Begränsa en barnanvändare från att köra redan installerade program." #. (itstool) path: page/title #: C/restricting-applications.page:9 msgid "Restricting Access to Installed Applications" msgstr "Begränsa åtkomst till installerade program" #. (itstool) path: page/p #: C/restricting-applications.page:11 msgid "" "You can prevent a user from running specific applications which are already " "installed on the computer. This could be useful if other users need those " "applications but they are not appropriate for a child." msgstr "" "Du kan förhindra en användare från att köra specifika program som redan " "finns installerade på datorn. Detta kan vara användbart om andra användare " "behöver de programmen men de inte är lämpliga för barn." #. (itstool) path: page/p #: C/restricting-applications.page:14 msgid "" "When installing additional software, you should consider whether that needs " "to be restricted for some users — newly installed software is usable by all " "users by default." msgstr "" "När du installerar ytterligare programvara bör du överväga om den behöver " "begränsas för vissa användare — programvara som installeras kan som standard " "användas av alla användare." #. (itstool) path: page/p #: C/restricting-applications.page:18 msgid "To restrict a user’s access to a specific application:" msgstr "För att begränsa en användares åtkomst till ett specifikt program:" #. (itstool) path: item/p #: C/restricting-applications.page:22 msgid "Press the Restrict Applications button." msgstr "Tryck på knappen Begränsa program." #. (itstool) path: item/p #: C/restricting-applications.page:23 msgid "" "Enable the switch in the row for each application you would like to restrict " "the user from accessing." msgstr "" "Aktivera växelknappen i raden för varje program som du vill begränsa " "användaren från att komma åt." #. (itstool) path: item/p #: C/restricting-applications.page:24 msgid "Close the Restrict Applications window." msgstr "Stäng fönstret Begränsa program." #. (itstool) path: page/p #: C/restricting-applications.page:27 msgid "" "Restricting access to specific applications is often used in conjunction " "with to prevent a user from " "installing additional software which has not been vetted." msgstr "" "Att begränsa åtkomst till vissa program används ofta tillsammans med för att förhindra en användare från att " "installera ytterligare programvara som inte har granskats." #. (itstool) path: info/desc #: C/software-installation.page:6 msgid "" "Restricting the software a child user can install, or preventing them " "installing additional software entirely." msgstr "" "Begränsa vilken programvara som en barnanvändare kan installera, eller " "förhindra dem helt från att installera ytterligare programvara." #. (itstool) path: page/title #: C/software-installation.page:9 msgid "Restricting Software Installation" msgstr "Begränsa installation av programvara" #. (itstool) path: page/p #: C/software-installation.page:11 msgid "" "You can prevent a user from installing additional software on the system. " "They will still be able to search for new software to install, but will need " "an administrator to authorize the installation when they try to install an " "application. This applies whether they are trying to install the application " "system-wide (for all users) or just for themselves." msgstr "" "Du kan förhindra en användare från att installera ytterligare programvara på " "systemet. De kommer fortfarande kunna söka efter ny programvara att " "installera, men kommer behöva att en administratör godkänner installationen " "när de försöker installera ett program. Detta gäller oavsett om de försöker " "installera programmet systemomfattande (för alla användare) eller bara för " "sig själva." #. (itstool) path: page/p #: C/software-installation.page:17 msgid "" "Additionally, you can restrict which software a user can browse or search " "for in the Software catalog by age categories." msgstr "" "Du kan dessutom begränsa vilken programvara en användare kan bläddra bland " "eller söka efter i katalogen för Programvara enligt " "ålderskategorier." #. (itstool) path: page/p #: C/software-installation.page:20 msgid "" "To prevent a user from running an application which has already been " "installed, see ." msgstr "" "För att förhindra en användare från att köra ett program som redan har " "installerats, se ." #. (itstool) path: section/title #: C/software-installation.page:24 msgid "Preventing Software Installation" msgstr "Förhindra installation av programvara" #. (itstool) path: section/p #: C/software-installation.page:26 msgid "To prevent a user from installing additional software:" msgstr "" "För att förhindra en användare från att installera ytterligare programvara:" #. (itstool) path: item/p #: C/software-installation.page:30 msgid "" "Enable the Restrict Application Installation " "checkbox." msgstr "" "Aktivera kryssrutan Begränsa installation av " "program." #. (itstool) path: section/title #: C/software-installation.page:35 msgid "Restricting Software Installation by Age" msgstr "Begränsning av programvaruinstallation enligt ålder" #. (itstool) path: section/p #: C/software-installation.page:37 msgid "" "Applications in the Software catalog have information about " "content they contain which might be inappropriate for some ages — for " "example, various forms of violence, unmoderated chat with other people on " "the internet, or the possibility of spending money." msgstr "" "Program i katalogen för Programvara har information om innehåll " "de har som kan vara olämpligt för vissa åldrar — exempelvis olika sorters " "våld, oövervakad chatt med andra personer över internet, eller möjligheten " "att spendera pengar." #. (itstool) path: section/p #: C/software-installation.page:41 msgid "" "For each application, this information is summarized as the minimum age " "child it is typically suitable to be used by — for example, “suitable for " "ages 7+”. These age ratings are presented in region-specific schemes which " "can be compared with the ratings schemes used for films and games." msgstr "" "För varje program sammanfattas denna information som den lägsta åldern på " "ett barn som det lämpligen kan användas av — exempelvis ”Lämpligt för åldrar " "7+”. Dessa åldersgränser presenteras i regionsspecifika klassifikationer som " "kan jämföras med klassifikationerna som används för film och spel." #. (itstool) path: section/p #: C/software-installation.page:45 msgid "" "The applications shown to a user in the Software catalog can be " "filtered by their age suitability. Applications which are not suitable for " "the user will be hidden, and will not be installable by that user. They will " "be installable by other users (if their age suitability is set high enough)." msgstr "" "Programmen som visas för en användare i katalogen för Programvara " "kan filtreras enligt deras lämplighetsålder. Program som inte är lämpliga " "för användaren kommer att döljas, och kommer inte kunna installeras av den " "användaren. De kan installeras av andra användare (om deras lämplighetsålder " "är satt tillräckligt högt)." #. (itstool) path: section/p #: C/software-installation.page:51 msgid "" "To filter the applications seen by a user in the Software catalog " "to only those suitable for a certain age:" msgstr "" "För att filtrera programmen som en användare ser i katalogen för " "Programvara till att bara vara de som är lämpliga för en viss " "ålder:" #. (itstool) path: item/p #: C/software-installation.page:56 msgid "" "In the Application Suitability list, select the age which " "applications should be suitable for." msgstr "" "I listan Lämplighet för program, välj åldern som programmen ska " "vara lämpliga för." #. (itstool) path: note/p #: C/software-installation.page:60 msgid "" "The user’s actual age is not stored, so the Application Suitability is not automatically updated over time as the child grows older. You " "must periodically re-assess the appropriate Application Suitability for each user." msgstr "" "Användarens faktiska ålder lagras inte, så Lämplighet för program " "uppdateras inte automatiskt då barnet blir äldre. Du måste periodiskt " "utvärdera den rätta Lämplighet för program för varje användare på " "nytt." #~ msgid "" #~ "Or enable the Restrict Application Installation " #~ "for Others checkbox." #~ msgstr "" #~ "Eller aktivera kryssrutan Begränsa installation " #~ "av program åt andra." #~ msgid "" #~ "The Restrict Application Installation for Others checkbox allows the user to install additional software for " #~ "themselves, but prevents that software from being made available to other " #~ "users. It could be used, for example, if there were two child users, one " #~ "of whom is mature enough to be allowed to install additional software, " #~ "but the other isn’t — enabling Restrict " #~ "Application Installation for Others would prevent the more mature " #~ "child from installing applications which are inappropriate for the other " #~ "child and making them available to the other child." #~ msgstr "" #~ "Kryssrutan Begränsa installation av program åt " #~ "andra låter användaren installera ytterligare programvara åt sig " #~ "själv, men förhindrar den programvaran från att bli tillgänglig för andra " #~ "användare. Det kan till exempel användas om det finns två barnanvändare, " #~ "en som är mogen nog för att tillåtas installera ytterligare programvara, " #~ "och en som inte är det — att aktivera Begränsa " #~ "installation av program åt andra skulle förhindra det mognare " #~ "barnet från att installera program som är olämpliga så att de blir " #~ "tillgängliga för det andra barnet." malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/help/tr/000077500000000000000000000000001505556674000231515ustar00rootroot00000000000000malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/help/tr/tr.po000066400000000000000000000427041505556674000241450ustar00rootroot00000000000000# Turkish translation for malcontent. # Copyright (C) 2023 malcontent's COPYRIGHT HOLDER # This file is distributed under the same license as the malcontent package. # # Sabri Ünal , 2023. # msgid "" msgstr "" "Project-Id-Version: malcontent main\n" "POT-Creation-Date: 2023-03-08 15:25+0000\n" "PO-Revision-Date: 2023-03-09 03:38+0300\n" "Last-Translator: Sabri Ünal \n" "Language-Team: Turkish \n" "Language: tr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: Poedit 3.1.1\n" #. Put one translator per line, in the form NAME , YEAR1, YEAR2 msgctxt "_" msgid "translator-credits" msgstr "Sabri Ünal , 2023." #. (itstool) path: info/desc #: C/creating-a-child-user.page:6 msgid "Creating a child user on the computer." msgstr "Bilgisayarda çocuk kullanıcı oluşturmak." #. (itstool) path: page/title #: C/creating-a-child-user.page:9 msgid "Creating a Child User" msgstr "Çocuk Kullanıcı Oluşturmak" # Control Center için ayarlar çevirisini kullanıyoruz. Burada eski adı kullanılmış. #. (itstool) path: page/p #: C/creating-a-child-user.page:11 msgid "" "Parental controls can only be applied to non-administrator accounts. Such an " "account may have been created when the computer was initially set up. If " "not, a new child user may be created from the Parental Controls " "application if no child users already exist; and otherwise may be created " "from the Control Center." msgstr "" "Ebeveyn denetimleri yalnızca yönetici olmayan hesaplara uygulanabilir. Bu " "tip hesap, bilgisayar ilk kurulduğunda oluşturulmuş olabilir. Değilse, hiç " "çocuk kullanıcı yoksa, Ebeveyn Denetimleri uygulamasından yeni " "çocuk kullanıcı oluşturulabilir; aksi halde Ayarlarʼdan " "oluşturulabilir." #. (itstool) path: page/p #: C/creating-a-child-user.page:17 msgid "" "To create a new child user, see Add a new user account. As soon as the new user is " "created, it will appear in the Parental Controls window so that " "its parental controls settings can be configured." msgstr "" "Yeni çocuk kullanıcı oluşturmak için Yeni kullanıcı hesabı ekleʼye bakın. Yeni kullanıcı " "oluşturulunca, ebeveyn denetimleri ayarlarının yapılandırılabilmesi için " "Ebeveyn Denetimleri penceresi görünecektir." #. (itstool) path: credit/name #: C/index.page:6 msgid "Philip Withnall" msgstr "Philip Withnall" #. (itstool) path: credit/years #: C/index.page:8 msgid "2020" msgstr "2020" #. (itstool) path: page/title #: C/index.page:12 msgid "Parental Controls Help" msgstr "Ebeveyn Denetimleri Yardım" #. (itstool) path: section/title #: C/index.page:15 msgid "Introduction & Setup" msgstr "Giriş ve Kurulum" #. (itstool) path: section/title #: C/index.page:19 msgid "Controls to Apply" msgstr "Uygulanacak Denetimler" #. (itstool) path: info/desc #: C/internet.page:6 msgid "Restricting a child user’s access to the internet." msgstr "Çocuk kullanıcının internete erişimini kısıtlamak." #. (itstool) path: page/title #: C/internet.page:9 msgid "Restricting Access to the Internet" msgstr "İnternet Erişimini Kısıtlama" #. (itstool) path: page/p #: C/internet.page:11 msgid "" "You can restrict a user’s access to the internet. This will prevent them " "using a web browser, but it will not prevent them using the internet (in " "potentially more limited forms) through other applications. For example, it " "will not prevent access to e-mail accounts using Evolution, and " "it will not prevent software updates being downloaded and applied." msgstr "" "Kullanıcının internete erişimini kısıtlayabilirsiniz. Bu, web tarayıcısı " "kullanmalarını engelleyecektir, ancak diğer uygulamalar aracılığıyla " "(muhtemelen daha sınırlı biçimlerde) interneti kullanmalarını " "engellemeyecektir. Örneğin, Evolution kullanarak e-posta " "hesaplarına erişimi engellemez ve yazılım güncellemelerinin indirilip " "uygulanmasını engellemez." #. (itstool) path: page/p #: C/internet.page:17 msgid "To restrict a user’s access to the internet:" msgstr "Kullanıcının internet erişimini kısıtlamak için:" #. (itstool) path: item/p #: C/internet.page:19 C/restricting-applications.page:20 #: C/software-installation.page:28 C/software-installation.page:54 msgid "Open the Parental Controls application." msgstr "Ebeveyn Denetimleri uygulamasını açın." #. (itstool) path: item/p #: C/internet.page:20 C/restricting-applications.page:21 #: C/software-installation.page:29 C/software-installation.page:55 msgid "Select the user in the tabs at the top." msgstr "Üstteki sekmelerde kullanıcıyı seçin." #. (itstool) path: item/p #: C/internet.page:21 msgid "" "Enable the Restrict Web Browsers checkbox." msgstr "" "Web Tarayıcılarını Kısıtla onay kutusunu " "etkinleştirin." #. (itstool) path: info/desc #: C/introduction.page:6 msgid "" "Overview of parental controls, the Parental Controls application " "and its use in other situations where access restrictions are needed on a " "user." msgstr "" "Ebeveyn denetimlerine, Ebeveyn Denetimleri uygulamasına ve " "kullanıcı için erişim kısıtlamalarının gereksinildiği diğer durumlarda " "kullanımına genel bakış." #. (itstool) path: page/title #: C/introduction.page:12 msgid "Introduction to Parental Controls" msgstr "Ebeveyn Denetimleriʼne Giriş" #. (itstool) path: page/p #: C/introduction.page:14 msgid "" "Parental controls are a way to restrict what non-administrator accounts can " "do on the computer, with the aim of allowing parents to restrict what their " "children can do when using the computer unsupervised or under limited " "supervision." msgstr "" "Ebeveyn denetimleri, bilgisayarda yönetici hesabı olmayan hesapların ne " "yapabileceğini sınırlamanın bir yoludur. Amacı, ebeveynlerin çocukları " "bilgisayarı gözetimsiz veya sınırlı gözetim altında kullandıklarında ne " "yapabileceklerini sınırlamalarını sağlamaktır." #. (itstool) path: page/p #: C/introduction.page:18 msgid "" "This functionality can be used in other situations ­– such as other carer/" "caree relationships – but is labelled as ‘parental controls’ so that it’s " "easy to find, as that’s what most people will be looking for." msgstr "" "Bu işlevsellik diğer bakıcı/bakılan ilişkileri gibi diğer durumlarda da " "kullanılabilir, ancak çoğu insanın ‘ebeveyn denetimleri’ olarak arayacağı " "varsayılarak, bulması kolay olsun diye bu şekilde adlandırılmıştır." #. (itstool) path: page/p #: C/introduction.page:21 msgid "" "The parental controls for any user can be queried and set using the " "Parental Controls application. This lists the non-administrator " "accounts in tabs along its top bar, and shows their current parental " "controls settings below. Changes to the parental controls apply immediately." msgstr "" "Herhangi bir kullanıcı için ebeveyn denetimleri, Ebeveyn Denetimleri uygulaması kullanılarak sorgulanabilir ve ayarlanabilir. Bu, yönetici " "olmayan hesapları üst çubuğundaki sekmelerde listeler ve altında geçerli " "ebeveyn denetimleri ayarlarını gösterir. Ebeveyn denetimlerinde yapılan " "değişiklikler hemen uygulanır." #. (itstool) path: page/p #: C/introduction.page:25 msgid "" "Restrictions on using the computer can only be applied to non-administrator " "accounts. The parental controls settings for a user can only be changed by " "an administrator, although the administrator can do so from the user’s " "account by entering their password when prompted by the Parental " "Controls application." msgstr "" "Bilgisayar kullanımıyla ilgili kısıtlamalar yalnızca yönetici olmayan " "hesaplara uygulanabilir. Bir kullanıcının ebeveyn denetimleri ayarları " "yalnızca bir yönetici tarafından değiştirilebilir, ancak yönetici " "Ebeveyn Denetimleri uygulaması tarafından istendiğinde parolasını " "girerek kullanıcının hesabından bunu yapabilir." #. (itstool) path: p/link #: C/legal.xml:4 msgid "Creative Commons Attribution-ShareAlike 3.0 Unported License" msgstr "Creative Commons Attribution-ShareAlike 3.0 Unported License" #. (itstool) path: license/p #: C/legal.xml:3 msgid "This work is licensed under a <_:link-1/>." msgstr "Bu çalışma <_:link-1/> altında lisanslanmıştır." #. (itstool) path: info/desc #: C/restricting-applications.page:6 msgid "Restricting a child user from running already-installed applications." msgstr "" "Çocuk kullanıcının zaten kurulmuş uygulamaları çalıştırmasını kısıtlama." #. (itstool) path: page/title #: C/restricting-applications.page:9 msgid "Restricting Access to Installed Applications" msgstr "Kurulu Uygulamalara Erişimi Kısıtlama" #. (itstool) path: page/p #: C/restricting-applications.page:11 msgid "" "You can prevent a user from running specific applications which are already " "installed on the computer. This could be useful if other users need those " "applications but they are not appropriate for a child." msgstr "" "Kullanıcının zaten bilgisayarda kurulu olan belirli uygulamaları " "çalıştırmasını engelleyebilirsiniz. Bu, diğer kullanıcıların bu uygulamalara " "ihtiyacı varsa ancak çocuk için uygun değilse faydalı olabilir." #. (itstool) path: page/p #: C/restricting-applications.page:14 msgid "" "When installing additional software, you should consider whether that needs " "to be restricted for some users — newly installed software is usable by all " "users by default." msgstr "" "Ek yazılım kurarken, bunun bazı kullanıcılar için kısıtlanması gerekip " "gerekmediğini değerlendirmelisiniz. Yeni kurulan yazılımlar öntanımlı olarak " "tüm kullanıcılar tarafından kullanılabilir." #. (itstool) path: page/p #: C/restricting-applications.page:18 msgid "To restrict a user’s access to a specific application:" msgstr "Bir kullanıcının belirli bir uygulamaya erişimini kısıtlamak için:" #. (itstool) path: item/p #: C/restricting-applications.page:22 msgid "Press the Restrict Applications button." msgstr "Uygulamaları Kısıtla düğmesine basın." #. (itstool) path: item/p #: C/restricting-applications.page:23 msgid "" "Enable the switch in the row for each application you would like to restrict " "the user from accessing." msgstr "" "Kullanıcının erişimini kısıtlamak istediğiniz her uygulamanın anahtarını " "etkinleştirin." #. (itstool) path: item/p #: C/restricting-applications.page:24 msgid "Close the Restrict Applications window." msgstr "Uygulamaları Kısıtla benceresini kapatın." #. (itstool) path: page/p #: C/restricting-applications.page:27 msgid "" "Restricting access to specific applications is often used in conjunction " "with to prevent a user from " "installing additional software which has not been vetted." msgstr "" "Belirli uygulamalara erişimin kısıtlanması, kullanıcının incelenmemiş ek " "yazılımlar kurmasını önlemek için genellikle ile birlikte kullanılır." #. (itstool) path: info/desc #: C/software-installation.page:6 msgid "" "Restricting the software a child user can install, or preventing them " "installing additional software entirely." msgstr "" "Çocuk kullanıcının kurabileceği yazılımı kısıtlamak ya da ek yazılım " "kurmasını tamamen engellemek." #. (itstool) path: page/title #: C/software-installation.page:9 msgid "Restricting Software Installation" msgstr "Yazılım Kurulumunu Kısıtlama" #. (itstool) path: page/p #: C/software-installation.page:11 msgid "" "You can prevent a user from installing additional software on the system. " "They will still be able to search for new software to install, but will need " "an administrator to authorize the installation when they try to install an " "application. This applies whether they are trying to install the application " "system-wide (for all users) or just for themselves." msgstr "" "Kullanıcının sisteme ek yazılım kurmasını engelleyebilirsiniz. Yine de " "kurulum için yeni yazılım arayabilecekler, ancak uygulama kurmaya " "çalıştıklarında kurulumu yetkilendirmek için yöneticiye ihtiyaçları olacak. " "Bu, uygulamayı sistem geneline (tüm kullanıcılar için) ya da yalnızca " "kendileri için kurmaya çalışsalar da geçerlidir." #. (itstool) path: page/p #: C/software-installation.page:17 msgid "" "Additionally, you can restrict which software a user can browse or search " "for in the Software catalog by age categories." msgstr "" "Ayrıca, kullanıcının Yazılımlar kataloğunda hangi yazılımlara göz " "atabileceğini ya da arayabileceğini yaş kategorilerine göre " "sınırlayabilirsiniz." #. (itstool) path: page/p #: C/software-installation.page:20 msgid "" "To prevent a user from running an application which has already been " "installed, see ." msgstr "" "Bir kullanıcının zaten kurulu bir uygulamayı çalıştırmasını engellemek için " "bkz. ." #. (itstool) path: section/title #: C/software-installation.page:24 msgid "Preventing Software Installation" msgstr "Yazılım Kurulumunu Engelleme" #. (itstool) path: section/p #: C/software-installation.page:26 msgid "To prevent a user from installing additional software:" msgstr "Kullanıcının ek yazılım kurmasını engellemek için:" #. (itstool) path: item/p #: C/software-installation.page:30 msgid "" "Enable the Restrict Application Installation " "checkbox." msgstr "" "Uygulama Kurulumunu Kısıtla onay kutusunu " "etkinleştirin." #. (itstool) path: section/title #: C/software-installation.page:35 msgid "Restricting Software Installation by Age" msgstr "Yazılım Kurulumunu Yaşa Göre Kısıtlama" #. (itstool) path: section/p #: C/software-installation.page:37 msgid "" "Applications in the Software catalog have information about " "content they contain which might be inappropriate for some ages — for " "example, various forms of violence, unmoderated chat with other people on " "the internet, or the possibility of spending money." msgstr "" "Yazılımlar kataloğundaki uygulamalar, kimi yaş grupları için " "uygun olmayabilecek içerikleri hakkında bilgiler içerir - örneğin, çeşitli " "şiddet türleri, internet üzerinden diğer kişilerle denetlenmeyen sohbet, ya " "da para harcama olasılığı gibi." #. (itstool) path: section/p #: C/software-installation.page:41 msgid "" "For each application, this information is summarized as the minimum age " "child it is typically suitable to be used by — for example, “suitable for " "ages 7+”. These age ratings are presented in region-specific schemes which " "can be compared with the ratings schemes used for films and games." msgstr "" "Her uygulama için, bu bilgi genellikle kullanımı için uygun en düşük yaş " "grubu olarak özetlenir - örneğin, \"7 yaş ve üzeri için uygun\". Bu yaş " "derecelendirmeleri, filmler ve oyunlar için kullanılan derecelendirme " "şemaları ile karşılaştırılabilen bölgesel şemalarda sunulur." #. (itstool) path: section/p #: C/software-installation.page:45 msgid "" "The applications shown to a user in the Software catalog can be " "filtered by their age suitability. Applications which are not suitable for " "the user will be hidden, and will not be installable by that user. They will " "be installable by other users (if their age suitability is set high enough)." msgstr "" "Yazılımlar kataloğunda kullanıcıya gösterilen uygulamalar, yaş " "uygunluğuna göre süzülerek gösterilebilir. Kullanıcı için uygun olmayan " "uygulamalar gizlenir ve kullanıcı tarafından kurulamaz. Bu uygulamalar, yaş " "uygunluğu yeterince yüksek olan diğer kullanıcılarca kurulabilir." #. (itstool) path: section/p #: C/software-installation.page:51 msgid "" "To filter the applications seen by a user in the Software catalog " "to only those suitable for a certain age:" msgstr "" "Kullanıcının Yazılımlar kataloğunda gördüğü uygulamaları yalnızca " "belirli yaşa uygun olacak şekilde süzmek için:" #. (itstool) path: item/p #: C/software-installation.page:56 msgid "" "In the Application Suitability list, select the age which " "applications should be suitable for." msgstr "" "Uygulama Uygunluğu listesinde, uygulamaların hangi yaş için uygun " "olduğunu seçin." #. (itstool) path: note/p #: C/software-installation.page:60 msgid "" "The user’s actual age is not stored, so the Application Suitability is not automatically updated over time as the child grows older. You " "must periodically re-assess the appropriate Application Suitability for each user." msgstr "" "Kullanıcının gerçek yaşı depolanmadığı için, Uygulama Uygunluğu " "çocuk büyüdükçe zamanla kendiliğinden güncellenmez. Uygulama Uygunluğu her kullanıcı için düzenli olarak yeniden belirlenmelidir." malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/help/uk/000077500000000000000000000000001505556674000231435ustar00rootroot00000000000000malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/help/uk/uk.po000066400000000000000000000641231505556674000241300ustar00rootroot00000000000000# Ukrainian translation for malcontent. # Copyright (C) 2020 malcontent's COPYRIGHT HOLDER # This file is distributed under the same license as the malcontent package. # # Yuri Chornoivan , 2020. msgid "" msgstr "" "Project-Id-Version: malcontent master\n" "POT-Creation-Date: 2020-12-08 15:28+0000\n" "PO-Revision-Date: 2020-12-08 22:19+0200\n" "Last-Translator: Yuri Chornoivan \n" "Language-Team: Ukrainian \n" "Language: uk\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=4; plural=n==1 ? 3 : n%10==1 && n%100!=11 ? 0 : n" "%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" "X-Generator: Lokalize 20.11.70\n" #. Put one translator per line, in the form NAME , YEAR1, YEAR2 msgctxt "_" msgid "translator-credits" msgstr "Юрій Чорноіван , 2020" #. (itstool) path: info/desc #: C/creating-a-child-user.page:6 msgid "Creating a child user on the computer." msgstr "Створення запису користувача-дитини на комп'ютері." #. (itstool) path: page/title #: C/creating-a-child-user.page:9 msgid "Creating a Child User" msgstr "Створення запису користувача-дитини" #. (itstool) path: page/p #: C/creating-a-child-user.page:11 msgid "" "Parental controls can only be applied to non-administrator accounts. Such an " "account may have been created when the computer was initially set up. If " "not, a new child user may be created from the Parental Controls " "application if no child users already exist; and otherwise may be created " "from the Control Center." msgstr "" "Батьківський контроль можна застосовувати лише до облікових записів без " "адміністративних прав. Такий обліковий запис могло бути створено під час " "початкового налаштовування системи. Якщо цього не було зроблено, можна " "створити новий дитячий обліковий запис за допомогою програми " "Батьківський контроль. Крім того, такий обліковий запис можна " "створити за допомогою Центру керування." #. (itstool) path: page/p #: C/creating-a-child-user.page:17 msgid "" "To create a new child user, see Add a new user account. As soon as the new user is " "created, it will appear in the Parental Controls window so that " "its parental controls settings can be configured." msgstr "" "Щоб створити дитячий обліковий запис, ознайомтеся із розділом довідки Додавання нового облікового " "запису користувача. Щойно запис нового користувача буде створено, " "його буде показано у вікні програми Батьківський контроль, отже, " "ви зможете налаштувати параметри батьківського контролю." #. (itstool) path: credit/name #: C/index.page:6 msgid "Philip Withnall" msgstr "Philip Withnall" #. (itstool) path: credit/years #: C/index.page:8 msgid "2020" msgstr "2020" #. (itstool) path: page/title #: C/index.page:12 msgid "Parental Controls Help" msgstr "Допомога у батьківському контролі" #. (itstool) path: section/title #: C/index.page:15 msgid "Introduction & Setup" msgstr "Вступ і налаштування" #. (itstool) path: section/title #: C/index.page:19 msgid "Controls to Apply" msgstr "Засоби контролю, які можна застосувати" #. (itstool) path: info/desc #: C/internet.page:6 msgid "Restricting a child user’s access to the internet." msgstr "Обмеження доступу дитячого облікового запису до інтернету." #. (itstool) path: page/title #: C/internet.page:9 msgid "Restricting Access to the Internet" msgstr "Обмеження доступу до інтернету" #. (itstool) path: page/p #: C/internet.page:11 msgid "" "You can restrict a user’s access to the internet. This will prevent them " "using a web browser, but it will not prevent them using the internet (in " "potentially more limited forms) through other applications. For example, it " "will not prevent access to e-mail accounts using Evolution, and " "it will not prevent software updates being downloaded and applied." msgstr "" "Ви можете обмежити доступ користувача до інтернету. Таким чином можна " "заборонити користувачу користуватися браузером, але користувач збереже " "доступ до інтернету (у потенційно обмеженішій формі) за допомогою інших " "програм. Наприклад, користувач матиме доступ до облікових записів " "електронної пошти за допомогою Evolution. Заборона також не " "стосуватиметься отримання і застосування оновлень програмного забезпечення." #. (itstool) path: page/p #: C/internet.page:17 msgid "To restrict a user’s access to the internet:" msgstr "Щоб обмежити доступ користувача до інтернету, виконайте такі дії:" #. (itstool) path: item/p #: C/internet.page:19 C/restricting-applications.page:20 #: C/software-installation.page:28 C/software-installation.page:54 msgid "Open the Parental Controls application." msgstr "Відкрийте вікно програми Батьківський контроль." #. (itstool) path: item/p #: C/internet.page:20 C/restricting-applications.page:21 #: C/software-installation.page:29 C/software-installation.page:55 msgid "Select the user in the tabs at the top." msgstr "Виберіть користувача у вкладках верхньої частини вікна." #. (itstool) path: item/p #: C/internet.page:21 msgid "" "Enable the Restrict Web Browsers checkbox." msgstr "Позначте пункт Обмежити браузери." #. (itstool) path: info/desc #: C/introduction.page:6 #| msgid "" #| "Overview of parental controls and the Parental Controls " #| "application." msgid "" "Overview of parental controls, the Parental Controls application " "and its use in other situations where access restrictions are needed on a " "user." msgstr "" "Огляд батьківського контролю, програми Батьківський контроль та її" " використання у інших ситуаціях, коли потрібне обмеження доступу для" " користувача." #. (itstool) path: page/title #: C/introduction.page:12 msgid "Introduction to Parental Controls" msgstr "Вступ до «Батьківського контролю»" #. (itstool) path: page/p #: C/introduction.page:14 msgid "" "Parental controls are a way to restrict what non-administrator accounts can " "do on the computer, with the aim of allowing parents to restrict what their " "children can do when using the computer unsupervised or under limited " "supervision." msgstr "" "Батьківський контроль — спосіб обмежити діапазон дій, які зможуть виконувати " "користувачі неадміністративних облікових записів на комп'ютері. Метою є " "уможливлення обмеження батьками дій, які можуть вчиняти на комп'ютері діти " "без нагляду або із обмеженим наглядом." #. (itstool) path: page/p #: C/introduction.page:18 #| msgid "" #| "This functionality can be used in other situations ­– such as other carer/" #| "caree relationships – but is labelled as ‘parental controls’ so that it’s " #| "easy to find." msgid "" "This functionality can be used in other situations ­– such as other carer/" "caree relationships – but is labelled as ‘parental controls’ so that it’s " "easy to find, as that’s what most people will be looking for." msgstr "" "Цими функціональними можливостями можна скористатися і в інших ситуаціях — " "зокрема у ситуаціях із стосунками доглядач-пацієнт, — ми назвали це " "«батьківський контроль» лише для зручності пошуку, оскільки саме це шукають" " більшість наших користувачів." #. (itstool) path: page/p #: C/introduction.page:21 msgid "" "The parental controls for any user can be queried and set using the " "Parental Controls application. This lists the non-administrator " "accounts in tabs along its top bar, and shows their current parental " "controls settings below. Changes to the parental controls apply immediately." msgstr "" "Переглянути і встановити батьківський контроль для будь-якого користувача " "можна за допомогою програми Батьківський контроль. У вікні " "програми буде показано список неадміністративних облікових записів уздовж " "верхньої панелі, а також параметри поточного батьківського контролю на " "панелі під списком. Зміни у батьківському контролі буде застосовано негайно." #. (itstool) path: page/p #: C/introduction.page:25 msgid "" "Restrictions on using the computer can only be applied to non-administrator " "accounts. The parental controls settings for a user can only be changed by " "an administrator, although the administrator can do so from the user’s " "account by entering their password when prompted by the Parental " "Controls application." msgstr "" "Обмеження у користуванні комп'ютером можна запроваджувати лише для облікових " "записів, які не є адміністративними. Параметри батьківського контролю для " "користувача може бути змінено лише адміністратором, хоча адміністратор може " "зробити це з облікового запису користувача, якщо введе пароль, коли про " "нього запитає програма Батьківський контроль." #. (itstool) path: p/link #: C/legal.xml:4 msgid "Creative Commons Attribution-ShareAlike 3.0 Unported License" msgstr "Creative Commons Attribution-ShareAlike 3.0 Unported License" #. (itstool) path: license/p #: C/legal.xml:3 msgid "This work is licensed under a <_:link-1/>." msgstr "Ця робота розповсюджується за умов дотримання <_:link-1/>." #. (itstool) path: info/desc #: C/restricting-applications.page:6 msgid "Restricting a child user from running already-installed applications." msgstr "Обмеження запуску з дитячого облікового вже встановлених програм." #. (itstool) path: page/title #: C/restricting-applications.page:9 msgid "Restricting Access to Installed Applications" msgstr "Обмеження доступу до встановлених програм" #. (itstool) path: page/p #: C/restricting-applications.page:11 msgid "" "You can prevent a user from running specific applications which are already " "installed on the computer. This could be useful if other users need those " "applications but they are not appropriate for a child." msgstr "" "Ви можете заборонити користувачу запускати певні програми, які вже " "встановлено на комп'ютері. Це може бути корисним, якщо ці програми потрібні " "іншим користувачам, але є непридатними для користування дитиною." #. (itstool) path: page/p #: C/restricting-applications.page:14 msgid "" "When installing additional software, you should consider whether that needs " "to be restricted for some users — newly installed software is usable by all " "users by default." msgstr "" "При встановленні додаткового програмного забезпечення вам слід зважати на " "те, чи слід обмежувати доступ до нього для інших користувачів — типово, усе " "нововстановлене програмне забезпечення є доступним для усіх користувачів " "комп'ютера." #. (itstool) path: page/p #: C/restricting-applications.page:18 msgid "To restrict a user’s access to a specific application:" msgstr "" "Щоб обмежити доступ користувача до певної програми, виконайте такі дії:" #. (itstool) path: item/p #: C/restricting-applications.page:22 msgid "Press the Restrict Applications button." msgstr "" "Натисніть кнопку Обмеження доступу до програм." #. (itstool) path: item/p #: C/restricting-applications.page:23 msgid "" "Enable the switch in the row for each application you would like to restrict " "the user from accessing." msgstr "" "Увімкніть перемикач у рядку для кожної з програм, доступ до якої ви хочете " "обмежити." #. (itstool) path: item/p #: C/restricting-applications.page:24 msgid "Close the Restrict Applications window." msgstr "Закрийте вікно Обмеження доступу до програм." #. (itstool) path: page/p #: C/restricting-applications.page:27 msgid "" "Restricting access to specific applications is often used in conjunction " "with to prevent a user from " "installing additional software which has not been vetted." msgstr "" "Обмеження доступу до певної програми часто використовується у поєднанні із " " для запобігання встановленню " "користувачем додаткового програмного забезпечення, доступ до якого не " "обмежено." #. (itstool) path: info/desc #: C/software-installation.page:6 msgid "" "Restricting the software a child user can install, or preventing them " "installing additional software entirely." msgstr "" "Обмеження можливостей зі встановлення програмного забезпечення власником " "дитячого облікового запису або повна заборона встановлення програмного " "забезпечення для дитячого облікового запису." #. (itstool) path: page/title #: C/software-installation.page:9 msgid "Restricting Software Installation" msgstr "Обмеження встановлення програмного забезпечення" #. (itstool) path: page/p #: C/software-installation.page:11 msgid "" "You can prevent a user from installing additional software on the system. " "They will still be able to search for new software to install, but will need " "an administrator to authorize the installation when they try to install an " "application. This applies whether they are trying to install the application " "system-wide (for all users) or just for themselves." msgstr "" "Ви можете заборонити користувачеві встановлювати додаткове програмне " "забезпечення. Користувачі зможуть виконувати пошук нового програмного " "забезпечення для встановлення, але потребуватимуть пароля адміністратора для " "уповноваження на встановлення. Запит щодо пароля буде показано, коли " "користувач спробує встановити програму. Це стосується ситуацій, коли " "користувачі намагаються встановити програму на загальносистемному рівні (для " "усіх користувачів) або лише для себе." #. (itstool) path: page/p #: C/software-installation.page:17 msgid "" "Additionally, you can restrict which software a user can browse or search " "for in the Software catalog by age categories." msgstr "" "Крім того, ви можете обмежити перелік програмного забезпечення, яке зможе " "бачити або шукати користувач у каталозі програми Програмне " "забезпечення, за віковими категоріями." #. (itstool) path: page/p #: C/software-installation.page:20 msgid "" "To prevent a user from running an application which has already been " "installed, see ." msgstr "" "Щоб заборонити користувачу запускати програму, яку вже встановлено, " "ознайомтеся із вмістом розділу ." #. (itstool) path: section/title #: C/software-installation.page:24 msgid "Preventing Software Installation" msgstr "Заборона встановлення програмного забезпечення" #. (itstool) path: section/p #: C/software-installation.page:26 msgid "To prevent a user from installing additional software:" msgstr "" "Щоб заборонити користувачеві встановлення додаткового програмного " "забезпечення:" #. (itstool) path: item/p #: C/software-installation.page:30 msgid "" "Enable the Restrict Application Installation " "checkbox." msgstr "" "Позначте пункт Обмежити встановлення програм." #. (itstool) path: section/title #: C/software-installation.page:35 msgid "Restricting Software Installation by Age" msgstr "Обмеження встановлення програмного забезпечення за віком" #. (itstool) path: section/p #: C/software-installation.page:37 msgid "" "Applications in the Software catalog have information about " "content they contain which might be inappropriate for some ages — for " "example, various forms of violence, unmoderated chat with other people on " "the internet, or the possibility of spending money." msgstr "" "У пакунках програми з каталогу програми Програмне забезпечення " "містяться відомості щодо вмісту пакунків, який може бути неприйнятним для " "певних вікових груп. Наприклад, у програмах можуть бути посилання на різні " "форми насильства, необмежені можливості спілкування зі сторонніми особами у " "інтернеті або можливості з витрачання грошей." #. (itstool) path: section/p #: C/software-installation.page:41 msgid "" "For each application, this information is summarized as the minimum age " "child it is typically suitable to be used by — for example, “suitable for " "ages 7+”. These age ratings are presented in region-specific schemes which " "can be compared with the ratings schemes used for films and games." msgstr "" "Для кожної програми у цих відомостях щодо програми містяться дані щодо " "мінімального віку дітей, з якого їх можна допускати до користування " "програмою, наприклад, «придатна для віку 7+». Ці оцінки віку представлено у " "вигляді специфічних для регіону схем, які можна порівняти із схемами " "рейтингів для фільмів та відеоігор." #. (itstool) path: section/p #: C/software-installation.page:45 msgid "" "The applications shown to a user in the Software catalog can be " "filtered by their age suitability. Applications which are not suitable for " "the user will be hidden, and will not be installable by that user. They will " "be installable by other users (if their age suitability is set high enough)." msgstr "" "Програми, які буде показано користувачеві у каталозі Програмне " "забезпечення, можна фільтрувати за придатністю для вікових груп. " "Програми, які є непридатними для користувача, буде приховано — користувач не " "зможе їх встановити. Їх зможуть встановлювати інші користувачі (якщо їхній " "вік є відповідним до вікової категорії програм)." #. (itstool) path: section/p #: C/software-installation.page:51 msgid "" "To filter the applications seen by a user in the Software catalog " "to only those suitable for a certain age:" msgstr "" "Щоб налаштувати фільтрування програм, пункти яких буде показано " "користувачеві у програмі Програмне забезпечення лише програмами, " "які рекомендовано для певного вікового діапазону, виконайте такі дії:" #. (itstool) path: item/p #: C/software-installation.page:56 msgid "" "In the Application Suitability list, select the age which " "applications should be suitable for." msgstr "" "У списку Придатність програм виберіть вік, для якого мають бути " "придатними програми." #. (itstool) path: note/p #: C/software-installation.page:60 msgid "" "The user’s actual age is not stored, so the Application Suitability is not automatically updated over time as the child grows older. You " "must periodically re-assess the appropriate Application Suitability for each user." msgstr "" "Програма не зберігає дані щодо віку користувача, тому список " "Придатність програм не оновлюється автоматично з дорослішанням " "дитини. Вам слід час від часу оновлювати дані списку Придатність " "програм для кожного користувача." #~ msgid "" #~ "Or enable the Restrict Application Installation " #~ "for Others checkbox." #~ msgstr "" #~ "Або позначте пункт Обмежити встановлення програм " #~ "для інших." #~ msgid "" #~ "The Restrict Application Installation for Others checkbox allows the user to install additional software for " #~ "themselves, but prevents that software from being made available to other " #~ "users. It could be used, for example, if there were two child users, one " #~ "of whom is mature enough to be allowed to install additional software, " #~ "but the other isn’t — enabling Restrict " #~ "Application Installation for Others would prevent the more mature " #~ "child from installing applications which are inappropriate for the other " #~ "child and making them available to the other child." #~ msgstr "" #~ "За допомогою пункту Обмежити встановлення програм " #~ "для інших можна дозволити користувачеві встановлювати додаткове " #~ "програмне забезпечення для себе, але заборонити доступ до встановленого " #~ "програмного забезпечення для інших користувачів. Цим можна скористатися, " #~ "наприклад, якщо у вас двоє дітей, з яких одна дитина достатньо доросла, " #~ "щоб дозволити їй встановлювати додаткові програми, але інша є надто " #~ "малою. Позначення пункту Обмежити встановлення " #~ "програм для інших заборонить старшій дитині встановлювати програми, " #~ "доступ до яких для молодшої дитини слід обмежити." malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/libmalcontent-ui/000077500000000000000000000000001505556674000250425ustar00rootroot00000000000000malcontent-ui.gresource.xml000066400000000000000000000006741505556674000322700ustar00rootroot00000000000000malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/libmalcontent-ui restrict-applications-dialog.ui restrict-applications-selector.ui restricts-switch.css user-controls.ui malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/libmalcontent-ui/malcontent-ui.h000066400000000000000000000021111505556674000277650ustar00rootroot00000000000000/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- * * Copyright © 2020 Endless Mobile, Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * * Authors: * - Philip Withnall */ #pragma once #include #include #include malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/libmalcontent-ui/meson.build000066400000000000000000000057741505556674000272210ustar00rootroot00000000000000libmalcontent_ui_api_version = '1' libmalcontent_ui_api_name = 'malcontent-ui-' + libmalcontent_ui_api_version if not cc.has_function('atexit') error('atexit() needed for generated GResource files') endif resources = gnome.compile_resources( 'resources', 'malcontent-ui.gresource.xml', source_dir: meson.current_source_dir(), ) libmalcontent_ui_sources = [ 'restrict-applications-dialog.c', 'restrict-applications-selector.c', 'user-controls.c', ] libmalcontent_ui_headers = [ 'malcontent-ui.h', 'restrict-applications-dialog.h', 'restrict-applications-selector.h', 'user-controls.h', ] libmalcontent_ui_public_deps = [ dependency('accountsservice', version: '>= 0.6.39'), dependency('gio-2.0', version: '>= 2.44'), dependency('glib-2.0', version: '>= 2.54.2'), dependency('gobject-2.0', version: '>= 2.54'), gtk_dep, libadwaita_dep, libmalcontent_dep, ] libmalcontent_ui_private_deps = [ dependency('appstream', version: '>= 0.12.10'), dependency('flatpak'), ] # FIXME: Would be good to use subdir here: https://github.com/mesonbuild/meson/issues/2969 libmalcontent_ui_include_subdir = join_paths(libmalcontent_ui_api_name, 'libmalcontent-ui') libmalcontent_ui = library(libmalcontent_ui_api_name, libmalcontent_ui_sources + resources + libmalcontent_ui_headers, dependencies: libmalcontent_ui_public_deps + libmalcontent_ui_private_deps, include_directories: root_inc, install: true, version: meson.project_version(), soversion: libmalcontent_ui_api_version, ) libmalcontent_ui_dep = declare_dependency( link_with: libmalcontent_ui, include_directories: root_inc, ) # Public library bits. install_headers(libmalcontent_ui_headers, subdir: libmalcontent_ui_include_subdir, ) pkgconfig.generate(libmalcontent_ui, subdirs: libmalcontent_ui_api_name, version: meson.project_version(), name: 'libmalcontent-ui', filebase: libmalcontent_ui_api_name, description: 'Library providing widgets for parental control settings.', libraries: libmalcontent_ui_public_deps, libraries_private: libmalcontent_ui_private_deps, ) libmalcontent_ui_gir = gnome.generate_gir(libmalcontent_ui, sources: libmalcontent_ui_sources + libmalcontent_ui_headers, nsversion: libmalcontent_ui_api_version, namespace: 'MalcontentUi', symbol_prefix: 'mct_', identifier_prefix: 'Mct', export_packages: 'libmalcontent-ui', includes: ['AccountsService-1.0', 'Gio-2.0', 'GObject-2.0', 'Gtk-4.0', 'Adw-1', libmalcontent_gir[0]], install: true, dependencies: libmalcontent_ui_dep, ) xmllint = find_program('xmllint', required: false) if xmllint.found() gtk_prefix = gtk_dep.get_variable(pkgconfig: 'prefix') test( 'validate-ui', xmllint, args: [ '--nonet', '--noblanks', '--noout', '--relaxng', join_paths(gtk_prefix, 'share', 'gtk-4.0', 'gtk4builder.rng'), files( 'restrict-applications-dialog.ui', 'restrict-applications-selector.ui', 'user-controls.ui', ), ], suite: ['libmalcontent-ui'], ) endif # FIXME: Add tests #subdir('tests') restrict-applications-dialog.c000066400000000000000000000353431505556674000327170ustar00rootroot00000000000000malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/libmalcontent-ui/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- * * Copyright © 2020 Endless Mobile, Inc. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . * * Authors: * - Philip Withnall */ #include "config.h" #include #include #include #include #include #include #include "restrict-applications-dialog.h" #include "restrict-applications-selector.h" static void update_description (MctRestrictApplicationsDialog *self); /** * MctRestrictApplicationsDialog: * * The ‘Restrict Applications’ dialog is a dialog which shows the available * applications on the system alongside a column of toggle switches, which * allows the given user to be prevented from running each application. * * The dialog contains a single #MctRestrictApplicationsSelector. It takes a * #MctRestrictApplicationsDialog:user and * #MctRestrictApplicationsDialog:app-filter as input to set up the UI, and * returns its output as set of modifications to a given #MctAppFilterBuilder * using mct_restrict_applications_dialog_build_app_filter(). * * Since: 0.5.0 */ struct _MctRestrictApplicationsDialog { AdwPreferencesDialog parent_instance; MctRestrictApplicationsSelector *selector; AdwPreferencesGroup *group; GtkSearchEntry *search_entry; MctAppFilter *app_filter; /* (owned) (not nullable) */ gchar *user_display_name; /* (owned) (nullable) */ }; static void search_entry_stop_search_cb (GtkSearchEntry *search_entry, gpointer user_data); static gboolean focus_search_cb (GtkWidget *widget, GVariant *arguments, gpointer user_data); G_DEFINE_TYPE (MctRestrictApplicationsDialog, mct_restrict_applications_dialog, ADW_TYPE_PREFERENCES_DIALOG) typedef enum { PROP_APP_FILTER = 1, PROP_USER_DISPLAY_NAME, } MctRestrictApplicationsDialogProperty; static GParamSpec *properties[PROP_USER_DISPLAY_NAME + 1]; static void mct_restrict_applications_dialog_constructed (GObject *obj) { MctRestrictApplicationsDialog *self = MCT_RESTRICT_APPLICATIONS_DIALOG (obj); g_assert (self->app_filter != NULL); g_assert (self->user_display_name == NULL || (*self->user_display_name != '\0' && g_utf8_validate (self->user_display_name, -1, NULL))); G_OBJECT_CLASS (mct_restrict_applications_dialog_parent_class)->constructed (obj); } static void mct_restrict_applications_dialog_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { MctRestrictApplicationsDialog *self = MCT_RESTRICT_APPLICATIONS_DIALOG (object); switch ((MctRestrictApplicationsDialogProperty) prop_id) { case PROP_APP_FILTER: g_value_set_boxed (value, self->app_filter); break; case PROP_USER_DISPLAY_NAME: g_value_set_string (value, self->user_display_name); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void mct_restrict_applications_dialog_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { MctRestrictApplicationsDialog *self = MCT_RESTRICT_APPLICATIONS_DIALOG (object); switch ((MctRestrictApplicationsDialogProperty) prop_id) { case PROP_APP_FILTER: mct_restrict_applications_dialog_set_app_filter (self, g_value_get_boxed (value)); break; case PROP_USER_DISPLAY_NAME: mct_restrict_applications_dialog_set_user_display_name (self, g_value_get_string (value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void mct_restrict_applications_dialog_dispose (GObject *object) { MctRestrictApplicationsDialog *self = (MctRestrictApplicationsDialog *)object; g_clear_pointer (&self->app_filter, mct_app_filter_unref); g_clear_pointer (&self->user_display_name, g_free); G_OBJECT_CLASS (mct_restrict_applications_dialog_parent_class)->dispose (object); } static void mct_restrict_applications_dialog_map (GtkWidget *widget) { MctRestrictApplicationsDialog *self = (MctRestrictApplicationsDialog *)widget; GTK_WIDGET_CLASS (mct_restrict_applications_dialog_parent_class)->map (widget); /* Clear and focus the search entry, in case the dialogue is being shown for * a second time. */ gtk_editable_set_text (GTK_EDITABLE (self->search_entry), ""); gtk_widget_grab_focus (GTK_WIDGET (self->search_entry)); } static void mct_restrict_applications_dialog_class_init (MctRestrictApplicationsDialogClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); object_class->constructed = mct_restrict_applications_dialog_constructed; object_class->get_property = mct_restrict_applications_dialog_get_property; object_class->set_property = mct_restrict_applications_dialog_set_property; object_class->dispose = mct_restrict_applications_dialog_dispose; widget_class->map = mct_restrict_applications_dialog_map; /** * MctRestrictApplicationsDialog:app-filter: (not nullable) * * The user’s current app filter, used to set up the dialog. As app filters * are immutable, it is not updated as the dialog is changed. Use * mct_restrict_applications_dialog_build_app_filter() to build the new app * filter. * * Since: 0.5.0 */ properties[PROP_APP_FILTER] = g_param_spec_boxed ("app-filter", "App Filter", "The user’s current app filter, used to set up the dialog.", MCT_TYPE_APP_FILTER, G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); /** * MctRestrictApplicationsDialog:user-display-name: (nullable) * * The display name for the currently selected user account, or %NULL if no * user is selected. This will typically be the user’s full name (if known) * or their username. * * If set, it must be valid UTF-8 and non-empty. * * Since: 0.5.0 */ properties[PROP_USER_DISPLAY_NAME] = g_param_spec_string ("user-display-name", "User Display Name", "The display name for the currently selected user account, or %NULL if no user is selected.", NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); g_object_class_install_properties (object_class, G_N_ELEMENTS (properties), properties); gtk_widget_class_set_template_from_resource (widget_class, "/org/freedesktop/MalcontentUi/ui/restrict-applications-dialog.ui"); gtk_widget_class_bind_template_child (widget_class, MctRestrictApplicationsDialog, selector); gtk_widget_class_bind_template_child (widget_class, MctRestrictApplicationsDialog, group); gtk_widget_class_bind_template_child (widget_class, MctRestrictApplicationsDialog, search_entry); gtk_widget_class_bind_template_callback (widget_class, search_entry_stop_search_cb); gtk_widget_class_add_binding (widget_class, GDK_KEY_f, GDK_CONTROL_MASK, focus_search_cb, NULL); } static void mct_restrict_applications_dialog_init (MctRestrictApplicationsDialog *self) { /* Ensure the types used in the UI are registered. */ g_type_ensure (MCT_TYPE_RESTRICT_APPLICATIONS_SELECTOR); gtk_widget_init_template (GTK_WIDGET (self)); gtk_search_entry_set_key_capture_widget (self->search_entry, GTK_WIDGET (self)); } static void update_description (MctRestrictApplicationsDialog *self) { g_autofree gchar *description = NULL; if (self->user_display_name == NULL) { adw_preferences_group_set_description (self->group, NULL); return; } /* Translators: the placeholder is a user’s full name */ description = g_strdup_printf (_("Restrict %s from using the following installed applications."), self->user_display_name); adw_preferences_group_set_description (self->group, description); } static void search_entry_stop_search_cb (GtkSearchEntry *search_entry, gpointer user_data) { /* Clear the search text as the search filtering is bound to that. */ gtk_editable_set_text (GTK_EDITABLE (search_entry), ""); } static gboolean focus_search_cb (GtkWidget *widget, GVariant *arguments, gpointer user_data) { MctRestrictApplicationsDialog *self = MCT_RESTRICT_APPLICATIONS_DIALOG (widget); gtk_widget_grab_focus (GTK_WIDGET (self->search_entry)); return TRUE; } /** * mct_restrict_applications_dialog_new: * @app_filter: (transfer none): the initial app filter configuration to show * @user_display_name: (transfer none) (nullable): the display name of the user * to show the app filter for, or %NULL if no user is selected * * Create a new #MctRestrictApplicationsDialog widget. * * Returns: (transfer full): a new restricted applications editing dialog * Since: 0.5.0 */ MctRestrictApplicationsDialog * mct_restrict_applications_dialog_new (MctAppFilter *app_filter, const gchar *user_display_name) { g_return_val_if_fail (app_filter != NULL, NULL); g_return_val_if_fail (user_display_name == NULL || (*user_display_name != '\0' && g_utf8_validate (user_display_name, -1, NULL)), NULL); return g_object_new (MCT_TYPE_RESTRICT_APPLICATIONS_DIALOG, "app-filter", app_filter, "user-display-name", user_display_name, NULL); } /** * mct_restrict_applications_dialog_get_app_filter: * @self: an #MctRestrictApplicationsDialog * * Get the value of #MctRestrictApplicationsDialog:app-filter. If the property * was originally set to %NULL, this will be the empty app filter. * * Returns: (transfer none) (not nullable): the initial app filter used to * populate the dialog * Since: 0.5.0 */ MctAppFilter * mct_restrict_applications_dialog_get_app_filter (MctRestrictApplicationsDialog *self) { g_return_val_if_fail (MCT_IS_RESTRICT_APPLICATIONS_DIALOG (self), NULL); return self->app_filter; } /** * mct_restrict_applications_dialog_set_app_filter: * @self: an #MctRestrictApplicationsDialog * @app_filter: (nullable) (transfer none): the app filter to configure the dialog * from, or %NULL to use an empty app filter * * Set the value of #MctRestrictApplicationsDialog:app-filter. * * Since: 0.5.0 */ void mct_restrict_applications_dialog_set_app_filter (MctRestrictApplicationsDialog *self, MctAppFilter *app_filter) { g_autoptr(MctAppFilter) owned_app_filter = NULL; g_return_if_fail (MCT_IS_RESTRICT_APPLICATIONS_DIALOG (self)); /* Default app filter, typically for when we’re instantiated by #GtkBuilder. */ if (app_filter == NULL) { g_auto(MctAppFilterBuilder) builder = MCT_APP_FILTER_BUILDER_INIT (); owned_app_filter = mct_app_filter_builder_end (&builder); app_filter = owned_app_filter; } if (app_filter == self->app_filter) return; g_clear_pointer (&self->app_filter, mct_app_filter_unref); self->app_filter = mct_app_filter_ref (app_filter); mct_restrict_applications_selector_set_app_filter (self->selector, self->app_filter); g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_APP_FILTER]); } /** * mct_restrict_applications_dialog_get_user_display_name: * @self: an #MctRestrictApplicationsDialog * * Get the value of #MctRestrictApplicationsDialog:user-display-name. * * Returns: (transfer none) (nullable): the display name of the user the dialog * is configured for, or %NULL if unknown * Since: 0.5.0 */ const gchar * mct_restrict_applications_dialog_get_user_display_name (MctRestrictApplicationsDialog *self) { g_return_val_if_fail (MCT_IS_RESTRICT_APPLICATIONS_DIALOG (self), NULL); return self->user_display_name; } /** * mct_restrict_applications_dialog_set_user_display_name: * @self: an #MctRestrictApplicationsDialog * @user_display_name: (nullable) (transfer none): the display name of the user * to configure the dialog for, or %NULL if unknown * * Set the value of #MctRestrictApplicationsDialog:user-display-name. * * Since: 0.5.0 */ void mct_restrict_applications_dialog_set_user_display_name (MctRestrictApplicationsDialog *self, const gchar *user_display_name) { g_return_if_fail (MCT_IS_RESTRICT_APPLICATIONS_DIALOG (self)); g_return_if_fail (user_display_name == NULL || (*user_display_name != '\0' && g_utf8_validate (user_display_name, -1, NULL))); if (g_strcmp0 (self->user_display_name, user_display_name) == 0) return; g_clear_pointer (&self->user_display_name, g_free); self->user_display_name = g_strdup (user_display_name); update_description (self); g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_USER_DISPLAY_NAME]); } /** * mct_restrict_applications_dialog_build_app_filter: * @self: an #MctRestrictApplicationsDialog * @builder: an existing #MctAppFilterBuilder to modify * * Get the app filter settings currently configured in the dialog, by modifying * the given @builder. * * Typically this will be called in the handler for #GtkDialog::response. * * Since: 0.5.0 */ void mct_restrict_applications_dialog_build_app_filter (MctRestrictApplicationsDialog *self, MctAppFilterBuilder *builder) { g_return_if_fail (MCT_IS_RESTRICT_APPLICATIONS_DIALOG (self)); g_return_if_fail (builder != NULL); mct_restrict_applications_selector_build_app_filter (self->selector, builder); } restrict-applications-dialog.h000066400000000000000000000043211505556674000327140ustar00rootroot00000000000000malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/libmalcontent-ui/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- * * Copyright © 2020 Endless Mobile, Inc. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . * * Authors: * - Philip Withnall */ #pragma once #include #include #include #include #include G_BEGIN_DECLS #define MCT_TYPE_RESTRICT_APPLICATIONS_DIALOG (mct_restrict_applications_dialog_get_type ()) G_DECLARE_FINAL_TYPE (MctRestrictApplicationsDialog, mct_restrict_applications_dialog, MCT, RESTRICT_APPLICATIONS_DIALOG, AdwPreferencesWindow) MctRestrictApplicationsDialog *mct_restrict_applications_dialog_new (MctAppFilter *app_filter, const gchar *user_display_name); MctAppFilter *mct_restrict_applications_dialog_get_app_filter (MctRestrictApplicationsDialog *self); void mct_restrict_applications_dialog_set_app_filter (MctRestrictApplicationsDialog *self, MctAppFilter *app_filter); const gchar *mct_restrict_applications_dialog_get_user_display_name (MctRestrictApplicationsDialog *self); void mct_restrict_applications_dialog_set_user_display_name (MctRestrictApplicationsDialog *self, const gchar *user_display_name); void mct_restrict_applications_dialog_build_app_filter (MctRestrictApplicationsDialog *self, MctAppFilterBuilder *builder); G_END_DECLS restrict-applications-dialog.ui000066400000000000000000000032111505556674000330770ustar00rootroot00000000000000malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/libmalcontent-ui restrict-applications-selector.c000066400000000000000000000730041505556674000332740ustar00rootroot00000000000000malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/libmalcontent-ui/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- * * Copyright © 2020 Endless Mobile, Inc. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . * * Authors: * - Philip Withnall */ #include "config.h" #include #include #include #include #include #include #include #include #include #include "restrict-applications-selector.h" #define WEB_BROWSERS_CONTENT_TYPE "x-scheme-handler/http" static void app_info_changed_cb (GAppInfoMonitor *monitor, gpointer user_data); static void reload_apps (MctRestrictApplicationsSelector *self); static GtkWidget *create_row_for_app_cb (gpointer item, gpointer user_data); static char *app_info_dup_name (GAppInfo *app_info); /** * MctRestrictApplicationsSelector: * * The ‘Restrict Applications’ selector is a list box which shows the available * applications on the system alongside a column of toggle switches, which * allows the given user to be prevented from running each application. * * The selector takes an #MctRestrictApplicationsSelector:app-filter as input * to set up the UI, and returns its output as set of modifications to a given * #MctAppFilterBuilder using * mct_restrict_applications_selector_build_app_filter(). * * Search terms may be applied using #MctRestrictApplicationsSelector:search. * These will filter the list of displayed apps so that only ones matching the * search terms (by name, using UTF-8 normalisation and casefolding) will be * displayed. * * Since: 0.5.0 */ struct _MctRestrictApplicationsSelector { GtkBox parent_instance; GtkListBox *listbox; GList *cached_apps; /* (nullable) (owned) (element-type GAppInfo) */ GListStore *apps; GtkFilterListModel *filtered_apps; GtkStringFilter *search_filter; GAppInfoMonitor *app_info_monitor; /* (owned) */ gulong app_info_monitor_changed_id; GHashTable *blocklisted_apps; /* (owned) (element-type GAppInfo) */ MctAppFilter *app_filter; /* (owned) */ FlatpakInstallation *system_installation; /* (owned) */ FlatpakInstallation *user_installation; /* (owned) */ gchar *search; /* (nullable) (owned) */ }; G_DEFINE_TYPE (MctRestrictApplicationsSelector, mct_restrict_applications_selector, GTK_TYPE_BOX) typedef enum { PROP_APP_FILTER = 1, PROP_SEARCH, } MctRestrictApplicationsSelectorProperty; static GParamSpec *properties[PROP_SEARCH + 1]; enum { SIGNAL_CHANGED, }; static guint signals[SIGNAL_CHANGED + 1]; static void mct_restrict_applications_selector_constructed (GObject *obj) { MctRestrictApplicationsSelector *self = MCT_RESTRICT_APPLICATIONS_SELECTOR (obj); /* Default app filter, typically for when we’re instantiated by #GtkBuilder. */ if (self->app_filter == NULL) { g_auto(MctAppFilterBuilder) builder = MCT_APP_FILTER_BUILDER_INIT (); self->app_filter = mct_app_filter_builder_end (&builder); } g_assert (self->app_filter != NULL); /* Load the apps. */ reload_apps (self); G_OBJECT_CLASS (mct_restrict_applications_selector_parent_class)->constructed (obj); } static void mct_restrict_applications_selector_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { MctRestrictApplicationsSelector *self = MCT_RESTRICT_APPLICATIONS_SELECTOR (object); switch ((MctRestrictApplicationsSelectorProperty) prop_id) { case PROP_APP_FILTER: g_value_set_boxed (value, self->app_filter); break; case PROP_SEARCH: g_value_set_string (value, self->search); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void mct_restrict_applications_selector_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { MctRestrictApplicationsSelector *self = MCT_RESTRICT_APPLICATIONS_SELECTOR (object); switch ((MctRestrictApplicationsSelectorProperty) prop_id) { case PROP_APP_FILTER: mct_restrict_applications_selector_set_app_filter (self, g_value_get_boxed (value)); break; case PROP_SEARCH: mct_restrict_applications_selector_set_search (self, g_value_get_string (value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void mct_restrict_applications_selector_dispose (GObject *object) { MctRestrictApplicationsSelector *self = (MctRestrictApplicationsSelector *)object; g_clear_pointer (&self->blocklisted_apps, g_hash_table_unref); g_clear_list (&self->cached_apps, g_object_unref); if (self->app_info_monitor != NULL && self->app_info_monitor_changed_id != 0) { g_signal_handler_disconnect (self->app_info_monitor, self->app_info_monitor_changed_id); self->app_info_monitor_changed_id = 0; } g_clear_object (&self->app_info_monitor); g_clear_pointer (&self->app_filter, mct_app_filter_unref); g_clear_object (&self->system_installation); g_clear_object (&self->user_installation); g_clear_pointer (&self->search, g_free); G_OBJECT_CLASS (mct_restrict_applications_selector_parent_class)->dispose (object); } static void mct_restrict_applications_selector_realize (GtkWidget *widget) { g_autoptr(GtkCssProvider) provider = NULL; GTK_WIDGET_CLASS (mct_restrict_applications_selector_parent_class)->realize (widget); provider = gtk_css_provider_new (); gtk_css_provider_load_from_resource (provider, "/org/freedesktop/MalcontentUi/ui/restricts-switch.css"); gtk_style_context_add_provider_for_display (gtk_widget_get_display (widget), GTK_STYLE_PROVIDER (provider), GTK_STYLE_PROVIDER_PRIORITY_APPLICATION - 1); } static void mct_restrict_applications_selector_class_init (MctRestrictApplicationsSelectorClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); object_class->constructed = mct_restrict_applications_selector_constructed; object_class->get_property = mct_restrict_applications_selector_get_property; object_class->set_property = mct_restrict_applications_selector_set_property; object_class->dispose = mct_restrict_applications_selector_dispose; widget_class->realize = mct_restrict_applications_selector_realize; /** * MctRestrictApplicationsSelector:app-filter: (not nullable) * * The user’s current app filter, used to set up the selector. As app filters * are immutable, it is not updated as the selector is changed. Use * mct_restrict_applications_selector_build_app_filter() to build the new app * filter. * * Since: 0.5.0 */ properties[PROP_APP_FILTER] = g_param_spec_boxed ("app-filter", "App Filter", "The user’s current app filter, used to set up the selector.", MCT_TYPE_APP_FILTER, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); /** * MctRestrictApplicationsSelector:search: (nullable) * * Search terms to filter the displayed list of apps by, or %NULL to not * filter the search. * * Since: 0.12.0 */ properties[PROP_SEARCH] = g_param_spec_string ("search", "Search", "Search terms to filter the displayed list of apps by.", NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); g_object_class_install_properties (object_class, G_N_ELEMENTS (properties), properties); /** * MctRestrictApplicationsSelector::changed: * * Emitted whenever an application in the list is blocked or unblocked. * * Since: 0.5.0 */ signals[SIGNAL_CHANGED] = g_signal_new ("changed", MCT_TYPE_RESTRICT_APPLICATIONS_SELECTOR, G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); gtk_widget_class_set_template_from_resource (widget_class, "/org/freedesktop/MalcontentUi/ui/restrict-applications-selector.ui"); gtk_widget_class_bind_template_child (widget_class, MctRestrictApplicationsSelector, listbox); gtk_widget_class_bind_template_child (widget_class, MctRestrictApplicationsSelector, apps); gtk_widget_class_bind_template_child (widget_class, MctRestrictApplicationsSelector, filtered_apps); gtk_widget_class_bind_template_child (widget_class, MctRestrictApplicationsSelector, search_filter); gtk_widget_class_bind_template_callback (widget_class, app_info_dup_name); } static void mct_restrict_applications_selector_init (MctRestrictApplicationsSelector *self) { gtk_widget_init_template (GTK_WIDGET (self)); self->app_info_monitor = g_app_info_monitor_get (); self->app_info_monitor_changed_id = g_signal_connect (self->app_info_monitor, "changed", (GCallback) app_info_changed_cb, self); gtk_list_box_bind_model (self->listbox, G_LIST_MODEL (self->filtered_apps), create_row_for_app_cb, self, NULL); self->blocklisted_apps = g_hash_table_new_full (g_direct_hash, g_direct_equal, g_object_unref, NULL); self->system_installation = flatpak_installation_new_system (NULL, NULL); self->user_installation = flatpak_installation_new_user (NULL, NULL); } static void on_switch_active_changed_cb (GtkSwitch *s, GParamSpec *pspec, gpointer user_data) { MctRestrictApplicationsSelector *self = MCT_RESTRICT_APPLICATIONS_SELECTOR (user_data); GAppInfo *app; gboolean allowed; app = g_object_get_data (G_OBJECT (s), "GAppInfo"); allowed = !gtk_switch_get_active (s); if (allowed) { gboolean removed; g_debug ("Removing ‘%s’ from blocklisted apps", g_app_info_get_id (app)); removed = g_hash_table_remove (self->blocklisted_apps, app); g_assert (removed); } else { gboolean added; g_debug ("Blocklisting ‘%s’", g_app_info_get_id (app)); added = g_hash_table_add (self->blocklisted_apps, g_object_ref (app)); g_assert (added); } g_signal_emit (self, signals[SIGNAL_CHANGED], 0); } static void update_listbox_row_switch (MctRestrictApplicationsSelector *self, GtkSwitch *w) { GAppInfo *app = g_object_get_data (G_OBJECT (w), "GAppInfo"); gboolean allowed = mct_app_filter_is_appinfo_allowed (self->app_filter, app) && !g_hash_table_contains (self->blocklisted_apps, app); gtk_switch_set_active (w, !allowed); if (allowed) g_hash_table_remove (self->blocklisted_apps, app); else g_hash_table_add (self->blocklisted_apps, g_object_ref (app)); } static GtkWidget * create_row_for_app_cb (gpointer item, gpointer user_data) { MctRestrictApplicationsSelector *self = MCT_RESTRICT_APPLICATIONS_SELECTOR (user_data); GAppInfo *app = G_APP_INFO (item); g_autoptr(GIcon) icon = NULL; GtkWidget *row, *w; const gchar *app_name; app_name = g_app_info_get_name (app); g_assert (G_IS_DESKTOP_APP_INFO (app)); icon = g_app_info_get_icon (app); if (icon == NULL) icon = g_themed_icon_new ("application-x-executable"); else g_object_ref (icon); row = adw_action_row_new (); /* Icon */ w = gtk_image_new_from_gicon (icon); gtk_image_set_icon_size (GTK_IMAGE (w), GTK_ICON_SIZE_LARGE); adw_action_row_add_prefix (ADW_ACTION_ROW (row), w); /* App name label */ adw_preferences_row_set_title (ADW_PREFERENCES_ROW (row), app_name); /* Switch */ w = g_object_new (GTK_TYPE_SWITCH, "valign", GTK_ALIGN_CENTER, NULL); gtk_widget_add_css_class (w, "restricts"); adw_action_row_add_suffix (ADW_ACTION_ROW (row), w); adw_action_row_set_activatable_widget (ADW_ACTION_ROW (row), w); gtk_widget_set_focusable (GTK_WIDGET (row), FALSE); /* Fetch status from AccountService */ g_object_set_data (G_OBJECT (row), "GtkSwitch", w); g_object_set_data_full (G_OBJECT (w), "GAppInfo", g_object_ref (app), g_object_unref); update_listbox_row_switch (self, GTK_SWITCH (w)); g_signal_connect (w, "notify::active", G_CALLBACK (on_switch_active_changed_cb), self); return row; } static char * app_info_dup_name (GAppInfo *app_info) { return g_strdup (g_app_info_get_name (app_info)); } static gint compare_app_info_cb (gconstpointer a, gconstpointer b, gpointer user_data) { GAppInfo *app_a = (GAppInfo*) a; GAppInfo *app_b = (GAppInfo*) b; return g_utf8_collate (g_app_info_get_name (app_a), g_app_info_get_name (app_b)); } static gint app_compare_id_length_cb (gconstpointer a, gconstpointer b) { GAppInfo *info_a = (GAppInfo *) a, *info_b = (GAppInfo *) b; const gchar *id_a, *id_b; gsize id_a_len, id_b_len; id_a = g_app_info_get_id (info_a); id_b = g_app_info_get_id (info_b); if (id_a == NULL && id_b == NULL) return 0; else if (id_a == NULL) return -1; else if (id_b == NULL) return 1; id_a_len = strlen (id_a); id_b_len = strlen (id_b); if (id_a_len == id_b_len) return strcmp (id_a, id_b); else return id_a_len - id_b_len; } /* Elements in @added_out and @removed_out are valid as long as @old_apps and * @new_apps are valid. * * Both lists have to be sorted the same before calling this function. */ static void diff_app_lists (GList *old_apps, GList *new_apps, GPtrArray **added_out, GPtrArray **removed_out) { g_autoptr(GPtrArray) added = g_ptr_array_new_with_free_func (NULL); g_autoptr(GPtrArray) removed = g_ptr_array_new_with_free_func (NULL); GList *o, *n; g_return_if_fail (added_out != NULL); g_return_if_fail (removed_out != NULL); for (o = old_apps, n = new_apps; o != NULL || n != NULL;) { int comparison; if (o == NULL) comparison = 1; else if (n == NULL) comparison = -1; else comparison = app_compare_id_length_cb (o->data, n->data); if (comparison < 0) { g_ptr_array_add (removed, o->data); o = o->next; } else if (comparison > 0) { g_ptr_array_add (added, n->data); n = n->next; } else { o = o->next; n = n->next; } } *added_out = g_steal_pointer (&added); *removed_out = g_steal_pointer (&removed); } /* This is quite expensive to call, as there’s no way to avoid calling * g_app_info_get_all() to see if anything’s changed; and that’s quite expensive. */ static void reload_apps (MctRestrictApplicationsSelector *self) { g_autolist(GAppInfo) old_apps = NULL; g_autolist(GAppInfo) new_apps = NULL; g_autoptr(GPtrArray) added_apps = NULL, removed_apps = NULL; g_autoptr(GHashTable) seen_flatpak_ids = NULL; g_autoptr(GHashTable) seen_executables = NULL; old_apps = g_steal_pointer (&self->cached_apps); new_apps = g_app_info_get_all (); /* Sort the apps by increasing length of #GAppInfo ID. When coupled with the * deduplication of flatpak IDs and executable paths, below, this should ensure that we * pick the ‘base’ app out of any set with matching prefixes and identical app IDs (in * case of flatpak apps) or executables (for non-flatpak apps), and show only that. * * This is designed to avoid listing all the components of LibreOffice for example, * which all share an app ID and hence have the same entry in the parental controls * app filter. * * Then diff the old and new lists so that the code below doesn’t end up * removing more rows than are necessary, and hence potentially losing * in-progress user input. */ new_apps = g_list_sort (new_apps, app_compare_id_length_cb); diff_app_lists (old_apps, new_apps, &added_apps, &removed_apps); g_debug ("%s: Diffed old and new app lists: %u apps added, %u apps removed", G_STRFUNC, added_apps->len, removed_apps->len); seen_flatpak_ids = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL); seen_executables = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL); /* Remove items first. */ for (guint i = 0; i < removed_apps->len; i++) { GAppInfo *app = removed_apps->pdata[i]; guint pos; gboolean found; found = g_list_store_find_with_equal_func (self->apps, app, (GEqualFunc) g_app_info_equal, &pos); /* The app being removed may have not passed the condition checks below * to have been added to self->apps. */ if (!found) continue; g_debug ("Removing app ‘%s’", g_app_info_get_id (app)); g_list_store_remove (self->apps, pos); } /* Now add the new items. */ for (guint i = 0; i < added_apps->len; i++) { GAppInfo *app = added_apps->pdata[i]; const gchar *app_name; const gchar * const *supported_types; app_name = g_app_info_get_name (app); supported_types = g_app_info_get_supported_types (app); if (!G_IS_DESKTOP_APP_INFO (app) || !g_app_info_should_show (app) || app_name[0] == '\0' || /* FIXME: Only list flatpak apps and apps with X-Parental-Controls * key set for now; we really need a system-wide MAC to be able to * reliably support blocklisting system programs. */ (!g_desktop_app_info_has_key (G_DESKTOP_APP_INFO (app), "X-Flatpak") && !g_desktop_app_info_has_key (G_DESKTOP_APP_INFO (app), "X-Parental-Controls")) || /* Web browsers are special cased */ (supported_types && g_strv_contains (supported_types, WEB_BROWSERS_CONTENT_TYPE))) { continue; } if (g_desktop_app_info_has_key (G_DESKTOP_APP_INFO (app), "X-Flatpak")) { g_autofree gchar *flatpak_id = NULL; flatpak_id = g_desktop_app_info_get_string (G_DESKTOP_APP_INFO (app), "X-Flatpak"); g_debug ("Processing app ‘%s’ (Exec=%s, X-Flatpak=%s)", g_app_info_get_id (app), g_app_info_get_executable (app), flatpak_id); /* Have we seen this flatpak ID before? */ if (!g_hash_table_add (seen_flatpak_ids, g_steal_pointer (&flatpak_id))) { g_debug (" → Skipping ‘%s’ due to seeing its flatpak ID already", g_app_info_get_id (app)); continue; } } else if (g_desktop_app_info_has_key (G_DESKTOP_APP_INFO (app), "X-Parental-Controls")) { g_autofree gchar *parental_controls_type = NULL; g_autofree gchar *executable = NULL; parental_controls_type = g_desktop_app_info_get_string (G_DESKTOP_APP_INFO (app), "X-Parental-Controls"); /* Ignore X-Parental-Controls=none */ if (g_strcmp0 (parental_controls_type, "none") == 0) continue; executable = g_strdup (g_app_info_get_executable (app)); g_debug ("Processing app ‘%s’ (Exec=%s, X-Parental-Controls=%s)", g_app_info_get_id (app), executable, parental_controls_type); /* Have we seen this executable before? */ if (!g_hash_table_add (seen_executables, g_steal_pointer (&executable))) { g_debug (" → Skipping ‘%s’ due to seeing its executable already", g_app_info_get_id (app)); continue; } } g_list_store_insert_sorted (self->apps, app, compare_app_info_cb, self); } /* Update the cache for next time. */ self->cached_apps = g_steal_pointer (&new_apps); } static void app_info_changed_cb (GAppInfoMonitor *monitor, gpointer user_data) { MctRestrictApplicationsSelector *self = MCT_RESTRICT_APPLICATIONS_SELECTOR (user_data); reload_apps (self); } /* Will return %NULL if @flatpak_id is not installed. */ static gchar * get_flatpak_ref_for_app_id (MctRestrictApplicationsSelector *self, const gchar *flatpak_id, GCancellable *cancellable) { g_autoptr(FlatpakInstalledRef) ref = NULL; g_autoptr(GError) local_error = NULL; g_assert (self->system_installation != NULL); g_assert (self->user_installation != NULL); /* FIXME technically this does local file I/O and should be async */ ref = flatpak_installation_get_current_installed_app (self->user_installation, flatpak_id, cancellable, &local_error); if (local_error != NULL && !g_error_matches (local_error, FLATPAK_ERROR, FLATPAK_ERROR_NOT_INSTALLED)) { g_warning ("Error searching for Flatpak ref: %s", local_error->message); return NULL; } g_clear_error (&local_error); if (!ref || !flatpak_installed_ref_get_is_current (ref)) { /* FIXME technically this does local file I/O and should be async */ ref = flatpak_installation_get_current_installed_app (self->system_installation, flatpak_id, cancellable, &local_error); if (local_error != NULL) { if (!g_error_matches (local_error, FLATPAK_ERROR, FLATPAK_ERROR_NOT_INSTALLED)) g_warning ("Error searching for Flatpak ref: %s", local_error->message); return NULL; } } return flatpak_ref_format_ref (FLATPAK_REF (ref)); } /** * mct_restrict_applications_selector_new: * @app_filter: (transfer none): app filter to configure the selector from initially * * Create a new #MctRestrictApplicationsSelector widget. * * Returns: (transfer full): a new restricted applications selector * Since: 0.5.0 */ MctRestrictApplicationsSelector * mct_restrict_applications_selector_new (MctAppFilter *app_filter) { g_return_val_if_fail (app_filter != NULL, NULL); return g_object_new (MCT_TYPE_RESTRICT_APPLICATIONS_SELECTOR, "app-filter", app_filter, NULL); } /** * mct_restrict_applications_selector_build_app_filter: * @self: an #MctRestrictApplicationsSelector * @builder: an existing #MctAppFilterBuilder to modify * * Get the app filter settings currently configured in the selector, by modifying * the given @builder. * * Since: 0.5.0 */ void mct_restrict_applications_selector_build_app_filter (MctRestrictApplicationsSelector *self, MctAppFilterBuilder *builder) { GDesktopAppInfo *app; GHashTableIter iter; g_return_if_fail (MCT_IS_RESTRICT_APPLICATIONS_SELECTOR (self)); g_return_if_fail (builder != NULL); g_hash_table_iter_init (&iter, self->blocklisted_apps); while (g_hash_table_iter_next (&iter, (gpointer) &app, NULL)) { g_autofree gchar *flatpak_id = NULL; flatpak_id = g_desktop_app_info_get_string (app, "X-Flatpak"); if (flatpak_id) flatpak_id = g_strstrip (flatpak_id); if (flatpak_id) { g_autofree gchar *flatpak_ref = get_flatpak_ref_for_app_id (self, flatpak_id, NULL); if (!flatpak_ref) { g_warning ("Skipping blocklisting Flatpak ID ‘%s’ due to it not being installed", flatpak_id); continue; } g_debug ("\t\t → Blocklisting Flatpak ref: %s", flatpak_ref); mct_app_filter_builder_blocklist_flatpak_ref (builder, flatpak_ref); } else { const gchar *executable = g_app_info_get_executable (G_APP_INFO (app)); g_autofree gchar *path = (executable != NULL) ? g_find_program_in_path (executable) : NULL; if (!path) { g_warning ("Skipping blocklisting executable ‘%s’ due to it not being found", executable); continue; } g_debug ("\t\t → Blocklisting path: %s", path); mct_app_filter_builder_blocklist_path (builder, path); } } } /** * mct_restrict_applications_selector_get_app_filter: * @self: an #MctRestrictApplicationsSelector * * Get the value of #MctRestrictApplicationsSelector:app-filter. If the property * was originally set to %NULL, this will be the empty app filter. * * Returns: (transfer none) (not nullable): the initial app filter used to * populate the selector * Since: 0.5.0 */ MctAppFilter * mct_restrict_applications_selector_get_app_filter (MctRestrictApplicationsSelector *self) { g_return_val_if_fail (MCT_IS_RESTRICT_APPLICATIONS_SELECTOR (self), NULL); return self->app_filter; } /** * mct_restrict_applications_selector_set_app_filter: * @self: an #MctRestrictApplicationsSelector * @app_filter: (nullable) (transfer none): the app filter to configure the selector * from, or %NULL to use an empty app filter * * Set the value of #MctRestrictApplicationsSelector:app-filter. * * This will overwrite any user changes to the selector, so they should be saved * first using mct_restrict_applications_selector_build_app_filter() if desired. * * Since: 0.5.0 */ void mct_restrict_applications_selector_set_app_filter (MctRestrictApplicationsSelector *self, MctAppFilter *app_filter) { g_autoptr(MctAppFilter) owned_app_filter = NULL; guint n_apps; g_return_if_fail (MCT_IS_RESTRICT_APPLICATIONS_SELECTOR (self)); /* Default app filter, typically for when we’re instantiated by #GtkBuilder. */ if (app_filter == NULL) { g_auto(MctAppFilterBuilder) builder = MCT_APP_FILTER_BUILDER_INIT (); owned_app_filter = mct_app_filter_builder_end (&builder); app_filter = owned_app_filter; } if (app_filter == self->app_filter) return; g_clear_pointer (&self->app_filter, mct_app_filter_unref); self->app_filter = mct_app_filter_ref (app_filter); /* Update the status of each app row. */ n_apps = g_list_model_get_n_items (G_LIST_MODEL (self->filtered_apps)); for (guint i = 0; i < n_apps; i++) { GtkListBoxRow *row; GtkWidget *w; /* Navigate the widget hierarchy set up in create_row_for_app_cb(). */ row = gtk_list_box_get_row_at_index (self->listbox, i); g_assert (row != NULL && GTK_IS_LIST_BOX_ROW (row)); w = g_object_get_data (G_OBJECT (row), "GtkSwitch"); g_assert (w != NULL && GTK_IS_SWITCH (w)); update_listbox_row_switch (self, GTK_SWITCH (w)); } g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_APP_FILTER]); } /** * mct_restrict_applications_selector_get_search: * @self: an #MctRestrictApplicationsSelector * * Get the value of #MctRestrictApplicationsSelector:search. * * Returns: current search terms, or %NULL if no search filtering is active * Since: 0.12.0 */ const gchar * mct_restrict_applications_selector_get_search (MctRestrictApplicationsSelector *self) { g_return_val_if_fail (MCT_IS_RESTRICT_APPLICATIONS_SELECTOR (self), NULL); return self->search; } /** * mct_restrict_applications_selector_set_search: * @self: an #MctRestrictApplicationsSelector * @search: (nullable): search terms, or %NULL to not filter the app list * * Set the value of #MctRestrictApplicationsSelector:search, or clear it to * %NULL. * * Since: 0.12.0 */ void mct_restrict_applications_selector_set_search (MctRestrictApplicationsSelector *self, const gchar *search) { g_return_if_fail (MCT_IS_RESTRICT_APPLICATIONS_SELECTOR (self)); /* Squash empty search terms down to nothing. */ if (search != NULL && *search == '\0') search = NULL; if (g_strcmp0 (search, self->search) == 0) return; g_clear_pointer (&self->search, g_free); self->search = g_strdup (search); gtk_string_filter_set_search (self->search_filter, self->search); g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_SEARCH]); } restrict-applications-selector.h000066400000000000000000000040751505556674000333030ustar00rootroot00000000000000malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/libmalcontent-ui/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- * * Copyright © 2020 Endless Mobile, Inc. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . * * Authors: * - Philip Withnall */ #pragma once #include #include #include #include G_BEGIN_DECLS #define MCT_TYPE_RESTRICT_APPLICATIONS_SELECTOR (mct_restrict_applications_selector_get_type ()) G_DECLARE_FINAL_TYPE (MctRestrictApplicationsSelector, mct_restrict_applications_selector, MCT, RESTRICT_APPLICATIONS_SELECTOR, GtkBox) MctRestrictApplicationsSelector *mct_restrict_applications_selector_new (MctAppFilter *app_filter); MctAppFilter *mct_restrict_applications_selector_get_app_filter (MctRestrictApplicationsSelector *self); void mct_restrict_applications_selector_set_app_filter (MctRestrictApplicationsSelector *self, MctAppFilter *app_filter); void mct_restrict_applications_selector_build_app_filter (MctRestrictApplicationsSelector *self, MctAppFilterBuilder *builder); const gchar *mct_restrict_applications_selector_get_search (MctRestrictApplicationsSelector *self); void mct_restrict_applications_selector_set_search (MctRestrictApplicationsSelector *self, const gchar *search); G_END_DECLS restrict-applications-selector.ui000066400000000000000000000024001505556674000334570ustar00rootroot00000000000000malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/libmalcontent-ui GAppInfo apps search_filter malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/libmalcontent-ui/restricts-switch.css000066400000000000000000000007171505556674000311020ustar00rootroot00000000000000/* FIXME: This ‘negative’ variant of a GtkSwitch should probably be * upstreamed to GTK. See https://gitlab.gnome.org/GNOME/gtk/issues/2470 */ switch:checked.restricts { background-color: @yellow_5; } switch:checked.restricts, switch:checked.restricts slider { border-color: @yellow_3; } switch:disabled.restricts { border-color: @borders; background-color: @insensitive_bg_color; } switch:disabled.restricts slider { filter: grayscale(100%); } malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/libmalcontent-ui/user-controls.c000066400000000000000000001440311505556674000300300ustar00rootroot00000000000000/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- * * Copyright © 2018, 2019, 2020 Endless Mobile, Inc. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . * * Authors: * - Georges Basile Stavracas Neto * - Philip Withnall */ #include "config.h" #include #include #include #include #include #include #include #include "restrict-applications-dialog.h" #include "user-controls.h" #define WEB_BROWSERS_CONTENT_TYPE "x-scheme-handler/http" /* The value which we store as an age to indicate that OARS filtering is disabled. */ static const guint32 oars_disabled_age = (guint32) -1; /** * MctUserControls: * * A group of widgets which allow setting the parental controls for a given * user. * * If #MctUserControls:user is set, the current parental controls settings for * that user will be loaded and displayed, and any changes made via the controls * will be automatically saved for that user (potentially after a short * timeout). * * If #MctUserControls:user is unset (for example, if setting the parental * controls for a user account which hasn’t yet been created), the controls can * be initialised by setting: * * #MctUserControls:app-filter * * #MctUserControls:user-account-type * * #MctUserControls:user-locale * * #MctUserControls:user-display-name * * When #MctUserControls:user is unset, changes made to the parental controls * cannot be saved automatically, and must be queried using * mct_user_controls_build_app_filter(), then saved by the calling code. * * As parental controls are system settings, privileges are needed to view and * edit them (for the current user or for other users). These can be acquired * using polkit. #MctUserControls:permission is used to query the current * permissions for getting/setting parental controls. If it’s %NULL, or if * permissions are not currently granted, the #MctUserControls will be * insensitive. * * Since: 0.5.0 */ struct _MctUserControls { AdwBin parent_instance; GtkLabel *description_label; GMenu *age_menu; GtkSwitch *restrict_software_installation_switch; AdwActionRow *restrict_software_installation_row; GtkSwitch *restrict_web_browsers_switch; AdwActionRow *restrict_web_browsers_row; GtkMenuButton *oars_button; GtkPopoverMenu *oars_popover; MctRestrictApplicationsDialog *restrict_applications_dialog; GtkLabel *restrict_applications_description; AdwActionRow *restrict_applications_row; GSimpleActionGroup *action_group; /* (owned) */ ActUser *user; /* (owned) (nullable) */ gulong user_changed_id; GPermission *permission; /* (owned) (nullable) */ gulong permission_allowed_id; GDBusConnection *dbus_connection; /* (owned) */ GCancellable *cancellable; /* (owned) */ MctManager *manager; /* (owned) */ MctAppFilter *filter; /* (owned) (nullable); updated by the user of #MctUserControls */ MctAppFilter *last_saved_filter; /* (owned) (nullable); updated each time we internally time out and save the app filter */ guint selected_age; /* @oars_disabled_age to disable OARS */ guint blocklist_apps_source_id; gboolean flushed_on_dispose; ActUserAccountType user_account_type; gchar *user_locale; /* (nullable) (owned) */ gchar *user_display_name; /* (nullable) (owned) */ gchar *description; /* (nullable) (owned) */ }; static gboolean blocklist_apps_cb (gpointer data); static void on_restrict_installation_switch_active_changed_cb (GtkSwitch *s, GParamSpec *pspec, MctUserControls *self); static void on_restrict_web_browsers_switch_active_changed_cb (GtkSwitch *s, GParamSpec *pspec, MctUserControls *self); static void on_restrict_applications_action_activated (GSimpleAction *action, GVariant *param, gpointer user_data); static void on_restrict_applications_dialog_closed_cb (AdwDialog *dialog, gpointer user_data); static void on_set_age_action_activated (GSimpleAction *action, GVariant *param, gpointer user_data); static void on_permission_allowed_cb (GObject *obj, GParamSpec *pspec, gpointer user_data); G_DEFINE_TYPE (MctUserControls, mct_user_controls, ADW_TYPE_BIN) typedef enum { PROP_USER = 1, PROP_PERMISSION, PROP_APP_FILTER, PROP_USER_ACCOUNT_TYPE, PROP_USER_LOCALE, PROP_USER_DISPLAY_NAME, PROP_DBUS_CONNECTION, PROP_DESCRIPTION, } MctUserControlsProperty; static GParamSpec *properties[PROP_DESCRIPTION + 1]; static const GActionEntry actions[] = { { "set-age", on_set_age_action_activated, "u", NULL, NULL, { 0, }}, { "restrict-applications", on_restrict_applications_action_activated, NULL, NULL, NULL, { 0, }} }; /* Auxiliary methods */ static AsContentRatingSystem get_content_rating_system (MctUserControls *self) { if (self->user_locale == NULL) return AS_CONTENT_RATING_SYSTEM_UNKNOWN; return as_content_rating_system_from_locale (self->user_locale); } static const gchar * get_user_locale (ActUser *user) { const gchar *locale; g_return_val_if_fail (ACT_IS_USER (user), "C"); /* accounts-service can return %NULL if loading over D-Bus failed. */ locale = act_user_get_language (user); if (locale == NULL) return NULL; /* It can return the empty string if the user uses the system default locale. */ if (*locale == '\0') locale = setlocale (LC_MESSAGES, NULL); if (locale == NULL || *locale == '\0') locale = "C"; return locale; } static const gchar * get_user_display_name (ActUser *user) { const gchar *display_name; g_return_val_if_fail (ACT_IS_USER (user), _("unknown")); display_name = act_user_get_real_name (user); if (display_name != NULL) return display_name; display_name = act_user_get_user_name (user); if (display_name != NULL) return display_name; /* Translators: this is the full name for an unknown user account. */ return _("unknown"); } static void schedule_update_blocklisted_apps (MctUserControls *self) { if (self->blocklist_apps_source_id > 0) return; /* Use a timeout to batch multiple quick changes into a single * update. 1 second is an arbitrary sufficiently small number */ self->blocklist_apps_source_id = g_timeout_add_seconds (1, blocklist_apps_cb, self); } static void flush_update_blocklisted_apps (MctUserControls *self) { if (self->blocklist_apps_source_id > 0) { /* Remove the timer and forcefully call the timer callback. */ g_source_remove (self->blocklist_apps_source_id); self->blocklist_apps_source_id = 0; blocklist_apps_cb (self); } } static void update_app_filter_from_user (MctUserControls *self) { g_autoptr(GError) error = NULL; if (self->user == NULL) return; /* FIXME: It’s expected that, unless authorised already, a user cannot read * another user’s app filter. accounts-service currently (incorrectly) ignores * the missing ‘interactive’ flag and prompts the user for permission if so, * so don’t query at all in that case. */ if (act_user_get_uid (self->user) != getuid () && (self->permission == NULL || !g_permission_get_allowed (self->permission))) return; /* FIXME: make it asynchronous */ g_clear_pointer (&self->filter, mct_app_filter_unref); g_clear_pointer (&self->last_saved_filter, mct_app_filter_unref); self->filter = mct_manager_get_app_filter (self->manager, act_user_get_uid (self->user), MCT_MANAGER_GET_VALUE_FLAGS_NONE, self->cancellable, &error); if (error) { g_warning ("Error retrieving app filter for user '%s': %s", act_user_get_user_name (self->user), error->message); return; } self->last_saved_filter = mct_app_filter_ref (self->filter); g_debug ("Retrieved new app filter for user '%s'", act_user_get_user_name (self->user)); } static void update_restricted_apps (MctUserControls *self) { mct_restrict_applications_dialog_set_app_filter (self->restrict_applications_dialog, self->filter); } static void update_categories_from_language (MctUserControls *self) { AsContentRatingSystem rating_system; g_auto(GStrv) entries = NULL; const gchar *rating_system_str; const guint *ages; gsize i, n_ages; g_autofree gchar *disabled_action = NULL; g_autoptr(GMenu) top_subsection = NULL, bottom_subsection = NULL; rating_system = get_content_rating_system (self); rating_system_str = as_content_rating_system_to_string (rating_system); g_debug ("Using rating system %s", rating_system_str); entries = as_content_rating_system_get_formatted_ages (rating_system); ages = as_content_rating_system_get_csm_ages (rating_system, &n_ages); /* Fill in the age menu */ g_menu_remove_all (self->age_menu); disabled_action = g_strdup_printf ("permissions.set-age(uint32 %u)", oars_disabled_age); top_subsection = g_menu_new (); g_menu_append (top_subsection, _("Unrestricted"), disabled_action); g_menu_append_section (self->age_menu, NULL, G_MENU_MODEL (top_subsection)); bottom_subsection = g_menu_new (); for (i = 0; entries[i] != NULL; i++) { g_autofree gchar *action = g_strdup_printf ("permissions.set-age(uint32 %u)", ages[i]); /* Prevent the unlikely case that one of the real ages is the same as our * special ‘disabled’ value. */ g_assert (ages[i] != oars_disabled_age); g_menu_append (bottom_subsection, entries[i], action); } g_assert (i == n_ages); g_menu_append_section (self->age_menu, NULL, G_MENU_MODEL (bottom_subsection)); } /* Returns a human-readable but untranslated string, not suitable * to be shown in any UI */ static const gchar * oars_value_to_string (MctAppFilterOarsValue oars_value) { switch (oars_value) { case MCT_APP_FILTER_OARS_VALUE_UNKNOWN: return "unknown"; case MCT_APP_FILTER_OARS_VALUE_NONE: return "none"; case MCT_APP_FILTER_OARS_VALUE_MILD: return "mild"; case MCT_APP_FILTER_OARS_VALUE_MODERATE: return "moderate"; case MCT_APP_FILTER_OARS_VALUE_INTENSE: return "intense"; default: return ""; } } /* Ensure the enum casts below are safe. */ G_STATIC_ASSERT ((int) MCT_APP_FILTER_OARS_VALUE_UNKNOWN == (int) AS_CONTENT_RATING_VALUE_UNKNOWN); G_STATIC_ASSERT ((int) MCT_APP_FILTER_OARS_VALUE_NONE == (int) AS_CONTENT_RATING_VALUE_NONE); G_STATIC_ASSERT ((int) MCT_APP_FILTER_OARS_VALUE_MILD == (int) AS_CONTENT_RATING_VALUE_MILD); G_STATIC_ASSERT ((int) MCT_APP_FILTER_OARS_VALUE_MODERATE == (int) AS_CONTENT_RATING_VALUE_MODERATE); G_STATIC_ASSERT ((int) MCT_APP_FILTER_OARS_VALUE_INTENSE == (int) AS_CONTENT_RATING_VALUE_INTENSE); static void update_oars_level (MctUserControls *self) { AsContentRatingSystem rating_system; g_autofree gchar *rating_age_category = NULL; guint maximum_age, selected_age; gsize i; gboolean all_categories_unset; g_autofree const gchar **oars_categories = as_content_rating_get_all_rating_ids (); g_assert (self->filter != NULL); maximum_age = 0; all_categories_unset = TRUE; for (i = 0; oars_categories[i] != NULL; i++) { MctAppFilterOarsValue oars_value; guint age; oars_value = mct_app_filter_get_oars_value (self->filter, oars_categories[i]); all_categories_unset &= (oars_value == MCT_APP_FILTER_OARS_VALUE_UNKNOWN); age = as_content_rating_attribute_to_csm_age (oars_categories[i], (AsContentRatingValue) oars_value); g_debug ("OARS value for '%s': %s", oars_categories[i], oars_value_to_string (oars_value)); if (age > maximum_age) maximum_age = age; } g_debug ("Effective age for this user: %u; %s", maximum_age, all_categories_unset ? "all categories unset" : "some categories set"); rating_system = get_content_rating_system (self); rating_age_category = as_content_rating_system_format_age (rating_system, maximum_age); /* Unrestricted? */ if (rating_age_category == NULL || all_categories_unset) { g_clear_pointer (&rating_age_category, g_free); rating_age_category = g_strdup (_("Unrestricted")); selected_age = oars_disabled_age; } else { selected_age = maximum_age; } gtk_menu_button_set_label (self->oars_button, rating_age_category); self->selected_age = selected_age; } static void update_allow_app_installation (MctUserControls *self) { gboolean restrict_software_installation; gboolean non_admin_user = TRUE; if (self->user_account_type == ACT_USER_ACCOUNT_TYPE_ADMINISTRATOR) non_admin_user = FALSE; /* Admins are always allowed to install apps for all users. This behaviour is governed * by flatpak polkit rules. Hence, these hide these defunct switches for admins. */ gtk_widget_set_visible (GTK_WIDGET (self->restrict_software_installation_switch), non_admin_user); /* If user is admin, we are done here, bail out. */ if (!non_admin_user) { g_debug ("User ‘%s’ is an administrator, hiding app installation controls", self->user_display_name); return; } /* While the underlying permissions storage allows the system and user settings * to be stored completely independently, force the system setting to OFF if * the user setting is OFF in the UI. This keeps the policy in use for most * people simpler. */ restrict_software_installation = !mct_app_filter_is_user_installation_allowed (self->filter); g_signal_handlers_block_by_func (self->restrict_software_installation_switch, on_restrict_installation_switch_active_changed_cb, self); gtk_switch_set_active (self->restrict_software_installation_switch, restrict_software_installation); g_debug ("Restrict system installation: %s", restrict_software_installation ? "yes" : "no"); g_debug ("Restrict user installation: %s", restrict_software_installation ? "yes" : "no"); g_signal_handlers_unblock_by_func (self->restrict_software_installation_switch, on_restrict_installation_switch_active_changed_cb, self); } static void update_restrict_web_browsers (MctUserControls *self) { gboolean restrict_web_browsers; restrict_web_browsers = !mct_app_filter_is_content_type_allowed (self->filter, WEB_BROWSERS_CONTENT_TYPE); g_signal_handlers_block_by_func (self->restrict_web_browsers_switch, on_restrict_web_browsers_switch_active_changed_cb, self); gtk_switch_set_active (self->restrict_web_browsers_switch, restrict_web_browsers); g_debug ("Restrict web browsers: %s", restrict_web_browsers ? "yes" : "no"); g_signal_handlers_unblock_by_func (self->restrict_web_browsers_switch, on_restrict_web_browsers_switch_active_changed_cb, self); } static void update_labels_from_name (MctUserControls *self) { g_autofree gchar *l = NULL; gtk_label_set_markup (self->description_label, self->description); /* Translators: The placeholder is a user’s display name. */ l = g_strdup_printf (_("Prevents %s from running web browsers. Limited web content may still be available in other applications."), self->user_display_name); adw_action_row_set_subtitle (self->restrict_web_browsers_row, l); g_clear_pointer (&l, g_free); /* Translators: The placeholder is a user’s display name. */ l = g_strdup_printf (_("Prevents specified applications from being used by %s."), self->user_display_name); adw_action_row_set_subtitle (self->restrict_applications_row, l); g_clear_pointer (&l, g_free); /* Translators: The placeholder is a user’s display name. */ l = g_strdup_printf (_("Prevents %s from installing applications."), self->user_display_name); adw_action_row_set_subtitle (self->restrict_software_installation_row, l); g_clear_pointer (&l, g_free); } static void setup_parental_control_settings (MctUserControls *self) { gboolean is_authorized; gtk_widget_set_visible (GTK_WIDGET (self), self->filter != NULL); if (!self->filter) return; /* We only want to make the controls sensitive if we have permission to save * changes (@is_authorized). */ if (self->permission != NULL) is_authorized = g_permission_get_allowed (G_PERMISSION (self->permission)); else is_authorized = FALSE; gtk_widget_set_sensitive (GTK_WIDGET (self), is_authorized); update_restricted_apps (self); update_categories_from_language (self); update_oars_level (self); update_allow_app_installation (self); update_restrict_web_browsers (self); update_labels_from_name (self); } /* Callbacks */ static gboolean blocklist_apps_cb (gpointer data) { g_auto(MctAppFilterBuilder) builder = MCT_APP_FILTER_BUILDER_INIT (); g_autoptr(MctAppFilter) new_filter = NULL; g_autoptr(GError) error = NULL; MctUserControls *self = data; self->blocklist_apps_source_id = 0; if (self->user == NULL) { g_debug ("Not saving app filter as user is unset"); return G_SOURCE_REMOVE; } mct_user_controls_build_app_filter (self, &builder); new_filter = mct_app_filter_builder_end (&builder); /* Don’t bother saving the app filter (which could result in asking the user * for admin permission) if it hasn’t changed. */ if (self->last_saved_filter != NULL && mct_app_filter_equal (new_filter, self->last_saved_filter)) { g_debug ("Not saving app filter as it hasn’t changed"); return G_SOURCE_REMOVE; } /* FIXME: should become asynchronous */ mct_manager_set_app_filter (self->manager, act_user_get_uid (self->user), new_filter, MCT_MANAGER_SET_VALUE_FLAGS_INTERACTIVE, self->cancellable, &error); if (error) { g_warning ("Error updating app filter: %s", error->message); setup_parental_control_settings (self); } /* Update the cached copy */ mct_app_filter_unref (self->last_saved_filter); self->last_saved_filter = g_steal_pointer (&new_filter); return G_SOURCE_REMOVE; } static void on_restrict_installation_switch_active_changed_cb (GtkSwitch *s, GParamSpec *pspec, MctUserControls *self) { /* Save the changes. */ schedule_update_blocklisted_apps (self); } static void on_restrict_web_browsers_switch_active_changed_cb (GtkSwitch *s, GParamSpec *pspec, MctUserControls *self) { /* Save the changes. */ schedule_update_blocklisted_apps (self); } static void on_restrict_applications_action_activated (GSimpleAction *action, GVariant *param, gpointer user_data) { MctUserControls *self = MCT_USER_CONTROLS (user_data); /* Show the restrict applications dialogue modally, making sure to update its * state first. */ mct_restrict_applications_dialog_set_user_display_name (self->restrict_applications_dialog, self->user_display_name); mct_restrict_applications_dialog_set_app_filter (self->restrict_applications_dialog, self->filter); adw_dialog_present (ADW_DIALOG (self->restrict_applications_dialog), GTK_WIDGET (self)); } static void on_restrict_applications_dialog_closed_cb (AdwDialog *dialog, gpointer user_data) { MctUserControls *self = MCT_USER_CONTROLS (user_data); /* Schedule an update to the saved state. */ schedule_update_blocklisted_apps (self); } static void on_set_age_action_activated (GSimpleAction *action, GVariant *param, gpointer user_data) { AsContentRatingSystem rating_system; MctUserControls *self; g_auto(GStrv) entries = NULL; const guint *ages; guint age; guint i; gsize n_ages; self = MCT_USER_CONTROLS (user_data); age = g_variant_get_uint32 (param); rating_system = get_content_rating_system (self); entries = as_content_rating_system_get_formatted_ages (rating_system); ages = as_content_rating_system_get_csm_ages (rating_system, &n_ages); /* Update the button */ if (age == oars_disabled_age) gtk_menu_button_set_label (self->oars_button, _("Unrestricted")); for (i = 0; age != oars_disabled_age && entries[i] != NULL; i++) { if (ages[i] == age) { gtk_menu_button_set_label (self->oars_button, entries[i]); break; } } g_assert (age == oars_disabled_age || entries[i] != NULL); if (age == oars_disabled_age) g_debug ("Selected to disable OARS"); else g_debug ("Selected OARS age: %u", age); self->selected_age = age; schedule_update_blocklisted_apps (self); } /* GObject overrides */ static void mct_user_controls_constructed (GObject *object) { MctUserControls *self = MCT_USER_CONTROLS (object); /* Chain up. */ G_OBJECT_CLASS (mct_user_controls_parent_class)->constructed (object); /* FIXME: Ideally there wouldn’t be this sync call in a constructor, but there * seems to be no way around it if #MctUserControls is to be used from a * GtkBuilder template: templates are initialised from within the parent * widget’s init() function (not its constructed() function), so none of its * properties will have been set and it won’t reasonably have been able to * make an async call to initialise the bus connection itself. Binding * construct-only properties in GtkBuilder doesn’t work (and wouldn’t help if * it did). */ if (self->dbus_connection == NULL) self->dbus_connection = g_bus_get_sync (G_BUS_TYPE_SYSTEM, NULL, NULL); g_assert (self->dbus_connection != NULL); self->manager = mct_manager_new (self->dbus_connection); } static void mct_user_controls_finalize (GObject *object) { MctUserControls *self = (MctUserControls *)object; g_assert (self->blocklist_apps_source_id == 0); g_cancellable_cancel (self->cancellable); g_clear_object (&self->action_group); g_clear_object (&self->cancellable); if (self->user != NULL && self->user_changed_id != 0) g_signal_handler_disconnect (self->user, self->user_changed_id); self->user_changed_id = 0; g_clear_object (&self->user); g_clear_pointer (&self->user_locale, g_free); g_clear_pointer (&self->user_display_name, g_free); g_clear_pointer (&self->description, g_free); if (self->permission != NULL && self->permission_allowed_id != 0) { g_signal_handler_disconnect (self->permission, self->permission_allowed_id); self->permission_allowed_id = 0; } g_clear_object (&self->permission); g_clear_pointer (&self->filter, mct_app_filter_unref); g_clear_pointer (&self->last_saved_filter, mct_app_filter_unref); g_clear_object (&self->manager); g_clear_object (&self->dbus_connection); /* Hopefully we don’t have data loss. */ g_assert (self->flushed_on_dispose); G_OBJECT_CLASS (mct_user_controls_parent_class)->finalize (object); } static void mct_user_controls_dispose (GObject *object) { MctUserControls *self = (MctUserControls *)object; /* Since GTK calls g_object_run_dispose(), dispose() may be called multiple * times. We definitely want to save any unsaved changes, but don’t need to * do it multiple times, and after the first g_object_run_dispose() call, * none of our child widgets are still around to extract data from anyway. */ if (!self->flushed_on_dispose) flush_update_blocklisted_apps (self); self->flushed_on_dispose = TRUE; G_OBJECT_CLASS (mct_user_controls_parent_class)->dispose (object); } static void mct_user_controls_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { MctUserControls *self = MCT_USER_CONTROLS (object); switch ((MctUserControlsProperty) prop_id) { case PROP_USER: g_value_set_object (value, self->user); break; case PROP_PERMISSION: g_value_set_object (value, self->permission); break; case PROP_APP_FILTER: g_value_set_boxed (value, self->filter); break; case PROP_USER_ACCOUNT_TYPE: g_value_set_enum (value, self->user_account_type); break; case PROP_USER_LOCALE: g_value_set_string (value, self->user_locale); break; case PROP_USER_DISPLAY_NAME: g_value_set_string (value, self->user_display_name); break; case PROP_DBUS_CONNECTION: g_value_set_object (value, self->dbus_connection); break; case PROP_DESCRIPTION: g_value_set_string (value, self->description); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void mct_user_controls_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { MctUserControls *self = MCT_USER_CONTROLS (object); switch ((MctUserControlsProperty) prop_id) { case PROP_USER: mct_user_controls_set_user (self, g_value_get_object (value)); break; case PROP_PERMISSION: mct_user_controls_set_permission (self, g_value_get_object (value)); break; case PROP_APP_FILTER: mct_user_controls_set_app_filter (self, g_value_get_boxed (value)); break; case PROP_USER_ACCOUNT_TYPE: mct_user_controls_set_user_account_type (self, g_value_get_enum (value)); break; case PROP_USER_LOCALE: mct_user_controls_set_user_locale (self, g_value_get_string (value)); break; case PROP_USER_DISPLAY_NAME: mct_user_controls_set_user_display_name (self, g_value_get_string (value)); break; case PROP_DBUS_CONNECTION: /* Construct only. */ g_assert (self->dbus_connection == NULL); self->dbus_connection = g_value_dup_object (value); break; case PROP_DESCRIPTION: mct_user_controls_set_description (self, g_value_get_string (value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void mct_user_controls_class_init (MctUserControlsClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); object_class->constructed = mct_user_controls_constructed; object_class->finalize = mct_user_controls_finalize; object_class->dispose = mct_user_controls_dispose; object_class->get_property = mct_user_controls_get_property; object_class->set_property = mct_user_controls_set_property; properties[PROP_USER] = g_param_spec_object ("user", "User", "User", ACT_TYPE_USER, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); properties[PROP_PERMISSION] = g_param_spec_object ("permission", "Permission", "Permission to change parental controls", G_TYPE_PERMISSION, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); /** * MctUserControls:app-filter: (nullable) * * The user’s current app filter, used to set up the user controls. As app * filters are immutable, it is not updated as the user controls are changed. * Use mct_user_controls_build_app_filter() to build the new app filter. * * This may be %NULL if the app filter is unknown, or if querying it from * #MctUserControls:user fails. * * Since: 0.5.0 */ properties[PROP_APP_FILTER] = g_param_spec_boxed ("app-filter", "App Filter", "The user’s current app filter, used to set up the user controls, or %NULL if unknown.", MCT_TYPE_APP_FILTER, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); /** * MctUserControls:user-account-type: * * The type of the currently selected user account. * * Since: 0.5.0 */ properties[PROP_USER_ACCOUNT_TYPE] = g_param_spec_enum ("user-account-type", "User Account Type", "The type of the currently selected user account.", /* FIXME: Not a typo here; libaccountsservice uses the wrong namespace. * See: https://gitlab.freedesktop.org/accountsservice/accountsservice/issues/84 */ ACT_USER_TYPE_USER_ACCOUNT_TYPE, ACT_USER_ACCOUNT_TYPE_STANDARD, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); /** * MctUserControls:user-locale: (nullable) * * The locale for the currently selected user account, or %NULL if no * user is selected. * * If set, it must be in the format documented by [`setlocale()`](man:setlocale(3)): * ``` * language[_territory][.codeset][@modifier] * ``` * where `language` is an ISO 639 language code, `territory` is an ISO 3166 * country code, and `codeset` is a character set or encoding identifier like * `ISO-8859-1` or `UTF-8`. * * Since: 0.5.0 */ properties[PROP_USER_LOCALE] = g_param_spec_string ("user-locale", "User Locale", "The locale for the currently selected user account, or %NULL if no user is selected.", NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); /** * MctUserControls:user-display-name: (nullable) * * The display name for the currently selected user account, or %NULL if no * user is selected. This will typically be the user’s full name (if known) * or their username. * * If set, it must be valid UTF-8 and non-empty. * * Since: 0.5.0 */ properties[PROP_USER_DISPLAY_NAME] = g_param_spec_string ("user-display-name", "User Display Name", "The display name for the currently selected user account, or %NULL if no user is selected.", NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); /** * MctUserControls:description: (nullable) * * The description for the currently selected user account, or %NULL if no * user is selected. * * If set, it must be valid UTF-8 and non-empty. * * Since: 0.11.0 */ properties[PROP_DESCRIPTION] = g_param_spec_string ("description", "Description", "The description for the currently selected user account, or %NULL if no user is selected.", NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); /** * MctUserControls:dbus-connection: (not nullable) * * A connection to the system bus. This will be used for retrieving details * of user accounts, and must be provided at construction time. * * Since: 0.7.0 */ properties[PROP_DBUS_CONNECTION] = g_param_spec_object ("dbus-connection", "D-Bus Connection", "A connection to the system bus.", G_TYPE_DBUS_CONNECTION, G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); g_object_class_install_properties (object_class, G_N_ELEMENTS (properties), properties); gtk_widget_class_set_template_from_resource (widget_class, "/org/freedesktop/MalcontentUi/ui/user-controls.ui"); gtk_widget_class_bind_template_child (widget_class, MctUserControls, age_menu); gtk_widget_class_bind_template_child (widget_class, MctUserControls, description_label); gtk_widget_class_bind_template_child (widget_class, MctUserControls, restrict_software_installation_switch); gtk_widget_class_bind_template_child (widget_class, MctUserControls, restrict_software_installation_row); gtk_widget_class_bind_template_child (widget_class, MctUserControls, restrict_web_browsers_switch); gtk_widget_class_bind_template_child (widget_class, MctUserControls, restrict_web_browsers_row); gtk_widget_class_bind_template_child (widget_class, MctUserControls, oars_button); gtk_widget_class_bind_template_child (widget_class, MctUserControls, oars_popover); gtk_widget_class_bind_template_child (widget_class, MctUserControls, restrict_applications_dialog); gtk_widget_class_bind_template_child (widget_class, MctUserControls, restrict_applications_row); gtk_widget_class_bind_template_callback (widget_class, on_restrict_installation_switch_active_changed_cb); gtk_widget_class_bind_template_callback (widget_class, on_restrict_web_browsers_switch_active_changed_cb); gtk_widget_class_bind_template_callback (widget_class, on_restrict_applications_dialog_closed_cb); } static void mct_user_controls_init (MctUserControls *self) { g_autoptr(GtkCssProvider) provider = NULL; /* Ensure the types used in the UI are registered. */ g_type_ensure (MCT_TYPE_RESTRICT_APPLICATIONS_DIALOG); gtk_widget_init_template (GTK_WIDGET (self)); provider = gtk_css_provider_new (); gtk_css_provider_load_from_resource (provider, "/org/freedesktop/MalcontentUi/ui/restricts-switch.css"); gtk_style_context_add_provider_for_display (gdk_display_get_default (), GTK_STYLE_PROVIDER (provider), GTK_STYLE_PROVIDER_PRIORITY_APPLICATION - 1); self->selected_age = (guint) -1; self->cancellable = g_cancellable_new (); self->action_group = g_simple_action_group_new (); g_action_map_add_action_entries (G_ACTION_MAP (self->action_group), actions, G_N_ELEMENTS (actions), self); gtk_widget_insert_action_group (GTK_WIDGET (self), "permissions", G_ACTION_GROUP (self->action_group)); gtk_popover_menu_set_menu_model (self->oars_popover, G_MENU_MODEL (self->age_menu)); } /** * mct_user_controls_get_user: * @self: an #MctUserControls * * Get the value of #MctUserControls:user. * * Returns: (transfer none) (nullable): the user the controls are configured for, * or %NULL if unknown * Since: 0.5.0 */ ActUser * mct_user_controls_get_user (MctUserControls *self) { g_return_val_if_fail (MCT_IS_USER_CONTROLS (self), NULL); return self->user; } static void user_changed_cb (ActUser *user, gpointer user_data) { MctUserControls *self = MCT_USER_CONTROLS (user_data); mct_user_controls_set_user_account_type (self, act_user_get_account_type (user)); mct_user_controls_set_user_locale (self, get_user_locale (user)); mct_user_controls_set_user_display_name (self, get_user_display_name (user)); } /** * mct_user_controls_set_user: * @self: an #MctUserControls * @user: (nullable) (transfer none): the user to configure the controls for, * or %NULL if unknown * * Set the value of #MctUserControls:user. * * Since: 0.5.0 */ void mct_user_controls_set_user (MctUserControls *self, ActUser *user) { g_autoptr(ActUser) old_user = NULL; g_return_if_fail (MCT_IS_USER_CONTROLS (self)); g_return_if_fail (user == NULL || ACT_IS_USER (user)); /* If we have pending unsaved changes from the previous user, force them to be * saved first. */ flush_update_blocklisted_apps (self); old_user = (self->user != NULL) ? g_object_ref (self->user) : NULL; if (g_set_object (&self->user, user)) { g_object_freeze_notify (G_OBJECT (self)); if (old_user != NULL) g_signal_handler_disconnect (old_user, self->user_changed_id); /* Update the starting widget state from the user. */ if (user != NULL) { self->user_changed_id = g_signal_connect (user, "changed", (GCallback) user_changed_cb, self); user_changed_cb (user, self); } update_app_filter_from_user (self); setup_parental_control_settings (self); g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_USER]); g_object_thaw_notify (G_OBJECT (self)); } } static void on_permission_allowed_cb (GObject *obj, GParamSpec *pspec, gpointer user_data) { MctUserControls *self = MCT_USER_CONTROLS (user_data); update_app_filter_from_user (self); setup_parental_control_settings (self); } /** * mct_user_controls_get_permission: * @self: an #MctUserControls * * Get the value of #MctUserControls:permission. * * Returns: (transfer none) (nullable): a #GPermission indicating whether the * current user has permission to view or change parental controls, or %NULL * if permission is not allowed or is unknown * Since: 0.5.0 */ GPermission * mct_user_controls_get_permission (MctUserControls *self) { g_return_val_if_fail (MCT_IS_USER_CONTROLS (self), NULL); return self->permission; } /** * mct_user_controls_set_permission: * @self: an #MctUserControls * @permission: (nullable) (transfer none): the #GPermission indicating whether * the current user has permission to view or change parental controls, or * %NULL if permission is not allowed or is unknown * * Set the value of #MctUserControls:permission. * * Since: 0.5.0 */ void mct_user_controls_set_permission (MctUserControls *self, GPermission *permission) { g_return_if_fail (MCT_IS_USER_CONTROLS (self)); g_return_if_fail (permission == NULL || G_IS_PERMISSION (permission)); if (self->permission == permission) return; if (self->permission != NULL && self->permission_allowed_id != 0) { g_signal_handler_disconnect (self->permission, self->permission_allowed_id); self->permission_allowed_id = 0; } g_clear_object (&self->permission); if (permission != NULL) { self->permission = g_object_ref (permission); self->permission_allowed_id = g_signal_connect (self->permission, "notify::allowed", (GCallback) on_permission_allowed_cb, self); } /* Handle changes. */ update_app_filter_from_user (self); setup_parental_control_settings (self); g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_PERMISSION]); } /** * mct_user_controls_get_app_filter: * @self: an #MctUserControls * * Get the value of #MctUserControls:app-filter. If the app filter is unknown * or could not be retrieved from #MctUserControls:user, this will be %NULL. * * Returns: (transfer none) (nullable): the initial app filter used to * populate the user controls, or %NULL if unknown * Since: 0.5.0 */ MctAppFilter * mct_user_controls_get_app_filter (MctUserControls *self) { g_return_val_if_fail (MCT_IS_USER_CONTROLS (self), NULL); return self->filter; } /** * mct_user_controls_set_app_filter: * @self: an #MctUserControls * @app_filter: (nullable) (transfer none): the app filter to configure the user * controls from, or %NULL if unknown * * Set the value of #MctUserControls:app-filter. * * This will overwrite any user changes to the controls, so they should be saved * first using mct_user_controls_build_app_filter() if desired. They will be * saved automatically if #MctUserControls:user is set. * * Since: 0.5.0 */ void mct_user_controls_set_app_filter (MctUserControls *self, MctAppFilter *app_filter) { g_return_if_fail (MCT_IS_USER_CONTROLS (self)); /* If we have pending unsaved changes from the previous configuration, force * them to be saved first. */ flush_update_blocklisted_apps (self); if (self->filter == app_filter) return; g_clear_pointer (&self->filter, mct_app_filter_unref); g_clear_pointer (&self->last_saved_filter, mct_app_filter_unref); if (app_filter != NULL) { self->filter = mct_app_filter_ref (app_filter); self->last_saved_filter = mct_app_filter_ref (app_filter); } g_debug ("Set new app filter from caller"); setup_parental_control_settings (self); g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_APP_FILTER]); } /** * mct_user_controls_get_user_account_type: * @self: an #MctUserControls * * Get the value of #MctUserControls:user-account-type. * * Returns: the account type of the user the controls are configured for * Since: 0.5.0 */ ActUserAccountType mct_user_controls_get_user_account_type (MctUserControls *self) { g_return_val_if_fail (MCT_IS_USER_CONTROLS (self), ACT_USER_ACCOUNT_TYPE_STANDARD); return self->user_account_type; } /** * mct_user_controls_set_user_account_type: * @self: an #MctUserControls * @user_account_type: the account type of the user to configure the controls for * * Set the value of #MctUserControls:user-account-type. * * Since: 0.5.0 */ void mct_user_controls_set_user_account_type (MctUserControls *self, ActUserAccountType user_account_type) { g_return_if_fail (MCT_IS_USER_CONTROLS (self)); /* If we have pending unsaved changes from the previous user, force them to be * saved first. */ flush_update_blocklisted_apps (self); if (self->user_account_type == user_account_type) return; self->user_account_type = user_account_type; setup_parental_control_settings (self); g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_USER_ACCOUNT_TYPE]); } /** * mct_user_controls_get_user_locale: * @self: an #MctUserControls * * Get the value of #MctUserControls:user-locale. * * Returns: (transfer none) (nullable): the locale of the user the controls * are configured for, or %NULL if unknown * Since: 0.5.0 */ const gchar * mct_user_controls_get_user_locale (MctUserControls *self) { g_return_val_if_fail (MCT_IS_USER_CONTROLS (self), NULL); return self->user_locale; } /** * mct_user_controls_set_user_locale: * @self: an #MctUserControls * @user_locale: (nullable) (transfer none): the locale of the user * to configure the controls for, or %NULL if unknown * * Set the value of #MctUserControls:user-locale. * * Since: 0.5.0 */ void mct_user_controls_set_user_locale (MctUserControls *self, const gchar *user_locale) { g_return_if_fail (MCT_IS_USER_CONTROLS (self)); g_return_if_fail (user_locale == NULL || (*user_locale != '\0' && g_utf8_validate (user_locale, -1, NULL))); /* If we have pending unsaved changes from the previous user, force them to be * saved first. */ flush_update_blocklisted_apps (self); if (g_strcmp0 (self->user_locale, user_locale) == 0) return; g_clear_pointer (&self->user_locale, g_free); self->user_locale = g_strdup (user_locale); setup_parental_control_settings (self); g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_USER_LOCALE]); } /** * mct_user_controls_get_user_display_name: * @self: an #MctUserControls * * Get the value of #MctUserControls:user-display-name. * * Returns: (transfer none) (nullable): the display name of the user the controls * are configured for, or %NULL if unknown * Since: 0.5.0 */ const gchar * mct_user_controls_get_user_display_name (MctUserControls *self) { g_return_val_if_fail (MCT_IS_USER_CONTROLS (self), NULL); return self->user_display_name; } /** * mct_user_controls_set_user_display_name: * @self: an #MctUserControls * @user_display_name: (nullable) (transfer none): the display name of the user * to configure the controls for, or %NULL if unknown * * Set the value of #MctUserControls:user-display-name. * * Since: 0.5.0 */ void mct_user_controls_set_user_display_name (MctUserControls *self, const gchar *user_display_name) { g_return_if_fail (MCT_IS_USER_CONTROLS (self)); g_return_if_fail (user_display_name == NULL || (*user_display_name != '\0' && g_utf8_validate (user_display_name, -1, NULL))); /* If we have pending unsaved changes from the previous user, force them to be * saved first. */ flush_update_blocklisted_apps (self); if (g_strcmp0 (self->user_display_name, user_display_name) == 0) return; g_clear_pointer (&self->user_display_name, g_free); self->user_display_name = g_strdup (user_display_name); setup_parental_control_settings (self); g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_USER_DISPLAY_NAME]); } /** * mct_user_controls_set_description: * @self: an #MctUserControls * @description: (nullable) (transfer none): the description shown * above the controls, or %NULL if none. * * Set the value of #MctUserControls:description. * * Since: 0.11.0 */ void mct_user_controls_set_description (MctUserControls *self, const gchar *description) { g_return_if_fail (MCT_IS_USER_CONTROLS (self)); g_return_if_fail (description != NULL); /* If we have pending unsaved changes from the previous user, force them to be * saved first. */ flush_update_blocklisted_apps (self); if (g_strcmp0 (self->description, description) == 0) return; g_clear_pointer (&self->description, g_free); self->description = g_strdup (description); setup_parental_control_settings (self); g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_DESCRIPTION]); } /** * mct_user_controls_build_app_filter: * @self: an #MctUserControls * @builder: an existing #MctAppFilterBuilder to modify * * Get the app filter settings currently configured in the user controls, by * modifying the given @builder. This can be used to save the settings manually. * * Since: 0.5.0 */ void mct_user_controls_build_app_filter (MctUserControls *self, MctAppFilterBuilder *builder) { gboolean restrict_web_browsers; gsize i; g_autofree const gchar **oars_categories = as_content_rating_get_all_rating_ids (); g_return_if_fail (MCT_IS_USER_CONTROLS (self)); g_return_if_fail (builder != NULL); g_debug ("Building parental controls settings…"); /* Blocklist */ g_debug ("\t → Blocklisting apps"); mct_restrict_applications_dialog_build_app_filter (self->restrict_applications_dialog, builder); /* Maturity level */ g_debug ("\t → Maturity level"); if (self->selected_age == oars_disabled_age) g_debug ("\t\t → Disabled"); for (i = 0; self->selected_age != oars_disabled_age && oars_categories[i] != NULL; i++) { MctAppFilterOarsValue oars_value; const gchar *oars_category; oars_category = oars_categories[i]; oars_value = (MctAppFilterOarsValue) as_content_rating_attribute_from_csm_age (oars_category, self->selected_age); g_debug ("\t\t → %s: %s", oars_category, oars_value_to_string (oars_value)); mct_app_filter_builder_set_oars_value (builder, oars_category, oars_value); } /* Web browsers */ restrict_web_browsers = gtk_switch_get_active (self->restrict_web_browsers_switch); g_debug ("\t → %s web browsers", restrict_web_browsers ? "Restricting" : "Allowing"); if (restrict_web_browsers) mct_app_filter_builder_blocklist_content_type (builder, WEB_BROWSERS_CONTENT_TYPE); /* App installation */ if (self->user_account_type != ACT_USER_ACCOUNT_TYPE_ADMINISTRATOR) { gboolean restrict_software_installation; restrict_software_installation = gtk_switch_get_active (self->restrict_software_installation_switch); g_debug ("\t → %s system installation", restrict_software_installation ? "Restricting" : "Allowing"); g_debug ("\t → %s user installation", restrict_software_installation ? "Restricting" : "Allowing"); mct_app_filter_builder_set_allow_user_installation (builder, !restrict_software_installation); mct_app_filter_builder_set_allow_system_installation (builder, !restrict_software_installation); } } malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/libmalcontent-ui/user-controls.h000066400000000000000000000055261505556674000300420ustar00rootroot00000000000000/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- * * Copyright © 2018, 2019, 2020 Endless Mobile, Inc. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . * * Authors: * - Georges Basile Stavracas Neto * - Philip Withnall */ #pragma once #include #include #include #include #include #include #include G_BEGIN_DECLS #define MCT_TYPE_USER_CONTROLS (mct_user_controls_get_type()) G_DECLARE_FINAL_TYPE (MctUserControls, mct_user_controls, MCT, USER_CONTROLS, AdwBin) ActUser *mct_user_controls_get_user (MctUserControls *self); void mct_user_controls_set_user (MctUserControls *self, ActUser *user); GPermission *mct_user_controls_get_permission (MctUserControls *self); void mct_user_controls_set_permission (MctUserControls *self, GPermission *permission); MctAppFilter *mct_user_controls_get_app_filter (MctUserControls *self); void mct_user_controls_set_app_filter (MctUserControls *self, MctAppFilter *app_filter); ActUserAccountType mct_user_controls_get_user_account_type (MctUserControls *self); void mct_user_controls_set_user_account_type (MctUserControls *self, ActUserAccountType user_account_type); const gchar *mct_user_controls_get_user_locale (MctUserControls *self); void mct_user_controls_set_user_locale (MctUserControls *self, const gchar *user_locale); const gchar *mct_user_controls_get_user_display_name (MctUserControls *self); void mct_user_controls_set_user_display_name (MctUserControls *self, const gchar *user_display_name); void mct_user_controls_set_description (MctUserControls *self, const gchar *description); void mct_user_controls_build_app_filter (MctUserControls *self, MctAppFilterBuilder *builder); G_END_DECLS malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/libmalcontent-ui/user-controls.ui000066400000000000000000000142451505556674000302260ustar00rootroot00000000000000 malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/libmalcontent/000077500000000000000000000000001505556674000244275ustar00rootroot00000000000000malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/libmalcontent/app-filter-private.h000066400000000000000000000034271505556674000303210ustar00rootroot00000000000000/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- * * Copyright © 2018, 2019 Endless Mobile, Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * * Authors: * - Philip Withnall */ #pragma once #include #include #include #include G_BEGIN_DECLS /** * MctAppFilterListType: * @MCT_APP_FILTER_LIST_BLOCKLIST: Any program in the list is not allowed to * be run. * @MCT_APP_FILTER_LIST_ALLOWLIST: Any program not in the list is not allowed * to be run. * * Different semantics for interpreting an application list. * * Since: 0.2.0 */ typedef enum { MCT_APP_FILTER_LIST_BLOCKLIST, MCT_APP_FILTER_LIST_ALLOWLIST, } MctAppFilterListType; struct _MctAppFilter { /*< private >*/ gint ref_count; uid_t user_id; gchar **app_list; /* (not nullable) (owned) (array zero-terminated=1) */ MctAppFilterListType app_list_type; GVariant *oars_ratings; /* (type a{ss}) (owned non-floating) */ gboolean allow_user_installation; gboolean allow_system_installation; }; G_END_DECLS malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/libmalcontent/app-filter.c000066400000000000000000001224271505556674000266460ustar00rootroot00000000000000/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- * * Copyright © 2018-2019 Endless Mobile, Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * * Authors: * - Philip Withnall * - Andre Moreira Magalhaes */ #include "config.h" #include #include #include #include #include #include #include "libmalcontent/app-filter-private.h" /* FIXME: Eventually deprecate these compatibility fallbacks. */ GQuark mct_app_filter_error_quark (void) { return mct_manager_error_quark (); } /* struct _MctAppFilter is defined in app-filter-private.h */ G_DEFINE_BOXED_TYPE (MctAppFilter, mct_app_filter, mct_app_filter_ref, mct_app_filter_unref) /** * mct_app_filter_ref: * @filter: (transfer none): an #MctAppFilter * * Increment the reference count of @filter, and return the same pointer to it. * * Returns: (transfer full): the same pointer as @filter * Since: 0.2.0 */ MctAppFilter * mct_app_filter_ref (MctAppFilter *filter) { g_return_val_if_fail (filter != NULL, NULL); g_return_val_if_fail (filter->ref_count >= 1, NULL); g_return_val_if_fail (filter->ref_count <= G_MAXINT - 1, NULL); filter->ref_count++; return filter; } /** * mct_app_filter_unref: * @filter: (transfer full): an #MctAppFilter * * Decrement the reference count of @filter. If the reference count reaches * zero, free the @filter and all its resources. * * Since: 0.2.0 */ void mct_app_filter_unref (MctAppFilter *filter) { g_return_if_fail (filter != NULL); g_return_if_fail (filter->ref_count >= 1); filter->ref_count--; if (filter->ref_count <= 0) { g_strfreev (filter->app_list); g_variant_unref (filter->oars_ratings); g_free (filter); } } /** * mct_app_filter_get_user_id: * @filter: an #MctAppFilter * * Get the user ID of the user this #MctAppFilter is for. * * Returns: user ID of the relevant user, or `(uid_t) -1` if unknown * Since: 0.2.0 */ uid_t mct_app_filter_get_user_id (MctAppFilter *filter) { g_return_val_if_fail (filter != NULL, FALSE); g_return_val_if_fail (filter->ref_count >= 1, FALSE); return filter->user_id; } static MctAppFilterOarsValue oars_str_to_enum (const gchar *value_str) { if (g_str_equal (value_str, "none")) return MCT_APP_FILTER_OARS_VALUE_NONE; else if (g_str_equal (value_str, "mild")) return MCT_APP_FILTER_OARS_VALUE_MILD; else if (g_str_equal (value_str, "moderate")) return MCT_APP_FILTER_OARS_VALUE_MODERATE; else if (g_str_equal (value_str, "intense")) return MCT_APP_FILTER_OARS_VALUE_INTENSE; else return MCT_APP_FILTER_OARS_VALUE_UNKNOWN; } /** * mct_app_filter_is_enabled: * @filter: an #MctAppFilter * * Check whether the app filter is enabled and is going to impose at least one * restriction on the user. This gives a high level view of whether app filter * parental controls are ‘enabled’ for the given user. * * Returns: %TRUE if the app filter contains at least one non-default value, * %FALSE if it’s entirely default * Since: 0.7.0 */ gboolean mct_app_filter_is_enabled (MctAppFilter *filter) { gboolean oars_ratings_all_intense_or_unknown; GVariantIter iter; const gchar *oars_value; g_return_val_if_fail (filter != NULL, FALSE); g_return_val_if_fail (filter->ref_count >= 1, FALSE); /* The least restrictive OARS filter has all values as intense, or unknown. */ oars_ratings_all_intense_or_unknown = TRUE; g_variant_iter_init (&iter, filter->oars_ratings); while (g_variant_iter_loop (&iter, "{&s&s}", NULL, &oars_value)) { MctAppFilterOarsValue value = oars_str_to_enum (oars_value); if (value != MCT_APP_FILTER_OARS_VALUE_UNKNOWN && value != MCT_APP_FILTER_OARS_VALUE_INTENSE) { oars_ratings_all_intense_or_unknown = FALSE; break; } } /* Check all fields against their default values. Ignore * `allow_system_installation` since it’s false by default, so the default * value is already the most restrictive. */ return ((filter->app_list_type == MCT_APP_FILTER_LIST_BLOCKLIST && filter->app_list[0] != NULL) || filter->app_list_type == MCT_APP_FILTER_LIST_ALLOWLIST || !oars_ratings_all_intense_or_unknown || !filter->allow_user_installation); } /** * mct_app_filter_is_path_allowed: * @filter: an #MctAppFilter * @path: (type filename): absolute path of a program to check * * Check whether the program at @path is allowed to be run according to this * app filter. @path will be canonicalised without doing any I/O. * * Returns: %TRUE if the user this @filter corresponds to is allowed to run the * program at @path according to the @filter policy; %FALSE otherwise * Since: 0.2.0 */ gboolean mct_app_filter_is_path_allowed (MctAppFilter *filter, const gchar *path) { g_return_val_if_fail (filter != NULL, FALSE); g_return_val_if_fail (filter->ref_count >= 1, FALSE); g_return_val_if_fail (path != NULL, FALSE); g_return_val_if_fail (g_path_is_absolute (path), FALSE); g_autofree gchar *canonical_path = g_canonicalize_filename (path, "/"); g_autofree gchar *canonical_path_utf8 = g_filename_to_utf8 (canonical_path, -1, NULL, NULL, NULL); g_return_val_if_fail (canonical_path_utf8 != NULL, FALSE); gboolean path_in_list = g_strv_contains ((const gchar * const *) filter->app_list, canonical_path_utf8); switch (filter->app_list_type) { case MCT_APP_FILTER_LIST_BLOCKLIST: return !path_in_list; case MCT_APP_FILTER_LIST_ALLOWLIST: return path_in_list; default: g_assert_not_reached (); } } /* Check whether a given @ref is a valid flatpak ref. * * For simplicity and to avoid duplicating the whole logic behind * flatpak_ref_parse() this method will only check whether: * - the @ref contains exactly 3 slash chars * - the @ref starts with either app/ or runtime/ * - the name, arch and branch components of the @ref are not empty * * We avoid using flatpak_ref_parse() to allow for libflatpak * to depend on malcontent without causing a cyclic dependency. */ static gboolean is_valid_flatpak_ref (const gchar *ref) { g_auto(GStrv) parts = NULL; if (ref == NULL) return FALSE; parts = g_strsplit (ref, "/", 0); return (g_strv_length (parts) == 4 && (strcmp (parts[0], "app") == 0 || strcmp (parts[0], "runtime") == 0) && *parts[1] != '\0' && *parts[2] != '\0' && *parts[3] != '\0'); } /** * mct_app_filter_is_flatpak_ref_allowed: * @filter: an #MctAppFilter * @app_ref: flatpak ref for the app, for example `app/org.gnome.Builder/x86_64/master` * * Check whether the flatpak app with the given @app_ref is allowed to be run * according to this app filter. * * Returns: %TRUE if the user this @filter corresponds to is allowed to run the * flatpak called @app_ref according to the @filter policy; %FALSE otherwise * Since: 0.2.0 */ gboolean mct_app_filter_is_flatpak_ref_allowed (MctAppFilter *filter, const gchar *app_ref) { g_return_val_if_fail (filter != NULL, FALSE); g_return_val_if_fail (filter->ref_count >= 1, FALSE); g_return_val_if_fail (app_ref != NULL, FALSE); g_return_val_if_fail (is_valid_flatpak_ref (app_ref), FALSE); gboolean ref_in_list = g_strv_contains ((const gchar * const *) filter->app_list, app_ref); switch (filter->app_list_type) { case MCT_APP_FILTER_LIST_BLOCKLIST: return !ref_in_list; case MCT_APP_FILTER_LIST_ALLOWLIST: return ref_in_list; default: g_assert_not_reached (); } } /** * mct_app_filter_is_flatpak_app_allowed: * @filter: an #MctAppFilter * @app_id: flatpak ID for the app, for example `org.gnome.Builder` * * Check whether the flatpak app with the given @app_id is allowed to be run * according to this app filter. This is a globbing match, matching @app_id * against potentially multiple entries in the blocklist, as the blocklist * contains flatpak refs (for example, `app/org.gnome.Builder/x86_64/master`) * which contain architecture and branch information. App IDs (for example, * `org.gnome.Builder`) do not contain architecture or branch information. * * Returns: %TRUE if the user this @filter corresponds to is allowed to run the * flatpak called @app_id according to the @filter policy; %FALSE otherwise * Since: 0.2.0 */ gboolean mct_app_filter_is_flatpak_app_allowed (MctAppFilter *filter, const gchar *app_id) { g_return_val_if_fail (filter != NULL, FALSE); g_return_val_if_fail (filter->ref_count >= 1, FALSE); g_return_val_if_fail (app_id != NULL, FALSE); gsize app_id_len = strlen (app_id); gboolean id_in_list = FALSE; for (gsize i = 0; filter->app_list[i] != NULL; i++) { if (is_valid_flatpak_ref (filter->app_list[i]) && g_str_has_prefix (filter->app_list[i], "app/") && strncmp (filter->app_list[i] + strlen ("app/"), app_id, app_id_len) == 0 && filter->app_list[i][strlen ("app/") + app_id_len] == '/') { id_in_list = TRUE; break; } } switch (filter->app_list_type) { case MCT_APP_FILTER_LIST_BLOCKLIST: return !id_in_list; case MCT_APP_FILTER_LIST_ALLOWLIST: return id_in_list; default: g_assert_not_reached (); } } /* Implement folding of the results of applying the app filter to multiple keys * of a #GAppInfo, including short circuiting. If the app filter is a blocklist, * we want to short circuit return blocked on the first key which is blocked; * otherwise continue to checking the next key. Similarly, if the app filter is * an allowlist, we want to short circuit return *allowed* on the first key * which is allowed; otherwise continue to checking the next key. * * @allowed is the result of an app filter check against a single key. * The return value from this function indicates whether to short circuit, i.e. * whether to return control flow immediately after this function returns. The * result of the fold is returned as @allowed_out. * * The base case for if all keys have been checked and nothing has been allowed * or blocked so far is filter_fold_base(). */ static gboolean filter_fold_should_short_circuit (MctAppFilter *filter, gboolean allowed, gboolean *allowed_out) { switch (filter->app_list_type) { case MCT_APP_FILTER_LIST_BLOCKLIST: if (!allowed) { *allowed_out = FALSE; return TRUE; } break; case MCT_APP_FILTER_LIST_ALLOWLIST: if (allowed) { *allowed_out = TRUE; return TRUE; } break; default: g_assert_not_reached (); } return FALSE; } static gboolean filter_fold_base (MctAppFilter *filter) { switch (filter->app_list_type) { case MCT_APP_FILTER_LIST_BLOCKLIST: return TRUE; case MCT_APP_FILTER_LIST_ALLOWLIST: return FALSE; default: g_assert_not_reached (); } } /** * mct_app_filter_is_appinfo_allowed: * @filter: an #MctAppFilter * @app_info: (transfer none): application information * * Check whether the app with the given @app_info is allowed to be run * according to this app filter. This matches on multiple keys potentially * present in the #GAppInfo, including the path of the executable. * * If the appfilter is a blocklist, the @app_info is blocked if any of its * keys are blocked. If the appfilter is an allowlist, the @app_info is allowed * if any of its keys are allowed. * * Returns: %TRUE if the user this @filter corresponds to is allowed to run the * app represented by @app_info according to the @filter policy; %FALSE * otherwise * Since: 0.2.0 */ gboolean mct_app_filter_is_appinfo_allowed (MctAppFilter *filter, GAppInfo *app_info) { const char *exec; g_autofree gchar *abs_path = NULL; const gchar * const *types = NULL; gboolean retval = FALSE; g_return_val_if_fail (filter != NULL, FALSE); g_return_val_if_fail (filter->ref_count >= 1, FALSE); g_return_val_if_fail (G_IS_APP_INFO (app_info), FALSE); exec = g_app_info_get_executable (app_info); abs_path = (exec != NULL) ? g_find_program_in_path (exec) : NULL; if (abs_path != NULL && filter_fold_should_short_circuit (filter, mct_app_filter_is_path_allowed (filter, abs_path), &retval)) return retval; types = g_app_info_get_supported_types (app_info); for (gsize i = 0; types != NULL && types[i] != NULL; i++) { if (filter_fold_should_short_circuit (filter, mct_app_filter_is_content_type_allowed (filter, types[i]), &retval)) return retval; } if (G_IS_DESKTOP_APP_INFO (app_info)) { g_autofree gchar *flatpak_app = NULL; g_autofree gchar *old_flatpak_apps_str = NULL; /* This gives `org.gnome.Builder`. */ flatpak_app = g_desktop_app_info_get_string (G_DESKTOP_APP_INFO (app_info), "X-Flatpak"); if (flatpak_app != NULL) flatpak_app = g_strstrip (flatpak_app); if (flatpak_app != NULL && filter_fold_should_short_circuit (filter, mct_app_filter_is_flatpak_app_allowed (filter, flatpak_app), &retval)) return retval; /* FIXME: This could do with the g_desktop_app_info_get_string_list() API * from GLib 2.60. Gives `gimp.desktop;org.gimp.Gimp.desktop;`. */ old_flatpak_apps_str = g_desktop_app_info_get_string (G_DESKTOP_APP_INFO (app_info), "X-Flatpak-RenamedFrom"); if (old_flatpak_apps_str != NULL) { g_auto(GStrv) old_flatpak_apps = g_strsplit (old_flatpak_apps_str, ";", -1); for (gsize i = 0; old_flatpak_apps[i] != NULL; i++) { gchar *old_flatpak_app = g_strstrip (old_flatpak_apps[i]); if (g_str_has_suffix (old_flatpak_app, ".desktop")) old_flatpak_app[strlen (old_flatpak_app) - strlen (".desktop")] = '\0'; old_flatpak_app = g_strstrip (old_flatpak_app); if (*old_flatpak_app != '\0' && filter_fold_should_short_circuit (filter, mct_app_filter_is_flatpak_app_allowed (filter, old_flatpak_app), &retval)) return retval; } } } return filter_fold_base (filter); } /* Check whether a given @content_type is valid. * * For simplicity this method will only check whether: * - the @content_type contains exactly 1 slash char * - the @content_type does not start with a slash char * - the type and subtype components of the @content_type are not empty */ static gboolean is_valid_content_type (const gchar *content_type) { g_auto(GStrv) parts = NULL; if (content_type == NULL) return FALSE; parts = g_strsplit (content_type, "/", 0); return (g_strv_length (parts) == 2 && *parts[0] != '\0' && *parts[1] != '\0'); } /** * mct_app_filter_is_content_type_allowed: * @filter: an #MctAppFilter * @content_type: content type to check * * Check whether apps handling the given @content_type are allowed to be run * according to this app filter. * * Note that this method doesn’t match content subtypes. For example, if * `application/xml` is added to the blocklist but `application/xspf+xml` is not, * a check for whether `application/xspf+xml` is blocklisted would return false. * * Returns: %TRUE if the user this @filter corresponds to is allowed to run * programs handling @content_type according to the @filter policy; * %FALSE otherwise * Since: 0.4.0 */ gboolean mct_app_filter_is_content_type_allowed (MctAppFilter *filter, const gchar *content_type) { g_return_val_if_fail (filter != NULL, FALSE); g_return_val_if_fail (filter->ref_count >= 1, FALSE); g_return_val_if_fail (content_type != NULL, FALSE); g_return_val_if_fail (is_valid_content_type (content_type), FALSE); gboolean ref_in_list = g_strv_contains ((const gchar * const *) filter->app_list, content_type); switch (filter->app_list_type) { case MCT_APP_FILTER_LIST_BLOCKLIST: return !ref_in_list; case MCT_APP_FILTER_LIST_ALLOWLIST: return ref_in_list; default: g_assert_not_reached (); } } static gint strcmp_cb (gconstpointer a, gconstpointer b) { const gchar *str_a = *((const gchar * const *) a); const gchar *str_b = *((const gchar * const *) b); return g_strcmp0 (str_a, str_b); } /** * mct_app_filter_get_oars_sections: * @filter: an #MctAppFilter * * List the OARS sections present in this app filter. The sections are returned * in lexicographic order. A section will be listed even if its stored value is * %MCT_APP_FILTER_OARS_VALUE_UNKNOWN. The returned list may be empty. * * Returns: (transfer container) (array zero-terminated=1): %NULL-terminated * array of OARS sections * Since: 0.2.0 */ const gchar ** mct_app_filter_get_oars_sections (MctAppFilter *filter) { g_autoptr(GPtrArray) sections = g_ptr_array_new_with_free_func (NULL); GVariantIter iter; const gchar *oars_section; g_return_val_if_fail (filter != NULL, NULL); g_return_val_if_fail (filter->ref_count >= 1, NULL); g_variant_iter_init (&iter, filter->oars_ratings); while (g_variant_iter_loop (&iter, "{&s&s}", &oars_section, NULL)) g_ptr_array_add (sections, (gpointer) oars_section); /* Sort alphabetically for easier comparisons later. */ g_ptr_array_sort (sections, strcmp_cb); g_ptr_array_add (sections, NULL); /* NULL terminator */ return (const gchar **) g_ptr_array_free (g_steal_pointer (§ions), FALSE); } /** * mct_app_filter_get_oars_value: * @filter: an #MctAppFilter * @oars_section: name of the OARS section to get the value from * * Get the value assigned to the given @oars_section in the OARS filter stored * within @filter. If that section has no value explicitly defined, * %MCT_APP_FILTER_OARS_VALUE_UNKNOWN is returned. * * This value is the most intense value allowed for apps to have in this * section, inclusive. Any app with a more intense value for this section must * be hidden from the user whose @filter this is. * * This does not factor in mct_app_filter_is_system_installation_allowed(). * * Returns: an #MctAppFilterOarsValue * Since: 0.2.0 */ MctAppFilterOarsValue mct_app_filter_get_oars_value (MctAppFilter *filter, const gchar *oars_section) { const gchar *value_str; g_return_val_if_fail (filter != NULL, MCT_APP_FILTER_OARS_VALUE_UNKNOWN); g_return_val_if_fail (filter->ref_count >= 1, MCT_APP_FILTER_OARS_VALUE_UNKNOWN); g_return_val_if_fail (oars_section != NULL && *oars_section != '\0', MCT_APP_FILTER_OARS_VALUE_UNKNOWN); if (!g_variant_lookup (filter->oars_ratings, oars_section, "&s", &value_str)) return MCT_APP_FILTER_OARS_VALUE_UNKNOWN; return oars_str_to_enum (value_str); } /** * mct_app_filter_is_user_installation_allowed: * @filter: an #MctAppFilter * * Get whether the user is allowed to install to their flatpak user repository. * This should be queried in addition to the OARS values * (mct_app_filter_get_oars_value()) — if it returns %FALSE, the OARS values * should be ignored and app installation should be unconditionally disallowed. * * Returns: %TRUE if app installation is allowed to the user repository for * this user; %FALSE if it is unconditionally disallowed for this user * Since: 0.2.0 */ gboolean mct_app_filter_is_user_installation_allowed (MctAppFilter *filter) { g_return_val_if_fail (filter != NULL, FALSE); g_return_val_if_fail (filter->ref_count >= 1, FALSE); return filter->allow_user_installation; } /** * mct_app_filter_is_system_installation_allowed: * @filter: an #MctAppFilter * * Get whether the user is allowed to install to the flatpak system repository. * This should be queried in addition to the OARS values * (mct_app_filter_get_oars_value()) — if it returns %FALSE, the OARS values * should be ignored and app installation should be unconditionally disallowed. * * Returns: %TRUE if app installation is allowed to the system repository for * this user; %FALSE if it is unconditionally disallowed for this user * Since: 0.2.0 */ gboolean mct_app_filter_is_system_installation_allowed (MctAppFilter *filter) { g_return_val_if_fail (filter != NULL, FALSE); g_return_val_if_fail (filter->ref_count >= 1, FALSE); return filter->allow_system_installation; } /** * _mct_app_filter_build_app_filter_variant: * @filter: an #MctAppFilter * * Build a #GVariant which contains the app filter from @filter, in the format * used for storing it in AccountsService. * * Returns: (transfer floating): a new, floating #GVariant containing the app * filter */ static GVariant * _mct_app_filter_build_app_filter_variant (MctAppFilter *filter) { g_auto(GVariantBuilder) builder = G_VARIANT_BUILDER_INIT (G_VARIANT_TYPE ("(bas)")); g_return_val_if_fail (filter != NULL, NULL); g_return_val_if_fail (filter->ref_count >= 1, NULL); g_variant_builder_add (&builder, "b", (filter->app_list_type == MCT_APP_FILTER_LIST_ALLOWLIST)); g_variant_builder_open (&builder, G_VARIANT_TYPE ("as")); for (gsize i = 0; filter->app_list[i] != NULL; i++) g_variant_builder_add (&builder, "s", filter->app_list[i]); g_variant_builder_close (&builder); return g_variant_builder_end (&builder); } /** * mct_app_filter_serialize: * @filter: an #MctAppFilter * * Build a #GVariant which contains the app filter from @filter, in an opaque * variant format. This format may change in future, but * mct_app_filter_deserialize() is guaranteed to always be able to load any * variant produced by the current or any previous version of * mct_app_filter_serialize(). * * Returns: (transfer floating): a new, floating #GVariant containing the app * filter * Since: 0.7.0 */ GVariant * mct_app_filter_serialize (MctAppFilter *filter) { g_auto(GVariantBuilder) builder = G_VARIANT_BUILDER_INIT (G_VARIANT_TYPE ("a{sv}")); g_return_val_if_fail (filter != NULL, NULL); g_return_val_if_fail (filter->ref_count >= 1, NULL); /* The serialisation format is exactly the * `com.endlessm.ParentalControls.AppFilter` D-Bus interface. */ g_variant_builder_add (&builder, "{sv}", "AppFilter", _mct_app_filter_build_app_filter_variant (filter)); g_variant_builder_add (&builder, "{sv}", "OarsFilter", g_variant_new ("(s@a{ss})", "oars-1.1", filter->oars_ratings)); g_variant_builder_add (&builder, "{sv}", "AllowUserInstallation", g_variant_new_boolean (filter->allow_user_installation)); g_variant_builder_add (&builder, "{sv}", "AllowSystemInstallation", g_variant_new_boolean (filter->allow_system_installation)); return g_variant_builder_end (&builder); } /** * mct_app_filter_deserialize: * @variant: a serialized app filter variant * @user_id: the ID of the user the app filter relates to * @error: return location for a #GError, or %NULL * * Deserialize an app filter previously serialized with * mct_app_filter_serialize(). This function guarantees to be able to * deserialize any serialized form from this version or older versions of * libmalcontent. * * If deserialization fails, %MCT_MANAGER_ERROR_INVALID_DATA will be returned. * * Returns: (transfer full): deserialized app filter * Since: 0.7.0 */ MctAppFilter * mct_app_filter_deserialize (GVariant *variant, uid_t user_id, GError **error) { gboolean is_allowlist; g_auto(GStrv) app_list = NULL; const gchar *content_rating_kind; g_autoptr(GVariant) oars_variant = NULL; gboolean allow_user_installation; gboolean allow_system_installation; g_autoptr(MctAppFilter) app_filter = NULL; g_return_val_if_fail (variant != NULL, NULL); g_return_val_if_fail (error == NULL || *error == NULL, NULL); /* Check the overall type. */ if (!g_variant_is_of_type (variant, G_VARIANT_TYPE ("a{sv}"))) { g_set_error (error, MCT_MANAGER_ERROR, MCT_MANAGER_ERROR_INVALID_DATA, _("App filter for user %u was in an unrecognized format"), (guint) user_id); return NULL; } /* Extract the properties we care about. The default values here should be * kept in sync with those in the `com.endlessm.ParentalControls.AppFilter` * D-Bus interface. */ if (!g_variant_lookup (variant, "AppFilter", "(b^as)", &is_allowlist, &app_list)) { /* Default value. */ is_allowlist = FALSE; app_list = g_new0 (gchar *, 1); } if (!g_variant_lookup (variant, "OarsFilter", "(&s@a{ss})", &content_rating_kind, &oars_variant)) { /* Default value. */ content_rating_kind = "oars-1.1"; oars_variant = g_variant_new ("a{ss}", NULL); } /* Check that the OARS filter is in a format we support. Currently, that’s * only oars-1.0 and oars-1.1. */ if (!g_str_equal (content_rating_kind, "oars-1.0") && !g_str_equal (content_rating_kind, "oars-1.1")) { g_set_error (error, MCT_MANAGER_ERROR, MCT_MANAGER_ERROR_INVALID_DATA, _("OARS filter for user %u has an unrecognized kind ‘%s’"), (guint) user_id, content_rating_kind); return NULL; } if (!g_variant_lookup (variant, "AllowUserInstallation", "b", &allow_user_installation)) { /* Default value. */ allow_user_installation = TRUE; } if (!g_variant_lookup (variant, "AllowSystemInstallation", "b", &allow_system_installation)) { /* Default value. */ allow_system_installation = FALSE; } /* Success. Create an #MctAppFilter object to contain the results. */ app_filter = g_new0 (MctAppFilter, 1); app_filter->ref_count = 1; app_filter->user_id = user_id; app_filter->app_list = g_steal_pointer (&app_list); app_filter->app_list_type = is_allowlist ? MCT_APP_FILTER_LIST_ALLOWLIST : MCT_APP_FILTER_LIST_BLOCKLIST; app_filter->oars_ratings = g_steal_pointer (&oars_variant); app_filter->allow_user_installation = allow_user_installation; app_filter->allow_system_installation = allow_system_installation; return g_steal_pointer (&app_filter); } /** * mct_app_filter_equal: * @a: (not nullable): an #MctAppFilter * @b: (not nullable): an #MctAppFilter * * Check whether app filters @a and @b are equal. * * Returns: %TRUE if @a and @b are equal, %FALSE otherwise * Since: 0.10.0 */ gboolean mct_app_filter_equal (MctAppFilter *a, MctAppFilter *b) { g_return_val_if_fail (a != NULL, FALSE); g_return_val_if_fail (a->ref_count >= 1, FALSE); g_return_val_if_fail (b != NULL, FALSE); g_return_val_if_fail (b->ref_count >= 1, FALSE); return (a->user_id == b->user_id && a->app_list_type == b->app_list_type && a->allow_user_installation == b->allow_user_installation && a->allow_system_installation == b->allow_system_installation && g_strv_equal ((const gchar * const *) a->app_list, (const gchar * const *) b->app_list) && g_variant_equal (a->oars_ratings, b->oars_ratings)); } /* * Actual implementation of #MctAppFilterBuilder. * * All members are %NULL if un-initialised, cleared, or ended. */ typedef struct { GPtrArray *blocklist; /* (nullable) (owned) (element-type utf8) */ GHashTable *oars; /* (nullable) (owned) (element-type utf8 MctAppFilterOarsValue) */ gboolean allow_user_installation; gboolean allow_system_installation; /*< private >*/ gpointer padding[2]; } MctAppFilterBuilderReal; G_STATIC_ASSERT (sizeof (MctAppFilterBuilderReal) == sizeof (MctAppFilterBuilder)); G_STATIC_ASSERT (__alignof__ (MctAppFilterBuilderReal) == __alignof__ (MctAppFilterBuilder)); G_DEFINE_BOXED_TYPE (MctAppFilterBuilder, mct_app_filter_builder, mct_app_filter_builder_copy, mct_app_filter_builder_free) /** * mct_app_filter_builder_init: * @builder: an uninitialised #MctAppFilterBuilder * * Initialise the given @builder so it can be used to construct a new * #MctAppFilter. @builder must have been allocated on the stack, and must not * already be initialised. * * Construct the #MctAppFilter by calling methods on @builder, followed by * mct_app_filter_builder_end(). To abort construction, use * mct_app_filter_builder_clear(). * * Since: 0.2.0 */ void mct_app_filter_builder_init (MctAppFilterBuilder *builder) { MctAppFilterBuilder local_builder = MCT_APP_FILTER_BUILDER_INIT (); MctAppFilterBuilderReal *_builder = (MctAppFilterBuilderReal *) builder; g_return_if_fail (_builder != NULL); g_return_if_fail (_builder->blocklist == NULL); g_return_if_fail (_builder->oars == NULL); memcpy (builder, &local_builder, sizeof (local_builder)); } /** * mct_app_filter_builder_clear: * @builder: an #MctAppFilterBuilder * * Clear @builder, freeing any internal state in it. This will not free the * top-level storage for @builder itself, which is assumed to be allocated on * the stack. * * If called on an already-cleared #MctAppFilterBuilder, this function is * idempotent. * * Since: 0.2.0 */ void mct_app_filter_builder_clear (MctAppFilterBuilder *builder) { MctAppFilterBuilderReal *_builder = (MctAppFilterBuilderReal *) builder; g_return_if_fail (_builder != NULL); g_clear_pointer (&_builder->blocklist, g_ptr_array_unref); g_clear_pointer (&_builder->oars, g_hash_table_unref); } /** * mct_app_filter_builder_new: * * Construct a new #MctAppFilterBuilder on the heap. This is intended for * language bindings. The returned builder must eventually be freed with * mct_app_filter_builder_free(), but can be cleared zero or more times with * mct_app_filter_builder_clear() first. * * Returns: (transfer full): a new heap-allocated #MctAppFilterBuilder * Since: 0.2.0 */ MctAppFilterBuilder * mct_app_filter_builder_new (void) { g_autoptr(MctAppFilterBuilder) builder = NULL; builder = g_new0 (MctAppFilterBuilder, 1); mct_app_filter_builder_init (builder); return g_steal_pointer (&builder); } /** * mct_app_filter_builder_copy: * @builder: an #MctAppFilterBuilder * * Copy the given @builder to a newly-allocated #MctAppFilterBuilder on the * heap. This is safe to use with cleared, stack-allocated * #MctAppFilterBuilders. * * Returns: (transfer full): a copy of @builder * Since: 0.2.0 */ MctAppFilterBuilder * mct_app_filter_builder_copy (MctAppFilterBuilder *builder) { MctAppFilterBuilderReal *_builder = (MctAppFilterBuilderReal *) builder; g_autoptr(MctAppFilterBuilder) copy = NULL; MctAppFilterBuilderReal *_copy; g_return_val_if_fail (builder != NULL, NULL); copy = mct_app_filter_builder_new (); _copy = (MctAppFilterBuilderReal *) copy; mct_app_filter_builder_clear (copy); if (_builder->blocklist != NULL) _copy->blocklist = g_ptr_array_ref (_builder->blocklist); if (_builder->oars != NULL) _copy->oars = g_hash_table_ref (_builder->oars); _copy->allow_user_installation = _builder->allow_user_installation; _copy->allow_system_installation = _builder->allow_system_installation; return g_steal_pointer (©); } /** * mct_app_filter_builder_free: * @builder: a heap-allocated #MctAppFilterBuilder * * Free an #MctAppFilterBuilder originally allocated using * mct_app_filter_builder_new(). This must not be called on stack-allocated * builders initialised using mct_app_filter_builder_init(). * * Since: 0.2.0 */ void mct_app_filter_builder_free (MctAppFilterBuilder *builder) { g_return_if_fail (builder != NULL); mct_app_filter_builder_clear (builder); g_free (builder); } /** * mct_app_filter_builder_end: * @builder: an initialised #MctAppFilterBuilder * * Finish constructing an #MctAppFilter with the given @builder, and return it. * The #MctAppFilterBuilder will be cleared as if mct_app_filter_builder_clear() * had been called. * * Returns: (transfer full): a newly constructed #MctAppFilter * Since: 0.2.0 */ MctAppFilter * mct_app_filter_builder_end (MctAppFilterBuilder *builder) { MctAppFilterBuilderReal *_builder = (MctAppFilterBuilderReal *) builder; g_autoptr(MctAppFilter) app_filter = NULL; g_auto(GVariantBuilder) oars_builder = G_VARIANT_BUILDER_INIT (G_VARIANT_TYPE ("a{ss}")); GHashTableIter iter; gpointer key, value; g_autoptr(GVariant) oars_variant = NULL; g_return_val_if_fail (_builder != NULL, NULL); g_return_val_if_fail (_builder->blocklist != NULL, NULL); g_return_val_if_fail (_builder->oars != NULL, NULL); /* Ensure the paths list is %NULL-terminated. */ g_ptr_array_add (_builder->blocklist, NULL); /* Build the OARS variant. */ g_hash_table_iter_init (&iter, _builder->oars); while (g_hash_table_iter_next (&iter, &key, &value)) { const gchar *oars_section = key; MctAppFilterOarsValue oars_value = GPOINTER_TO_INT (value); const gchar *oars_value_strs[] = { NULL, /* MCT_APP_FILTER_OARS_VALUE_UNKNOWN */ "none", "mild", "moderate", "intense", }; g_assert ((int) oars_value >= 0 && (int) oars_value < (int) G_N_ELEMENTS (oars_value_strs)); if (oars_value_strs[oars_value] != NULL) g_variant_builder_add (&oars_builder, "{ss}", oars_section, oars_value_strs[oars_value]); } oars_variant = g_variant_ref_sink (g_variant_builder_end (&oars_builder)); /* Build the #MctAppFilter. */ app_filter = g_new0 (MctAppFilter, 1); app_filter->ref_count = 1; app_filter->user_id = -1; app_filter->app_list = (gchar **) g_ptr_array_free (g_steal_pointer (&_builder->blocklist), FALSE); app_filter->app_list_type = MCT_APP_FILTER_LIST_BLOCKLIST; app_filter->oars_ratings = g_steal_pointer (&oars_variant); app_filter->allow_user_installation = _builder->allow_user_installation; app_filter->allow_system_installation = _builder->allow_system_installation; mct_app_filter_builder_clear (builder); return g_steal_pointer (&app_filter); } /** * mct_app_filter_builder_blocklist_path: * @builder: an initialised #MctAppFilterBuilder * @path: (type filename): an absolute path to blocklist * * Add @path to the blocklist of app paths in the filter under construction. It * will be canonicalised (without doing any I/O) before being added. * The canonicalised @path will not be added again if it’s already been added. * * Since: 0.2.0 */ void mct_app_filter_builder_blocklist_path (MctAppFilterBuilder *builder, const gchar *path) { MctAppFilterBuilderReal *_builder = (MctAppFilterBuilderReal *) builder; g_return_if_fail (_builder != NULL); g_return_if_fail (_builder->blocklist != NULL); g_return_if_fail (path != NULL); g_return_if_fail (g_path_is_absolute (path)); g_autofree gchar *canonical_path = g_canonicalize_filename (path, "/"); g_autofree gchar *canonical_path_utf8 = g_filename_to_utf8 (canonical_path, -1, NULL, NULL, NULL); g_return_if_fail (canonical_path_utf8 != NULL); if (!g_ptr_array_find_with_equal_func (_builder->blocklist, canonical_path_utf8, g_str_equal, NULL)) g_ptr_array_add (_builder->blocklist, g_steal_pointer (&canonical_path_utf8)); } /** * mct_app_filter_builder_blocklist_flatpak_ref: * @builder: an initialised #MctAppFilterBuilder * @app_ref: a flatpak app ref to blocklist * * Add @app_ref to the blocklist of flatpak refs in the filter under * construction. The @app_ref will not be added again if it’s already been * added. * * Since: 0.2.0 */ void mct_app_filter_builder_blocklist_flatpak_ref (MctAppFilterBuilder *builder, const gchar *app_ref) { MctAppFilterBuilderReal *_builder = (MctAppFilterBuilderReal *) builder; g_return_if_fail (_builder != NULL); g_return_if_fail (_builder->blocklist != NULL); g_return_if_fail (app_ref != NULL); g_return_if_fail (is_valid_flatpak_ref (app_ref)); if (!g_ptr_array_find_with_equal_func (_builder->blocklist, app_ref, g_str_equal, NULL)) g_ptr_array_add (_builder->blocklist, g_strdup (app_ref)); } /** * mct_app_filter_builder_blocklist_content_type: * @builder: an initialised #MctAppFilterBuilder * @content_type: a content type to blocklist * * Add @content_type to the blocklist of content types in the filter under * construction. The @content_type will not be added again if it’s already been * added. * * Note that this method doesn’t handle content subtypes. For example, if * `application/xml` is added to the blocklist but `application/xspf+xml` is not, * a check for whether `application/xspf+xml` is blocklisted would return false. * * Since: 0.4.0 */ void mct_app_filter_builder_blocklist_content_type (MctAppFilterBuilder *builder, const gchar *content_type) { MctAppFilterBuilderReal *_builder = (MctAppFilterBuilderReal *) builder; g_return_if_fail (_builder != NULL); g_return_if_fail (_builder->blocklist != NULL); g_return_if_fail (content_type != NULL); g_return_if_fail (is_valid_content_type (content_type)); if (!g_ptr_array_find_with_equal_func (_builder->blocklist, content_type, g_str_equal, NULL)) g_ptr_array_add (_builder->blocklist, g_strdup (content_type)); } /** * mct_app_filter_builder_set_oars_value: * @builder: an initialised #MctAppFilterBuilder * @oars_section: name of the OARS section to set the value for * @value: value to set for the @oars_section * * Set the OARS value for the given @oars_section, indicating the intensity of * content covered by that section which the user is allowed to see (inclusive). * Any apps which have more intense content in this section should not be usable * by the user. * * Since: 0.2.0 */ void mct_app_filter_builder_set_oars_value (MctAppFilterBuilder *builder, const gchar *oars_section, MctAppFilterOarsValue value) { MctAppFilterBuilderReal *_builder = (MctAppFilterBuilderReal *) builder; g_return_if_fail (_builder != NULL); g_return_if_fail (_builder->oars != NULL); g_return_if_fail (oars_section != NULL && *oars_section != '\0'); g_hash_table_insert (_builder->oars, g_strdup (oars_section), GUINT_TO_POINTER (value)); } /** * mct_app_filter_builder_set_allow_user_installation: * @builder: an initialised #MctAppFilterBuilder * @allow_user_installation: %TRUE to allow app installation; %FALSE to * unconditionally disallow it * * Set whether the user is allowed to install to their flatpak user repository. * If this is %TRUE, app installation is still subject to the OARS values * (mct_app_filter_builder_set_oars_value()). If it is %FALSE, app installation * is unconditionally disallowed for this user. * * Since: 0.2.0 */ void mct_app_filter_builder_set_allow_user_installation (MctAppFilterBuilder *builder, gboolean allow_user_installation) { MctAppFilterBuilderReal *_builder = (MctAppFilterBuilderReal *) builder; g_return_if_fail (_builder != NULL); _builder->allow_user_installation = allow_user_installation; } /** * mct_app_filter_builder_set_allow_system_installation: * @builder: an initialised #MctAppFilterBuilder * @allow_system_installation: %TRUE to allow app installation; %FALSE to * unconditionally disallow it * * Set whether the user is allowed to install to the flatpak system repository. * If this is %TRUE, app installation is still subject to the OARS values * (mct_app_filter_builder_set_oars_value()). If it is %FALSE, app installation * is unconditionally disallowed for this user. * * Since: 0.2.0 */ void mct_app_filter_builder_set_allow_system_installation (MctAppFilterBuilder *builder, gboolean allow_system_installation) { MctAppFilterBuilderReal *_builder = (MctAppFilterBuilderReal *) builder; g_return_if_fail (_builder != NULL); _builder->allow_system_installation = allow_system_installation; } malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/libmalcontent/app-filter.h000066400000000000000000000170461505556674000266530ustar00rootroot00000000000000/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- * * Copyright © 2018-2019 Endless Mobile, Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * * Authors: * - Philip Withnall * - Andre Moreira Magalhaes */ #pragma once #include #include #include G_BEGIN_DECLS /** * MctAppFilterOarsValue: * @MCT_APP_FILTER_OARS_VALUE_UNKNOWN: Unknown value for the given * section. * @MCT_APP_FILTER_OARS_VALUE_NONE: No rating for the given section. * @MCT_APP_FILTER_OARS_VALUE_MILD: Mild rating for the given section. * @MCT_APP_FILTER_OARS_VALUE_MODERATE: Moderate rating for the given * section. * @MCT_APP_FILTER_OARS_VALUE_INTENSE: Intense rating for the given * section. * * Rating values of the intensity of a given section in an app or game. * These are directly equivalent to the values in the #AsContentRatingValue * enumeration in libappstream. * * Since: 0.2.0 */ typedef enum { MCT_APP_FILTER_OARS_VALUE_UNKNOWN, MCT_APP_FILTER_OARS_VALUE_NONE, MCT_APP_FILTER_OARS_VALUE_MILD, MCT_APP_FILTER_OARS_VALUE_MODERATE, MCT_APP_FILTER_OARS_VALUE_INTENSE, } MctAppFilterOarsValue; /** * MctAppFilter: * * #MctAppFilter is an opaque, immutable structure which contains a snapshot of * the app filtering settings for a user at a given time. This includes a list * of apps which are explicitly banned or allowed to be run by that user. * * Typically, app filter settings can only be changed by the administrator, and * are read-only for non-administrative users. The precise policy is set using * polkit. * * Since: 0.2.0 */ typedef struct _MctAppFilter MctAppFilter; GType mct_app_filter_get_type (void); #define MCT_TYPE_APP_FILTER mct_app_filter_get_type () MctAppFilter *mct_app_filter_ref (MctAppFilter *filter); void mct_app_filter_unref (MctAppFilter *filter); G_DEFINE_AUTOPTR_CLEANUP_FUNC (MctAppFilter, mct_app_filter_unref) uid_t mct_app_filter_get_user_id (MctAppFilter *filter); gboolean mct_app_filter_is_enabled (MctAppFilter *filter); gboolean mct_app_filter_is_path_allowed (MctAppFilter *filter, const gchar *path); gboolean mct_app_filter_is_flatpak_ref_allowed (MctAppFilter *filter, const gchar *app_ref); gboolean mct_app_filter_is_flatpak_app_allowed (MctAppFilter *filter, const gchar *app_id); gboolean mct_app_filter_is_appinfo_allowed (MctAppFilter *filter, GAppInfo *app_info); gboolean mct_app_filter_is_content_type_allowed (MctAppFilter *filter, const gchar *content_type); const gchar **mct_app_filter_get_oars_sections (MctAppFilter *filter); MctAppFilterOarsValue mct_app_filter_get_oars_value (MctAppFilter *filter, const gchar *oars_section); gboolean mct_app_filter_is_user_installation_allowed (MctAppFilter *filter); gboolean mct_app_filter_is_system_installation_allowed (MctAppFilter *filter); GVariant *mct_app_filter_serialize (MctAppFilter *filter); MctAppFilter *mct_app_filter_deserialize (GVariant *variant, uid_t user_id, GError **error); gboolean mct_app_filter_equal (MctAppFilter *a, MctAppFilter *b); /** * MctAppFilterBuilder: * * #MctAppFilterBuilder is a stack-allocated mutable structure used to build an * #MctAppFilter instance. Use mct_app_filter_builder_init(), various method * calls to set properties of the app filter, and then * mct_app_filter_builder_end(), to construct an #MctAppFilter. * * Since: 0.2.0 */ typedef struct { /*< private >*/ gpointer p0; gpointer p1; gboolean b0; gboolean b1; gpointer p2; gpointer p3; } MctAppFilterBuilder; GType mct_app_filter_builder_get_type (void); /** * MCT_APP_FILTER_BUILDER_INIT: * * Initialise a stack-allocated #MctAppFilterBuilder instance at declaration * time. * * This is typically used with g_auto(): * |[ * g_auto(MctAppFilterBuilder) builder = MCT_APP_FILTER_BUILDER_INIT (); * ]| * * Since: 0.2.0 */ #define MCT_APP_FILTER_BUILDER_INIT() \ { \ g_ptr_array_new_with_free_func (g_free), \ g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL), \ TRUE, \ FALSE, \ /* padding: */ \ NULL, \ NULL \ } void mct_app_filter_builder_init (MctAppFilterBuilder *builder); void mct_app_filter_builder_clear (MctAppFilterBuilder *builder); G_DEFINE_AUTO_CLEANUP_CLEAR_FUNC (MctAppFilterBuilder, mct_app_filter_builder_clear) MctAppFilterBuilder *mct_app_filter_builder_new (void); MctAppFilterBuilder *mct_app_filter_builder_copy (MctAppFilterBuilder *builder); void mct_app_filter_builder_free (MctAppFilterBuilder *builder); G_DEFINE_AUTOPTR_CLEANUP_FUNC (MctAppFilterBuilder, mct_app_filter_builder_free) MctAppFilter *mct_app_filter_builder_end (MctAppFilterBuilder *builder); void mct_app_filter_builder_blocklist_path (MctAppFilterBuilder *builder, const gchar *path); void mct_app_filter_builder_blocklist_flatpak_ref (MctAppFilterBuilder *builder, const gchar *app_ref); void mct_app_filter_builder_blocklist_content_type (MctAppFilterBuilder *builder, const gchar *content_type); void mct_app_filter_builder_set_oars_value (MctAppFilterBuilder *builder, const gchar *oars_section, MctAppFilterOarsValue value); void mct_app_filter_builder_set_allow_user_installation (MctAppFilterBuilder *builder, gboolean allow_user_installation); void mct_app_filter_builder_set_allow_system_installation (MctAppFilterBuilder *builder, gboolean allow_system_installation); #include /* FIXME: Eventually deprecate these compatibility fallbacks. */ typedef MctManagerError MctAppFilterError; #define MCT_APP_FILTER_ERROR_INVALID_USER MCT_MANAGER_ERROR_INVALID_USER #define MCT_APP_FILTER_ERROR_PERMISSION_DENIED MCT_MANAGER_ERROR_PERMISSION_DENIED #define MCT_APP_FILTER_ERROR_INVALID_DATA MCT_MANAGER_ERROR_INVALID_DATA #define MCT_APP_FILTER_ERROR_DISABLED MCT_MANAGER_ERROR_DISABLED GQuark mct_app_filter_error_quark (void); #define MCT_APP_FILTER_ERROR mct_app_filter_error_quark () G_END_DECLS malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/libmalcontent/gconstructor.h000066400000000000000000000101111505556674000273260ustar00rootroot00000000000000/* If G_HAS_CONSTRUCTORS is true then the compiler support *both* constructors and destructors, in a sane way, including e.g. on library unload. If not you're on your own. Some compilers need #pragma to handle this, which does not work with macros, so the way you need to use this is (for constructors): #ifdef G_DEFINE_CONSTRUCTOR_NEEDS_PRAGMA #pragma G_DEFINE_CONSTRUCTOR_PRAGMA_ARGS(my_constructor) #endif G_DEFINE_CONSTRUCTOR(my_constructor) static void my_constructor(void) { ... } */ #ifndef __GTK_DOC_IGNORE__ #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7) #define G_HAS_CONSTRUCTORS 1 #define G_DEFINE_CONSTRUCTOR(_func) static void __attribute__((constructor)) _func (void); #define G_DEFINE_DESTRUCTOR(_func) static void __attribute__((destructor)) _func (void); #elif defined (_MSC_VER) && (_MSC_VER >= 1500) /* Visual studio 2008 and later has _Pragma */ #include #define G_HAS_CONSTRUCTORS 1 /* We do some weird things to avoid the constructors being optimized * away on VS2015 if WholeProgramOptimization is enabled. First we * make a reference to the array from the wrapper to make sure its * references. Then we use a pragma to make sure the wrapper function * symbol is always included at the link stage. Also, the symbols * need to be extern (but not dllexport), even though they are not * really used from another object file. */ /* We need to account for differences between the mangling of symbols * for Win32 (x86) and x64 programs, as symbols on Win32 are prefixed * with an underscore but symbols on x64 are not. */ #ifdef _WIN64 #define G_MSVC_SYMBOL_PREFIX "" #else #define G_MSVC_SYMBOL_PREFIX "_" #endif #define G_DEFINE_CONSTRUCTOR(_func) G_MSVC_CTOR (_func, G_MSVC_SYMBOL_PREFIX) #define G_DEFINE_DESTRUCTOR(_func) G_MSVC_DTOR (_func, G_MSVC_SYMBOL_PREFIX) #define G_MSVC_CTOR(_func,_sym_prefix) \ static void _func(void); \ extern int (* _array ## _func)(void); \ int _func ## _wrapper(void) { _func(); g_slist_find (NULL, _array ## _func); return 0; } \ __pragma(comment(linker,"/include:" _sym_prefix # _func "_wrapper")) \ __pragma(section(".CRT$XCU",read)) \ __declspec(allocate(".CRT$XCU")) int (* _array ## _func)(void) = _func ## _wrapper; #define G_MSVC_DTOR(_func,_sym_prefix) \ static void _func(void); \ extern int (* _array ## _func)(void); \ int _func ## _constructor(void) { atexit (_func); g_slist_find (NULL, _array ## _func); return 0; } \ __pragma(comment(linker,"/include:" _sym_prefix # _func "_constructor")) \ __pragma(section(".CRT$XCU",read)) \ __declspec(allocate(".CRT$XCU")) int (* _array ## _func)(void) = _func ## _constructor; #elif defined (_MSC_VER) #define G_HAS_CONSTRUCTORS 1 /* Pre Visual studio 2008 must use #pragma section */ #define G_DEFINE_CONSTRUCTOR_NEEDS_PRAGMA 1 #define G_DEFINE_DESTRUCTOR_NEEDS_PRAGMA 1 #define G_DEFINE_CONSTRUCTOR_PRAGMA_ARGS(_func) \ section(".CRT$XCU",read) #define G_DEFINE_CONSTRUCTOR(_func) \ static void _func(void); \ static int _func ## _wrapper(void) { _func(); return 0; } \ __declspec(allocate(".CRT$XCU")) static int (*p)(void) = _func ## _wrapper; #define G_DEFINE_DESTRUCTOR_PRAGMA_ARGS(_func) \ section(".CRT$XCU",read) #define G_DEFINE_DESTRUCTOR(_func) \ static void _func(void); \ static int _func ## _constructor(void) { atexit (_func); return 0; } \ __declspec(allocate(".CRT$XCU")) static int (* _array ## _func)(void) = _func ## _constructor; #elif defined(__SUNPRO_C) /* This is not tested, but i believe it should work, based on: * http://opensource.apple.com/source/OpenSSL098/OpenSSL098-35/src/fips/fips_premain.c */ #define G_HAS_CONSTRUCTORS 1 #define G_DEFINE_CONSTRUCTOR_NEEDS_PRAGMA 1 #define G_DEFINE_DESTRUCTOR_NEEDS_PRAGMA 1 #define G_DEFINE_CONSTRUCTOR_PRAGMA_ARGS(_func) \ init(_func) #define G_DEFINE_CONSTRUCTOR(_func) \ static void _func(void); #define G_DEFINE_DESTRUCTOR_PRAGMA_ARGS(_func) \ fini(_func) #define G_DEFINE_DESTRUCTOR(_func) \ static void _func(void); #else /* constructors not supported for this compiler */ #endif #endif /* __GTK_DOC_IGNORE__ */ malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/libmalcontent/init.c000066400000000000000000000026321505556674000255410ustar00rootroot00000000000000/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- * * Copyright © 2020 Endless Mobile, Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * * Authors: * - Philip Withnall */ #include "config.h" #include #include "gconstructor.h" static void mct_init (void) { bindtextdomain (GETTEXT_PACKAGE, PACKAGE_LOCALE_DIR); bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8"); } #ifdef G_HAS_CONSTRUCTORS #ifdef G_DEFINE_CONSTRUCTOR_NEEDS_PRAGMA #pragma G_DEFINE_CONSTRUCTOR_PRAGMA_ARGS(mct_init_ctor) #endif G_DEFINE_CONSTRUCTOR(mct_init_ctor) static void mct_init_ctor (void) { mct_init (); } #else #error Your platform/compiler is missing constructor support #endif malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/libmalcontent/malcontent.h000066400000000000000000000020711505556674000267440ustar00rootroot00000000000000/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- * * Copyright © 2019 Endless Mobile, Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * * Authors: * - Philip Withnall */ #pragma once #include #include #include #include malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/libmalcontent/manager.c000066400000000000000000001246051505556674000262150ustar00rootroot00000000000000/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- * * Copyright © 2019 Endless Mobile, Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * * Authors: * - Philip Withnall */ #include "config.h" #include #include #include #include #include #include #include #include "libmalcontent/app-filter-private.h" #include "libmalcontent/session-limits-private.h" G_DEFINE_QUARK (MctManagerError, mct_manager_error) /** * MctManager: * * #MctManager is a top-level management object which is used to query and * monitor #MctAppFilters for different users. * * Since: 0.3.0 */ struct _MctManager { GObject parent_instance; GDBusConnection *connection; /* (owned) */ guint user_changed_id; }; G_DEFINE_TYPE (MctManager, mct_manager, G_TYPE_OBJECT) typedef enum { PROP_CONNECTION = 1, } MctManagerProperty; static GParamSpec *props[PROP_CONNECTION + 1] = { NULL, }; static void mct_manager_init (MctManager *self) { /* Nothing to do here. */ } static void mct_manager_get_property (GObject *object, guint property_id, GValue *value, GParamSpec *spec) { MctManager *self = MCT_MANAGER (object); switch ((MctManagerProperty) property_id) { case PROP_CONNECTION: g_value_set_object (value, self->connection); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, spec); break; } } static void mct_manager_set_property (GObject *object, guint property_id, const GValue *value, GParamSpec *spec) { MctManager *self = MCT_MANAGER (object); switch ((MctManagerProperty) property_id) { case PROP_CONNECTION: /* Construct-only. May not be %NULL. */ g_assert (self->connection == NULL); self->connection = g_value_dup_object (value); g_assert (self->connection != NULL); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, spec); break; } } static void _mct_manager_user_changed_cb (GDBusConnection *connection, const gchar *sender_name, const gchar *object_path, const gchar *interface_name, const gchar *signal_name, GVariant *parameters, gpointer user_data); static void mct_manager_constructed (GObject *object) { MctManager *self = MCT_MANAGER (object); /* Chain up. */ G_OBJECT_CLASS (mct_manager_parent_class)->constructed (object); /* Connect to notifications from AccountsService. */ g_assert (self->connection != NULL); self->user_changed_id = g_dbus_connection_signal_subscribe (self->connection, "org.freedesktop.Accounts", /* sender */ "org.freedesktop.Accounts.User", /* interface name */ "Changed", /* signal name */ NULL, /* object path */ NULL, /* arg0 */ G_DBUS_SIGNAL_FLAGS_NONE, _mct_manager_user_changed_cb, self, NULL); } static void mct_manager_dispose (GObject *object) { MctManager *self = MCT_MANAGER (object); if (self->user_changed_id != 0 && self->connection != NULL) { g_dbus_connection_signal_unsubscribe (self->connection, self->user_changed_id); self->user_changed_id = 0; } g_clear_object (&self->connection); G_OBJECT_CLASS (mct_manager_parent_class)->dispose (object); } static void mct_manager_class_init (MctManagerClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); object_class->constructed = mct_manager_constructed; object_class->dispose = mct_manager_dispose; object_class->get_property = mct_manager_get_property; object_class->set_property = mct_manager_set_property; /** * MctManager:connection: (not nullable) * * A connection to the system bus, where accounts-service runs. It’s provided * mostly for testing purposes, or to allow an existing connection to be * re-used. * * Since: 0.3.0 */ props[PROP_CONNECTION] = g_param_spec_object ("connection", "D-Bus Connection", "A connection to the system bus.", G_TYPE_DBUS_CONNECTION, G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS); g_object_class_install_properties (object_class, G_N_ELEMENTS (props), props); /** * MctManager::app-filter-changed: * @self: a #MctManager * @user_id: UID of the user whose app filter has changed * * Emitted when the app filter stored for a user changes. * The new app filter for the user should be requested again from * the #MctManager instance. * * Since: 0.3.0 */ g_signal_new ("app-filter-changed", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST, 0, NULL, NULL, NULL, G_TYPE_NONE, 1, G_TYPE_UINT64); } /** * mct_manager_new: * @connection: (transfer none): a #GDBusConnection to use * * Create a new #MctManager. * * Returns: (transfer full): a new #MctManager * Since: 0.3.0 */ MctManager * mct_manager_new (GDBusConnection *connection) { g_return_val_if_fail (G_IS_DBUS_CONNECTION (connection), NULL); return g_object_new (MCT_TYPE_MANAGER, "connection", connection, NULL); } static void _mct_manager_user_changed_cb (GDBusConnection *connection, const gchar *sender_name, const gchar *object_path, const gchar *interface_name, const gchar *signal_name, GVariant *parameters, gpointer user_data) { MctManager *manager = MCT_MANAGER (user_data); g_autoptr(GError) local_error = NULL; const gchar *uid_str; guint64 uid; g_assert (g_str_equal (interface_name, "org.freedesktop.Accounts.User")); g_assert (g_str_equal (signal_name, "Changed")); /* Extract the UID from the object path. This is a bit hacky, but probably * better than depending on libaccountsservice just for this. */ if (!g_str_has_prefix (object_path, "/org/freedesktop/Accounts/User")) return; uid_str = object_path + strlen ("/org/freedesktop/Accounts/User"); if (!g_ascii_string_to_unsigned (uid_str, 10, 0, G_MAXUINT64, &uid, &local_error)) { g_warning ("Error converting object path ‘%s’ to user ID: %s", object_path, local_error->message); g_clear_error (&local_error); } g_signal_emit_by_name (manager, "app-filter-changed", uid); } /* Check if @error is a D-Bus remote error matching @expected_error_name. */ static gboolean bus_remote_error_matches (const GError *error, const gchar *expected_error_name) { g_autofree gchar *error_name = NULL; if (!g_dbus_error_is_remote_error (error)) return FALSE; error_name = g_dbus_error_get_remote_error (error); return g_str_equal (error_name, expected_error_name); } /* Convert a #GDBusError into a #MctManagerError. */ static GError * bus_error_to_manager_error (const GError *bus_error, uid_t user_id) { if (g_error_matches (bus_error, G_DBUS_ERROR, G_DBUS_ERROR_ACCESS_DENIED) || bus_remote_error_matches (bus_error, "org.freedesktop.Accounts.Error.PermissionDenied")) return g_error_new (MCT_MANAGER_ERROR, MCT_MANAGER_ERROR_PERMISSION_DENIED, _("Not allowed to query parental controls data for user %u"), (guint) user_id); else if (g_error_matches (bus_error, G_DBUS_ERROR, G_DBUS_ERROR_UNKNOWN_METHOD) || bus_remote_error_matches (bus_error, "org.freedesktop.Accounts.Error.Failed")) return g_error_new (MCT_MANAGER_ERROR, MCT_MANAGER_ERROR_INVALID_USER, _("User %u does not exist"), (guint) user_id); else if (g_error_matches (bus_error, G_DBUS_ERROR, G_DBUS_ERROR_SERVICE_UNKNOWN) || g_error_matches (bus_error, G_DBUS_ERROR, G_DBUS_ERROR_NAME_HAS_NO_OWNER)) /* If accountsservice is not available on the system bus, then the * com.endlessm.ParentalControls.AppFilter extension interface * certainly can't be available. */ return g_error_new_literal (MCT_MANAGER_ERROR, MCT_MANAGER_ERROR_DISABLED, _("System accounts service not available")); else return g_error_copy (bus_error); } /* Find the object path for the given @user_id on the accountsservice D-Bus * interface, by calling its FindUserById() method. This is a synchronous, * blocking function. */ static gchar * accounts_find_user_by_id (GDBusConnection *connection, uid_t user_id, gboolean allow_interactive_authorization, GCancellable *cancellable, GError **error) { g_autofree gchar *object_path = NULL; g_autoptr(GVariant) result_variant = NULL; g_autoptr(GError) local_error = NULL; result_variant = g_dbus_connection_call_sync (connection, "org.freedesktop.Accounts", "/org/freedesktop/Accounts", "org.freedesktop.Accounts", "FindUserById", g_variant_new ("(x)", (gint64) user_id), G_VARIANT_TYPE ("(o)"), allow_interactive_authorization ? G_DBUS_CALL_FLAGS_ALLOW_INTERACTIVE_AUTHORIZATION : G_DBUS_CALL_FLAGS_NONE, -1, /* timeout, ms */ cancellable, &local_error); if (local_error != NULL) { g_autoptr(GError) app_filter_error = bus_error_to_manager_error (local_error, user_id); g_propagate_error (error, g_steal_pointer (&app_filter_error)); return NULL; } g_variant_get (result_variant, "(o)", &object_path); return g_steal_pointer (&object_path); } /** * mct_manager_get_app_filter: * @self: a #MctManager * @user_id: ID of the user to query, typically coming from getuid() * @flags: flags to affect the behaviour of the call * @cancellable: (nullable): a #GCancellable, or %NULL * @error: return location for a #GError, or %NULL * * Synchronous version of mct_manager_get_app_filter_async(). * * Returns: (transfer full): app filter for the queried user * Since: 0.3.0 */ MctAppFilter * mct_manager_get_app_filter (MctManager *self, uid_t user_id, MctManagerGetValueFlags flags, GCancellable *cancellable, GError **error) { g_autofree gchar *object_path = NULL; g_autoptr(GVariant) result_variant = NULL; g_autoptr(GVariant) properties = NULL; g_autoptr(GError) local_error = NULL; g_return_val_if_fail (MCT_IS_MANAGER (self), NULL); g_return_val_if_fail (cancellable == NULL || G_IS_CANCELLABLE (cancellable), NULL); g_return_val_if_fail (error == NULL || *error == NULL, NULL); object_path = accounts_find_user_by_id (self->connection, user_id, (flags & MCT_MANAGER_GET_VALUE_FLAGS_INTERACTIVE), cancellable, error); if (object_path == NULL) return NULL; result_variant = g_dbus_connection_call_sync (self->connection, "org.freedesktop.Accounts", object_path, "org.freedesktop.DBus.Properties", "GetAll", g_variant_new ("(s)", "com.endlessm.ParentalControls.AppFilter"), G_VARIANT_TYPE ("(a{sv})"), (flags & MCT_MANAGER_GET_VALUE_FLAGS_INTERACTIVE) ? G_DBUS_CALL_FLAGS_ALLOW_INTERACTIVE_AUTHORIZATION : G_DBUS_CALL_FLAGS_NONE, -1, /* timeout, ms */ cancellable, &local_error); if (local_error != NULL) { g_autoptr(GError) manager_error = NULL; if (g_error_matches (local_error, G_DBUS_ERROR, G_DBUS_ERROR_INVALID_ARGS)) { /* o.fd.D.GetAll() will return InvalidArgs errors if * accountsservice doesn’t have the com.endlessm.ParentalControls.AppFilter * extension interface installed. */ manager_error = g_error_new_literal (MCT_MANAGER_ERROR, MCT_MANAGER_ERROR_DISABLED, _("App filtering is globally disabled")); } else { manager_error = bus_error_to_manager_error (local_error, user_id); } g_propagate_error (error, g_steal_pointer (&manager_error)); return NULL; } /* Extract the properties we care about. They may be silently omitted from the * results if we don’t have permission to access them. */ properties = g_variant_get_child_value (result_variant, 0); if (!g_variant_lookup (properties, "AppFilter", "(b^as)", NULL, NULL)) { g_set_error (error, MCT_MANAGER_ERROR, MCT_MANAGER_ERROR_PERMISSION_DENIED, _("Not allowed to query parental controls data for user %u"), (guint) user_id); return NULL; } return mct_app_filter_deserialize (properties, user_id, error); } static void get_app_filter_thread_cb (GTask *task, gpointer source_object, gpointer task_data, GCancellable *cancellable); typedef struct { uid_t user_id; MctManagerGetValueFlags flags; } GetAppFilterData; static void get_app_filter_data_free (GetAppFilterData *data) { g_free (data); } G_DEFINE_AUTOPTR_CLEANUP_FUNC (GetAppFilterData, get_app_filter_data_free) /** * mct_manager_get_app_filter_async: * @self: a #MctManager * @user_id: ID of the user to query, typically coming from getuid() * @flags: flags to affect the behaviour of the call * @cancellable: (nullable): a #GCancellable, or %NULL * @callback: a #GAsyncReadyCallback * @user_data: user data to pass to @callback * * Asynchronously get a snapshot of the app filter settings for the given * @user_id. * * On failure, an #MctManagerError, a #GDBusError or a #GIOError will be * returned. * * Since: 0.3.0 */ void mct_manager_get_app_filter_async (MctManager *self, uid_t user_id, MctManagerGetValueFlags flags, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data) { g_autoptr(GTask) task = NULL; g_autoptr(GetAppFilterData) data = NULL; g_return_if_fail (MCT_IS_MANAGER (self)); g_return_if_fail (cancellable == NULL || G_IS_CANCELLABLE (cancellable)); task = g_task_new (self, cancellable, callback, user_data); g_task_set_source_tag (task, mct_manager_get_app_filter_async); data = g_new0 (GetAppFilterData, 1); data->user_id = user_id; data->flags = flags; g_task_set_task_data (task, g_steal_pointer (&data), (GDestroyNotify) get_app_filter_data_free); g_task_run_in_thread (task, get_app_filter_thread_cb); } static void get_app_filter_thread_cb (GTask *task, gpointer source_object, gpointer task_data, GCancellable *cancellable) { g_autoptr(MctAppFilter) filter = NULL; MctManager *manager = MCT_MANAGER (source_object); GetAppFilterData *data = task_data; g_autoptr(GError) local_error = NULL; filter = mct_manager_get_app_filter (manager, data->user_id, data->flags, cancellable, &local_error); if (local_error != NULL) g_task_return_error (task, g_steal_pointer (&local_error)); else g_task_return_pointer (task, g_steal_pointer (&filter), (GDestroyNotify) mct_app_filter_unref); } /** * mct_manager_get_app_filter_finish: * @self: a #MctManager * @result: a #GAsyncResult * @error: return location for a #GError, or %NULL * * Finish an asynchronous operation to get the app filter for a user, started * with mct_manager_get_app_filter_async(). * * Returns: (transfer full): app filter for the queried user * Since: 0.3.0 */ MctAppFilter * mct_manager_get_app_filter_finish (MctManager *self, GAsyncResult *result, GError **error) { g_return_val_if_fail (MCT_IS_MANAGER (self), NULL); g_return_val_if_fail (g_task_is_valid (result, self), NULL); g_return_val_if_fail (error == NULL || *error == NULL, NULL); return g_task_propagate_pointer (G_TASK (result), error); } /** * mct_manager_set_app_filter: * @self: a #MctManager * @user_id: ID of the user to set the filter for, typically coming from getuid() * @app_filter: (transfer none): the app filter to set for the user * @flags: flags to affect the behaviour of the call * @cancellable: (nullable): a #GCancellable, or %NULL * @error: return location for a #GError, or %NULL * * Synchronous version of mct_manager_set_app_filter_async(). * * Returns: %TRUE on success, %FALSE otherwise * Since: 0.3.0 */ gboolean mct_manager_set_app_filter (MctManager *self, uid_t user_id, MctAppFilter *app_filter, MctManagerSetValueFlags flags, GCancellable *cancellable, GError **error) { g_autofree gchar *object_path = NULL; g_autoptr(GVariant) properties_variant = NULL; g_autoptr(GVariant) properties_value = NULL; const gchar *properties_key = NULL; GVariantIter iter; g_autoptr(GError) local_error = NULL; g_return_val_if_fail (MCT_IS_MANAGER (self), FALSE); g_return_val_if_fail (app_filter != NULL, FALSE); g_return_val_if_fail (app_filter->ref_count >= 1, FALSE); g_return_val_if_fail (cancellable == NULL || G_IS_CANCELLABLE (cancellable), FALSE); g_return_val_if_fail (error == NULL || *error == NULL, FALSE); object_path = accounts_find_user_by_id (self->connection, user_id, (flags & MCT_MANAGER_SET_VALUE_FLAGS_INTERACTIVE), cancellable, error); if (object_path == NULL) return FALSE; properties_variant = mct_app_filter_serialize (app_filter); g_variant_iter_init (&iter, properties_variant); while (g_variant_iter_loop (&iter, "{&sv}", &properties_key, &properties_value)) { g_autoptr(GVariant) result_variant = NULL; result_variant = g_dbus_connection_call_sync (self->connection, "org.freedesktop.Accounts", object_path, "org.freedesktop.DBus.Properties", "Set", g_variant_new ("(ssv)", "com.endlessm.ParentalControls.AppFilter", properties_key, properties_value), G_VARIANT_TYPE ("()"), (flags & MCT_MANAGER_SET_VALUE_FLAGS_INTERACTIVE) ? G_DBUS_CALL_FLAGS_ALLOW_INTERACTIVE_AUTHORIZATION : G_DBUS_CALL_FLAGS_NONE, -1, /* timeout, ms */ cancellable, &local_error); if (local_error != NULL) { g_propagate_error (error, bus_error_to_manager_error (local_error, user_id)); return FALSE; } } return TRUE; } static void set_app_filter_thread_cb (GTask *task, gpointer source_object, gpointer task_data, GCancellable *cancellable); typedef struct { uid_t user_id; MctAppFilter *app_filter; /* (owned) */ MctManagerSetValueFlags flags; } SetAppFilterData; static void set_app_filter_data_free (SetAppFilterData *data) { mct_app_filter_unref (data->app_filter); g_free (data); } G_DEFINE_AUTOPTR_CLEANUP_FUNC (SetAppFilterData, set_app_filter_data_free) /** * mct_manager_set_app_filter_async: * @self: a #MctManager * @user_id: ID of the user to set the filter for, typically coming from getuid() * @app_filter: (transfer none): the app filter to set for the user * @flags: flags to affect the behaviour of the call * @cancellable: (nullable): a #GCancellable, or %NULL * @callback: a #GAsyncReadyCallback * @user_data: user data to pass to @callback * * Asynchronously set the app filter settings for the given @user_id to the * given @app_filter instance. This will set all fields of the app filter. * * On failure, an #MctManagerError, a #GDBusError or a #GIOError will be * returned. The user’s app filter settings will be left in an undefined state. * * Since: 0.3.0 */ void mct_manager_set_app_filter_async (MctManager *self, uid_t user_id, MctAppFilter *app_filter, MctManagerSetValueFlags flags, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data) { g_autoptr(GTask) task = NULL; g_autoptr(SetAppFilterData) data = NULL; g_return_if_fail (MCT_IS_MANAGER (self)); g_return_if_fail (app_filter != NULL); g_return_if_fail (app_filter->ref_count >= 1); g_return_if_fail (cancellable == NULL || G_IS_CANCELLABLE (cancellable)); task = g_task_new (self, cancellable, callback, user_data); g_task_set_source_tag (task, mct_manager_set_app_filter_async); data = g_new0 (SetAppFilterData, 1); data->user_id = user_id; data->app_filter = mct_app_filter_ref (app_filter); data->flags = flags; g_task_set_task_data (task, g_steal_pointer (&data), (GDestroyNotify) set_app_filter_data_free); g_task_run_in_thread (task, set_app_filter_thread_cb); } static void set_app_filter_thread_cb (GTask *task, gpointer source_object, gpointer task_data, GCancellable *cancellable) { gboolean success; MctManager *manager = MCT_MANAGER (source_object); SetAppFilterData *data = task_data; g_autoptr(GError) local_error = NULL; success = mct_manager_set_app_filter (manager, data->user_id, data->app_filter, data->flags, cancellable, &local_error); if (local_error != NULL) g_task_return_error (task, g_steal_pointer (&local_error)); else g_task_return_boolean (task, success); } /** * mct_manager_set_app_filter_finish: * @self: a #MctManager * @result: a #GAsyncResult * @error: return location for a #GError, or %NULL * * Finish an asynchronous operation to set the app filter for a user, started * with mct_manager_set_app_filter_async(). * * Returns: %TRUE on success, %FALSE otherwise * Since: 0.3.0 */ gboolean mct_manager_set_app_filter_finish (MctManager *self, GAsyncResult *result, GError **error) { g_return_val_if_fail (MCT_IS_MANAGER (self), FALSE); g_return_val_if_fail (g_task_is_valid (result, self), FALSE); g_return_val_if_fail (error == NULL || *error == NULL, FALSE); return g_task_propagate_boolean (G_TASK (result), error); } /** * mct_manager_get_session_limits: * @self: a #MctManager * @user_id: ID of the user to query, typically coming from getuid() * @flags: flags to affect the behaviour of the call * @cancellable: (nullable): a #GCancellable, or %NULL * @error: return location for a #GError, or %NULL * * Synchronous version of mct_manager_get_session_limits_async(). * * Returns: (transfer full): session limits for the queried user * Since: 0.5.0 */ MctSessionLimits * mct_manager_get_session_limits (MctManager *self, uid_t user_id, MctManagerGetValueFlags flags, GCancellable *cancellable, GError **error) { g_autofree gchar *object_path = NULL; g_autoptr(GVariant) result_variant = NULL; g_autoptr(GVariant) properties = NULL; g_autoptr(GError) local_error = NULL; g_return_val_if_fail (MCT_IS_MANAGER (self), NULL); g_return_val_if_fail (cancellable == NULL || G_IS_CANCELLABLE (cancellable), NULL); g_return_val_if_fail (error == NULL || *error == NULL, NULL); object_path = accounts_find_user_by_id (self->connection, user_id, (flags & MCT_MANAGER_GET_VALUE_FLAGS_INTERACTIVE), cancellable, error); if (object_path == NULL) return NULL; result_variant = g_dbus_connection_call_sync (self->connection, "org.freedesktop.Accounts", object_path, "org.freedesktop.DBus.Properties", "GetAll", g_variant_new ("(s)", "com.endlessm.ParentalControls.SessionLimits"), G_VARIANT_TYPE ("(a{sv})"), (flags & MCT_MANAGER_GET_VALUE_FLAGS_INTERACTIVE) ? G_DBUS_CALL_FLAGS_ALLOW_INTERACTIVE_AUTHORIZATION : G_DBUS_CALL_FLAGS_NONE, -1, /* timeout, ms */ cancellable, &local_error); if (local_error != NULL) { g_autoptr(GError) manager_error = NULL; if (g_error_matches (local_error, G_DBUS_ERROR, G_DBUS_ERROR_INVALID_ARGS)) { /* o.fd.D.GetAll() will return InvalidArgs errors if * accountsservice doesn’t have the com.endlessm.ParentalControls.SessionLimits * extension interface installed. */ manager_error = g_error_new_literal (MCT_MANAGER_ERROR, MCT_MANAGER_ERROR_DISABLED, _("Session limits are globally disabled")); } else { manager_error = bus_error_to_manager_error (local_error, user_id); } g_propagate_error (error, g_steal_pointer (&manager_error)); return NULL; } /* Extract the properties we care about. They may be silently omitted from the * results if we don’t have permission to access them. */ properties = g_variant_get_child_value (result_variant, 0); if (!g_variant_lookup (properties, "LimitType", "u", NULL)) { g_set_error (error, MCT_MANAGER_ERROR, MCT_MANAGER_ERROR_PERMISSION_DENIED, _("Not allowed to query parental controls data for user %u"), (guint) user_id); return NULL; } return mct_session_limits_deserialize (properties, user_id, error); } static void get_session_limits_thread_cb (GTask *task, gpointer source_object, gpointer task_data, GCancellable *cancellable); typedef struct { uid_t user_id; MctManagerGetValueFlags flags; } GetSessionLimitsData; static void get_session_limits_data_free (GetSessionLimitsData *data) { g_free (data); } G_DEFINE_AUTOPTR_CLEANUP_FUNC (GetSessionLimitsData, get_session_limits_data_free) /** * mct_manager_get_session_limits_async: * @self: a #MctManager * @user_id: ID of the user to query, typically coming from getuid() * @flags: flags to affect the behaviour of the call * @cancellable: (nullable): a #GCancellable, or %NULL * @callback: a #GAsyncReadyCallback * @user_data: user data to pass to @callback * * Asynchronously get a snapshot of the session limit settings for the given * @user_id. * * On failure, an #MctManagerError, a #GDBusError or a #GIOError will be * returned via mct_manager_get_session_limits_finish(). * * Since: 0.5.0 */ void mct_manager_get_session_limits_async (MctManager *self, uid_t user_id, MctManagerGetValueFlags flags, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data) { g_autoptr(GTask) task = NULL; g_autoptr(GetSessionLimitsData) data = NULL; g_return_if_fail (MCT_IS_MANAGER (self)); g_return_if_fail (cancellable == NULL || G_IS_CANCELLABLE (cancellable)); task = g_task_new (self, cancellable, callback, user_data); g_task_set_source_tag (task, mct_manager_get_session_limits_async); data = g_new0 (GetSessionLimitsData, 1); data->user_id = user_id; data->flags = flags; g_task_set_task_data (task, g_steal_pointer (&data), (GDestroyNotify) get_session_limits_data_free); g_task_run_in_thread (task, get_session_limits_thread_cb); } static void get_session_limits_thread_cb (GTask *task, gpointer source_object, gpointer task_data, GCancellable *cancellable) { g_autoptr(MctSessionLimits) limits = NULL; MctManager *manager = MCT_MANAGER (source_object); GetSessionLimitsData *data = task_data; g_autoptr(GError) local_error = NULL; limits = mct_manager_get_session_limits (manager, data->user_id, data->flags, cancellable, &local_error); if (local_error != NULL) g_task_return_error (task, g_steal_pointer (&local_error)); else g_task_return_pointer (task, g_steal_pointer (&limits), (GDestroyNotify) mct_session_limits_unref); } /** * mct_manager_get_session_limits_finish: * @self: a #MctManager * @result: a #GAsyncResult * @error: return location for a #GError, or %NULL * * Finish an asynchronous operation to get the session limits for a user, * started with mct_manager_get_session_limits_async(). * * Returns: (transfer full): session limits for the queried user * Since: 0.5.0 */ MctSessionLimits * mct_manager_get_session_limits_finish (MctManager *self, GAsyncResult *result, GError **error) { g_return_val_if_fail (MCT_IS_MANAGER (self), NULL); g_return_val_if_fail (g_task_is_valid (result, self), NULL); g_return_val_if_fail (error == NULL || *error == NULL, NULL); return g_task_propagate_pointer (G_TASK (result), error); } /** * mct_manager_set_session_limits: * @self: a #MctManager * @user_id: ID of the user to set the limits for, typically coming from getuid() * @session_limits: (transfer none): the session limits to set for the user * @flags: flags to affect the behaviour of the call * @cancellable: (nullable): a #GCancellable, or %NULL * @error: return location for a #GError, or %NULL * * Synchronous version of mct_manager_set_session_limits_async(). * * Returns: %TRUE on success, %FALSE otherwise * Since: 0.5.0 */ gboolean mct_manager_set_session_limits (MctManager *self, uid_t user_id, MctSessionLimits *session_limits, MctManagerSetValueFlags flags, GCancellable *cancellable, GError **error) { g_autofree gchar *object_path = NULL; g_autoptr(GVariant) limit_type_variant = NULL; g_autoptr(GVariant) limit_type_result_variant = NULL; g_autoptr(GVariant) properties_variant = NULL; g_autoptr(GVariant) properties_value = NULL; const gchar *properties_key = NULL; GVariantIter iter; g_autoptr(GError) local_error = NULL; g_return_val_if_fail (MCT_IS_MANAGER (self), FALSE); g_return_val_if_fail (session_limits != NULL, FALSE); g_return_val_if_fail (session_limits->ref_count >= 1, FALSE); g_return_val_if_fail (cancellable == NULL || G_IS_CANCELLABLE (cancellable), FALSE); g_return_val_if_fail (error == NULL || *error == NULL, FALSE); object_path = accounts_find_user_by_id (self->connection, user_id, (flags & MCT_MANAGER_SET_VALUE_FLAGS_INTERACTIVE), cancellable, error); if (object_path == NULL) return FALSE; properties_variant = mct_session_limits_serialize (session_limits); g_variant_iter_init (&iter, properties_variant); while (g_variant_iter_loop (&iter, "{&sv}", &properties_key, &properties_value)) { g_autoptr(GVariant) result_variant = NULL; /* Change the limit type last, so all the details of the new limit are * correct by the time it’s changed over. */ if (g_str_equal (properties_key, "LimitType")) { limit_type_variant = g_steal_pointer (&properties_value); continue; } result_variant = g_dbus_connection_call_sync (self->connection, "org.freedesktop.Accounts", object_path, "org.freedesktop.DBus.Properties", "Set", g_variant_new ("(ssv)", "com.endlessm.ParentalControls.SessionLimits", properties_key, properties_value), G_VARIANT_TYPE ("()"), (flags & MCT_MANAGER_SET_VALUE_FLAGS_INTERACTIVE) ? G_DBUS_CALL_FLAGS_ALLOW_INTERACTIVE_AUTHORIZATION : G_DBUS_CALL_FLAGS_NONE, -1, /* timeout, ms */ cancellable, &local_error); if (local_error != NULL) { g_propagate_error (error, bus_error_to_manager_error (local_error, user_id)); return FALSE; } } limit_type_result_variant = g_dbus_connection_call_sync (self->connection, "org.freedesktop.Accounts", object_path, "org.freedesktop.DBus.Properties", "Set", g_variant_new ("(ssv)", "com.endlessm.ParentalControls.SessionLimits", "LimitType", limit_type_variant), G_VARIANT_TYPE ("()"), (flags & MCT_MANAGER_SET_VALUE_FLAGS_INTERACTIVE) ? G_DBUS_CALL_FLAGS_ALLOW_INTERACTIVE_AUTHORIZATION : G_DBUS_CALL_FLAGS_NONE, -1, /* timeout, ms */ cancellable, &local_error); if (local_error != NULL) { g_propagate_error (error, bus_error_to_manager_error (local_error, user_id)); return FALSE; } return TRUE; } static void set_session_limits_thread_cb (GTask *task, gpointer source_object, gpointer task_data, GCancellable *cancellable); typedef struct { uid_t user_id; MctSessionLimits *session_limits; /* (owned) */ MctManagerSetValueFlags flags; } SetSessionLimitsData; static void set_session_limits_data_free (SetSessionLimitsData *data) { mct_session_limits_unref (data->session_limits); g_free (data); } G_DEFINE_AUTOPTR_CLEANUP_FUNC (SetSessionLimitsData, set_session_limits_data_free) /** * mct_manager_set_session_limits_async: * @self: a #MctManager * @user_id: ID of the user to set the limits for, typically coming from getuid() * @session_limits: (transfer none): the session limits to set for the user * @flags: flags to affect the behaviour of the call * @cancellable: (nullable): a #GCancellable, or %NULL * @callback: a #GAsyncReadyCallback * @user_data: user data to pass to @callback * * Asynchronously set the session limits settings for the given @user_id to the * given @session_limits instance. * * On failure, an #MctManagerError, a #GDBusError or a #GIOError will be * returned via mct_manager_set_session_limits_finish(). The user’s session * limits settings will be left in an undefined state. * * Since: 0.5.0 */ void mct_manager_set_session_limits_async (MctManager *self, uid_t user_id, MctSessionLimits *session_limits, MctManagerSetValueFlags flags, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data) { g_autoptr(GTask) task = NULL; g_autoptr(SetSessionLimitsData) data = NULL; g_return_if_fail (MCT_IS_MANAGER (self)); g_return_if_fail (session_limits != NULL); g_return_if_fail (session_limits->ref_count >= 1); g_return_if_fail (cancellable == NULL || G_IS_CANCELLABLE (cancellable)); task = g_task_new (self, cancellable, callback, user_data); g_task_set_source_tag (task, mct_manager_set_session_limits_async); data = g_new0 (SetSessionLimitsData, 1); data->user_id = user_id; data->session_limits = mct_session_limits_ref (session_limits); data->flags = flags; g_task_set_task_data (task, g_steal_pointer (&data), (GDestroyNotify) set_session_limits_data_free); g_task_run_in_thread (task, set_session_limits_thread_cb); } static void set_session_limits_thread_cb (GTask *task, gpointer source_object, gpointer task_data, GCancellable *cancellable) { gboolean success; MctManager *manager = MCT_MANAGER (source_object); SetSessionLimitsData *data = task_data; g_autoptr(GError) local_error = NULL; success = mct_manager_set_session_limits (manager, data->user_id, data->session_limits, data->flags, cancellable, &local_error); if (local_error != NULL) g_task_return_error (task, g_steal_pointer (&local_error)); else g_task_return_boolean (task, success); } /** * mct_manager_set_session_limits_finish: * @self: a #MctManager * @result: a #GAsyncResult * @error: return location for a #GError, or %NULL * * Finish an asynchronous operation to set the session limits for a user, * started with mct_manager_set_session_limits_async(). * * Returns: %TRUE on success, %FALSE otherwise * Since: 0.5.0 */ gboolean mct_manager_set_session_limits_finish (MctManager *self, GAsyncResult *result, GError **error) { g_return_val_if_fail (MCT_IS_MANAGER (self), FALSE); g_return_val_if_fail (g_task_is_valid (result, self), FALSE); g_return_val_if_fail (error == NULL || *error == NULL, FALSE); return g_task_propagate_boolean (G_TASK (result), error); } malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/libmalcontent/manager.h000066400000000000000000000210441505556674000262130ustar00rootroot00000000000000/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- * * Copyright © 2019 Endless Mobile, Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * * Authors: * - Philip Withnall */ #pragma once #include #include #include G_BEGIN_DECLS /** * MctManagerGetValueFlags: * @MCT_MANAGER_GET_VALUE_FLAGS_NONE: No flags set. * @MCT_MANAGER_GET_VALUE_FLAGS_INTERACTIVE: Allow interactive polkit dialogs * when requesting authorization. * * Flags to control the behaviour of getter functions like * mct_manager_get_app_filter() and mct_manager_get_app_filter_async(). * * Since: 0.5.0 */ typedef enum { MCT_MANAGER_GET_VALUE_FLAGS_NONE = 0, MCT_MANAGER_GET_VALUE_FLAGS_INTERACTIVE = (1 << 0), } MctManagerGetValueFlags; /* FIXME: Eventually deprecate these compatibility fallbacks. */ typedef MctManagerGetValueFlags MctGetAppFilterFlags; #define MCT_GET_APP_FILTER_FLAGS_NONE MCT_MANAGER_GET_VALUE_FLAGS_NONE #define MCT_GET_APP_FILTER_FLAGS_INTERACTIVE MCT_MANAGER_GET_VALUE_FLAGS_INTERACTIVE /** * MctManagerSetValueFlags: * @MCT_MANAGER_SET_VALUE_FLAGS_NONE: No flags set. * @MCT_MANAGER_SET_VALUE_FLAGS_INTERACTIVE: Allow interactive polkit dialogs * when requesting authorization. * * Flags to control the behaviour of setter functions like * mct_manager_set_app_filter() and mct_manager_set_app_filter_async(). * * Since: 0.5.0 */ typedef enum { MCT_MANAGER_SET_VALUE_FLAGS_NONE = 0, MCT_MANAGER_SET_VALUE_FLAGS_INTERACTIVE = (1 << 0), } MctManagerSetValueFlags; /* FIXME: Eventually deprecate these compatibility fallbacks. */ typedef MctManagerSetValueFlags MctSetAppFilterFlags; #define MCT_SET_APP_FILTER_FLAGS_NONE MCT_MANAGER_SET_VALUE_FLAGS_NONE #define MCT_SET_APP_FILTER_FLAGS_INTERACTIVE MCT_MANAGER_SET_VALUE_FLAGS_INTERACTIVE /** * MctManagerError: * @MCT_MANAGER_ERROR_INVALID_USER: Given user ID doesn’t exist * @MCT_MANAGER_ERROR_PERMISSION_DENIED: Not authorized to query properties of * the given user * @MCT_MANAGER_ERROR_INVALID_DATA: The data stored in a property of the given * user is inconsistent or invalid * @MCT_MANAGER_ERROR_DISABLED: Parental controls are disabled for all users * * Errors relating to get/set operations on an #MctManager instance. * * Since: 0.5.0 */ typedef enum { MCT_MANAGER_ERROR_INVALID_USER, MCT_MANAGER_ERROR_PERMISSION_DENIED, MCT_MANAGER_ERROR_INVALID_DATA, MCT_MANAGER_ERROR_DISABLED, } MctManagerError; GQuark mct_manager_error_quark (void); #define MCT_MANAGER_ERROR mct_manager_error_quark () #include #include #define MCT_TYPE_MANAGER mct_manager_get_type () G_DECLARE_FINAL_TYPE (MctManager, mct_manager, MCT, MANAGER, GObject) MctManager *mct_manager_new (GDBusConnection *connection); MctAppFilter *mct_manager_get_app_filter (MctManager *self, uid_t user_id, MctManagerGetValueFlags flags, GCancellable *cancellable, GError **error); void mct_manager_get_app_filter_async (MctManager *self, uid_t user_id, MctManagerGetValueFlags flags, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data); MctAppFilter *mct_manager_get_app_filter_finish (MctManager *self, GAsyncResult *result, GError **error); gboolean mct_manager_set_app_filter (MctManager *self, uid_t user_id, MctAppFilter *app_filter, MctManagerSetValueFlags flags, GCancellable *cancellable, GError **error); void mct_manager_set_app_filter_async (MctManager *self, uid_t user_id, MctAppFilter *app_filter, MctManagerSetValueFlags flags, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data); gboolean mct_manager_set_app_filter_finish (MctManager *self, GAsyncResult *result, GError **error); MctSessionLimits *mct_manager_get_session_limits (MctManager *self, uid_t user_id, MctManagerGetValueFlags flags, GCancellable *cancellable, GError **error); void mct_manager_get_session_limits_async (MctManager *self, uid_t user_id, MctManagerGetValueFlags flags, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data); MctSessionLimits *mct_manager_get_session_limits_finish (MctManager *self, GAsyncResult *result, GError **error); gboolean mct_manager_set_session_limits (MctManager *self, uid_t user_id, MctSessionLimits *session_limits, MctManagerSetValueFlags flags, GCancellable *cancellable, GError **error); void mct_manager_set_session_limits_async (MctManager *self, uid_t user_id, MctSessionLimits *session_limits, MctManagerSetValueFlags flags, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data); gboolean mct_manager_set_session_limits_finish (MctManager *self, GAsyncResult *result, GError **error); G_END_DECLS malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/libmalcontent/meson.build000066400000000000000000000044171505556674000265770ustar00rootroot00000000000000libmalcontent_api_version = '0' libmalcontent_api_name = 'malcontent-' + libmalcontent_api_version libmalcontent_sources = [ 'app-filter.c', 'init.c', 'manager.c', 'session-limits.c', ] libmalcontent_headers = [ 'app-filter.h', 'malcontent.h', 'manager.h', 'session-limits.h', ] libmalcontent_private_headers = [ 'app-filter-private.h', 'gconstructor.h', 'session-limits-private.h', ] libmalcontent_public_deps = [ dependency('gio-2.0', version: '>= 2.44'), dependency('glib-2.0', version: '>= 2.54.2'), dependency('gobject-2.0', version: '>= 2.54'), ] libmalcontent_private_deps = [ dependency('gio-unix-2.0', version: '>= 2.36'), ] # FIXME: Would be good to use subdir here: https://github.com/mesonbuild/meson/issues/2969 libmalcontent_include_subdir = join_paths(libmalcontent_api_name, 'libmalcontent') enums = gnome.mkenums_simple('enums', sources: libmalcontent_headers, install_header: true, install_dir: join_paths(includedir, libmalcontent_include_subdir), ) libmalcontent = library(libmalcontent_api_name, libmalcontent_sources + libmalcontent_headers + libmalcontent_private_headers + enums, dependencies: libmalcontent_public_deps + libmalcontent_private_deps, include_directories: root_inc, install: true, version: meson.project_version(), soversion: libmalcontent_api_version, ) libmalcontent_dep = declare_dependency( link_with: libmalcontent, include_directories: root_inc, sources: libmalcontent_headers + [enums[1]], ) # Public library bits. install_headers(libmalcontent_headers, subdir: libmalcontent_include_subdir, ) pkgconfig.generate(libmalcontent, subdirs: libmalcontent_api_name, version: meson.project_version(), name: 'libmalcontent', filebase: libmalcontent_api_name, description: 'Library providing access to parental control settings.', libraries: libmalcontent_public_deps, libraries_private: libmalcontent_private_deps, ) libmalcontent_gir = gnome.generate_gir(libmalcontent, sources: libmalcontent_sources + libmalcontent_headers + enums, nsversion: libmalcontent_api_version, namespace: 'Malcontent', symbol_prefix: 'mct_', identifier_prefix: 'Mct', export_packages: 'libmalcontent', includes: ['GObject-2.0', 'Gio-2.0'], install: true, dependencies: libmalcontent_dep, ) subdir('tests')malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/libmalcontent/session-limits-private.h000066400000000000000000000035371505556674000312420ustar00rootroot00000000000000/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- * * Copyright © 2019 Endless Mobile, Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * * Authors: * - Philip Withnall */ #pragma once #include #include #include #include G_BEGIN_DECLS /** * MctSessionLimitsType: * @MCT_SESSION_LIMITS_TYPE_NONE: No session limits are imposed. * @MCT_SESSION_LIMITS_TYPE_DAILY_SCHEDULE: Sessions are limited to between a * pair of given times each day. * * Types of session limit which can be imposed on an account. Additional types * may be added in future. * * Since: 0.5.0 */ typedef enum { /* these values are used in the com.endlessm.ParentalControls.SessionLimits * D-Bus interface, so must not be changed */ MCT_SESSION_LIMITS_TYPE_NONE = 0, MCT_SESSION_LIMITS_TYPE_DAILY_SCHEDULE = 1, } MctSessionLimitsType; struct _MctSessionLimits { /*< private >*/ gint ref_count; uid_t user_id; MctSessionLimitsType limit_type; guint daily_start_time; /* seconds since midnight */ guint daily_end_time; /* seconds since midnight */ }; G_END_DECLS malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/libmalcontent/session-limits.c000066400000000000000000000474731505556674000275740ustar00rootroot00000000000000/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- * * Copyright © 2019 Endless Mobile, Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * * Authors: * - Philip Withnall */ #include "config.h" #include #include #include #include #include #include #include "libmalcontent/session-limits-private.h" /* struct _MctSessionLimits is defined in session-limits-private.h */ G_DEFINE_BOXED_TYPE (MctSessionLimits, mct_session_limits, mct_session_limits_ref, mct_session_limits_unref) /** * mct_session_limits_ref: * @limits: (transfer none): an #MctSessionLimits * * Increment the reference count of @limits, and return the same pointer to it. * * Returns: (transfer full): the same pointer as @limits * Since: 0.5.0 */ MctSessionLimits * mct_session_limits_ref (MctSessionLimits *limits) { g_return_val_if_fail (limits != NULL, NULL); g_return_val_if_fail (limits->ref_count >= 1, NULL); g_return_val_if_fail (limits->ref_count <= G_MAXINT - 1, NULL); limits->ref_count++; return limits; } /** * mct_session_limits_unref: * @limits: (transfer full): an #MctSessionLimits * * Decrement the reference count of @limits. If the reference count reaches * zero, free the @limits and all its resources. * * Since: 0.5.0 */ void mct_session_limits_unref (MctSessionLimits *limits) { g_return_if_fail (limits != NULL); g_return_if_fail (limits->ref_count >= 1); limits->ref_count--; if (limits->ref_count <= 0) { g_free (limits); } } /** * mct_session_limits_get_user_id: * @limits: an #MctSessionLimits * * Get the user ID of the user this #MctSessionLimits is for. * * Returns: user ID of the relevant user, or `(uid_t) -1` if unknown * Since: 0.5.0 */ uid_t mct_session_limits_get_user_id (MctSessionLimits *limits) { g_return_val_if_fail (limits != NULL, (uid_t) -1); g_return_val_if_fail (limits->ref_count >= 1, (uid_t) -1); return limits->user_id; } /** * mct_session_limits_is_enabled: * @limits: an #MctSessionLimits * * Check whether any session limits are enabled and are going to impose at least * one restriction on the user. This gives a high level view of whether session * limit parental controls are ‘enabled’ for the given user. * * This function is equivalent to the value returned by the * `time_limit_enabled_out` argument of * mct_session_limits_check_time_remaining(). * * Returns: %TRUE if the session limits object contains at least one restrictive * session limit, %FALSE if there are no limits in place * Since: 0.7.0 */ gboolean mct_session_limits_is_enabled (MctSessionLimits *limits) { g_return_val_if_fail (limits != NULL, FALSE); g_return_val_if_fail (limits->ref_count >= 1, FALSE); return (limits->limit_type != MCT_SESSION_LIMITS_TYPE_NONE); } /** * mct_session_limits_check_time_remaining: * @limits: an #MctSessionLimits * @now_usecs: current time as microseconds since the Unix epoch (UTC), * typically queried using g_get_real_time() * @time_remaining_secs_out: (out) (optional): return location for the number * of seconds remaining before the user’s session has to end, if limits are * in force * @time_limit_enabled_out: (out) (optional): return location for whether time * limits are enabled for this user * * Check whether the user has time remaining in which they are allowed to use * the computer, assuming that @now_usecs is the current time, and applying the * session limit policy from @limits to it. * * This will return whether the user is allowed to use the computer now; further * information about the policy and remaining time is provided in * @time_remaining_secs_out and @time_limit_enabled_out. * * Returns: %TRUE if the user this @limits corresponds to is allowed to be in * an active session at the given time; %FALSE otherwise * Since: 0.5.0 */ gboolean mct_session_limits_check_time_remaining (MctSessionLimits *limits, guint64 now_usecs, guint64 *time_remaining_secs_out, gboolean *time_limit_enabled_out) { guint64 time_remaining_secs; gboolean time_limit_enabled; gboolean user_allowed_now; g_autoptr(GDateTime) now_dt = NULL; guint64 now_time_of_day_secs; g_return_val_if_fail (limits != NULL, FALSE); g_return_val_if_fail (limits->ref_count >= 1, FALSE); /* Helper calculations. */ now_dt = g_date_time_new_from_unix_utc (now_usecs / G_USEC_PER_SEC); if (now_dt == NULL) { time_remaining_secs = 0; time_limit_enabled = TRUE; user_allowed_now = FALSE; goto out; } now_time_of_day_secs = ((g_date_time_get_hour (now_dt) * 60 + g_date_time_get_minute (now_dt)) * 60 + g_date_time_get_second (now_dt)); /* Work out the limits. */ switch (limits->limit_type) { case MCT_SESSION_LIMITS_TYPE_DAILY_SCHEDULE: user_allowed_now = (now_time_of_day_secs >= limits->daily_start_time && now_time_of_day_secs < limits->daily_end_time); time_remaining_secs = user_allowed_now ? (limits->daily_end_time - now_time_of_day_secs) : 0; time_limit_enabled = TRUE; g_debug ("%s: Daily schedule limit allowed in %u–%u (now is %" G_GUINT64_FORMAT "); %" G_GUINT64_FORMAT " seconds remaining", G_STRFUNC, limits->daily_start_time, limits->daily_end_time, now_time_of_day_secs, time_remaining_secs); break; case MCT_SESSION_LIMITS_TYPE_NONE: default: user_allowed_now = TRUE; time_remaining_secs = G_MAXUINT64; time_limit_enabled = FALSE; g_debug ("%s: No limit enabled", G_STRFUNC); break; } out: /* Postconditions. */ g_assert (!user_allowed_now || time_remaining_secs > 0); g_assert (user_allowed_now || time_remaining_secs == 0); g_assert (time_limit_enabled || time_remaining_secs == G_MAXUINT64); /* Output. */ if (time_remaining_secs_out != NULL) *time_remaining_secs_out = time_remaining_secs; if (time_limit_enabled_out != NULL) *time_limit_enabled_out = time_limit_enabled; return user_allowed_now; } /** * mct_session_limits_serialize: * @limits: an #MctSessionLimits * * Build a #GVariant which contains the session limits from @limits, in an * opaque variant format. This format may change in future, but * mct_session_limits_deserialize() is guaranteed to always be able to load any * variant produced by the current or any previous version of * mct_session_limits_serialize(). * * Returns: (transfer floating): a new, floating #GVariant containing the * session limits * Since: 0.7.0 */ GVariant * mct_session_limits_serialize (MctSessionLimits *limits) { g_auto(GVariantBuilder) builder = G_VARIANT_BUILDER_INIT (G_VARIANT_TYPE ("a{sv}")); g_autoptr(GVariant) limit_variant = NULL; const gchar *limit_property_name; g_return_val_if_fail (limits != NULL, NULL); g_return_val_if_fail (limits->ref_count >= 1, NULL); /* The serialisation format is exactly the * `com.endlessm.ParentalControls.SessionLimits` D-Bus interface. */ switch (limits->limit_type) { case MCT_SESSION_LIMITS_TYPE_DAILY_SCHEDULE: limit_variant = g_variant_new ("(uu)", limits->daily_start_time, limits->daily_end_time); limit_property_name = "DailySchedule"; break; case MCT_SESSION_LIMITS_TYPE_NONE: limit_variant = NULL; limit_property_name = NULL; break; default: g_assert_not_reached (); } if (limit_property_name != NULL) { g_variant_builder_add (&builder, "{sv}", limit_property_name, g_steal_pointer (&limit_variant)); } g_variant_builder_add (&builder, "{sv}", "LimitType", g_variant_new_uint32 (limits->limit_type)); return g_variant_builder_end (&builder); } /** * mct_session_limits_deserialize: * @variant: a serialized session limits variant * @user_id: the ID of the user the session limits relate to * @error: return location for a #GError, or %NULL * * Deserialize a set of session limits previously serialized with * mct_session_limits_serialize(). This function guarantees to be able to * deserialize any serialized form from this version or older versions of * libmalcontent. * * If deserialization fails, %MCT_MANAGER_ERROR_INVALID_DATA will be returned. * * Returns: (transfer full): deserialized session limits * Since: 0.7.0 */ MctSessionLimits * mct_session_limits_deserialize (GVariant *variant, uid_t user_id, GError **error) { g_autoptr(MctSessionLimits) session_limits = NULL; guint32 limit_type; guint32 daily_start_time, daily_end_time; g_return_val_if_fail (variant != NULL, NULL); g_return_val_if_fail (error == NULL || *error == NULL, NULL); /* Check the overall type. */ if (!g_variant_is_of_type (variant, G_VARIANT_TYPE ("a{sv}"))) { g_set_error (error, MCT_MANAGER_ERROR, MCT_MANAGER_ERROR_INVALID_DATA, _("Session limit for user %u was in an unrecognized format"), (guint) user_id); return NULL; } /* Extract the properties we care about. The default values here should be * kept in sync with those in the `com.endlessm.ParentalControls.SessionLimits` * D-Bus interface. */ if (!g_variant_lookup (variant, "LimitType", "u", &limit_type)) { /* Default value. */ limit_type = MCT_SESSION_LIMITS_TYPE_NONE; } /* Check that the limit type is something we support. */ G_STATIC_ASSERT (sizeof (limit_type) >= sizeof (MctSessionLimitsType)); if ((guint) limit_type > MCT_SESSION_LIMITS_TYPE_DAILY_SCHEDULE) { g_set_error (error, MCT_MANAGER_ERROR, MCT_MANAGER_ERROR_INVALID_DATA, _("Session limit for user %u has an unrecognized type ‘%u’"), (guint) user_id, limit_type); return NULL; } if (!g_variant_lookup (variant, "DailySchedule", "(uu)", &daily_start_time, &daily_end_time)) { /* Default value. */ daily_start_time = 0; daily_end_time = 24 * 60 * 60; } if (daily_start_time >= daily_end_time || daily_end_time > 24 * 60 * 60) { g_set_error (error, MCT_MANAGER_ERROR, MCT_MANAGER_ERROR_INVALID_DATA, _("Session limit for user %u has invalid daily schedule %u–%u"), (guint) user_id, daily_start_time, daily_end_time); return NULL; } /* Success. Create an #MctSessionLimits object to contain the results. */ session_limits = g_new0 (MctSessionLimits, 1); session_limits->ref_count = 1; session_limits->user_id = user_id; session_limits->limit_type = limit_type; session_limits->daily_start_time = daily_start_time; session_limits->daily_end_time = daily_end_time; return g_steal_pointer (&session_limits); } /* * Actual implementation of #MctSessionLimitsBuilder. * * All members are %NULL if un-initialised, cleared, or ended. */ typedef struct { MctSessionLimitsType limit_type; /* Which member is used is determined by @limit_type: */ union { struct { guint start_time; /* seconds since midnight */ guint end_time; /* seconds since midnight */ } daily_schedule; }; /*< private >*/ gpointer padding[10]; } MctSessionLimitsBuilderReal; G_STATIC_ASSERT (sizeof (MctSessionLimitsBuilderReal) == sizeof (MctSessionLimitsBuilder)); G_STATIC_ASSERT (__alignof__ (MctSessionLimitsBuilderReal) == __alignof__ (MctSessionLimitsBuilder)); G_DEFINE_BOXED_TYPE (MctSessionLimitsBuilder, mct_session_limits_builder, mct_session_limits_builder_copy, mct_session_limits_builder_free) /** * mct_session_limits_builder_init: * @builder: an uninitialised #MctSessionLimitsBuilder * * Initialise the given @builder so it can be used to construct a new * #MctSessionLimits. @builder must have been allocated on the stack, and must * not already be initialised. * * Construct the #MctSessionLimits by calling methods on @builder, followed by * mct_session_limits_builder_end(). To abort construction, use * mct_session_limits_builder_clear(). * * Since: 0.5.0 */ void mct_session_limits_builder_init (MctSessionLimitsBuilder *builder) { MctSessionLimitsBuilder local_builder = MCT_SESSION_LIMITS_BUILDER_INIT (); MctSessionLimitsBuilderReal *_builder = (MctSessionLimitsBuilderReal *) builder; g_return_if_fail (_builder != NULL); g_return_if_fail (_builder->limit_type == MCT_SESSION_LIMITS_TYPE_NONE); memcpy (builder, &local_builder, sizeof (local_builder)); } /** * mct_session_limits_builder_clear: * @builder: an #MctSessionLimitsBuilder * * Clear @builder, freeing any internal state in it. This will not free the * top-level storage for @builder itself, which is assumed to be allocated on * the stack. * * If called on an already-cleared #MctSessionLimitsBuilder, this function is * idempotent. * * Since: 0.5.0 */ void mct_session_limits_builder_clear (MctSessionLimitsBuilder *builder) { MctSessionLimitsBuilderReal *_builder = (MctSessionLimitsBuilderReal *) builder; g_return_if_fail (_builder != NULL); /* Nothing to free here for now. */ _builder->limit_type = MCT_SESSION_LIMITS_TYPE_NONE; } /** * mct_session_limits_builder_new: * * Construct a new #MctSessionLimitsBuilder on the heap. This is intended for * language bindings. The returned builder must eventually be freed with * mct_session_limits_builder_free(), but can be cleared zero or more times with * mct_session_limits_builder_clear() first. * * Returns: (transfer full): a new heap-allocated #MctSessionLimitsBuilder * Since: 0.5.0 */ MctSessionLimitsBuilder * mct_session_limits_builder_new (void) { g_autoptr(MctSessionLimitsBuilder) builder = NULL; builder = g_new0 (MctSessionLimitsBuilder, 1); mct_session_limits_builder_init (builder); return g_steal_pointer (&builder); } /** * mct_session_limits_builder_copy: * @builder: an #MctSessionLimitsBuilder * * Copy the given @builder to a newly-allocated #MctSessionLimitsBuilder on the * heap. This is safe to use with cleared, stack-allocated * #MctSessionLimitsBuilders. * * Returns: (transfer full): a copy of @builder * Since: 0.5.0 */ MctSessionLimitsBuilder * mct_session_limits_builder_copy (MctSessionLimitsBuilder *builder) { MctSessionLimitsBuilderReal *_builder = (MctSessionLimitsBuilderReal *) builder; g_autoptr(MctSessionLimitsBuilder) copy = NULL; MctSessionLimitsBuilderReal *_copy; g_return_val_if_fail (builder != NULL, NULL); copy = mct_session_limits_builder_new (); _copy = (MctSessionLimitsBuilderReal *) copy; mct_session_limits_builder_clear (copy); _copy->limit_type = _builder->limit_type; switch (_builder->limit_type) { case MCT_SESSION_LIMITS_TYPE_DAILY_SCHEDULE: _copy->daily_schedule.start_time = _builder->daily_schedule.start_time; _copy->daily_schedule.end_time = _builder->daily_schedule.end_time; break; case MCT_SESSION_LIMITS_TYPE_NONE: default: break; } return g_steal_pointer (©); } /** * mct_session_limits_builder_free: * @builder: a heap-allocated #MctSessionLimitsBuilder * * Free an #MctSessionLimitsBuilder originally allocated using * mct_session_limits_builder_new(). This must not be called on stack-allocated * builders initialised using mct_session_limits_builder_init(). * * Since: 0.5.0 */ void mct_session_limits_builder_free (MctSessionLimitsBuilder *builder) { g_return_if_fail (builder != NULL); mct_session_limits_builder_clear (builder); g_free (builder); } /** * mct_session_limits_builder_end: * @builder: an initialised #MctSessionLimitsBuilder * * Finish constructing an #MctSessionLimits with the given @builder, and return * it. The #MctSessionLimitsBuilder will be cleared as if * mct_session_limits_builder_clear() had been called. * * Returns: (transfer full): a newly constructed #MctSessionLimits * Since: 0.5.0 */ MctSessionLimits * mct_session_limits_builder_end (MctSessionLimitsBuilder *builder) { MctSessionLimitsBuilderReal *_builder = (MctSessionLimitsBuilderReal *) builder; g_autoptr(MctSessionLimits) session_limits = NULL; g_return_val_if_fail (_builder != NULL, NULL); /* Build the #MctSessionLimits. */ session_limits = g_new0 (MctSessionLimits, 1); session_limits->ref_count = 1; session_limits->user_id = -1; session_limits->limit_type = _builder->limit_type; switch (_builder->limit_type) { case MCT_SESSION_LIMITS_TYPE_DAILY_SCHEDULE: session_limits->daily_start_time = _builder->daily_schedule.start_time; session_limits->daily_end_time = _builder->daily_schedule.end_time; break; case MCT_SESSION_LIMITS_TYPE_NONE: default: /* Defaults: */ session_limits->daily_start_time = 0; session_limits->daily_end_time = 24 * 60 * 60; break; } mct_session_limits_builder_clear (builder); return g_steal_pointer (&session_limits); } /** * mct_session_limits_builder_set_none: * @builder: an initialised #MctSessionLimitsBuilder * * Unset any session limits currently set in the @builder. * * Since: 0.5.0 */ void mct_session_limits_builder_set_none (MctSessionLimitsBuilder *builder) { MctSessionLimitsBuilderReal *_builder = (MctSessionLimitsBuilderReal *) builder; g_return_if_fail (_builder != NULL); /* This will need to free other limit types’ data first in future. */ _builder->limit_type = MCT_SESSION_LIMITS_TYPE_NONE; } /** * mct_session_limits_builder_set_daily_schedule: * @builder: an initialised #MctSessionLimitsBuilder * @start_time_secs: number of seconds since midnight when the user’s session * can first start * @end_time_secs: number of seconds since midnight when the user’s session can * last end * * Set the session limits in @builder to be a daily schedule, where sessions are * allowed between @start_time_secs and @end_time_secs every day. * @start_time_secs and @end_time_secs are given as offsets from the start of * the day, in seconds. @end_time_secs must be greater than @start_time_secs. * @end_time_secs must be at most `24 * 60 * 60`. * * This will overwrite any other session limits. * * Since: 0.5.0 */ void mct_session_limits_builder_set_daily_schedule (MctSessionLimitsBuilder *builder, guint start_time_secs, guint end_time_secs) { MctSessionLimitsBuilderReal *_builder = (MctSessionLimitsBuilderReal *) builder; g_return_if_fail (_builder != NULL); g_return_if_fail (start_time_secs < end_time_secs); g_return_if_fail (end_time_secs <= 24 * 60 * 60); /* This will need to free other limit types’ data first in future. */ _builder->limit_type = MCT_SESSION_LIMITS_TYPE_DAILY_SCHEDULE; _builder->daily_schedule.start_time = start_time_secs; _builder->daily_schedule.end_time = end_time_secs; } malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/libmalcontent/session-limits.h000066400000000000000000000113351505556674000275650ustar00rootroot00000000000000/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- * * Copyright © 2019 Endless Mobile, Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * * Authors: * - Philip Withnall */ #pragma once #include #include #include G_BEGIN_DECLS /** * MctSessionLimits: * * #MctSessionLimits is an opaque, immutable structure which contains a snapshot * of the session limits settings for a user at a given time. This includes * whether session limits are being enforced, and the limit policy — for * example, the times of day when a user is allowed to use the computer. * * Typically, session limits settings can only be changed by the administrator, * and are read-only for non-administrative users. The precise policy is set * using polkit. * * Since: 0.5.0 */ typedef struct _MctSessionLimits MctSessionLimits; GType mct_session_limits_get_type (void); #define MCT_TYPE_SESSION_LIMITS mct_session_limits_get_type () MctSessionLimits *mct_session_limits_ref (MctSessionLimits *limits); void mct_session_limits_unref (MctSessionLimits *limits); G_DEFINE_AUTOPTR_CLEANUP_FUNC (MctSessionLimits, mct_session_limits_unref) uid_t mct_session_limits_get_user_id (MctSessionLimits *limits); gboolean mct_session_limits_is_enabled (MctSessionLimits *limits); gboolean mct_session_limits_check_time_remaining (MctSessionLimits *limits, guint64 now_usecs, guint64 *time_remaining_secs_out, gboolean *time_limit_enabled_out); GVariant *mct_session_limits_serialize (MctSessionLimits *limits); MctSessionLimits *mct_session_limits_deserialize (GVariant *variant, uid_t user_id, GError **error); /** * MctSessionLimitsBuilder: * * #MctSessionLimitsBuilder is a stack-allocated mutable structure used to build * an #MctSessionLimits instance. Use mct_session_limits_builder_init(), various * method calls to set properties of the session limits, and then * mct_session_limits_builder_end(), to construct an #MctSessionLimits. * * Since: 0.5.0 */ typedef struct { /*< private >*/ guint u0; guint u1; guint u2; gpointer p0[10]; } MctSessionLimitsBuilder; GType mct_session_limits_builder_get_type (void); /** * MCT_SESSION_LIMITS_BUILDER_INIT: * * Initialise a stack-allocated #MctSessionLimitsBuilder instance at declaration * time. * * This is typically used with g_auto(): * |[ * g_auto(MctSessionLimitsBuilder) builder = MCT_SESSION_LIMITS_BUILDER_INIT (); * ]| * * Since: 0.5.0 */ #define MCT_SESSION_LIMITS_BUILDER_INIT() \ { \ 0, /* MCT_SESSION_LIMITS_TYPE_NONE */ \ 0, \ 0, \ /* padding: */ \ { NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL } \ } void mct_session_limits_builder_init (MctSessionLimitsBuilder *builder); void mct_session_limits_builder_clear (MctSessionLimitsBuilder *builder); G_DEFINE_AUTO_CLEANUP_CLEAR_FUNC (MctSessionLimitsBuilder, mct_session_limits_builder_clear) MctSessionLimitsBuilder *mct_session_limits_builder_new (void); MctSessionLimitsBuilder *mct_session_limits_builder_copy (MctSessionLimitsBuilder *builder); void mct_session_limits_builder_free (MctSessionLimitsBuilder *builder); G_DEFINE_AUTOPTR_CLEANUP_FUNC (MctSessionLimitsBuilder, mct_session_limits_builder_free) MctSessionLimits *mct_session_limits_builder_end (MctSessionLimitsBuilder *builder); void mct_session_limits_builder_set_none (MctSessionLimitsBuilder *builder); void mct_session_limits_builder_set_daily_schedule (MctSessionLimitsBuilder *builder, guint start_time_secs, guint end_time_secs); G_END_DECLS malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/libmalcontent/tests/000077500000000000000000000000001505556674000255715ustar00rootroot00000000000000malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/libmalcontent/tests/app-filter.c000066400000000000000000002103421505556674000300020ustar00rootroot00000000000000/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- * * Copyright © 2018 Endless Mobile, Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * * Authors: * - Philip Withnall */ #include "config.h" #include #include #include #include #include #include #include #include #include "accounts-service-iface.h" #include "accounts-service-extension-iface.h" /* Check two arrays contain exactly the same items in the same order. */ static void assert_strv_equal (const gchar * const *strv_a, const gchar * const *strv_b) { gsize i; for (i = 0; strv_a[i] != NULL && strv_b[i] != NULL; i++) g_assert_cmpstr (strv_a[i], ==, strv_b[i]); g_assert_null (strv_a[i]); g_assert_null (strv_b[i]); } /* A placeholder smoketest which checks that the error quark works. */ static void test_app_filter_error_quark (void) { g_assert_cmpint (mct_app_filter_error_quark (), !=, 0); } /* Test that the #GType definitions for various types work. */ static void test_app_filter_types (void) { g_type_ensure (mct_app_filter_get_type ()); g_type_ensure (mct_app_filter_builder_get_type ()); } /* Test that ref() and unref() work on an #MctAppFilter. */ static void test_app_filter_refs (void) { g_auto(MctAppFilterBuilder) builder = MCT_APP_FILTER_BUILDER_INIT (); g_autoptr(MctAppFilter) filter = NULL; /* Use an empty #MctAppFilter. */ filter = mct_app_filter_builder_end (&builder); g_assert_nonnull (filter); /* Call is_path_allowed() to check that the filter hasn’t been finalised. */ g_assert_true (mct_app_filter_is_path_allowed (filter, "/bin/false")); mct_app_filter_ref (filter); g_assert_true (mct_app_filter_is_path_allowed (filter, "/bin/false")); mct_app_filter_unref (filter); g_assert_true (mct_app_filter_is_path_allowed (filter, "/bin/false")); /* Final ref is dropped by g_autoptr(). */ } /* Basic test of mct_app_filter_serialize() on an app filter. */ static void test_app_filter_serialize (void) { g_auto(MctAppFilterBuilder) builder = MCT_APP_FILTER_BUILDER_INIT (); g_autoptr(MctAppFilter) filter = NULL; g_autoptr(GVariant) serialized = NULL; /* Use an empty #MctAppFilter. */ filter = mct_app_filter_builder_end (&builder); /* We can’t assert anything about the serialisation format, since it’s opaque. */ serialized = mct_app_filter_serialize (filter); g_assert_nonnull (serialized); } /* Basic test of mct_app_filter_deserialize() on various current and historic * serialised app filter variants. */ static void test_app_filter_deserialize (void) { /* These are all opaque. Older versions should be kept around to test * backwards compatibility. */ const gchar *valid_app_filters[] = { "@a{sv} {}", "{ 'AppFilter': <(true, @as [])> }", "{ 'OarsFilter': <('oars-1.1', { 'violence-cartoon': 'mild' })> }", "{ 'AllowUserInstallation': }", "{ 'AllowSystemInstallation': }", }; for (gsize i = 0; i < G_N_ELEMENTS (valid_app_filters); i++) { g_autoptr(GVariant) serialized = NULL; g_autoptr(MctAppFilter) filter = NULL; g_autoptr(GError) local_error = NULL; g_test_message ("%" G_GSIZE_FORMAT ": %s", i, valid_app_filters[i]); serialized = g_variant_parse (NULL, valid_app_filters[i], NULL, NULL, NULL); g_assert (serialized != NULL); filter = mct_app_filter_deserialize (serialized, 1, &local_error); g_assert_no_error (local_error); g_assert_nonnull (filter); } } /* Test of mct_app_filter_deserialize() on various invalid variants. */ static void test_app_filter_deserialize_invalid (void) { const gchar *invalid_app_filters[] = { "false", "()", "{ 'OarsFilter': <('invalid', { 'violence-cartoon': 'mild' })> }", }; for (gsize i = 0; i < G_N_ELEMENTS (invalid_app_filters); i++) { g_autoptr(GVariant) serialized = NULL; g_autoptr(MctAppFilter) filter = NULL; g_autoptr(GError) local_error = NULL; g_test_message ("%" G_GSIZE_FORMAT ": %s", i, invalid_app_filters[i]); serialized = g_variant_parse (NULL, invalid_app_filters[i], NULL, NULL, NULL); g_assert (serialized != NULL); filter = mct_app_filter_deserialize (serialized, 1, &local_error); g_assert_error (local_error, MCT_MANAGER_ERROR, MCT_MANAGER_ERROR_INVALID_DATA); g_assert_null (filter); } } /* Test that mct_app_filter_equal() returns the correct results on various * app filters. */ static void test_app_filter_equal (void) { g_auto(MctAppFilterBuilder) builder = MCT_APP_FILTER_BUILDER_INIT (); MctAppFilter *equal_filters[2]; const gchar *unequal_filters_serialised[] = { "{ 'AppFilter': <(true, @as ['/usr/bin/gnome-software'])> }", "{ 'AppFilter': <(false, @as ['/usr/bin/gnome-software'])> }", "{ 'AllowUserInstallation': }", "{ 'AllowSystemInstallation': }", "{ 'OarsFilter': <('oars-1.1', { 'violence-cartoon': 'mild' })> }", }; MctAppFilter *unequal_filters[G_N_ELEMENTS (unequal_filters_serialised)]; /* Build a couple of filters which are identical. */ equal_filters[0] = mct_app_filter_builder_end (&builder); mct_app_filter_builder_init (&builder); equal_filters[1] = mct_app_filter_builder_end (&builder); /* And a load of filters which are not. */ for (gsize i = 0; i < G_N_ELEMENTS (unequal_filters_serialised); i++) { g_autoptr(GVariant) serialized = NULL; serialized = g_variant_parse (NULL, unequal_filters_serialised[i], NULL, NULL, NULL); g_assert (serialized != NULL); unequal_filters[i] = mct_app_filter_deserialize (serialized, 1, NULL); g_assert (unequal_filters[i] != NULL); } /* Test the equality checks on them all. */ for (gsize i = 0; i < G_N_ELEMENTS (equal_filters); i++) for (gsize j = 0; j < G_N_ELEMENTS (equal_filters); j++) g_assert_true (mct_app_filter_equal (equal_filters[i], equal_filters[j])); for (gsize i = 0; i < G_N_ELEMENTS (unequal_filters); i++) { for (gsize j = 0; j < G_N_ELEMENTS (equal_filters); j++) g_assert_false (mct_app_filter_equal (unequal_filters[i], equal_filters[j])); for (gsize j = 0; j < G_N_ELEMENTS (unequal_filters); j++) { if (i != j) g_assert_false (mct_app_filter_equal (unequal_filters[i], unequal_filters[j])); else g_assert_true (mct_app_filter_equal (unequal_filters[i], unequal_filters[j])); } } for (gsize i = 0; i < G_N_ELEMENTS (equal_filters); i++) mct_app_filter_unref (equal_filters[i]); for (gsize i = 0; i < G_N_ELEMENTS (unequal_filters); i++) mct_app_filter_unref (unequal_filters[i]); } /* Test that mct_app_filter_is_enabled() returns the correct results on various * app filters. */ static void test_app_filter_is_enabled (void) { const struct { const gchar *serialized; gboolean is_enabled; } app_filters[] = { { "@a{sv} {}", FALSE }, { "{ 'AppFilter': <(true, @as [])> }", TRUE }, { "{ 'AppFilter': <(false, @as [])> }", FALSE }, { "{ 'AppFilter': <(false, @as [ '/usr/bin/gnome-software' ])> }", TRUE }, { "{ 'OarsFilter': <('oars-1.1', @a{ss} {})> }", FALSE }, { "{ 'OarsFilter': <('oars-1.1', { 'violence-cartoon': 'mild' })> }", TRUE }, { "{ 'OarsFilter': <('oars-1.1', { 'violence-cartoon': 'intense' })> }", FALSE }, { "{ 'OarsFilter': <('oars-1.1', { 'violence-cartoon': '' })> }", FALSE }, /* technically an invalid serialisation */ { "{ 'OarsFilter': <('oars-1.1', { 'violence-cartoon': 'none' })> }", TRUE }, { "{ 'OarsFilter': <('oars-1.1', { 'violence-cartoon': 'mild', 'violence-realistic': 'intense' })> }", TRUE }, { "{ 'OarsFilter': <('oars-1.1', { 'violence-cartoon': 'mild', 'violence-realistic': 'none' })> }", TRUE }, { "{ 'AllowUserInstallation': }", FALSE }, { "{ 'AllowUserInstallation': }", TRUE }, { "{ 'AllowSystemInstallation': }", FALSE }, { "{ 'AllowSystemInstallation': }", FALSE }, }; for (gsize i = 0; i < G_N_ELEMENTS (app_filters); i++) { g_autoptr(GVariant) variant = NULL; g_autoptr(MctAppFilter) filter = NULL; g_test_message ("%" G_GSIZE_FORMAT ": %s", i, app_filters[i].serialized); variant = g_variant_parse (NULL, app_filters[i].serialized, NULL, NULL, NULL); g_assert (variant != NULL); filter = mct_app_filter_deserialize (variant, 1, NULL); g_assert (filter != NULL); if (app_filters[i].is_enabled) g_assert_true (mct_app_filter_is_enabled (filter)); else g_assert_false (mct_app_filter_is_enabled (filter)); } } /* Fixture for tests which use an #MctAppFilterBuilder. The builder can either * be heap- or stack-allocated. @builder will always be a valid pointer to it. */ typedef struct { MctAppFilterBuilder *builder; MctAppFilterBuilder stack_builder; } BuilderFixture; static void builder_set_up_stack (BuilderFixture *fixture, gconstpointer test_data) { mct_app_filter_builder_init (&fixture->stack_builder); fixture->builder = &fixture->stack_builder; } static void builder_tear_down_stack (BuilderFixture *fixture, gconstpointer test_data) { mct_app_filter_builder_clear (&fixture->stack_builder); fixture->builder = NULL; } static void builder_set_up_stack2 (BuilderFixture *fixture, gconstpointer test_data) { MctAppFilterBuilder local_builder = MCT_APP_FILTER_BUILDER_INIT (); memcpy (&fixture->stack_builder, &local_builder, sizeof (local_builder)); fixture->builder = &fixture->stack_builder; } static void builder_tear_down_stack2 (BuilderFixture *fixture, gconstpointer test_data) { mct_app_filter_builder_clear (&fixture->stack_builder); fixture->builder = NULL; } static void builder_set_up_heap (BuilderFixture *fixture, gconstpointer test_data) { fixture->builder = mct_app_filter_builder_new (); } static void builder_tear_down_heap (BuilderFixture *fixture, gconstpointer test_data) { g_clear_pointer (&fixture->builder, mct_app_filter_builder_free); } /* Test building a non-empty #MctAppFilter using an #MctAppFilterBuilder. */ static void test_app_filter_builder_non_empty (BuilderFixture *fixture, gconstpointer test_data) { g_autoptr(MctAppFilter) filter = NULL; g_autofree const gchar **sections = NULL; mct_app_filter_builder_blocklist_path (fixture->builder, "/bin/true"); mct_app_filter_builder_blocklist_path (fixture->builder, "/usr/bin/gnome-software"); mct_app_filter_builder_blocklist_flatpak_ref (fixture->builder, "app/org.doom.Doom/x86_64/stable"); mct_app_filter_builder_blocklist_content_type (fixture->builder, "x-scheme-handler/http"); mct_app_filter_builder_set_oars_value (fixture->builder, "drugs-alcohol", MCT_APP_FILTER_OARS_VALUE_MILD); mct_app_filter_builder_set_oars_value (fixture->builder, "language-humor", MCT_APP_FILTER_OARS_VALUE_MODERATE); mct_app_filter_builder_set_allow_user_installation (fixture->builder, TRUE); mct_app_filter_builder_set_allow_system_installation (fixture->builder, FALSE); filter = mct_app_filter_builder_end (fixture->builder); g_assert_true (mct_app_filter_is_enabled (filter)); g_assert_true (mct_app_filter_is_path_allowed (filter, "/bin/false")); g_assert_false (mct_app_filter_is_path_allowed (filter, "/usr/bin/gnome-software")); g_assert_true (mct_app_filter_is_flatpak_ref_allowed (filter, "app/org.gnome.Ponies/x86_64/stable")); g_assert_true (mct_app_filter_is_flatpak_app_allowed (filter, "org.gnome.Ponies")); g_assert_false (mct_app_filter_is_flatpak_ref_allowed (filter, "app/org.doom.Doom/x86_64/stable")); g_assert_false (mct_app_filter_is_flatpak_app_allowed (filter, "org.doom.Doom")); g_assert_false (mct_app_filter_is_content_type_allowed (filter, "x-scheme-handler/http")); g_assert_true (mct_app_filter_is_content_type_allowed (filter, "text/plain")); g_assert_cmpint (mct_app_filter_get_oars_value (filter, "drugs-alcohol"), ==, MCT_APP_FILTER_OARS_VALUE_MILD); g_assert_cmpint (mct_app_filter_get_oars_value (filter, "language-humor"), ==, MCT_APP_FILTER_OARS_VALUE_MODERATE); g_assert_cmpint (mct_app_filter_get_oars_value (filter, "something-else"), ==, MCT_APP_FILTER_OARS_VALUE_UNKNOWN); sections = mct_app_filter_get_oars_sections (filter); const gchar * const expected_sections[] = { "drugs-alcohol", "language-humor", NULL }; assert_strv_equal ((const gchar * const *) sections, expected_sections); g_assert_true (mct_app_filter_is_user_installation_allowed (filter)); g_assert_false (mct_app_filter_is_system_installation_allowed (filter)); } /* Test building an empty #MctAppFilter using an #MctAppFilterBuilder. */ static void test_app_filter_builder_empty (BuilderFixture *fixture, gconstpointer test_data) { g_autoptr(MctAppFilter) filter = NULL; g_autofree const gchar **sections = NULL; filter = mct_app_filter_builder_end (fixture->builder); g_assert_false (mct_app_filter_is_enabled (filter)); g_assert_true (mct_app_filter_is_path_allowed (filter, "/bin/false")); g_assert_true (mct_app_filter_is_path_allowed (filter, "/usr/bin/gnome-software")); g_assert_true (mct_app_filter_is_flatpak_ref_allowed (filter, "app/org.gnome.Ponies/x86_64/stable")); g_assert_true (mct_app_filter_is_flatpak_app_allowed (filter, "org.gnome.Ponies")); g_assert_true (mct_app_filter_is_flatpak_ref_allowed (filter, "app/org.doom.Doom/x86_64/stable")); g_assert_true (mct_app_filter_is_flatpak_app_allowed (filter, "org.doom.Doom")); g_assert_true (mct_app_filter_is_content_type_allowed (filter, "x-scheme-handler/http")); g_assert_cmpint (mct_app_filter_get_oars_value (filter, "drugs-alcohol"), ==, MCT_APP_FILTER_OARS_VALUE_UNKNOWN); g_assert_cmpint (mct_app_filter_get_oars_value (filter, "language-humor"), ==, MCT_APP_FILTER_OARS_VALUE_UNKNOWN); g_assert_cmpint (mct_app_filter_get_oars_value (filter, "something-else"), ==, MCT_APP_FILTER_OARS_VALUE_UNKNOWN); sections = mct_app_filter_get_oars_sections (filter); const gchar * const expected_sections[] = { NULL }; assert_strv_equal ((const gchar * const *) sections, expected_sections); g_assert_true (mct_app_filter_is_user_installation_allowed (filter)); g_assert_false (mct_app_filter_is_system_installation_allowed (filter)); } /* Check that copying a cleared #MctAppFilterBuilder works, and the copy can * then be initialised and used to build a filter. */ static void test_app_filter_builder_copy_empty (void) { g_autoptr(MctAppFilterBuilder) builder = mct_app_filter_builder_new (); g_autoptr(MctAppFilterBuilder) builder_copy = NULL; g_autoptr(MctAppFilter) filter = NULL; mct_app_filter_builder_clear (builder); builder_copy = mct_app_filter_builder_copy (builder); mct_app_filter_builder_init (builder_copy); mct_app_filter_builder_blocklist_path (builder_copy, "/bin/true"); mct_app_filter_builder_blocklist_content_type (builder_copy, "x-scheme-handler/http"); filter = mct_app_filter_builder_end (builder_copy); g_assert_true (mct_app_filter_is_enabled (filter)); g_assert_true (mct_app_filter_is_path_allowed (filter, "/bin/false")); g_assert_false (mct_app_filter_is_path_allowed (filter, "/bin/true")); g_assert_true (mct_app_filter_is_content_type_allowed (filter, "text/plain")); g_assert_false (mct_app_filter_is_content_type_allowed (filter, "x-scheme-handler/http")); g_assert_true (mct_app_filter_is_user_installation_allowed (filter)); g_assert_false (mct_app_filter_is_system_installation_allowed (filter)); } /* Check that copying a filled #MctAppFilterBuilder works, and the copy can be * used to build a filter. */ static void test_app_filter_builder_copy_full (void) { g_autoptr(MctAppFilterBuilder) builder = mct_app_filter_builder_new (); g_autoptr(MctAppFilterBuilder) builder_copy = NULL; g_autoptr(MctAppFilter) filter = NULL; mct_app_filter_builder_blocklist_path (builder, "/bin/true"); mct_app_filter_builder_blocklist_content_type (builder, "x-scheme-handler/http"); mct_app_filter_builder_set_allow_user_installation (builder, FALSE); mct_app_filter_builder_set_allow_system_installation (builder, TRUE); builder_copy = mct_app_filter_builder_copy (builder); filter = mct_app_filter_builder_end (builder_copy); g_assert_true (mct_app_filter_is_enabled (filter)); g_assert_true (mct_app_filter_is_path_allowed (filter, "/bin/false")); g_assert_false (mct_app_filter_is_path_allowed (filter, "/bin/true")); g_assert_true (mct_app_filter_is_content_type_allowed (filter, "text/plain")); g_assert_false (mct_app_filter_is_content_type_allowed (filter, "x-scheme-handler/http")); g_assert_false (mct_app_filter_is_user_installation_allowed (filter)); g_assert_true (mct_app_filter_is_system_installation_allowed (filter)); } /* Check that various configurations of a #GAppInfo are accepted or rejected * as appropriate by mct_app_filter_is_appinfo_allowed(). */ static void test_app_filter_appinfo (void) { g_auto(MctAppFilterBuilder) builder = MCT_APP_FILTER_BUILDER_INIT (); g_autoptr(MctAppFilter) filter = NULL; const struct { gboolean expected_allowed; const gchar *key_file_data; } vectors[] = { /* Allowed by its path: */ { TRUE, "[Desktop Entry]\n" "Name=Some Name\n" "Exec=/bin/true\n" "Type=Application\n" }, /* Allowed by its path and its content type: */ { TRUE, "[Desktop Entry]\n" "Name=Some Name\n" "Exec=/bin/true\n" "Type=Application\n" "MimeType=text/plain\n" }, /* Allowed by its path, its content type and its flatpak ID: */ { TRUE, "[Desktop Entry]\n" "Name=Some Name\n" "Exec=/bin/true\n" "Type=Application\n" "MimeType=text/plain\n" "X-Flatpak=org.gnome.Nice\n" }, /* Allowed by its path, its content type and its flatpak ID: */ { TRUE, "[Desktop Entry]\n" "Name=Some Name\n" "Exec=/bin/true\n" "Type=Application\n" "MimeType=text/plain\n" "X-Flatpak=org.gnome.Nice\n" "X-Flatpak-RenamedFrom=\n" }, /* Allowed by its path, its content type, its flatpak ID and * its old flatpak IDs: */ { TRUE, "[Desktop Entry]\n" "Name=Some Name\n" "Exec=/bin/true\n" "Type=Application\n" "MimeType=text/plain\n" "X-Flatpak-RenamedFrom=org.gnome.OldNice\n" }, /* Allowed by its path, its content type, its flatpak ID and its old * flatpak IDs (which contain some spurious entries): */ { TRUE, "[Desktop Entry]\n" "Name=Some Name\n" "Exec=/bin/true\n" "Type=Application\n" "MimeType=text/plain\n" "X-Flatpak-RenamedFrom=org.gnome.OldNice;;;\n" }, /* Allowed by its path, its content type, its flatpak ID and * its old flatpak IDs: */ { TRUE, "[Desktop Entry]\n" "Name=Some Name\n" "Exec=/bin/true\n" "Type=Application\n" "MimeType=text/plain\n" "X-Flatpak-RenamedFrom=org.gnome.OldNice.desktop\n" }, /* Disallowed by its path: */ { FALSE, "[Desktop Entry]\n" "Name=Some Name\n" "Exec=/bin/false\n" "Type=Application\n" }, /* Allowed by its path, disallowed by its content type: */ { FALSE, "[Desktop Entry]\n" "Name=Some Name\n" "Exec=/bin/true\n" "Type=Application\n" "MimeType=x-scheme-handler/http\n" }, /* Allowed by its path, disallowed by its flatpak ID: */ { FALSE, "[Desktop Entry]\n" "Name=Some Name\n" "Exec=/bin/true\n" "Type=Application\n" "X-Flatpak=org.gnome.Nasty\n" }, /* Allowed by its path and current flatpak ID, but disallowed by an old * flatpak ID: */ { FALSE, "[Desktop Entry]\n" "Name=Some Name\n" "Exec=/bin/true\n" "Type=Application\n" "X-Flatpak=org.gnome.WasNasty\n" "X-Flatpak-RenamedFrom= org.gnome.OlderNasty ; org.gnome.Nasty ; \n" }, /* Allowed by its path and current flatpak ID, but disallowed by an old * flatpak ID: */ { FALSE, "[Desktop Entry]\n" "Name=Some Name\n" "Exec=/bin/true\n" "Type=Application\n" "X-Flatpak=org.gnome.WasNasty\n" "X-Flatpak-RenamedFrom=org.gnome.Nasty.desktop;\n" }, /* Allowed by its path, current flatpak ID, old flatpak ID, but * disabled by content type: */ { FALSE, "[Desktop Entry]\n" "Name=Some Name\n" "Exec=/bin/true\n" "Type=Application\n" "X-Flatpak=org.gnome.WasNasty\n" "X-Flatpak-RenamedFrom=org.gnome.OldNice\n" "MimeType=x-scheme-handler/http\n" }, }; mct_app_filter_builder_blocklist_path (&builder, "/bin/false"); mct_app_filter_builder_blocklist_flatpak_ref (&builder, "app/org.gnome.Nasty/x86_64/stable"); mct_app_filter_builder_blocklist_content_type (&builder, "x-scheme-handler/http"); filter = mct_app_filter_builder_end (&builder); for (gsize i = 0; i < G_N_ELEMENTS (vectors); i++) { g_autoptr(GKeyFile) key_file = NULL; g_autoptr(GError) local_error = NULL; g_autoptr(GAppInfo) appinfo = NULL; g_test_message ("Vector %" G_GSIZE_FORMAT ": %s", i, vectors[i].key_file_data); key_file = g_key_file_new (); g_key_file_load_from_data (key_file, vectors[i].key_file_data, -1, G_KEY_FILE_NONE, &local_error); g_assert_no_error (local_error); appinfo = G_APP_INFO (g_desktop_app_info_new_from_keyfile (key_file)); g_assert_nonnull (appinfo); if (vectors[i].expected_allowed) g_assert_true (mct_app_filter_is_appinfo_allowed (filter, appinfo)); else g_assert_false (mct_app_filter_is_appinfo_allowed (filter, appinfo)); } } /* Fixture for tests which interact with the accountsservice over D-Bus. The * D-Bus service is mocked up using @queue, which allows us to reply to D-Bus * calls from the code under test from within the test process. * * It exports one user object (for UID 500) and the manager object. The method * return values from UID 500 are up to the test in question, so it could be an * administrator, or non-administrator, have a restrictive or permissive app * filter, etc. */ typedef struct { GtDBusQueue *queue; /* (owned) */ uid_t valid_uid; uid_t missing_uid; MctManager *manager; /* (owned) */ } BusFixture; static void bus_set_up (BusFixture *fixture, gconstpointer test_data) { g_autoptr(GError) local_error = NULL; g_autofree gchar *object_path = NULL; fixture->valid_uid = 500; /* arbitrarily chosen */ fixture->missing_uid = 501; /* must be different from valid_uid and not exported */ fixture->queue = gt_dbus_queue_new (); gt_dbus_queue_connect (fixture->queue, &local_error); g_assert_no_error (local_error); gt_dbus_queue_own_name (fixture->queue, "org.freedesktop.Accounts"); object_path = g_strdup_printf ("/org/freedesktop/Accounts/User%u", fixture->valid_uid); gt_dbus_queue_export_object (fixture->queue, object_path, (GDBusInterfaceInfo *) &com_endlessm_parental_controls_app_filter_interface, &local_error); g_assert_no_error (local_error); gt_dbus_queue_export_object (fixture->queue, "/org/freedesktop/Accounts", (GDBusInterfaceInfo *) &org_freedesktop_accounts_interface, &local_error); g_assert_no_error (local_error); fixture->manager = mct_manager_new (gt_dbus_queue_get_client_connection (fixture->queue)); } static void bus_tear_down (BusFixture *fixture, gconstpointer test_data) { g_clear_object (&fixture->manager); gt_dbus_queue_disconnect (fixture->queue, TRUE); g_clear_pointer (&fixture->queue, gt_dbus_queue_free); } /* Helper #GAsyncReadyCallback which returns the #GAsyncResult in its @user_data. */ static void async_result_cb (GObject *obj, GAsyncResult *result, gpointer user_data) { GAsyncResult **result_out = (GAsyncResult **) user_data; g_assert_null (*result_out); *result_out = g_object_ref (result); } /* Generic mock accountsservice implementation which returns the properties * given in #GetAppFilterData.properties if queried for a UID matching * #GetAppFilterData.expected_uid. Intended to be used for writing ‘successful’ * mct_manager_get_app_filter() tests returning a variety of values. */ typedef struct { uid_t expected_uid; const gchar *properties; } GetAppFilterData; /* This is run in a worker thread. */ static void get_app_filter_server_cb (GtDBusQueue *queue, gpointer user_data) { const GetAppFilterData *data = user_data; g_autoptr(GDBusMethodInvocation) invocation1 = NULL; g_autoptr(GDBusMethodInvocation) invocation2 = NULL; g_autofree gchar *object_path = NULL; g_autoptr(GVariant) properties_variant = NULL; /* Handle the FindUserById() call. */ gint64 user_id; invocation1 = gt_dbus_queue_assert_pop_message (queue, "/org/freedesktop/Accounts", "org.freedesktop.Accounts", "FindUserById", "(x)", &user_id); g_assert_cmpint (user_id, ==, data->expected_uid); object_path = g_strdup_printf ("/org/freedesktop/Accounts/User%u", (uid_t) user_id); g_dbus_method_invocation_return_value (invocation1, g_variant_new ("(o)", object_path)); /* Handle the Properties.GetAll() call and return some arbitrary, valid values * for the given user. */ const gchar *property_interface; invocation2 = gt_dbus_queue_assert_pop_message (queue, object_path, "org.freedesktop.DBus.Properties", "GetAll", "(&s)", &property_interface); g_assert_cmpstr (property_interface, ==, "com.endlessm.ParentalControls.AppFilter"); properties_variant = g_variant_ref_sink (g_variant_new_parsed (data->properties)); g_dbus_method_invocation_return_value (invocation2, g_variant_new_tuple (&properties_variant, 1)); } /* Test that getting an #MctAppFilter from the mock D-Bus service works. The * @test_data is a boolean value indicating whether to do the call * synchronously (%FALSE) or asynchronously (%TRUE). * * The mock D-Bus replies are generated in get_app_filter_server_cb(), which is * used for both synchronous and asynchronous calls. */ static void test_app_filter_bus_get (BusFixture *fixture, gconstpointer test_data) { g_autoptr(MctAppFilter) app_filter = NULL; g_autoptr(GError) local_error = NULL; gboolean test_async = GPOINTER_TO_UINT (test_data); const GetAppFilterData get_app_filter_data = { .expected_uid = fixture->valid_uid, .properties = "{" "'AllowUserInstallation': ," "'AllowSystemInstallation': ," "'AppFilter': <(false, ['app/org.gnome.Builder/x86_64/stable'])>," "'OarsFilter': <('oars-1.1', { 'violence-bloodshed': 'mild' })>" "}" }; gt_dbus_queue_set_server_func (fixture->queue, get_app_filter_server_cb, (gpointer) &get_app_filter_data); if (test_async) { g_autoptr(GAsyncResult) result = NULL; mct_manager_get_app_filter_async (fixture->manager, fixture->valid_uid, MCT_MANAGER_GET_VALUE_FLAGS_NONE, NULL, async_result_cb, &result); while (result == NULL) g_main_context_iteration (NULL, TRUE); app_filter = mct_manager_get_app_filter_finish (fixture->manager, result, &local_error); } else { app_filter = mct_manager_get_app_filter (fixture->manager, fixture->valid_uid, MCT_MANAGER_GET_VALUE_FLAGS_NONE, NULL, &local_error); } g_assert_no_error (local_error); g_assert_nonnull (app_filter); /* Check the app filter properties. */ g_assert_cmpuint (mct_app_filter_get_user_id (app_filter), ==, fixture->valid_uid); g_assert_true (mct_app_filter_is_enabled (app_filter)); g_assert_false (mct_app_filter_is_flatpak_app_allowed (app_filter, "org.gnome.Builder")); g_assert_true (mct_app_filter_is_flatpak_app_allowed (app_filter, "org.gnome.Chess")); } /* Test that getting an #MctAppFilter containing a allowlist from the mock D-Bus * service works, and that the #MctAppFilter methods handle the allowlist * correctly. * * The mock D-Bus replies are generated in get_app_filter_server_cb(). */ static void test_app_filter_bus_get_allowlist (BusFixture *fixture, gconstpointer test_data) { g_autoptr(MctAppFilter) app_filter = NULL; g_autoptr(GError) local_error = NULL; const GetAppFilterData get_app_filter_data = { .expected_uid = fixture->valid_uid, .properties = "{" "'AllowUserInstallation': ," "'AllowSystemInstallation': ," "'AppFilter': <(true, [" "'app/org.gnome.Allowlisted1/x86_64/stable'," "'app/org.gnome.Allowlisted2/x86_64/stable'," "'/usr/bin/true'," "'text/plain'" "])>," "'OarsFilter': <('oars-1.1', @a{ss} {})>" "}" }; gt_dbus_queue_set_server_func (fixture->queue, get_app_filter_server_cb, (gpointer) &get_app_filter_data); app_filter = mct_manager_get_app_filter (fixture->manager, fixture->valid_uid, MCT_MANAGER_GET_VALUE_FLAGS_NONE, NULL, &local_error); g_assert_no_error (local_error); g_assert_nonnull (app_filter); /* Check the app filter properties. The returned filter is a allowlist, * whereas typically a blocklist is returned. */ g_assert_cmpuint (mct_app_filter_get_user_id (app_filter), ==, fixture->valid_uid); g_assert_true (mct_app_filter_is_enabled (app_filter)); g_assert_false (mct_app_filter_is_flatpak_app_allowed (app_filter, "org.gnome.Builder")); g_assert_true (mct_app_filter_is_flatpak_app_allowed (app_filter, "org.gnome.Allowlisted1")); g_assert_true (mct_app_filter_is_flatpak_app_allowed (app_filter, "org.gnome.Allowlisted2")); g_assert_true (mct_app_filter_is_flatpak_ref_allowed (app_filter, "app/org.gnome.Allowlisted1/x86_64/stable")); g_assert_false (mct_app_filter_is_flatpak_ref_allowed (app_filter, "app/org.gnome.Allowlisted1/x86_64/unknown")); g_assert_true (mct_app_filter_is_path_allowed (app_filter, "/usr/bin/true")); g_assert_false (mct_app_filter_is_path_allowed (app_filter, "/usr/bin/false")); g_assert_true (mct_app_filter_is_content_type_allowed (app_filter, "text/plain")); g_assert_false (mct_app_filter_is_content_type_allowed (app_filter, "x-scheme-handler/http")); } /* Test that getting an #MctAppFilter containing all possible OARS values from * the mock D-Bus service works, and that the #MctAppFilter methods handle them * correctly. * * The mock D-Bus replies are generated in get_app_filter_server_cb(). */ static void test_app_filter_bus_get_all_oars_values (BusFixture *fixture, gconstpointer test_data) { g_autoptr(MctAppFilter) app_filter = NULL; g_autoptr(GError) local_error = NULL; const GetAppFilterData get_app_filter_data = { .expected_uid = fixture->valid_uid, .properties = "{" "'AllowUserInstallation': ," "'AllowSystemInstallation': ," "'AppFilter': <(false, @as [])>," "'OarsFilter': <('oars-1.1', {" "'violence-bloodshed': 'none'," "'violence-sexual': 'mild'," "'violence-fantasy': 'moderate'," "'violence-realistic': 'intense'," "'language-profanity': 'other'" "})>" "}" }; gt_dbus_queue_set_server_func (fixture->queue, get_app_filter_server_cb, (gpointer) &get_app_filter_data); app_filter = mct_manager_get_app_filter (fixture->manager, fixture->valid_uid, MCT_MANAGER_GET_VALUE_FLAGS_NONE, NULL, &local_error); g_assert_no_error (local_error); g_assert_nonnull (app_filter); /* Check the OARS filter properties. Each OARS value should have been parsed * correctly, except for the unknown `other` one. */ g_assert_cmpuint (mct_app_filter_get_user_id (app_filter), ==, fixture->valid_uid); g_assert_true (mct_app_filter_is_enabled (app_filter)); g_assert_cmpint (mct_app_filter_get_oars_value (app_filter, "violence-bloodshed"), ==, MCT_APP_FILTER_OARS_VALUE_NONE); g_assert_cmpint (mct_app_filter_get_oars_value (app_filter, "violence-sexual"), ==, MCT_APP_FILTER_OARS_VALUE_MILD); g_assert_cmpint (mct_app_filter_get_oars_value (app_filter, "violence-fantasy"), ==, MCT_APP_FILTER_OARS_VALUE_MODERATE); g_assert_cmpint (mct_app_filter_get_oars_value (app_filter, "violence-realistic"), ==, MCT_APP_FILTER_OARS_VALUE_INTENSE); g_assert_cmpint (mct_app_filter_get_oars_value (app_filter, "language-profanity"), ==, MCT_APP_FILTER_OARS_VALUE_UNKNOWN); g_assert_cmpint (mct_app_filter_get_oars_value (app_filter, "unlisted-category"), ==, MCT_APP_FILTER_OARS_VALUE_UNKNOWN); } /* Test that getting an #MctAppFilter containing only an `AppFilter` property * from the mock D-Bus service works, and that the #MctAppFilter methods use * appropriate defaults. * * The mock D-Bus replies are generated in get_app_filter_server_cb(). */ static void test_app_filter_bus_get_defaults (BusFixture *fixture, gconstpointer test_data) { g_autoptr(MctAppFilter) app_filter = NULL; g_autoptr(GError) local_error = NULL; const GetAppFilterData get_app_filter_data = { .expected_uid = fixture->valid_uid, .properties = "{" "'AppFilter': <(false, @as [])>" "}" }; g_autofree const gchar **oars_sections = NULL; gt_dbus_queue_set_server_func (fixture->queue, get_app_filter_server_cb, (gpointer) &get_app_filter_data); app_filter = mct_manager_get_app_filter (fixture->manager, fixture->valid_uid, MCT_MANAGER_GET_VALUE_FLAGS_NONE, NULL, &local_error); g_assert_no_error (local_error); g_assert_nonnull (app_filter); /* Check the default values for the properties. */ g_assert_cmpuint (mct_app_filter_get_user_id (app_filter), ==, fixture->valid_uid); g_assert_false (mct_app_filter_is_enabled (app_filter)); oars_sections = mct_app_filter_get_oars_sections (app_filter); g_assert_cmpuint (g_strv_length ((gchar **) oars_sections), ==, 0); g_assert_cmpint (mct_app_filter_get_oars_value (app_filter, "violence-bloodshed"), ==, MCT_APP_FILTER_OARS_VALUE_UNKNOWN); g_assert_true (mct_app_filter_is_user_installation_allowed (app_filter)); g_assert_false (mct_app_filter_is_system_installation_allowed (app_filter)); } /* Test that mct_manager_get_app_filter() returns an appropriate error if the * mock D-Bus service reports that the given user cannot be found. * * The mock D-Bus replies are generated inline. */ static void test_app_filter_bus_get_error_invalid_user (BusFixture *fixture, gconstpointer test_data) { g_autoptr(GAsyncResult) result = NULL; g_autoptr(GError) local_error = NULL; g_autoptr(GDBusMethodInvocation) invocation = NULL; g_autofree gchar *error_message = NULL; g_autoptr(MctAppFilter) app_filter = NULL; mct_manager_get_app_filter_async (fixture->manager, fixture->missing_uid, MCT_MANAGER_GET_VALUE_FLAGS_NONE, NULL, async_result_cb, &result); /* Handle the FindUserById() call and claim the user doesn’t exist. */ gint64 user_id; invocation = gt_dbus_queue_assert_pop_message (fixture->queue, "/org/freedesktop/Accounts", "org.freedesktop.Accounts", "FindUserById", "(x)", &user_id); g_assert_cmpint (user_id, ==, fixture->missing_uid); error_message = g_strdup_printf ("Failed to look up user with uid %u.", fixture->missing_uid); g_dbus_method_invocation_return_dbus_error (invocation, "org.freedesktop.Accounts.Error.Failed", error_message); /* Get the get_app_filter() result. */ while (result == NULL) g_main_context_iteration (NULL, TRUE); app_filter = mct_manager_get_app_filter_finish (fixture->manager, result, &local_error); g_assert_error (local_error, MCT_MANAGER_ERROR, MCT_MANAGER_ERROR_INVALID_USER); g_assert_null (app_filter); } /* Test that mct_manager_get_app_filter() returns an appropriate error if the * mock D-Bus service reports that the properties of the given user can’t be * accessed due to permissions. * * The mock D-Bus replies are generated inline. */ static void test_app_filter_bus_get_error_permission_denied (BusFixture *fixture, gconstpointer test_data) { g_autoptr(GAsyncResult) result = NULL; g_autoptr(GError) local_error = NULL; g_autoptr(GDBusMethodInvocation) invocation1 = NULL; g_autoptr(GDBusMethodInvocation) invocation2 = NULL; g_autofree gchar *object_path = NULL; g_autoptr(MctAppFilter) app_filter = NULL; mct_manager_get_app_filter_async (fixture->manager, fixture->valid_uid, MCT_MANAGER_GET_VALUE_FLAGS_NONE, NULL, async_result_cb, &result); /* Handle the FindUserById() call. */ gint64 user_id; invocation1 = gt_dbus_queue_assert_pop_message (fixture->queue, "/org/freedesktop/Accounts", "org.freedesktop.Accounts", "FindUserById", "(x)", &user_id); g_assert_cmpint (user_id, ==, fixture->valid_uid); object_path = g_strdup_printf ("/org/freedesktop/Accounts/User%u", (uid_t) user_id); g_dbus_method_invocation_return_value (invocation1, g_variant_new ("(o)", object_path)); /* Handle the Properties.GetAll() call and return a permission denied error. */ const gchar *property_interface; invocation2 = gt_dbus_queue_assert_pop_message (fixture->queue, object_path, "org.freedesktop.DBus.Properties", "GetAll", "(&s)", &property_interface); g_assert_cmpstr (property_interface, ==, "com.endlessm.ParentalControls.AppFilter"); g_dbus_method_invocation_return_dbus_error (invocation2, "org.freedesktop.Accounts.Error.PermissionDenied", "Not authorized"); /* Get the get_app_filter() result. */ while (result == NULL) g_main_context_iteration (NULL, TRUE); app_filter = mct_manager_get_app_filter_finish (fixture->manager, result, &local_error); g_assert_error (local_error, MCT_MANAGER_ERROR, MCT_MANAGER_ERROR_PERMISSION_DENIED); g_assert_null (app_filter); } /* Test that mct_manager_get_app_filter() returns an appropriate error if the * mock D-Bus service replies with no app filter properties (implying that it * hasn’t sent the property values because of permissions). * * The mock D-Bus replies are generated inline. */ static void test_app_filter_bus_get_error_permission_denied_missing (BusFixture *fixture, gconstpointer test_data) { g_autoptr(GAsyncResult) result = NULL; g_autoptr(GError) local_error = NULL; g_autoptr(GDBusMethodInvocation) invocation1 = NULL; g_autoptr(GDBusMethodInvocation) invocation2 = NULL; g_autofree gchar *object_path = NULL; g_autoptr(MctAppFilter) app_filter = NULL; mct_manager_get_app_filter_async (fixture->manager, fixture->valid_uid, MCT_MANAGER_GET_VALUE_FLAGS_NONE, NULL, async_result_cb, &result); /* Handle the FindUserById() call. */ gint64 user_id; invocation1 = gt_dbus_queue_assert_pop_message (fixture->queue, "/org/freedesktop/Accounts", "org.freedesktop.Accounts", "FindUserById", "(x)", &user_id); g_assert_cmpint (user_id, ==, fixture->valid_uid); object_path = g_strdup_printf ("/org/freedesktop/Accounts/User%u", (uid_t) user_id); g_dbus_method_invocation_return_value (invocation1, g_variant_new ("(o)", object_path)); /* Handle the Properties.GetAll() call and return an empty array due to not * having permission to access the properties. The code actually keys off the * presence of the AppFilter property, since that was the first one to be * added. */ const gchar *property_interface; invocation2 = gt_dbus_queue_assert_pop_message (fixture->queue, object_path, "org.freedesktop.DBus.Properties", "GetAll", "(&s)", &property_interface); g_assert_cmpstr (property_interface, ==, "com.endlessm.ParentalControls.AppFilter"); g_dbus_method_invocation_return_value (invocation2, g_variant_new ("(a{sv})", NULL)); /* Get the get_app_filter() result. */ while (result == NULL) g_main_context_iteration (NULL, TRUE); app_filter = mct_manager_get_app_filter_finish (fixture->manager, result, &local_error); g_assert_error (local_error, MCT_MANAGER_ERROR, MCT_MANAGER_ERROR_PERMISSION_DENIED); g_assert_null (app_filter); } /* Test that mct_manager_get_app_filter() returns an error if the mock D-Bus * service reports an unrecognised error. * * The mock D-Bus replies are generated inline. */ static void test_app_filter_bus_get_error_unknown (BusFixture *fixture, gconstpointer test_data) { g_autoptr(GAsyncResult) result = NULL; g_autoptr(GError) local_error = NULL; g_autoptr(GDBusMethodInvocation) invocation = NULL; g_autoptr(MctAppFilter) app_filter = NULL; mct_manager_get_app_filter_async (fixture->manager, fixture->valid_uid, MCT_MANAGER_GET_VALUE_FLAGS_NONE, NULL, async_result_cb, &result); /* Handle the FindUserById() call and return a bogus error. */ gint64 user_id; invocation = gt_dbus_queue_assert_pop_message (fixture->queue, "/org/freedesktop/Accounts", "org.freedesktop.Accounts", "FindUserById", "(x)", &user_id); g_assert_cmpint (user_id, ==, fixture->valid_uid); g_dbus_method_invocation_return_dbus_error (invocation, "org.freedesktop.Accounts.Error.NewAndInterestingError", "This is a fake error message " "which libmalcontent " "will never have seen before, " "but must still handle correctly"); /* Get the get_app_filter() result. */ while (result == NULL) g_main_context_iteration (NULL, TRUE); app_filter = mct_manager_get_app_filter_finish (fixture->manager, result, &local_error); /* We don’t actually care what error is actually used here. */ g_assert_error (local_error, G_IO_ERROR, G_IO_ERROR_DBUS_ERROR); g_assert_null (app_filter); } /* Test that mct_manager_get_app_filter() returns an error if the mock D-Bus * service reports an unknown interface, which means that parental controls are * not installed properly. * * The mock D-Bus replies are generated inline. */ static void test_app_filter_bus_get_error_disabled (BusFixture *fixture, gconstpointer test_data) { g_autoptr(GAsyncResult) result = NULL; g_autoptr(GError) local_error = NULL; g_autoptr(GDBusMethodInvocation) invocation1 = NULL; g_autoptr(GDBusMethodInvocation) invocation2 = NULL; g_autofree gchar *object_path = NULL; g_autoptr(MctAppFilter) app_filter = NULL; mct_manager_get_app_filter_async (fixture->manager, fixture->valid_uid, MCT_MANAGER_GET_VALUE_FLAGS_NONE, NULL, async_result_cb, &result); /* Handle the FindUserById() call. */ gint64 user_id; invocation1 = gt_dbus_queue_assert_pop_message (fixture->queue, "/org/freedesktop/Accounts", "org.freedesktop.Accounts", "FindUserById", "(x)", &user_id); g_assert_cmpint (user_id, ==, fixture->valid_uid); object_path = g_strdup_printf ("/org/freedesktop/Accounts/User%u", (uid_t) user_id); g_dbus_method_invocation_return_value (invocation1, g_variant_new ("(o)", object_path)); /* Handle the Properties.GetAll() call and return an InvalidArgs error. */ const gchar *property_interface; invocation2 = gt_dbus_queue_assert_pop_message (fixture->queue, object_path, "org.freedesktop.DBus.Properties", "GetAll", "(&s)", &property_interface); g_assert_cmpstr (property_interface, ==, "com.endlessm.ParentalControls.AppFilter"); g_dbus_method_invocation_return_dbus_error (invocation2, "org.freedesktop.DBus.Error.InvalidArgs", "No such interface " "“com.endlessm.ParentalControls.AppFilter”"); /* Get the get_app_filter() result. */ while (result == NULL) g_main_context_iteration (NULL, TRUE); app_filter = mct_manager_get_app_filter_finish (fixture->manager, result, &local_error); g_assert_error (local_error, MCT_MANAGER_ERROR, MCT_MANAGER_ERROR_DISABLED); g_assert_null (app_filter); } /* Generic mock accountsservice implementation which handles properties being * set on a mock User object, and compares their values to the given * `expected_*` ones. * * If @error_index is non-negative, it gives the index of a Set() call to return * the given @dbus_error_name and @dbus_error_message from, rather than * accepting the property value from the caller. If @error_index is negative, * all Set() calls will be accepted. */ typedef struct { uid_t expected_uid; /* All GVariants in text format: */ const gchar *expected_app_filter_value; /* (nullable) */ const gchar *expected_oars_filter_value; /* (nullable) */ const gchar *expected_allow_user_installation_value; /* (nullable) */ const gchar *expected_allow_system_installation_value; /* (nullable) */ gint error_index; /* -1 to return no error */ const gchar *dbus_error_name; /* NULL to return no error */ const gchar *dbus_error_message; /* NULL to return no error */ } SetAppFilterData; static const gchar * set_app_filter_data_get_expected_property_value (const SetAppFilterData *data, const gchar *property_name) { if (g_str_equal (property_name, "AppFilter")) return data->expected_app_filter_value; else if (g_str_equal (property_name, "OarsFilter")) return data->expected_oars_filter_value; else if (g_str_equal (property_name, "AllowUserInstallation")) return data->expected_allow_user_installation_value; else if (g_str_equal (property_name, "AllowSystemInstallation")) return data->expected_allow_system_installation_value; else g_assert_not_reached (); } /* This is run in a worker thread. */ static void set_app_filter_server_cb (GtDBusQueue *queue, gpointer user_data) { const SetAppFilterData *data = user_data; g_autoptr(GDBusMethodInvocation) find_invocation = NULL; g_autofree gchar *object_path = NULL; g_assert ((data->error_index == -1) == (data->dbus_error_name == NULL)); g_assert ((data->dbus_error_name == NULL) == (data->dbus_error_message == NULL)); /* Handle the FindUserById() call. */ gint64 user_id; find_invocation = gt_dbus_queue_assert_pop_message (queue, "/org/freedesktop/Accounts", "org.freedesktop.Accounts", "FindUserById", "(x)", &user_id); g_assert_cmpint (user_id, ==, data->expected_uid); object_path = g_strdup_printf ("/org/freedesktop/Accounts/User%u", (uid_t) user_id); g_dbus_method_invocation_return_value (find_invocation, g_variant_new ("(o)", object_path)); /* Handle the Properties.Set() calls. */ const gchar *expected_properties[] = { "AppFilter", "OarsFilter", "AllowUserInstallation", "AllowSystemInstallation", }; gsize i; for (i = 0; i < G_N_ELEMENTS (expected_properties); i++) { const gchar *property_interface; const gchar *property_name; g_autoptr(GVariant) property_value = NULL; g_autoptr(GDBusMethodInvocation) property_invocation = NULL; g_autoptr(GVariant) expected_property_value = NULL; property_invocation = gt_dbus_queue_assert_pop_message (queue, object_path, "org.freedesktop.DBus.Properties", "Set", "(&s&sv)", &property_interface, &property_name, &property_value); g_assert_cmpstr (property_interface, ==, "com.endlessm.ParentalControls.AppFilter"); g_assert_cmpstr (property_name, ==, expected_properties[i]); if (data->error_index >= 0 && (gsize) data->error_index == i) { g_dbus_method_invocation_return_dbus_error (property_invocation, data->dbus_error_name, data->dbus_error_message); break; } else { expected_property_value = g_variant_new_parsed (set_app_filter_data_get_expected_property_value (data, property_name)); g_assert_cmpvariant (property_value, expected_property_value); g_dbus_method_invocation_return_value (property_invocation, NULL); } } } /* Test that setting an #MctAppFilter on the mock D-Bus service works. The * @test_data is a boolean value indicating whether to do the call * synchronously (%FALSE) or asynchronously (%TRUE). * * The mock D-Bus replies are generated in set_app_filter_server_cb(), which is * used for both synchronous and asynchronous calls. */ static void test_app_filter_bus_set (BusFixture *fixture, gconstpointer test_data) { gboolean success; g_auto(MctAppFilterBuilder) builder = MCT_APP_FILTER_BUILDER_INIT (); g_autoptr(MctAppFilter) app_filter = NULL; g_autoptr(GError) local_error = NULL; gboolean test_async = GPOINTER_TO_UINT (test_data); const SetAppFilterData set_app_filter_data = { .expected_uid = fixture->valid_uid, .expected_app_filter_value = "(false, ['/usr/bin/false', '/usr/bin/banned', 'app/org.gnome.Nasty/x86_64/stable', 'x-scheme-handler/http'])", .expected_oars_filter_value = "('oars-1.1', { 'violence-fantasy': 'intense' })", .expected_allow_user_installation_value = "true", .expected_allow_system_installation_value = "true", .error_index = -1, }; /* Build an app filter. */ mct_app_filter_builder_blocklist_path (&builder, "/usr/bin/false"); mct_app_filter_builder_blocklist_path (&builder, "/usr/bin/banned"); mct_app_filter_builder_blocklist_flatpak_ref (&builder, "app/org.gnome.Nasty/x86_64/stable"); mct_app_filter_builder_blocklist_content_type (&builder, "x-scheme-handler/http"); mct_app_filter_builder_set_oars_value (&builder, "violence-fantasy", MCT_APP_FILTER_OARS_VALUE_INTENSE); mct_app_filter_builder_set_allow_user_installation (&builder, TRUE); mct_app_filter_builder_set_allow_system_installation (&builder, TRUE); app_filter = mct_app_filter_builder_end (&builder); /* Set the mock service function and set the filter. */ gt_dbus_queue_set_server_func (fixture->queue, set_app_filter_server_cb, (gpointer) &set_app_filter_data); if (test_async) { g_autoptr(GAsyncResult) result = NULL; mct_manager_set_app_filter_async (fixture->manager, fixture->valid_uid, app_filter, MCT_MANAGER_SET_VALUE_FLAGS_NONE, NULL, async_result_cb, &result); while (result == NULL) g_main_context_iteration (NULL, TRUE); success = mct_manager_set_app_filter_finish (fixture->manager, result, &local_error); } else { success = mct_manager_set_app_filter (fixture->manager, fixture->valid_uid, app_filter, MCT_MANAGER_SET_VALUE_FLAGS_NONE, NULL, &local_error); } g_assert_no_error (local_error); g_assert_true (success); } /* Test that mct_manager__set_app_filter() returns an appropriate error if the * mock D-Bus service reports that the given user cannot be found. * * The mock D-Bus replies are generated inline. */ static void test_app_filter_bus_set_error_invalid_user (BusFixture *fixture, gconstpointer test_data) { gboolean success; g_auto(MctAppFilterBuilder) builder = MCT_APP_FILTER_BUILDER_INIT (); g_autoptr(MctAppFilter) app_filter = NULL; g_autoptr(GAsyncResult) result = NULL; g_autoptr(GError) local_error = NULL; g_autoptr(GDBusMethodInvocation) invocation = NULL; g_autofree gchar *error_message = NULL; /* Use the default app filter. */ app_filter = mct_app_filter_builder_end (&builder); mct_manager_set_app_filter_async (fixture->manager, fixture->missing_uid, app_filter, MCT_MANAGER_SET_VALUE_FLAGS_NONE, NULL, async_result_cb, &result); /* Handle the FindUserById() call and claim the user doesn’t exist. */ gint64 user_id; invocation = gt_dbus_queue_assert_pop_message (fixture->queue, "/org/freedesktop/Accounts", "org.freedesktop.Accounts", "FindUserById", "(x)", &user_id); g_assert_cmpint (user_id, ==, fixture->missing_uid); error_message = g_strdup_printf ("Failed to look up user with uid %u.", fixture->missing_uid); g_dbus_method_invocation_return_dbus_error (invocation, "org.freedesktop.Accounts.Error.Failed", error_message); /* Get the set_app_filter() result. */ while (result == NULL) g_main_context_iteration (NULL, TRUE); success = mct_manager_set_app_filter_finish (fixture->manager, result, &local_error); g_assert_error (local_error, MCT_MANAGER_ERROR, MCT_MANAGER_ERROR_INVALID_USER); g_assert_false (success); } /* Test that mct_manager_set_app_filter() returns an appropriate error if the * mock D-Bus service replies with a permission denied error when setting * properties. * * The mock D-Bus replies are generated in set_app_filter_server_cb(). */ static void test_app_filter_bus_set_error_permission_denied (BusFixture *fixture, gconstpointer test_data) { gboolean success; g_auto(MctAppFilterBuilder) builder = MCT_APP_FILTER_BUILDER_INIT (); g_autoptr(MctAppFilter) app_filter = NULL; g_autoptr(GError) local_error = NULL; const SetAppFilterData set_app_filter_data = { .expected_uid = fixture->valid_uid, .error_index = 0, .dbus_error_name = "org.freedesktop.Accounts.Error.PermissionDenied", .dbus_error_message = "Not authorized", }; /* Use the default app filter. */ app_filter = mct_app_filter_builder_end (&builder); gt_dbus_queue_set_server_func (fixture->queue, set_app_filter_server_cb, (gpointer) &set_app_filter_data); success = mct_manager_set_app_filter (fixture->manager, fixture->valid_uid, app_filter, MCT_MANAGER_SET_VALUE_FLAGS_NONE, NULL, &local_error); g_assert_error (local_error, MCT_MANAGER_ERROR, MCT_MANAGER_ERROR_PERMISSION_DENIED); g_assert_false (success); } /* Test that mct_manager_set_app_filter() returns an error if the mock D-Bus * service reports an unrecognised error. * * The mock D-Bus replies are generated in set_app_filter_server_cb(). */ static void test_app_filter_bus_set_error_unknown (BusFixture *fixture, gconstpointer test_data) { gboolean success; g_auto(MctAppFilterBuilder) builder = MCT_APP_FILTER_BUILDER_INIT (); g_autoptr(MctAppFilter) app_filter = NULL; g_autoptr(GError) local_error = NULL; const SetAppFilterData set_app_filter_data = { .expected_uid = fixture->valid_uid, .error_index = 0, .dbus_error_name = "org.freedesktop.Accounts.Error.NewAndInterestingError", .dbus_error_message = "This is a fake error message which " "libmalcontent will never have seen " "before, but must still handle correctly", }; /* Use the default app filter. */ app_filter = mct_app_filter_builder_end (&builder); gt_dbus_queue_set_server_func (fixture->queue, set_app_filter_server_cb, (gpointer) &set_app_filter_data); success = mct_manager_set_app_filter (fixture->manager, fixture->valid_uid, app_filter, MCT_MANAGER_SET_VALUE_FLAGS_NONE, NULL, &local_error); g_assert_error (local_error, G_IO_ERROR, G_IO_ERROR_DBUS_ERROR); g_assert_false (success); } /* Test that mct_manager_set_app_filter() returns an error if the mock D-Bus * service reports an InvalidArgs error with a given one of its Set() calls. * * @test_data contains a property index encoded with GINT_TO_POINTER(), * indicating which Set() call to return the error on, since the calls are made * in series. * * The mock D-Bus replies are generated in set_app_filter_server_cb(). */ static void test_app_filter_bus_set_error_invalid_property (BusFixture *fixture, gconstpointer test_data) { gboolean success; g_auto(MctAppFilterBuilder) builder = MCT_APP_FILTER_BUILDER_INIT (); g_autoptr(MctAppFilter) app_filter = NULL; g_autoptr(GError) local_error = NULL; const SetAppFilterData set_app_filter_data = { .expected_uid = fixture->valid_uid, .expected_app_filter_value = "(false, @as [])", .expected_oars_filter_value = "('oars-1.1', @a{ss} [])", .expected_allow_user_installation_value = "true", .expected_allow_system_installation_value = "false", .error_index = GPOINTER_TO_INT (test_data), .dbus_error_name = "org.freedesktop.DBus.Error.InvalidArgs", .dbus_error_message = "Mumble mumble something wrong with the filter value", }; /* Use the default app filter. */ app_filter = mct_app_filter_builder_end (&builder); gt_dbus_queue_set_server_func (fixture->queue, set_app_filter_server_cb, (gpointer) &set_app_filter_data); success = mct_manager_set_app_filter (fixture->manager, fixture->valid_uid, app_filter, MCT_MANAGER_SET_VALUE_FLAGS_NONE, NULL, &local_error); g_assert_error (local_error, G_DBUS_ERROR, G_DBUS_ERROR_INVALID_ARGS); g_assert_false (success); } int main (int argc, char **argv) { setlocale (LC_ALL, ""); g_test_init (&argc, &argv, NULL); g_test_add_func ("/app-filter/error-quark", test_app_filter_error_quark); g_test_add_func ("/app-filter/types", test_app_filter_types); g_test_add_func ("/app-filter/refs", test_app_filter_refs); g_test_add_func ("/app-filter/serialize", test_app_filter_serialize); g_test_add_func ("/app-filter/deserialize", test_app_filter_deserialize); g_test_add_func ("/app-filter/deserialize/invalid", test_app_filter_deserialize_invalid); g_test_add_func ("/app-filter/equal", test_app_filter_equal); g_test_add_func ("/app-filter/is-enabled", test_app_filter_is_enabled); g_test_add ("/app-filter/builder/stack/non-empty", BuilderFixture, NULL, builder_set_up_stack, test_app_filter_builder_non_empty, builder_tear_down_stack); g_test_add ("/app-filter/builder/stack/empty", BuilderFixture, NULL, builder_set_up_stack, test_app_filter_builder_empty, builder_tear_down_stack); g_test_add ("/app-filter/builder/stack2/non-empty", BuilderFixture, NULL, builder_set_up_stack2, test_app_filter_builder_non_empty, builder_tear_down_stack2); g_test_add ("/app-filter/builder/stack2/empty", BuilderFixture, NULL, builder_set_up_stack2, test_app_filter_builder_empty, builder_tear_down_stack2); g_test_add ("/app-filter/builder/heap/non-empty", BuilderFixture, NULL, builder_set_up_heap, test_app_filter_builder_non_empty, builder_tear_down_heap); g_test_add ("/app-filter/builder/heap/empty", BuilderFixture, NULL, builder_set_up_heap, test_app_filter_builder_empty, builder_tear_down_heap); g_test_add_func ("/app-filter/builder/copy/empty", test_app_filter_builder_copy_empty); g_test_add_func ("/app-filter/builder/copy/full", test_app_filter_builder_copy_full); g_test_add_func ("/app-filter/appinfo", test_app_filter_appinfo); g_test_add ("/app-filter/bus/get/async", BusFixture, GUINT_TO_POINTER (TRUE), bus_set_up, test_app_filter_bus_get, bus_tear_down); g_test_add ("/app-filter/bus/get/sync", BusFixture, GUINT_TO_POINTER (FALSE), bus_set_up, test_app_filter_bus_get, bus_tear_down); g_test_add ("/app-filter/bus/get/allowlist", BusFixture, NULL, bus_set_up, test_app_filter_bus_get_allowlist, bus_tear_down); g_test_add ("/app-filter/bus/get/all-oars-values", BusFixture, NULL, bus_set_up, test_app_filter_bus_get_all_oars_values, bus_tear_down); g_test_add ("/app-filter/bus/get/defaults", BusFixture, NULL, bus_set_up, test_app_filter_bus_get_defaults, bus_tear_down); g_test_add ("/app-filter/bus/get/error/invalid-user", BusFixture, NULL, bus_set_up, test_app_filter_bus_get_error_invalid_user, bus_tear_down); g_test_add ("/app-filter/bus/get/error/permission-denied", BusFixture, NULL, bus_set_up, test_app_filter_bus_get_error_permission_denied, bus_tear_down); g_test_add ("/app-filter/bus/get/error/permission-denied-missing", BusFixture, NULL, bus_set_up, test_app_filter_bus_get_error_permission_denied_missing, bus_tear_down); g_test_add ("/app-filter/bus/get/error/unknown", BusFixture, NULL, bus_set_up, test_app_filter_bus_get_error_unknown, bus_tear_down); g_test_add ("/app-filter/bus/get/error/disabled", BusFixture, NULL, bus_set_up, test_app_filter_bus_get_error_disabled, bus_tear_down); g_test_add ("/app-filter/bus/set/async", BusFixture, GUINT_TO_POINTER (TRUE), bus_set_up, test_app_filter_bus_set, bus_tear_down); g_test_add ("/app-filter/bus/set/sync", BusFixture, GUINT_TO_POINTER (FALSE), bus_set_up, test_app_filter_bus_set, bus_tear_down); g_test_add ("/app-filter/bus/set/error/invalid-user", BusFixture, NULL, bus_set_up, test_app_filter_bus_set_error_invalid_user, bus_tear_down); g_test_add ("/app-filter/bus/set/error/permission-denied", BusFixture, NULL, bus_set_up, test_app_filter_bus_set_error_permission_denied, bus_tear_down); g_test_add ("/app-filter/bus/set/error/unknown", BusFixture, NULL, bus_set_up, test_app_filter_bus_set_error_unknown, bus_tear_down); g_test_add ("/app-filter/bus/set/error/invalid-property/app-filter", BusFixture, GINT_TO_POINTER (0), bus_set_up, test_app_filter_bus_set_error_invalid_property, bus_tear_down); g_test_add ("/app-filter/bus/set/error/invalid-property/oars-filter", BusFixture, GINT_TO_POINTER (1), bus_set_up, test_app_filter_bus_set_error_invalid_property, bus_tear_down); g_test_add ("/app-filter/bus/set/error/invalid-property/allow-user-installation", BusFixture, GINT_TO_POINTER (2), bus_set_up, test_app_filter_bus_set_error_invalid_property, bus_tear_down); g_test_add ("/app-filter/bus/set/error/invalid-property/allow-system-installation", BusFixture, GINT_TO_POINTER (3), bus_set_up, test_app_filter_bus_set_error_invalid_property, bus_tear_down); return g_test_run (); } com.endlessm.ParentalControls.AppFilter.xml000066400000000000000000000033171505556674000360050ustar00rootroot00000000000000malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/libmalcontent/tests List of applications to allow (boolean is True) or deny (boolean is False) access to. Restriction levels for different OARS categories, preventing installation of apps which exceed those levels. The first string is the OARS version (for example, `oars-1.1`), followed by a dictionary mapping OARS categories to values. Whether to allow installation of apps to the user flatpak repository. Whether to allow installation of apps to the system flatpak repository. malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/libmalcontent/tests/meson.build000066400000000000000000000063401505556674000277360ustar00rootroot00000000000000deps = [ dependency('gio-2.0', version: '>= 2.60.1'), dependency('gio-unix-2.0', version: '>= 2.44'), dependency('glib-2.0', version: '>= 2.60.0'), dependency('gobject-2.0', version: '>= 2.44'), dependency('glib-testing-0', fallback: ['libglib-testing', 'libglib_testing_dep']), libmalcontent_dep, ] envs = test_env + [ 'G_TEST_SRCDIR=' + meson.current_source_dir(), 'G_TEST_BUILDDIR=' + meson.current_build_dir(), ] gdbus_codegen = find_program('gdbus-codegen') accounts_service_iface_h = custom_target( 'accounts-service-iface.h', input: ['org.freedesktop.Accounts.xml'], output: ['accounts-service-iface.h'], command: [gdbus_codegen, '--interface-info-header', '--output', '@OUTPUT@', '@INPUT@'], ) accounts_service_iface_c = custom_target( 'accounts-service-iface.c', input: ['org.freedesktop.Accounts.xml'], output: ['accounts-service-iface.c'], command: [gdbus_codegen, '--interface-info-body', '--output', '@OUTPUT@', '@INPUT@'], ) accounts_service_extension_ifaces = [ join_paths(meson.current_source_dir(), '..', '..', 'accounts-service', 'com.endlessm.ParentalControls.AppFilter.xml'), join_paths(meson.current_source_dir(), '..', '..', 'accounts-service', 'com.endlessm.ParentalControls.SessionLimits.xml'), ] accounts_service_extension_iface_h = custom_target( 'accounts-service-extension-iface.h', input: accounts_service_extension_ifaces, output: ['accounts-service-extension-iface.h'], command: [gdbus_codegen, '--interface-info-header', '--output', '@OUTPUT@', '@INPUT@'], ) accounts_service_extension_iface_c = custom_target( 'accounts-service-extension-iface.c', input: accounts_service_extension_ifaces, output: ['accounts-service-extension-iface.c'], command: [gdbus_codegen, '--interface-info-body', '--output', '@OUTPUT@', '@INPUT@'], ) test_programs = [ ['app-filter', [ accounts_service_iface_h, accounts_service_iface_c, accounts_service_extension_iface_h, accounts_service_extension_iface_c, ], deps], ['session-limits', [ accounts_service_iface_h, accounts_service_iface_c, accounts_service_extension_iface_h, accounts_service_extension_iface_c, ], deps], ] installed_tests_metadir = join_paths(datadir, 'installed-tests', 'libmalcontent-' + libmalcontent_api_version) installed_tests_execdir = join_paths(libexecdir, 'installed-tests', 'libmalcontent-' + libmalcontent_api_version) foreach program: test_programs test_conf = configuration_data() test_conf.set('installed_tests_dir', installed_tests_execdir) test_conf.set('program', program[0]) configure_file( input: test_template, output: program[0] + '.test', install: enable_installed_tests, install_dir: installed_tests_metadir, configuration: test_conf, ) exe = executable( program[0], [program[0] + '.c'] + program[1], dependencies: program[2], include_directories: root_inc, install: enable_installed_tests, install_dir: installed_tests_execdir, ) test( program[0], exe, env: envs, args: ['--tap'], ) endforeachorg.freedesktop.Accounts.xml000066400000000000000000000222371505556674000331210ustar00rootroot00000000000000malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/libmalcontent/tests Object paths of cached users Lists users which have logged into the system locally before. This is not meant to return an exhaustive list of all users. It is possible for FindUserByName() to return a user that's not on the list. The uid to look up Object path of user Finds a user by uid. if no user with the given uid exists The username to look up Object path of user Finds a user by its username. if no user with the given username exists The username for the new user The real name for the new user Object path of the new user The account type, encoded as an integer Creates a new user account. The accountType argument can take the following values: 0 Standard user 1 Administrator The caller needs the org.freedesktop.accounts.user-administration PolicyKit authorization. if the caller lacks the appropriate PolicyKit authorization if the operation failed The username for the user Object path of user Caches a user account, so that it shows up in ListCachedUsers() output. The user name may be a remote user, but the system must be able to lookup the user name and resolve the user information. The caller needs the org.freedesktop.accounts.user-administration PolicyKit authorization. if the caller lacks the appropriate PolicyKit authorization if the user name cannot be resolved The username for the user Releases all metadata about a user account, including icon, language and session. If the user account is from a remote server and the user has never logged in before, then that account will no longer show up in ListCachedUsers() output. The caller needs the org.freedesktop.accounts.user-administration PolicyKit authorization. if the caller lacks the appropriate PolicyKit authorization if the user name cannot be resolved The uid to delete Whether to remove the users files Deletes a user account. The caller needs the org.freedesktop.accounts.user-administration PolicyKit authorization. if the caller lacks the appropriate PolicyKit authorization if the operation failed Object path of the user that was added. Emitted when a user is added. Object path of the user that was deleted. Emitted when a user is deleted. The version of the running daemon. Whether or not the system has no users Whether or not the system has multiple users Users to automatically log in as malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/libmalcontent/tests/session-limits.c000066400000000000000000001521311505556674000307220ustar00rootroot00000000000000/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- * * Copyright © 2019 Endless Mobile, Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * * Authors: * - Philip Withnall */ #include "config.h" #include #include #include #include #include #include #include #include "accounts-service-iface.h" #include "accounts-service-extension-iface.h" /* Helper function to convert a constant time in seconds to microseconds, * avoiding issues with integer constants being too small for the multiplication * by using explicit typing. */ static guint64 usec (guint64 sec) { return sec * G_USEC_PER_SEC; } /* Test that the #GType definitions for various types work. */ static void test_session_limits_types (void) { g_type_ensure (mct_session_limits_get_type ()); g_type_ensure (mct_session_limits_builder_get_type ()); } /* Test that ref() and unref() work on an #MctSessionLimits. */ static void test_session_limits_refs (void) { g_auto(MctSessionLimitsBuilder) builder = MCT_SESSION_LIMITS_BUILDER_INIT (); g_autoptr(MctSessionLimits) limits = NULL; /* Use an empty #MctSessionLimits. */ limits = mct_session_limits_builder_end (&builder); g_assert_nonnull (limits); /* Call check_time_remaining() to check that the limits object hasn’t been * finalised. */ g_assert_true (mct_session_limits_check_time_remaining (limits, usec (0), NULL, NULL)); mct_session_limits_ref (limits); g_assert_true (mct_session_limits_check_time_remaining (limits, usec (0), NULL, NULL)); mct_session_limits_unref (limits); g_assert_true (mct_session_limits_check_time_remaining (limits, usec (0), NULL, NULL)); /* Final ref is dropped by g_autoptr(). */ } /* Check error handling when passing an invalid time for @now_usecs to * mct_session_limits_check_time_remaining(). */ static void test_session_limits_check_time_remaining_invalid_time (void) { g_auto(MctSessionLimitsBuilder) builder = MCT_SESSION_LIMITS_BUILDER_INIT (); g_autoptr(MctSessionLimits) limits = NULL; guint64 time_remaining_secs; gboolean time_limit_enabled; /* Use an empty #MctSessionLimits. */ limits = mct_session_limits_builder_end (&builder); /* Pass an invalid time to mct_session_limits_check_time_remaining(). */ g_assert_false (mct_session_limits_check_time_remaining (limits, G_MAXUINT64, &time_remaining_secs, &time_limit_enabled)); g_assert_cmpuint (time_remaining_secs, ==, 0); g_assert_true (time_limit_enabled); } /* Basic test of mct_session_limits_serialize() on session limits. */ static void test_session_limits_serialize (void) { g_auto(MctSessionLimitsBuilder) builder = MCT_SESSION_LIMITS_BUILDER_INIT (); g_autoptr(MctSessionLimits) limits = NULL; g_autoptr(GVariant) serialized = NULL; /* Use an empty #MctSessionLimits. */ limits = mct_session_limits_builder_end (&builder); /* We can’t assert anything about the serialisation format, since it’s opaque. */ serialized = mct_session_limits_serialize (limits); g_assert_nonnull (serialized); } /* Basic test of mct_session_limits_deserialize() on various current and historic * serialised app filter variants. */ static void test_session_limits_deserialize (void) { /* These are all opaque. Older versions should be kept around to test * backwards compatibility. */ const gchar *valid_session_limits[] = { "@a{sv} {}", "{ 'LimitType': <@u 0> }", "{ 'LimitType': <@u 1>, 'DailySchedule': <(@u 0, @u 100)> }", "{ 'DailySchedule': <(@u 0, @u 100)> }", }; for (gsize i = 0; i < G_N_ELEMENTS (valid_session_limits); i++) { g_autoptr(GVariant) serialized = NULL; g_autoptr(MctSessionLimits) limits = NULL; g_autoptr(GError) local_error = NULL; g_test_message ("%" G_GSIZE_FORMAT ": %s", i, valid_session_limits[i]); serialized = g_variant_parse (NULL, valid_session_limits[i], NULL, NULL, NULL); g_assert (serialized != NULL); limits = mct_session_limits_deserialize (serialized, 1, &local_error); g_assert_no_error (local_error); g_assert_nonnull (limits); } } /* Test of mct_session_limits_deserialize() on various invalid variants. */ static void test_session_limits_deserialize_invalid (void) { const gchar *invalid_session_limits[] = { "false", "()", "{ 'LimitType': <@u 100> }", "{ 'DailySchedule': <(@u 100, @u 0)> }", "{ 'DailySchedule': <(@u 0, @u 4294967295)> }", }; for (gsize i = 0; i < G_N_ELEMENTS (invalid_session_limits); i++) { g_autoptr(GVariant) serialized = NULL; g_autoptr(MctSessionLimits) limits = NULL; g_autoptr(GError) local_error = NULL; g_test_message ("%" G_GSIZE_FORMAT ": %s", i, invalid_session_limits[i]); serialized = g_variant_parse (NULL, invalid_session_limits[i], NULL, NULL, NULL); g_assert (serialized != NULL); limits = mct_session_limits_deserialize (serialized, 1, &local_error); g_assert_error (local_error, MCT_MANAGER_ERROR, MCT_MANAGER_ERROR_INVALID_DATA); g_assert_null (limits); } } /* Fixture for tests which use an #MctSessionLimitsBuilder. The builder can * either be heap- or stack-allocated. @builder will always be a valid pointer * to it. */ typedef struct { MctSessionLimitsBuilder *builder; MctSessionLimitsBuilder stack_builder; } BuilderFixture; static void builder_set_up_stack (BuilderFixture *fixture, gconstpointer test_data) { mct_session_limits_builder_init (&fixture->stack_builder); fixture->builder = &fixture->stack_builder; } static void builder_tear_down_stack (BuilderFixture *fixture, gconstpointer test_data) { mct_session_limits_builder_clear (&fixture->stack_builder); fixture->builder = NULL; } static void builder_set_up_stack2 (BuilderFixture *fixture, gconstpointer test_data) { MctSessionLimitsBuilder local_builder = MCT_SESSION_LIMITS_BUILDER_INIT (); memcpy (&fixture->stack_builder, &local_builder, sizeof (local_builder)); fixture->builder = &fixture->stack_builder; } static void builder_tear_down_stack2 (BuilderFixture *fixture, gconstpointer test_data) { mct_session_limits_builder_clear (&fixture->stack_builder); fixture->builder = NULL; } static void builder_set_up_heap (BuilderFixture *fixture, gconstpointer test_data) { fixture->builder = mct_session_limits_builder_new (); } static void builder_tear_down_heap (BuilderFixture *fixture, gconstpointer test_data) { g_clear_pointer (&fixture->builder, mct_session_limits_builder_free); } /* Test building a non-empty #MctSessionLimits using an * #MctSessionLimitsBuilder. */ static void test_session_limits_builder_non_empty (BuilderFixture *fixture, gconstpointer test_data) { g_autoptr(MctSessionLimits) limits = NULL; g_autofree const gchar **sections = NULL; mct_session_limits_builder_set_daily_schedule (fixture->builder, 100, 8 * 60 * 60); limits = mct_session_limits_builder_end (fixture->builder); g_assert_false (mct_session_limits_check_time_remaining (limits, usec (0), NULL, NULL)); g_assert_false (mct_session_limits_check_time_remaining (limits, usec (99), NULL, NULL)); g_assert_true (mct_session_limits_check_time_remaining (limits, usec (100), NULL, NULL)); g_assert_true (mct_session_limits_check_time_remaining (limits, usec (8 * 60 * 60 - 1), NULL, NULL)); g_assert_false (mct_session_limits_check_time_remaining (limits, usec (8 * 60 * 60), NULL, NULL)); } /* Test building an empty #MctSessionLimits using an #MctSessionLimitsBuilder. */ static void test_session_limits_builder_empty (BuilderFixture *fixture, gconstpointer test_data) { g_autoptr(MctSessionLimits) limits = NULL; g_autofree const gchar **sections = NULL; limits = mct_session_limits_builder_end (fixture->builder); g_assert_true (mct_session_limits_check_time_remaining (limits, usec (0), NULL, NULL)); g_assert_true (mct_session_limits_check_time_remaining (limits, usec (99), NULL, NULL)); g_assert_true (mct_session_limits_check_time_remaining (limits, usec (100), NULL, NULL)); g_assert_true (mct_session_limits_check_time_remaining (limits, usec (8 * 60 * 60 - 1), NULL, NULL)); g_assert_true (mct_session_limits_check_time_remaining (limits, usec (8 * 60 * 60), NULL, NULL)); } /* Check that copying a cleared #MctSessionLimitsBuilder works, and the copy can * then be initialised and used to build a limits object. */ static void test_session_limits_builder_copy_empty (void) { g_autoptr(MctSessionLimitsBuilder) builder = mct_session_limits_builder_new (); g_autoptr(MctSessionLimitsBuilder) builder_copy = NULL; g_autoptr(MctSessionLimits) limits = NULL; mct_session_limits_builder_clear (builder); builder_copy = mct_session_limits_builder_copy (builder); mct_session_limits_builder_init (builder_copy); mct_session_limits_builder_set_daily_schedule (builder_copy, 100, 8 * 60 * 60); limits = mct_session_limits_builder_end (builder_copy); g_assert_false (mct_session_limits_check_time_remaining (limits, usec (0), NULL, NULL)); g_assert_false (mct_session_limits_check_time_remaining (limits, usec (99), NULL, NULL)); g_assert_true (mct_session_limits_check_time_remaining (limits, usec (100), NULL, NULL)); g_assert_true (mct_session_limits_check_time_remaining (limits, usec (8 * 60 * 60 - 1), NULL, NULL)); g_assert_false (mct_session_limits_check_time_remaining (limits, usec (8 * 60 * 60), NULL, NULL)); } /* Check that copying a filled #MctSessionLimitsBuilder works, and the copy can * be used to build a limits object. */ static void test_session_limits_builder_copy_full (void) { g_autoptr(MctSessionLimitsBuilder) builder = mct_session_limits_builder_new (); g_autoptr(MctSessionLimitsBuilder) builder_copy = NULL; g_autoptr(MctSessionLimits) limits = NULL; mct_session_limits_builder_set_daily_schedule (builder, 100, 8 * 60 * 60); builder_copy = mct_session_limits_builder_copy (builder); limits = mct_session_limits_builder_end (builder_copy); g_assert_false (mct_session_limits_check_time_remaining (limits, usec (0), NULL, NULL)); g_assert_false (mct_session_limits_check_time_remaining (limits, usec (99), NULL, NULL)); g_assert_true (mct_session_limits_check_time_remaining (limits, usec (100), NULL, NULL)); g_assert_true (mct_session_limits_check_time_remaining (limits, usec (8 * 60 * 60 - 1), NULL, NULL)); g_assert_false (mct_session_limits_check_time_remaining (limits, usec (8 * 60 * 60), NULL, NULL)); } /* Check that overriding an already-set limit in a #MctSessionLimitsBuilder * removes all trace of it. In this test, override with a ‘none’ limit. */ static void test_session_limits_builder_override_none (void) { g_autoptr(MctSessionLimitsBuilder) builder = mct_session_limits_builder_new (); g_autoptr(MctSessionLimits) limits = NULL; /* Set up some schedule. */ mct_session_limits_builder_set_daily_schedule (builder, 100, 8 * 60 * 60); /* Override it. */ mct_session_limits_builder_set_none (builder); limits = mct_session_limits_builder_end (builder); g_assert_true (mct_session_limits_check_time_remaining (limits, usec (0), NULL, NULL)); } /* Check that overriding an already-set limit in a #MctSessionLimitsBuilder * removes all trace of it. In this test, override with a ‘daily schedule’ * limit. */ static void test_session_limits_builder_override_daily_schedule (void) { g_autoptr(MctSessionLimitsBuilder) builder = mct_session_limits_builder_new (); g_autoptr(MctSessionLimits) limits = NULL; /* Set up some schedule. */ mct_session_limits_builder_set_daily_schedule (builder, 100, 8 * 60 * 60); /* Override it. */ mct_session_limits_builder_set_daily_schedule (builder, 200, 7 * 60 * 60); limits = mct_session_limits_builder_end (builder); g_assert_false (mct_session_limits_check_time_remaining (limits, usec (150), NULL, NULL)); g_assert_true (mct_session_limits_check_time_remaining (limits, usec (4 * 60 * 60), NULL, NULL)); g_assert_false (mct_session_limits_check_time_remaining (limits, usec (7 * 60 * 60 + 30 * 60), NULL, NULL)); } /* Fixture for tests which interact with the accountsservice over D-Bus. The * D-Bus service is mocked up using @queue, which allows us to reply to D-Bus * calls from the code under test from within the test process. * * It exports one user object (for UID 500) and the manager object. The method * return values from UID 500 are up to the test in question, so it could be an * administrator, or non-administrator, have a restrictive or permissive app * limits, etc. */ typedef struct { GtDBusQueue *queue; /* (owned) */ uid_t valid_uid; uid_t missing_uid; MctManager *manager; /* (owned) */ } BusFixture; static void bus_set_up (BusFixture *fixture, gconstpointer test_data) { g_autoptr(GError) local_error = NULL; g_autofree gchar *object_path = NULL; fixture->valid_uid = 500; /* arbitrarily chosen */ fixture->missing_uid = 501; /* must be different from valid_uid and not exported */ fixture->queue = gt_dbus_queue_new (); gt_dbus_queue_connect (fixture->queue, &local_error); g_assert_no_error (local_error); gt_dbus_queue_own_name (fixture->queue, "org.freedesktop.Accounts"); object_path = g_strdup_printf ("/org/freedesktop/Accounts/User%u", fixture->valid_uid); gt_dbus_queue_export_object (fixture->queue, object_path, (GDBusInterfaceInfo *) &com_endlessm_parental_controls_session_limits_interface, &local_error); g_assert_no_error (local_error); gt_dbus_queue_export_object (fixture->queue, "/org/freedesktop/Accounts", (GDBusInterfaceInfo *) &org_freedesktop_accounts_interface, &local_error); g_assert_no_error (local_error); fixture->manager = mct_manager_new (gt_dbus_queue_get_client_connection (fixture->queue)); } static void bus_tear_down (BusFixture *fixture, gconstpointer test_data) { g_clear_object (&fixture->manager); gt_dbus_queue_disconnect (fixture->queue, TRUE); g_clear_pointer (&fixture->queue, gt_dbus_queue_free); } /* Helper #GAsyncReadyCallback which returns the #GAsyncResult in its @user_data. */ static void async_result_cb (GObject *obj, GAsyncResult *result, gpointer user_data) { GAsyncResult **result_out = (GAsyncResult **) user_data; g_assert_null (*result_out); *result_out = g_object_ref (result); } /* Generic mock accountsservice implementation which returns the properties * given in #GetSessionLimitsData.properties if queried for a UID matching * #GetSessionLimitsData.expected_uid. Intended to be used for writing * ‘successful’ mct_manager_get_session_limits() tests returning a variety of * values. */ typedef struct { uid_t expected_uid; const gchar *properties; } GetSessionLimitsData; /* This is run in a worker thread. */ static void get_session_limits_server_cb (GtDBusQueue *queue, gpointer user_data) { const GetSessionLimitsData *data = user_data; g_autoptr(GDBusMethodInvocation) invocation1 = NULL; g_autoptr(GDBusMethodInvocation) invocation2 = NULL; g_autofree gchar *object_path = NULL; g_autoptr(GVariant) properties_variant = NULL; /* Handle the FindUserById() call. */ gint64 user_id; invocation1 = gt_dbus_queue_assert_pop_message (queue, "/org/freedesktop/Accounts", "org.freedesktop.Accounts", "FindUserById", "(x)", &user_id); g_assert_cmpint (user_id, ==, data->expected_uid); object_path = g_strdup_printf ("/org/freedesktop/Accounts/User%u", (uid_t) user_id); g_dbus_method_invocation_return_value (invocation1, g_variant_new ("(o)", object_path)); /* Handle the Properties.GetAll() call and return some arbitrary, valid values * for the given user. */ const gchar *property_interface; invocation2 = gt_dbus_queue_assert_pop_message (queue, object_path, "org.freedesktop.DBus.Properties", "GetAll", "(&s)", &property_interface); g_assert_cmpstr (property_interface, ==, "com.endlessm.ParentalControls.SessionLimits"); properties_variant = g_variant_ref_sink (g_variant_new_parsed (data->properties)); g_dbus_method_invocation_return_value (invocation2, g_variant_new_tuple (&properties_variant, 1)); } /* Test that getting an #MctSessionLimits from the mock D-Bus service works. The * @test_data is a boolean value indicating whether to do the call * synchronously (%FALSE) or asynchronously (%TRUE). * * The mock D-Bus replies are generated in get_session_limits_server_cb(), which * is used for both synchronous and asynchronous calls. */ static void test_session_limits_bus_get (BusFixture *fixture, gconstpointer test_data) { g_autoptr(MctSessionLimits) session_limits = NULL; g_autoptr(GError) local_error = NULL; guint64 time_remaining_secs; gboolean time_limit_enabled; gboolean test_async = GPOINTER_TO_UINT (test_data); const GetSessionLimitsData get_session_limits_data = { .expected_uid = fixture->valid_uid, .properties = "{" "'LimitType': <@u 1>," "'DailySchedule': <(@u 100, @u 8000)>" "}" }; gt_dbus_queue_set_server_func (fixture->queue, get_session_limits_server_cb, (gpointer) &get_session_limits_data); if (test_async) { g_autoptr(GAsyncResult) result = NULL; mct_manager_get_session_limits_async (fixture->manager, fixture->valid_uid, MCT_MANAGER_GET_VALUE_FLAGS_NONE, NULL, async_result_cb, &result); while (result == NULL) g_main_context_iteration (NULL, TRUE); session_limits = mct_manager_get_session_limits_finish (fixture->manager, result, &local_error); } else { session_limits = mct_manager_get_session_limits (fixture->manager, fixture->valid_uid, MCT_MANAGER_GET_VALUE_FLAGS_NONE, NULL, &local_error); } g_assert_no_error (local_error); g_assert_nonnull (session_limits); /* Check the session limits properties. */ g_assert_cmpuint (mct_session_limits_get_user_id (session_limits), ==, fixture->valid_uid); g_assert_true (mct_session_limits_is_enabled (session_limits)); g_assert_false (mct_session_limits_check_time_remaining (session_limits, usec (0), &time_remaining_secs, &time_limit_enabled)); g_assert_true (time_limit_enabled); g_assert_true (mct_session_limits_check_time_remaining (session_limits, usec (2000), &time_remaining_secs, &time_limit_enabled)); g_assert_cmpuint (time_remaining_secs, ==, 8000 - 2000); g_assert_true (time_limit_enabled); } /* Test that getting an #MctSessionLimits from the mock D-Bus service works. The * @test_data is a boolean value indicating whether to do the call * synchronously (%FALSE) or asynchronously (%TRUE). * * The mock D-Bus replies are generated in get_session_limits_server_cb(), which * is used for both synchronous and asynchronous calls. */ static void test_session_limits_bus_get_none (BusFixture *fixture, gconstpointer test_data) { g_autoptr(MctSessionLimits) session_limits = NULL; g_autoptr(GError) local_error = NULL; guint64 time_remaining_secs; gboolean time_limit_enabled; gboolean test_async = GPOINTER_TO_UINT (test_data); const GetSessionLimitsData get_session_limits_data = { .expected_uid = fixture->valid_uid, .properties = "{" "'LimitType': <@u 0>," "'DailySchedule': <(@u 0, @u 86400)>" "}" }; gt_dbus_queue_set_server_func (fixture->queue, get_session_limits_server_cb, (gpointer) &get_session_limits_data); if (test_async) { g_autoptr(GAsyncResult) result = NULL; mct_manager_get_session_limits_async (fixture->manager, fixture->valid_uid, MCT_MANAGER_GET_VALUE_FLAGS_NONE, NULL, async_result_cb, &result); while (result == NULL) g_main_context_iteration (NULL, TRUE); session_limits = mct_manager_get_session_limits_finish (fixture->manager, result, &local_error); } else { session_limits = mct_manager_get_session_limits (fixture->manager, fixture->valid_uid, MCT_MANAGER_GET_VALUE_FLAGS_NONE, NULL, &local_error); } g_assert_no_error (local_error); g_assert_nonnull (session_limits); /* Check the session limits properties. */ g_assert_cmpuint (mct_session_limits_get_user_id (session_limits), ==, fixture->valid_uid); g_assert_false (mct_session_limits_is_enabled (session_limits)); g_assert_true (mct_session_limits_check_time_remaining (session_limits, usec (0), &time_remaining_secs, &time_limit_enabled)); g_assert_false (time_limit_enabled); g_assert_true (mct_session_limits_check_time_remaining (session_limits, usec (2000), &time_remaining_secs, &time_limit_enabled)); g_assert_false (time_limit_enabled); } /* Test that mct_manager_get_session_limits() returns an appropriate error if the * mock D-Bus service reports that the given user cannot be found. * * The mock D-Bus replies are generated inline. */ static void test_session_limits_bus_get_error_invalid_user (BusFixture *fixture, gconstpointer test_data) { g_autoptr(GAsyncResult) result = NULL; g_autoptr(GError) local_error = NULL; g_autoptr(GDBusMethodInvocation) invocation = NULL; g_autofree gchar *error_message = NULL; g_autoptr(MctSessionLimits) session_limits = NULL; mct_manager_get_session_limits_async (fixture->manager, fixture->missing_uid, MCT_MANAGER_GET_VALUE_FLAGS_NONE, NULL, async_result_cb, &result); /* Handle the FindUserById() call and claim the user doesn’t exist. */ gint64 user_id; invocation = gt_dbus_queue_assert_pop_message (fixture->queue, "/org/freedesktop/Accounts", "org.freedesktop.Accounts", "FindUserById", "(x)", &user_id); g_assert_cmpint (user_id, ==, fixture->missing_uid); error_message = g_strdup_printf ("Failed to look up user with uid %u.", fixture->missing_uid); g_dbus_method_invocation_return_dbus_error (invocation, "org.freedesktop.Accounts.Error.Failed", error_message); /* Get the get_session_limits() result. */ while (result == NULL) g_main_context_iteration (NULL, TRUE); session_limits = mct_manager_get_session_limits_finish (fixture->manager, result, &local_error); g_assert_error (local_error, MCT_MANAGER_ERROR, MCT_MANAGER_ERROR_INVALID_USER); g_assert_null (session_limits); } /* Test that mct_manager_get_session_limits() returns an appropriate error if the * mock D-Bus service reports that the properties of the given user can’t be * accessed due to permissions. * * The mock D-Bus replies are generated inline. */ static void test_session_limits_bus_get_error_permission_denied (BusFixture *fixture, gconstpointer test_data) { g_autoptr(GAsyncResult) result = NULL; g_autoptr(GError) local_error = NULL; g_autoptr(GDBusMethodInvocation) invocation1 = NULL; g_autoptr(GDBusMethodInvocation) invocation2 = NULL; g_autofree gchar *object_path = NULL; g_autoptr(MctSessionLimits) session_limits = NULL; mct_manager_get_session_limits_async (fixture->manager, fixture->valid_uid, MCT_MANAGER_GET_VALUE_FLAGS_NONE, NULL, async_result_cb, &result); /* Handle the FindUserById() call. */ gint64 user_id; invocation1 = gt_dbus_queue_assert_pop_message (fixture->queue, "/org/freedesktop/Accounts", "org.freedesktop.Accounts", "FindUserById", "(x)", &user_id); g_assert_cmpint (user_id, ==, fixture->valid_uid); object_path = g_strdup_printf ("/org/freedesktop/Accounts/User%u", (uid_t) user_id); g_dbus_method_invocation_return_value (invocation1, g_variant_new ("(o)", object_path)); /* Handle the Properties.GetAll() call and return a permission denied error. */ const gchar *property_interface; invocation2 = gt_dbus_queue_assert_pop_message (fixture->queue, object_path, "org.freedesktop.DBus.Properties", "GetAll", "(&s)", &property_interface); g_assert_cmpstr (property_interface, ==, "com.endlessm.ParentalControls.SessionLimits"); g_dbus_method_invocation_return_dbus_error (invocation2, "org.freedesktop.Accounts.Error.PermissionDenied", "Not authorized"); /* Get the get_session_limits() result. */ while (result == NULL) g_main_context_iteration (NULL, TRUE); session_limits = mct_manager_get_session_limits_finish (fixture->manager, result, &local_error); g_assert_error (local_error, MCT_MANAGER_ERROR, MCT_MANAGER_ERROR_PERMISSION_DENIED); g_assert_null (session_limits); } /* Test that mct_manager_get_session_limits() returns an appropriate error if * the mock D-Bus service replies with no session limits properties (implying * that it hasn’t sent the property values because of permissions). * * The mock D-Bus replies are generated inline. */ static void test_session_limits_bus_get_error_permission_denied_missing (BusFixture *fixture, gconstpointer test_data) { g_autoptr(GAsyncResult) result = NULL; g_autoptr(GError) local_error = NULL; g_autoptr(GDBusMethodInvocation) invocation1 = NULL; g_autoptr(GDBusMethodInvocation) invocation2 = NULL; g_autofree gchar *object_path = NULL; g_autoptr(MctSessionLimits) session_limits = NULL; mct_manager_get_session_limits_async (fixture->manager, fixture->valid_uid, MCT_MANAGER_GET_VALUE_FLAGS_NONE, NULL, async_result_cb, &result); /* Handle the FindUserById() call. */ gint64 user_id; invocation1 = gt_dbus_queue_assert_pop_message (fixture->queue, "/org/freedesktop/Accounts", "org.freedesktop.Accounts", "FindUserById", "(x)", &user_id); g_assert_cmpint (user_id, ==, fixture->valid_uid); object_path = g_strdup_printf ("/org/freedesktop/Accounts/User%u", (uid_t) user_id); g_dbus_method_invocation_return_value (invocation1, g_variant_new ("(o)", object_path)); /* Handle the Properties.GetAll() call and return an empty array due to not * having permission to access the properties. The code actually keys off the * presence of the LimitType property, since that was the first one to be * added. */ const gchar *property_interface; invocation2 = gt_dbus_queue_assert_pop_message (fixture->queue, object_path, "org.freedesktop.DBus.Properties", "GetAll", "(&s)", &property_interface); g_assert_cmpstr (property_interface, ==, "com.endlessm.ParentalControls.SessionLimits"); g_dbus_method_invocation_return_value (invocation2, g_variant_new ("(a{sv})", NULL)); /* Get the get_session_limits() result. */ while (result == NULL) g_main_context_iteration (NULL, TRUE); session_limits = mct_manager_get_session_limits_finish (fixture->manager, result, &local_error); g_assert_error (local_error, MCT_MANAGER_ERROR, MCT_MANAGER_ERROR_PERMISSION_DENIED); g_assert_null (session_limits); } /* Test that mct_manager_get_session_limits() returns an error if the mock D-Bus * service reports an unrecognised error. * * The mock D-Bus replies are generated inline. */ static void test_session_limits_bus_get_error_unknown (BusFixture *fixture, gconstpointer test_data) { g_autoptr(GAsyncResult) result = NULL; g_autoptr(GError) local_error = NULL; g_autoptr(GDBusMethodInvocation) invocation = NULL; g_autoptr(MctSessionLimits) session_limits = NULL; mct_manager_get_session_limits_async (fixture->manager, fixture->valid_uid, MCT_MANAGER_GET_VALUE_FLAGS_NONE, NULL, async_result_cb, &result); /* Handle the FindUserById() call and return a bogus error. */ gint64 user_id; invocation = gt_dbus_queue_assert_pop_message (fixture->queue, "/org/freedesktop/Accounts", "org.freedesktop.Accounts", "FindUserById", "(x)", &user_id); g_assert_cmpint (user_id, ==, fixture->valid_uid); g_dbus_method_invocation_return_dbus_error (invocation, "org.freedesktop.Accounts.Error.NewAndInterestingError", "This is a fake error message " "which libmalcontent " "will never have seen before, " "but must still handle correctly"); /* Get the get_session_limits() result. */ while (result == NULL) g_main_context_iteration (NULL, TRUE); session_limits = mct_manager_get_session_limits_finish (fixture->manager, result, &local_error); /* We don’t actually care what error is actually used here. */ g_assert_error (local_error, G_IO_ERROR, G_IO_ERROR_DBUS_ERROR); g_assert_null (session_limits); } /* Test that mct_manager_get_session_limits() returns an error if the mock D-Bus * service reports an unknown interface, which means that parental controls are * not installed properly. * * The mock D-Bus replies are generated inline. */ static void test_session_limits_bus_get_error_disabled (BusFixture *fixture, gconstpointer test_data) { g_autoptr(GAsyncResult) result = NULL; g_autoptr(GError) local_error = NULL; g_autoptr(GDBusMethodInvocation) invocation1 = NULL; g_autoptr(GDBusMethodInvocation) invocation2 = NULL; g_autofree gchar *object_path = NULL; g_autoptr(MctSessionLimits) session_limits = NULL; mct_manager_get_session_limits_async (fixture->manager, fixture->valid_uid, MCT_MANAGER_GET_VALUE_FLAGS_NONE, NULL, async_result_cb, &result); /* Handle the FindUserById() call. */ gint64 user_id; invocation1 = gt_dbus_queue_assert_pop_message (fixture->queue, "/org/freedesktop/Accounts", "org.freedesktop.Accounts", "FindUserById", "(x)", &user_id); g_assert_cmpint (user_id, ==, fixture->valid_uid); object_path = g_strdup_printf ("/org/freedesktop/Accounts/User%u", (uid_t) user_id); g_dbus_method_invocation_return_value (invocation1, g_variant_new ("(o)", object_path)); /* Handle the Properties.GetAll() call and return an InvalidArgs error. */ const gchar *property_interface; invocation2 = gt_dbus_queue_assert_pop_message (fixture->queue, object_path, "org.freedesktop.DBus.Properties", "GetAll", "(&s)", &property_interface); g_assert_cmpstr (property_interface, ==, "com.endlessm.ParentalControls.SessionLimits"); g_dbus_method_invocation_return_dbus_error (invocation2, "org.freedesktop.DBus.Error.InvalidArgs", "No such interface " "“com.endlessm.ParentalControls.SessionLimits”"); /* Get the get_session_limits() result. */ while (result == NULL) g_main_context_iteration (NULL, TRUE); session_limits = mct_manager_get_session_limits_finish (fixture->manager, result, &local_error); g_assert_error (local_error, MCT_MANAGER_ERROR, MCT_MANAGER_ERROR_DISABLED); g_assert_null (session_limits); } /* Generic mock accountsservice implementation which handles properties being * set on a mock User object, and compares their values to the given * `expected_*` ones. * * If @error_index is non-negative, it gives the index of a Set() call to return * the given @dbus_error_name and @dbus_error_message from, rather than * accepting the property value from the caller. If @error_index is negative, * all Set() calls will be accepted. */ typedef struct { uid_t expected_uid; const gchar * const *expected_properties; /* All GVariants in text format: */ const gchar *expected_limit_type_value; /* (nullable) */ const gchar *expected_daily_schedule_value; /* (nullable) */ gint error_index; /* -1 to return no error */ const gchar *dbus_error_name; /* NULL to return no error */ const gchar *dbus_error_message; /* NULL to return no error */ } SetSessionLimitsData; static const gchar * set_session_limits_data_get_expected_property_value (const SetSessionLimitsData *data, const gchar *property_name) { if (g_str_equal (property_name, "LimitType")) return data->expected_limit_type_value; else if (g_str_equal (property_name, "DailySchedule")) return data->expected_daily_schedule_value; else g_assert_not_reached (); } /* This is run in a worker thread. */ static void set_session_limits_server_cb (GtDBusQueue *queue, gpointer user_data) { const SetSessionLimitsData *data = user_data; g_autoptr(GDBusMethodInvocation) find_invocation = NULL; g_autofree gchar *object_path = NULL; g_assert ((data->error_index == -1) == (data->dbus_error_name == NULL)); g_assert ((data->dbus_error_name == NULL) == (data->dbus_error_message == NULL)); /* Handle the FindUserById() call. */ gint64 user_id; find_invocation = gt_dbus_queue_assert_pop_message (queue, "/org/freedesktop/Accounts", "org.freedesktop.Accounts", "FindUserById", "(x)", &user_id); g_assert_cmpint (user_id, ==, data->expected_uid); object_path = g_strdup_printf ("/org/freedesktop/Accounts/User%u", (uid_t) user_id); g_dbus_method_invocation_return_value (find_invocation, g_variant_new ("(o)", object_path)); /* Handle the Properties.Set() calls. */ gsize i; for (i = 0; data->expected_properties[i] != NULL; i++) { const gchar *property_interface; const gchar *property_name; g_autoptr(GVariant) property_value = NULL; g_autoptr(GDBusMethodInvocation) property_invocation = NULL; g_autoptr(GVariant) expected_property_value = NULL; property_invocation = gt_dbus_queue_assert_pop_message (queue, object_path, "org.freedesktop.DBus.Properties", "Set", "(&s&sv)", &property_interface, &property_name, &property_value); g_assert_cmpstr (property_interface, ==, "com.endlessm.ParentalControls.SessionLimits"); g_assert_cmpstr (property_name, ==, data->expected_properties[i]); if (data->error_index >= 0 && (gsize) data->error_index == i) { g_dbus_method_invocation_return_dbus_error (property_invocation, data->dbus_error_name, data->dbus_error_message); break; } else { expected_property_value = g_variant_new_parsed (set_session_limits_data_get_expected_property_value (data, property_name)); g_assert_cmpvariant (property_value, expected_property_value); g_dbus_method_invocation_return_value (property_invocation, NULL); } } } /* Test that setting an #MctSessionLimits on the mock D-Bus service works. The * @test_data is a boolean value indicating whether to do the call * synchronously (%FALSE) or asynchronously (%TRUE). * * The mock D-Bus replies are generated in set_session_limits_server_cb(), which * is used for both synchronous and asynchronous calls. */ static void test_session_limits_bus_set (BusFixture *fixture, gconstpointer test_data) { gboolean success; g_auto(MctSessionLimitsBuilder) builder = MCT_SESSION_LIMITS_BUILDER_INIT (); g_autoptr(MctSessionLimits) session_limits = NULL; g_autoptr(GError) local_error = NULL; gboolean test_async = GPOINTER_TO_UINT (test_data); const gchar *expected_properties[] = { "DailySchedule", "LimitType", NULL }; const SetSessionLimitsData set_session_limits_data = { .expected_uid = fixture->valid_uid, .expected_properties = expected_properties, .expected_limit_type_value = "@u 1", .expected_daily_schedule_value = "(@u 100, @u 4000)", .error_index = -1, }; /* Build a session limits object. */ mct_session_limits_builder_set_daily_schedule (&builder, 100, 4000); session_limits = mct_session_limits_builder_end (&builder); /* Set the mock service function and set the limits. */ gt_dbus_queue_set_server_func (fixture->queue, set_session_limits_server_cb, (gpointer) &set_session_limits_data); if (test_async) { g_autoptr(GAsyncResult) result = NULL; mct_manager_set_session_limits_async (fixture->manager, fixture->valid_uid, session_limits, MCT_MANAGER_SET_VALUE_FLAGS_NONE, NULL, async_result_cb, &result); while (result == NULL) g_main_context_iteration (NULL, TRUE); success = mct_manager_set_session_limits_finish (fixture->manager, result, &local_error); } else { success = mct_manager_set_session_limits (fixture->manager, fixture->valid_uid, session_limits, MCT_MANAGER_SET_VALUE_FLAGS_NONE, NULL, &local_error); } g_assert_no_error (local_error); g_assert_true (success); } /* Test that mct_manager_set_session_limits() returns an appropriate error if * the mock D-Bus service reports that the given user cannot be found. * * The mock D-Bus replies are generated inline. */ static void test_session_limits_bus_set_error_invalid_user (BusFixture *fixture, gconstpointer test_data) { gboolean success; g_auto(MctSessionLimitsBuilder) builder = MCT_SESSION_LIMITS_BUILDER_INIT (); g_autoptr(MctSessionLimits) session_limits = NULL; g_autoptr(GAsyncResult) result = NULL; g_autoptr(GError) local_error = NULL; g_autoptr(GDBusMethodInvocation) invocation = NULL; g_autofree gchar *error_message = NULL; /* Use the default session limits. */ session_limits = mct_session_limits_builder_end (&builder); mct_manager_set_session_limits_async (fixture->manager, fixture->missing_uid, session_limits, MCT_MANAGER_SET_VALUE_FLAGS_NONE, NULL, async_result_cb, &result); /* Handle the FindUserById() call and claim the user doesn’t exist. */ gint64 user_id; invocation = gt_dbus_queue_assert_pop_message (fixture->queue, "/org/freedesktop/Accounts", "org.freedesktop.Accounts", "FindUserById", "(x)", &user_id); g_assert_cmpint (user_id, ==, fixture->missing_uid); error_message = g_strdup_printf ("Failed to look up user with uid %u.", fixture->missing_uid); g_dbus_method_invocation_return_dbus_error (invocation, "org.freedesktop.Accounts.Error.Failed", error_message); /* Get the set_session_limits() result. */ while (result == NULL) g_main_context_iteration (NULL, TRUE); success = mct_manager_set_session_limits_finish (fixture->manager, result, &local_error); g_assert_error (local_error, MCT_MANAGER_ERROR, MCT_MANAGER_ERROR_INVALID_USER); g_assert_false (success); } /* Test that mct_manager_set_session_limits() returns an appropriate error if the * mock D-Bus service replies with a permission denied error when setting * properties. * * The mock D-Bus replies are generated in set_session_limits_server_cb(). */ static void test_session_limits_bus_set_error_permission_denied (BusFixture *fixture, gconstpointer test_data) { gboolean success; g_auto(MctSessionLimitsBuilder) builder = MCT_SESSION_LIMITS_BUILDER_INIT (); g_autoptr(MctSessionLimits) session_limits = NULL; g_autoptr(GError) local_error = NULL; const gchar *expected_properties[] = { "LimitType", NULL }; const SetSessionLimitsData set_session_limits_data = { .expected_uid = fixture->valid_uid, .expected_properties = expected_properties, .error_index = 0, .dbus_error_name = "org.freedesktop.Accounts.Error.PermissionDenied", .dbus_error_message = "Not authorized", }; /* Use the default session limits. */ session_limits = mct_session_limits_builder_end (&builder); gt_dbus_queue_set_server_func (fixture->queue, set_session_limits_server_cb, (gpointer) &set_session_limits_data); success = mct_manager_set_session_limits (fixture->manager, fixture->valid_uid, session_limits, MCT_MANAGER_SET_VALUE_FLAGS_NONE, NULL, &local_error); g_assert_error (local_error, MCT_MANAGER_ERROR, MCT_MANAGER_ERROR_PERMISSION_DENIED); g_assert_false (success); } /* Test that mct_manager_set_session_limits() returns an error if the mock D-Bus * service reports an unrecognised error. * * The mock D-Bus replies are generated in set_session_limits_server_cb(). */ static void test_session_limits_bus_set_error_unknown (BusFixture *fixture, gconstpointer test_data) { gboolean success; g_auto(MctSessionLimitsBuilder) builder = MCT_SESSION_LIMITS_BUILDER_INIT (); g_autoptr(MctSessionLimits) session_limits = NULL; g_autoptr(GError) local_error = NULL; const gchar *expected_properties[] = { "LimitType", NULL }; const SetSessionLimitsData set_session_limits_data = { .expected_uid = fixture->valid_uid, .expected_properties = expected_properties, .error_index = 0, .dbus_error_name = "org.freedesktop.Accounts.Error.NewAndInterestingError", .dbus_error_message = "This is a fake error message which " "libmalcontent will never have seen " "before, but must still handle correctly", }; /* Use the default session limits. */ session_limits = mct_session_limits_builder_end (&builder); gt_dbus_queue_set_server_func (fixture->queue, set_session_limits_server_cb, (gpointer) &set_session_limits_data); success = mct_manager_set_session_limits (fixture->manager, fixture->valid_uid, session_limits, MCT_MANAGER_SET_VALUE_FLAGS_NONE, NULL, &local_error); g_assert_error (local_error, G_IO_ERROR, G_IO_ERROR_DBUS_ERROR); g_assert_false (success); } /* Test that mct_manager_set_session_limits() returns an error if the mock D-Bus * service reports an InvalidArgs error with a given one of its Set() calls. * * @test_data contains a property index encoded with GINT_TO_POINTER(), * indicating which Set() call to return the error on, since the calls are made * in series. * * The mock D-Bus replies are generated in set_session_limits_server_cb(). */ static void test_session_limits_bus_set_error_invalid_property (BusFixture *fixture, gconstpointer test_data) { gboolean success; g_auto(MctSessionLimitsBuilder) builder = MCT_SESSION_LIMITS_BUILDER_INIT (); g_autoptr(MctSessionLimits) session_limits = NULL; g_autoptr(GError) local_error = NULL; const gchar *expected_properties[] = { "DailySchedule", "LimitType", NULL }; const SetSessionLimitsData set_session_limits_data = { .expected_uid = fixture->valid_uid, .expected_properties = expected_properties, .expected_limit_type_value = "@u 1", .expected_daily_schedule_value = "(@u 100, @u 3000)", .error_index = GPOINTER_TO_INT (test_data), .dbus_error_name = "org.freedesktop.DBus.Error.InvalidArgs", .dbus_error_message = "Mumble mumble something wrong with the limits value", }; /* Build a session limits object. */ mct_session_limits_builder_set_daily_schedule (&builder, 100, 3000); session_limits = mct_session_limits_builder_end (&builder); gt_dbus_queue_set_server_func (fixture->queue, set_session_limits_server_cb, (gpointer) &set_session_limits_data); success = mct_manager_set_session_limits (fixture->manager, fixture->valid_uid, session_limits, MCT_MANAGER_SET_VALUE_FLAGS_NONE, NULL, &local_error); g_assert_error (local_error, G_DBUS_ERROR, G_DBUS_ERROR_INVALID_ARGS); g_assert_false (success); } int main (int argc, char **argv) { setlocale (LC_ALL, ""); g_test_init (&argc, &argv, NULL); g_test_add_func ("/session-limits/types", test_session_limits_types); g_test_add_func ("/session-limits/refs", test_session_limits_refs); g_test_add_func ("/session-limits/check-time-remaining/invalid-time", test_session_limits_check_time_remaining_invalid_time); g_test_add_func ("/session-limits/serialize", test_session_limits_serialize); g_test_add_func ("/session-limits/deserialize", test_session_limits_deserialize); g_test_add_func ("/session-limits/deserialize/invalid", test_session_limits_deserialize_invalid); g_test_add ("/session-limits/builder/stack/non-empty", BuilderFixture, NULL, builder_set_up_stack, test_session_limits_builder_non_empty, builder_tear_down_stack); g_test_add ("/session-limits/builder/stack/empty", BuilderFixture, NULL, builder_set_up_stack, test_session_limits_builder_empty, builder_tear_down_stack); g_test_add ("/session-limits/builder/stack2/non-empty", BuilderFixture, NULL, builder_set_up_stack2, test_session_limits_builder_non_empty, builder_tear_down_stack2); g_test_add ("/session-limits/builder/stack2/empty", BuilderFixture, NULL, builder_set_up_stack2, test_session_limits_builder_empty, builder_tear_down_stack2); g_test_add ("/session-limits/builder/heap/non-empty", BuilderFixture, NULL, builder_set_up_heap, test_session_limits_builder_non_empty, builder_tear_down_heap); g_test_add ("/session-limits/builder/heap/empty", BuilderFixture, NULL, builder_set_up_heap, test_session_limits_builder_empty, builder_tear_down_heap); g_test_add_func ("/session-limits/builder/copy/empty", test_session_limits_builder_copy_empty); g_test_add_func ("/session-limits/builder/copy/full", test_session_limits_builder_copy_full); g_test_add_func ("/session-limits/builder/override/none", test_session_limits_builder_override_none); g_test_add_func ("/session-limits/builder/override/daily-schedule", test_session_limits_builder_override_daily_schedule); g_test_add ("/session-limits/bus/get/async", BusFixture, GUINT_TO_POINTER (TRUE), bus_set_up, test_session_limits_bus_get, bus_tear_down); g_test_add ("/session-limits/bus/get/sync", BusFixture, GUINT_TO_POINTER (FALSE), bus_set_up, test_session_limits_bus_get, bus_tear_down); g_test_add ("/session-limits/bus/get/none", BusFixture, NULL, bus_set_up, test_session_limits_bus_get_none, bus_tear_down); g_test_add ("/session-limits/bus/get/error/invalid-user", BusFixture, NULL, bus_set_up, test_session_limits_bus_get_error_invalid_user, bus_tear_down); g_test_add ("/session-limits/bus/get/error/permission-denied", BusFixture, NULL, bus_set_up, test_session_limits_bus_get_error_permission_denied, bus_tear_down); g_test_add ("/session-limits/bus/get/error/permission-denied-missing", BusFixture, NULL, bus_set_up, test_session_limits_bus_get_error_permission_denied_missing, bus_tear_down); g_test_add ("/session-limits/bus/get/error/unknown", BusFixture, NULL, bus_set_up, test_session_limits_bus_get_error_unknown, bus_tear_down); g_test_add ("/session-limits/bus/get/error/disabled", BusFixture, NULL, bus_set_up, test_session_limits_bus_get_error_disabled, bus_tear_down); g_test_add ("/session-limits/bus/set/async", BusFixture, GUINT_TO_POINTER (TRUE), bus_set_up, test_session_limits_bus_set, bus_tear_down); g_test_add ("/session-limits/bus/set/sync", BusFixture, GUINT_TO_POINTER (FALSE), bus_set_up, test_session_limits_bus_set, bus_tear_down); g_test_add ("/session-limits/bus/set/error/invalid-user", BusFixture, NULL, bus_set_up, test_session_limits_bus_set_error_invalid_user, bus_tear_down); g_test_add ("/session-limits/bus/set/error/permission-denied", BusFixture, NULL, bus_set_up, test_session_limits_bus_set_error_permission_denied, bus_tear_down); g_test_add ("/session-limits/bus/set/error/unknown", BusFixture, NULL, bus_set_up, test_session_limits_bus_set_error_unknown, bus_tear_down); g_test_add ("/session-limits/bus/set/error/invalid-property/daily-schedule", BusFixture, GINT_TO_POINTER (0), bus_set_up, test_session_limits_bus_set_error_invalid_property, bus_tear_down); g_test_add ("/session-limits/bus/set/error/invalid-property/limit-type", BusFixture, GINT_TO_POINTER (1), bus_set_up, test_session_limits_bus_set_error_invalid_property, bus_tear_down); return g_test_run (); } malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/malcontent-client/000077500000000000000000000000001505556674000252145ustar00rootroot00000000000000malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/malcontent-client/docs/000077500000000000000000000000001505556674000261445ustar00rootroot00000000000000malcontent-client.8000066400000000000000000000215761505556674000316110ustar00rootroot00000000000000malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/malcontent-client/docs.\" Manpage for malcontent\-client. .\" Documentation is under the same licence as the malcontent .\" package. .TH man 8 "27 Oct 2020" "1.2" "malcontent\-client man page" .\" .SH NAME .IX Header "NAME" malcontent\-client \- Parental Controls Access Utility .\" .SH SYNOPSIS .IX Header "SYNOPSIS" .\" \fBmalcontent\-client get\-app\-filter [\-q] [\-n] [\fPUSER\fB] .PP \fBmalcontent\-client check\-app\-filter [\-q] [\-n] [\fPUSER\fB] \fPARG\fB .PP \fBmalcontent\-client set\-app\-filter [\-q] [\-n] [\fPUSER\fB] \fPARG\fB .PP \fBmalcontent\-client oars\-section [\-q] [\-n] [\fPUSER\fB] \fPSECTION\fB .PP \fBmalcontent\-client get\-session\-limits [\-q] [\-n] [\fPUSER\fB] .PP \fBmalcontent\-client monitor [\-q] [\fPUSER\fB] .\" .SH DESCRIPTION .IX Header "DESCRIPTION" .\" \fBmalcontent\-client\fP is a utility for querying and updating the parental controls settings for users on the system. It will typically require administrator access to do anything more than query the current user’s parental controls. .PP It communicates with accounts-service, which stores parental controls data. .PP Its first argument is a command to run. The supported commands are documented below. .PP The command line API and output format are unstable and likely to change in future versions of \fBmalcontent\-client\fP. .\" .SH \fBget\-app\-filter\fP OPTIONS .IX Header "get\-app\-filter OPTIONS" .\" Get the app filter for a user. For example: .RS .ad l # malcontent\-client get\-app\-filter timmy .ad b .RE .\" .IP "\fBUSER\fP" Username or ID of the user to get the app filter for. If not specified, the current user will be used by default. .\" .IP "\fB\-q\fP, \fB\-\-quiet\fP" Only output error messages, and no informational messages, as the operation progresses. (Default: Output informational messages.) .\" .IP "\fB\-n\fP, \fB\-\-no\-interactive\fP" Do not allow interactive authorization with polkit. If this is needed to complete the operation, the operation will fail. (Default: Allow interactive authorization.) .\" .SH \fBcheck\-app\-filter\fP OPTIONS .IX Header "check\-app\-filter OPTIONS" .\" Check if a given program, content type or flatpak ref is permitted to be used by a user, according to their current app filter. For example: .RS .ad l # malcontent\-client check\-app\-filter timmy $(which gnome\-calculator) .PP # malcontent\-client check\-app\-filter timmy x\-scheme\-handler/http .PP # malcontent\-client check\-app\-filter timmy app/com.realm667.WolfenDoom_Blade_of_Agony/x86_64/stable .ad b .RE .\" .IP "\fBUSER\fP" Username or ID of the user to get the app filter for. If not specified, the current user will be used by default. .\" .IP "\fBARG\fP" Path to a program, content type or flatpak ref to check against the app filter, to see if it is allowed for the specified user. .\" .IP "\fB\-q\fP, \fB\-\-quiet\fP" Only output error messages, and no informational messages, as the operation progresses. (Default: Output informational messages.) .\" .IP "\fB\-n\fP, \fB\-\-no\-interactive\fP" Do not allow interactive authorization with polkit. If this is needed to complete the operation, the operation will fail. (Default: Allow interactive authorization.) .\" .SH \fBset\-app\-filter\fP OPTIONS .IX Header "set\-app\-filter OPTIONS" .\" Set the app filter for a user, replacing all previous values in it. For example: .RS .ad l # malcontent\-client set\-app\-filter timmy \\ \-\-disallow\-user\-installation \\ $(which gnome\-calculator) \\ x\-scheme\-handler/http \\ app/com.realm667.WolfenDoom_Blade_of_Agony/x86_64/stable .ad b .RE .\" .IP "\fBUSER\fP" Username or ID of the user to set the app filter for. If not specified, the current user will be used by default. .\" .IP "\fBARG\fP" Item to filter in the user’s app filter. This could either be an absolute path or flatpak ref of a program to block; a content type to block all programs handling that type; or an OARS \fBsection=value\fP pair to block installation of apps with a more extreme rating for that OARS section. Multiple items may be specified, and they will replace the user’s current app filter in entirety. If zero items are specified, the app filter is cleared. .\" .IP "\fB\-\-allow\-user\-installation\fP" Allow the user to install flatpaks to their user repository. .\" .IP "\fB\-\-disallow\-user\-installation\fP" Disallow the user from installing flatpaks to their user repository. .\" .IP "\fB\-\-allow\-system\-installation\fP" Allow the user to install flatpaks to the system repository. .\" .IP "\fB\-\-disallow\-system\-installation\fP" Disallow the user from installing flatpaks to the system repository. .\" .IP "\fB\-q\fP, \fB\-\-quiet\fP" Only output error messages, and no informational messages, as the operation progresses. (Default: Output informational messages.) .\" .IP "\fB\-n\fP, \fB\-\-no\-interactive\fP" Do not allow interactive authorization with polkit. If this is needed to complete the operation, the operation will fail. (Default: Allow interactive authorization.) .\" .SH \fBoars\-section\fP OPTIONS .IX Header "oars\-section OPTIONS" .\" Get the value set for a specific OARS section from the app filter of the given user. For example: .RS .ad l # malcontent\-client oars\-section timmy language\-profanity .ad b .RE .\" .IP "\fBUSER\fP" Username or ID of the user to get the OARS filter for. If not specified, the current user will be used by default. .\" .IP "\fBSECTION\fP" OARS section to get the restriction level of the given user for. For example, \fBlanguage\-profanity\fP. .\" .IP "\fB\-q\fP, \fB\-\-quiet\fP" Only output error messages, and no informational messages, as the operation progresses. (Default: Output informational messages.) .\" .IP "\fB\-n\fP, \fB\-\-no\-interactive\fP" Do not allow interactive authorization with polkit. If this is needed to complete the operation, the operation will fail. (Default: Allow interactive authorization.) .\" .SH \fBget\-session\-limits\fP OPTIONS .IX Header "get\-session\-limits OPTIONS" .\" Get the session limits set for a user. For example: .RS .ad l # malcontent\-client get\-session\-limits timmy .ad b .RE .\" .IP "\fBUSER\fP" Username or ID of the user to get the session limits for. If not specified, the current user will be used by default. .\" .IP "\fB\-q\fP, \fB\-\-quiet\fP" Only output error messages, and no informational messages, as the operation progresses. (Default: Output informational messages.) .\" .IP "\fB\-n\fP, \fB\-\-no\-interactive\fP" Do not allow interactive authorization with polkit. If this is needed to complete the operation, the operation will fail. (Default: Allow interactive authorization.) .\" .IP "\fB\-\-now yyyy\-mm\-ddThh:mm:ssZ\fP" Check session limits (in particular, session expiry time) against the given date/time, provided in ISO 8601 format. (Default: Current date/time.) .\" .SH \fBmonitor\fP OPTIONS .IX Header "monitor OPTIONS" .\" Monitor changes to the parental controls settings for a specific user. For example: .RS .ad l # malcontent\-client monitor timmy .ad b .RE .\" .IP "\fBUSER\fP" Username or ID of the user to monitor the parental controls for. If not specified, the current user will be used by default. .\" .IP "\fB\-q\fP, \fB\-\-quiet\fP" Only output error messages, and no informational messages, as the operation progresses. (Default: Output informational messages.) .\" .SH "ENVIRONMENT" .IX Header "ENVIRONMENT" .\" \fBmalcontent\-client\fP supports the standard GLib environment variables for debugging. These variables are \fBnot\fP intended to be used in production: .\" .IP \fI$G_MESSAGES_DEBUG\fP 4 .IX Item "$G_MESSAGES_DEBUG" This variable can contain one or more debug domain names to display debug output for. The value \fIall\fP will enable all debug output. The default is for no debug output to be enabled. .\" .SH "EXIT STATUS" .IX Header "EXIT STATUS" .\" \fBmalcontent\-client\fP may return one of several error codes if it encounters problems. .\" .IP "0" 4 .IX Item "0" No problems occurred. The utility ran and successfully queried the app filter. If running the \fBcheck\-app\-filter\fP command, the given path, content type or flatpak ref was allowed for the given user. .\" .IP "1" 4 .IX Item "1" An invalid option was passed to \fBmalcontent\-client\fP on startup. .\" .IP "2" 4 .IX Item "2" The current user was not authorized to query the app filter for the given user. .\" .IP "3" 4 .IX Item "3" If running the \fBcheck\-app\-filter\fP command, the given path, content type or flatpak ref was \fInot\fP allowed for the given user. .\" .IP "4" 4 .IX Item "4" Malcontent is disabled at the system level, and hence parental controls are not enabled or enforced. .\" .IP "5" 4 .IX Item "5" An operation failed and no more specific error information is available. .\" .SH BUGS .IX Header "BUGS" .\" Any bugs which are found should be reported on the project website: .br \fIhttps://gitlab.freedesktop.org/pwithnall/malcontent/-/issues\fP .\" .SH AUTHOR .IX Header "AUTHOR" .\" Endless Mobile, Inc. .\" .SH COPYRIGHT .IX Header "COPYRIGHT" .\" Copyright © 2018 Endless Mobile, Inc. malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/malcontent-client/malcontent-client.py000066400000000000000000000555111505556674000312150ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright © 2018 Endless Mobile, Inc. # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2.1 of the License, or (at your option) any later version. # # This library 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 # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public License # along with this library; if not, write to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA import argparse import datetime import os import pwd import sys import gi gi.require_version('Malcontent', '0') # noqa from gi.repository import Malcontent, GLib, Gio # Exit codes, which are a documented part of the API. EXIT_SUCCESS = 0 EXIT_INVALID_OPTION = 1 EXIT_PERMISSION_DENIED = 2 EXIT_PATH_NOT_ALLOWED = 3 EXIT_DISABLED = 4 EXIT_FAILED = 5 def __manager_error_to_exit_code(error): if error.matches(Malcontent.manager_error_quark(), Malcontent.ManagerError.INVALID_USER): return EXIT_INVALID_OPTION elif error.matches(Malcontent.manager_error_quark(), Malcontent.ManagerError.PERMISSION_DENIED): return EXIT_PERMISSION_DENIED elif error.matches(Malcontent.manager_error_quark(), Malcontent.ManagerError.INVALID_DATA): return EXIT_INVALID_OPTION elif error.matches(Malcontent.manager_error_quark(), Malcontent.ManagerError.DISABLED): return EXIT_DISABLED return EXIT_FAILED def __get_app_filter(user_id, interactive): """Get the app filter for `user_id` off the bus. If `interactive` is `True`, interactive polkit authorisation dialogues will be allowed. An exception will be raised on failure.""" if interactive: flags = Malcontent.ManagerGetValueFlags.INTERACTIVE else: flags = Malcontent.ManagerGetValueFlags.NONE connection = Gio.bus_get_sync(Gio.BusType.SYSTEM) manager = Malcontent.Manager.new(connection) return manager.get_app_filter( user_id=user_id, flags=flags, cancellable=None) def __get_app_filter_or_error(user_id, interactive): """Wrapper around __get_app_filter() which prints an error and raises SystemExit, rather than an internal exception.""" try: return __get_app_filter(user_id, interactive) except GLib.Error as e: print('Error getting app filter for user {}: {}'.format( user_id, e.message), file=sys.stderr) raise SystemExit(__manager_error_to_exit_code(e)) def __get_session_limits(user_id, interactive): """Get the session limits for `user_id` off the bus. If `interactive` is `True`, interactive polkit authorisation dialogues will be allowed. An exception will be raised on failure.""" if interactive: flags = Malcontent.ManagerGetValueFlags.INTERACTIVE else: flags = Malcontent.ManagerGetValueFlags.NONE connection = Gio.bus_get_sync(Gio.BusType.SYSTEM) manager = Malcontent.Manager.new(connection) return manager.get_session_limits( user_id=user_id, flags=flags, cancellable=None) def __get_session_limits_or_error(user_id, interactive): """Wrapper around __get_session_limits() which prints an error and raises SystemExit, rather than an internal exception.""" try: return __get_session_limits(user_id, interactive) except GLib.Error as e: print('Error getting session limits for user {}: {}'.format( user_id, e.message), file=sys.stderr) raise SystemExit(__manager_error_to_exit_code(e)) def __set_app_filter(user_id, app_filter, interactive): """Set the app filter for `user_id` off the bus. If `interactive` is `True`, interactive polkit authorisation dialogues will be allowed. An exception will be raised on failure.""" if interactive: flags = Malcontent.ManagerSetValueFlags.INTERACTIVE else: flags = Malcontent.ManagerSetValueFlags.NONE connection = Gio.bus_get_sync(Gio.BusType.SYSTEM) manager = Malcontent.Manager.new(connection) manager.set_app_filter( user_id=user_id, app_filter=app_filter, flags=flags, cancellable=None) def __set_app_filter_or_error(user_id, app_filter, interactive): """Wrapper around __set_app_filter() which prints an error and raises SystemExit, rather than an internal exception.""" try: __set_app_filter(user_id, app_filter, interactive) except GLib.Error as e: print('Error setting app filter for user {}: {}'.format( user_id, e.message), file=sys.stderr) raise SystemExit(__manager_error_to_exit_code(e)) def __lookup_user_id(user_id_or_username): """Convert a command-line specified username or ID into a (user ID, username) tuple, looking up the component which isn’t specified. If `user_id_or_username` is empty, use the current user ID. Raise KeyError if lookup fails.""" if user_id_or_username == '': user_id = os.getuid() return (user_id, pwd.getpwuid(user_id).pw_name) elif user_id_or_username.isdigit(): user_id = int(user_id_or_username) return (user_id, pwd.getpwuid(user_id).pw_name) else: username = user_id_or_username return (pwd.getpwnam(username).pw_uid, username) def __lookup_user_id_or_error(user_id_or_username): """Wrapper around __lookup_user_id() which prints an error and raises SystemExit, rather than an internal exception.""" try: return __lookup_user_id(user_id_or_username) except KeyError: print('Error getting ID for username {}'.format(user_id_or_username), file=sys.stderr) raise SystemExit(EXIT_INVALID_OPTION) oars_value_mapping = { Malcontent.AppFilterOarsValue.UNKNOWN: "unknown", Malcontent.AppFilterOarsValue.NONE: "none", Malcontent.AppFilterOarsValue.MILD: "mild", Malcontent.AppFilterOarsValue.MODERATE: "moderate", Malcontent.AppFilterOarsValue.INTENSE: "intense", } def __oars_value_to_string(value): """Convert an Malcontent.AppFilterOarsValue to a human-readable string.""" try: return oars_value_mapping[value] except KeyError: return "invalid (OARS value {})".format(value) def __oars_value_from_string(value_str): """Convert a human-readable string to an Malcontent.AppFilterOarsValue.""" for k, v in oars_value_mapping.items(): if v == value_str: return k raise KeyError('Unknown OARS value ‘{}’'.format(value_str)) def command_get_app_filter(user, quiet=False, interactive=True): """Get the app filter for the given user.""" (user_id, username) = __lookup_user_id_or_error(user) app_filter = __get_app_filter_or_error(user_id, interactive) print('App filter for user {} retrieved:'.format(username)) sections = app_filter.get_oars_sections() for section in sections: value = app_filter.get_oars_value(section) print(' {}: {}'.format(section, oars_value_mapping[value])) if not sections: print(' (No OARS values)') if app_filter.is_user_installation_allowed(): print('App installation is allowed to user repository') else: print('App installation is disallowed to user repository') if app_filter.is_system_installation_allowed(): print('App installation is allowed to system repository') else: print('App installation is disallowed to system repository') def command_get_session_limits(user, now=None, quiet=False, interactive=True): """Get the session limits for the given user.""" (user_id, username) = __lookup_user_id_or_error(user) session_limits = __get_session_limits_or_error(user_id, interactive) (user_allowed_now, time_remaining_secs, time_limit_enabled) = \ session_limits.check_time_remaining(now.timestamp() * GLib.USEC_PER_SEC) if not time_limit_enabled: print('Session limits are not enabled for user {}'.format(username)) elif user_allowed_now: print('Session limits are enabled for user {}, and they have {} ' 'seconds remaining'.format(username, time_remaining_secs)) else: print('Session limits are enabled for user {}, and they have no time ' 'remaining'.format(username)) def command_monitor(user, quiet=False, interactive=True): """Monitor app filter changes for the given user.""" if user == '': (filter_user_id, filter_username) = (0, '') else: (filter_user_id, filter_username) = __lookup_user_id_or_error(user) apply_filter = (user != '') def _on_app_filter_changed(manager, changed_user_id): if not apply_filter or changed_user_id == filter_user_id: print('App filter changed for user ID {}'.format(changed_user_id)) connection = Gio.bus_get_sync(Gio.BusType.SYSTEM) manager = Malcontent.Manager.new(connection) manager.connect('app-filter-changed', _on_app_filter_changed) if apply_filter: print('Monitoring app filter changes for ' 'user {}'.format(filter_username)) else: print('Monitoring app filter changes for all users') # Loop until Ctrl+C is pressed. context = GLib.MainContext.default() while True: try: context.iteration(may_block=True) except KeyboardInterrupt: break # Simple check to check whether @arg is a valid flatpak ref - it uses the # same logic as 'MctAppFilter' to determine it and should be kept in sync # with its implementation def is_valid_flatpak_ref(arg): parts = arg.split('/') return (len(parts) == 4 and \ (parts[0] == 'app' or parts[0] == 'runtime') and \ parts[1] != '' and parts[2] != '' and parts[3] != '') # Simple check to check whether @arg is a valid content type - it uses the # same logic as 'MctAppFilter' to determine it and should be kept in sync # with its implementation def is_valid_content_type(arg): parts = arg.split('/') return (len(parts) == 2 and \ parts[0] != '' and parts[1] != '') def command_check_app_filter(user, arg, quiet=False, interactive=True): """Check the given path, content type or flatpak ref is runnable by the given user, according to their app filter.""" (user_id, username) = __lookup_user_id_or_error(user) app_filter = __get_app_filter_or_error(user_id, interactive) is_maybe_flatpak_id = arg.startswith('app/') and arg.count('/') < 3 is_maybe_flatpak_ref = is_valid_flatpak_ref(arg) # Only check if arg is a valid content type if not already considered a # valid flatpak id, otherwise we always get multiple types recognised # when passing flatpak IDs as argument is_maybe_content_type = not is_maybe_flatpak_id and is_valid_content_type(arg) is_maybe_path = os.path.exists(arg) is_maybe_desktop_file = arg.endswith('.desktop') recognised_types = sum([is_maybe_flatpak_id, is_maybe_flatpak_ref, is_maybe_content_type, is_maybe_path]) if recognised_types == 0: print('Unknown argument ‘{}’'.format(arg), file=sys.stderr) raise SystemExit(EXIT_INVALID_OPTION) elif recognised_types > 1: print('Ambiguous argument ‘{}’ recognised as multiple types'.format(arg), file=sys.stderr) raise SystemExit(EXIT_INVALID_OPTION) elif is_maybe_flatpak_id: # Flatpak app ID arg = arg[4:] is_allowed = app_filter.is_flatpak_app_allowed(arg) noun = 'Flatpak app ID' elif is_maybe_flatpak_ref: # Flatpak ref is_allowed = app_filter.is_flatpak_ref_allowed(arg) noun = 'Flatpak ref' elif is_maybe_content_type: # Content type is_allowed = app_filter.is_content_type_allowed(arg) noun = 'Content type' elif is_maybe_path and is_maybe_desktop_file: path = os.path.abspath(arg) app_info = Gio.DesktopAppInfo.new_from_filename(path) is_allowed = app_filter.is_appinfo_allowed(app_info) noun = 'Desktop file' elif is_maybe_path: path = os.path.abspath(arg) is_allowed = app_filter.is_path_allowed(path) noun = 'Path' else: raise AssertionError('code should not be reached') if is_allowed: if not quiet: print('{} {} is allowed by app filter for user {}'.format( noun, arg, username)) return else: if not quiet: print('{} {} is not allowed by app filter for user {}'.format( noun, arg, username)) raise SystemExit(EXIT_PATH_NOT_ALLOWED) def command_oars_section(user, section, quiet=False, interactive=True): """Get the value of the given OARS section for the given user, according to their OARS filter.""" (user_id, username) = __lookup_user_id_or_error(user) app_filter = __get_app_filter_or_error(user_id, interactive) value = app_filter.get_oars_value(section) print('OARS section ‘{}’ for user {} has value ‘{}’'.format( section, username, __oars_value_to_string(value))) def command_set_app_filter(user, allow_user_installation=True, allow_system_installation=False, app_filter_args=None, quiet=False, interactive=True): """Set the app filter for the given user.""" (user_id, username) = __lookup_user_id_or_error(user) builder = Malcontent.AppFilterBuilder.new() builder.set_allow_user_installation(allow_user_installation) builder.set_allow_system_installation(allow_system_installation) for arg in app_filter_args: if '=' in arg: [section, value_str] = arg.split('=', 2) try: value = __oars_value_from_string(value_str) except KeyError: print('Unknown OARS value ‘{}’'.format(value_str), file=sys.stderr) raise SystemExit(EXIT_INVALID_OPTION) builder.set_oars_value(section, value) else: is_maybe_flatpak_ref = is_valid_flatpak_ref(arg) is_maybe_content_type = is_valid_content_type(arg) is_maybe_path = os.path.exists(arg) recognised_types = sum([is_maybe_flatpak_ref, is_maybe_content_type, is_maybe_path]) if recognised_types == 0: print('Unknown argument ‘{}’'.format(arg), file=sys.stderr) raise SystemExit(EXIT_INVALID_OPTION) elif recognised_types > 1: print('Ambiguous argument ‘{}’ recognised as multiple types'.format(arg), file=sys.stderr) raise SystemExit(EXIT_INVALID_OPTION) elif is_maybe_flatpak_ref: builder.blocklist_flatpak_ref(arg) elif is_maybe_content_type: builder.blocklist_content_type(arg) elif is_maybe_path: path = os.path.abspath(arg) builder.blocklist_path(path) else: raise AssertionError('code should not be reached') app_filter = builder.end() __set_app_filter_or_error(user_id, app_filter, interactive) if not quiet: print('App filter for user {} set'.format(username)) def main(): # Parse command line arguments parser = argparse.ArgumentParser( description='Query and update parental controls.') subparsers = parser.add_subparsers(metavar='command', help='command to run (default: ' '‘get-app-filter’)') parser.set_defaults(function=command_get_app_filter, user='') parser.add_argument('-q', '--quiet', action='store_true', help='output no informational messages') parser.set_defaults(quiet=False) # Common options for the subcommands which might need authorisation. common_parser = argparse.ArgumentParser(add_help=False) group = common_parser.add_mutually_exclusive_group() group.add_argument('-n', '--no-interactive', dest='interactive', action='store_false', help='do not allow interactive polkit authorization ' 'dialogues') group.add_argument('--interactive', dest='interactive', action='store_true', help='opposite of --no-interactive') common_parser.set_defaults(interactive=True) # ‘get-app-filter’ command parser_get_app_filter = \ subparsers.add_parser('get-app-filter', parents=[common_parser], help='get current app filter settings') parser_get_app_filter.set_defaults(function=command_get_app_filter) parser_get_app_filter.add_argument('user', default='', nargs='?', help='user ID or username to get the ' 'app filter for (default: current ' 'user)') # ‘get-session-limits’ command parser_get_session_limits = \ subparsers.add_parser('get-session-limits', parents=[common_parser], help='get current session limit settings') parser_get_session_limits.set_defaults(function=command_get_session_limits) parser_get_session_limits.add_argument('user', default='', nargs='?', help='user ID or username to get ' 'the session limits for (default: ' 'current user)') parser_get_session_limits.add_argument( '--now', metavar='yyyy-mm-ddThh:mm:ssZ', type=lambda d: datetime.datetime.strptime(d, '%Y-%m-%dT%H:%M:%S%z'), default=datetime.datetime.now(), help='date/time to use as the value for ‘now’ (default: wall clock ' 'time)') # ‘monitor’ command parser_monitor = subparsers.add_parser('monitor', help='monitor parental controls ' 'settings changes') parser_monitor.set_defaults(function=command_monitor) parser_monitor.add_argument('user', default='', nargs='?', help='user ID or username to monitor the app ' 'filter for (default: all users)') # ‘check-app-filter’ command parser_check_app_filter = \ subparsers.add_parser('check-app-filter', parents=[common_parser], help='check whether a path, content type or ' 'flatpak ref is allowed by app filter') parser_check_app_filter.set_defaults(function=command_check_app_filter) parser_check_app_filter.add_argument('user', default='', nargs='?', help='user ID or username to get the ' 'app filter for (default: ' 'current user)') parser_check_app_filter.add_argument('arg', help='path to a program, content ' 'type or flatpak ref to check') # ‘oars-section’ command parser_oars_section = subparsers.add_parser('oars-section', parents=[common_parser], help='get the value of a ' 'given OARS section') parser_oars_section.set_defaults(function=command_oars_section) parser_oars_section.add_argument('user', default='', nargs='?', help='user ID or username to get the ' 'OARS filter for (default: current ' 'user)') parser_oars_section.add_argument('section', help='OARS section to get') # ‘set-app-filter’ command parser_set_app_filter = \ subparsers.add_parser('set-app-filter', parents=[common_parser], help='set current app filter settings') parser_set_app_filter.set_defaults(function=command_set_app_filter) parser_set_app_filter.add_argument('user', default='', nargs='?', help='user ID or username to set the ' 'app filter for (default: current ' 'user)') parser_set_app_filter.add_argument('--allow-user-installation', dest='allow_user_installation', action='store_true', help='allow installation to the user ' 'flatpak repo in general') parser_set_app_filter.add_argument('--disallow-user-installation', dest='allow_user_installation', action='store_false', help='unconditionally disallow ' 'installation to the user flatpak ' 'repo') parser_set_app_filter.add_argument('--allow-system-installation', dest='allow_system_installation', action='store_true', help='allow installation to the system ' 'flatpak repo in general') parser_set_app_filter.add_argument('--disallow-system-installation', dest='allow_system_installation', action='store_false', help='unconditionally disallow ' 'installation to the system ' 'flatpak repo') parser_set_app_filter.add_argument('app_filter_args', nargs='*', help='paths, content types or flatpak ' 'refs to blocklist and OARS ' 'section=value pairs to store') parser_set_app_filter.set_defaults(allow_user_installation=True, allow_system_installation=False) # Parse the command line arguments and run the subcommand. args = parser.parse_args() args_dict = dict((k, v) for k, v in vars(args).items() if k != 'function') args.function(**args_dict) if __name__ == '__main__': main() malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/malcontent-client/meson.build000066400000000000000000000003351505556674000273570ustar00rootroot00000000000000# Python program install_data('malcontent-client.py', install_dir: bindir, install_mode: 'rwxr-xr-x', rename: ['malcontent-client'], ) # Documentation install_man('docs/malcontent-client.8') # TODO subdir('tests')malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/malcontent-control/000077500000000000000000000000001505556674000254165ustar00rootroot00000000000000malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/malcontent-control/application.c000066400000000000000000000464571505556674000301050ustar00rootroot00000000000000/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- * * Copyright © 2019 Endless Mobile, Inc. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . * * Authors: * - Philip Withnall */ #include "config.h" #include #include #include #include #include #include #include #include #include #include #include "application.h" #include "user-selector.h" static void user_selector_notify_user_cb (GObject *obj, GParamSpec *pspec, gpointer user_data); static void user_manager_notify_is_loaded_cb (GObject *obj, GParamSpec *pspec, gpointer user_data); static void permission_new_cb (GObject *source_object, GAsyncResult *result, gpointer user_data); static void permission_notify_allowed_cb (GObject *obj, GParamSpec *pspec, gpointer user_data); static void user_accounts_panel_button_clicked_cb (GtkButton *button, gpointer user_data); static void about_action_cb (GSimpleAction *action, GVariant *parameters, gpointer user_data); static void help_action_cb (GSimpleAction *action, GVariant *parameters, gpointer user_data); static void quit_action_cb (GSimpleAction *action, GVariant *parameters, gpointer user_data); /** * MctApplication: * * #MctApplication is a top-level object representing the parental controls * application. * * Since: 0.5.0 */ struct _MctApplication { GtkApplication parent_instance; GCancellable *cancellable; /* (owned) */ GDBusConnection *dbus_connection; /* (owned) */ ActUserManager *user_manager; /* (owned) */ GPermission *permission; /* (owned) */ GError *permission_error; /* (nullable) (owned) */ MctUserSelector *user_selector; MctUserControls *user_controls; GtkStack *main_stack; AdwStatusPage *error_page; GtkLockButton *lock_button; GtkButton *user_accounts_panel_button; GtkLabel *help_label; }; G_DEFINE_TYPE (MctApplication, mct_application, GTK_TYPE_APPLICATION) static void mct_application_init (MctApplication *self) { self->cancellable = g_cancellable_new (); } static void mct_application_constructed (GObject *object) { GApplication *application = G_APPLICATION (object); const GOptionEntry options[] = { { "user", 'u', G_OPTION_FLAG_NONE, G_OPTION_ARG_STRING, NULL, /* Translators: This documents the --user command line option to malcontent-control: */ N_("User to select in the UI"), /* Translators: This is a placeholder for a command line argument value: */ N_("USERNAME") }, { NULL, }, }; g_application_set_application_id (application, "org.freedesktop.MalcontentControl"); g_application_add_main_option_entries (application, options); g_application_set_flags (application, g_application_get_flags (application) | G_APPLICATION_HANDLES_COMMAND_LINE); /* Translators: This is a summary of what the application does, displayed when * it’s run with --help: */ g_application_set_option_context_parameter_string (application, N_("— view and edit parental controls")); /* Localisation */ setlocale (LC_ALL, ""); bindtextdomain ("malcontent", PACKAGE_LOCALE_DIR); bind_textdomain_codeset ("malcontent", "UTF-8"); textdomain ("malcontent"); g_set_application_name (_("Parental Controls")); gtk_window_set_default_icon_name ("org.freedesktop.MalcontentControl"); G_OBJECT_CLASS (mct_application_parent_class)->constructed (object); } static void mct_application_dispose (GObject *object) { MctApplication *self = MCT_APPLICATION (object); g_cancellable_cancel (self->cancellable); if (self->user_manager != NULL) { g_signal_handlers_disconnect_by_func (self->user_manager, user_manager_notify_is_loaded_cb, self); g_clear_object (&self->user_manager); } if (self->permission != NULL) { g_signal_handlers_disconnect_by_func (self->permission, permission_notify_allowed_cb, self); g_clear_object (&self->permission); } g_clear_object (&self->dbus_connection); g_clear_error (&self->permission_error); g_clear_object (&self->cancellable); G_OBJECT_CLASS (mct_application_parent_class)->dispose (object); } static GtkWindow * mct_application_get_main_window (MctApplication *self) { return gtk_application_get_active_window (GTK_APPLICATION (self)); } static void mct_application_activate (GApplication *application) { MctApplication *self = MCT_APPLICATION (application); GtkWindow *window = NULL; window = mct_application_get_main_window (self); if (window == NULL) { g_autoptr(GtkBuilder) builder = NULL; g_autoptr(GError) local_error = NULL; /* Ensure the types used in the UI are registered. */ g_type_ensure (MCT_TYPE_USER_CONTROLS); g_type_ensure (MCT_TYPE_USER_SELECTOR); /* Start loading the permission */ polkit_permission_new ("org.freedesktop.MalcontentControl.administration", NULL, self->cancellable, permission_new_cb, self); builder = gtk_builder_new (); g_assert (self->dbus_connection == NULL); self->dbus_connection = g_bus_get_sync (G_BUS_TYPE_SYSTEM, self->cancellable, &local_error); if (self->dbus_connection == NULL) { g_error ("Error getting system bus: %s", local_error->message); return; } g_assert (self->user_manager == NULL); self->user_manager = g_object_ref (act_user_manager_get_default ()); gtk_builder_set_translation_domain (builder, "malcontent"); gtk_builder_expose_object (builder, "user_manager", G_OBJECT (self->user_manager)); gtk_builder_expose_object (builder, "dbus_connection", G_OBJECT (self->dbus_connection)); gtk_builder_add_from_resource (builder, "/org/freedesktop/MalcontentControl/ui/main.ui", &local_error); g_assert (local_error == NULL); /* Set up the main window. */ window = GTK_WINDOW (gtk_builder_get_object (builder, "main_window")); gtk_window_set_application (window, GTK_APPLICATION (application)); self->main_stack = GTK_STACK (gtk_builder_get_object (builder, "main_stack")); self->user_selector = MCT_USER_SELECTOR (gtk_builder_get_object (builder, "user_selector")); self->user_controls = MCT_USER_CONTROLS (gtk_builder_get_object (builder, "user_controls")); self->error_page = ADW_STATUS_PAGE (gtk_builder_get_object (builder, "error_page")); self->lock_button = GTK_LOCK_BUTTON (gtk_builder_get_object (builder, "lock_button")); self->user_accounts_panel_button = GTK_BUTTON (gtk_builder_get_object (builder, "user_accounts_panel_button")); /* Connect signals. */ g_signal_connect_object (self->user_selector, "notify::user", G_CALLBACK (user_selector_notify_user_cb), self, 0 /* flags */); g_signal_connect_object (self->user_accounts_panel_button, "clicked", G_CALLBACK (user_accounts_panel_button_clicked_cb), self, 0 /* flags */); g_signal_connect (self->user_manager, "notify::is-loaded", G_CALLBACK (user_manager_notify_is_loaded_cb), self); /* Work out whether to show the loading page or the main page, and show * the controls for the initially selected user. */ user_selector_notify_user_cb (G_OBJECT (self->user_selector), NULL, self); user_manager_notify_is_loaded_cb (G_OBJECT (self->user_manager), NULL, self); gtk_window_present (GTK_WINDOW (window)); } /* Bring the window to the front. */ gtk_window_present (window); } static void mct_application_startup (GApplication *application) { const GActionEntry app_entries[] = { { "about", about_action_cb, NULL, NULL, NULL, { 0, } }, { "help", help_action_cb, NULL, NULL, NULL, { 0, } }, { "quit", quit_action_cb, NULL, NULL, NULL, { 0, } }, }; /* Chain up. */ G_APPLICATION_CLASS (mct_application_parent_class)->startup (application); adw_init (); g_action_map_add_action_entries (G_ACTION_MAP (application), app_entries, G_N_ELEMENTS (app_entries), application); gtk_application_set_accels_for_action (GTK_APPLICATION (application), "app.help", (const gchar * const[]) { "F1", NULL }); gtk_application_set_accels_for_action (GTK_APPLICATION (application), "app.quit", (const gchar * const[]) { "q", "w", NULL }); } static gint mct_application_command_line (GApplication *application, GApplicationCommandLine *command_line) { MctApplication *self = MCT_APPLICATION (application); GVariantDict *options = g_application_command_line_get_options_dict (command_line); const gchar *username; /* Show the application. */ g_application_activate (application); /* Select a user if requested. */ if (g_variant_dict_lookup (options, "user", "&s", &username) && !mct_user_selector_select_user_by_username (self->user_selector, username)) g_warning ("Failed to select user ‘%s’", username); return 0; /* exit status */ } static void mct_application_class_init (MctApplicationClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); GApplicationClass *application_class = G_APPLICATION_CLASS (klass); object_class->constructed = mct_application_constructed; object_class->dispose = mct_application_dispose; application_class->activate = mct_application_activate; application_class->startup = mct_application_startup; application_class->command_line = mct_application_command_line; } static void about_action_cb (GSimpleAction *action, GVariant *parameters, gpointer user_data) { MctApplication *self = MCT_APPLICATION (user_data); const gchar *authors[] = { "Philip Withnall ", "Georges Basile Stavracas Neto ", "Andre Moreira Magalhaes ", NULL }; gtk_show_about_dialog (mct_application_get_main_window (self), "version", VERSION, "copyright", _("Copyright © 2019, 2020 Endless Mobile, Inc."), "authors", authors, /* Translators: this should be "translated" to the names of people who have translated Malcontent into this language, one per line. */ "translator-credits", _("translator-credits"), "logo-icon-name", "org.freedesktop.MalcontentControl", "license-type", GTK_LICENSE_GPL_2_0, "wrap-license", TRUE, /* Translators: "Malcontent" is the brand name of this project, so should not be translated. */ "website-label", _("Malcontent Website"), "website", "https://gitlab.freedesktop.org/pwithnall/malcontent", NULL); } static void on_malcontent_help_shown_finished_cb (GObject *source, GAsyncResult *result, gpointer user_data) { MctApplication *self = MCT_APPLICATION (user_data); GtkUriLauncher *launcher = GTK_URI_LAUNCHER (source); g_autoptr(GError) local_error = NULL; if (!gtk_uri_launcher_launch_finish (launcher, result, &local_error)) { g_autoptr(GtkAlertDialog) dialog = NULL; dialog = gtk_alert_dialog_new (_("The help contents could not be displayed")); gtk_alert_dialog_set_detail (dialog, local_error->message); gtk_alert_dialog_set_modal (dialog, TRUE); gtk_alert_dialog_show (dialog, mct_application_get_main_window (self)); } } static void help_action_cb (GSimpleAction *action, GVariant *parameters, gpointer user_data) { MctApplication *self = MCT_APPLICATION (user_data); g_autoptr(GtkUriLauncher) launcher = NULL; launcher = gtk_uri_launcher_new ("help:malcontent"); gtk_uri_launcher_launch (launcher, mct_application_get_main_window (self), NULL, on_malcontent_help_shown_finished_cb, self); } static void quit_action_cb (GSimpleAction *action, GVariant *parameters, gpointer user_data) { MctApplication *self = MCT_APPLICATION (user_data); g_application_quit (G_APPLICATION (self)); } static void update_main_stack (MctApplication *self) { gboolean is_user_manager_loaded, is_permission_loaded, has_permission; const gchar *new_page_name, *old_page_name; GtkWidget *new_focus_widget; ActUser *selected_user; /* The implementation of #ActUserManager guarantees that once is-loaded is * true, it is never reset to false. */ g_object_get (self->user_manager, "is-loaded", &is_user_manager_loaded, NULL); is_permission_loaded = (self->permission != NULL || self->permission_error != NULL); has_permission = (self->permission != NULL && g_permission_get_allowed (self->permission)); selected_user = mct_user_selector_get_user (self->user_selector); /* Handle any loading errors (including those from getting the permission). */ if ((is_user_manager_loaded && act_user_manager_no_service (self->user_manager)) || self->permission_error != NULL) { adw_status_page_set_title (self->error_page, _("Failed to load user data from the system")); adw_status_page_set_description (self->error_page, _("Please make sure that the AccountsService is installed and enabled.")); new_page_name = "error"; new_focus_widget = NULL; } else if (is_user_manager_loaded && selected_user == NULL) { new_page_name = "no-other-users"; new_focus_widget = GTK_WIDGET (self->user_accounts_panel_button); } else if (is_permission_loaded && !has_permission) { G_GNUC_BEGIN_IGNORE_DEPRECATIONS gtk_lock_button_set_permission (self->lock_button, self->permission); G_GNUC_END_IGNORE_DEPRECATIONS mct_user_controls_set_permission (self->user_controls, self->permission); new_page_name = "unlock"; new_focus_widget = GTK_WIDGET (self->lock_button); } else if (is_permission_loaded && is_user_manager_loaded) { g_autofree gchar *help_label = NULL; /* Translators: Replace the link to commonsensemedia.org with some * localised guidance for parents/carers on how to set restrictions on * their child/caree in a responsible way which is in keeping with the * best practice and culture of the region. If no suitable localised * guidance exists, and if the default commonsensemedia.org link is not * suitable, please file an issue against malcontent so we can discuss * further! * https://gitlab.freedesktop.org/pwithnall/malcontent/-/issues/new */ help_label = g_strdup_printf (_("It’s recommended that restrictions are " "set as part of an ongoing conversation " "with %s. " "Read guidance on what to consider."), act_user_get_real_name (selected_user)); mct_user_controls_set_description (self->user_controls, help_label); mct_user_controls_set_user (self->user_controls, selected_user); new_page_name = "controls"; new_focus_widget = GTK_WIDGET (self->user_controls); } else { new_page_name = "loading"; new_focus_widget = NULL; } old_page_name = gtk_stack_get_visible_child_name (self->main_stack); gtk_stack_set_visible_child_name (self->main_stack, new_page_name); if (new_focus_widget != NULL && !g_str_equal (old_page_name, new_page_name)) gtk_widget_grab_focus (new_focus_widget); } static void user_selector_notify_user_cb (GObject *obj, GParamSpec *pspec, gpointer user_data) { MctApplication *self = MCT_APPLICATION (user_data); update_main_stack (self); } static void user_manager_notify_is_loaded_cb (GObject *obj, GParamSpec *pspec, gpointer user_data) { MctApplication *self = MCT_APPLICATION (user_data); update_main_stack (self); } static void permission_new_cb (GObject *source_object, GAsyncResult *result, gpointer user_data) { MctApplication *self = MCT_APPLICATION (user_data); g_autoptr(GPermission) permission = NULL; g_autoptr(GError) local_error = NULL; permission = polkit_permission_new_finish (result, &local_error); if (permission == NULL) { g_assert (self->permission_error == NULL); self->permission_error = g_steal_pointer (&local_error); g_debug ("Error getting permission: %s", self->permission_error->message); } else { g_assert (self->permission == NULL); self->permission = g_steal_pointer (&permission); g_signal_connect (self->permission, "notify::allowed", G_CALLBACK (permission_notify_allowed_cb), self); } /* Recalculate the UI. */ update_main_stack (self); } static void permission_notify_allowed_cb (GObject *obj, GParamSpec *pspec, gpointer user_data) { MctApplication *self = MCT_APPLICATION (user_data); update_main_stack (self); } static void user_accounts_panel_button_clicked_cb (GtkButton *button, gpointer user_data) { g_autoptr(GError) local_error = NULL; if (!g_spawn_command_line_async ("gnome-control-center system users", &local_error)) { g_warning ("Error opening GNOME Control Center: %s", local_error->message); return; } } /** * mct_application_new: * * Create a new #MctApplication. * * Returns: (transfer full): a new #MctApplication * Since: 0.5.0 */ MctApplication * mct_application_new (void) { return g_object_new (MCT_TYPE_APPLICATION, NULL); } malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/malcontent-control/application.h000066400000000000000000000021671505556674000301000ustar00rootroot00000000000000/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- * * Copyright © 2019 Endless Mobile, Inc. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . * * Authors: * - Philip Withnall */ #pragma once #include #include #include #include G_BEGIN_DECLS #define MCT_TYPE_APPLICATION mct_application_get_type () G_DECLARE_FINAL_TYPE (MctApplication, mct_application, MCT, APPLICATION, GtkApplication) MctApplication *mct_application_new (void); G_END_DECLS malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/malcontent-control/carousel.c000066400000000000000000000321271505556674000274040ustar00rootroot00000000000000/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- * * Copyright © 2016 Red Hat, Inc. * Copyright © 2019 Endless Mobile, Inc. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . * * Authors: * - Felipe Borges * - Georges Basile Stavracas Neto * - Philip Withnall */ #include #include #include "carousel.h" #define ARROW_SIZE 20 #define MCT_TYPE_CAROUSEL_LAYOUT (mct_carousel_layout_get_type ()) G_DECLARE_FINAL_TYPE (MctCarouselLayout, mct_carousel_layout, MCT, CAROUSEL_LAYOUT, GtkLayoutManager) struct _MctCarouselItem { GtkButton parent; gint page; }; G_DEFINE_TYPE (MctCarouselItem, mct_carousel_item, GTK_TYPE_BUTTON) GtkWidget * mct_carousel_item_new (void) { return g_object_new (MCT_TYPE_CAROUSEL_ITEM, NULL); } void mct_carousel_item_set_child (MctCarouselItem *self, GtkWidget *child) { g_return_if_fail (MCT_IS_CAROUSEL_ITEM (self)); gtk_button_set_child (GTK_BUTTON (self), child); } static void mct_carousel_item_class_init (MctCarouselItemClass *klass) { gtk_widget_class_set_css_name (GTK_WIDGET_CLASS (klass), "carousel-item"); } static void mct_carousel_item_init (MctCarouselItem *self) { } struct _MctCarousel { AdwBin parent; GtkRevealer *revealer; GList *children; gint visible_page; MctCarouselItem *selected_item; GtkWidget *last_box; GtkWidget *arrow; /* Widgets */ GtkStack *stack; GtkWidget *go_back_button; GtkWidget *go_next_button; GtkStyleProvider *provider; }; G_DEFINE_TYPE (MctCarousel, mct_carousel, ADW_TYPE_BIN) enum { ITEM_ACTIVATED, NUM_SIGNALS }; static guint signals[NUM_SIGNALS] = { 0, }; #define ITEMS_PER_PAGE 3 static gint mct_carousel_item_get_x (MctCarouselItem *item, MctCarousel *carousel) { GtkWidget *widget, *parent; gint width; gdouble dest_x; graphene_point_t p; parent = GTK_WIDGET (carousel->revealer); widget = GTK_WIDGET (item); width = gtk_widget_get_width (widget); if (!gtk_widget_compute_point (widget, parent, &GRAPHENE_POINT_INIT (width / 2, 0), &p)) return 0; dest_x = p.x; return CLAMP (dest_x - ARROW_SIZE, 0, gtk_widget_get_width (parent)); } static void mct_carousel_move_arrow (MctCarousel *self) { gchar *css; gint end_x; if (!self->selected_item) return; end_x = mct_carousel_item_get_x (self->selected_item, self); if (self->provider) gtk_style_context_remove_provider_for_display (gtk_widget_get_display (self->arrow), self->provider); g_clear_object (&self->provider); css = g_strdup_printf (".carousel-arrow { margin-left: %dpx; }", end_x); self->provider = GTK_STYLE_PROVIDER (gtk_css_provider_new ()); gtk_css_provider_load_from_string (GTK_CSS_PROVIDER (self->provider), css); gtk_style_context_add_provider_for_display (gtk_widget_get_display (self->arrow), self->provider, GTK_STYLE_PROVIDER_PRIORITY_APPLICATION); g_free (css); } static gint get_last_page_number (MctCarousel *self) { if (g_list_length (self->children) == 0) return 0; return ((g_list_length (self->children) - 1) / ITEMS_PER_PAGE); } static void update_buttons_visibility (MctCarousel *self) { gtk_widget_set_visible (self->go_back_button, (self->visible_page > 0)); gtk_widget_set_visible (self->go_next_button, (self->visible_page < get_last_page_number (self))); } /** * mct_carousel_find_item: * @carousel: an MctCarousel instance * @data: user data passed to the comparison function * @func: the function to call for each element. * It should return 0 when the desired element is found * * Finds an MctCarousel item using the supplied function to find the * desired element. * Ideally useful for matching a model object and its correspondent * widget. * * Returns: the found MctCarouselItem, or %NULL if it is not found */ MctCarouselItem * mct_carousel_find_item (MctCarousel *self, gconstpointer data, GCompareFunc func) { GList *list; list = self->children; while (list != NULL) { if (!func (list->data, data)) return list->data; list = list->next; } return NULL; } static void on_item_clicked (MctCarouselItem *item, gpointer user_data) { MctCarousel *self = MCT_CAROUSEL (user_data); mct_carousel_select_item (self, item); } void mct_carousel_select_item (MctCarousel *self, MctCarouselItem *item) { gchar *page_name; gboolean page_changed = TRUE; /* Select first user if none is specified */ if (item == NULL) { if (self->children != NULL) item = self->children->data; else return; } if (self->selected_item != NULL) page_changed = (self->selected_item->page != item->page); self->selected_item = item; self->visible_page = item->page; g_signal_emit (self, signals[ITEM_ACTIVATED], 0, item); if (!page_changed) { mct_carousel_move_arrow (self); return; } page_name = g_strdup_printf ("%d", self->visible_page); gtk_stack_set_visible_child_name (self->stack, page_name); g_free (page_name); update_buttons_visibility (self); /* mct_carousel_move_arrow is called from on_transition_running */ } static void mct_carousel_select_item_at_index (MctCarousel *self, gint index) { GList *l = NULL; l = g_list_nth (self->children, index); mct_carousel_select_item (self, l->data); } static void mct_carousel_goto_previous_page (GtkWidget *button, gpointer user_data) { MctCarousel *self = MCT_CAROUSEL (user_data); self->visible_page--; if (self->visible_page < 0) self->visible_page = 0; /* Select first item of the page */ mct_carousel_select_item_at_index (self, self->visible_page * ITEMS_PER_PAGE); } static void mct_carousel_goto_next_page (GtkWidget *button, gpointer user_data) { MctCarousel *self = MCT_CAROUSEL (user_data); gint last_page; last_page = get_last_page_number (self); self->visible_page++; if (self->visible_page > last_page) self->visible_page = last_page; /* Select first item of the page */ mct_carousel_select_item_at_index (self, self->visible_page * ITEMS_PER_PAGE); } void mct_carousel_add (MctCarousel *self, MctCarouselItem *item) { gboolean last_box_is_full; g_return_if_fail (MCT_IS_CAROUSEL (self)); g_return_if_fail (MCT_IS_CAROUSEL_ITEM (item)); self->children = g_list_append (self->children, item); item->page = get_last_page_number (self); g_signal_connect (item, "clicked", G_CALLBACK (on_item_clicked), self); last_box_is_full = ((g_list_length (self->children) - 1) % ITEMS_PER_PAGE == 0); if (last_box_is_full) { g_autofree gchar *page = NULL; page = g_strdup_printf ("%d", item->page); self->last_box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 18); gtk_widget_set_hexpand (self->last_box, TRUE); gtk_widget_set_valign (self->last_box, GTK_ALIGN_CENTER); gtk_box_set_homogeneous (GTK_BOX (self->last_box), TRUE); gtk_stack_add_named (self->stack, self->last_box, page); } gtk_box_append (GTK_BOX (self->last_box), GTK_WIDGET (item)); update_buttons_visibility (self); } void mct_carousel_purge_items (MctCarousel *self) { GtkWidget *child; while ((child = gtk_widget_get_first_child (GTK_WIDGET (self->stack))) != NULL) gtk_stack_remove (self->stack, child); g_list_free (self->children); self->children = NULL; self->visible_page = 0; self->selected_item = NULL; } MctCarousel * mct_carousel_new (void) { return g_object_new (MCT_TYPE_CAROUSEL, NULL); } static void mct_carousel_dispose (GObject *object) { MctCarousel *self = MCT_CAROUSEL (object); g_clear_object (&self->provider); if (self->children != NULL) { g_list_free (self->children); self->children = NULL; } G_OBJECT_CLASS (mct_carousel_parent_class)->dispose (object); } static void mct_carousel_class_init (MctCarouselClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); GtkWidgetClass *wclass = GTK_WIDGET_CLASS (klass); gtk_widget_class_set_template_from_resource (wclass, "/org/freedesktop/MalcontentControl/ui/carousel.ui"); gtk_widget_class_bind_template_child (wclass, MctCarousel, stack); gtk_widget_class_bind_template_child (wclass, MctCarousel, go_back_button); gtk_widget_class_bind_template_child (wclass, MctCarousel, go_next_button); gtk_widget_class_bind_template_child (wclass, MctCarousel, arrow); gtk_widget_class_bind_template_child (wclass, MctCarousel, revealer); gtk_widget_class_bind_template_callback (wclass, mct_carousel_goto_previous_page); gtk_widget_class_bind_template_callback (wclass, mct_carousel_goto_next_page); gtk_widget_class_set_layout_manager_type (wclass, MCT_TYPE_CAROUSEL_LAYOUT); object_class->dispose = mct_carousel_dispose; signals[ITEM_ACTIVATED] = g_signal_new ("item-activated", MCT_TYPE_CAROUSEL, G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_VOID__OBJECT, G_TYPE_NONE, 1, MCT_TYPE_CAROUSEL_ITEM); } static void on_transition_running (MctCarousel *self) { if (!gtk_stack_get_transition_running (self->stack)) mct_carousel_move_arrow (self); } static void mct_carousel_init (MctCarousel *self) { GtkStyleProvider *provider; gtk_widget_init_template (GTK_WIDGET (self)); provider = GTK_STYLE_PROVIDER (gtk_css_provider_new ()); gtk_css_provider_load_from_resource (GTK_CSS_PROVIDER (provider), "/org/freedesktop/MalcontentControl/ui/carousel.css"); gtk_style_context_add_provider_for_display (gdk_display_get_default (), provider, GTK_STYLE_PROVIDER_PRIORITY_APPLICATION - 1); g_object_unref (provider); g_signal_connect_swapped (self->stack, "notify::transition-running", G_CALLBACK (on_transition_running), self); } guint mct_carousel_get_item_count (MctCarousel *self) { return g_list_length (self->children); } void mct_carousel_set_revealed (MctCarousel *self, gboolean revealed) { g_return_if_fail (MCT_IS_CAROUSEL (self)); gtk_revealer_set_reveal_child (self->revealer, revealed); } struct _MctCarouselLayout { GtkLayoutManager parent; }; G_DEFINE_FINAL_TYPE (MctCarouselLayout, mct_carousel_layout, GTK_TYPE_LAYOUT_MANAGER) static void mct_carousel_layout_measure (GtkLayoutManager *layout_manager, GtkWidget *widget, GtkOrientation orientation, int for_size, int *minimum, int *natural, int *minimum_baseline, int *natural_baseline) { MctCarousel *carousel; g_assert (MCT_IS_CAROUSEL (widget)); carousel = MCT_CAROUSEL (widget); gtk_widget_measure (GTK_WIDGET (carousel->revealer), orientation, for_size, minimum, natural, minimum_baseline, natural_baseline); } static void mct_carousel_layout_allocate (GtkLayoutManager *layout_manager, GtkWidget *widget, int width, int height, int baseline) { MctCarousel *carousel; g_assert (MCT_IS_CAROUSEL (widget)); carousel = MCT_CAROUSEL (widget); gtk_widget_allocate (GTK_WIDGET (carousel->revealer), width, height, baseline, NULL); if (carousel->selected_item == NULL) return; if (gtk_stack_get_transition_running (carousel->stack)) return; mct_carousel_move_arrow (carousel); } static void mct_carousel_layout_class_init (MctCarouselLayoutClass *klass) { GtkLayoutManagerClass *layout_manager_class = GTK_LAYOUT_MANAGER_CLASS (klass); layout_manager_class->measure = mct_carousel_layout_measure; layout_manager_class->allocate = mct_carousel_layout_allocate; } static void mct_carousel_layout_init (MctCarouselLayout *self) { } malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/malcontent-control/carousel.css000066400000000000000000000015571505556674000277550ustar00rootroot00000000000000.carousel-arrow-container { border-bottom: 1px solid @borders; } .carousel-arrow, .carousel-inner-arrow { border-width: 20px; /* ARROW_SIZE */ border-style: solid; border-color: transparent; } .carousel-arrow { border-bottom-color: @borders; margin-bottom: -1px; animation-duration: 200ms; animation-timing-function: ease-in-out; animation-fill-mode: forwards; } .carousel-inner-arrow { border-bottom-color: @theme_bg_color; margin-bottom: -2px; } carousel-item { background: transparent; box-shadow: none; border: none; color: @theme_fg_color; } carousel-item:focus:focus-visible avatar { /* this should actually be $focus_border_color from * gtk/theme/Default/_colors.scss, but we have to simplify the theming slightly */ outline-color: @theme_selected_bg_color; outline-offset: -2px; outline-width: 2px; outline-style: solid; } malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/malcontent-control/carousel.h000066400000000000000000000044251505556674000274110ustar00rootroot00000000000000/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- * * Copyright © 2016 Red Hat, Inc. * Copyright © 2019 Endless Mobile, Inc. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . * * Authors: * - Felipe Borges * - Georges Basile Stavracas Neto * - Philip Withnall */ #pragma once #include G_BEGIN_DECLS #define MCT_TYPE_CAROUSEL_ITEM (mct_carousel_item_get_type ()) G_DECLARE_FINAL_TYPE (MctCarouselItem, mct_carousel_item, MCT, CAROUSEL_ITEM, GtkButton) #define MCT_TYPE_CAROUSEL (mct_carousel_get_type ()) G_DECLARE_FINAL_TYPE (MctCarousel, mct_carousel, MCT, CAROUSEL, AdwBin) GtkWidget *mct_carousel_item_new (void); void mct_carousel_item_set_child (MctCarouselItem *self, GtkWidget *child); MctCarousel *mct_carousel_new (void); void mct_carousel_purge_items (MctCarousel *self); MctCarouselItem *mct_carousel_find_item (MctCarousel *self, gconstpointer data, GCompareFunc func); void mct_carousel_select_item (MctCarousel *self, MctCarouselItem *item); guint mct_carousel_get_item_count (MctCarousel *self); void mct_carousel_add (MctCarousel *self, MctCarouselItem *item); void mct_carousel_set_revealed (MctCarousel *self, gboolean revealed); G_END_DECLS malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/malcontent-control/carousel.ui000066400000000000000000000103621505556674000275740ustar00rootroot00000000000000 malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/malcontent-control/icons/000077500000000000000000000000001505556674000265315ustar00rootroot00000000000000malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/malcontent-control/icons/meson.build000066400000000000000000000005031505556674000306710ustar00rootroot00000000000000install_data( join_paths('scalable', application_id + '.svg'), install_dir: join_paths(get_option('datadir'), 'icons', 'hicolor', 'scalable', 'apps'), ) install_data( join_paths('symbolic', application_id + '-symbolic.svg'), install_dir: join_paths(get_option('datadir'), 'icons', 'hicolor', 'symbolic', 'apps'), ) malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/malcontent-control/icons/scalable/000077500000000000000000000000001505556674000302775ustar00rootroot00000000000000org.freedesktop.MalcontentControl.Devel.svg000066400000000000000000000111271505556674000405460ustar00rootroot00000000000000malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/malcontent-control/icons/scalableorg.freedesktop.MalcontentControl.svg000066400000000000000000000033151505556674000375100ustar00rootroot00000000000000malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/malcontent-control/icons/scalablemalcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/malcontent-control/icons/symbolic/000077500000000000000000000000001505556674000303525ustar00rootroot00000000000000org.freedesktop.MalcontentControl-symbolic.svg000066400000000000000000000016031505556674000414000ustar00rootroot00000000000000malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/malcontent-control/icons/symbolicmalcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/malcontent-control/main.c000066400000000000000000000021101505556674000265000ustar00rootroot00000000000000/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- * * Copyright © 2019 Endless Mobile, Inc. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . * * Authors: * - Philip Withnall */ #include #include #include #include "application.h" int main (int argc, char *argv[]) { g_autoptr(MctApplication) app = NULL; app = mct_application_new (); return g_application_run (G_APPLICATION (app), argc, argv); } malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/malcontent-control/main.ui000066400000000000000000000170541505556674000267100ustar00rootroot00000000000000 540 580 vertical True Parental Controls none primary-menu global F10 activate controls vertical user_manager False user_controls It’s recommended that restrictions are set as part of an ongoing conversation with $name. Read guidance on what to consider. 270 dbus_connection True unlock Permission Required Permission is required to view and change user parental controls settings. org.freedesktop.MalcontentControl center no-other-users system-users-symbolic No Standard User Accounts Parental controls can only be applied to standard user accounts. These can be created in the user settings. _User Settings center True loading vertical True True Loading… True error dialog-error-symbolic
app.help _Help app.about _About Parental Controls
malcontent-control.gresource.xml000066400000000000000000000006201505556674000336760ustar00rootroot00000000000000malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/malcontent-control carousel.css carousel.ui main.ui user-selector.ui malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/malcontent-control/malcontent-control.png000066400000000000000000001630731505556674000317600ustar00rootroot00000000000000PNG  IHDR(thsBIT|dtEXtSoftwaregnome-screenshot>*tEXtCreation TimeTue 08 Sep 2020 12:48:52 BST;d IDATxw|ulMj("WAzg;=+y]wgS(D: REZB l6uKOg2 Yi_DDDgjǡ %"""MJ[aCs0#"":ZyȐ!#.YHll\"J=~լDDDCl\<%Eǟ8~j͛[uj:?[_0yoYiRO݊H8qcp\9]vpH ΀bkFCK]]=/04 '""f,j)ZzL뿟~&TQU]^X`n5|LgS  FePZ;/pYҮvC+J})zjIt *@!&ثw]}ALDD*[2eEap8qtE${|fiT hjˌq`B:UߋCϴt;thǑf3;@t4ppRywYo) eyK> :-6tq݀5! )M,P꺳kCSnT8VbeZyJH퓎mAa=z{g&N TW`2AeHTCjnW]W9)Hk1- Ӳ|Ņ˲bZX(iAl*[Of iv4ԚR'WXW40[5<^_+ ݊JC`x*'VgPVV=P$`hil JCM VdHwkpu5KPBߌv3p$Ώ?τNEm4PB0!A+4JRsuUJDDEwJXo R_P9jyKܽƨ5_礟i 5C0cNd=_uQ׮%wd fsN :K.8N;:(--|cW^KlL /ߓd ,](.)GnL2s>%J^ (᩾`[Si̍ڂ]I?0^3۷p2|G'\Ng(>˲x{קOpi<|n=1n7i}z+̬:_Tͯ?jS4wiAb'pU1Q׆ԫvoV{z"R!)!bݽd5:ybKkq!_[#27IZ) v[싮`_LRR<|wnzo5*6*iSx7޽#w9x(DL%[պrU1extNa%tڕp7R^~MVYGQI1C +.[.5^k0-O>~|?w} _;l6o T㸪1M7ޞKll,?u$'Tc3lĸ`{t/֬w{^b镚X$ĚHAW\TQJz߾ln+A;1 ?W2voZZKoRhilmcvz|~:ufutڕcL~!o;k/_#>>>O1Ot&ͺ oaf>[57лg*\~)'ЧwyLsf]S]v݇HLLwe^y-v;G gGf&>0~zM?,VڗC=y[`ĸyǪٻ/n6pyT-l9f@:v=nҲ2V=+58~/8ޞ>y v3cG`q\]Y8太1T}Xd"z΂EKxy 9uR}߳x`&}zSWNIjlW̴SNje~Ԕrڄ?O>7nv2weн[7x䯸~_UzcsߝH[m6W]~1ݻw⻭ǟ)Dz, kGe}5UPkm6;v H~A{(Sfҩ#{"3+ 4=b86 'ϓ{w5gosLzW_o⧷N7,?nr&mϪ/ܴUm>|\.W2IQI-lNuZxQH#L78wʤݳ{=D׮]麫ի'r[Kb;z$W^zav\kzuZ@l62wf3+.oUqpعQuJ۱0?mK~Ѫp7-{GڴZ-ZDV=wEKض#kjoB1$>t!wϜ8u oYG/ۻ_ycFq)91s֏-߳=#[}zά,ƌ^YknIO˪p:7{Vd5Z+V?ÇSIgѲ E3̠[o䘁q]wmmb+тF iQXpQݾ[ll6 #:~?hz zUɬ6wAvTڗƶ]42xHhZi G)+mQAW񈈈Hi.Gi )FM(MֆcPtvDD5Ժ=xF^.x|L8tDol4QsYq*hՇyvG^}ٻ޽EiϗwzSo.i}(w.PRR¾\QTT\QT|aA9?/8Ȁ8OnAO<8T>w3C3?3?< Oc\؁ؗK^3w$!g_yGO^~>C=ݻr|~ȱd&CN;`o i_&[^mrΊGW|9{w?:~C]]{XZy6&TZP"ٮ]Y :D$J(.* u)"-0a/ۀݿ×܋J*ֈŴ%az`9zw9)eK(DΝ;rB]"$''&1|p~ͷ w-zAxŜe$v&P"u ʲ`{lx1v1&|taQE:D0*yC Y۲mU>L~eKiJ%\)DAhn\vN6r,q-ؗv6֥Wz?%Uo <8=(7bW i.z|\D7C{CA3 %ҹ,նҩci͟ML|;Zu?UeI gOBC.FP6t 'J :t=uH$p-'6V'ۉͻGي6ۧ?77%}Ev8uH4c\6NHv(. wNb h.`V11|֥Dz\v4~ԫa0,sݘu'rdnjgoXԎM-AB{ Vzp([NLS.e+C]M]<{ {waoQtu 9P rG2C],w_B]Mc'9쉮={Z| V 1 mMcs([燺\o:eoy'eH3)Dh7io~@ L+zʪG‰aYP g+f)DhiIVëDuH8qayB]F Wɛ.C!F3tQ뷚݊bV=1E]<.?&֙zkvlR~3 J%ESnR\fۼRPbEO8uHpx>k`smk-G1g5Z (,x:#~c%K;Fٳ$(,ɯZn8{re:l9Ŗuz(D(M]<=b<`P7'FQ~)x$!lzl#" Wb/l>ܾ{ 0-:lO4H6ESO$%~vn5_e7gb Gp`/@dA{7iM]<6,t~&V#,#-prXU<:^"]K&P@`t6>t7YÞ|ކSkyW_rݥ uHx0|{x 4%ESO)Eύ&靝$IrĹl8le~E~ JL{Lv$fh uH8{B]Bݡ.A@%ESO%c#?9sKDEIIǢO ^!]|'5Hx$PdFޞ)Dh$}=l?þBC6|7sI6쩸}R$4]$ގ)Dhau(ĆPPGQgt.@lF 'x$L"vL-(,x|&9P׎kP7(nᲃIN?|tG=. - e4eKu  (,xrlϋ!ĠSIvz'؉qN߄REpEv^$-; TӖͿ7e4e P"X4u-r ðqlw'vv⨯NC;,؝c^'8S}Zp`9zwmh+%H(Dh_Ƅ~nR#iЫ^.*NV]s-\uRX..A@d#Xw)spWq1.pR[x;3ƑfqV8B)DP$.Vd9?[1%Ωذ )EEš.A{zoc}SZ|6P"X$M(3|'bZK!l28 \mϖ4bP /$,#Ei|g$<'a,nm1Ƿ6(DHՁx8Hж;Ś}q֏=33%`I3C]F|1?2t\R@`vE1 FMWˠ.blˋuH8)qˈ,P!͠"Dz`'cBz1}l;AWG‰eK{qhPY%XN.CA%ER"71.ݓB{띤=:8,+GMY치t 3;eH3)DHٚbd.t)7WÎ'n,#>ԕ2b$F P"Xt U; kÞL]<L{*#F ;1}4,iH_WG{X];ӳEP#:OM.'I.DZJ.%6$Wo. g3(M-]* ObN] £]$x, q&0-(xPPh IDATE]<1bq j@mx("n@Iɶ\oKRT%oTHsM1aoo}xiOmIRO.>I>B] Xee^v964E]<)L{*4gXF\2ܔ]JqNZP"Xt XeYloP mH1 Ht ZJjB0YkPDÎ7v6>Q!iM[F 3(n(DH8c:OO$QD"։҄Rb B@dw>D0[Z G (lϞ}$'郰x$YFYxcgayؽ{0a3URiKƲuǴ<s$ChBBB%EJ4ZO$ZX'sR$hl.i:ݨMD#)WHGD#.A]<")D0u[MDD‰Jۙ F DDZJ؄a.AD)D0Mh6}5%9OuH{EKed`6zҋIݫQ:HJL z322aأ_t9aƏ]ۣjHqO!zsKR|>?1l;)D08wYx}>֬_ϲݖ?Wߨ3[M^(%mnBDƒ_Xﷳ?'Æ\9}z7{{)-]3OW?1yx\~LӬZEKx7IO_4ǟW>Ĭ3Ngڔ)$%&ب?Y/\KZojͺB$ {tqS蛖3gpمH5%YZe.Cb8}BZ>q8xWj*>NZg{F&֬c_,KW|N=U>pn_AX+~?}ajL p:[jqqU`HӇ7p5?na⥍ft0x }D~IfTͦ@y?/ZDii)awAo\p9,l1R\J%X:]2ǏgW_Yc]'kXjKV䁇%));vz< ~9zƏQ+b{Vr`j.) Pz:,"oVfz,"O×Ŕ1MΘI\\Q 5ѐ>@뤥fyݳgȲȔI֛;2UH4k+^DLNjAp/:n#|Ν5 ii35sd`zZ ϫ#Gp1>_ fT 7jf|Æ}:6q/~Ÿ#ع/ ɱZsNy ޛ!~L?ܜ;n=#g&O@Rb" .`A6#"߯@GE2y.8HR@`;s򁕽{g\ɉӦV;o/kֱj;뮼^5uddb_ڣW\|atܙ.=o֬DX-unjvNa%ۤƠ, è;2EZ>,[t҅3FڨkSD@_ }lիӅ0u 2?Qkd6٫MY誘8:g[گ^Hڣz zUɬ6YJ5VTT 6")D0DDڜJ۞ xD=R@`i#"JSO.iP"xuH{>3:%9 C]HS@`>|P "P"&H%}PG (L]<탺xD=R@`i#"JSO.iP"xuH{>GD#.A]<")D0uH%}PG (L]<탺xD=R@`i#"JL27eH+=2e96bPJJJ(++ u) >[.ED9B]4 ?mw0蘁dEaa#a{f&EE0b(9|(oNqÇuvJJ<>-۶SRRؼu#)--eln+5M~1FifJ^ƎlcQlfe^/Fd7z}36~gѬ߸τY~ cGfWqcXn=~b⸱|n=i2qV]eYL?UkUZy08n _|1Yf-6Q1`Q^Q#njɗp5b8k}`aY.ÆfWp; 67r1tȱj#nn׸n{ 6|MLL C=Xu4g4̨5٪MjpV<*?ٻ9i+]{XZy6&TxDDD$(HQ@""""aGEDDDŽDC=ADDypcWHiP$U.zҥBH;"az8""P$lN*)D7 KI%襀"a'pRI!ED$:)HXiL8""}P$l4%TRH. (N*)D 'RDDTKJ )""OEB5I%Ȧ"!њᤒBHR@6ᤒBHdR@6ՖᤒBHQ@6pRI!ED$(He8""9PՅC8""mm+ 3pR)K7ϤHk2xĘڕHRt#KP!""P ; ("""vPDDD$(HQ@""""aGEDDDŽ ; ("""vPDDD$(HQ@D>Z<\/"?&0I'Lg[m?gο .J<Ox(**4ͪe-1\zGc rݺVws\vuU| 9̳_ -G}{BuEDIDvXtY3&_?r5{{=WN>,gd> Ӧ1q\j՝ddf6{u4<\4#4${l.8+n~m6/%''ӹ'W0h}߬^%9رO8^sn^,\eW]ngg ǿ_/,9˵W^Iku'gKa~Ι5kIK-煗^f,'?X 'fʕlvf1z |]}%%%%߿c2j~yˍ`m6cGzZJK^}x>N:w>gjy6?grRR~DD@w|b>lSL`ҥG^0nhrrrÏtF<>MX\._AjTN:x>?}u+L?D`ٳ=`l{~yj5࣏Y*8r$V~*cm={,N:xINJjxtN̰!Cx(.9{ěoaC8)|z5o}G ~Q#^i||^xe韞^g=,t"",[Pveeml㽼λ?FS\}}qzj>+{_z+W⺫ْb`ucN>{}_}Q#Wk/?_[U#{~?ٳjj<]Y,_ݺ3p;scWY*Lğ~[<>[]ӧκf5\y'Nlp{{< ?xCYSC? my7HEM[mɁo>thպ. pza3+Y>w4M&N_ Ǎl⍷fӷߑw0eqH~w LdUu2dd̬nt0wm[Z) J}Yf-\x 2㔓<̝;?vLU):Gf.V~N^zk;S1-?|=SS˂^CH\\\YFKH8 뀲pb?;j^mxɲ8{ՔxM(-+c򤉌=XUc< j-׷c/r*,˪!a0:EEE=g5tDjU?8rnSYEYEE%E5Hfo6!9޽`Z!z n/@p>~vK놎SD$Rm Jek,ޭi{3+o<+)aʕ^P !#{=ϥl9f@F 8a;+BԞ}۲[OO2mⲣޘcZ%?: <%+Vr[6㆟>8}):$ pw`Fͻ~ô#91!Co`>_OY.;3gY\&N?Tϥ?w Äc>t(_o;sq mx Q@? # msqDmAL?&L%?ܴ-)1=zd R{cZFJN<}_5t x8t8ҲRFU_?[׮0mjמ;g63O;}sGܵ`(.b 2ɪڛb<3]|[:{'iZeђ7qs/ΘQ#:tO=ݖ0uZպ~yMp5mv^l-qG6皟<^G}Yh̶[\7t""h`QkU&xtUW]\T8d3HN;YHyg{K cP$`>s?ϰ!ّɺ60aXF J+@PE$'w˼ѩcG;w?P%""**ƠHiPDDD$(HQ@""""a'l/3޼q]KzG u u ۀ0fҴP ""}BD]<"""vPDDD$(HQ@""""aGEDDDŽ ; ("""vPDDD$(HQ@""""a'jE]afw\{=A;l04{gf֬YG-޽;5v:~Ǐs=Tտ.tNJKKzHC6\呛?֬Y_"۾꫃Zf̘13XliX;'|RcE7n:u jߍq 7PXXȞ={x'x)&99N?… o:>N;fogƌqƪe[l/}3fh~rsΜy|,\U%""OTl\.կ~EZZ]v뮣j>π C=}koʻI^z%N9X`A'=C !%%3 BRRr [n {kHMMi< 4;V;%\E]TRv^Ŏ;=?o}ڦvP,bǎ׿?)111r-lٲ/uֱcN>̜9sꪫws; .OW[oK/ewquC/K/qF.tpf̘Q#|ᇜqL>bV^ M())aҤI kݻwkauƉ'8;w/rX^{77dڵnONYYfbѢEU_leee̝;jҥK߿?;v{ tED$j  X H:@o0&Ӏ[ Lk?_j5Dž^h5?U9rIJl֚5k\JMM,˲kfY;wso /ƲqYO>Q7׿eYey^+99σnuͳRRR,4b+!!:|eY5g,˲x kAk-˲<jGPCŋ~/<g^jYaabV^^t:M6YeYvX֭[vmO[ιHYF7Z- IDAT+U+ANJ_YQ-l2G Q݂rM7x(**"==ݺu+irү_?yW5>etI :.(Ƞq5N:$ oYd cƌC@`q(-бv3uT6o\?ϱ, ˲{OfҥU^ررc3i$;9ZQ>#; @ZZ̛7/NG?QΝ;3yd?Bzz:ZUc~ :4K.$$$0 e˖U-YÇ2|yy晬\yq't:^_ x蜋HUj\9Ij7vsm#PXX;׿5~)~p!^xvMqq1K,!>>zҥKٹs'EEEAבœ9s馛زe ̛7 `;c ϟOII Æ ܬYxj\бVzXv-999W3gΜ:k|RZZʡCx뭷Xh{nǞUW]_ϗ_~N׮]MKK#55G}: dLǪ@{5tE}FL<*^&-u]}SO=]wwMll,r v[nq7$wl;bGwJq 2[yxTd$%a Y daI ED KZh mbZ.7o+bA@b ЀA({ BBmf~L&u+99=9sbh$hfP7 BaNI}]'l6zy["Œw3'Kg~-B@ F|$t FWht !V4ΚTVs$F##&;(ĮCP'())*`;=J~8I]mu$ABqq!t%rsq#Pr2ξlVP % NQH"iDzP{1(Q(D 2'}I7piv!).)b_'p!IvB@GYY W8\W# B` |!aQTuEr#8l%W.ch{(JZy粝^E!M1(THMM ԥwP5Օյ_|<<3z)j5wf߾} uƣ>ZX/ZټyW^%55ϣh:ti}jj*ΝCV3i$̖ƞ={Mۿ?dgseeel޼\;n8-R{[R6Fvv6jժVǷvKűc0$''S__OFF1S귖:u*yכm3|ںŋOnWTTĦMOOO&L5kfĉ-((ٳ|g̛7j7MY8Omi9k̶E>td5wAct6nH~~>TVV)P(L3JJ4IP*PTYgϞzTmHP<< eeef|Ύܺ }Ѳ-,iϞ=M6m$%%euY:NUUL63grmpB\;àAZM;5cO]ѣGV^-#[CffTUUQ^^7N"**ָivqk;f-:5;v<5^]¿{,.*Dijki;Sך{O>8ܚLM<oooj5/^Dכ^PJqq1DGGsESQ fuF( &??b5|4vk֬aɒ%<|w0TWW3rH Ǔe722BAHH#Gl)FØ1cؽ{7cذaxy]FAAeee=K||tuEH6'<<{=""ݻ7GRѳgOh-i[Ws]xzO[Mnn.z|:uokO ǚƬu5eN/^x( BA^}r|`ʥBpxdjkٳmoD]zeժU(J|}}[omII żۦ5Wզ' رc1ylٲj0a=gEo]ݻSWW_m'7 ٳ7n*cƌahfjr'kە9Z>}p9rrrAqAbcc)--w?lo{O kN7kuwJLL$11ϳf[]RHHٳDGGsfWXLIIwa7+V0j(4MEPRRbW+um s:8VUUѴ49:">ӧ9s ?ZTN:e:hlg̏5gY[ZEP_@.䞡{fףgw'Fe tw=zNc4}8p .\æ>h4f(//TV+++%$$}T*IOOh4RXXȡC3mhdddocc jkk0o8ͭs/,=9CG͍ݻ74|)Z~>sS  EEE\|111=z^NCRΝ;M c{Ƿ'{4֜5f ۶mض:O( zۇ?`0\c ~Bͽٱh4Rzo_?|{ϕtG(JRRRHKKW^AΔ)SL ą LlcMRRiiik@ý3 *&&;5k֠RP*hZƎkz2LII!55t|||5kݡFɓڵɦqjf̘aqܹsټy3wחd;:Gl{7؜ERuq~qF+;^4mqF Dmd=3}4`9r4+R;y'{5֮wVWWIhh{>̲--cN*si&իXgR*xxx=s6'F'nrݩ'FʲRTJV+2j7]MU P_~?*+t$25Α].^cܹ> $Dgi\j5bqO{aFM掟fHRFWKP)U +XIoI$pZ{=o,W NM@+\JýPf{T(Gopzk30\) r7*霖i o_?Db74G!D/|A@R% 0w ),'|~z߭ @Gj(RDI%<<5huPw]hĠף7詭w'a5'-I"h7Mo%jyWZ-\rŗ)TѠonFF#յu(+]P*P)psSC]H"טH4|h4<<3z)j8-Kűc0$''S__OFF1SRYYƍɡAq}VYz5?hE5;ݻٷonݺ裏_q<;^V_6faa!Vb,ڱlե%{2K%KͩSkV8,Y¤Iؽ{7 b̙vҥK6l=z$1>hZf[coF%233M ӧMͩSh4zjnv>wX̙ùsxիkvkσ>HYY TѣIII!''+WH^$$$Sry/_Ntt4'N$773mHY-UUUʴi8s .v .ʕ+; 4}GUUWf$%%ϗ_~iz2j&Νc޽,\VKII jڮeςl5zűo>SrQc=3X7Mjm[PfΜ٬=zX,XCmUUU-ˬX íZr[>v5(' h?Sŋz :b***LeEF6|'CHH#G$++ٱ (++c( |||tS]]ȑ#Q(l o>ioY愇P(wJEϞ=8p (Jߟ81Mp_zW__O^^F]s> x"@C2l0Xc~7>,5n 4U9yd[VFTQ8z]̱nk_ۖ;B.9jӧΝ#''t:$66Rzͱc(..6knZQ@@gϞm"|}}[m[\\_'e[⒒jjeddp!(..o߾@7r1 Rl]+ylٲj0aBm3GR=j)э@~8>>,17nʽ8inݺqI5v4Y!:[LPajӜ9sVKjj*N2}ۮjy`/))iEјtN˗1KJJMΜ9޽{y'pwwgǓNUUD9}hYméSxh47{bW(ƒgvj;vPXXHMM 111wbLJJbժU̘1V7eiC[T* 4 .R]lg.-۠Jeu;2l=ެ+**Xt)Z#K,%Kk[qXk[miNuu5}VDdnUɢjk?ݯg\eEcV&9d}=C7kK e~QCmo=v] IDATIP ԵYz@d14Y-FMﺧxDǪѣ e˖1k,򨪪駟ӧOaÆfz'Yl˖-#""l<*ׯgݺuՋ/={Z- 6p=pw`jkkM ^cgzk,NDD[lAGȑ#~ӟضm6mˋzd?n;XbAAA}Fȑ#FRi5[GYoĈƷ~ն#F0{Fh3owM;w4Fc~~QP?33F^o0XMpڵk֯iFVkhVݻ7nh6l#`?///Fӿ(//os !p-]:AqssV3<oaJ@Oe|dggͅ (++@Rk.>S<<<{6muTRR4\g~!t ooo"--zT*Zm7yy9F"//{4jG^ߪ.Ss( w{Bե̙F $$Nǧ~ju &zj'|B^^i]]]qa08xm,[RRٹs'FѴ={"M6&b8@LL)**/ 111t:S`O"""P(|Wz}:ĉ駟>=dTwĉ?44fy,Y֭[tK,3fصGdggc4w\z+Vp%֯_Çot:==7f7!lC2}Wwv(.IPyy?h"ϟ/&Lf+RSS{`ӦM <cƌ!66ỹ\XƍG~_JQQr?CfϞJjU}ǖ-[L^&MO?MDD/h)k,X{?22/ p!XݿCn`" B$9M!IrbE!@Ly yyD-[7% Bс./(HdE!@|!dERSS / Y|9/"{!77Ϸ+Vp gkŋ)++ZڣLKZAGiچvqK-w<#yA.;l2P(j"##2e ޝ[n%22wwwnvwCر(1 lٲ777ɑگeڢe9L{W֑-[ƕ+WP*(J6mݺus1"##뮻Zٳg/8pTMPz!é?fo4lW\0KP0rH%%% 2RɌ3:+6kYhg(^-udRRR46m硽{2~fom8pDNPiZO΋/HMM ,YI&{n ̙3)..fƍ̙3իW&,,$ Yj-/LTT?L8dzgN8ANN}O=jݻwo> ݺuGEV7m.]ʰa$%%1~x1yfrss; ::ŋO矓M~~><>|OOO&Md+WqFUTVVqFrrrcРAw}[u-5Iәw-aϚyURSS9<nCZ QZZZ>XjUkK.%**cǎa4INN JKK1bSN5n;wZͤIHHHMZ݋شiɄ ,_%K0|-Kk_z5zh"j͛Mgھ0wm %;;?K-~nN"A@TRw,XF#Wo'**L>~Ǿ}L ѣG40uTΟ?ˉfĉ2l0 sػw/ .DRRR*9MUU~~~,Z˗/b  ڵk E,O6æڠqرcyG{$!!*V^MmnVYc0gM5uѤʕ+ W^BUU~7ƯWUUʴi8s .v .ʕ+; 4)X̙ùsxիAAAVUSޣGV^-bu|Xc1qi|嗦,e` ##i,ܩdza&LN{_Ybqe߶]Ϟ=p =W$|'ߜlx{{Vx"z0tP ::/e=zaÆYݧQDD `Ϸg}}=yyyF6FTQ8z (++c( |||t/^H]]( C```2J%xzzO\\\v2W7{֙caI~~>Ռ9BAhh(dee4ws_{B ""޽{ӿT*={dB $$#Geo\/^H}}asƸVh88rqqqf_f K,3FØ1cؽ{7cذaxyyxo8:~oK|=; ʪUP*˭jqےyMk|wVDDDP__O`` ǎ9^^^/p ;d˖-TWWĄ ñgFݺuɓVUTTxa*'##CFqq1}mc]ZVu য়~2}XpOy|Vl,jZFpYnKcXj?g˖Fll,ǎc(J̙ceڵtޝ:ؖ7W_}1cư~|IMm=;"ζKǝ1t"Y{V7o88@MMi>JLL$11ϳf[ghxFbVNh}Μ9޽{y'pwwgXܾnkdގєNZRRbק :#Ww|4^\UUFi\9c\t|ǓNUUٓBBB5=<<7n+V`ԨQh4f #zƏ~q/:Mq{Fӱ}vF#Fكy\pÇ[Xh'S2}[?WrDmm-@ @yyڭo߾( 1qVeTTTPSS^GsܹVۘujt#KG>ko߾(JS] 9t.{m==0\| ^AAAv777w7|` ??Zr9c\Z?4:(,,$33uITVVKHH]}fؖ;[M9xwf?`0m6.:_AqR$%%4^yZ-L2Ŵ~РA\pǚ$x׸{]RSSCLLLwѥV`ҥhZ.Ӕj5se޽___76PT̝;M6N^ݻw2bbb8u:VY[ĪU1c-V-O>u*RSSIOOLJYfٜͱէjmh4 XWj;7n$==@jw?ٸq#_}ǠsƸUBAll,yyyVOYJRD2vXӵڱ-Qo`q:kgG}uu5z\5Eߛ.&t{ӟqo:؏Yď.7jխ+fk1wS}=CM2!gZzy? j?^,&ҨمprGiMqssasQ١%)!D/|A\p;F߾}]3jBqSOxi/g3rpٴ6| 6yh.zFR9?©ӧ4czqUWWw܉S˶-ݖVTU_ATT<==۰NGDxJK]#mh;݄3쫳``5\)ʰ輽]ovsc¸qӛ^}[;3XYu7w\aݽc?nPa< 99]#mh]݄3 ʉ'9ɰY( 𰻜xw :ﳲpR[O_ 3d|_|5wX ΨsGBtMP /]ں:?CR[[3~N]}-^)//g򔩌(T2Ś|ǝLLO@>ٶ}zoEUU+[W_aCpf4j؝{﹇_?4״MW_=w//-!9^Mv~UKJJl[/~fXڃ[է5J;*lm4Ζoko`vQXXHxxϝÿo7KmY\OtT?q o]ζBͷVrs#1!Ng&'O$:* {ůR ,4S9ti]:zTVV 벎`4;f4|^Ĥ$z1kYN_:oaaO/iscI;o22x`06۶`o RVY˾o E~.1c=L_O0[w{b-[}jOrl6;? @ܰY5k}Җ6md^_-cPYUVvVO!h.;ҳG^%zgΜ}72)y%mߟ777kK_+|ÆfRD9?Ի$&!Y9ygw `-cy+9|ˤ{\zod):ܐ= ֓OS?6{E~ ,iUF'&쓂B۴Qo%Ҷ~A|VהtdY;B\6AHgʿl߱=_~T(m$ pskƤ[Y_qX/Gh4]&Ǝ!E2fb08Ep fY6ṉSrիj^rro7l2bUTjbcb()wl w0_rۤ[iO]shٰO%O?vӷOzaFVMuY #|z) B`ȑ9)w0oo0I^7m[SSBh.o; m?p ?KwPG&m" $}^Iyń"v쭷7f ywwwח}!~P44ᬣxyy1$aZiK:?/;ni[R\BMmCe;lS!:-eEdq~_ϸʊ7ۧ B!(Z/'C@-Pg}d1X5{3(B!yI"B# B!\$(B!p9!H"B# B!\$(B!p9!w!!]^Ԑ,MPGB.+:;B!\$(B!p9!H"B# B!\$(B!p9!H"B# B!\$(B!p9!H"B# B!\NMPfϞB@PT*ׯtSʯҮmcccyWZ]P(̚5ˮrʕ+M;-[={6 ,pJYym=KyFcfe{.]Ć 8x /RK/?l׶SN%>>ީnذɓ'm6*ssfɑ>oc(%i2b0Z%(-wqړr-L0R|||:,^zɩֲyf>sٱcSNu1rv]~W#%DW?#P_uu`d10( K3 (0j0E=ɪwM]z%VRhxꩧ ! Gyr۷o'!!///"""xgxWy饗裏P<@u4i>>>ܹotޝ)Scܖoߎ/L>>$&&r׷do,\jdݺu}[ /2o/Lbb" 6b-bm_GV}mKV }B 裀ym?.G !]hX¶B[(/^2w\y/_Nqq1ӧOgٲe̚5<x)++lذٱ|I-[Ʋeˈ0ϫYnz/gϞVmjÆ s=y,XZS|rBBBxטC[b+Xxg߿?v <0֮]Kii)[n5mO@@-⧟~ԩSvҾm^B4p.jOB;RذP@">a gBV0P]xC.?ҥyQ]]MEEaaa(ɓ'1 ̘1PBCC9s&DEE1qDbbb={vFcu}vv6eee1Muںu+ ÇSQQNcN4T*3f 'OlzGtowz+}ٳ1|p5jǏ7Ojvz^MmK_o}o2^Af. JT}oJQzC;9OĨwS7.Vg70% 2[… Rصk~){L6c*))h?ru놷7deeF}}T*{7yy9F"//{4jGޝGQt';B , `!"TD."FGAEwrsyAaȀ,Y @&{z,ݝЁyy+IWשS*ܢ.Cs\0gòZm/!ȣf̘V孷 &&@6npѣGrJ/(,,3.ѧO, 999vc\^ϦMo|ԩSm6s{%))m?''R^z% FPTرl&''Vsg)%5nsNkZláU}sNz{ve=S=i___SUUFac⏏祗^駟&>>׷xt|M&Lɓ0`lڴKԷy[6Zo/!҆reqIzz:ݫ6_!:iw{*3VW@]K^V]`$ p:y~6]MFlj$T#(B!D5!}FTtߡS(Tu7zBmB!Mjиɂٻ'/ɚxҡ]IPBt^&#xjWP"+?.T' rt_g !D`64M1_Zb)(!輼5OlR)^*0GQ~!̶PΡxHBҜ$+ѽiT*P[qd8򲎚x H"3Uw3 UNvQlǨn_M!輂TB]-XLPńj;QT5z!|O\0h ԾjM8/ܞ+֣xwAx%' BήPb{QT*>>*tx,K^|||$A׶EQYYyh8:zyynzEY__ϳ>˙3ge4jߡޞC<*g1i{)bvdhuﬗ$cfSZZJBĉ ڡa㉏wi_2j5jhnv믿N||82aj"AEVuqC0L3||}}Q+Wr-}裏xG4hv&(fРA/111L4ӧO;Ș1c'55T GAӡ[}X,ٳÙ9s&yyy,_]Zߨ1ct֍^Z~nO>ab4{i^4^*++m(ּ={:m[^va~IBBzjkkoɓ|<#oӿbZ[[kK///ә6m\ݻw[W؋'""+Wr3{lxZ,0ZBBBXp!%%%,[={ҷo_};V6^vnk d3? %ejVFզcO7P袦DV9uū盋Q QīfJ}Ew;!!xyyylbҠS$(| 4oTysR 17Euu5]t:fڴi={2šR&::&ofL& #44n}VZ&:cСƒoT*bbb:t(hZF-[4iv"55Zvd]8mSխEJ6xgϞmu=}ERGTT{ˋ.]puQTT"b qz[S1??? DQQQuu%d"##ݻӵk6ŒZ&22aÆqakh-ﶶI[/WL8PC0U?*oB~R)d瓅KeQT*,xQA MY?l7:$ţ+VV &99osz=[^04 /a2ڵ+G-vO[o?LFms1c5??իWh$$$s###_m322SNٍwԨQˌ1ݻw3out&t֛9!VW5={~)//G.xz}ǕX8v8ھ&mݾ\3F>!b8\9 =VTVQX0 qɄ|z,^^^x{{KĞ|Is̚5!!!!h4Νk ޽{ݶ222ӬZ]8RRR8u4^^𓘯/Fbٲe 6 V$Ajz^q6kK_j@bk+{N>>޽<Hiiiwau5gGmߗ&my}O{42l8CG5NJ:Cr-WDEEȦMJ뮻3gpk2h&EZkjj'&&=zVٶmp9ϠA?x PRRž={HKKsXȑ#IJJyAϞ=1 ٳx@oGۙJGZzf3f&ei4&IkѳgOT*-JKK)))ib׿h… ݻvcom߭Ѽ kk3—_~iD8h87aĤajx񉰝e䤁GBV3sL֯_ϋ/No߾L8:9sied+}kg;wz~:j8CV9r܋3gŶm ;~Rj;v͛7[0NFÔ)SλXn[l!88cZϋh8s/***lwCڋ]zlWwh]&%%qq^}UZ-}mfɊ+2e qqq-wFCYm۶ѵkW4MbIҥKt7ir<{1۾imؽ{w뼶>c߾}uVAqJmgJFlU{UOFW\sƿTWݕ~>a\YD!^y>N>n38IoN0cߦKshj~M249#˭!:99#o"22{キo I"]=\ !:&9#BG!Bt8!ÑE!$(B!p$AB!D# B!:IPBH"BC_Ij BC'(QQQW;!c埸!%xBH"BG!Bt8!ÑE!$(B!p$AB!D# B!:IPBH"BG!Bt8!ÑE!&(wu* JZW^7ϟwKuuu8d^|EyfT*wyS"==˗[w%ت;obn)˕>oм-ߖug{f~a"""߿?Gqk/Ç'((2o<***r֭[֡}^[1Mj#-@ D݀^@,$i@0 xJqeavryʟgEQb('OTƍ<̙3G۔bʍ7h_VV))Rc]orw6Y!CP>P8TWW[{饗*999ʙ3g?X[OREQVX+MHMMU3g(Sr7וyСCɓ'K*^^^/j5.ѢEJZZrAɓwܡZ8dnP~X3gҭ[&mи֖mKVڲף>w}Ms|[}^ѣG[OQRݻw;Õ{ڬ}^\S]_zoϸ^|?R.Rnz)W;^%/f9GIP&O?mEV+999vڥt]QE9t萢V|{}뭷Z<hT/ΔXUU|7(JQQREQf,[M]}*WvX):EUUYf| >|m%(mKV֖___t:_y7/Z /=r*++blܸ___nˎIŧ~JUUaaaY~=&r^^^t6o(* Faa!O=ׯgN?0-닟ޘڢaYWr{-W[o,""pvas={_~Nנ>.pNP1cZz ٸqFʕ+/huHr}bc9lڴoEQөS(--e۶m6w^ߖsrr(--套^"))@o-..Jl6CJJJ񹃳}l}]?C-;3<ß& +=[qtח/TUUhX`?87ol6sioYY|԰m6 W^l߾|#<<ɓ'3w\=Jee%7n;*7++pƌXӛ|glذϳxb*++2eS#""EQ⏊… ,[s&˷n̚5x{R\\̟g"##馛npϝol^*#$$aÆgϲ}v&L@YYߜssBˣAin,Y~ Ojy)((k׮,X!Cb…TTTڵkӧO端"99ѣGm̛7QFa0HMMe8,O?宻˫EӦMW_`ܸq,X"η~kzukϟϑ#Gϝ?>>^z~'|qƵxs|M׿2ydF#ǏgӦMumۼ--;gaѢE8qsM7SORs/Z P[SÅ** m[,fF#fł\<|V{J^1wq:^aTnɫ-oߍ+|piF$==8[/]uU%J`H>>>h||P[~HtUUOHB#bl󔖜Ϗҵe} akW&h4˶AaN5"B8( N/+kTOzp譢(Ғb{fZ?Z?aOqQ!>_O2ɷR=$(B!`68y'Tj%y8rLF7iC۹`JE=NSs|Yk`B!D+Eџwܞ(~D@BJIcOD@` U\+d939wZE^1R~񣨼/H(;ABѩUWU/+WR~UJKOLq,*~)\(+W7D1I"S+,ȥkTOiѽtXoo z%?[\$ABiPW[KhxD;_MMM Q=^v=E_V;IPBtZۅ KK lU*]"9[;IPBtZ nymwPVFhD]6$ .[W$(B!:-C}}[-[]]-Zmwo+VkhѢE۸re^4ָle˖qVq%]uQJ|wzyynzE}%d2iFAs7__,f#,[ӧO34Y;p-6l@||?ۖ>}uVn6cw&66\cveۦ;N[O`Mmm7M7HLL$??LQQ$&&/pLma+gǙ$G=^Ymmhl …rv:#<"ҒsR(?nc?FEؾn?c29zj~\>c29v &t|Ӿv0Hos:y~6]MFljdx#adä\P7Rq짃wo5$VwkiW_ Ol5> z[#aˑ#GѣBќJWl?ºtlAſJ@p>h4>/cdERۯ?ݺwOIhxZ->/g?VK|@>礹N{G!hM]m *+.`0c4zs>łhh2X,(TV{&(4b!viutM8!Bt8!ÑE!$(B!p<$YOƏϗ_~I]]]kҤI%K?onzǺu`*Ds\D'RvcGPٸq5A0aMFΝˈ#ѣ:]tO?uz=&K2x`z]w݅?> * IDATӇ޽{gW__kƻKJJ }aTTTaONZZ,\_Ǐ7)Ϗl͛oA޽뮻8p8Ù:Ϟ=bccYb*5kָez+u;wsm|y)(X,&$'[ۚ 6R!;;]ɩS0 K>}ضm7x#Mݻw/O<ӧO, 9991ɼJKKy饗ڰFPTرZLNNgn5x{{ӽ{wk?ܤ=[8~g8 R={0qĶTE pPߌ3駟ؾ};Wns٢skHN.R/TłXT*O# &84,IR<,3fLcccIOOomŋaΟ?ŋdʔ)N͏ 77Bxx8'Ofܹ=zJ6nHUUQQQ\pe˖qy>{Ջ۷Ouuu5k<{?DFFrM7^}o!77Ǐϒca9r$˗/'??{=e6ߙ:o=;w{ ɓmQۊ.osm1ocq,_dFE^x(--%>>^z~x֯_">}:#F 99Up|M&Lɓ0`lڴ 0ؼyHIIaȑ|wlٲ _~=zĸq㈍uxy`̘1La\Yev6|qm:vɜ?^FPD41L= yܛ6T*~> QT.}Hvr<`?`~.m̍&KIi65hy9(B8~znFINX,Óc<##}BB!:Aʉ'~rOڡ(G}S'(|q퉋lh Qv!9#BG!lͿx;[b~vw<::!!p #6oaCmt%Z}nۊ]-Ok!eR\1 l۱Z{s̿Xvw<O%#(Bq}ðlۭۙͨX7J]]7\=GF[-n` sZK'"<17?κv5!rC쿷~Kc1[>,ymc[:4?+xeXrg Q.6zeъ&~yG~*xj14[nsQSSɧ=>w_9ά{Bulryg9sLh"*++ۥlWw=;z,rJǯywxٺukq۴G];¶P|m]-;w#1d0bWg/6 ٝ ?'ky5lY3j} q?}W6 KK0Ldd [EҸV~zќ?rcGP^uJKKQ(BϞ=ѣGܰa-BDDeՑ9[k%+u믿&!!cZoyG_um5;w}JK]]~>64-*lmk`]ta!O>ImfQ w CYmA.!:).ޤ]dޜ?ރP5B<6A5k}˗hѢ6_iZQT :-eudJpG,W?J^grG_um[Zn&;w<<؛icg1[X,F@`@OxX(*T*yu8'~Yi*,Z0Z&)sfNc$'yt n_աj)//g͚5ԩS֭a׮]X,˜3g;wѣW_chXx1ƍc˖-ߟSh",X@`` [|0a6˲&ǥ/ʢFøqHOV,.\ ++ӧOj8p V"::1cX,..ԩS|W̝;n\ /O?``̘1p vZ ϏѣG5l,hd͚5a4߿?ӦM]v֭6qQݜiדKQQ>>>L>^z7ҥKIMMl6i]y͵- WUU-),*;2xPewD:LڠbUo 7یxHa=ww"[oaPK wc0]:NL&vIll,ZEQXr%r ۷>G}yGtz4 cƌ!??TRSS]\\mիWƽKee%*e[-̘1}uF^ZPÇ3sLX|9]v%))}Y'NP[[KUU?~㪩!&&I&qiy`ʕ\̞="{;[n3:ݷ^^^3m4jkkYr%w&33.ko;rխK.NqS\\Lff& N P[[KHH .e˖ѳgOp#~ wڶs$'&PUUa}<$8ĄgbT)W}UJyC1 X1uFj?[HRRRZJYc4Z-AAr'e4ydXֱɣOyXhǎٳf )//t( gxA+..ÇR "00n9ή7>>JELL C6c)**CR%--Z$LQQ$&&/pq/}r68T*DGGSTTٳg1LdddR޽;]vmX[kggcq.jD eРA2Zs9:Jm;%%ZMdd$Æ Nͳq Eiuvn#ql榱cؾ#7m?W3L 2.zY?|\J½wɬ-_'@Qbl\&N??^^>\߷.llmElEMh%zV xE Q"/^!1Ƚ%7W 1(crk1QIryZh RڴBݝuvvfvfw.Lv۝yi̬٤i9O#~Y *[Pn݊\ա Vxwrrrf=zp:X|yDVz{{Fu8vk. !߼y6 YYYhooGkk+`q%,ZwAff&DT3gvAoY/:Gcc#f3\.֑Wo=-eDZt~Oc/Jy'$M7߶}()~_||>/C~ֻ<U!-}fll/M0|FG066YYc0atd^'fB$?oXhRSSaXc@eee(++CGG>@kVn[v+~ڳ jvHOO0U믿իزe l6qʕ!ԇnGoooH޲Ɗmz*Ξ=۷#)) ϟGkkuDXC[ncO5?骿hs-a_ 4{<x<\.Y cPB,X̦@|"]<~fV_ χLv;v @?~tuu233>ZV]Z( 0CnYjjjj A}}=JJJd;w.F# ؈ Ʉo t)R @z{{ӣg `dd^^A˲X,9{ՎXCWn8qpm\x1SzMZW~JQU6ϝ@?;:a_:)A-(PZZӧOҥK(--EEEjjjw^l6bݺus?n()tزe TiXP^^#G)))Xr%C@qbV---8y$l6֯_!~Ʉ TWWؼys9s066G?h4UUUCFF,KHkJƂ}[TT+W`߾}ZȝτaJQ,!e+70b͆kF^֕t_y<§ o_pi6><=/AC!GrmsdM&d`xLx.~,OO.75?y %*++Q^^t ?z^KD 0AA7MɄfXa2|U# 淖XTRѨkTÅ3(xT^m欿h0 `LxM>$H&{ln˗a6~i^g|,]&][[N>~8l۶-WGMod@ItS-޽;d  ( 6, 6Cex`V۬.Ƥ`'"ߔn00q?nL7C|>D2Ez-To*L2c%ڲNkjn78wyN\)Ttǂ`hĬSSq;-{m-{j*fSt_s7H./!ߘzꨮdn_,9Ye}sq`ʕqWOCJyZg6\oc2aONC >'! ֭[ ?40 (--j2'lonwu2QOWOi&.9c{rF#F#L& C… (N/V|Wx7`XpmTWWVO?4/^ATUUcccXp!6m={`ɒ%zt:O}MJ|c>9rmmm9s&y

2նwEAA~'bŊrܹs|HOO/r7| ̷k.+HKK ҥK!eSsF{{;, VZK֫BUU7jjjoIIIغu+k׮]XjjkkpBlܸ1hyrP,eΙ3Gw>zl?Ggg'0c ,_ۢQ;7\Վ u:t=N'Ν;5?bb4LhJ?$Z84XmmmA Caٲe@kk+>cddd1c.]M6ahh̆;w|O>%%%ضm`0T!}buppó>8pٳgkfvhexlL&:ƿ_D{{;>#xd{(((@CC>SA=sDAAA￯X_]]]xWq}i"]b^njǔO<^z%tvv? [Jǃ~~=*ي,..ƹshnnFqqGJV|`P >q`X|mON GII 3(,,Č3btvv#h4pCsstuu˖-`@rr2vrDyyy0 ANNN`;AP-e[a00o<7q^o/^ ˅o}SO=Yf|(-SO)S-˻q<`0 Mx~#=6YXX7n`pp[zdɒp"Do~)ܱEBjjjn޼2o}}=a6r0w\妧Ek~HII}MO9l+7`͚58z(t:|?yg[]{ ˅~<立Ĕ_eP6^:в-ZhWrdž:- ?#//cA4bA@n7Ӄz*Ξ=۷#)) ϟGkkrnb+k~Vn;z!u[唕 8|0222BUn Z*kjj*, vء$M})H"1wyvAuu[3oFuŋ tbQ$lj Gܹsa4QWWAݍFo``###zzhooY'066۷oŋ()) b z(ÖC}bZU]]]LOJf̞=.\CggiٵySSA@OOe533vǎ A6<ĪIY"=Ԗ ^PW-L4n ,v|>|嗁:!ɗ-(N555Ė-[ TWWؼys'"\rjEnnnH={`ٰvڠf`לN'< 6 ///0bAyy99Z`ʕa!}~&IӶJݹsǏGww7FFFPTTz6 /*9s999eV---8y$l6֯_![޽{aِu֩nw(|e[/z-h4UUUCFF,K[i[3o4dž:F#.\ׯSFCCϟ{MvLx2&h2L<&M<?`P؟eJ/ݦAWQbipQ6s40&yL<&h$_Хo CD\m/_ "6 CDm8X Nw5xt?"."""; (DDDwP(0Qa@!""ÀBDDDqe!CIDAT """;q}'ن gDDD4 6vE"""J!""ÀBDDDq """; (DDDw&#G"""JLvg ŝX""0%h2%3@-(VpBDD&5DP(DDD'7ȭ@@(^\tו"Ѳb^nLDDQX_f,(LDDD8&|U(-]=h (V 7XFL؊BDD8z.= hYR  Qb=]=@up Q{(4+u$w}PZRB ‰ҘU (J3k--vqHdj6}PBt`=DDD4D'&cOOk?l3g0I&̄GG"""Om( | )1PFoynM0aAC>aA$ZQ>2Qxr(Q;*!Q.Ĉ-ƨh[P  J1N'> (DDD.( Ӑp-)rWDԂi@Tn!E= vH  QtԚ")y"%[JHÉ8-Ox?*uH`BDD9iP wiKZ8QXV"%JSk"G0{pBDD=rE5E@Yu]D]= 2.44'), dependency('glib-2.0', version: '>= 2.54.2'), dependency('gobject-2.0', version: '>= 2.54'), gtk_dep, dependency('polkit-gobject-1'), libadwaita_dep, libmalcontent_dep, libmalcontent_ui_dep, ], include_directories: root_inc, install: true, ) desktop_file = i18n.merge_file( type: 'desktop', input: '@0@.desktop.in'.format(application_id), output: '@0@.desktop'.format(application_id), po_dir: join_paths(meson.current_source_dir(), '..', 'po'), install: true, install_dir: join_paths(get_option('datadir'), 'applications'), ) desktop_file_validate = find_program('desktop-file-validate', required: false) if desktop_file_validate.found() test( 'validate-desktop', desktop_file_validate, args: [ desktop_file.full_path(), ], suite: ['malcontent-control'], ) endif metainfo_file = i18n.merge_file( input: '@0@.metainfo.xml.in'.format(application_id), output: '@0@.metainfo.xml'.format(application_id), po_dir: join_paths(meson.current_source_dir(), '..', 'po'), install: true, install_dir: join_paths(get_option('datadir'), 'metainfo'), ) appstreamcli = find_program('appstreamcli', required: false) if appstreamcli.found() test( 'validate-metainfo', appstreamcli, args: [ 'validate', '--no-net', metainfo_file.full_path(), ], suite: ['malcontent-control'], ) endif xmllint = find_program('xmllint', required: false) if xmllint.found() gtk_prefix = gtk_dep.get_variable(pkgconfig: 'prefix') test( 'validate-ui', xmllint, args: [ '--nonet', '--noblanks', '--noout', '--relaxng', join_paths(gtk_prefix, 'share', 'gtk-4.0', 'gtk4builder.rng'), files( 'carousel.ui', 'main.ui', 'user-selector.ui', ), ], suite: ['malcontent-control'], ) endif policy_file = i18n.merge_file( input: '@0@.policy.in'.format(application_id), output: '@0@.policy'.format(application_id), po_dir: join_paths(meson.current_source_dir(), '..', 'po'), install: true, install_dir: join_paths(get_option('datadir'), 'polkit-1', 'actions'), ) if xmllint.found() test( 'validate-policy', xmllint, args: [ '--nonet', '--noblanks', '--noout', policy_file, ], suite: ['malcontent-control'], ) endif # FIXME: Add tests subdir('icons') #subdir('tests') org.freedesktop.MalcontentControl.desktop.in000066400000000000000000000011061505556674000361020ustar00rootroot00000000000000malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/malcontent-control[Desktop Entry] Name=Parental Controls Comment=Set parental controls and monitor usage by users Exec=malcontent-control # Translators: Do NOT translate or transliterate this text (this is an icon file name)! Icon=org.freedesktop.MalcontentControl Terminal=false Type=Application Categories=GTK;GNOME;System; StartupNotify=true # Translators: Search terms to find this application. Do NOT translate or localise the semicolons! The list MUST also end with a semicolon! Keywords=parental controls;screen time;app restrictions;web browser restrictions;oars;usage;usage limit;kid;child; org.freedesktop.MalcontentControl.metainfo.xml.in000066400000000000000000000205101505556674000370320ustar00rootroot00000000000000malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/malcontent-control org.freedesktop.MalcontentControl CC-BY-SA-3.0 GPL-2.0+ Parental Controls

Set parental controls and monitor usage by users

Manage users’ parental controls restrictions, controlling how long they can use the computer for, what software they can install, and what installed software they can run.

https://gitlab.freedesktop.org/pwithnall/malcontent/-/raw/HEAD/malcontent-control/malcontent-control.png Main window pointing keyboard touch 360 malcontent-control org.freedesktop.MalcontentControl.desktop https://gitlab.freedesktop.org/pwithnall/malcontent https://gitlab.freedesktop.org/pwithnall/malcontent/issues https://www.gnome.org/donate/ https://gitlab.freedesktop.org/pwithnall/malcontent https://wiki.gnome.org/TranslationProject/LocalisationGuide philip_at_tecnocode.co.uk GNOME The GNOME Project malcontent

This is a stable release with the following changes:

  • Fix a crash when selecting a different user account

This is a stable release with the following changes:

  • Make app uninstallable and re-show in the app list
  • Fix integration with GNOME Settings ≥ 46
  • Fix minor bugs with app list searching
  • Translation updates

This is a stable release with the following changes:

  • Support searching list of apps to restrict
  • Improve keyboard navigation
  • Improving some wording in the UI
  • Translation updates

This is a stable release with the following changes:

  • Translation updates

This is a stable release with the following changes:

  • Use libappstream instead of appstream-glib
  • Port to GTK4
  • Translation updates

This is a stable release with the following changes:

  • German translation of the user help
  • Translation updates

This is a stable release with the following changes:

  • Italian translation of the user help
  • Translation updates

This is a stable release with the following changes:

  • Prevent malcontent-control from being uninstalled and removing core desktop components with it
  • Improve keyboard navigation of the interface
  • Translation updates

This is a stable release with the following changes:

  • Hide the launcher for malcontent-control from gnome-shell if using the GNOME desktop; find it via gnome-control-center instead
  • Translation updates

This is a stable release with the following changes:

  • Sort apps by displayed name when listing them
  • Translation updates

This is a stable release with the following changes:

  • Reload the application list when apps are installed or removed
  • Fix some data loss consistency problems in the UI
  • Hide support for flatpak user repositories, as they are typically not configured
  • Minor improvements to parental controls application UI
  • Translation updates

This is a stable release with the following changes:

  • Minor improvements to parental controls application UI
  • Choose rating system by territory rather than language
  • Translation updates

This is a stable release with the following changes:

  • Minor improvements to parental controls application UI
  • Add a user manual
  • Translation updates

This is a stable release with the following changes:

  • Minor improvements to parental controls application UI
  • Translations to Ukrainian and Polish

This is a stable release with the following changes:

  • Improve parental controls application UI and add icon
  • Support for indicating which accounts are parent accounts

This is a stable release with the following changes:

  • Initial release of basic parental controls application
  • Support for setting app installation and run restrictions on users

This is a stable release with the following changes:

  • Maintenance release of underlying parental controls library
org.freedesktop.MalcontentControl.policy.in000066400000000000000000000020111505556674000357240ustar00rootroot00000000000000malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/malcontent-control The Malcontent Project https://gitlab.freedesktop.org/pwithnall/malcontent Manage parental controls Authentication is required to read and change user parental controls no no auth_admin_keep com.endlessm.ParentalControls.AppFilter.ReadAny com.endlessm.ParentalControls.AppFilter.ChangeAny com.endlessm.ParentalControls.AppFilter.ReadOwn com.endlessm.ParentalControls.AppFilter.ChangeOwn malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/malcontent-control/user-image.c000066400000000000000000000054771505556674000276350ustar00rootroot00000000000000/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- * * Copyright © 2022 Endless Mobile, Inc. * Copyright © 2015 Red Hat, Inc. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . * * Authors: * - Georges Basile Stavracas Neto * - Ondrej Holy */ #include #include #include #include "user-image.h" struct _MctUserImage { AdwBin parent_instance; AdwAvatar *avatar; ActUser *user; }; G_DEFINE_TYPE (MctUserImage, mct_user_image, ADW_TYPE_BIN) static GdkTexture * render_user_icon_texture (ActUser *user) { g_autoptr(GdkTexture) texture = NULL; g_autoptr(GError) error = NULL; const gchar *icon_file; g_return_val_if_fail (ACT_IS_USER (user), NULL); icon_file = act_user_get_icon_file (user); if (icon_file == NULL) return NULL; texture = gdk_texture_new_from_filename (icon_file, &error); if (error != NULL) { g_warning ("Error loading user icon: %s", error->message); return NULL; } return g_steal_pointer (&texture); } static void render_image (MctUserImage *image) { g_autoptr(GdkTexture) texture = NULL; if (image->user == NULL) return; texture = render_user_icon_texture (image->user); adw_avatar_set_custom_image (image->avatar, GDK_PAINTABLE (texture)); adw_avatar_set_text (image->avatar, act_user_get_real_name (image->user)); } void mct_user_image_set_user (MctUserImage *image, ActUser *user) { g_clear_object (&image->user); image->user = g_object_ref (user); render_image (image); } static void mct_user_image_finalize (GObject *object) { MctUserImage *image = MCT_USER_IMAGE (object); g_clear_object (&image->user); G_OBJECT_CLASS (mct_user_image_parent_class)->finalize (object); } static void mct_user_image_class_init (MctUserImageClass *class) { GObjectClass *object_class = G_OBJECT_CLASS (class); object_class->finalize = mct_user_image_finalize; } static void mct_user_image_init (MctUserImage *image) { image->avatar = ADW_AVATAR (adw_avatar_new (48, NULL, TRUE)); adw_bin_set_child (ADW_BIN (image), GTK_WIDGET (image->avatar)); } GtkWidget * mct_user_image_new (void) { return g_object_new (MCT_TYPE_USER_IMAGE, NULL); } malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/malcontent-control/user-image.h000066400000000000000000000024071505556674000276300ustar00rootroot00000000000000/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- * * Copyright © 2022 Endless Mobile, Inc. * Copyright © 2015 Red Hat, Inc. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . * * Authors: * - Georges Basile Stavracas Neto * - Ondrej Holy */ #pragma once #include #include G_BEGIN_DECLS #define MCT_TYPE_USER_IMAGE (mct_user_image_get_type ()) G_DECLARE_FINAL_TYPE (MctUserImage, mct_user_image, MCT, USER_IMAGE, AdwBin) GtkWidget *mct_user_image_new (void); void mct_user_image_set_user (MctUserImage *image, ActUser *user); G_END_DECLS malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/malcontent-control/user-selector.c000066400000000000000000000371231505556674000303640ustar00rootroot00000000000000/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- * * Copyright © 2020 Endless Mobile, Inc. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . * * Authors: * - Philip Withnall */ #include #include #include #include #include #include #include "carousel.h" #include "user-image.h" #include "user-selector.h" static void reload_users (MctUserSelector *self, ActUser *selected_user); static void notify_is_loaded_cb (GObject *obj, GParamSpec *pspec, gpointer user_data); static void user_added_cb (ActUserManager *user_manager, ActUser *user, gpointer user_data); static void user_changed_or_removed_cb (ActUserManager *user_manager, ActUser *user, gpointer user_data); static void carousel_item_activated (MctCarousel *carousel, MctCarouselItem *item, gpointer user_data); /** * MctUserSelector: * * The user selector is a widget which lists available user accounts and allows * the user to select one. * * Since: 0.5.0 */ struct _MctUserSelector { GtkBox parent_instance; MctCarousel *carousel; ActUserManager *user_manager; /* (owned) */ ActUser *user; /* (owned) */ gboolean show_administrators; }; G_DEFINE_TYPE (MctUserSelector, mct_user_selector, GTK_TYPE_BOX) typedef enum { PROP_USER = 1, PROP_USER_MANAGER, PROP_SHOW_ADMINISTRATORS, } MctUserSelectorProperty; static GParamSpec *properties[PROP_SHOW_ADMINISTRATORS + 1]; static void mct_user_selector_constructed (GObject *obj) { MctUserSelector *self = MCT_USER_SELECTOR (obj); g_assert (self->user_manager != NULL); g_signal_connect (self->user_manager, "user-changed", G_CALLBACK (user_changed_or_removed_cb), self); g_signal_connect (self->user_manager, "user-is-logged-in-changed", G_CALLBACK (user_changed_or_removed_cb), self); g_signal_connect (self->user_manager, "user-added", G_CALLBACK (user_added_cb), self); g_signal_connect (self->user_manager, "user-removed", G_CALLBACK (user_changed_or_removed_cb), self); g_signal_connect (self->user_manager, "notify::is-loaded", G_CALLBACK (notify_is_loaded_cb), self); /* Start loading the user accounts. */ notify_is_loaded_cb (G_OBJECT (self->user_manager), NULL, self); G_OBJECT_CLASS (mct_user_selector_parent_class)->constructed (obj); } static void mct_user_selector_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { MctUserSelector *self = MCT_USER_SELECTOR (object); switch ((MctUserSelectorProperty) prop_id) { case PROP_USER: g_value_set_object (value, self->user); break; case PROP_USER_MANAGER: g_value_set_object (value, self->user_manager); break; case PROP_SHOW_ADMINISTRATORS: g_value_set_boolean (value, self->show_administrators); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void mct_user_selector_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { MctUserSelector *self = MCT_USER_SELECTOR (object); switch ((MctUserSelectorProperty) prop_id) { case PROP_USER: /* Currently read only */ g_assert_not_reached (); break; case PROP_USER_MANAGER: g_assert (self->user_manager == NULL); self->user_manager = g_value_dup_object (value); break; case PROP_SHOW_ADMINISTRATORS: self->show_administrators = g_value_get_boolean (value); reload_users (self, NULL); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } } static void mct_user_selector_dispose (GObject *object) { MctUserSelector *self = (MctUserSelector *)object; g_clear_object (&self->user); if (self->user_manager != NULL) { g_signal_handlers_disconnect_by_func (self->user_manager, notify_is_loaded_cb, self); g_signal_handlers_disconnect_by_func (self->user_manager, user_changed_or_removed_cb, self); g_signal_handlers_disconnect_by_func (self->user_manager, user_added_cb, self); g_clear_object (&self->user_manager); } G_OBJECT_CLASS (mct_user_selector_parent_class)->dispose (object); } static void mct_user_selector_class_init (MctUserSelectorClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); object_class->constructed = mct_user_selector_constructed; object_class->get_property = mct_user_selector_get_property; object_class->set_property = mct_user_selector_set_property; object_class->dispose = mct_user_selector_dispose; /** * MctUserSelector:user: (nullable) * * The currently selected user account, or %NULL if no user is selected. * Currently read only but may become writable in future. * * Since: 0.5.0 */ properties[PROP_USER] = g_param_spec_object ("user", "User", "The currently selected user account, or %NULL if no user is selected.", ACT_TYPE_USER, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); /** * MctUserSelector:user-manager: (not nullable) * * The user manager providing the data for the widget. * * Since: 0.5.0 */ properties[PROP_USER_MANAGER] = g_param_spec_object ("user-manager", "User Manager", "The user manager providing the data for the widget.", ACT_TYPE_USER_MANAGER, G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); /** * MctUserSelector:show-administrators: * * Whether to show administrators in the list, or hide them. * * Since: 0.5.0 */ properties[PROP_SHOW_ADMINISTRATORS] = g_param_spec_boolean ("show-administrators", "Show Administrators?", "Whether to show administrators in the list, or hide them.", TRUE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); g_object_class_install_properties (object_class, G_N_ELEMENTS (properties), properties); gtk_widget_class_set_template_from_resource (widget_class, "/org/freedesktop/MalcontentControl/ui/user-selector.ui"); gtk_widget_class_bind_template_child (widget_class, MctUserSelector, carousel); gtk_widget_class_bind_template_callback (widget_class, carousel_item_activated); } static void mct_user_selector_init (MctUserSelector *self) { self->show_administrators = TRUE; /* Ensure the types used in the UI are registered. */ g_type_ensure (MCT_TYPE_CAROUSEL); gtk_widget_init_template (GTK_WIDGET (self)); } static void notify_is_loaded_cb (GObject *obj, GParamSpec *pspec, gpointer user_data) { MctUserSelector *self = MCT_USER_SELECTOR (user_data); gboolean is_loaded; /* The implementation of #ActUserManager guarantees that once is-loaded is * true, it is never reset to false. */ g_object_get (self->user_manager, "is-loaded", &is_loaded, NULL); if (is_loaded) reload_users (self, NULL); } static const gchar * get_real_or_user_name (ActUser *user) { const gchar *name; name = act_user_get_real_name (user); if (name == NULL) name = act_user_get_user_name (user); return name; } static void carousel_item_activated (MctCarousel *carousel, MctCarouselItem *item, gpointer user_data) { MctUserSelector *self = MCT_USER_SELECTOR (user_data); uid_t uid; ActUser *user = NULL; g_clear_object (&self->user); uid = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (item), "uid")); user = act_user_manager_get_user_by_id (self->user_manager, uid); if (g_set_object (&self->user, user)) g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_USER]); } static gint sort_users (gconstpointer a, gconstpointer b) { ActUser *ua, *ub; gint result; ua = ACT_USER ((gpointer) a); ub = ACT_USER ((gpointer) b); /* Make sure the current user is shown first */ if (act_user_get_uid (ua) == getuid ()) { result = G_MININT32; } else if (act_user_get_uid (ub) == getuid ()) { result = G_MAXINT32; } else { g_autofree gchar *name1 = NULL, *name2 = NULL; name1 = g_utf8_collate_key (get_real_or_user_name (ua), -1); name2 = g_utf8_collate_key (get_real_or_user_name (ub), -1); result = strcmp (name1, name2); } return result; } static gint user_compare (gconstpointer i, gconstpointer u) { MctCarouselItem *item; ActUser *user; gint uid_a, uid_b; gint result; item = (MctCarouselItem *) i; user = ACT_USER ((gpointer) u); uid_a = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (item), "uid")); uid_b = act_user_get_uid (user); result = uid_a - uid_b; return result; } static void reload_users (MctUserSelector *self, ActUser *selected_user) { ActUser *user; g_autoptr(GSList) list = NULL; GSList *l; MctCarouselItem *item = NULL; GtkSettings *settings; gboolean animations; settings = gtk_widget_get_settings (GTK_WIDGET (self->carousel)); g_object_get (settings, "gtk-enable-animations", &animations, NULL); g_object_set (settings, "gtk-enable-animations", FALSE, NULL); list = act_user_manager_list_users (self->user_manager); g_debug ("Got %u users", g_slist_length (list)); mct_carousel_purge_items (self->carousel); list = g_slist_sort (list, (GCompareFunc) sort_users); for (l = list; l; l = l->next) { user = l->data; if (act_user_get_account_type (user) == ACT_USER_ACCOUNT_TYPE_ADMINISTRATOR && !self->show_administrators) { g_debug ("Ignoring administrator %s", get_real_or_user_name (user)); continue; } g_debug ("Adding user %s", get_real_or_user_name (user)); user_added_cb (self->user_manager, user, self); } if (selected_user) item = mct_carousel_find_item (self->carousel, selected_user, user_compare); mct_carousel_select_item (self->carousel, item); g_object_set (settings, "gtk-enable-animations", animations, NULL); mct_carousel_set_revealed (self->carousel, TRUE); } static GtkWidget * create_carousel_entry (MctUserSelector *self, ActUser *user) { GtkWidget *box, *widget; gchar *label; box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); widget = mct_user_image_new (); mct_user_image_set_user (MCT_USER_IMAGE (widget), user); gtk_box_append (GTK_BOX (box), widget); label = g_strdup_printf ("%s", get_real_or_user_name (user)); widget = gtk_label_new (label); gtk_label_set_use_markup (GTK_LABEL (widget), TRUE); gtk_label_set_ellipsize (GTK_LABEL (widget), PANGO_ELLIPSIZE_END); gtk_widget_set_margin_top (widget, 5); gtk_box_append (GTK_BOX (box), widget); g_free (label); if (act_user_get_uid (user) == getuid ()) label = g_strdup_printf ("%s", _("Your account")); else label = g_strdup (" "); widget = gtk_label_new (label); gtk_label_set_use_markup (GTK_LABEL (widget), TRUE); g_free (label); gtk_box_append (GTK_BOX (box), widget); gtk_widget_add_css_class (widget, "dim-label"); return box; } static void user_added_cb (ActUserManager *user_manager, ActUser *user, gpointer user_data) { MctUserSelector *self = MCT_USER_SELECTOR (user_data); GtkWidget *item, *widget; if (act_user_is_system_account (user) || (act_user_get_account_type (user) == ACT_USER_ACCOUNT_TYPE_ADMINISTRATOR && !self->show_administrators)) return; g_debug ("User added: %u %s", (guint) act_user_get_uid (user), get_real_or_user_name (user)); widget = create_carousel_entry (self, user); item = mct_carousel_item_new (); mct_carousel_item_set_child (MCT_CAROUSEL_ITEM (item), widget); g_object_set_data (G_OBJECT (item), "uid", GINT_TO_POINTER (act_user_get_uid (user))); mct_carousel_add (self->carousel, MCT_CAROUSEL_ITEM (item)); } static void user_changed_or_removed_cb (ActUserManager *user_manager, ActUser *user, gpointer user_data) { MctUserSelector *self = MCT_USER_SELECTOR (user_data); reload_users (self, self->user); } /** * mct_user_selector_new: * @user_manager: (transfer none): an #ActUserManager to provide the user data * * Create a new #MctUserSelector widget. * * Returns: (transfer full): a new user selector * Since: 0.5.0 */ MctUserSelector * mct_user_selector_new (ActUserManager *user_manager) { g_return_val_if_fail (ACT_IS_USER_MANAGER (user_manager), NULL); return g_object_new (MCT_TYPE_USER_SELECTOR, "user-manager", user_manager, NULL); } /** * mct_user_selector_get_user: * @self: an #MctUserSelector * * Get the currently selected user, or %NULL if no user is selected. * * Returns: (transfer none) (nullable): the currently selected user * Since: 0.5.0 */ ActUser * mct_user_selector_get_user (MctUserSelector *self) { g_return_val_if_fail (MCT_IS_USER_SELECTOR (self), NULL); return self->user; } /** * mct_user_selector_select_user_by_username: * @self: an #MctUserSelector * @username: username of the user to select * * Selects the given @username in the widget. This might fail if @username isn’t * a valid user, or if they aren’t listed in the selector due to being an * administrator (see #MctUserSelector:show-administrators). * * Returns: %TRUE if the user was successfully selected, %FALSE otherwise * Since: 0.10.0 */ gboolean mct_user_selector_select_user_by_username (MctUserSelector *self, const gchar *username) { MctCarouselItem *item = NULL; ActUser *user = NULL; g_return_val_if_fail (MCT_IS_USER_SELECTOR (self), FALSE); g_return_val_if_fail (username != NULL && *username != '\0', FALSE); user = act_user_manager_get_user (self->user_manager, username); if (user == NULL) return FALSE; item = mct_carousel_find_item (self->carousel, user, user_compare); if (item == NULL) return FALSE; mct_carousel_select_item (self->carousel, item); return TRUE; } malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/malcontent-control/user-selector.h000066400000000000000000000025041505556674000303640ustar00rootroot00000000000000/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- * * Copyright © 2020 Endless Mobile, Inc. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . * * Authors: * - Philip Withnall */ #pragma once #include #include G_BEGIN_DECLS #define MCT_TYPE_USER_SELECTOR (mct_user_selector_get_type ()) G_DECLARE_FINAL_TYPE (MctUserSelector, mct_user_selector, MCT, USER_SELECTOR, GtkBox) MctUserSelector *mct_user_selector_new (ActUserManager *user_manager); ActUser *mct_user_selector_get_user (MctUserSelector *self); gboolean mct_user_selector_select_user_by_username (MctUserSelector *self, const gchar *username); G_END_DECLS malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/malcontent-control/user-selector.ui000066400000000000000000000006511505556674000305530ustar00rootroot00000000000000 malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/malcontent.doap000066400000000000000000000013451505556674000246100ustar00rootroot00000000000000 malcontent malcontent provides parental controls functionality on Linux systems malcontent implements support for restricting the abilities of non-administrator accounts on a Linux system. malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/meson.build000066400000000000000000000114021505556674000237340ustar00rootroot00000000000000project('malcontent', 'c', version : '0.13.1', meson_version : '>= 1.2.0', license: ['LGPL-2.1-or-later', 'GPL-2.0-or-later'], default_options : [ 'buildtype=debugoptimized', 'warning_level=2', 'c_std=gnu11', ] ) gnome = import('gnome') i18n = import('i18n') pkgconfig = import('pkgconfig') meson_make_symlink = join_paths(meson.current_source_dir(), 'tools', 'meson-make-symlink.py') po_dir = join_paths(meson.current_source_dir(), 'po') prefix = get_option('prefix') bindir = join_paths(prefix, get_option('bindir')) datadir = join_paths(prefix, get_option('datadir')) libdir = join_paths(prefix, get_option('libdir')) libexecdir = join_paths(prefix, get_option('libexecdir')) includedir = join_paths(prefix, get_option('includedir')) # FIXME: This isn’t exposed in accountsservice.pc # See https://gitlab.freedesktop.org/accountsservice/accountsservice/merge_requests/16 accountsserviceinterfacesdir = join_paths(datadir, 'accountsservice', 'interfaces') # FIXME: pam.pc doesn’t exist pamlibdir = get_option('pamlibdir') if pamlibdir == '' pamlibdir = join_paths(libdir, 'security') endif dbus = dependency('dbus-1') dbusinterfacesdir = dbus.get_variable(pkgconfig: 'interfaces_dir', pkgconfig_define: ['datadir', datadir]) polkit_gobject = dependency('polkit-gobject-1') polkitpolicydir = polkit_gobject.get_variable(pkgconfig: 'policydir', pkgconfig_define: ['prefix', prefix]) config_h = configuration_data() config_h.set_quoted('GETTEXT_PACKAGE', 'malcontent') config_h.set_quoted('PACKAGE_LOCALE_DIR', join_paths(get_option('prefix'), get_option('localedir'))) config_h.set_quoted('PAMLIBDIR', pamlibdir) config_h.set_quoted('VERSION', meson.project_version()) configure_file( output: 'config.h', configuration: config_h, ) root_inc = include_directories('.') # Enable warning flags test_c_args = [ '-fno-strict-aliasing', '-fstack-protector-strong', '-Waggregate-return', '-Wunused', '-Warray-bounds', '-Wcast-align', '-Wclobbered', '-Wno-declaration-after-statement', '-Wdiscarded-qualifiers', '-Wduplicated-branches', '-Wduplicated-cond', '-Wempty-body', '-Wformat=2', '-Wformat-nonliteral', '-Wformat-security', '-Wformat-signedness', '-Wignored-qualifiers', '-Wimplicit-function-declaration', '-Wincompatible-pointer-types', '-Wincompatible-pointer-types-discards-qualifiers', '-Winit-self', '-Wint-conversion', '-Wlogical-op', '-Wmisleading-indentation', '-Wmissing-declarations', '-Wmissing-format-attribute', '-Wmissing-include-dirs', '-Wmissing-noreturn', '-Wmissing-parameter-type', '-Wmissing-prototypes', '-Wnested-externs', '-Wno-error=cpp', '-Wmissing-field-initializers', '-Wno-suggest-attribute=format', '-Wno-unused-parameter', '-Wnull-dereference', '-Wold-style-definition', '-Woverflow', '-Woverride-init', '-Wparentheses', '-Wpointer-arith', '-Wredundant-decls', '-Wreturn-type', '-Wshadow', '-Wsign-compare', '-Wno-error=strict-aliasing', '-Wstrict-prototypes', '-Wswitch-default', '-Wswitch-enum', '-Wtype-limits', '-Wundef', '-Wuninitialized', '-Wunused-but-set-variable', '-Wunused-result', '-Wunused-variable', '-Wwrite-strings' ] cc = meson.get_compiler('c') add_project_arguments(cc.get_supported_arguments(test_c_args), language: 'c') enable_installed_tests = get_option('installed_tests') test_template = files('template.test.in') test_env = [ 'G_DEBUG=gc-friendly,fatal-warnings', 'MALLOC_CHECK_=2', 'LC_ALL=C.UTF-8', ] # Keep in sync with GTK and libadwaita version dependencies below add_project_arguments([ '-DGDK_VERSION_MIN_REQUIRED=GDK_VERSION_4_12', '-DGDK_VERSION_MAX_ALLOWED=G_ENCODE_VERSION(4,14)', '-DADW_VERSION_MIN_REQUIRED=ADW_VERSION_1_6', '-DADW_VERSION_MAX_ALLOWED=ADW_ENCODE_VERSION(1,6,0)', ], language: 'c') subdir('accounts-service') subdir('help') if not get_option('use_system_libmalcontent') subdir('libmalcontent') else libmalcontent_api_version = '0' libmalcontent_dep = dependency('malcontent-' + libmalcontent_api_version, version: meson.project_version()) libmalcontent_gir = ['Malcontent-' + libmalcontent_api_version, 'Malcontent-' + libmalcontent_api_version + '.typelib'] endif if get_option('ui').enabled() # Keep in sync with GDK_VERSION_MIN_REQUIRED etc above gtk_dep = dependency('gtk4', version: '>= 4.12') libadwaita_dep = dependency( 'libadwaita-1', version: '>= 1.6', fallback: ['libadwaita', 'libadwaita_dep'], default_options: ['examples=false', 'introspection=disabled', 'tests=false', 'vapi=false'], ) subdir('libmalcontent-ui') endif subdir('malcontent-client') if get_option('ui').enabled() subdir('malcontent-control') gnome.post_install( gtk_update_icon_cache: true, update_desktop_database: true, ) endif subdir('pam') subdir('po') malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/meson_options.txt000066400000000000000000000011321505556674000252260ustar00rootroot00000000000000option( 'installed_tests', type: 'boolean', value: false, description: 'enable installed tests' ) option( 'pamlibdir', type: 'string', description: 'directory for PAM modules' ) option( 'ui', type: 'feature', value: 'enabled', description: 'enable UI library' ) option( 'use_system_libmalcontent', type: 'boolean', value: false, description: 'use installed libmalcontent rather than building it; used in distros to break a dependency cycle' ) option( 'privileged_group', type: 'string', value: 'wheel', description: 'name of group that has elevated permissions' ) malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/pam/000077500000000000000000000000001505556674000223515ustar00rootroot00000000000000malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/pam/meson.build000066400000000000000000000012651505556674000245170ustar00rootroot00000000000000libpam = cc.find_library('pam', required: true) libpam_misc = cc.find_library('pam_misc', required: true) pam_malcontent = shared_library('pam_malcontent', files('pam_malcontent.c'), name_prefix: '', link_args: [ '-shared', '-Wl,--version-script=' + join_paths(meson.current_source_dir(), 'pam_malcontent.sym'), ], dependencies: [ dependency('gio-2.0', version: '>= 2.44'), dependency('glib-2.0', version: '>= 2.54.2'), dependency('gobject-2.0', version: '>= 2.54'), libmalcontent_dep, libpam, libpam_misc, ], link_depends: files('pam_malcontent.sym'), include_directories: root_inc, install: true, install_dir: pamlibdir) subdir('tests') malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/pam/pam_malcontent.c000066400000000000000000000142361505556674000255240ustar00rootroot00000000000000/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- * * Copyright © 2019 Endless Mobile, Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * * Authors: * - Philip Withnall */ #include "config.h" #define PAM_SM_ACCOUNT #include #include #include #include #include #include #include #include /* Example usage: * * Here’s an example of a PAM file which uses `pam_malcontent.so`. Note * that `pam_malcontent.so` must be listed before `pam_systemd.so`, and it must * have type `account`. * * ``` * auth sufficient pam_unix.so nullok try_first_pass * auth required pam_deny.so * * account required pam_nologin.so * account sufficient pam_unix.so * account required pam_permit.so * -account required pam_malcontent.so * * password sufficient pam_unix.so nullok sha512 shadow try_first_pass try_authtok * password required pam_deny.so * * -session optional pam_keyinit.so revoke * -session optional pam_loginuid.so * -session optional pam_systemd.so * session sufficient pam_unix.so * ``` */ /* @pw_out is (transfer none) (out) (not optional) */ static int get_user_data (pam_handle_t *handle, const char **username_out, const struct passwd **pw_out) { const char *username = NULL; struct passwd *pw = NULL; int r; g_return_val_if_fail (handle != NULL, PAM_AUTH_ERR); g_return_val_if_fail (username_out != NULL, PAM_AUTH_ERR); g_return_val_if_fail (pw_out != NULL, PAM_AUTH_ERR); r = pam_get_user (handle, &username, NULL); if (r != PAM_SUCCESS) { pam_syslog (handle, LOG_ERR, "Failed to get user name."); return r; } if (username == NULL || *username == '\0') { pam_syslog (handle, LOG_ERR, "User name not valid."); return PAM_AUTH_ERR; } pw = pam_modutil_getpwnam (handle, username); if (pw == NULL) { pam_syslog (handle, LOG_ERR, "Failed to get user data."); return PAM_USER_UNKNOWN; } *pw_out = pw; *username_out = username; return PAM_SUCCESS; } static void runtime_max_sec_free (pam_handle_t *handle, void *data, int error_status) { g_return_if_fail (data != NULL); g_free (data); } PAM_EXTERN int pam_sm_acct_mgmt (pam_handle_t *handle, int flags, int argc, const char **argv) { int retval; const char *username = NULL; const struct passwd *pw = NULL; g_autoptr(GDBusConnection) connection = NULL; g_autoptr(MctManager) manager = NULL; g_autoptr(MctSessionLimits) limits = NULL; g_autoptr(GError) local_error = NULL; g_autofree gchar *runtime_max_sec_str = NULL; guint64 now = g_get_real_time (); guint64 time_remaining_secs = 0; gboolean time_limit_enabled = FALSE; /* Look up the user data from the handle. */ retval = get_user_data (handle, &username, &pw); if (retval != PAM_SUCCESS) { /* The error has already been logged. */ return retval; } if (pw->pw_uid == 0) { /* Always allow root, to avoid a situation where this PAM module prevents * all users logging in with no way of recovery. */ pam_info (handle, _("User ‘%s’ has no time limits enabled"), "root"); return PAM_SUCCESS; } /* Connect to the system bus. */ connection = g_bus_get_sync (G_BUS_TYPE_SYSTEM, NULL, &local_error); if (connection == NULL) { pam_error (handle, _("Error getting session limits for user ‘%s’: %s"), username, local_error->message); return PAM_SERVICE_ERR; } /* Get the time limits on this user’s session usage. */ manager = mct_manager_new (connection); limits = mct_manager_get_session_limits (manager, pw->pw_uid, MCT_MANAGER_GET_VALUE_FLAGS_NONE, NULL, &local_error); if (limits == NULL) { if (g_error_matches (local_error, MCT_MANAGER_ERROR, MCT_MANAGER_ERROR_DISABLED)) { return PAM_SUCCESS; } else { pam_error (handle, _("Error getting session limits for user ‘%s’: %s"), username, local_error->message); return PAM_SERVICE_ERR; } } /* Check if there’s time left. */ if (!mct_session_limits_check_time_remaining (limits, now, &time_remaining_secs, &time_limit_enabled)) { pam_error (handle, _("User ‘%s’ has no time remaining"), username); return PAM_AUTH_ERR; } if (!time_limit_enabled) { pam_info (handle, _("User ‘%s’ has no time limits enabled"), username); return PAM_SUCCESS; } /* Propagate the remaining time to the `pam_systemd.so` module, which will * end the user’s session when it runs out. */ runtime_max_sec_str = g_strdup_printf ("%" G_GUINT64_FORMAT, time_remaining_secs); retval = pam_set_data (handle, "systemd.runtime_max_sec", g_steal_pointer (&runtime_max_sec_str), runtime_max_sec_free); if (retval != PAM_SUCCESS) { pam_error (handle, _("Error setting time limit on login session: %s"), pam_strerror (handle, retval)); return retval; } return PAM_SUCCESS; } malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/pam/pam_malcontent.sym000066400000000000000000000016021505556674000261030ustar00rootroot00000000000000/* * Copyright © 2019 Endless Mobile, Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * * Authors: * - Philip Withnall */ { global: pam_sm_acct_mgmt; local: *; }; malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/pam/tests/000077500000000000000000000000001505556674000235135ustar00rootroot00000000000000malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/pam/tests/meson.build000066400000000000000000000023151505556674000256560ustar00rootroot00000000000000deps = [ dependency('glib-2.0', version: '>= 2.60.0'), cc.find_library('dl'), ] envs = test_env + [ 'G_TEST_SRCDIR=' + meson.current_source_dir(), 'G_TEST_BUILDDIR=' + meson.current_build_dir(), ] test_programs = [ ['pam_malcontent', [], deps], ] installed_tests_metadir = join_paths(datadir, 'installed-tests', 'libmalcontent-' + libmalcontent_api_version) installed_tests_execdir = join_paths(libexecdir, 'installed-tests', 'libmalcontent-' + libmalcontent_api_version) foreach program: test_programs test_conf = configuration_data() test_conf.set('installed_tests_dir', installed_tests_execdir) test_conf.set('program', program[0]) configure_file( input: test_template, output: program[0] + '.test', install: enable_installed_tests, install_dir: installed_tests_metadir, configuration: test_conf, ) exe = executable( program[0], [program[0] + '.c'] + program[1], dependencies: program[2], include_directories: root_inc, install: enable_installed_tests, install_dir: installed_tests_execdir, ) test( program[0], exe, env: envs, args: ['--tap'], ) endforeach malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/pam/tests/pam_malcontent.c000066400000000000000000000040601505556674000266600ustar00rootroot00000000000000/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- * * Copyright © 2019 Endless Mobile, Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * * Authors: * - Philip Withnall */ #include #include #include #include #include "config.h" /* Test that the `pam_malcontent.so` module can be loaded using dlopen() and * that it exports the appropriate symbols for PAM to be able to use it. */ static void test_pam_malcontent_dlopen (void) { g_autofree gchar *module_path = NULL; void *handle; int retval; void *fn; module_path = g_test_build_filename (G_TEST_BUILT, "..", "pam_malcontent.so", NULL); /* Installed tests version. */ if (!g_file_test (module_path, G_FILE_TEST_EXISTS)) { g_free (module_path); module_path = g_build_filename (PAMLIBDIR, "pam_malcontent.so", NULL); } /* Check the module can be loaded. */ handle = dlopen (module_path, RTLD_NOW); g_assert_nonnull (handle); /* Check the appropriate symbols exist. */ fn = dlsym (handle, "pam_sm_acct_mgmt"); g_assert_nonnull (fn); retval = dlclose (handle); g_assert_cmpint (retval, ==, 0); } int main (int argc, char **argv) { setlocale (LC_ALL, ""); g_test_init (&argc, &argv, NULL); g_test_add_func ("/pam_malcontent/dlopen", test_pam_malcontent_dlopen); return g_test_run (); } malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/po/000077500000000000000000000000001505556674000222125ustar00rootroot00000000000000malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/po/.gitignore000066400000000000000000000000171505556674000242000ustar00rootroot00000000000000malcontent.pot malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/po/LINGUAS000066400000000000000000000002651505556674000232420ustar00rootroot00000000000000af ar bg bn ca ca@valencia cs da de el eo es eu fa fi fr fur gd gl he hi hr hu id it ka kk ko lt lv ml ms nb nl oc pa pl pt pt_BR ro ru sk sl sr sr@latin sv th tr uk vi zh_CN zh_TW malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/po/POTFILES.in000066400000000000000000000015221505556674000237670ustar00rootroot00000000000000# List of source files containing translatable strings. # Please keep this file sorted alphabetically. accounts-service/com.endlessm.ParentalControls.policy.in libmalcontent/app-filter.c libmalcontent/manager.c libmalcontent/session-limits.c libmalcontent-ui/restrict-applications-dialog.c libmalcontent-ui/restrict-applications-dialog.ui libmalcontent-ui/restrict-applications-selector.c libmalcontent-ui/restrict-applications-selector.ui libmalcontent-ui/user-controls.c libmalcontent-ui/user-controls.ui malcontent-control/application.c malcontent-control/carousel.ui malcontent-control/main.ui malcontent-control/org.freedesktop.MalcontentControl.metainfo.xml.in malcontent-control/org.freedesktop.MalcontentControl.desktop.in malcontent-control/org.freedesktop.MalcontentControl.policy.in malcontent-control/user-selector.c pam/pam_malcontent.c malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/po/af.po000066400000000000000000000554701505556674000231530ustar00rootroot00000000000000# Afrikaans translations for malcontent package. # Copyright (C) 2020 THE malcontent'S COPYRIGHT HOLDER # This file is distributed under the same license as the malcontent package. # Automatically generated, 2020. # msgid "" msgstr "" "Project-Id-Version: malcontent\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-06-10 12:04+0100\n" "PO-Revision-Date: 2020-04-15 13:42+0100\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: af\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: accounts-service/com.endlessm.ParentalControls.policy.in:4 msgid "Change your own app filter" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:5 msgid "Authentication is required to change your app filter." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:14 msgid "Read your own app filter" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:15 msgid "Authentication is required to read your app filter." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:24 msgid "Change another user’s app filter" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:25 msgid "Authentication is required to change another user’s app filter." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:34 msgid "Read another user’s app filter" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:35 msgid "Authentication is required to read another user’s app filter." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:44 msgid "Change your own session limits" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:45 msgid "Authentication is required to change your session limits." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:54 msgid "Read your own session limits" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:55 msgid "Authentication is required to read your session limits." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:64 msgid "Change another user’s session limits" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:65 msgid "Authentication is required to change another user’s session limits." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:74 msgid "Read another user’s session limits" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:75 msgid "Authentication is required to read another user’s session limits." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:84 msgid "Change your own account info" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:85 msgid "Authentication is required to change your account info." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:94 msgid "Read your own account info" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:95 msgid "Authentication is required to read your account info." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:104 msgid "Change another user’s account info" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:105 msgid "Authentication is required to change another user’s account info." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:114 msgid "Read another user’s account info" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:115 msgid "Authentication is required to read another user’s account info." msgstr "" #: libmalcontent/app-filter.c:694 #, c-format msgid "App filter for user %u was in an unrecognized format" msgstr "" #: libmalcontent/app-filter.c:725 #, c-format msgid "OARS filter for user %u has an unrecognized kind ‘%s’" msgstr "" #: libmalcontent/manager.c:283 libmalcontent/manager.c:412 #, c-format msgid "Not allowed to query app filter data for user %u" msgstr "" #: libmalcontent/manager.c:288 #, c-format msgid "User %u does not exist" msgstr "" #: libmalcontent/manager.c:394 msgid "App filtering is globally disabled" msgstr "" #: libmalcontent/manager.c:777 msgid "Session limits are globally disabled" msgstr "" #: libmalcontent/manager.c:795 #, c-format msgid "Not allowed to query session limits data for user %u" msgstr "" #: libmalcontent/session-limits.c:306 #, c-format msgid "Session limit for user %u was in an unrecognized format" msgstr "" #: libmalcontent/session-limits.c:328 #, c-format msgid "Session limit for user %u has an unrecognized type ‘%u’" msgstr "" #: libmalcontent/session-limits.c:346 #, c-format msgid "Session limit for user %u has invalid daily schedule %u–%u" msgstr "" #. TRANSLATORS: This is the formatting of English and localized name #. of the rating e.g. "Adults Only (solo adultos)" #: libmalcontent-ui/gs-content-rating.c:75 #, c-format msgid "%s (%s)" msgstr "" #: libmalcontent-ui/gs-content-rating.c:209 msgid "General" msgstr "" #: libmalcontent-ui/gs-content-rating.c:218 msgid "ALL" msgstr "" #: libmalcontent-ui/gs-content-rating.c:222 #: libmalcontent-ui/gs-content-rating.c:485 msgid "Adults Only" msgstr "" #: libmalcontent-ui/gs-content-rating.c:224 #: libmalcontent-ui/gs-content-rating.c:484 msgid "Mature" msgstr "" #: libmalcontent-ui/gs-content-rating.c:226 #: libmalcontent-ui/gs-content-rating.c:483 msgid "Teen" msgstr "" #: libmalcontent-ui/gs-content-rating.c:228 #: libmalcontent-ui/gs-content-rating.c:482 msgid "Everyone 10+" msgstr "" #: libmalcontent-ui/gs-content-rating.c:230 #: libmalcontent-ui/gs-content-rating.c:481 msgid "Everyone" msgstr "" #: libmalcontent-ui/gs-content-rating.c:232 #: libmalcontent-ui/gs-content-rating.c:480 msgid "Early Childhood" msgstr "" #. Translators: the placeholder is a user’s full name #: libmalcontent-ui/restrict-applications-dialog.c:222 #, c-format msgid "Restrict %s from using the following installed applications." msgstr "" #: libmalcontent-ui/restrict-applications-dialog.ui:6 #: libmalcontent-ui/restrict-applications-dialog.ui:12 msgid "Restrict Applications" msgstr "" #: libmalcontent-ui/restrict-applications-selector.ui:24 msgid "No applications found to restrict." msgstr "" #. Translators: this is the full name for an unknown user account. #: libmalcontent-ui/user-controls.c:242 libmalcontent-ui/user-controls.c:253 msgid "unknown" msgstr "" #: libmalcontent-ui/user-controls.c:338 libmalcontent-ui/user-controls.c:425 #: libmalcontent-ui/user-controls.c:711 msgid "All Ages" msgstr "" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:514 #, c-format msgid "" "Prevents %s from running web browsers. Limited web content may still be " "available in other applications." msgstr "" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:519 #, c-format msgid "Prevents specified applications from being used by %s." msgstr "" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:524 #, c-format msgid "Prevents %s from installing applications." msgstr "" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:529 #, c-format msgid "Applications installed by %s will not appear for other users." msgstr "" #: libmalcontent-ui/user-controls.ui:17 msgid "Application Usage Restrictions" msgstr "" #: libmalcontent-ui/user-controls.ui:68 msgid "Restrict _Web Browsers" msgstr "" #: libmalcontent-ui/user-controls.ui:152 msgid "_Restrict Applications" msgstr "" #: libmalcontent-ui/user-controls.ui:231 msgid "Software Installation Restrictions" msgstr "" #: libmalcontent-ui/user-controls.ui:281 msgid "Restrict Application _Installation" msgstr "" #: libmalcontent-ui/user-controls.ui:366 msgid "Restrict Application Installation for _Others" msgstr "" #: libmalcontent-ui/user-controls.ui:451 msgid "Application _Suitability" msgstr "" #: libmalcontent-ui/user-controls.ui:473 msgid "" "Restricts browsing or installation of applications to applications suitable " "for certain ages or above." msgstr "" #. Translators: This is the title of the main window #. Translators: the name of the application as it appears in a software center #: malcontent-control/application.c:105 malcontent-control/main.ui:12 #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:9 #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:3 msgid "Parental Controls" msgstr "" #: malcontent-control/application.c:270 msgid "Copyright © 2019, 2020 Endless Mobile, Inc." msgstr "" #. Translators: this should be "translated" to the #. names of people who have translated Malcontent into #. this language, one per line. #: malcontent-control/application.c:275 msgid "translator-credits" msgstr "" #. Translators: "Malcontent" is the brand name of this #. project, so should not be translated. #: malcontent-control/application.c:281 msgid "Malcontent Website" msgstr "" #: malcontent-control/application.c:299 msgid "The help contents could not be displayed" msgstr "" #: malcontent-control/application.c:336 msgid "Failed to load user data from the system" msgstr "" #: malcontent-control/application.c:338 msgid "Please make sure that the AccountsService is installed and enabled." msgstr "" #: malcontent-control/carousel.ui:48 msgid "Previous Page" msgstr "" #: malcontent-control/carousel.ui:74 msgid "Next Page" msgstr "" #: malcontent-control/main.ui:93 msgid "Permission Required" msgstr "" #: malcontent-control/main.ui:107 msgid "" "Permission is required to view and change user parental controls settings." msgstr "" #: malcontent-control/main.ui:148 msgid "No Child Users Configured" msgstr "" #: malcontent-control/main.ui:162 msgid "" "No child users are currently set up on the system. Create one before setting " "up their parental controls." msgstr "" #: malcontent-control/main.ui:174 msgid "Create _Child User" msgstr "" #: malcontent-control/main.ui:202 msgid "Loading…" msgstr "" #: malcontent-control/main.ui:265 msgid "_Help" msgstr "_Hulp" #: malcontent-control/main.ui:269 msgid "_About Parental Controls" msgstr "" #. Translators: the brief summary of the application as it appears in a software center. #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:12 #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:4 msgid "Set parental controls and monitor usage by users" msgstr "" #. Translators: These are the application description paragraphs in the AppData file. #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:16 msgid "" "Manage users’ parental controls restrictions, controlling how long they can " "use the computer for, what software they can install, and what installed " "software they can run." msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:39 msgid "The GNOME Project" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:50 #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:59 msgid "Minor improvements to parental controls application UI" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:51 msgid "Add a user manual" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:52 msgid "Translation updates" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:60 msgid "Translations to Ukrainian and Polish" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:67 msgid "Improve parental controls application UI and add icon" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:68 msgid "Support for indicating which accounts are parent accounts" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:75 msgid "Initial release of basic parental controls application" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:76 msgid "Support for setting app installation and run restrictions on users" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:83 msgid "Maintenance release of underlying parental controls library" msgstr "" #. Translators: Do NOT translate or transliterate this text (this is an icon file name)! #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:7 msgid "org.freedesktop.MalcontentControl" msgstr "" #. Translators: Search terms to find this application. Do NOT translate or localise the semicolons! The list MUST also end with a semicolon! #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:13 msgid "" "parental controls;screen time;app restrictions;web browser restrictions;oars;" "usage;usage limit;kid;child;" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.policy.in:9 msgid "Manage parental controls" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.policy.in:10 msgid "Authentication is required to read and change user parental controls" msgstr "" #: malcontent-control/user-selector.c:426 msgid "Your account" msgstr "Jou rekening" #. Always allow root, to avoid a situation where this PAM module prevents #. * all users logging in with no way of recovery. #: pam/pam_malcontent.c:142 pam/pam_malcontent.c:188 #, c-format msgid "User ‘%s’ has no time limits enabled" msgstr "" #: pam/pam_malcontent.c:151 pam/pam_malcontent.c:172 #, c-format msgid "Error getting session limits for user ‘%s’: %s" msgstr "" #: pam/pam_malcontent.c:182 #, c-format msgid "User ‘%s’ has no time remaining" msgstr "" #: pam/pam_malcontent.c:200 #, c-format msgid "Error setting time limit on login session: %s" msgstr "" #~ msgid "No cartoon violence" #~ msgstr "Geen animasie geweld nie" #~ msgid "Cartoon characters in unsafe situations" #~ msgstr "Animasiekarakters in onveilige situasies" #~ msgid "Cartoon characters in aggressive conflict" #~ msgstr "Animasiekarakters in aggressiewe konflik" #~ msgid "Graphic violence involving cartoon characters" #~ msgstr "Grafiese geweld met animasiekarakters" #~ msgid "No fantasy violence" #~ msgstr "Geen fantasie geweld nie" #~ msgid "Characters in unsafe situations easily distinguishable from reality" #~ msgstr "" #~ "Karakters in onveilige situasies wat maklik onderskei kan word van die " #~ "werklikheid" #~ msgid "" #~ "Characters in aggressive conflict easily distinguishable from reality" #~ msgstr "" #~ "Karakters in aggressiewe konflik wat maklik onderskei kan word van die " #~ "werklikheid" #~ msgid "Graphic violence easily distinguishable from reality" #~ msgstr "Grafiese geweld wat maklik onderskei kan word van die werklikheid" #~ msgid "No realistic violence" #~ msgstr "Geen realistiese geweld nie" #~ msgid "Mildly realistic characters in unsafe situations" #~ msgstr "Effens realistiese karakters in onveilige situasies" #~ msgid "Depictions of realistic characters in aggressive conflict" #~ msgstr "Uitbeeldings van realistiese karakters in aggressiewe konflik" #~ msgid "Graphic violence involving realistic characters" #~ msgstr "Grafiese geweld met realistiese karakters" #~ msgid "No bloodshed" #~ msgstr "Geen bloedvergieting nie" #~ msgid "Unrealistic bloodshed" #~ msgstr "Onrealistiese bloedvergieting" #~ msgid "Realistic bloodshed" #~ msgstr "Realistiese bloedvergieting" #~ msgid "Depictions of bloodshed and the mutilation of body parts" #~ msgstr "Uitbeeldings van bloedvergieting en die verminking van liggaamsdele" #~ msgid "No sexual violence" #~ msgstr "Geen seksuele geweld nie" #~ msgid "Rape or other violent sexual behavior" #~ msgstr "Verkragting of ander gewelddadige seksuele gedrag" #~ msgid "No references to alcohol" #~ msgstr "Geen verwysings na alkohol nie" #~ msgid "References to alcoholic beverages" #~ msgstr "Verwysings na alkoholiese drankies" #~ msgid "Use of alcoholic beverages" #~ msgstr "Gebruik van alkoholiese drank" #~ msgid "No references to illicit drugs" #~ msgstr "Geen verwysings na onwettige dwelms" #~ msgid "References to illicit drugs" #~ msgstr "Verwysings na onwettige dwelms" #~ msgid "Use of illicit drugs" #~ msgstr "Gebruik van onwettige dwelms" #~ msgid "References to tobacco products" #~ msgstr "Verwysings na tabakprodukte" #~ msgid "Use of tobacco products" #~ msgstr "Gebruik van tabaksprodukte" #~ msgid "No nudity of any sort" #~ msgstr "Geen naaktheid van enige aard nie" #~ msgid "Brief artistic nudity" #~ msgstr "Kort kuns naaktheid" #~ msgid "Prolonged nudity" #~ msgstr "Langdurige naaktheid" #~ msgid "No references or depictions of sexual nature" #~ msgstr "Geen verwysings of uitbeeldings van 'n seksuele aard nie" #~ msgid "Provocative references or depictions" #~ msgstr "Aanloklike verwysings of afbeeldings" #~ msgid "Sexual references or depictions" #~ msgstr "Seksuele verwysings of afbeeldings" #~ msgid "Graphic sexual behavior" #~ msgstr "Grafiese seksuele gedrag" #~ msgid "No profanity of any kind" #~ msgstr "Geen vloek van enige aard nie" #~ msgid "Mild or infrequent use of profanity" #~ msgstr "Sagte of ongereelde gebruik van vloek" #~ msgid "Moderate use of profanity" #~ msgstr "Matige gebruik van vloek" #~ msgid "Strong or frequent use of profanity" #~ msgstr "Sterk of gereelde gebruik van vloek" #~ msgid "No inappropriate humor" #~ msgstr "Geen onvanpaste humor nie" #~ msgid "Slapstick humor" #~ msgstr "Slapstick humor" #~ msgid "Vulgar or bathroom humor" #~ msgstr "Onvanpaste of badkamer humor" #~ msgid "Mature or sexual humor" #~ msgstr "Volwasse of seksuele humor" #~ msgid "No discriminatory language of any kind" #~ msgstr "Geen diskriminerende taal van enige aard nie" #~ msgid "Negativity towards a specific group of people" #~ msgstr "Negatiwiteit teenoor 'n spesifieke groep mense" #~ msgid "Discrimination designed to cause emotional harm" #~ msgstr "Diskriminasie bedoel om emosionele skade te veroorsaak" #~ msgid "Explicit discrimination based on gender, sexuality, race or religion" #~ msgstr "" #~ "Eksplisiete diskriminasie gebaseer op geslag, seksualiteit, ras of " #~ "godsdiens" #~ msgid "No advertising of any kind" #~ msgstr "Geen advertensies van enige aard nie" #~ msgid "Product placement" #~ msgstr "Produk plasing" #~ msgid "Explicit references to specific brands or trademarked products" #~ msgstr "Verwysings na spesifieke handelsmerke" #~ msgid "Users are encouraged to purchase specific real-world items" #~ msgstr "Gebruikers word aangemoedig om spesifieke werklike items te koop" #~ msgid "No gambling of any kind" #~ msgstr "Geen dobbel van enige aard nie" #~ msgid "Gambling on random events using tokens or credits" #~ msgstr "Dobbel op sommige geleenthede deur gebruik te maak van krediete" #~ msgid "Gambling using “play” money" #~ msgstr "Dobbel met \"speel\" geld" #~ msgid "Gambling using real money" #~ msgstr "Dobbel met regte geld" #~ msgid "No ability to spend money" #~ msgstr "Geen vermoë om geld te spandeer nie" #~ msgid "Users are encouraged to donate real money" #~ msgstr "Spelers word aangemoedig om werklike geld te skenk" #~ msgid "Ability to spend real money in-game" #~ msgstr "Vermoë om geld te spandeer in die spel" #~ msgid "No way to chat with other users" #~ msgstr "Geen manier om met ander gebruikers te klets nie" #~ msgid "Moderated chat functionality between users" #~ msgstr "Gemodereerde kletsfunksie tussen gebruikers" #~ msgid "Uncontrolled chat functionality between users" #~ msgstr "Onbeheerde kletsfunksie tussen gebruikers" #~ msgid "No way to talk with other users" #~ msgstr "Geen manier om met ander gebruikers te praat nie" #~ msgid "Uncontrolled audio or video chat functionality between users" #~ msgstr "Onbeheerde klank- of videokletsfunksies tussen gebruikers" #~ msgid "No sharing of social network usernames or email addresses" #~ msgstr "Geen deel van sosiale netwerk gebruikersname of e-pos adresse nie" #~ msgid "Sharing social network usernames or email addresses" #~ msgstr "Deel van sosiale netwerk gebruikers name of e-pos adresse" #~ msgid "No sharing of user information with 3rd parties" #~ msgstr "Geen deel van gebruikersinligting met 3de partye nie" #~ msgid "Checking for the latest application version" #~ msgstr "Kyk tans vir die nuutste weergawe van die toepassing" #~ msgid "Sharing diagnostic data that does not let others identify the user" #~ msgstr "Deel anonieme diagnostiese data" #~ msgid "Sharing information that lets others identify the user" #~ msgstr "" #~ "Deel inligting wat ander in staat sal kan stel om die gebruiker te " #~ "identifiseer" #~ msgid "No sharing of physical location to other users" #~ msgstr "Geen deel van fisiese ligging aan ander gebruikers nie" #~ msgid "Sharing physical location to other users" #~ msgstr "Deel fisiese ligging aan ander gebruikers" #~ msgid "No references to homosexuality" #~ msgstr "Geen verwysings na homoseksualiteit" #~ msgid "Indirect references to homosexuality" #~ msgstr "Indirekte verwysings na homoseksualiteit" #~ msgid "Kissing between people of the same gender" #~ msgstr "Soen tussen mense van dieselfde geslag" #~ msgid "Graphic sexual behavior between people of the same gender" #~ msgstr "Grafiese seksuele gedrag tussen mense van dieselfde geslag" #~ msgid "No references to prostitution" #~ msgstr "Geen verwysings na prostitusie nie" #~ msgid "Indirect references to prostitution" #~ msgstr "Indirekte verwysings na prostitusie" #~ msgid "Graphic depictions of the act of prostitution" #~ msgstr "Grafiese uitbeeldings van die daad van prostitusie" #~ msgid "No references to adultery" #~ msgstr "Geen verwysings na owerspel nie" #~ msgid "Indirect references to adultery" #~ msgstr "Indirekte verwysings na owerspel" #~ msgid "Graphic depictions of the act of adultery" #~ msgstr "Grafiese uitbeeldings van die daad van owerspel" #~ msgid "No sexualized characters" #~ msgstr "Geen seksuele karakters nie" #~ msgid "Scantily clad human characters" #~ msgstr "Skraps geklede menslike karakters" #~ msgid "Overtly sexualized human characters" #~ msgstr "Uitermatige seksuele menslike karakters" #~ msgid "No references to desecration" #~ msgstr "Geen verwysings na ontheiliging nie" #~ msgid "Depictions of modern-day human desecration" #~ msgstr "Uitbeeldings van moderne menslike ontheiliging" #~ msgid "Graphic depictions of modern-day desecration" #~ msgstr "Grafiese uitbeeldings van moderne ontheiliging" #~ msgid "No visible dead human remains" #~ msgstr "Geen sigbare dooie menslike oorskot" #~ msgid "Visible dead human remains" #~ msgstr "Sigbare dooie menslike oorskot" #~ msgid "Dead human remains that are exposed to the elements" #~ msgstr "Dooie menslike oorskot wat aan die elemente blootgestel is" #~ msgid "Graphic depictions of desecration of human bodies" #~ msgstr "Grafiese uitbeeldings van die ontheiliging van menslike liggame" #~ msgid "No references to slavery" #~ msgstr "Geen verwysings na slawerny nie" #~ msgid "Depictions of modern-day slavery" #~ msgstr "Uitbeeldings van modererende slawerny" #~ msgid "Graphic depictions of modern-day slavery" #~ msgstr "Grafiese uitbeeldings van modererende slawerny" malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/po/ar.po000066400000000000000000000742431505556674000231660ustar00rootroot00000000000000# Arabic translations for malcontent package. # Copyright (C) 2020 THE malcontent'S COPYRIGHT HOLDER # This file is distributed under the same license as the malcontent package. # Automatically generated, 2020. # msgid "" msgstr "" "Project-Id-Version: malcontent\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-06-10 12:08+0100\n" "PO-Revision-Date: 2020-04-17 21:58+0000\n" "Last-Translator: Will Thompson , 2020\n" "Language-Team: Arabic (https://www.transifex.com/endless-os/teams/9016/ar/)\n" "Language: ar\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 " "&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" #: accounts-service/com.endlessm.ParentalControls.policy.in:4 msgid "Change your own app filter" msgstr "قُم بتغيير عناصر تصفية تطبيقك" #: accounts-service/com.endlessm.ParentalControls.policy.in:5 msgid "Authentication is required to change your app filter." msgstr "المصادقة مطلوبة لتغيير عناصر تصفية تطبيقك." #: accounts-service/com.endlessm.ParentalControls.policy.in:14 msgid "Read your own app filter" msgstr "اقرأ عناصر تصفية تطبيقك" #: accounts-service/com.endlessm.ParentalControls.policy.in:15 msgid "Authentication is required to read your app filter." msgstr "المصادقة مطلوبة لقراءة عناصر تصفية تطبيقك." #: accounts-service/com.endlessm.ParentalControls.policy.in:24 msgid "Change another user’s app filter" msgstr "قم بتغيير مرشح تطبيق مستخدم آخر" #: accounts-service/com.endlessm.ParentalControls.policy.in:25 msgid "Authentication is required to change another user’s app filter." msgstr "المصادقة مطلوبة لتغيير عناصر تصفية التطبيق الخاص بمستخدمٍ آخر." #: accounts-service/com.endlessm.ParentalControls.policy.in:34 msgid "Read another user’s app filter" msgstr "قراءة مرشح تطبيقات مستخدم آخر" #: accounts-service/com.endlessm.ParentalControls.policy.in:35 msgid "Authentication is required to read another user’s app filter." msgstr "المصادقة مطلوبة لقراءة مرشح تطبيق مستخدم آخر." #: accounts-service/com.endlessm.ParentalControls.policy.in:44 msgid "Change your own session limits" msgstr "تغيير حدود جلستك" #: accounts-service/com.endlessm.ParentalControls.policy.in:45 msgid "Authentication is required to change your session limits." msgstr "المصادقة مطلوبة لتغيير حدود جلستك." #: accounts-service/com.endlessm.ParentalControls.policy.in:54 msgid "Read your own session limits" msgstr "قراءة حدود الجلسة الخاصة بك" #: accounts-service/com.endlessm.ParentalControls.policy.in:55 msgid "Authentication is required to read your session limits." msgstr "المصادقة مطلوبة لقراءة حدود جلستك" #: accounts-service/com.endlessm.ParentalControls.policy.in:64 msgid "Change another user’s session limits" msgstr "تغيير حدود الجلسات لمستخدمٍ آخر" #: accounts-service/com.endlessm.ParentalControls.policy.in:65 msgid "Authentication is required to change another user’s session limits." msgstr "المصادقة مطلوبة لتغيير حدود جلسة مستخدمٍ آخر." #: accounts-service/com.endlessm.ParentalControls.policy.in:74 msgid "Read another user’s session limits" msgstr "اقرأ حدود جلسات مستخدمٍ آخر" #: accounts-service/com.endlessm.ParentalControls.policy.in:75 msgid "Authentication is required to read another user’s session limits." msgstr "المصادقة مطلوبة لقراءة حدود جلسات مستخدم آخر." #: accounts-service/com.endlessm.ParentalControls.policy.in:84 msgid "Change your own account info" msgstr "قُم بتغيير معلومات حسابك" #: accounts-service/com.endlessm.ParentalControls.policy.in:85 msgid "Authentication is required to change your account info." msgstr "المصادقة مطلوبة لتغيير معلومات حسابك." #: accounts-service/com.endlessm.ParentalControls.policy.in:94 msgid "Read your own account info" msgstr "قراءة معلومات الحساب الخاص بك" #: accounts-service/com.endlessm.ParentalControls.policy.in:95 msgid "Authentication is required to read your account info." msgstr "المصادقة مطلوبة لقراءة معلومات حسابك." #: accounts-service/com.endlessm.ParentalControls.policy.in:104 msgid "Change another user’s account info" msgstr "تغيير معلومات حساب مستخدمٍ آخر" #: accounts-service/com.endlessm.ParentalControls.policy.in:105 msgid "Authentication is required to change another user’s account info." msgstr "المصادقة مطلوبة لتغيير معلومات حساب مستخدم آخر." #: accounts-service/com.endlessm.ParentalControls.policy.in:114 msgid "Read another user’s account info" msgstr "قراءة معلومات حساب مستخدم آخر" #: accounts-service/com.endlessm.ParentalControls.policy.in:115 msgid "Authentication is required to read another user’s account info." msgstr "المصادقة مطلوبة لقراءة معلومات حساب مستخدمٍ آخر." #: libmalcontent/app-filter.c:694 #, c-format msgid "App filter for user %u was in an unrecognized format" msgstr "عناصر تصفية التطبيق للمستخدم %u كانت بتنسيق غير معروف" #: libmalcontent/app-filter.c:725 #, c-format msgid "OARS filter for user %u has an unrecognized kind ‘%s’" msgstr "يحتوي مرشح OARS للمستخدم %u على ‘%s’ مجهول" #: libmalcontent/manager.c:283 libmalcontent/manager.c:412 #, c-format msgid "Not allowed to query app filter data for user %u" msgstr "غير مسموح بالاستعلام عن بيانات فلتر التطبيق للمستخدم %u " #: libmalcontent/manager.c:288 #, c-format msgid "User %u does not exist" msgstr "المستخدم %u غير موجود" #: libmalcontent/manager.c:394 msgid "App filtering is globally disabled" msgstr "تم تعطيل ترشيح التطبيقات بشكل شامل" #: libmalcontent/manager.c:777 msgid "Session limits are globally disabled" msgstr "حدود الجلسات معطلة بصورة شاملة" #: libmalcontent/manager.c:795 #, c-format msgid "Not allowed to query session limits data for user %u" msgstr "غير مسموح بالاستعلام عن بيانات حدود الجلسة للمستخدم %u" #: libmalcontent/session-limits.c:306 #, c-format msgid "Session limit for user %u was in an unrecognized format" msgstr "كان حد الجلسة للمستخدم %u بتنسيق غير معروف" #: libmalcontent/session-limits.c:328 #, c-format msgid "Session limit for user %u has an unrecognized type ‘%u’" msgstr "لدى حد جلسة المستخدم %u نوعاً مجهولاً '%u'" #: libmalcontent/session-limits.c:346 #, c-format msgid "Session limit for user %u has invalid daily schedule %u–%u" msgstr "حدود الجلسة للمستخدم %u لها جدول زمني يومي غير صالح %u–%u " #. TRANSLATORS: This is the formatting of English and localized name #. of the rating e.g. "Adults Only (solo adultos)" #: libmalcontent-ui/gs-content-rating.c:75 #, c-format msgid "%s (%s)" msgstr "" #: libmalcontent-ui/gs-content-rating.c:209 msgid "General" msgstr "" #: libmalcontent-ui/gs-content-rating.c:218 msgid "ALL" msgstr "" #: libmalcontent-ui/gs-content-rating.c:222 #: libmalcontent-ui/gs-content-rating.c:485 msgid "Adults Only" msgstr "" #: libmalcontent-ui/gs-content-rating.c:224 #: libmalcontent-ui/gs-content-rating.c:484 msgid "Mature" msgstr "" #: libmalcontent-ui/gs-content-rating.c:226 #: libmalcontent-ui/gs-content-rating.c:483 msgid "Teen" msgstr "" #: libmalcontent-ui/gs-content-rating.c:228 #: libmalcontent-ui/gs-content-rating.c:482 msgid "Everyone 10+" msgstr "" #: libmalcontent-ui/gs-content-rating.c:230 #: libmalcontent-ui/gs-content-rating.c:481 msgid "Everyone" msgstr "" #: libmalcontent-ui/gs-content-rating.c:232 #: libmalcontent-ui/gs-content-rating.c:480 msgid "Early Childhood" msgstr "" #. Translators: the placeholder is a user’s full name #: libmalcontent-ui/restrict-applications-dialog.c:222 #, c-format msgid "Restrict %s from using the following installed applications." msgstr "تقييد %s من استخدام التطبيقات المثبتة التالية." #: libmalcontent-ui/restrict-applications-dialog.ui:6 #: libmalcontent-ui/restrict-applications-dialog.ui:12 msgid "Restrict Applications" msgstr "تقييد التطبيقات" #: libmalcontent-ui/restrict-applications-selector.ui:24 msgid "No applications found to restrict." msgstr "لم يتم العثور على تطبيقات لتقييدها." #. Translators: this is the full name for an unknown user account. #: libmalcontent-ui/user-controls.c:242 libmalcontent-ui/user-controls.c:253 msgid "unknown" msgstr "غير معروف" #: libmalcontent-ui/user-controls.c:338 libmalcontent-ui/user-controls.c:425 #: libmalcontent-ui/user-controls.c:711 msgid "All Ages" msgstr "جميع الأعمار" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:514 #, c-format msgid "" "Prevents %s from running web browsers. Limited web content may still be " "available in other applications." msgstr "" "يمنع %s من تشغيل متصفحات الإنترنت. قد يظل محتوى الإنترنت المحدود متاحاً في " "تطبيقات أخرى." #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:519 #, c-format msgid "Prevents specified applications from being used by %s." msgstr "يمنع استخدام تطبيقات محددة من قبل %s." #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:524 #, c-format msgid "Prevents %s from installing applications." msgstr "يمنع %s تثبيت التطبيقات." #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:529 #, c-format msgid "Applications installed by %s will not appear for other users." msgstr "لن تظهر التطبيقات المثبتة بواسطة %s للمستخدمين الآخرين." #: libmalcontent-ui/user-controls.ui:17 msgid "Application Usage Restrictions" msgstr "قيود استخدام التطبيق" #: libmalcontent-ui/user-controls.ui:68 msgid "Restrict _Web Browsers" msgstr "تقييد متصفحات الإنترنت" #: libmalcontent-ui/user-controls.ui:152 msgid "_Restrict Applications" msgstr "تقييد التطبيقات" #: libmalcontent-ui/user-controls.ui:231 msgid "Software Installation Restrictions" msgstr "قيود تثبيت البرنامج" #: libmalcontent-ui/user-controls.ui:281 msgid "Restrict Application _Installation" msgstr "تقييد تثبيت التطبيق" #: libmalcontent-ui/user-controls.ui:366 msgid "Restrict Application Installation for _Others" msgstr "تقييد تثبيت التطبيق على الآخرين" #: libmalcontent-ui/user-controls.ui:451 msgid "Application _Suitability" msgstr "ملاءمة التطبيق" #: libmalcontent-ui/user-controls.ui:473 msgid "" "Restricts browsing or installation of applications to applications suitable " "for certain ages or above." msgstr "" "يقتصر تصفح أو تثبيت التطبيقات على تطبيقات مناسبة لفئة عمرية معينة أو أكبر." #. Translators: This is the title of the main window #. Translators: the name of the application as it appears in a software center #: malcontent-control/application.c:105 malcontent-control/main.ui:12 #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:9 #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:3 msgid "Parental Controls" msgstr "أدوات الإشراف العائلي" #: malcontent-control/application.c:270 msgid "Copyright © 2019, 2020 Endless Mobile, Inc." msgstr "حقوق النشر © 2019، 2020 Endless Mobile، Inc." #. Translators: this should be "translated" to the #. names of people who have translated Malcontent into #. this language, one per line. #: malcontent-control/application.c:275 msgid "translator-credits" msgstr "" #. Translators: "Malcontent" is the brand name of this #. project, so should not be translated. #: malcontent-control/application.c:281 msgid "Malcontent Website" msgstr "موقع Malcontent" #: malcontent-control/application.c:299 msgid "The help contents could not be displayed" msgstr "لا يمكن عرض محتويات المساعدة" #: malcontent-control/application.c:336 msgid "Failed to load user data from the system" msgstr "فشل تحميل بيانات المستخدم من النظام" #: malcontent-control/application.c:338 msgid "Please make sure that the AccountsService is installed and enabled." msgstr "يُرجى التأكد من تثبيت خدمة الحسابات وتمكينها." #: malcontent-control/carousel.ui:48 msgid "Previous Page" msgstr "الصفحة السابقة" #: malcontent-control/carousel.ui:74 msgid "Next Page" msgstr "الصفحة التالية" #: malcontent-control/main.ui:93 msgid "Permission Required" msgstr "الإذن مطلوب" #: malcontent-control/main.ui:107 msgid "" "Permission is required to view and change user parental controls settings." msgstr "الإذن مطلوب لعرض وتغيير إعدادات الإشراف العائلي لحساب المستخدم." #: malcontent-control/main.ui:148 msgid "No Child Users Configured" msgstr "لم يتم تهيئة مستخدمين فرعيين" #: malcontent-control/main.ui:162 msgid "" "No child users are currently set up on the system. Create one before setting " "up their parental controls." msgstr "" "لا توجد حالياً حسابات لمستخدمين أطفال على النظام. قُم بإنشاء حساب واحد قبل " "تهيئة أدوات الإشراف العائلي الخاصة بها." #: malcontent-control/main.ui:174 msgid "Create _Child User" msgstr "إنشاء حساب لطفل" #: malcontent-control/main.ui:202 msgid "Loading…" msgstr "جارٍ التحميل..." #: malcontent-control/main.ui:265 msgid "_Help" msgstr "م_ساعدة" #: malcontent-control/main.ui:269 msgid "_About Parental Controls" msgstr "نبذة عن الإشراف العائلي" #. Translators: the brief summary of the application as it appears in a software center. #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:12 #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:4 msgid "Set parental controls and monitor usage by users" msgstr "قُم بضبط الإشراف العائلي ومراقبة الاستخدام بواسطة المستخدمين" #. Translators: These are the application description paragraphs in the AppData file. #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:16 msgid "" "Manage users’ parental controls restrictions, controlling how long they can " "use the computer for, what software they can install, and what installed " "software they can run." msgstr "" "إدارة قيود الإشراف العائلي للمستخدمين، والتحكم في المدة التي يمكنهم خلالها " "استخدام الكمبيوتر، والبرنامج الذي يمكنهم تثبيته، والبرنامج المثبت الذي " "يمكنهم تشغيله" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:39 msgid "The GNOME Project" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:50 #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:59 msgid "Minor improvements to parental controls application UI" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:51 msgid "Add a user manual" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:52 msgid "Translation updates" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:60 msgid "Translations to Ukrainian and Polish" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:67 msgid "Improve parental controls application UI and add icon" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:68 msgid "Support for indicating which accounts are parent accounts" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:75 msgid "Initial release of basic parental controls application" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:76 msgid "Support for setting app installation and run restrictions on users" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:83 msgid "Maintenance release of underlying parental controls library" msgstr "" #. Translators: Do NOT translate or transliterate this text (this is an icon file name)! #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:7 msgid "org.freedesktop.MalcontentControl" msgstr "" #. Translators: Search terms to find this application. Do NOT translate or localise the semicolons! The list MUST also end with a semicolon! #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:13 msgid "" "parental controls;screen time;app restrictions;web browser restrictions;oars;" "usage;usage limit;kid;child;" msgstr "" "إعدادات التحكم الأبوي؛ الوقت الذي يقضى بمشاهدة الشاشة؛ القيود الخاصة " "بالتطبيقات؛ القيود الخاصة بمتصفحات الإنترنت؛ فتح خدمة تقارير مؤتمتة؛ " "الاستخدام؛ حدود الاستخدام؛ الطفل؛ الطفل؛ " #: malcontent-control/org.freedesktop.MalcontentControl.policy.in:9 msgid "Manage parental controls" msgstr "إدارة الإشراف العائلي" #: malcontent-control/org.freedesktop.MalcontentControl.policy.in:10 msgid "Authentication is required to read and change user parental controls" msgstr "المصادقة مطلوبة لقراءة وتغيير إعدادات التحكم الأبوية الخاصة بالمستخدم" #: malcontent-control/user-selector.c:426 msgid "Your account" msgstr "حسابك" #. Always allow root, to avoid a situation where this PAM module prevents #. * all users logging in with no way of recovery. #: pam/pam_malcontent.c:142 pam/pam_malcontent.c:188 #, c-format msgid "User ‘%s’ has no time limits enabled" msgstr "لم يتم تمكين حدود زمنية للمستخدم ‘%s’" #: pam/pam_malcontent.c:151 pam/pam_malcontent.c:172 #, c-format msgid "Error getting session limits for user ‘%s’: %s" msgstr "حدث خطأ أثناء الحصول على حدود الجلسة للمستخدم ‘%s’: %s" #: pam/pam_malcontent.c:182 #, c-format msgid "User ‘%s’ has no time remaining" msgstr "ليس لدى المستخدم \"%s\" وقتاً متبقياً" #: pam/pam_malcontent.c:200 #, c-format msgid "Error setting time limit on login session: %s" msgstr "خطأ في تعيين حد الوقت لجلسة تسجيل الدخول: %s" #~ msgid "No cartoon violence" #~ msgstr "لا عنف كرتوني" #~ msgid "Cartoon characters in unsafe situations" #~ msgstr "شخصيات كرتونية في مواقف خطرة" #~ msgid "Cartoon characters in aggressive conflict" #~ msgstr "شخصيات كرتونية تتصراع بعدوانية" #~ msgid "Graphic violence involving cartoon characters" #~ msgstr "عنف رسومي لشخصيات كرتونية" #~ msgid "No fantasy violence" #~ msgstr "لا عنف خيالي" #~ msgid "Characters in unsafe situations easily distinguishable from reality" #~ msgstr "الشخصيات الكرتونية في مواقف خطرة يمكن تمييزها عن الواقع بسهولة" #~ msgid "" #~ "Characters in aggressive conflict easily distinguishable from reality" #~ msgstr "" #~ "الشخصيات الكرتونية وهي تتصارع بعدوانية يمكن تمييزها عن الواقع بسهولة" #~ msgid "Graphic violence easily distinguishable from reality" #~ msgstr "العنف الرسومي سهل تفرقته عن الواقع" #~ msgid "No realistic violence" #~ msgstr "لا عنف واقعي" #~ msgid "Mildly realistic characters in unsafe situations" #~ msgstr "شخصيات واقعية معتدلة في حالات غير آمنة" #~ msgid "Depictions of realistic characters in aggressive conflict" #~ msgstr "تصوير شخصيات واقعية تتصراع بعدوانية" #~ msgid "Graphic violence involving realistic characters" #~ msgstr "عنف رسومي لشخصيات واقعية" #~ msgid "No bloodshed" #~ msgstr "لا إراقة دماء" #~ msgid "Unrealistic bloodshed" #~ msgstr "إراقة الدماء غير حقيقة" #~ msgid "Realistic bloodshed" #~ msgstr "إراقة الدماء حقيقة" #~ msgid "Depictions of bloodshed and the mutilation of body parts" #~ msgstr "تصوير لسفك الدماء والتمثيل بأجزاء الجسد" #~ msgid "No sexual violence" #~ msgstr "لا عنف جنسي" #~ msgid "Rape or other violent sexual behavior" #~ msgstr "اغتصاب أو سلوك جنسي عنيف" #~ msgid "No references to alcohol" #~ msgstr "لا إشارات لمشروبات كحولية" #~ msgid "References to alcoholic beverages" #~ msgstr "إشارات لمشروبات كحولية" #~ msgid "Use of alcoholic beverages" #~ msgstr "استخدام مشروبات كحولية" #~ msgid "No references to illicit drugs" #~ msgstr "لا إشارات لمخدرات غير مشروعة" #~ msgid "References to illicit drugs" #~ msgstr "إشارات لمخدرات غير مشروعة" #~ msgid "Use of illicit drugs" #~ msgstr "استخدام مخدرات غير مشروعة" #~ msgid "References to tobacco products" #~ msgstr "إشارات منتجات التبغ" #~ msgid "Use of tobacco products" #~ msgstr "استخدام منتجات التبغ" #~ msgid "No nudity of any sort" #~ msgstr "لا عري من أي نوع" #~ msgid "Brief artistic nudity" #~ msgstr "عري فني بسيط" #~ msgid "Prolonged nudity" #~ msgstr "العري لفترة طويلة" #~ msgid "No references or depictions of sexual nature" #~ msgstr "لا إشارات أو تصوير للجنس" #~ msgid "Provocative references or depictions" #~ msgstr "تلميحات استفزازية" #~ msgid "Sexual references or depictions" #~ msgstr "إشارات أو تصوير للجنس" #~ msgid "Graphic sexual behavior" #~ msgstr "سلوك جنسي رسومي" #~ msgid "No profanity of any kind" #~ msgstr "لا ألفاظ نابية من أي نوع" #~ msgid "Mild or infrequent use of profanity" #~ msgstr "استخدام معتدل أو نادر للألفاظ النابية" #~ msgid "Moderate use of profanity" #~ msgstr "استعمال معتدل للألفاظ النابية" #~ msgid "Strong or frequent use of profanity" #~ msgstr "استعمال قوي أو متكرر للألفاظ النابية" #~ msgid "No inappropriate humor" #~ msgstr "لا فكاهة مبتذلة" #~ msgid "Slapstick humor" #~ msgstr "فكاهة تهريجية" #~ msgid "Vulgar or bathroom humor" #~ msgstr "فكاهة مبتذلة" #~ msgid "Mature or sexual humor" #~ msgstr "نكت جنسية/للكبار" #~ msgid "No discriminatory language of any kind" #~ msgstr "لا لغة متحيزة من أي نوع" #~ msgid "Negativity towards a specific group of people" #~ msgstr "السلبية تجاه مجموعة من الأشخاص" #~ msgid "Discrimination designed to cause emotional harm" #~ msgstr "تمييز مفتعل للتسبب بضرر عاطفي" #~ msgid "Explicit discrimination based on gender, sexuality, race or religion" #~ msgstr "تمييز صريح بناء على الجنس، أو السلاسة البشرية أو العقيدة" #~ msgid "No advertising of any kind" #~ msgstr "لا إعلانات من أي نوع" #~ msgid "Product placement" #~ msgstr "إشهار منتجات" #~ msgid "Explicit references to specific brands or trademarked products" #~ msgstr "إشارات صريحة لعلامات تجارية ومنتجات معينة" #~ msgid "Users are encouraged to purchase specific real-world items" #~ msgstr "يُشجّع المستخدمين على شراء عناصر معينة في العالم الحقيقي" #~ msgid "No gambling of any kind" #~ msgstr "لا مقامرة من أي نوع" #~ msgid "Gambling on random events using tokens or credits" #~ msgstr "مقامرة على أحداث عشوائية باستخدام عمل رمزية أو ائتمانات" #~ msgid "Gambling using “play” money" #~ msgstr "مقامرة باستخدام مال ”ألعاب“" #~ msgid "Gambling using real money" #~ msgstr "مقامرة باستخدام مال حقيقي" #~ msgid "No ability to spend money" #~ msgstr "لا إمكانية إنفاق أموال" #~ msgid "Users are encouraged to donate real money" #~ msgstr "يُشجّع المستخدمين على التبرع بنقود حقيقية" #~ msgid "Ability to spend real money in-game" #~ msgstr "إمكانية إنفاق أموال حقيقية داخل اللعبة" #~ msgid "No way to chat with other users" #~ msgstr "لا إمكانية للدردشة مع مستخدمين آخرين" #~ msgid "User-to-user game interactions without chat functionality" #~ msgstr "تفاعل المستخدمين مع بعض في اللعبة بدون ميزة دردشة" #~ msgid "Moderated chat functionality between users" #~ msgstr "ميزة مدارة دردشة بين المستخدمين" #~ msgid "Uncontrolled chat functionality between users" #~ msgstr "ميزة دردشة بين المستخدمين بلا إدارة" #~ msgid "No way to talk with other users" #~ msgstr "لا إمكانية للحديث مع مستخدمين آخرين" #~ msgid "Uncontrolled audio or video chat functionality between users" #~ msgstr "ميزة دردشة مرئية أو صوتية بين المستخدمين بلا إدارة" #~ msgid "No sharing of social network usernames or email addresses" #~ msgstr "لا مشاركة لأسماء حسابات شبكات التواصل أو عناوين البريد" #~ msgid "Sharing social network usernames or email addresses" #~ msgstr "مشاركة أسماء حسابات شبكات التواصل أو عناوين البريد" #~ msgid "No sharing of user information with 3rd parties" #~ msgstr "لا مشاركة لمعلومات المستخدم مع أطراف ثالثة" #~ msgid "Checking for the latest application version" #~ msgstr "يتم التحقق من أحدث إصدار للتطبيق" #~ msgid "Sharing diagnostic data that does not let others identify the user" #~ msgstr "مشاركة بيانات التشخيص التي لا تسمح للآخرين بتحديد المستخدم" #~ msgid "Sharing information that lets others identify the user" #~ msgstr "مشاركة المعلومات التي تتيح للآخرين تحديد هوية المستخدم" #~ msgid "No sharing of physical location to other users" #~ msgstr "غير مصرح بمشاركة الموقع الفعلي مع المستخدمين الآخرين" #~ msgid "Sharing physical location to other users" #~ msgstr "مشاركة الموقع الفيزيائي مع بقية المستخدمين" #~ msgid "No references to homosexuality" #~ msgstr "لا توجد إشارات إلى المثلية الجنسية" #~ msgid "Indirect references to homosexuality" #~ msgstr "إشارات غير مباشرة إلى المثلية الجنسية" #~ msgid "Kissing between people of the same gender" #~ msgstr "تقبيل بين الناس من نفس الجنس" #~ msgid "Graphic sexual behavior between people of the same gender" #~ msgstr "السلوك الجنسي الجرافيكي بين الناس من نفس الجنس" #~ msgid "No references to prostitution" #~ msgstr "لا إشارات إلى البغاء" #~ msgid "Indirect references to prostitution" #~ msgstr "إشارات غير مباشرة إلى البغاء" #~ msgid "Direct references to prostitution" #~ msgstr "إشارات مباشرة للبغاء" #~ msgid "Graphic depictions of the act of prostitution" #~ msgstr "تصوير جرافيك لممارسة البغاء" #~ msgid "No references to adultery" #~ msgstr "لا إشارات إلى الزنا" #~ msgid "Indirect references to adultery" #~ msgstr "إشارات غير مباشرة إلى الزنا" #~ msgid "Direct references to adultery" #~ msgstr "إشارات مباشرة إلى الزنا" #~ msgid "Graphic depictions of the act of adultery" #~ msgstr "تصوير جرافيك لفعل الزنا" #~ msgid "No sexualized characters" #~ msgstr "بدون شخصيات جنسية" #~ msgid "Scantily clad human characters" #~ msgstr "يكتنفه الشخصيات البشرية" #~ msgid "Overtly sexualized human characters" #~ msgstr "شخصيات بشرية جنسية بشكل علني" #~ msgid "No references to desecration" #~ msgstr "لا إشارات إلى التدنيس" #~ msgid "Depictions or references to historical desecration" #~ msgstr "تصوير أو إشارات تدنيس تاريخية" #~ msgid "Depictions of modern-day human desecration" #~ msgstr "تصوير تدنيس الإنسان الحديث" #~ msgid "Graphic depictions of modern-day desecration" #~ msgstr "صور جرافيك لتدنيس العصر الحديث" #~ msgid "No visible dead human remains" #~ msgstr "لا توجد رفات بشرية ميتة" #~ msgid "Visible dead human remains" #~ msgstr "بقايا بشرية ميتة ظاهرة" #~ msgid "Dead human remains that are exposed to the elements" #~ msgstr "بقايا بشرية ميتة تتعرض للعناصر" #~ msgid "Graphic depictions of desecration of human bodies" #~ msgstr "الرسوم البيانية لتدنيس الأجسام البشرية" #~ msgid "No references to slavery" #~ msgstr "لا إشارات إلى العبودية" #~ msgid "Depictions or references to historical slavery" #~ msgstr "تصوير أو إشارات إلى العبودية التاريخية" #~ msgid "Depictions of modern-day slavery" #~ msgstr "تصوير الرق المعاصر" #~ msgid "Graphic depictions of modern-day slavery" #~ msgstr "تصوير جرافيكي للعبودية الحديثة" malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/po/bg.po000066400000000000000000000525341505556674000231530ustar00rootroot00000000000000# Bulgarian translations for malcontent package. # Copyright (C) 2020 THE malcontent'S COPYRIGHT HOLDER # This file is distributed under the same license as the malcontent package. # Automatically generated, 2020. # msgid "" msgstr "" "Project-Id-Version: malcontent\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-06-10 12:04+0100\n" "PO-Revision-Date: 2020-04-15 13:42+0100\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: bg\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: accounts-service/com.endlessm.ParentalControls.policy.in:4 msgid "Change your own app filter" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:5 msgid "Authentication is required to change your app filter." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:14 msgid "Read your own app filter" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:15 msgid "Authentication is required to read your app filter." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:24 msgid "Change another user’s app filter" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:25 msgid "Authentication is required to change another user’s app filter." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:34 msgid "Read another user’s app filter" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:35 msgid "Authentication is required to read another user’s app filter." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:44 msgid "Change your own session limits" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:45 msgid "Authentication is required to change your session limits." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:54 msgid "Read your own session limits" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:55 msgid "Authentication is required to read your session limits." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:64 msgid "Change another user’s session limits" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:65 msgid "Authentication is required to change another user’s session limits." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:74 msgid "Read another user’s session limits" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:75 msgid "Authentication is required to read another user’s session limits." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:84 msgid "Change your own account info" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:85 msgid "Authentication is required to change your account info." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:94 msgid "Read your own account info" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:95 msgid "Authentication is required to read your account info." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:104 msgid "Change another user’s account info" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:105 msgid "Authentication is required to change another user’s account info." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:114 msgid "Read another user’s account info" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:115 msgid "Authentication is required to read another user’s account info." msgstr "" #: libmalcontent/app-filter.c:694 #, c-format msgid "App filter for user %u was in an unrecognized format" msgstr "" #: libmalcontent/app-filter.c:725 #, c-format msgid "OARS filter for user %u has an unrecognized kind ‘%s’" msgstr "" #: libmalcontent/manager.c:283 libmalcontent/manager.c:412 #, c-format msgid "Not allowed to query app filter data for user %u" msgstr "" #: libmalcontent/manager.c:288 #, c-format msgid "User %u does not exist" msgstr "" #: libmalcontent/manager.c:394 msgid "App filtering is globally disabled" msgstr "" #: libmalcontent/manager.c:777 msgid "Session limits are globally disabled" msgstr "" #: libmalcontent/manager.c:795 #, c-format msgid "Not allowed to query session limits data for user %u" msgstr "" #: libmalcontent/session-limits.c:306 #, c-format msgid "Session limit for user %u was in an unrecognized format" msgstr "" #: libmalcontent/session-limits.c:328 #, c-format msgid "Session limit for user %u has an unrecognized type ‘%u’" msgstr "" #: libmalcontent/session-limits.c:346 #, c-format msgid "Session limit for user %u has invalid daily schedule %u–%u" msgstr "" #. TRANSLATORS: This is the formatting of English and localized name #. of the rating e.g. "Adults Only (solo adultos)" #: libmalcontent-ui/gs-content-rating.c:75 #, c-format msgid "%s (%s)" msgstr "" #: libmalcontent-ui/gs-content-rating.c:209 msgid "General" msgstr "" #: libmalcontent-ui/gs-content-rating.c:218 msgid "ALL" msgstr "" #: libmalcontent-ui/gs-content-rating.c:222 #: libmalcontent-ui/gs-content-rating.c:485 msgid "Adults Only" msgstr "" #: libmalcontent-ui/gs-content-rating.c:224 #: libmalcontent-ui/gs-content-rating.c:484 msgid "Mature" msgstr "" #: libmalcontent-ui/gs-content-rating.c:226 #: libmalcontent-ui/gs-content-rating.c:483 msgid "Teen" msgstr "" #: libmalcontent-ui/gs-content-rating.c:228 #: libmalcontent-ui/gs-content-rating.c:482 msgid "Everyone 10+" msgstr "" #: libmalcontent-ui/gs-content-rating.c:230 #: libmalcontent-ui/gs-content-rating.c:481 msgid "Everyone" msgstr "" #: libmalcontent-ui/gs-content-rating.c:232 #: libmalcontent-ui/gs-content-rating.c:480 msgid "Early Childhood" msgstr "" #. Translators: the placeholder is a user’s full name #: libmalcontent-ui/restrict-applications-dialog.c:222 #, c-format msgid "Restrict %s from using the following installed applications." msgstr "" #: libmalcontent-ui/restrict-applications-dialog.ui:6 #: libmalcontent-ui/restrict-applications-dialog.ui:12 msgid "Restrict Applications" msgstr "" #: libmalcontent-ui/restrict-applications-selector.ui:24 msgid "No applications found to restrict." msgstr "" #. Translators: this is the full name for an unknown user account. #: libmalcontent-ui/user-controls.c:242 libmalcontent-ui/user-controls.c:253 msgid "unknown" msgstr "" #: libmalcontent-ui/user-controls.c:338 libmalcontent-ui/user-controls.c:425 #: libmalcontent-ui/user-controls.c:711 msgid "All Ages" msgstr "" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:514 #, c-format msgid "" "Prevents %s from running web browsers. Limited web content may still be " "available in other applications." msgstr "" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:519 #, c-format msgid "Prevents specified applications from being used by %s." msgstr "" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:524 #, c-format msgid "Prevents %s from installing applications." msgstr "" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:529 #, c-format msgid "Applications installed by %s will not appear for other users." msgstr "" #: libmalcontent-ui/user-controls.ui:17 msgid "Application Usage Restrictions" msgstr "" #: libmalcontent-ui/user-controls.ui:68 msgid "Restrict _Web Browsers" msgstr "" #: libmalcontent-ui/user-controls.ui:152 msgid "_Restrict Applications" msgstr "" #: libmalcontent-ui/user-controls.ui:231 msgid "Software Installation Restrictions" msgstr "" #: libmalcontent-ui/user-controls.ui:281 msgid "Restrict Application _Installation" msgstr "" #: libmalcontent-ui/user-controls.ui:366 msgid "Restrict Application Installation for _Others" msgstr "" #: libmalcontent-ui/user-controls.ui:451 msgid "Application _Suitability" msgstr "" #: libmalcontent-ui/user-controls.ui:473 msgid "" "Restricts browsing or installation of applications to applications suitable " "for certain ages or above." msgstr "" #. Translators: This is the title of the main window #. Translators: the name of the application as it appears in a software center #: malcontent-control/application.c:105 malcontent-control/main.ui:12 #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:9 #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:3 msgid "Parental Controls" msgstr "" #: malcontent-control/application.c:270 msgid "Copyright © 2019, 2020 Endless Mobile, Inc." msgstr "" #. Translators: this should be "translated" to the #. names of people who have translated Malcontent into #. this language, one per line. #: malcontent-control/application.c:275 msgid "translator-credits" msgstr "" #. Translators: "Malcontent" is the brand name of this #. project, so should not be translated. #: malcontent-control/application.c:281 msgid "Malcontent Website" msgstr "" #: malcontent-control/application.c:299 msgid "The help contents could not be displayed" msgstr "" #: malcontent-control/application.c:336 msgid "Failed to load user data from the system" msgstr "" #: malcontent-control/application.c:338 msgid "Please make sure that the AccountsService is installed and enabled." msgstr "" #: malcontent-control/carousel.ui:48 msgid "Previous Page" msgstr "" #: malcontent-control/carousel.ui:74 msgid "Next Page" msgstr "" #: malcontent-control/main.ui:93 msgid "Permission Required" msgstr "" #: malcontent-control/main.ui:107 msgid "" "Permission is required to view and change user parental controls settings." msgstr "" #: malcontent-control/main.ui:148 msgid "No Child Users Configured" msgstr "" #: malcontent-control/main.ui:162 msgid "" "No child users are currently set up on the system. Create one before setting " "up their parental controls." msgstr "" #: malcontent-control/main.ui:174 msgid "Create _Child User" msgstr "" #: malcontent-control/main.ui:202 msgid "Loading…" msgstr "" #: malcontent-control/main.ui:265 msgid "_Help" msgstr "Помо_щ" #: malcontent-control/main.ui:269 msgid "_About Parental Controls" msgstr "" #. Translators: the brief summary of the application as it appears in a software center. #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:12 #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:4 msgid "Set parental controls and monitor usage by users" msgstr "" #. Translators: These are the application description paragraphs in the AppData file. #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:16 msgid "" "Manage users’ parental controls restrictions, controlling how long they can " "use the computer for, what software they can install, and what installed " "software they can run." msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:39 msgid "The GNOME Project" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:50 #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:59 msgid "Minor improvements to parental controls application UI" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:51 msgid "Add a user manual" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:52 msgid "Translation updates" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:60 msgid "Translations to Ukrainian and Polish" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:67 msgid "Improve parental controls application UI and add icon" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:68 msgid "Support for indicating which accounts are parent accounts" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:75 msgid "Initial release of basic parental controls application" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:76 msgid "Support for setting app installation and run restrictions on users" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:83 msgid "Maintenance release of underlying parental controls library" msgstr "" #. Translators: Do NOT translate or transliterate this text (this is an icon file name)! #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:7 msgid "org.freedesktop.MalcontentControl" msgstr "" #. Translators: Search terms to find this application. Do NOT translate or localise the semicolons! The list MUST also end with a semicolon! #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:13 msgid "" "parental controls;screen time;app restrictions;web browser restrictions;oars;" "usage;usage limit;kid;child;" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.policy.in:9 msgid "Manage parental controls" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.policy.in:10 msgid "Authentication is required to read and change user parental controls" msgstr "" #: malcontent-control/user-selector.c:426 msgid "Your account" msgstr "Моята регистрация" #. Always allow root, to avoid a situation where this PAM module prevents #. * all users logging in with no way of recovery. #: pam/pam_malcontent.c:142 pam/pam_malcontent.c:188 #, c-format msgid "User ‘%s’ has no time limits enabled" msgstr "" #: pam/pam_malcontent.c:151 pam/pam_malcontent.c:172 #, c-format msgid "Error getting session limits for user ‘%s’: %s" msgstr "" #: pam/pam_malcontent.c:182 #, c-format msgid "User ‘%s’ has no time remaining" msgstr "" #: pam/pam_malcontent.c:200 #, c-format msgid "Error setting time limit on login session: %s" msgstr "" #~ msgid "No cartoon violence" #~ msgstr "Без анимирано насилие" #~ msgid "Cartoon characters in unsafe situations" #~ msgstr "Анимационни персонажи в опасни ситуации" #~ msgid "Cartoon characters in aggressive conflict" #~ msgstr "Анимационни персонажи в насилствен конфликт" #~ msgid "Graphic violence involving cartoon characters" #~ msgstr "Визуално представено насилие, включващо анимационни персонажи" #~ msgid "No fantasy violence" #~ msgstr "Без фантастично насилие" #~ msgid "Characters in unsafe situations easily distinguishable from reality" #~ msgstr "Персонажи в опасни ситуации, които са лесно различими от реалността" #~ msgid "" #~ "Characters in aggressive conflict easily distinguishable from reality" #~ msgstr "" #~ "Персонажи в насилствен конфликт, които са лесно различими от реалността" #~ msgid "Graphic violence easily distinguishable from reality" #~ msgstr "Визуално представено насилие, лесно различимо от реалността" #~ msgid "No realistic violence" #~ msgstr "Без реалистично насилие" #~ msgid "Mildly realistic characters in unsafe situations" #~ msgstr "Донякъде реалистични персонажи в опасни ситуации" #~ msgid "Depictions of realistic characters in aggressive conflict" #~ msgstr "Реалистични персонажи в насилствен конфликт" #~ msgid "Graphic violence involving realistic characters" #~ msgstr "Визуално представено насилие, включващо реалистични персонажи" #~ msgid "No bloodshed" #~ msgstr "Без проливане на кръв" #~ msgid "Unrealistic bloodshed" #~ msgstr "Нереалистично проливане на кръв" #~ msgid "Realistic bloodshed" #~ msgstr "Реалистично проливане на кръв" #~ msgid "Depictions of bloodshed and the mutilation of body parts" #~ msgstr "Проливане на кръв и разчленяване" #~ msgid "No sexual violence" #~ msgstr "Без сексуално насилие" #~ msgid "Rape or other violent sexual behavior" #~ msgstr "Изнасилвания или друг вид насилствено сексуално поведение" #~ msgid "No references to alcohol" #~ msgstr "Без споменаване на алкохол" #~ msgid "References to alcoholic beverages" #~ msgstr "Споменаване на алкохолни напитки" #~ msgid "Use of alcoholic beverages" #~ msgstr "Използване на алкохолни напитки" #~ msgid "No references to illicit drugs" #~ msgstr "Без споменаване на наркотични вещества" #~ msgid "References to illicit drugs" #~ msgstr "Споменаване на наркотични вещества" #~ msgid "Use of illicit drugs" #~ msgstr "Използване на наркотични вещества" #~ msgid "References to tobacco products" #~ msgstr "Споменаване на тютюневи изделия" #~ msgid "Use of tobacco products" #~ msgstr "Използване на тютюневи изделия" #~ msgid "No nudity of any sort" #~ msgstr "Без каквато и да било голота" #~ msgid "Brief artistic nudity" #~ msgstr "Кратка, артистична голота" #~ msgid "Prolonged nudity" #~ msgstr "Продължителна голота" #~ msgid "No references or depictions of sexual nature" #~ msgstr "Без препратки или представяне на сцени със сексуален характер" #~ msgid "Provocative references or depictions" #~ msgstr "Провокативни препратки или сцени" #~ msgid "Sexual references or depictions" #~ msgstr "Сексуални препратки или сцени" #~ msgid "Graphic sexual behavior" #~ msgstr "Визуално представено сексуално поведение" #~ msgid "No profanity of any kind" #~ msgstr "Без неприличен език" #~ msgid "Mild or infrequent use of profanity" #~ msgstr "Леко или рядко използван неприличен език" #~ msgid "Moderate use of profanity" #~ msgstr "Умерено използване на неприличен език" #~ msgid "Strong or frequent use of profanity" #~ msgstr "Силно или често използван неприличен език" #~ msgid "No inappropriate humor" #~ msgstr "Без неуместен хумор" #~ msgid "Slapstick humor" #~ msgstr "Глуповат хумор" #~ msgid "Vulgar or bathroom humor" #~ msgstr "Вулгарен или тоалетен хумор" #~ msgid "Mature or sexual humor" #~ msgstr "Сексуален или друг вид хумор за възрастни" #~ msgid "No discriminatory language of any kind" #~ msgstr "Без какъвто и да било дискриминационен език" #~ msgid "Negativity towards a specific group of people" #~ msgstr "Негативни намеци към определена група хора" #~ msgid "Discrimination designed to cause emotional harm" #~ msgstr "Дискриминация, целяща да причини емоционална вреда" #~ msgid "Explicit discrimination based on gender, sexuality, race or religion" #~ msgstr "" #~ "Явна дискриминация спрямо пол, сексуална ориентация, раса или религия" #~ msgid "No advertising of any kind" #~ msgstr "Без реклами" #~ msgid "Product placement" #~ msgstr "Продуктово позициониране" #~ msgid "Explicit references to specific brands or trademarked products" #~ msgstr "Явни споменаване на конкретни марки продукти" #~ msgid "No gambling of any kind" #~ msgstr "Без залагания" #~ msgid "Gambling on random events using tokens or credits" #~ msgstr "Залагания на случайни събития чрез жетони или кредити" #~ msgid "Gambling using “play” money" #~ msgstr "Залагания на „игрални“ пари" #~ msgid "Gambling using real money" #~ msgstr "Залагания на истински пари" #~ msgid "No ability to spend money" #~ msgstr "Без възможност за харчене на пари" #~ msgid "Ability to spend real money in-game" #~ msgstr "Възможност за харчене на истински пари в играта" #~ msgid "No sharing of social network usernames or email addresses" #~ msgstr "" #~ "Без споделяне на потребителски имена за социални мрежи или адреси на е-" #~ "пощи" #~ msgid "Sharing social network usernames or email addresses" #~ msgstr "" #~ "Споделяне на потребителски имена за социални мрежи или адреси на е-пощи" #~ msgid "No sharing of user information with 3rd parties" #~ msgstr "Без споделяне на данните за потребителите с трети страни" #~ msgid "No sharing of physical location to other users" #~ msgstr "Без споделяне на реалното местоположение с другите потребители" #~ msgid "Sharing physical location to other users" #~ msgstr "Споделяне на реалното местоположение с другите потребители" malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/po/bn.po000066400000000000000000000475151505556674000231650ustar00rootroot00000000000000# Bengali translations for malcontent package. # Copyright (C) 2020 THE malcontent'S COPYRIGHT HOLDER # This file is distributed under the same license as the malcontent package. # Automatically generated, 2020. # msgid "" msgstr "" "Project-Id-Version: malcontent\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-06-10 12:04+0100\n" "PO-Revision-Date: 2020-04-15 13:42+0100\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: bn\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: accounts-service/com.endlessm.ParentalControls.policy.in:4 msgid "Change your own app filter" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:5 msgid "Authentication is required to change your app filter." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:14 msgid "Read your own app filter" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:15 msgid "Authentication is required to read your app filter." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:24 msgid "Change another user’s app filter" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:25 msgid "Authentication is required to change another user’s app filter." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:34 msgid "Read another user’s app filter" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:35 msgid "Authentication is required to read another user’s app filter." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:44 msgid "Change your own session limits" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:45 msgid "Authentication is required to change your session limits." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:54 msgid "Read your own session limits" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:55 msgid "Authentication is required to read your session limits." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:64 msgid "Change another user’s session limits" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:65 msgid "Authentication is required to change another user’s session limits." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:74 msgid "Read another user’s session limits" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:75 msgid "Authentication is required to read another user’s session limits." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:84 msgid "Change your own account info" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:85 msgid "Authentication is required to change your account info." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:94 msgid "Read your own account info" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:95 msgid "Authentication is required to read your account info." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:104 msgid "Change another user’s account info" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:105 msgid "Authentication is required to change another user’s account info." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:114 msgid "Read another user’s account info" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:115 msgid "Authentication is required to read another user’s account info." msgstr "" #: libmalcontent/app-filter.c:694 #, c-format msgid "App filter for user %u was in an unrecognized format" msgstr "" #: libmalcontent/app-filter.c:725 #, c-format msgid "OARS filter for user %u has an unrecognized kind ‘%s’" msgstr "" #: libmalcontent/manager.c:283 libmalcontent/manager.c:412 #, c-format msgid "Not allowed to query app filter data for user %u" msgstr "" #: libmalcontent/manager.c:288 #, c-format msgid "User %u does not exist" msgstr "" #: libmalcontent/manager.c:394 msgid "App filtering is globally disabled" msgstr "" #: libmalcontent/manager.c:777 msgid "Session limits are globally disabled" msgstr "" #: libmalcontent/manager.c:795 #, c-format msgid "Not allowed to query session limits data for user %u" msgstr "" #: libmalcontent/session-limits.c:306 #, c-format msgid "Session limit for user %u was in an unrecognized format" msgstr "" #: libmalcontent/session-limits.c:328 #, c-format msgid "Session limit for user %u has an unrecognized type ‘%u’" msgstr "" #: libmalcontent/session-limits.c:346 #, c-format msgid "Session limit for user %u has invalid daily schedule %u–%u" msgstr "" #. TRANSLATORS: This is the formatting of English and localized name #. of the rating e.g. "Adults Only (solo adultos)" #: libmalcontent-ui/gs-content-rating.c:75 #, c-format msgid "%s (%s)" msgstr "" #: libmalcontent-ui/gs-content-rating.c:209 msgid "General" msgstr "" #: libmalcontent-ui/gs-content-rating.c:218 msgid "ALL" msgstr "" #: libmalcontent-ui/gs-content-rating.c:222 #: libmalcontent-ui/gs-content-rating.c:485 msgid "Adults Only" msgstr "" #: libmalcontent-ui/gs-content-rating.c:224 #: libmalcontent-ui/gs-content-rating.c:484 msgid "Mature" msgstr "" #: libmalcontent-ui/gs-content-rating.c:226 #: libmalcontent-ui/gs-content-rating.c:483 msgid "Teen" msgstr "" #: libmalcontent-ui/gs-content-rating.c:228 #: libmalcontent-ui/gs-content-rating.c:482 msgid "Everyone 10+" msgstr "" #: libmalcontent-ui/gs-content-rating.c:230 #: libmalcontent-ui/gs-content-rating.c:481 msgid "Everyone" msgstr "" #: libmalcontent-ui/gs-content-rating.c:232 #: libmalcontent-ui/gs-content-rating.c:480 msgid "Early Childhood" msgstr "" #. Translators: the placeholder is a user’s full name #: libmalcontent-ui/restrict-applications-dialog.c:222 #, c-format msgid "Restrict %s from using the following installed applications." msgstr "" #: libmalcontent-ui/restrict-applications-dialog.ui:6 #: libmalcontent-ui/restrict-applications-dialog.ui:12 msgid "Restrict Applications" msgstr "" #: libmalcontent-ui/restrict-applications-selector.ui:24 msgid "No applications found to restrict." msgstr "" #. Translators: this is the full name for an unknown user account. #: libmalcontent-ui/user-controls.c:242 libmalcontent-ui/user-controls.c:253 msgid "unknown" msgstr "" #: libmalcontent-ui/user-controls.c:338 libmalcontent-ui/user-controls.c:425 #: libmalcontent-ui/user-controls.c:711 msgid "All Ages" msgstr "" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:514 #, c-format msgid "" "Prevents %s from running web browsers. Limited web content may still be " "available in other applications." msgstr "" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:519 #, c-format msgid "Prevents specified applications from being used by %s." msgstr "" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:524 #, c-format msgid "Prevents %s from installing applications." msgstr "" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:529 #, c-format msgid "Applications installed by %s will not appear for other users." msgstr "" #: libmalcontent-ui/user-controls.ui:17 msgid "Application Usage Restrictions" msgstr "" #: libmalcontent-ui/user-controls.ui:68 msgid "Restrict _Web Browsers" msgstr "" #: libmalcontent-ui/user-controls.ui:152 msgid "_Restrict Applications" msgstr "" #: libmalcontent-ui/user-controls.ui:231 msgid "Software Installation Restrictions" msgstr "" #: libmalcontent-ui/user-controls.ui:281 msgid "Restrict Application _Installation" msgstr "" #: libmalcontent-ui/user-controls.ui:366 msgid "Restrict Application Installation for _Others" msgstr "" #: libmalcontent-ui/user-controls.ui:451 msgid "Application _Suitability" msgstr "" #: libmalcontent-ui/user-controls.ui:473 msgid "" "Restricts browsing or installation of applications to applications suitable " "for certain ages or above." msgstr "" #. Translators: This is the title of the main window #. Translators: the name of the application as it appears in a software center #: malcontent-control/application.c:105 malcontent-control/main.ui:12 #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:9 #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:3 msgid "Parental Controls" msgstr "" #: malcontent-control/application.c:270 msgid "Copyright © 2019, 2020 Endless Mobile, Inc." msgstr "" #. Translators: this should be "translated" to the #. names of people who have translated Malcontent into #. this language, one per line. #: malcontent-control/application.c:275 msgid "translator-credits" msgstr "" #. Translators: "Malcontent" is the brand name of this #. project, so should not be translated. #: malcontent-control/application.c:281 msgid "Malcontent Website" msgstr "" #: malcontent-control/application.c:299 msgid "The help contents could not be displayed" msgstr "" #: malcontent-control/application.c:336 msgid "Failed to load user data from the system" msgstr "" #: malcontent-control/application.c:338 msgid "Please make sure that the AccountsService is installed and enabled." msgstr "" #: malcontent-control/carousel.ui:48 msgid "Previous Page" msgstr "" #: malcontent-control/carousel.ui:74 msgid "Next Page" msgstr "" #: malcontent-control/main.ui:93 msgid "Permission Required" msgstr "" #: malcontent-control/main.ui:107 msgid "" "Permission is required to view and change user parental controls settings." msgstr "" #: malcontent-control/main.ui:148 msgid "No Child Users Configured" msgstr "" #: malcontent-control/main.ui:162 msgid "" "No child users are currently set up on the system. Create one before setting " "up their parental controls." msgstr "" #: malcontent-control/main.ui:174 msgid "Create _Child User" msgstr "" #: malcontent-control/main.ui:202 msgid "Loading…" msgstr "" #: malcontent-control/main.ui:265 msgid "_Help" msgstr "_সাহায্য " #: malcontent-control/main.ui:269 msgid "_About Parental Controls" msgstr "" #. Translators: the brief summary of the application as it appears in a software center. #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:12 #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:4 msgid "Set parental controls and monitor usage by users" msgstr "" #. Translators: These are the application description paragraphs in the AppData file. #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:16 msgid "" "Manage users’ parental controls restrictions, controlling how long they can " "use the computer for, what software they can install, and what installed " "software they can run." msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:39 msgid "The GNOME Project" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:50 #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:59 msgid "Minor improvements to parental controls application UI" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:51 msgid "Add a user manual" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:52 msgid "Translation updates" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:60 msgid "Translations to Ukrainian and Polish" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:67 msgid "Improve parental controls application UI and add icon" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:68 msgid "Support for indicating which accounts are parent accounts" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:75 msgid "Initial release of basic parental controls application" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:76 msgid "Support for setting app installation and run restrictions on users" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:83 msgid "Maintenance release of underlying parental controls library" msgstr "" #. Translators: Do NOT translate or transliterate this text (this is an icon file name)! #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:7 msgid "org.freedesktop.MalcontentControl" msgstr "" #. Translators: Search terms to find this application. Do NOT translate or localise the semicolons! The list MUST also end with a semicolon! #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:13 msgid "" "parental controls;screen time;app restrictions;web browser restrictions;oars;" "usage;usage limit;kid;child;" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.policy.in:9 msgid "Manage parental controls" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.policy.in:10 msgid "Authentication is required to read and change user parental controls" msgstr "" #: malcontent-control/user-selector.c:426 msgid "Your account" msgstr "" #. Always allow root, to avoid a situation where this PAM module prevents #. * all users logging in with no way of recovery. #: pam/pam_malcontent.c:142 pam/pam_malcontent.c:188 #, c-format msgid "User ‘%s’ has no time limits enabled" msgstr "" #: pam/pam_malcontent.c:151 pam/pam_malcontent.c:172 #, c-format msgid "Error getting session limits for user ‘%s’: %s" msgstr "" #: pam/pam_malcontent.c:182 #, c-format msgid "User ‘%s’ has no time remaining" msgstr "" #: pam/pam_malcontent.c:200 #, c-format msgid "Error setting time limit on login session: %s" msgstr "" #~ msgid "Cartoon characters in unsafe situations" #~ msgstr "অনিরাপদ অবস্থায় কার্টুন চরিত্র" #~ msgid "Cartoon characters in aggressive conflict" #~ msgstr "আক্রমণাত্মক মতবিরোধে কার্টুন চরিত্র" #~ msgid "Graphic violence involving cartoon characters" #~ msgstr "কার্টুন চরিত্র নিয়ে স্পষ্ট দ্বন্দ্ব" #~ msgid "Characters in unsafe situations easily distinguishable from reality" #~ msgstr "অনিরাপদ অবস্থানে থাকা চরিত্রগুলোকে সহজেই বাস্তব থেকে আলাদা করা যায়" #~ msgid "" #~ "Characters in aggressive conflict easily distinguishable from reality" #~ msgstr "আক্রমণাত্মক মতবিরোধে থাকা চরিত্রগুলোকে সহজেই বাস্তব থেকে আলাদা করা যায়" #~ msgid "Graphic violence easily distinguishable from reality" #~ msgstr "স্পষ্ট দ্বন্দ্বকে সহজেই বাস্তব থেকে আলাদা করা যায়" #~ msgid "Mildly realistic characters in unsafe situations" #~ msgstr "অনিরাপদ পরিস্থিতিতে কিছুটা বাস্তব চরিত্রসমূহ" #~ msgid "Depictions of realistic characters in aggressive conflict" #~ msgstr "আক্রমণাত্মক দ্বন্দ্বে বাস্তব চরিত্রসমূহের রূপায়ণ" #~ msgid "Graphic violence involving realistic characters" #~ msgstr "বাস্তব চরিত্র নিয়ে স্পষ্ট দ্বন্দ্ব" #~ msgid "Unrealistic bloodshed" #~ msgstr "অবাস্তবিক রক্তপাত" #~ msgid "Realistic bloodshed" #~ msgstr "বাস্তবিক রক্তপাত" #~ msgid "Depictions of bloodshed and the mutilation of body parts" #~ msgstr "রক্তপাতের চিত্রায়ণ এবং শারিরীক অঙ্গপ্রত্যঙ্গের বিকৃতি" #~ msgid "Rape or other violent sexual behavior" #~ msgstr "ধর্ষণ অথবা অন্য যৌন আচরণ" #~ msgid "References to alcoholic beverages" #~ msgstr "মদ্যপ পানীয়ের প্রসঙ্গ" #~ msgid "Use of alcoholic beverages" #~ msgstr "মদ্যপ পানীয়ের ব্যবহার" #~ msgid "References to illicit drugs" #~ msgstr "অবৈধ মাদকের প্রসঙ্গ" #~ msgid "Use of illicit drugs" #~ msgstr "অবৈধ মাদকের ব্যবহার" #~ msgid "References to tobacco products" #~ msgstr "তামাকজাতীয় দ্রব্যের প্রসঙ্গ" #~ msgid "Use of tobacco products" #~ msgstr "তামাকজাতীয় দ্রব্যের ব্যবহার" #~ msgid "Brief artistic nudity" #~ msgstr "সংক্ষিপ্ত শৈল্পিক নগ্নতা" #~ msgid "Prolonged nudity" #~ msgstr "সম্প্রসারিত নগ্নতা" #~ msgid "Provocative references or depictions" #~ msgstr "উত্তেজক প্রসঙ্গ অথবা চিত্রায়ণ" #~ msgid "Sexual references or depictions" #~ msgstr "যৌন প্রসঙ্গ অথবা চিত্রায়ণ" #~ msgid "Graphic sexual behavior" #~ msgstr "স্পষ্ট যৌন আচরণ" #~ msgid "Mild or infrequent use of profanity" #~ msgstr "ধর্মদ্রোহিতার হালকা অথবা অনিয়মিত ব্যবহার" #~ msgid "Moderate use of profanity" #~ msgstr "ধর্মদ্রোহিতার মাঝারি ব্যবহার" #~ msgid "Strong or frequent use of profanity" #~ msgstr "ধর্মদ্রোহিতার শক্তিশালী অথবা নিয়মিত ব্যবহার" #~ msgid "Slapstick humor" #~ msgstr "অস্বস্তিকর রসিকতা" #~ msgid "Vulgar or bathroom humor" #~ msgstr "অমার্জিত অথবা বাথরুম রসিকতা" #~ msgid "Mature or sexual humor" #~ msgstr "বয়স্ক বা যৌন রসিকতা" #~ msgid "Negativity towards a specific group of people" #~ msgstr "কোন নির্দিষ্ট দলের মানুষদের প্রতি নেতিবাচক আচরণ" #~ msgid "Discrimination designed to cause emotional harm" #~ msgstr "মানসিক ক্ষতিসাধন করার জন্য সাজানো বৈষম্যমূলক আচরণ" #~ msgid "Explicit discrimination based on gender, sexuality, race or religion" #~ msgstr "লিঙ্গ, যৌনতা, বর্ণ অথবা ধর্ম নিয়ে সুস্পষ্ট বৈষম্যমূলক আচরণ" #~ msgid "Product placement" #~ msgstr "দ্রব্যের স্থান নির্ধারণ" #~ msgid "Explicit references to specific brands or trademarked products" #~ msgstr "নির্দিষ্ট ব্র্যান্ড বা ট্রেডমার্কের কোন পণ্যের সুস্পষ্ট প্রসঙ্গ" #~ msgid "Gambling on random events using tokens or credits" #~ msgstr "সাধারণ কোন স্থানে টোকেন বা ধারের মাধ্যমে জুয়া" #~ msgid "Gambling using real money" #~ msgstr "আসল টাকা ব্যবহারের মাধ্যমে জুয়া" #~ msgid "Ability to spend real money in-game" #~ msgstr "খেলায় আসল টাকা ব্যবহারের ক্ষমতা" #~ msgid "Sharing social network usernames or email addresses" #~ msgstr "সামাজিক নেটওয়ার্কের ব্যবহারকারী নাম অথবা ইমেইল ঠিকানা ভাগাভাগি করা" #~ msgid "Sharing physical location to other users" #~ msgstr "অন্য খেলোয়াড়দের সাথে শারিরীক অবস্থান ভাগাভাগি করা" malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/po/ca.po000066400000000000000000000664651505556674000231560ustar00rootroot00000000000000# Catalan translations for malcontent package. # Copyright (C) 2020 THE malcontent'S COPYRIGHT HOLDER # This file is distributed under the same license as the malcontent package. # Automatically generated, 2020. # msgid "" msgstr "" "Project-Id-Version: malcontent\n" "Report-Msgid-Bugs-To: https://gitlab.freedesktop.org/pwithnall/malcontent/" "issues\n" "POT-Creation-Date: 2021-11-10 15:28+0000\n" "PO-Revision-Date: 2021-11-10 17:02+0100\n" "Last-Translator: maite guix \n" "Language-Team: none\n" "Language: ca\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 3.0\n" #: accounts-service/com.endlessm.ParentalControls.policy.in:4 msgid "Change your own app filter" msgstr "Canvieu el filtre d'app propi" #: accounts-service/com.endlessm.ParentalControls.policy.in:5 msgid "Authentication is required to change your app filter." msgstr "L'autenticació és necessària per a canviar el seu filtre de l'app." #: accounts-service/com.endlessm.ParentalControls.policy.in:14 msgid "Read your own app filter" msgstr "Llegeix el teu propi filtre d'app" #: accounts-service/com.endlessm.ParentalControls.policy.in:15 msgid "Authentication is required to read your app filter." msgstr "L'autenticació és necessària per a llegir el seu filtre de l'app." #: accounts-service/com.endlessm.ParentalControls.policy.in:24 msgid "Change another user’s app filter" msgstr "Canvieu el filtre d'app d'un altre usuari" #: accounts-service/com.endlessm.ParentalControls.policy.in:25 msgid "Authentication is required to change another user’s app filter." msgstr "Cal autenticació per a canviar el filtre d'app d'un altre usuari." #: accounts-service/com.endlessm.ParentalControls.policy.in:34 msgid "Read another user’s app filter" msgstr "Llegeix el filtre d'app d'un altre usuari" #: accounts-service/com.endlessm.ParentalControls.policy.in:35 msgid "Authentication is required to read another user’s app filter." msgstr "" "L'autenticació és necessària per a llegir el filtre d'app d'un altre usuari." #: accounts-service/com.endlessm.ParentalControls.policy.in:44 msgid "Change your own session limits" msgstr "Canvieu els límits de sessió propis" #: accounts-service/com.endlessm.ParentalControls.policy.in:45 msgid "Authentication is required to change your session limits." msgstr "Es requereix autenticació per a canviar els límits de sessió." #: accounts-service/com.endlessm.ParentalControls.policy.in:54 msgid "Read your own session limits" msgstr "Llegeix els propis límits de sessió" #: accounts-service/com.endlessm.ParentalControls.policy.in:55 msgid "Authentication is required to read your session limits." msgstr "Es requereix autenticació per a llegir els límits de sessió." #: accounts-service/com.endlessm.ParentalControls.policy.in:64 msgid "Change another user’s session limits" msgstr "Canvieu els límits de sessió d'un altre usuari" #: accounts-service/com.endlessm.ParentalControls.policy.in:65 msgid "Authentication is required to change another user’s session limits." msgstr "" "L'autenticació és necessària per a canviar els límits de sessió d'un altre " "usuari." #: accounts-service/com.endlessm.ParentalControls.policy.in:74 msgid "Read another user’s session limits" msgstr "Llegeix els límits de sessió d'un altre usuari" #: accounts-service/com.endlessm.ParentalControls.policy.in:75 msgid "Authentication is required to read another user’s session limits." msgstr "" "Es requereix autenticació per a llegir els límits de sessió d'un altre " "usuari." #: accounts-service/com.endlessm.ParentalControls.policy.in:84 msgid "Change your own account info" msgstr "Canvieu la informació del compte" #: accounts-service/com.endlessm.ParentalControls.policy.in:85 msgid "Authentication is required to change your account info." msgstr "És necessària l'autenticació per a canviar la informació del compte." #: accounts-service/com.endlessm.ParentalControls.policy.in:94 msgid "Read your own account info" msgstr "Llegeix la informació del compte propi" #: accounts-service/com.endlessm.ParentalControls.policy.in:95 msgid "Authentication is required to read your account info." msgstr "L'autenticació és necessària per a llegir la informació del compte." #: accounts-service/com.endlessm.ParentalControls.policy.in:104 msgid "Change another user’s account info" msgstr "Canvieu la informació del compte d'un altre usuari" #: accounts-service/com.endlessm.ParentalControls.policy.in:105 msgid "Authentication is required to change another user’s account info." msgstr "" "Es requereix autenticació per a canviar la informació del compte d'un altre " "usuari." #: accounts-service/com.endlessm.ParentalControls.policy.in:114 msgid "Read another user’s account info" msgstr "Llegeix la informació del compte d'un altre usuari" #: accounts-service/com.endlessm.ParentalControls.policy.in:115 msgid "Authentication is required to read another user’s account info." msgstr "" "Es requereix autenticació per a llegir la informació del compte d'un altre " "usuari." #: libmalcontent/app-filter.c:694 #, c-format msgid "App filter for user %u was in an unrecognized format" msgstr "El filtre d'app de l'usuari %u tenia un format no reconegut" #: libmalcontent/app-filter.c:725 #, c-format msgid "OARS filter for user %u has an unrecognized kind ‘%s’" msgstr "El filtre OARS de l'usuari %u té un tipus «%s» no reconegut" #: libmalcontent/manager.c:283 libmalcontent/manager.c:420 #: libmalcontent/manager.c:803 #, c-format msgid "Not allowed to query parental controls data for user %u" msgstr "" "No es permet consultar les dades dels controls paternals de l'usuari %u" #: libmalcontent/manager.c:288 #, c-format msgid "User %u does not exist" msgstr "L'usuari %u no existeix" #: libmalcontent/manager.c:296 msgid "System accounts service not available" msgstr "El servei de comptes del sistema no està disponible" #: libmalcontent/manager.c:402 msgid "App filtering is globally disabled" msgstr "El filtratge d'app està inhabilitat globalment" #: libmalcontent/manager.c:785 msgid "Session limits are globally disabled" msgstr "Els límits de sessió estan inhabilitats globalment" #: libmalcontent/session-limits.c:306 #, c-format msgid "Session limit for user %u was in an unrecognized format" msgstr "El límit de sessió de l'usuari %u tenia un format no reconegut" #: libmalcontent/session-limits.c:328 #, c-format msgid "Session limit for user %u has an unrecognized type ‘%u’" msgstr "El límit de sessió de l'usuari %u té un tipus «%u» no reconegut" #: libmalcontent/session-limits.c:346 #, c-format msgid "Session limit for user %u has invalid daily schedule %u–%u" msgstr "" "El límit de sessió de l'usuari %u té una planificació diària no vàlida %u-%u" #. TRANSLATORS: This is the formatting of English and localized name #. of the rating e.g. "Adults Only (solo adultos)" #: libmalcontent-ui/gs-content-rating.c:75 #, c-format msgid "%s (%s)" msgstr "%s (%s)" #: libmalcontent-ui/gs-content-rating.c:209 msgid "General" msgstr "General" #: libmalcontent-ui/gs-content-rating.c:218 msgid "ALL" msgstr "TOT" #: libmalcontent-ui/gs-content-rating.c:222 #: libmalcontent-ui/gs-content-rating.c:485 msgid "Adults Only" msgstr "Només adults" #: libmalcontent-ui/gs-content-rating.c:224 #: libmalcontent-ui/gs-content-rating.c:484 msgid "Mature" msgstr "Madur" #: libmalcontent-ui/gs-content-rating.c:226 #: libmalcontent-ui/gs-content-rating.c:483 msgid "Teen" msgstr "Adolescents" #: libmalcontent-ui/gs-content-rating.c:228 #: libmalcontent-ui/gs-content-rating.c:482 msgid "Everyone 10+" msgstr "Majors de 10 anys" #: libmalcontent-ui/gs-content-rating.c:230 #: libmalcontent-ui/gs-content-rating.c:481 msgid "Everyone" msgstr "Tothom" #: libmalcontent-ui/gs-content-rating.c:232 #: libmalcontent-ui/gs-content-rating.c:480 msgid "Early Childhood" msgstr "Infantesa" #. Translators: the placeholder is a user’s full name #: libmalcontent-ui/restrict-applications-dialog.c:222 #, c-format msgid "Restrict %s from using the following installed applications." msgstr "Restringeix %s de l'ús de les aplicacions instal·lades següents." #: libmalcontent-ui/restrict-applications-dialog.ui:6 #: libmalcontent-ui/restrict-applications-dialog.ui:12 msgid "Restrict Applications" msgstr "Restringir les aplicacions" #: libmalcontent-ui/restrict-applications-selector.ui:24 msgid "No applications found to restrict." msgstr "No s'ha trobat cap aplicació a restringir." #. Translators: this is the full name for an unknown user account. #: libmalcontent-ui/user-controls.c:207 libmalcontent-ui/user-controls.c:218 msgid "unknown" msgstr "desconegut" #: libmalcontent-ui/user-controls.c:312 libmalcontent-ui/user-controls.c:397 #: libmalcontent-ui/user-controls.c:669 msgid "All Ages" msgstr "Totes les edats" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:477 #, c-format msgid "" "Prevents %s from running web browsers. Limited web content may still be " "available in other applications." msgstr "" "Evita que %s executi navegadors web. El contingut web limitat encara pot " "estar disponible en altres aplicacions." #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:482 #, c-format msgid "Prevents specified applications from being used by %s." msgstr "Evita que les aplicacions especificades siguin utilitzades per %s." #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:487 #, c-format msgid "Prevents %s from installing applications." msgstr "Evita que %s instal·li aplicacions." #: libmalcontent-ui/user-controls.ui:16 msgid "Application Usage Restrictions" msgstr "Restriccions d'ús de l'aplicació" #: libmalcontent-ui/user-controls.ui:68 msgid "Restrict _Web Browsers" msgstr "Restringir navegadors _Web" #: libmalcontent-ui/user-controls.ui:152 msgid "_Restrict Applications" msgstr "_Restringeix aplicacions" #: libmalcontent-ui/user-controls.ui:231 msgid "Software Installation Restrictions" msgstr "Restriccions d'instal·lació de programari" #: libmalcontent-ui/user-controls.ui:282 msgid "Restrict Application _Installation" msgstr "Restringeix la _instal·lació de l'aplicació" #: libmalcontent-ui/user-controls.ui:367 msgid "Application _Suitability" msgstr "_Idoneïtat de l'aplicació" #: libmalcontent-ui/user-controls.ui:389 msgid "" "Restricts browsing or installation of applications to applications suitable " "for certain ages or above." msgstr "" "Restringeix la navegació o instal·lació d'aplicacions a aplicacions " "adequades per a determinades edats o superiors." #. Translators: This documents the --user command line option to malcontent-control: #: malcontent-control/application.c:102 msgid "User to select in the UI" msgstr "Usuari a seleccionar a la interfície d'usuari" #. Translators: This is a placeholder for a command line argument value: #: malcontent-control/application.c:104 msgid "USERNAME" msgstr "NOM D'USUARI" #: malcontent-control/application.c:116 msgid "— view and edit parental controls" msgstr "— veure i editar els controls parentals" #. Translators: This is the title of the main window #. Translators: the name of the application as it appears in a software center #: malcontent-control/application.c:123 malcontent-control/main.ui:12 #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:9 #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:3 msgid "Parental Controls" msgstr "Controls parentals" #: malcontent-control/application.c:309 msgid "Copyright © 2019, 2020 Endless Mobile, Inc." msgstr "Copyright © 2019, 2020 Endless Mobile, Inc." #. Translators: this should be "translated" to the #. names of people who have translated Malcontent into #. this language, one per line. #: malcontent-control/application.c:314 msgid "translator-credits" msgstr "Maite Guix , 2021" #. Translators: "Malcontent" is the brand name of this #. project, so should not be translated. #: malcontent-control/application.c:320 msgid "Malcontent Website" msgstr "Lloc web de Malcontent" #: malcontent-control/application.c:338 msgid "The help contents could not be displayed" msgstr "No s'ha pogut visualitzar el contingut de l'ajuda" #: malcontent-control/application.c:375 msgid "Failed to load user data from the system" msgstr "No s'han pogut carregar les dades de l'usuari del sistema" #: malcontent-control/application.c:377 msgid "Please make sure that the AccountsService is installed and enabled." msgstr "Assegureu-vos que el AccountsService està instal·lat i habilitat." #. Translators: Replace the link to commonsensemedia.org with some #. * localised guidance for parents/carers on how to set restrictions on #. * their child/caree in a responsible way which is in keeping with the #. * best practice and culture of the region. If no suitable localised #. * guidance exists, and if the default commonsensemedia.org link is not #. * suitable, please file an issue against malcontent so we can discuss #. * further! #. * https://gitlab.freedesktop.org/pwithnall/malcontent/-/issues/new #. #: malcontent-control/application.c:408 #, c-format msgid "" "It’s recommended that restrictions are set as part of an ongoing " "conversation with %s. Read guidance on what to consider." msgstr "" "Es recomana que les restriccions s'estableixin com a part d'una conversa en " "curs amb %s . Llegiu les indicacions sobre què cal tenir en compte." #: malcontent-control/carousel.ui:48 msgid "Previous Page" msgstr "Pàgina anterior" #: malcontent-control/carousel.ui:74 msgid "Next Page" msgstr "Pàgina següent" #: malcontent-control/main.ui:115 msgid "Permission Required" msgstr "Es necessari tenir permís" #: malcontent-control/main.ui:129 msgid "" "Permission is required to view and change user parental controls settings." msgstr "" "Es requereix permís per a visualitzar i canviar la configuració dels " "controls parentals de l'usuari." #: malcontent-control/main.ui:184 msgid "No Standard User Accounts" msgstr "No hi ha comptes d'usuari estàndard" #: malcontent-control/main.ui:199 msgid "" "Parental controls can only be applied to standard user\n" "accounts. These can be created in the user settings." msgstr "" "Els controls parentals només es poden aplicar als comptes d'usuari\n" "estàndard. Aquests es poden crear a la configuració d'usuari." #: malcontent-control/main.ui:212 msgid "_User Settings" msgstr "_Paràmetres de l'usuari" #: malcontent-control/main.ui:242 msgid "Loading…" msgstr "S'està carregant…" #: malcontent-control/main.ui:305 msgid "_Help" msgstr "_Ajuda" #: malcontent-control/main.ui:309 msgid "_About Parental Controls" msgstr "_Quant als controls parentals" #. Translators: the brief summary of the application as it appears in a software center. #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:12 #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:4 msgid "Set parental controls and monitor usage by users" msgstr "Definir els controls parentals i supervisar-ne l'ús" #. Translators: These are the application description paragraphs in the AppData file. #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:16 msgid "" "Manage users’ parental controls restrictions, controlling how long they can " "use the computer for, what software they can install, and what installed " "software they can run." msgstr "" "Gestionar les restriccions dels controls parentals dels usuaris, controlar " "quant de temps poden utilitzar l'ordinador, quin programari poden instal·lar " "i quin programari instal·lat poden executar." #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:25 msgid "Main window" msgstr "Finestra principal" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:39 msgid "The GNOME Project" msgstr "El projecte GNOME" #. Translators: Search terms to find this application. Do NOT translate or localise the semicolons! The list MUST also end with a semicolon! #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:14 msgid "" "parental controls;screen time;app restrictions;web browser restrictions;oars;" "usage;usage limit;kid;child;" msgstr "" "controls parentals;temps de pantalla;restriccions d'app;restriccions del " "navegador web;rems;ús;límit d'ús;criatura;nen;" #: malcontent-control/org.freedesktop.MalcontentControl.policy.in:9 msgid "Manage parental controls" msgstr "Administra els controls parentals" #: malcontent-control/org.freedesktop.MalcontentControl.policy.in:10 msgid "Authentication is required to read and change user parental controls" msgstr "" "L'autenticació és necessària per a llegir i canviar els controls parentals " "de l'usuari" #: malcontent-control/user-selector.c:426 msgid "Your account" msgstr "El compte propi" #. Always allow root, to avoid a situation where this PAM module prevents #. * all users logging in with no way of recovery. #: pam/pam_malcontent.c:142 pam/pam_malcontent.c:188 #, c-format msgid "User ‘%s’ has no time limits enabled" msgstr "L'usuari «%s» no té límits de temps habilitats" #: pam/pam_malcontent.c:151 pam/pam_malcontent.c:172 #, c-format msgid "Error getting session limits for user ‘%s’: %s" msgstr "" "S'ha produït un error en obtenir els límits de sessió de l'usuari «%s»: %s" #: pam/pam_malcontent.c:182 #, c-format msgid "User ‘%s’ has no time remaining" msgstr "A l'usuari «%s» no li queda temps" #: pam/pam_malcontent.c:200 #, c-format msgid "Error setting time limit on login session: %s" msgstr "" "S'ha produït un error en establir el límit de temps d'inici de sessió: %s" #~ msgid "No cartoon violence" #~ msgstr "Sense violència en personatges animats" #~ msgid "Cartoon characters in unsafe situations" #~ msgstr "Personatges animats en situacions insegures" #~ msgid "Cartoon characters in aggressive conflict" #~ msgstr "Personatges animats en conflictes agressius" #~ msgid "Graphic violence involving cartoon characters" #~ msgstr "Violència gràfica amb personatges animats" #~ msgid "No fantasy violence" #~ msgstr "Sense violència fantàstica" #~ msgid "Characters in unsafe situations easily distinguishable from reality" #~ msgstr "" #~ "Personatges en situacions insegures fàcilment distingibles de la realitat" #~ msgid "" #~ "Characters in aggressive conflict easily distinguishable from reality" #~ msgstr "" #~ "Personatges en conflictes agressius fàcilment distingibles de la realitat" #~ msgid "Graphic violence easily distinguishable from reality" #~ msgstr "Violència gràfica fàcilment distingible de la realitat" #~ msgid "No realistic violence" #~ msgstr "Sense violència realista" #~ msgid "Mildly realistic characters in unsafe situations" #~ msgstr "Personatges mig reals en situacions insegures" #~ msgid "Depictions of realistic characters in aggressive conflict" #~ msgstr "Representacions de personatges realistes en conflictes agressius" #~ msgid "Graphic violence involving realistic characters" #~ msgstr "Violència gràfica amb personatges realistes" #~ msgid "No bloodshed" #~ msgstr "Sense matances" #~ msgid "Unrealistic bloodshed" #~ msgstr "Matances no realistes" #~ msgid "Realistic bloodshed" #~ msgstr "Matances realistes" #~ msgid "Depictions of bloodshed and the mutilation of body parts" #~ msgstr "Representacions de matances i mutilacions de parts del cos" #~ msgid "No sexual violence" #~ msgstr "Sense violència sexual" #~ msgid "Rape or other violent sexual behavior" #~ msgstr "Violació o altres comportaments sexuals violents" #~ msgid "No references to alcohol" #~ msgstr "Sense referències a l'alcohol" #~ msgid "References to alcoholic beverages" #~ msgstr "Referències a begudes alcohòliques" #~ msgid "Use of alcoholic beverages" #~ msgstr "Ús de begudes alcohòliques" #~ msgid "No references to illicit drugs" #~ msgstr "Sense referències a drogues il·legals" #~ msgid "References to illicit drugs" #~ msgstr "Referències a drogues il·legals" #~ msgid "Use of illicit drugs" #~ msgstr "Ús de drogues il·legals" #~ msgid "References to tobacco products" #~ msgstr "Referències als productes del tàbac" #~ msgid "Use of tobacco products" #~ msgstr "Ús de productes del tàbac" #~ msgid "No nudity of any sort" #~ msgstr "Sense nuesa de cap tipus" #~ msgid "Brief artistic nudity" #~ msgstr "Nuesa artística breu" #~ msgid "Prolonged nudity" #~ msgstr "Nuesa prolongada" #~ msgid "No references or depictions of sexual nature" #~ msgstr "Sense referències o representacions sexuals" #~ msgid "Provocative references or depictions" #~ msgstr "Referències o representacions provocatives" #~ msgid "Sexual references or depictions" #~ msgstr "Referències o representacions sexuals" #~ msgid "Graphic sexual behavior" #~ msgstr "Comportament sexual gràfic" #~ msgid "No profanity of any kind" #~ msgstr "Sense blasfèmia de cap tipus" #~ msgid "Mild or infrequent use of profanity" #~ msgstr "Ús lleu o poc freqüent de la blasfèmia" #~ msgid "Moderate use of profanity" #~ msgstr "Ús moderat de la blasfèmia" #~ msgid "Strong or frequent use of profanity" #~ msgstr "Ús extensiu o freqüent de la blasfèmia" #~ msgid "No inappropriate humor" #~ msgstr "Sense humor inapropiat" #~ msgid "Slapstick humor" #~ msgstr "Humor vulgar" #~ msgid "Vulgar or bathroom humor" #~ msgstr "Humor groller" #~ msgid "Mature or sexual humor" #~ msgstr "Humor adult o sexual" #~ msgid "No discriminatory language of any kind" #~ msgstr "Sense llenguatge discriminatori de cap tipus" #~ msgid "Negativity towards a specific group of people" #~ msgstr "Negatiu respecte a un grup específic de gent" #~ msgid "Discrimination designed to cause emotional harm" #~ msgstr "Discriminació pensada per causar dany emocional" #~ msgid "Explicit discrimination based on gender, sexuality, race or religion" #~ msgstr "" #~ "Discriminació explicita basada en gènere, sexualitat, raça o religió" #~ msgid "No advertising of any kind" #~ msgstr "Sense publicitat de cap tipus" #~ msgid "Product placement" #~ msgstr "Emplaçament de producte" #~ msgid "Explicit references to specific brands or trademarked products" #~ msgstr "" #~ "Referències explícites a marques específiques o productes de marques " #~ "registrades" #~ msgid "Users are encouraged to purchase specific real-world items" #~ msgstr "S'anima als usuaris a comprar coses específiques del món real" #~ msgid "No gambling of any kind" #~ msgstr "Sense apostes de cap tipus" #~ msgid "Gambling on random events using tokens or credits" #~ msgstr "Apostes en esdeveniments aleatoris utilitzant testimonis o crèdits" #~ msgid "Gambling using “play” money" #~ msgstr "Apostes usant moneda virtual al joc" #~ msgid "Gambling using real money" #~ msgstr "Apostes usant diners reals" #~ msgid "No ability to spend money" #~ msgstr "Sense possibilitat de gastar diners" #~ msgid "Users are encouraged to donate real money" #~ msgstr "S'anima als usuaris a comprar coses específiques del món real" #~ msgid "Ability to spend real money in-game" #~ msgstr "Possibilitat de gastar diners de veritat al joc" #~ msgid "No way to chat with other users" #~ msgstr "Sense possibilitat de fer xat amb els altres usuaris" #~ msgid "Moderated chat functionality between users" #~ msgstr "Funcionalitat de xat no supervisada entre usuaris" #~ msgid "Uncontrolled chat functionality between users" #~ msgstr "Funcionalitat de xat no supervisada entre usuaris" #~ msgid "No way to talk with other users" #~ msgstr "Sense possibilitat de parlar amb els altres usuaris" #~ msgid "Uncontrolled audio or video chat functionality between users" #~ msgstr "Funcionalitat de xat d'àudio o vídeo no supervisada entre usuaris" #~ msgid "No sharing of social network usernames or email addresses" #~ msgstr "" #~ "Sense compartició en les xarxes socials de noms d'usuari ni adreces de " #~ "correu electrònic" #~ msgid "Sharing social network usernames or email addresses" #~ msgstr "" #~ "Compartició en les xarxes socials de noms d'usuari o adreces de correu " #~ "electrònic" #~ msgid "No sharing of user information with 3rd parties" #~ msgstr "No es comparteix informació de l'usuari amb terceres parts" #~ msgid "Checking for the latest application version" #~ msgstr "Comprova si hi ha una versió més nova de l'aplicació" #~ msgid "Sharing diagnostic data that does not let others identify the user" #~ msgstr "" #~ "La compartició de dades de diagnòstic no permet a altres identificar " #~ "l'usuari" #~ msgid "Sharing information that lets others identify the user" #~ msgstr "" #~ "La compartició de dades de diagnòstic permet a altres identificar l'usuari" #~ msgid "No sharing of physical location to other users" #~ msgstr "No es comparteix la ubicació física amb altres usuaris" #~ msgid "Sharing physical location to other users" #~ msgstr "Compartició la ubicació física amb altres usuaris" #~ msgid "No references to homosexuality" #~ msgstr "Sense referències a homosexualitat" #~ msgid "Indirect references to homosexuality" #~ msgstr "Referències indirectes a l'homosexualitat" #~ msgid "Kissing between people of the same gender" #~ msgstr "Petons entre persones del mateix sexe" #~ msgid "Graphic sexual behavior between people of the same gender" #~ msgstr "Comportament sexual gràfic entre gent del mateix sexe" #~ msgid "No references to prostitution" #~ msgstr "Sense referències a la prostitució" #~ msgid "Indirect references to prostitution" #~ msgstr "Referències indirectes a la prostitució" #~ msgid "Direct references to prostitution" #~ msgstr "Referències directes a la prostitució" #~ msgid "Graphic depictions of the act of prostitution" #~ msgstr "Representacions gràfiques de l'acte de prostitució" #~ msgid "No references to adultery" #~ msgstr "Sense referències a l'adulteri" #~ msgid "Indirect references to adultery" #~ msgstr "Referències indirectes a l'adulteri" #~ msgid "Direct references to adultery" #~ msgstr "Referències directes a l'adulteri" #~ msgid "Graphic depictions of the act of adultery" #~ msgstr "Representacions gràfiques de l'acte d'adulteri" #~ msgid "No sexualized characters" #~ msgstr "Sense personatges sexualitzats" #~ msgid "Scantily clad human characters" #~ msgstr "Personatges humans lleugers de roba" #~ msgid "Overtly sexualized human characters" #~ msgstr "Personatges humans obertament sexualitzats" #~ msgid "No references to desecration" #~ msgstr "Sense referències a la profanació" #~ msgid "Depictions of modern-day human desecration" #~ msgstr "Representacions d'avui en dia de profanació" #~ msgid "Graphic depictions of modern-day desecration" #~ msgstr "Representacions gràfiques d'avui en dia de profanació" #~ msgid "No visible dead human remains" #~ msgstr "Sense restes mortals humanes visibles" #~ msgid "Visible dead human remains" #~ msgstr "Restes mortals humanes visibles" #~ msgid "Dead human remains that are exposed to the elements" #~ msgstr "Restes mortals humanes són exposades als elements" #~ msgid "Graphic depictions of desecration of human bodies" #~ msgstr "Representacions gràfiques de profanació de cossos humans" #~ msgid "No references to slavery" #~ msgstr "Sense referències a l'esclavitud" #~ msgid "Depictions of modern-day slavery" #~ msgstr "Representacions de l'esclavitud avui en dia" #~ msgid "Graphic depictions of modern-day slavery" #~ msgstr "Representacions gràfiques de l'esclavitud avui en dia" malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/po/ca@valencia.po000066400000000000000000000466431505556674000247550ustar00rootroot00000000000000# Catalan translations for malcontent package. # Copyright (C) 2020 THE malcontent'S COPYRIGHT HOLDER # This file is distributed under the same license as the malcontent package. # Automatically generated, 2020. # msgid "" msgstr "" "Project-Id-Version: malcontent\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-06-10 12:04+0100\n" "PO-Revision-Date: 2020-04-15 13:42+0100\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: ca@valencia\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: accounts-service/com.endlessm.ParentalControls.policy.in:4 msgid "Change your own app filter" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:5 msgid "Authentication is required to change your app filter." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:14 msgid "Read your own app filter" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:15 msgid "Authentication is required to read your app filter." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:24 msgid "Change another user’s app filter" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:25 msgid "Authentication is required to change another user’s app filter." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:34 msgid "Read another user’s app filter" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:35 msgid "Authentication is required to read another user’s app filter." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:44 msgid "Change your own session limits" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:45 msgid "Authentication is required to change your session limits." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:54 msgid "Read your own session limits" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:55 msgid "Authentication is required to read your session limits." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:64 msgid "Change another user’s session limits" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:65 msgid "Authentication is required to change another user’s session limits." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:74 msgid "Read another user’s session limits" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:75 msgid "Authentication is required to read another user’s session limits." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:84 msgid "Change your own account info" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:85 msgid "Authentication is required to change your account info." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:94 msgid "Read your own account info" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:95 msgid "Authentication is required to read your account info." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:104 msgid "Change another user’s account info" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:105 msgid "Authentication is required to change another user’s account info." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:114 msgid "Read another user’s account info" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:115 msgid "Authentication is required to read another user’s account info." msgstr "" #: libmalcontent/app-filter.c:694 #, c-format msgid "App filter for user %u was in an unrecognized format" msgstr "" #: libmalcontent/app-filter.c:725 #, c-format msgid "OARS filter for user %u has an unrecognized kind ‘%s’" msgstr "" #: libmalcontent/manager.c:283 libmalcontent/manager.c:412 #, c-format msgid "Not allowed to query app filter data for user %u" msgstr "" #: libmalcontent/manager.c:288 #, c-format msgid "User %u does not exist" msgstr "" #: libmalcontent/manager.c:394 msgid "App filtering is globally disabled" msgstr "" #: libmalcontent/manager.c:777 msgid "Session limits are globally disabled" msgstr "" #: libmalcontent/manager.c:795 #, c-format msgid "Not allowed to query session limits data for user %u" msgstr "" #: libmalcontent/session-limits.c:306 #, c-format msgid "Session limit for user %u was in an unrecognized format" msgstr "" #: libmalcontent/session-limits.c:328 #, c-format msgid "Session limit for user %u has an unrecognized type ‘%u’" msgstr "" #: libmalcontent/session-limits.c:346 #, c-format msgid "Session limit for user %u has invalid daily schedule %u–%u" msgstr "" #. TRANSLATORS: This is the formatting of English and localized name #. of the rating e.g. "Adults Only (solo adultos)" #: libmalcontent-ui/gs-content-rating.c:75 #, c-format msgid "%s (%s)" msgstr "" #: libmalcontent-ui/gs-content-rating.c:209 msgid "General" msgstr "" #: libmalcontent-ui/gs-content-rating.c:218 msgid "ALL" msgstr "" #: libmalcontent-ui/gs-content-rating.c:222 #: libmalcontent-ui/gs-content-rating.c:485 msgid "Adults Only" msgstr "" #: libmalcontent-ui/gs-content-rating.c:224 #: libmalcontent-ui/gs-content-rating.c:484 msgid "Mature" msgstr "" #: libmalcontent-ui/gs-content-rating.c:226 #: libmalcontent-ui/gs-content-rating.c:483 msgid "Teen" msgstr "" #: libmalcontent-ui/gs-content-rating.c:228 #: libmalcontent-ui/gs-content-rating.c:482 msgid "Everyone 10+" msgstr "" #: libmalcontent-ui/gs-content-rating.c:230 #: libmalcontent-ui/gs-content-rating.c:481 msgid "Everyone" msgstr "" #: libmalcontent-ui/gs-content-rating.c:232 #: libmalcontent-ui/gs-content-rating.c:480 msgid "Early Childhood" msgstr "" #. Translators: the placeholder is a user’s full name #: libmalcontent-ui/restrict-applications-dialog.c:222 #, c-format msgid "Restrict %s from using the following installed applications." msgstr "" #: libmalcontent-ui/restrict-applications-dialog.ui:6 #: libmalcontent-ui/restrict-applications-dialog.ui:12 msgid "Restrict Applications" msgstr "" #: libmalcontent-ui/restrict-applications-selector.ui:24 msgid "No applications found to restrict." msgstr "" #. Translators: this is the full name for an unknown user account. #: libmalcontent-ui/user-controls.c:242 libmalcontent-ui/user-controls.c:253 msgid "unknown" msgstr "" #: libmalcontent-ui/user-controls.c:338 libmalcontent-ui/user-controls.c:425 #: libmalcontent-ui/user-controls.c:711 msgid "All Ages" msgstr "" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:514 #, c-format msgid "" "Prevents %s from running web browsers. Limited web content may still be " "available in other applications." msgstr "" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:519 #, c-format msgid "Prevents specified applications from being used by %s." msgstr "" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:524 #, c-format msgid "Prevents %s from installing applications." msgstr "" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:529 #, c-format msgid "Applications installed by %s will not appear for other users." msgstr "" #: libmalcontent-ui/user-controls.ui:17 msgid "Application Usage Restrictions" msgstr "" #: libmalcontent-ui/user-controls.ui:68 msgid "Restrict _Web Browsers" msgstr "" #: libmalcontent-ui/user-controls.ui:152 msgid "_Restrict Applications" msgstr "" #: libmalcontent-ui/user-controls.ui:231 msgid "Software Installation Restrictions" msgstr "" #: libmalcontent-ui/user-controls.ui:281 msgid "Restrict Application _Installation" msgstr "" #: libmalcontent-ui/user-controls.ui:366 msgid "Restrict Application Installation for _Others" msgstr "" #: libmalcontent-ui/user-controls.ui:451 msgid "Application _Suitability" msgstr "" #: libmalcontent-ui/user-controls.ui:473 msgid "" "Restricts browsing or installation of applications to applications suitable " "for certain ages or above." msgstr "" #. Translators: This is the title of the main window #. Translators: the name of the application as it appears in a software center #: malcontent-control/application.c:105 malcontent-control/main.ui:12 #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:9 #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:3 msgid "Parental Controls" msgstr "" #: malcontent-control/application.c:270 msgid "Copyright © 2019, 2020 Endless Mobile, Inc." msgstr "" #. Translators: this should be "translated" to the #. names of people who have translated Malcontent into #. this language, one per line. #: malcontent-control/application.c:275 msgid "translator-credits" msgstr "" #. Translators: "Malcontent" is the brand name of this #. project, so should not be translated. #: malcontent-control/application.c:281 msgid "Malcontent Website" msgstr "" #: malcontent-control/application.c:299 msgid "The help contents could not be displayed" msgstr "" #: malcontent-control/application.c:336 msgid "Failed to load user data from the system" msgstr "" #: malcontent-control/application.c:338 msgid "Please make sure that the AccountsService is installed and enabled." msgstr "" #: malcontent-control/carousel.ui:48 msgid "Previous Page" msgstr "" #: malcontent-control/carousel.ui:74 msgid "Next Page" msgstr "" #: malcontent-control/main.ui:93 msgid "Permission Required" msgstr "" #: malcontent-control/main.ui:107 msgid "" "Permission is required to view and change user parental controls settings." msgstr "" #: malcontent-control/main.ui:148 msgid "No Child Users Configured" msgstr "" #: malcontent-control/main.ui:162 msgid "" "No child users are currently set up on the system. Create one before setting " "up their parental controls." msgstr "" #: malcontent-control/main.ui:174 msgid "Create _Child User" msgstr "" #: malcontent-control/main.ui:202 msgid "Loading…" msgstr "" #: malcontent-control/main.ui:265 msgid "_Help" msgstr "_Ajuda" #: malcontent-control/main.ui:269 msgid "_About Parental Controls" msgstr "" #. Translators: the brief summary of the application as it appears in a software center. #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:12 #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:4 msgid "Set parental controls and monitor usage by users" msgstr "" #. Translators: These are the application description paragraphs in the AppData file. #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:16 msgid "" "Manage users’ parental controls restrictions, controlling how long they can " "use the computer for, what software they can install, and what installed " "software they can run." msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:39 msgid "The GNOME Project" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:50 #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:59 msgid "Minor improvements to parental controls application UI" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:51 msgid "Add a user manual" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:52 msgid "Translation updates" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:60 msgid "Translations to Ukrainian and Polish" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:67 msgid "Improve parental controls application UI and add icon" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:68 msgid "Support for indicating which accounts are parent accounts" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:75 msgid "Initial release of basic parental controls application" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:76 msgid "Support for setting app installation and run restrictions on users" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:83 msgid "Maintenance release of underlying parental controls library" msgstr "" #. Translators: Do NOT translate or transliterate this text (this is an icon file name)! #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:7 msgid "org.freedesktop.MalcontentControl" msgstr "" #. Translators: Search terms to find this application. Do NOT translate or localise the semicolons! The list MUST also end with a semicolon! #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:13 msgid "" "parental controls;screen time;app restrictions;web browser restrictions;oars;" "usage;usage limit;kid;child;" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.policy.in:9 msgid "Manage parental controls" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.policy.in:10 msgid "Authentication is required to read and change user parental controls" msgstr "" #: malcontent-control/user-selector.c:426 msgid "Your account" msgstr "El vostre compte" #. Always allow root, to avoid a situation where this PAM module prevents #. * all users logging in with no way of recovery. #: pam/pam_malcontent.c:142 pam/pam_malcontent.c:188 #, c-format msgid "User ‘%s’ has no time limits enabled" msgstr "" #: pam/pam_malcontent.c:151 pam/pam_malcontent.c:172 #, c-format msgid "Error getting session limits for user ‘%s’: %s" msgstr "" #: pam/pam_malcontent.c:182 #, c-format msgid "User ‘%s’ has no time remaining" msgstr "" #: pam/pam_malcontent.c:200 #, c-format msgid "Error setting time limit on login session: %s" msgstr "" #~ msgid "No cartoon violence" #~ msgstr "Sense violència en personatges animats" #~ msgid "Cartoon characters in unsafe situations" #~ msgstr "Personatges animats en situacions insegures" #~ msgid "Cartoon characters in aggressive conflict" #~ msgstr "Personatges animats en conflictes agressius" #~ msgid "Graphic violence involving cartoon characters" #~ msgstr "Violència gràfica amb personatges animats" #~ msgid "No fantasy violence" #~ msgstr "Sense violència fantàstica" #~ msgid "Characters in unsafe situations easily distinguishable from reality" #~ msgstr "" #~ "Personatges en situacions insegures fàcilment distingibles de la realitat" #~ msgid "" #~ "Characters in aggressive conflict easily distinguishable from reality" #~ msgstr "" #~ "Personatges en conflictes agressius fàcilment distingibles de la realitat" #~ msgid "Graphic violence easily distinguishable from reality" #~ msgstr "Violència gràfica fàcilment distingible de la realitat" #~ msgid "No realistic violence" #~ msgstr "Sense violència realista" #~ msgid "Mildly realistic characters in unsafe situations" #~ msgstr "Personatges mig reals en situacions insegures" #~ msgid "Depictions of realistic characters in aggressive conflict" #~ msgstr "Representacions de personatges realistes en conflictes agressius" #~ msgid "Graphic violence involving realistic characters" #~ msgstr "Violència gràfica amb personatges realistes" #~ msgid "No bloodshed" #~ msgstr "Sense matances" #~ msgid "Unrealistic bloodshed" #~ msgstr "Matances no realistes" #~ msgid "Realistic bloodshed" #~ msgstr "Matances realistes" #~ msgid "Depictions of bloodshed and the mutilation of body parts" #~ msgstr "Representacions de matances i mutilacions de parts del cos" #~ msgid "No sexual violence" #~ msgstr "Sense violència sexual" #~ msgid "Rape or other violent sexual behavior" #~ msgstr "Violació o altres comportaments sexuals violents" #~ msgid "No references to alcohol" #~ msgstr "Sense referències a l'alcohol" #~ msgid "References to alcoholic beverages" #~ msgstr "Referències a begudes alcohòliques" #~ msgid "Use of alcoholic beverages" #~ msgstr "Ús de begudes alcohòliques" #~ msgid "No references to illicit drugs" #~ msgstr "Sense referències a drogues il·legals" #~ msgid "References to illicit drugs" #~ msgstr "Referències a drogues il·legals" #~ msgid "Use of illicit drugs" #~ msgstr "Ús de drogues il·legals" #~ msgid "References to tobacco products" #~ msgstr "Referències als productes del tàbac" #~ msgid "Use of tobacco products" #~ msgstr "Ús de productes del tàbac" #~ msgid "No nudity of any sort" #~ msgstr "Sense nuesa de cap tipus" #~ msgid "Brief artistic nudity" #~ msgstr "Nuesa artística breu" #~ msgid "Prolonged nudity" #~ msgstr "Nuesa prolongada" #~ msgid "No references or depictions of sexual nature" #~ msgstr "Sense referències o representacions sexuals" #~ msgid "Provocative references or depictions" #~ msgstr "Referències o representacions provocatives" #~ msgid "Sexual references or depictions" #~ msgstr "Referències o representacions sexuals" #~ msgid "Graphic sexual behavior" #~ msgstr "Comportament sexual gràfic" #~ msgid "No profanity of any kind" #~ msgstr "Sense blasfèmia de cap tipus" #~ msgid "Mild or infrequent use of profanity" #~ msgstr "Ús lleu o poc freqüent de la blasfèmia" #~ msgid "Moderate use of profanity" #~ msgstr "Ús moderat de la blasfèmia" #~ msgid "Strong or frequent use of profanity" #~ msgstr "Ús extensiu o freqüent de la blasfèmia" #~ msgid "No inappropriate humor" #~ msgstr "Sense humor inapropiat" #~ msgid "Slapstick humor" #~ msgstr "Humor vulgar" #~ msgid "Vulgar or bathroom humor" #~ msgstr "Humor groller" #~ msgid "Mature or sexual humor" #~ msgstr "Humor adult o sexual" #~ msgid "No discriminatory language of any kind" #~ msgstr "Sense llenguatge discriminatori de cap tipus" #~ msgid "Negativity towards a specific group of people" #~ msgstr "Negatiu respecte a un grup específic de gent" #~ msgid "Discrimination designed to cause emotional harm" #~ msgstr "Discriminació pensada per causar dany emocional" #~ msgid "Explicit discrimination based on gender, sexuality, race or religion" #~ msgstr "" #~ "Discriminació explicita basada en gènere, sexualitat, raça o religió" #~ msgid "No advertising of any kind" #~ msgstr "Sense publicitat de cap tipus" #~ msgid "Product placement" #~ msgstr "Emplaçament de producte" #~ msgid "Explicit references to specific brands or trademarked products" #~ msgstr "" #~ "Referències explícites a marques específiques o productes de marques " #~ "registrades" #~ msgid "No gambling of any kind" #~ msgstr "Sense apostes de cap tipus" #~ msgid "Gambling on random events using tokens or credits" #~ msgstr "Apostes en esdeveniments aleatoris utilitzant testimonis o crèdits" #~ msgid "Gambling using “play” money" #~ msgstr "Apostes usant moneda virtual al joc" #~ msgid "Gambling using real money" #~ msgstr "Apostes usant diners reals" #~ msgid "No ability to spend money" #~ msgstr "Sense possibilitat de gastar diners" #~ msgid "Ability to spend real money in-game" #~ msgstr "Possibilitat de gastar diners de veritat al joc" #~ msgid "No sharing of social network usernames or email addresses" #~ msgstr "" #~ "Sense compartició en les xarxes socials de noms d'usuari ni adreces de " #~ "correu electrònic" #~ msgid "Sharing social network usernames or email addresses" #~ msgstr "" #~ "Compartició en les xarxes socials de noms d'usuari o adreces de correu " #~ "electrònic" #~ msgid "No sharing of user information with 3rd parties" #~ msgstr "No es comparteix informació de l'usuari amb terceres parts" #~ msgid "No sharing of physical location to other users" #~ msgstr "No es comparteix la ubicació física amb altres usuaris" #~ msgid "Sharing physical location to other users" #~ msgstr "Compartició la ubicació física amb altres usuaris" malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/po/cs.po000066400000000000000000000650471505556674000231730ustar00rootroot00000000000000# Czech translations for malcontent package. # Copyright (C) 2020 THE malcontent'S COPYRIGHT HOLDER # This file is distributed under the same license as the malcontent package. # Automatically generated, 2020. # msgid "" msgstr "" "Project-Id-Version: malcontent\n" "Report-Msgid-Bugs-To: https://gitlab.freedesktop.org/pwithnall/malcontent/" "issues\n" "POT-Creation-Date: 2024-03-16 03:25+0000\n" "PO-Revision-Date: 2024-03-17 00:04+0100\n" "Last-Translator: Daniel Rusek \n" "Language-Team: none\n" "Language: cs\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" "X-Generator: Poedit 3.4.2\n" #: accounts-service/com.endlessm.ParentalControls.policy.in:4 msgid "Change your own app filter" msgstr "Měnit filtr vlastních aplikací" #: accounts-service/com.endlessm.ParentalControls.policy.in:5 msgid "Authentication is required to change your app filter." msgstr "Pro změnu vlastního filtru aplikací je vyžadováno ověření." #: accounts-service/com.endlessm.ParentalControls.policy.in:14 msgid "Read your own app filter" msgstr "Číst filtr vlastních aplikací" #: accounts-service/com.endlessm.ParentalControls.policy.in:15 msgid "Authentication is required to read your app filter." msgstr "Pro čtení vlastního filtru aplikací je vyžadováno ověření." #: accounts-service/com.endlessm.ParentalControls.policy.in:24 msgid "Change another user’s app filter" msgstr "Měnit filtr aplikací jiného uživatele" #: accounts-service/com.endlessm.ParentalControls.policy.in:25 msgid "Authentication is required to change another user’s app filter." msgstr "Pro změnu filtru aplikací jiného uživatele je vyžadováno ověření." #: accounts-service/com.endlessm.ParentalControls.policy.in:34 msgid "Read another user’s app filter" msgstr "Číst filtr aplikací jiného uživatele" #: accounts-service/com.endlessm.ParentalControls.policy.in:35 msgid "Authentication is required to read another user’s app filter." msgstr "Pro čtení filtru aplikací jiného uživatele je vyžadováno ověření." #: accounts-service/com.endlessm.ParentalControls.policy.in:44 msgid "Change your own session limits" msgstr "Měnit limity vlastního sezení" #: accounts-service/com.endlessm.ParentalControls.policy.in:45 msgid "Authentication is required to change your session limits." msgstr "Pro změnu limitů vlastního sezení je vyžadováno ověření." #: accounts-service/com.endlessm.ParentalControls.policy.in:54 msgid "Read your own session limits" msgstr "Číst limity vlastního sezení" #: accounts-service/com.endlessm.ParentalControls.policy.in:55 msgid "Authentication is required to read your session limits." msgstr "Pro čtení limitů vlastního sezení je vyžadováno ověření." #: accounts-service/com.endlessm.ParentalControls.policy.in:64 msgid "Change another user’s session limits" msgstr "Měnit limity sezení jiného uživatele" #: accounts-service/com.endlessm.ParentalControls.policy.in:65 msgid "Authentication is required to change another user’s session limits." msgstr "Pro změnu limitů sezení jiného uživatele je vyžadováno ověření." #: accounts-service/com.endlessm.ParentalControls.policy.in:74 msgid "Read another user’s session limits" msgstr "Číst limity sezení jiného uživatele" #: accounts-service/com.endlessm.ParentalControls.policy.in:75 msgid "Authentication is required to read another user’s session limits." msgstr "Pro čtení limitů sezení jiného uživatele je vyžadováno ověření." #: accounts-service/com.endlessm.ParentalControls.policy.in:84 msgid "Change your own account info" msgstr "Měnit informace o vlastním účtu" #: accounts-service/com.endlessm.ParentalControls.policy.in:85 msgid "Authentication is required to change your account info." msgstr "Pro změnu informací o vlastním účtu je vyžadováno ověření." #: accounts-service/com.endlessm.ParentalControls.policy.in:94 msgid "Read your own account info" msgstr "Číst informace o vlastním účtu" #: accounts-service/com.endlessm.ParentalControls.policy.in:95 msgid "Authentication is required to read your account info." msgstr "Pro čtení informací o vlastním účtu je vyžadováno ověření." #: accounts-service/com.endlessm.ParentalControls.policy.in:104 msgid "Change another user’s account info" msgstr "Měnit informace o účtu jiného uživatele" #: accounts-service/com.endlessm.ParentalControls.policy.in:105 msgid "Authentication is required to change another user’s account info." msgstr "Pro změnu informací o účtu jiného uživatele je vyžadováno ověření." #: accounts-service/com.endlessm.ParentalControls.policy.in:114 msgid "Read another user’s account info" msgstr "Číst informace o účtu jiného uživatele" #: accounts-service/com.endlessm.ParentalControls.policy.in:115 msgid "Authentication is required to read another user’s account info." msgstr "Pro čtení informací o účtu jiného uživatele je vyžadováno ověření." #: libmalcontent/app-filter.c:696 #, c-format msgid "App filter for user %u was in an unrecognized format" msgstr "Filtr aplikací pro uživatele %u byl v nerozpoznaném formátu" #: libmalcontent/app-filter.c:727 #, c-format msgid "OARS filter for user %u has an unrecognized kind ‘%s’" msgstr "OARS filtr pro uživatele %u má nerozpoznaný typ ‘%s’" #: libmalcontent/manager.c:283 libmalcontent/manager.c:420 #: libmalcontent/manager.c:803 #, c-format msgid "Not allowed to query parental controls data for user %u" msgstr "" "Není povoleno dotazovat se na data rodičovské kontroly pro uživatele %u" #: libmalcontent/manager.c:288 #, c-format msgid "User %u does not exist" msgstr "Uživatel %u neexistuje" #: libmalcontent/manager.c:296 msgid "System accounts service not available" msgstr "Služba systémových účtů není dostupná" #: libmalcontent/manager.c:402 msgid "App filtering is globally disabled" msgstr "Filtrování aplikací je globálně zakázáno" #: libmalcontent/manager.c:785 msgid "Session limits are globally disabled" msgstr "Limity sezení jsou globálně zakázány" #: libmalcontent/session-limits.c:306 #, c-format msgid "Session limit for user %u was in an unrecognized format" msgstr "Limit sezení pro uživatele %u byl v nerozpoznaném formátu" #: libmalcontent/session-limits.c:328 #, c-format msgid "Session limit for user %u has an unrecognized type ‘%u’" msgstr "Limit sezení pro uživatele %u má nerozpoznaný typ ‘%u’" #: libmalcontent/session-limits.c:346 #, c-format msgid "Session limit for user %u has invalid daily schedule %u–%u" msgstr "Limit sezení pro uživatele %u má neplatný denní rozvrh %u–%u" #. Translators: the placeholder is a user’s full name #: libmalcontent-ui/restrict-applications-dialog.c:256 #, c-format msgid "Restrict %s from using the following installed applications." msgstr "Omezit uživateli %s použití následujících nainstalovaných aplikací." #: libmalcontent-ui/restrict-applications-dialog.ui:6 msgid "Restrict Applications" msgstr "Omezit aplikace" #: libmalcontent-ui/restrict-applications-dialog.ui:22 msgid "Search for applications…" msgstr "Hledat aplikace…" #: libmalcontent-ui/restrict-applications-selector.ui:13 msgid "No applications found to restrict." msgstr "Nenalezeny žádné aplikace k omezení." #. Translators: this is the full name for an unknown user account. #: libmalcontent-ui/user-controls.c:198 libmalcontent-ui/user-controls.c:209 msgid "unknown" msgstr "neznámé" #: libmalcontent-ui/user-controls.c:306 libmalcontent-ui/user-controls.c:394 #: libmalcontent-ui/user-controls.c:647 msgid "Unrestricted" msgstr "Bez omezení" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:476 #, c-format msgid "" "Prevents %s from running web browsers. Limited web content may still be " "available in other applications." msgstr "" "Zabraňuje uživateli %s ve spouštění webových prohlížečů. Omezený webový " "obsah může být stále dostupný v jiných aplikacích." #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:481 #, c-format msgid "Prevents specified applications from being used by %s." msgstr "Zabraňuje v používání určených aplikací uživatelem %s." #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:486 #, c-format msgid "Prevents %s from installing applications." msgstr "Zabraňuje uživateli %s v instalaci aplikací." #: libmalcontent-ui/user-controls.ui:25 msgid "Application Usage Restrictions" msgstr "Omezení použití aplikací" #: libmalcontent-ui/user-controls.ui:28 msgid "Restrict _Web Browsers" msgstr "Omezit _webové prohlížeče" #: libmalcontent-ui/user-controls.ui:51 msgid "_Restrict Applications" msgstr "Omezit _aplikace" #: libmalcontent-ui/user-controls.ui:73 msgid "Software Installation Restrictions" msgstr "Omezení instalace softwaru" #: libmalcontent-ui/user-controls.ui:77 msgid "Restrict Application _Installation" msgstr "Omezit _instalaci aplikací" #: libmalcontent-ui/user-controls.ui:99 msgid "Application _Suitability" msgstr "Vhodno_st aplikací" #: libmalcontent-ui/user-controls.ui:102 msgid "" "Restricts the browsing or installation of applications unsuitable for this " "age or younger." msgstr "" "Omezí prohlížení nebo instalaci aplikací nevhodných pro tento věk nebo " "mladší." #. Translators: This documents the --user command line option to malcontent-control: #: malcontent-control/application.c:102 msgid "User to select in the UI" msgstr "Uživatel ke zvolení v UI" #. Translators: This is a placeholder for a command line argument value: #: malcontent-control/application.c:104 msgid "USERNAME" msgstr "UŽIVATEL" #: malcontent-control/application.c:116 msgid "— view and edit parental controls" msgstr "— zobrazit a upravit rodičovskou kontrolu" #. Translators: This is the title of the main window #. Translators: the name of the application as it appears in a software center #: malcontent-control/application.c:123 malcontent-control/main.ui:17 #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:9 #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:3 msgid "Parental Controls" msgstr "Rodičovská kontrola" #: malcontent-control/application.c:309 msgid "Copyright © 2019, 2020 Endless Mobile, Inc." msgstr "Copyright © 2019, 2020 Endless Mobile, Inc." #. Translators: this should be "translated" to the #. names of people who have translated Malcontent into #. this language, one per line. #: malcontent-control/application.c:314 msgid "translator-credits" msgstr "Daniel Rusek " #. Translators: "Malcontent" is the brand name of this #. project, so should not be translated. #: malcontent-control/application.c:320 msgid "Malcontent Website" msgstr "Webové stránky" #: malcontent-control/application.c:340 msgid "The help contents could not be displayed" msgstr "Obsah nápovědy nemohl být zobrazen" #: malcontent-control/application.c:389 msgid "Failed to load user data from the system" msgstr "Selhalo načtení uživatelských dat ze systému" #: malcontent-control/application.c:391 msgid "Please make sure that the AccountsService is installed and enabled." msgstr "Ověřte prosím, že je AccountsService nainstalováno a povoleno." #. Translators: Replace the link to commonsensemedia.org with some #. * localised guidance for parents/carers on how to set restrictions on #. * their child/caree in a responsible way which is in keeping with the #. * best practice and culture of the region. If no suitable localised #. * guidance exists, and if the default commonsensemedia.org link is not #. * suitable, please file an issue against malcontent so we can discuss #. * further! #. * https://gitlab.freedesktop.org/pwithnall/malcontent/-/issues/new #. #: malcontent-control/application.c:424 #, c-format msgid "" "It’s recommended that restrictions are set as part of an ongoing " "conversation with %s. Read guidance on what to consider." msgstr "" "Je doporučeno, aby byla omezení nastavena jako součást probíhající " "konverzace s %s. Přečtěte si návod na to, co je třeba vzít v úvahu." #: malcontent-control/carousel.ui:38 msgid "Previous Page" msgstr "Předchozí stránka" #: malcontent-control/carousel.ui:57 msgid "Next Page" msgstr "Následující stránka" #: malcontent-control/main.ui:87 msgid "Permission Required" msgstr "Vyžadováno oprávnění" #: malcontent-control/main.ui:88 msgid "" "Permission is required to view and change user parental controls settings." msgstr "" "Pro zobrazení a změnu rodičovské kontroly uživatele je nutné oprávnění." #: malcontent-control/main.ui:110 msgid "No Standard User Accounts" msgstr "Žádný běžný uživatelský účet" #: malcontent-control/main.ui:111 msgid "" "Parental controls can only be applied to standard user\n" "accounts. These can be created in the user settings." msgstr "" "Rodičovská kontrola může být aplikována pouze na standardní uživatelské\n" "účty. Ty mohou být vytvořeny v nastavení uživatelů." #: malcontent-control/main.ui:115 msgid "_User Settings" msgstr "Nastavení _uživatelů" #: malcontent-control/main.ui:138 msgid "Loading…" msgstr "Načítá se…" #: malcontent-control/main.ui:171 msgid "_Help" msgstr "_Nápověda" #: malcontent-control/main.ui:175 msgid "_About Parental Controls" msgstr "O _aplikaci Rodičovská kontrola" #. Translators: the brief summary of the application as it appears in a software center. #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:12 #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:4 msgid "Set parental controls and monitor usage by users" msgstr "Nastavte rodičovskou kontrolu a monitorujte používání uživateli" #. Translators: These are the application description paragraphs in the AppData file. #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:16 msgid "" "Manage users’ parental controls restrictions, controlling how long they can " "use the computer for, what software they can install, and what installed " "software they can run." msgstr "" "Spravujte omezení rodičovské kontroly uživatelů, určující jak dlouho mohou " "používat počítač, jaký software mohou instalovat a jaký software mohou " "spouštět." #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:25 msgid "Main window" msgstr "Hlavní okno" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:40 msgid "The GNOME Project" msgstr "Projekt GNOME" #. Translators: Search terms to find this application. Do NOT translate or localise the semicolons! The list MUST also end with a semicolon! #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:14 msgid "" "parental controls;screen time;app restrictions;web browser restrictions;oars;" "usage;usage limit;kid;child;" msgstr "" "rodičovská kontrola;čas u obrazovky;omezení aplikací;omezení webového " "prohlížeče;oars;použití;omezení použití;dítě;děti;" #: malcontent-control/org.freedesktop.MalcontentControl.policy.in:9 msgid "Manage parental controls" msgstr "Spravovat rodičovskou kontrolu" #: malcontent-control/org.freedesktop.MalcontentControl.policy.in:10 msgid "Authentication is required to read and change user parental controls" msgstr "" "Pro zobrazení a změnu rodičovské kontroly uživatele je vyžadováno ověření" #: malcontent-control/user-selector.c:426 msgid "Your account" msgstr "Váš účet" #. Always allow root, to avoid a situation where this PAM module prevents #. * all users logging in with no way of recovery. #: pam/pam_malcontent.c:142 pam/pam_malcontent.c:188 #, c-format msgid "User ‘%s’ has no time limits enabled" msgstr "Uživatel ‘%s’ nemá nastaveny časové limity" #: pam/pam_malcontent.c:151 pam/pam_malcontent.c:172 #, c-format msgid "Error getting session limits for user ‘%s’: %s" msgstr "Chyba při získávání limitů sezení pro uživatele ‘%s’: %s" #: pam/pam_malcontent.c:182 #, c-format msgid "User ‘%s’ has no time remaining" msgstr "Uživatel ‘%s’ nemá žádný zbývající čas" #: pam/pam_malcontent.c:200 #, c-format msgid "Error setting time limit on login session: %s" msgstr "Chyba při nastavení časového limitu na přihlašovací sezení: %s" #~ msgid "All Ages" #~ msgstr "libovolný věk" #, c-format #~ msgid "%s (%s)" #~ msgstr "%s (%s)" #~ msgid "General" #~ msgstr "Obecné" #~ msgid "ALL" #~ msgstr "VŠECHNY" #~ msgid "Adults Only" #~ msgstr "pouze dospělé" #~ msgid "Mature" #~ msgstr "plnoleté" #~ msgid "Teen" #~ msgstr "mládež" #~ msgid "Everyone 10+" #~ msgstr "všechny 10+" #~ msgid "Everyone" #~ msgstr "všechny" #~ msgid "Early Childhood" #~ msgstr "malé děti" #~ msgid "No cartoon violence" #~ msgstr "Žádné kreslené násilí" #~ msgid "Cartoon characters in unsafe situations" #~ msgstr "Kreslené postavy v nebezpečných situacích" #~ msgid "Cartoon characters in aggressive conflict" #~ msgstr "Kreslené postavy v agresivních střetech" #~ msgid "Graphic violence involving cartoon characters" #~ msgstr "Grafické vyobrazení násilí páchaného na kreslených postavách" #~ msgid "No fantasy violence" #~ msgstr "Žádné fantazie o násilí" #~ msgid "Characters in unsafe situations easily distinguishable from reality" #~ msgstr "Osoby v nebezpečných situacích snadno odlišitelných od skutečnosti" #~ msgid "" #~ "Characters in aggressive conflict easily distinguishable from reality" #~ msgstr "Osoby v agresivních střetech snadno odlišitelných od skutečnosti" #~ msgid "Graphic violence easily distinguishable from reality" #~ msgstr "Grafické násilí snadno odlišitelné od reality" #~ msgid "No realistic violence" #~ msgstr "Žádné realistické násilí" #~ msgid "Mildly realistic characters in unsafe situations" #~ msgstr "Mírně realistické osoby v nebezpečných situacích" #~ msgid "Depictions of realistic characters in aggressive conflict" #~ msgstr "Vyobrazení skutečných osob v agresivních konfliktech" #~ msgid "Graphic violence involving realistic characters" #~ msgstr "Grafické násilí páchané na skutečných osobách" #~ msgid "No bloodshed" #~ msgstr "Žádné zabíjení" #~ msgid "Unrealistic bloodshed" #~ msgstr "Nerealistické zabíjení" #~ msgid "Realistic bloodshed" #~ msgstr "Realistické zabíjení" #~ msgid "Depictions of bloodshed and the mutilation of body parts" #~ msgstr "Vyobrazení krveprolití a mrzačení lidí" #~ msgid "No sexual violence" #~ msgstr "Žádné sexuální násilí" #~ msgid "Rape or other violent sexual behavior" #~ msgstr "Znásilnění nebo jiné násilné sexuální chování" #~ msgid "No references to alcohol" #~ msgstr "Žádné zmínky o alkoholu" #~ msgid "References to alcoholic beverages" #~ msgstr "Zmínky o alkoholických nápojích" #~ msgid "Use of alcoholic beverages" #~ msgstr "Požívání alkoholických nápojů" #~ msgid "No references to illicit drugs" #~ msgstr "Žádné zmínky o zakázaných drogách" #~ msgid "References to illicit drugs" #~ msgstr "Zmínky o zakázaných drogách" #~ msgid "Use of illicit drugs" #~ msgstr "Používání zakázaných drog" #~ msgid "References to tobacco products" #~ msgstr "Zmínky o tabákových výrobcích" #~ msgid "Use of tobacco products" #~ msgstr "Používání tabákových výrobků" #~ msgid "No nudity of any sort" #~ msgstr "Žádná nahota jakéhokoliv typu" #~ msgid "Brief artistic nudity" #~ msgstr "Občasná umělecká nahota" #~ msgid "Prolonged nudity" #~ msgstr "Dlouhotrvající nahota" #~ msgid "No references or depictions of sexual nature" #~ msgstr "Žádné zmínky o sexu nebo jeho vyobrazení" #~ msgid "Provocative references or depictions" #~ msgstr "Provokativní zmínky nebo vyobrazení" #~ msgid "Sexual references or depictions" #~ msgstr "Zmínky o sexu nebo jeho vyobrazení" #~ msgid "Graphic sexual behavior" #~ msgstr "Grafické znázornění sexuálního chování" #~ msgid "No profanity of any kind" #~ msgstr "Žádné vulgární výrazy jakéhokoliv typu" #~ msgid "Mild or infrequent use of profanity" #~ msgstr "Lehké nebo občasné používání vulgárních výrazů" #~ msgid "Moderate use of profanity" #~ msgstr "Střídmé používání vulgárních výrazů" #~ msgid "Strong or frequent use of profanity" #~ msgstr "Hrubé nebo časté používání vulgárních výrazů" #~ msgid "No inappropriate humor" #~ msgstr "Žádný nevhodný humor" #~ msgid "Slapstick humor" #~ msgstr "Bláznivý humor" #~ msgid "Vulgar or bathroom humor" #~ msgstr "Vulgární nebo postelový humor" #~ msgid "Mature or sexual humor" #~ msgstr "Humor o sexu a pro dospělé" #~ msgid "No discriminatory language of any kind" #~ msgstr "Žádné diskriminační řeči jakéhokoliv druhu" #~ msgid "Negativity towards a specific group of people" #~ msgstr "Špatný pohled na konkrétní skupinu lidí" #~ msgid "Discrimination designed to cause emotional harm" #~ msgstr "Diskriminace cílící na způsobení citové újmy" #~ msgid "Explicit discrimination based on gender, sexuality, race or religion" #~ msgstr "" #~ "Výslovná diskriminace založená na pohlaví, sexuální orientaci, rase nebo " #~ "náboženství" #~ msgid "No advertising of any kind" #~ msgstr "Žádná reklama jakéhokoliv druhu" #~ msgid "Product placement" #~ msgstr "Vyobrazení produktů" #~ msgid "Explicit references to specific brands or trademarked products" #~ msgstr "Výslovné odkazy na konkrétní výrobce nebo značky výrobků" #~ msgid "Users are encouraged to purchase specific real-world items" #~ msgstr "Uživatelé jsou vybízení k nákupu konkrétního skutečného zboží" #~ msgid "No gambling of any kind" #~ msgstr "Žádné hraní jakéhokoliv druhu" #~ msgid "Gambling on random events using tokens or credits" #~ msgstr "Příležitostné hraní s žetony nebo kreditem" #~ msgid "Gambling using “play” money" #~ msgstr "Hraní o fiktivní peníze" #~ msgid "Gambling using real money" #~ msgstr "Hraní o skutečné peníze" #~ msgid "No ability to spend money" #~ msgstr "Žádná možnost prohrát skutečné peníze" #~ msgid "Users are encouraged to donate real money" #~ msgstr "Uživatelé jsou vybízení k přispění skutečnými penězi" #~ msgid "Ability to spend real money in-game" #~ msgstr "Možnost prohrát skutečné peníze" #~ msgid "No way to chat with other users" #~ msgstr "Žádný způsob, jak komunikovat s ostatními uživateli" #~ msgid "Moderated chat functionality between users" #~ msgstr "Moderovaná textová komunikace mezi uživateli" #~ msgid "Uncontrolled chat functionality between users" #~ msgstr "Neřízená textová komunikace mezi uživateli" #~ msgid "No way to talk with other users" #~ msgstr "Žádný způsob, jako hovořit s ostatními uživateli" #~ msgid "Uncontrolled audio or video chat functionality between users" #~ msgstr "Neřízená zvuková nebo obrazová komunikace mezi uživateli" #~ msgid "No sharing of social network usernames or email addresses" #~ msgstr "" #~ "Žádné sdílení uživatelských jmen ze sociálních sítí a e-mailových adres" #~ msgid "Sharing social network usernames or email addresses" #~ msgstr "Sdílení uživatelských jmen ze sociálních sítí a e-mailových adres" #~ msgid "No sharing of user information with 3rd parties" #~ msgstr "Žádné sdílení informací o uživateli se třetími stranami" #~ msgid "Checking for the latest application version" #~ msgstr "Zjišťuje se nejnovější verze aplikace" #~ msgid "Sharing diagnostic data that does not let others identify the user" #~ msgstr "" #~ "Sdílení diagnostických dat, dle kterých se nedá identifikovat uživatel" #~ msgid "Sharing information that lets others identify the user" #~ msgstr "Sdílení informací, dle kterých se dá identifikovat uživatel" #~ msgid "No sharing of physical location to other users" #~ msgstr "Žádné sdílení fyzické polohy s ostatními uživateli" #~ msgid "Sharing physical location to other users" #~ msgstr "Sdílení fyzické polohy s ostatními uživateli" #~ msgid "No references to homosexuality" #~ msgstr "Žádné zmínky o homosexualitě" #~ msgid "Indirect references to homosexuality" #~ msgstr "Nepřímé zmínky o homosexualitě" #~ msgid "Kissing between people of the same gender" #~ msgstr "Polibky dvou lidí stejného pohlaví" #~ msgid "Graphic sexual behavior between people of the same gender" #~ msgstr "Grafické vyobrazení sexuálního chování mezi lidmi stejného pohlaví" #~ msgid "No references to prostitution" #~ msgstr "Žádné zmínky o prostituci" #~ msgid "Indirect references to prostitution" #~ msgstr "Nepřímé zmínky o prostituci" #~ msgid "Direct references to prostitution" #~ msgstr "Přímé zmínky o prostituci" #~ msgid "Graphic depictions of the act of prostitution" #~ msgstr "Grafické vyobrazení aktu prostituce" #~ msgid "No references to adultery" #~ msgstr "Žádné zmínky o cizoložství" #~ msgid "Indirect references to adultery" #~ msgstr "Nepřímé zmínky o cizoložství" #~ msgid "Direct references to adultery" #~ msgstr "Přímé zmínky o cizoložství" #~ msgid "Graphic depictions of the act of adultery" #~ msgstr "Grafické vyobrazení aktu cizoložství" #~ msgid "No sexualized characters" #~ msgstr "Žádné sexualizované postavy" #~ msgid "Scantily clad human characters" #~ msgstr "Skrovně oděné lidské postavy" #~ msgid "Overtly sexualized human characters" #~ msgstr "Otevřeně sexualizované lidské postavy" #~ msgid "No references to desecration" #~ msgstr "Žádné zmínky o znesvěcení" #~ msgid "Depictions of modern-day human desecration" #~ msgstr "Vyobrazení znesvěcení lidmi v moderní době" #~ msgid "Graphic depictions of modern-day desecration" #~ msgstr "Grafické vyobrazení znesvěcení v moderní době" #~ msgid "No visible dead human remains" #~ msgstr "Žádné viditelné pozůstatky lidských mrtvol" #~ msgid "Visible dead human remains" #~ msgstr "Viditelné pozůstatky lidských mrtvol" #~ msgid "Dead human remains that are exposed to the elements" #~ msgstr "Ostatky lidských mrtvol zabrané do detailů" #~ msgid "Graphic depictions of desecration of human bodies" #~ msgstr "Grafické vyobrazení znesvěcení lidských těl" #~ msgid "No references to slavery" #~ msgstr "Žádné zmínky o otroctví" #~ msgid "Depictions of modern-day slavery" #~ msgstr "Vyobrazení otroctví v moderní době" #~ msgid "Graphic depictions of modern-day slavery" #~ msgstr "Grafické vyobrazení otroctví v moderní době" malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/po/da.po000066400000000000000000000422421505556674000231420ustar00rootroot00000000000000# Danish translation for malcontent. # Copyright (C) 2020 malcontent's COPYRIGHT HOLDER # This file is distributed under the same license as the malcontent package. # scootergrisen, 2020. # scootergrisen: oversættelsen er ikke afprøvet # scootergrisen: tjek følgende i malcontent og malcontent-help: # scootergrisen: restrict - begræns (ikke sikkert den er god) - forhindr - bloker # scootergrisen: age - aldersgruppe - måske alder # scootergrisen: change - ændr - måske skift msgid "" msgstr "" "Project-Id-Version: malcontent master\n" "Report-Msgid-Bugs-To: https://gitlab.freedesktop.org/pwithnall/malcontent/" "issues\n" "POT-Creation-Date: 2020-11-18 03:27+0000\n" "PO-Revision-Date: 2020-11-18 00:00+0200\n" "Last-Translator: scootergrisen\n" "Language-Team: Danish\n" "Language: da\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: accounts-service/com.endlessm.ParentalControls.policy.in:4 msgid "Change your own app filter" msgstr "Ændr dit eget programfilter" #: accounts-service/com.endlessm.ParentalControls.policy.in:5 msgid "Authentication is required to change your app filter." msgstr "Der kræves godkendelse for at ændre dit eget programfilter." #: accounts-service/com.endlessm.ParentalControls.policy.in:14 msgid "Read your own app filter" msgstr "Læs dit eget programfilter" #: accounts-service/com.endlessm.ParentalControls.policy.in:15 msgid "Authentication is required to read your app filter." msgstr "Der kræves godkendelse for at læse dit eget programfilter." #: accounts-service/com.endlessm.ParentalControls.policy.in:24 msgid "Change another user’s app filter" msgstr "Ændr en anden brugers programfilter" #: accounts-service/com.endlessm.ParentalControls.policy.in:25 msgid "Authentication is required to change another user’s app filter." msgstr "Der kræves godkendelse for at ændre en anden brugers programfilter." #: accounts-service/com.endlessm.ParentalControls.policy.in:34 msgid "Read another user’s app filter" msgstr "Læs en anden brugers programfilter" #: accounts-service/com.endlessm.ParentalControls.policy.in:35 msgid "Authentication is required to read another user’s app filter." msgstr "Der kræves godkendelse for at læse en anden brugers programfilter." #: accounts-service/com.endlessm.ParentalControls.policy.in:44 msgid "Change your own session limits" msgstr "Ændr dine egne sessionsgrænser" #: accounts-service/com.endlessm.ParentalControls.policy.in:45 msgid "Authentication is required to change your session limits." msgstr "Der kræves godkendelse for at ændre dine egne sessionsgrænser." #: accounts-service/com.endlessm.ParentalControls.policy.in:54 msgid "Read your own session limits" msgstr "Læs dine egne sessionsgrænser" #: accounts-service/com.endlessm.ParentalControls.policy.in:55 msgid "Authentication is required to read your session limits." msgstr "Der kræves godkendelse for at læse dine egne sessionsgrænser." #: accounts-service/com.endlessm.ParentalControls.policy.in:64 msgid "Change another user’s session limits" msgstr "Ændr en anden brugers sessionsgrænser" #: accounts-service/com.endlessm.ParentalControls.policy.in:65 msgid "Authentication is required to change another user’s session limits." msgstr "Der kræves godkendelse for at ændre en anden brugers sessionsgrænser." #: accounts-service/com.endlessm.ParentalControls.policy.in:74 msgid "Read another user’s session limits" msgstr "Læs en anden brugers sessionsgrænser" #: accounts-service/com.endlessm.ParentalControls.policy.in:75 msgid "Authentication is required to read another user’s session limits." msgstr "Der kræves godkendelse for at læse en anden brugers sessionsgrænser." #: accounts-service/com.endlessm.ParentalControls.policy.in:84 msgid "Change your own account info" msgstr "Ændr din egen kontoinformation" #: accounts-service/com.endlessm.ParentalControls.policy.in:85 msgid "Authentication is required to change your account info." msgstr "Der kræves godkendelse for at ændre din egen kontoinformation." #: accounts-service/com.endlessm.ParentalControls.policy.in:94 msgid "Read your own account info" msgstr "Læs din egen kontoinformation" #: accounts-service/com.endlessm.ParentalControls.policy.in:95 msgid "Authentication is required to read your account info." msgstr "Der kræves godkendelse for at læse din egen kontoinformation." #: accounts-service/com.endlessm.ParentalControls.policy.in:104 msgid "Change another user’s account info" msgstr "Ændr en anden brugers kontoinformation" #: accounts-service/com.endlessm.ParentalControls.policy.in:105 msgid "Authentication is required to change another user’s account info." msgstr "Der kræves godkendelse for at ændre en anden brugers kontoinformation." #: accounts-service/com.endlessm.ParentalControls.policy.in:114 msgid "Read another user’s account info" msgstr "Læs en anden brugers kontoinformation" #: accounts-service/com.endlessm.ParentalControls.policy.in:115 msgid "Authentication is required to read another user’s account info." msgstr "Der kræves godkendelse for at læse en anden brugers kontoinformation." #: libmalcontent/app-filter.c:694 #, c-format msgid "App filter for user %u was in an unrecognized format" msgstr "Programfilteret til brugeren %u var i et format som ikke blev genkendt" # scootergrisen: tjek oversættelsen af "kind" #: libmalcontent/app-filter.c:725 #, c-format msgid "OARS filter for user %u has an unrecognized kind ‘%s’" msgstr "OARS-filteret til brugeren %u har en slags “%s” som ikke blev genkendt" #: libmalcontent/manager.c:283 libmalcontent/manager.c:420 #: libmalcontent/manager.c:803 #, c-format msgid "Not allowed to query parental controls data for user %u" msgstr "" "Har ikke tilladelse til at forespørge forældrestyringsdata til brugeren %u" #: libmalcontent/manager.c:288 #, c-format msgid "User %u does not exist" msgstr "Brugeren %u findes ikke" #: libmalcontent/manager.c:296 msgid "System accounts service not available" msgstr "Systemets kontitjeneste ikke tilgængeligt" #: libmalcontent/manager.c:402 msgid "App filtering is globally disabled" msgstr "Programfiltrering er deaktiveret globalt" #: libmalcontent/manager.c:785 msgid "Session limits are globally disabled" msgstr "Sessionsgrænser er deaktiveret globalt" #: libmalcontent/session-limits.c:306 #, c-format msgid "Session limit for user %u was in an unrecognized format" msgstr "Sessionsgrænse til brugeren %u var i et format som ikke blev genkendt" #: libmalcontent/session-limits.c:328 #, c-format msgid "Session limit for user %u has an unrecognized type ‘%u’" msgstr "Sessionsgrænse til brugeren %u har en type “%u” som ikke blev genkendt" #: libmalcontent/session-limits.c:346 #, c-format msgid "Session limit for user %u has invalid daily schedule %u–%u" msgstr "Sessionsgrænse til brugeren %u har ugyldig daglig planlægning %u–%u" #. TRANSLATORS: This is the formatting of English and localized name #. of the rating e.g. "Adults Only (solo adultos)" #: libmalcontent-ui/gs-content-rating.c:75 #, c-format msgid "%s (%s)" msgstr "%s (%s)" #: libmalcontent-ui/gs-content-rating.c:209 msgid "General" msgstr "Generelt" #: libmalcontent-ui/gs-content-rating.c:218 msgid "ALL" msgstr "ALLE" #: libmalcontent-ui/gs-content-rating.c:222 #: libmalcontent-ui/gs-content-rating.c:485 msgid "Adults Only" msgstr "Kun voksne" # scootergrisen: fra gennemlæsning: Jeg ved ikke helt hvilken aldersgruppe, de mener, men måske store teenagere #: libmalcontent-ui/gs-content-rating.c:224 #: libmalcontent-ui/gs-content-rating.c:484 msgid "Mature" msgstr "Modne" #: libmalcontent-ui/gs-content-rating.c:226 #: libmalcontent-ui/gs-content-rating.c:483 msgid "Teen" msgstr "Teenagere" #: libmalcontent-ui/gs-content-rating.c:228 #: libmalcontent-ui/gs-content-rating.c:482 msgid "Everyone 10+" msgstr "10 år og op" #: libmalcontent-ui/gs-content-rating.c:230 #: libmalcontent-ui/gs-content-rating.c:481 msgid "Everyone" msgstr "Alle" #: libmalcontent-ui/gs-content-rating.c:232 #: libmalcontent-ui/gs-content-rating.c:480 msgid "Early Childhood" msgstr "Småbørn" #. Translators: the placeholder is a user’s full name #: libmalcontent-ui/restrict-applications-dialog.c:222 #, c-format msgid "Restrict %s from using the following installed applications." msgstr "Begræns %s i at bruge følgende installerede programmer." #: libmalcontent-ui/restrict-applications-dialog.ui:6 #: libmalcontent-ui/restrict-applications-dialog.ui:12 msgid "Restrict Applications" msgstr "Begræns programmer" #: libmalcontent-ui/restrict-applications-selector.ui:24 msgid "No applications found to restrict." msgstr "Fandt ingen programmer at begrænse." #. Translators: this is the full name for an unknown user account. #: libmalcontent-ui/user-controls.c:243 libmalcontent-ui/user-controls.c:254 msgid "unknown" msgstr "ukendt" #: libmalcontent-ui/user-controls.c:348 libmalcontent-ui/user-controls.c:435 #: libmalcontent-ui/user-controls.c:741 msgid "All Ages" msgstr "Alle aldersgrupper" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:530 #, c-format msgid "" "Prevents %s from running web browsers. Limited web content may still be " "available in other applications." msgstr "" "Forhindrer %s i at køre webbrowsere. Begrænset webindhold kan stadigvæk være " "tilgængelig i andre programmer." #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:535 #, c-format msgid "Prevents specified applications from being used by %s." msgstr "Forhindrer %s i at bruge de angivne programmer." #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:540 #, c-format msgid "Prevents %s from installing applications." msgstr "Forhindrer %s i at installere programmer." #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:545 #, c-format msgid "Applications installed by %s will not appear for other users." msgstr "" "Programmer, som er blevet installeret af %s, vises ikke for andre brugere." #: libmalcontent-ui/user-controls.ui:17 msgid "Application Usage Restrictions" msgstr "Begrænsninger for anvendelse af programmer" #: libmalcontent-ui/user-controls.ui:68 msgid "Restrict _Web Browsers" msgstr "Begræns _webbrowsere" #: libmalcontent-ui/user-controls.ui:152 msgid "_Restrict Applications" msgstr "Begræns _programmer" #: libmalcontent-ui/user-controls.ui:231 msgid "Software Installation Restrictions" msgstr "Begrænsninger for softwareinstallation" #: libmalcontent-ui/user-controls.ui:281 msgid "Restrict Application _Installation" msgstr "Begræns program_installation" #: libmalcontent-ui/user-controls.ui:366 msgid "Restrict Application Installation for _Others" msgstr "Begræns programinstallation for _andre" #: libmalcontent-ui/user-controls.ui:451 msgid "Application _Suitability" msgstr "Program_egnethed" #: libmalcontent-ui/user-controls.ui:473 msgid "" "Restricts browsing or installation of applications to applications suitable " "for certain ages or above." msgstr "" "Begrænser gennemgang eller installation af programmer til programmer som er " "egnet til bestemte aldersgrupper eller ældre." #. Translators: This documents the --user command line option to malcontent-control: #: malcontent-control/application.c:101 msgid "User to select in the UI" msgstr "Brugeren som skal vælges i brugerfladen" #. Translators: This is a placeholder for a command line argument value: #: malcontent-control/application.c:103 msgid "USERNAME" msgstr "BRUGERNAVN" #: malcontent-control/application.c:114 msgid "— view and edit parental controls" msgstr "— vis og rediger forældrestyring" #. Translators: This is the title of the main window #. Translators: the name of the application as it appears in a software center #: malcontent-control/application.c:121 malcontent-control/main.ui:12 #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:9 #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:3 msgid "Parental Controls" msgstr "Forældrestyring" #: malcontent-control/application.c:306 msgid "Copyright © 2019, 2020 Endless Mobile, Inc." msgstr "Ophavsret © 2019, 2020 Endless Mobile, Inc." #. Translators: this should be "translated" to the #. names of people who have translated Malcontent into #. this language, one per line. #: malcontent-control/application.c:311 msgid "translator-credits" msgstr "scootergrisen" #. Translators: "Malcontent" is the brand name of this #. project, so should not be translated. #: malcontent-control/application.c:317 msgid "Malcontent Website" msgstr "Malcontents websted" #: malcontent-control/application.c:335 msgid "The help contents could not be displayed" msgstr "Hjælpeindholdet kunne ikke vises" #: malcontent-control/application.c:372 msgid "Failed to load user data from the system" msgstr "Kunne ikke indlæse brugerdata fra systemet" #: malcontent-control/application.c:374 msgid "Please make sure that the AccountsService is installed and enabled." msgstr "Sørg venligst for at AccountsService er installeret og aktiveret." #: malcontent-control/carousel.ui:48 msgid "Previous Page" msgstr "Forrige side" #: malcontent-control/carousel.ui:74 msgid "Next Page" msgstr "Næste side" #: malcontent-control/main.ui:93 msgid "Permission Required" msgstr "Kræver tilladelse" #: malcontent-control/main.ui:107 msgid "" "Permission is required to view and change user parental controls settings." msgstr "" "Der kræves tilladelse for at vise og ændre brugerens " "forældrestyringsindstillinger." # scootergrisen: fra gennemlæsning: Er det nogen som bruger børn? # scootergrisen: fra gennemlæsning: brug f.eks.: mindreårige brugere (og i flere efterfølgende - også i help) #: malcontent-control/main.ui:148 msgid "No Child Users Configured" msgstr "Der er ikke konfigureret nogen barnebrugere" #: malcontent-control/main.ui:162 msgid "" "No child users are currently set up on the system. Create one before setting " "up their parental controls." msgstr "" "Der er ikke opsat nogen barnebrugere på systemet i øjeblikket. Opret en " "inden opsætningen af dens forældrestyring." #: malcontent-control/main.ui:174 msgid "Create _Child User" msgstr "Opret _barnebruger" #: malcontent-control/main.ui:202 msgid "Loading…" msgstr "Indlæser …" #: malcontent-control/main.ui:265 msgid "_Help" msgstr "_Hjælp" #: malcontent-control/main.ui:269 msgid "_About Parental Controls" msgstr "_Om Forældrestyring" #. Translators: the brief summary of the application as it appears in a software center. #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:12 #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:4 msgid "Set parental controls and monitor usage by users" msgstr "Indstil forældrestyring og overvåg brugernes anvendelse" #. Translators: These are the application description paragraphs in the AppData file. #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:16 msgid "" "Manage users’ parental controls restrictions, controlling how long they can " "use the computer for, what software they can install, and what installed " "software they can run." msgstr "" "Håndter brugernes forældrestyringsbegrænsninger, styring af hvor længe de " "kan bruge computeren, hvilke software de kan installere og hvilke " "installeret software de kan køre." #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:25 msgid "Main window" msgstr "Hovedvindue" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:38 msgid "The GNOME Project" msgstr "GNOME-projektet" #. Translators: Search terms to find this application. Do NOT translate or localise the semicolons! The list MUST also end with a semicolon! #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:13 msgid "" "parental controls;screen time;app restrictions;web browser restrictions;oars;" "usage;usage limit;kid;child;" msgstr "" "forældrestyring;skærmtid;programbegrænsninger;webbrowserbegrænsninger;oars;" "anvendelse;anvendelsesbegrænsning;barn;børn;" #: malcontent-control/org.freedesktop.MalcontentControl.policy.in:9 msgid "Manage parental controls" msgstr "Håndter forældrestyring" #: malcontent-control/org.freedesktop.MalcontentControl.policy.in:10 msgid "Authentication is required to read and change user parental controls" msgstr "Der kræves godkendelse for at læse og ændre brugerens forældrestyring" #: malcontent-control/user-selector.c:426 msgid "Your account" msgstr "Din konto" #. Always allow root, to avoid a situation where this PAM module prevents #. * all users logging in with no way of recovery. #: pam/pam_malcontent.c:142 pam/pam_malcontent.c:188 #, c-format msgid "User ‘%s’ has no time limits enabled" msgstr "Brugeren “%s” har ingen tidsgrænser aktiveret" #: pam/pam_malcontent.c:151 pam/pam_malcontent.c:172 #, c-format msgid "Error getting session limits for user ‘%s’: %s" msgstr "Fejl ved hentning af sessionsgrænser for brugeren “%s”: %s" #: pam/pam_malcontent.c:182 #, c-format msgid "User ‘%s’ has no time remaining" msgstr "Brugeren “%s” har ikke mere tid tilbage" #: pam/pam_malcontent.c:200 #, c-format msgid "Error setting time limit on login session: %s" msgstr "Fejl ved indstilling af tidsgrænse i indlogningssession: %s" malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/po/de.po000066400000000000000000000702501505556674000231460ustar00rootroot00000000000000# German translations for malcontent package. # Copyright (C) 2020 THE malcontent'S COPYRIGHT HOLDER # This file is distributed under the same license as the malcontent package. # Automatically generated, 2020. # msgid "" msgstr "" "Project-Id-Version: malcontent\n" "Report-Msgid-Bugs-To: https://gitlab.freedesktop.org/pwithnall/malcontent/" "issues\n" "POT-Creation-Date: 2021-10-12 15:28+0000\n" "PO-Revision-Date: 2021-04-11 14:21+0200\n" "Last-Translator: Tim Sabsch \n" "Language-Team: none\n" "Language: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Poedit 2.4.2\n" #: accounts-service/com.endlessm.ParentalControls.policy.in:4 msgid "Change your own app filter" msgstr "Ihren eigenen Anwendungsfilter ändern" #: accounts-service/com.endlessm.ParentalControls.policy.in:5 msgid "Authentication is required to change your app filter." msgstr "Legitimierung ist erforderlich, um Ihren Anwendungsfilter zu ändern." #: accounts-service/com.endlessm.ParentalControls.policy.in:14 msgid "Read your own app filter" msgstr "Ihren eigenen Anwendungsfilter ansehen" #: accounts-service/com.endlessm.ParentalControls.policy.in:15 msgid "Authentication is required to read your app filter." msgstr "Legitimierung ist erforderlich, um Ihren Anwendungsfilter anzusehen." #: accounts-service/com.endlessm.ParentalControls.policy.in:24 msgid "Change another user’s app filter" msgstr "Anwendungsfilter eines anderen Nutzers ändern" #: accounts-service/com.endlessm.ParentalControls.policy.in:25 msgid "Authentication is required to change another user’s app filter." msgstr "" "Legitimierung ist erforderlich, um den Anwendungsfilter eines anderen " "Nutzers zu ändern." #: accounts-service/com.endlessm.ParentalControls.policy.in:34 msgid "Read another user’s app filter" msgstr "Anwendungsfilter eines anderen Nutzers ansehen" #: accounts-service/com.endlessm.ParentalControls.policy.in:35 msgid "Authentication is required to read another user’s app filter." msgstr "" "Legitimierung ist erforderlich, um den Anwendungsfilter eines anderen " "Nutzers anzusehen." #: accounts-service/com.endlessm.ParentalControls.policy.in:44 msgid "Change your own session limits" msgstr "Ihre eigenen Sitzungsbeschränkungen ändern" #: accounts-service/com.endlessm.ParentalControls.policy.in:45 msgid "Authentication is required to change your session limits." msgstr "" "Legitimierung ist erforderlich, um Ihre Sitzungsbeschränkungen zu ändern." #: accounts-service/com.endlessm.ParentalControls.policy.in:54 msgid "Read your own session limits" msgstr "Ihre eigenen Sitzungsbeschränkungen ansehen" #: accounts-service/com.endlessm.ParentalControls.policy.in:55 msgid "Authentication is required to read your session limits." msgstr "" "Legitimierung ist erforderlich, um Ihre Sitzungsbeschränkungen anzusehen." #: accounts-service/com.endlessm.ParentalControls.policy.in:64 msgid "Change another user’s session limits" msgstr "Sitzungsbeschränkungen eines anderen Nutzers ändern" #: accounts-service/com.endlessm.ParentalControls.policy.in:65 msgid "Authentication is required to change another user’s session limits." msgstr "" "Legitimierung ist erforderlich, um die Sitzungsbeschränkungen eines anderen " "Nutzers zu ändern." #: accounts-service/com.endlessm.ParentalControls.policy.in:74 msgid "Read another user’s session limits" msgstr "Sitzungsbeschränkungen eines anderen Nutzers ansehen" #: accounts-service/com.endlessm.ParentalControls.policy.in:75 msgid "Authentication is required to read another user’s session limits." msgstr "" "Legitimierung ist erforderlich, um die Sitzungsbeschränkungen eines anderen " "Nutzers anzusehen." #: accounts-service/com.endlessm.ParentalControls.policy.in:84 msgid "Change your own account info" msgstr "Eigene Kontoinformationen ändern" #: accounts-service/com.endlessm.ParentalControls.policy.in:85 msgid "Authentication is required to change your account info." msgstr "Legitimierung ist erforderlich, um Ihre Kontoinformationen zu ändern." #: accounts-service/com.endlessm.ParentalControls.policy.in:94 msgid "Read your own account info" msgstr "Eigene Kontoinformationen ansehen" #: accounts-service/com.endlessm.ParentalControls.policy.in:95 msgid "Authentication is required to read your account info." msgstr "Legitimierung ist erforderlich, um Ihre Kontoinformationen anzusehen." #: accounts-service/com.endlessm.ParentalControls.policy.in:104 msgid "Change another user’s account info" msgstr "Kontoinformationen eines anderen Nutzers ändern" #: accounts-service/com.endlessm.ParentalControls.policy.in:105 msgid "Authentication is required to change another user’s account info." msgstr "" "Legitimierung ist erforderlich, um die Kontoinformationen eines anderen " "Nutzers zu ändern." #: accounts-service/com.endlessm.ParentalControls.policy.in:114 msgid "Read another user’s account info" msgstr "Kontoinformationen eines anderen Nutzers ansehen" #: accounts-service/com.endlessm.ParentalControls.policy.in:115 msgid "Authentication is required to read another user’s account info." msgstr "" "Legitimierung ist erforderlich, um die Kontoinformationen eines anderen " "Nutzers anzusehen." #: libmalcontent/app-filter.c:694 #, c-format msgid "App filter for user %u was in an unrecognized format" msgstr "Anwendungsfilter für Nutzer %u war in einem unbekannten Format" #: libmalcontent/app-filter.c:725 #, c-format msgid "OARS filter for user %u has an unrecognized kind ‘%s’" msgstr "OARS-Filter für den Nutzer %u hat ein unbekanntes Element »%s«" #: libmalcontent/manager.c:283 libmalcontent/manager.c:420 #: libmalcontent/manager.c:803 #, c-format msgid "Not allowed to query parental controls data for user %u" msgstr "Nicht zur Abfrage der Kindersicherungsdaten des Nutzers %u berechtigt" #: libmalcontent/manager.c:288 #, c-format msgid "User %u does not exist" msgstr "Nutzer %u existiert nicht" #: libmalcontent/manager.c:296 msgid "System accounts service not available" msgstr "Kontendienst nicht verfügbar" #: libmalcontent/manager.c:402 msgid "App filtering is globally disabled" msgstr "Filtern von Anwendungen ist global deaktiviert" #: libmalcontent/manager.c:785 msgid "Session limits are globally disabled" msgstr "Sitzungsbeschränkungen sind global deaktiviert" #: libmalcontent/session-limits.c:306 #, c-format msgid "Session limit for user %u was in an unrecognized format" msgstr "Sitzungsbeschränkung für Nutzer %u war in einem unbekannten Format" #: libmalcontent/session-limits.c:328 #, c-format msgid "Session limit for user %u has an unrecognized type ‘%u’" msgstr "Sitzungsbeschränkung des Nutzers %u hat einen unbekannten Typ »%u«" #: libmalcontent/session-limits.c:346 #, c-format msgid "Session limit for user %u has invalid daily schedule %u–%u" msgstr "" "Sitzungsbeschränkung für Nutzer %u hat einen ungültigen täglichen Plan %u–%u" #. TRANSLATORS: This is the formatting of English and localized name #. of the rating e.g. "Adults Only (solo adultos)" #: libmalcontent-ui/gs-content-rating.c:75 #, c-format msgid "%s (%s)" msgstr "%s (%s)" #: libmalcontent-ui/gs-content-rating.c:209 msgid "General" msgstr "Allgemein" #: libmalcontent-ui/gs-content-rating.c:218 msgid "ALL" msgstr "ALLE" #: libmalcontent-ui/gs-content-rating.c:222 #: libmalcontent-ui/gs-content-rating.c:485 msgid "Adults Only" msgstr "Nur Erwachsene" #: libmalcontent-ui/gs-content-rating.c:224 #: libmalcontent-ui/gs-content-rating.c:484 msgid "Mature" msgstr "Erwachsen" #: libmalcontent-ui/gs-content-rating.c:226 #: libmalcontent-ui/gs-content-rating.c:483 msgid "Teen" msgstr "Jugendliche" #: libmalcontent-ui/gs-content-rating.c:228 #: libmalcontent-ui/gs-content-rating.c:482 msgid "Everyone 10+" msgstr "Alle ab 10 Jahren" #: libmalcontent-ui/gs-content-rating.c:230 #: libmalcontent-ui/gs-content-rating.c:481 msgid "Everyone" msgstr "Jeder" #: libmalcontent-ui/gs-content-rating.c:232 #: libmalcontent-ui/gs-content-rating.c:480 msgid "Early Childhood" msgstr "Frühe Kindheit" #. Translators: the placeholder is a user’s full name #: libmalcontent-ui/restrict-applications-dialog.c:222 #, c-format msgid "Restrict %s from using the following installed applications." msgstr "Hindern Sie %s an der Nutzung folgender installierter Anwendungen." #: libmalcontent-ui/restrict-applications-dialog.ui:6 #: libmalcontent-ui/restrict-applications-dialog.ui:12 msgid "Restrict Applications" msgstr "Anwendungen einschränken" #: libmalcontent-ui/restrict-applications-selector.ui:24 msgid "No applications found to restrict." msgstr "Keine einzuschränkenden Anwendungen gefunden." #. Translators: this is the full name for an unknown user account. #: libmalcontent-ui/user-controls.c:207 libmalcontent-ui/user-controls.c:218 msgid "unknown" msgstr "unbekannt" #: libmalcontent-ui/user-controls.c:312 libmalcontent-ui/user-controls.c:397 #: libmalcontent-ui/user-controls.c:669 msgid "All Ages" msgstr "Alle Altersstufen" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:477 #, c-format msgid "" "Prevents %s from running web browsers. Limited web content may still be " "available in other applications." msgstr "" "Hindert %s, Webbrowser zu nutzen. Inhalte des Internets könnten durch andere " "Anwendungen weiterhin in eingeschränkter Form verfügbar sein." #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:482 #, c-format msgid "Prevents specified applications from being used by %s." msgstr "Hindert %s, bestimmte Anwendungen zu nutzen." #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:487 #, c-format msgid "Prevents %s from installing applications." msgstr "Hindert %s an der Installation von Anwendungen." #: libmalcontent-ui/user-controls.ui:16 msgid "Application Usage Restrictions" msgstr "Einschränkungen der Anwendungsnutzung" #: libmalcontent-ui/user-controls.ui:68 msgid "Restrict _Web Browsers" msgstr "In_ternet-Browser einschränken" #: libmalcontent-ui/user-controls.ui:152 msgid "_Restrict Applications" msgstr "Anwendungen _einschränken" #: libmalcontent-ui/user-controls.ui:231 msgid "Software Installation Restrictions" msgstr "Einschränkungen der Anwendungsinstallation" #: libmalcontent-ui/user-controls.ui:282 msgid "Restrict Application _Installation" msgstr "_Installation von Anwendungen einschränken" #: libmalcontent-ui/user-controls.ui:367 msgid "Application _Suitability" msgstr "_Angemessenheit von Anwendungen" # Browsing = Internetnutzung? #: libmalcontent-ui/user-controls.ui:389 msgid "" "Restricts browsing or installation of applications to applications suitable " "for certain ages or above." msgstr "" "Schränkt die Internetnutzung oder die Installation von Anwendungen auf dem " "Alter angemessene Anwendungen ein." #. Translators: This documents the --user command line option to malcontent-control: #: malcontent-control/application.c:102 msgid "User to select in the UI" msgstr "In der UI auszuwählender Nutzer" #. Translators: This is a placeholder for a command line argument value: #: malcontent-control/application.c:104 msgid "USERNAME" msgstr "BENUTZERNAME" #: malcontent-control/application.c:116 msgid "— view and edit parental controls" msgstr "— Kindersicherung ansehen und bearbeiten" #. Translators: This is the title of the main window #. Translators: the name of the application as it appears in a software center #: malcontent-control/application.c:123 malcontent-control/main.ui:12 #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:9 #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:3 msgid "Parental Controls" msgstr "Kindersicherung" #: malcontent-control/application.c:309 msgid "Copyright © 2019, 2020 Endless Mobile, Inc." msgstr "Copyright © 2019, 2020 Endless Mobile, Inc." #. Translators: this should be "translated" to the #. names of people who have translated Malcontent into #. this language, one per line. #: malcontent-control/application.c:314 msgid "translator-credits" msgstr "" "Philipp Kiemle , 2020.\n" "Christian Kirbach , 2021" #. Translators: "Malcontent" is the brand name of this #. project, so should not be translated. #: malcontent-control/application.c:320 msgid "Malcontent Website" msgstr "Malcontent Website" #: malcontent-control/application.c:338 msgid "The help contents could not be displayed" msgstr "Der Inhalt der Hilfe konnte nicht angezeigt werden" #: malcontent-control/application.c:375 msgid "Failed to load user data from the system" msgstr "Laden der Nutzerdaten vom System fehlgeschlagen" #: malcontent-control/application.c:377 msgid "Please make sure that the AccountsService is installed and enabled." msgstr "" "Bitte stellen Sie sicher, dass der Kontendienst korrekt installiert und " "aktiviert ist." #. Translators: Replace the link to commonsensemedia.org with some #. * localised guidance for parents/carers on how to set restrictions on #. * their child/caree in a responsible way which is in keeping with the #. * best practice and culture of the region. If no suitable localised #. * guidance exists, and if the default commonsensemedia.org link is not #. * suitable, please file an issue against malcontent so we can discuss #. * further! #. * https://gitlab.freedesktop.org/pwithnall/malcontent/-/issues/new #. #: malcontent-control/application.c:408 #, c-format msgid "" "It’s recommended that restrictions are set as part of an ongoing " "conversation with %s. Read guidance on what to consider." msgstr "" "Es wird empfohlen, dass Einschränkungen im Gespräch mit %s festgelegt " "werden. Lesen Sie diese " "Empfehlungen für weitere Informationen." #: malcontent-control/carousel.ui:48 msgid "Previous Page" msgstr "Vorherige Seite" #: malcontent-control/carousel.ui:74 msgid "Next Page" msgstr "Nächste Seite" #: malcontent-control/main.ui:115 msgid "Permission Required" msgstr "Berechtigung erforderlich" #: malcontent-control/main.ui:129 msgid "" "Permission is required to view and change user parental controls settings." msgstr "" "Zum Ansehen und Ändern der Kindersicherungseinstellungen des Nutzers wird " "eine Erlaubnis benötigt." #: malcontent-control/main.ui:184 msgid "No Standard User Accounts" msgstr "Keine Standard-Benutzerkonten" #: malcontent-control/main.ui:199 msgid "" "Parental controls can only be applied to standard user\n" "accounts. These can be created in the user settings." msgstr "" "Kindersicherungen können nur auf Standard-Nutzerkonten angewendet\n" "werden.Diese können in den Nutzereinstellungen erstellt werden." #: malcontent-control/main.ui:212 msgid "_User Settings" msgstr "_Benutzereinstellungen" #: malcontent-control/main.ui:242 msgid "Loading…" msgstr "Wird geladen …" #: malcontent-control/main.ui:305 msgid "_Help" msgstr "_Hilfe" #: malcontent-control/main.ui:309 msgid "_About Parental Controls" msgstr "_Info zu Kindersicherung" #. Translators: the brief summary of the application as it appears in a software center. #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:12 #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:4 msgid "Set parental controls and monitor usage by users" msgstr "Kindersicherungen erstellen und Computernutzung pro Benutzer verwalten" #. Translators: These are the application description paragraphs in the AppData file. #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:16 msgid "" "Manage users’ parental controls restrictions, controlling how long they can " "use the computer for, what software they can install, and what installed " "software they can run." msgstr "" "Die Einschränkungen des Nutzers verwalten, wie lange sie den Computer nutzen " "können, welche Software sie installieren können und welche bereits " "installierte Software ausgeführt werden darf." #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:25 msgid "Main window" msgstr "Hauptfenster" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:39 msgid "The GNOME Project" msgstr "Das GNOME-Projekt" #. Translators: Search terms to find this application. Do NOT translate or localise the semicolons! The list MUST also end with a semicolon! #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:14 msgid "" "parental controls;screen time;app restrictions;web browser restrictions;oars;" "usage;usage limit;kid;child;" msgstr "" "parental controls;screen time;app restrictions;web browser restrictions;oars;" "usage;usage limit;kid;child;kindersicherung;bildschirmzeit;einschränkung;" "oars;limit;kind;" #: malcontent-control/org.freedesktop.MalcontentControl.policy.in:9 msgid "Manage parental controls" msgstr "Kindersicherung verwalten" #: malcontent-control/org.freedesktop.MalcontentControl.policy.in:10 msgid "Authentication is required to read and change user parental controls" msgstr "" "Legitimierung ist erforderlich, um die Kindersicherung einzusehen und zu " "ändern" #: malcontent-control/user-selector.c:426 msgid "Your account" msgstr "Ihr Konto" #. Always allow root, to avoid a situation where this PAM module prevents #. * all users logging in with no way of recovery. #: pam/pam_malcontent.c:142 pam/pam_malcontent.c:188 #, c-format msgid "User ‘%s’ has no time limits enabled" msgstr "Nutzer »%s« hat keine zeitliche Beschränkung aktiviert" #: pam/pam_malcontent.c:151 pam/pam_malcontent.c:172 #, c-format msgid "Error getting session limits for user ‘%s’: %s" msgstr "" "Sitzungsbeschränkungen für Nutzer »%s« konnten nicht ermittelt werden: %s" #: pam/pam_malcontent.c:182 #, c-format msgid "User ‘%s’ has no time remaining" msgstr "Nutzer »%s« hat keine Zeit mehr übrig" #: pam/pam_malcontent.c:200 #, c-format msgid "Error setting time limit on login session: %s" msgstr "Setzen des Zeitlimits für Login-Sitzung fehlgeschlagen: %s" #~ msgid "No cartoon violence" #~ msgstr "Keine Gewalt in Cartoons" #~ msgid "Cartoon characters in unsafe situations" #~ msgstr "Animationsfiguren in unsicheren Situationen" #~ msgid "Cartoon characters in aggressive conflict" #~ msgstr "Animationsfiguren in aggressivem Konflikt" #~ msgid "Graphic violence involving cartoon characters" #~ msgstr "Grafische Gewaltdarstellung durch Animationsfiguren" #~ msgid "No fantasy violence" #~ msgstr "Keine Gewalt in Fantasy" #~ msgid "Characters in unsafe situations easily distinguishable from reality" #~ msgstr "" #~ "Figuren in unsicheren Situationen, die einfach von der Realität zu " #~ "unterscheiden sind" #~ msgid "" #~ "Characters in aggressive conflict easily distinguishable from reality" #~ msgstr "" #~ "Figuren in aggressiven Konflikten, die einfach von der Realität zu " #~ "unterscheiden sind" #~ msgid "Graphic violence easily distinguishable from reality" #~ msgstr "Graphische Gewalt, die realitätsfremd ist" #~ msgid "No realistic violence" #~ msgstr "Keine realistische Gewalt" #~ msgid "Mildly realistic characters in unsafe situations" #~ msgstr "Harmlose realistische Figuren in unsicheren Situationen" #~ msgid "Depictions of realistic characters in aggressive conflict" #~ msgstr "" #~ "Darstellung von realistischen Charakteren, die im aggressiven Konflikt " #~ "zueinander stehen" #~ msgid "Graphic violence involving realistic characters" #~ msgstr "Graphische Gewalt von realistischen Charakteren" #~ msgid "No bloodshed" #~ msgstr "Kein Blutvergießen" #~ msgid "Unrealistic bloodshed" #~ msgstr "Unrealistisches Blutvergießen" #~ msgid "Realistic bloodshed" #~ msgstr "Realistisches Blutvergießen" #~ msgid "Depictions of bloodshed and the mutilation of body parts" #~ msgstr "Darstellung von Blutvergießen und Verstümmeln von Körperteilen" #~ msgid "No sexual violence" #~ msgstr "Keine sexuelle Gewalt" #~ msgid "Rape or other violent sexual behavior" #~ msgstr "Vergewaltigung oder andere gewaltsame Sexualhandlungen" #~ msgid "No references to alcohol" #~ msgstr "Keine Erwähnung alkoholischer Getränke" #~ msgid "References to alcoholic beverages" #~ msgstr "Bezug auf alkoholische Getränke" #~ msgid "Use of alcoholic beverages" #~ msgstr "Genuss von alkoholischen Getränken" #~ msgid "No references to illicit drugs" #~ msgstr "Keine Erwähnung unerlaubter Drogen/Medikamente" #~ msgid "References to illicit drugs" #~ msgstr "Erwähnung unerlaubter Drogen/Medikamente" #~ msgid "Use of illicit drugs" #~ msgstr "Konsum von unerlaubten Drogen/Medikamenten" #~ msgid "References to tobacco products" #~ msgstr "Bezug auf Tabakprodukte" #~ msgid "Use of tobacco products" #~ msgstr "Genuss von Tabakprodukten" #~ msgid "No nudity of any sort" #~ msgstr "Keine Nacktszenen irgendeiner Form" #~ msgid "Brief artistic nudity" #~ msgstr "Kurzzeitige, künstlerische Darbietung von Nacktszenen" #~ msgid "Prolonged nudity" #~ msgstr "Ausgiebige Nacktszenen" #~ msgid "No references or depictions of sexual nature" #~ msgstr "Keine Anspielungen oder Darstellungen sexueller Natur" #~ msgid "Provocative references or depictions" #~ msgstr "Provokative Anspielungen oder Darstellungen" #~ msgid "Sexual references or depictions" #~ msgstr "Sexuelle Anspielungen oder Darstellungen" #~ msgid "Graphic sexual behavior" #~ msgstr "Graphische Sexualhandlungen" #~ msgid "No profanity of any kind" #~ msgstr "Keine Obszönität irgendeiner Art" #~ msgid "Mild or infrequent use of profanity" #~ msgstr "Geringe oder seltene Obszönität" #~ msgid "Moderate use of profanity" #~ msgstr "Gemäßigte Obszönität" #~ msgid "Strong or frequent use of profanity" #~ msgstr "Starke oder häufige Obszönität" #~ msgid "No inappropriate humor" #~ msgstr "Kein unangemessener Humor" #~ msgid "Slapstick humor" #~ msgstr "Slapstick-Humor" #~ msgid "Vulgar or bathroom humor" #~ msgstr "Vulgärer oder Kneipenstammtischhumor" #~ msgid "Mature or sexual humor" #~ msgstr "Nicht jugendfreier oder sexueller Humor" #~ msgid "No discriminatory language of any kind" #~ msgstr "Keine diskriminierende Sprache irgendeiner Art" #~ msgid "Negativity towards a specific group of people" #~ msgstr "Abwertende Äußerungen gegenüber spezifischen Gruppierungen" #~ msgid "Discrimination designed to cause emotional harm" #~ msgstr "Diskriminierung mit dem Ziel der emotionellen Kränkung" #~ msgid "Explicit discrimination based on gender, sexuality, race or religion" #~ msgstr "" #~ "Explizite Diskriminierung von Geschlecht, Sexualität, Rasse oder Religion" #~ msgid "No advertising of any kind" #~ msgstr "Keine Werbung irgendeiner Art" #~ msgid "Product placement" #~ msgstr "Produktplatzierung" #~ msgid "Explicit references to specific brands or trademarked products" #~ msgstr "Explizite Anspielungen auf bestimmte Marken oder Handelsprodukte" #~ msgid "Users are encouraged to purchase specific real-world items" #~ msgstr "Benutzer werden ermuntert, bestimmte reale Objekte zu erwerben" #~ msgid "No gambling of any kind" #~ msgstr "Kein Glücksspiel irgendeiner Art" #~ msgid "Gambling on random events using tokens or credits" #~ msgstr "Glücksspiele mit Jetons oder Guthaben" #~ msgid "Gambling using “play” money" #~ msgstr "Glücksspiel mit Spielgeld" #~ msgid "Gambling using real money" #~ msgstr "Glücksspiel mit echtem Geld" #~ msgid "No ability to spend money" #~ msgstr "Keine Möglichkeit, reales Geld auszugeben" #~ msgid "Users are encouraged to donate real money" #~ msgstr "Benutzer werden ermuntert, echtes Geld zu spenden" #~ msgid "Ability to spend real money in-game" #~ msgstr "Möglichkeit, reales Geld in Spielen auszugeben" #~ msgid "No way to chat with other users" #~ msgstr "Keine Möglichkeit zum Chat mit anderen Benutzern" #~ msgid "User-to-user game interactions without chat functionality" #~ msgstr "Zwei-Teilnehmer-Spielinteraktionen ohne Chat-Funktion" #~ msgid "Moderated chat functionality between users" #~ msgstr "Moderierte Chat-Funktion zwischen Benutzern" #~ msgid "Uncontrolled chat functionality between users" #~ msgstr "Nicht kontrollierte Chat-Funktion zwischen Benutzern" #~ msgid "No way to talk with other users" #~ msgstr "Keine Möglichkeit zum Gespräch mit anderen Benutzern" #~ msgid "Uncontrolled audio or video chat functionality between users" #~ msgstr "" #~ "Nicht kontrollierte Audio- oder Video-Chat-Funktion zwischen Benutzern" #~ msgid "No sharing of social network usernames or email addresses" #~ msgstr "" #~ "Kein Teilen von Benutzernamen in sozialen Netzwerken oder E-Mail-Adressen" #~ msgid "Sharing social network usernames or email addresses" #~ msgstr "" #~ "Teilen von Benutzernamen in sozialen Netzwerken oder E-Mail-Adressen" #~ msgid "No sharing of user information with 3rd parties" #~ msgstr "Kein Teilen von Benutzerinformationen mit Dritten" #~ msgid "Checking for the latest application version" #~ msgstr "Suchen nach der neuesten Anwendungsversion" #~ msgid "Sharing diagnostic data that does not let others identify the user" #~ msgstr "" #~ "Teilen von Diagnosedaten, die eine Identifizierung des Benutzers durch " #~ "andere nicht ermöglichen" #~ msgid "Sharing information that lets others identify the user" #~ msgstr "" #~ "Teilen von Informationen, die eine Identifizierung des Benutzers durch " #~ "andere ermöglichen" #~ msgid "No sharing of physical location to other users" #~ msgstr "Kein Teilen des physischen Aufenthaltsortes mit anderen Benutzern" #~ msgid "Sharing physical location to other users" #~ msgstr "Teilen des physischen Aufenthaltsortes mit anderen Benutzern" #~ msgid "No references to homosexuality" #~ msgstr "Keine Erwähnung von Homosexualität" #~ msgid "Indirect references to homosexuality" #~ msgstr "Indirekte Erwähnung von Homosexualität" #~ msgid "Kissing between people of the same gender" #~ msgstr "Küssen von Personen desselben Geschlechts" #~ msgid "Graphic sexual behavior between people of the same gender" #~ msgstr "Grafisches Sexualverhalten von Personen desselben Geschlechts" #~ msgid "No references to prostitution" #~ msgstr "Keine Erwähnung von Prostitution" #~ msgid "Indirect references to prostitution" #~ msgstr "Indirekte Erwähnung von Prostitution" #~ msgid "Direct references to prostitution" #~ msgstr "Direkte Erwähnung von Prostitution" #~ msgid "Graphic depictions of the act of prostitution" #~ msgstr "Grafische Darstellungen des Akts der Prostitution" #~ msgid "No references to adultery" #~ msgstr "Keine Erwähnung von Ehebruch" #~ msgid "Indirect references to adultery" #~ msgstr "Indirekte Erwähnung von Ehebruch" #~ msgid "Direct references to adultery" #~ msgstr "Direkte Erwähnung von Ehebruch" #~ msgid "Graphic depictions of the act of adultery" #~ msgstr "Grafische Darstellungen des Akts des Ehebruchs" #~ msgid "No sexualized characters" #~ msgstr "Keine sexualisierten Charaktere" #~ msgid "Scantily clad human characters" #~ msgstr "Leicht bekleidete menschliche Charaktere" #~ msgid "Overtly sexualized human characters" #~ msgstr "Offen sexualisierte menschliche Charaktere" #~ msgid "No references to desecration" #~ msgstr "Keine Erwähnung von Schändung" #~ msgid "Depictions or references to historical desecration" #~ msgstr "Darstellungen oder Erwähnungen von historischer Schändung" #~ msgid "Depictions of modern-day human desecration" #~ msgstr "Darstellungen von moderner menschlicher Schändung" #~ msgid "Graphic depictions of modern-day desecration" #~ msgstr "Grafische Darstellungen von moderner Schändung" #~ msgid "No visible dead human remains" #~ msgstr "Keine sichtbaren menschlichen Überreste" #~ msgid "Visible dead human remains" #~ msgstr "Sichtbare menschliche Überreste" #~ msgid "Dead human remains that are exposed to the elements" #~ msgstr "Menschliche Überreste, die der Natur ausgesetzt sind" #~ msgid "Graphic depictions of desecration of human bodies" #~ msgstr "Grafische Darstellungen von Schändung menschlicher Körper" #~ msgid "No references to slavery" #~ msgstr "Keine Erwähnung von Sklaverei" #~ msgid "Depictions or references to historical slavery" #~ msgstr "Darstellungen oder Erwähnungen von historischer Sklaverei" #~ msgid "Depictions of modern-day slavery" #~ msgstr "Darstellungen oder Erwähnungen von moderner Sklaverei" #~ msgid "Graphic depictions of modern-day slavery" #~ msgstr "Grafische Darstellungen von moderner Sklaverei" malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/po/el.po000066400000000000000000000650721505556674000231640ustar00rootroot00000000000000# Greek translations for malcontent package. # Copyright (C) 2020 THE malcontent'S COPYRIGHT HOLDER # This file is distributed under the same license as the malcontent package. # Automatically generated, 2020. # msgid "" msgstr "" "Project-Id-Version: malcontent\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-06-10 12:04+0100\n" "PO-Revision-Date: 2020-04-15 13:42+0100\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: el\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: accounts-service/com.endlessm.ParentalControls.policy.in:4 msgid "Change your own app filter" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:5 msgid "Authentication is required to change your app filter." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:14 msgid "Read your own app filter" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:15 msgid "Authentication is required to read your app filter." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:24 msgid "Change another user’s app filter" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:25 msgid "Authentication is required to change another user’s app filter." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:34 msgid "Read another user’s app filter" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:35 msgid "Authentication is required to read another user’s app filter." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:44 msgid "Change your own session limits" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:45 msgid "Authentication is required to change your session limits." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:54 msgid "Read your own session limits" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:55 msgid "Authentication is required to read your session limits." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:64 msgid "Change another user’s session limits" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:65 msgid "Authentication is required to change another user’s session limits." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:74 msgid "Read another user’s session limits" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:75 msgid "Authentication is required to read another user’s session limits." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:84 msgid "Change your own account info" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:85 msgid "Authentication is required to change your account info." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:94 msgid "Read your own account info" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:95 msgid "Authentication is required to read your account info." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:104 msgid "Change another user’s account info" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:105 msgid "Authentication is required to change another user’s account info." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:114 msgid "Read another user’s account info" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:115 msgid "Authentication is required to read another user’s account info." msgstr "" #: libmalcontent/app-filter.c:694 #, c-format msgid "App filter for user %u was in an unrecognized format" msgstr "" #: libmalcontent/app-filter.c:725 #, c-format msgid "OARS filter for user %u has an unrecognized kind ‘%s’" msgstr "" #: libmalcontent/manager.c:283 libmalcontent/manager.c:412 #, c-format msgid "Not allowed to query app filter data for user %u" msgstr "" #: libmalcontent/manager.c:288 #, c-format msgid "User %u does not exist" msgstr "" #: libmalcontent/manager.c:394 msgid "App filtering is globally disabled" msgstr "" #: libmalcontent/manager.c:777 msgid "Session limits are globally disabled" msgstr "" #: libmalcontent/manager.c:795 #, c-format msgid "Not allowed to query session limits data for user %u" msgstr "" #: libmalcontent/session-limits.c:306 #, c-format msgid "Session limit for user %u was in an unrecognized format" msgstr "" #: libmalcontent/session-limits.c:328 #, c-format msgid "Session limit for user %u has an unrecognized type ‘%u’" msgstr "" #: libmalcontent/session-limits.c:346 #, c-format msgid "Session limit for user %u has invalid daily schedule %u–%u" msgstr "" #. TRANSLATORS: This is the formatting of English and localized name #. of the rating e.g. "Adults Only (solo adultos)" #: libmalcontent-ui/gs-content-rating.c:75 #, c-format msgid "%s (%s)" msgstr "" #: libmalcontent-ui/gs-content-rating.c:209 msgid "General" msgstr "" #: libmalcontent-ui/gs-content-rating.c:218 msgid "ALL" msgstr "" #: libmalcontent-ui/gs-content-rating.c:222 #: libmalcontent-ui/gs-content-rating.c:485 msgid "Adults Only" msgstr "" #: libmalcontent-ui/gs-content-rating.c:224 #: libmalcontent-ui/gs-content-rating.c:484 msgid "Mature" msgstr "" #: libmalcontent-ui/gs-content-rating.c:226 #: libmalcontent-ui/gs-content-rating.c:483 msgid "Teen" msgstr "" #: libmalcontent-ui/gs-content-rating.c:228 #: libmalcontent-ui/gs-content-rating.c:482 msgid "Everyone 10+" msgstr "" #: libmalcontent-ui/gs-content-rating.c:230 #: libmalcontent-ui/gs-content-rating.c:481 msgid "Everyone" msgstr "" #: libmalcontent-ui/gs-content-rating.c:232 #: libmalcontent-ui/gs-content-rating.c:480 msgid "Early Childhood" msgstr "" #. Translators: the placeholder is a user’s full name #: libmalcontent-ui/restrict-applications-dialog.c:222 #, c-format msgid "Restrict %s from using the following installed applications." msgstr "" #: libmalcontent-ui/restrict-applications-dialog.ui:6 #: libmalcontent-ui/restrict-applications-dialog.ui:12 msgid "Restrict Applications" msgstr "" #: libmalcontent-ui/restrict-applications-selector.ui:24 msgid "No applications found to restrict." msgstr "" #. Translators: this is the full name for an unknown user account. #: libmalcontent-ui/user-controls.c:242 libmalcontent-ui/user-controls.c:253 msgid "unknown" msgstr "" #: libmalcontent-ui/user-controls.c:338 libmalcontent-ui/user-controls.c:425 #: libmalcontent-ui/user-controls.c:711 msgid "All Ages" msgstr "" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:514 #, c-format msgid "" "Prevents %s from running web browsers. Limited web content may still be " "available in other applications." msgstr "" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:519 #, c-format msgid "Prevents specified applications from being used by %s." msgstr "" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:524 #, c-format msgid "Prevents %s from installing applications." msgstr "" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:529 #, c-format msgid "Applications installed by %s will not appear for other users." msgstr "" #: libmalcontent-ui/user-controls.ui:17 msgid "Application Usage Restrictions" msgstr "" #: libmalcontent-ui/user-controls.ui:68 msgid "Restrict _Web Browsers" msgstr "" #: libmalcontent-ui/user-controls.ui:152 msgid "_Restrict Applications" msgstr "" #: libmalcontent-ui/user-controls.ui:231 msgid "Software Installation Restrictions" msgstr "" #: libmalcontent-ui/user-controls.ui:281 msgid "Restrict Application _Installation" msgstr "" #: libmalcontent-ui/user-controls.ui:366 msgid "Restrict Application Installation for _Others" msgstr "" #: libmalcontent-ui/user-controls.ui:451 msgid "Application _Suitability" msgstr "" #: libmalcontent-ui/user-controls.ui:473 msgid "" "Restricts browsing or installation of applications to applications suitable " "for certain ages or above." msgstr "" #. Translators: This is the title of the main window #. Translators: the name of the application as it appears in a software center #: malcontent-control/application.c:105 malcontent-control/main.ui:12 #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:9 #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:3 msgid "Parental Controls" msgstr "" #: malcontent-control/application.c:270 msgid "Copyright © 2019, 2020 Endless Mobile, Inc." msgstr "" #. Translators: this should be "translated" to the #. names of people who have translated Malcontent into #. this language, one per line. #: malcontent-control/application.c:275 msgid "translator-credits" msgstr "" #. Translators: "Malcontent" is the brand name of this #. project, so should not be translated. #: malcontent-control/application.c:281 msgid "Malcontent Website" msgstr "" #: malcontent-control/application.c:299 msgid "The help contents could not be displayed" msgstr "" #: malcontent-control/application.c:336 msgid "Failed to load user data from the system" msgstr "" #: malcontent-control/application.c:338 msgid "Please make sure that the AccountsService is installed and enabled." msgstr "" #: malcontent-control/carousel.ui:48 msgid "Previous Page" msgstr "" #: malcontent-control/carousel.ui:74 msgid "Next Page" msgstr "" #: malcontent-control/main.ui:93 msgid "Permission Required" msgstr "" #: malcontent-control/main.ui:107 msgid "" "Permission is required to view and change user parental controls settings." msgstr "" #: malcontent-control/main.ui:148 msgid "No Child Users Configured" msgstr "" #: malcontent-control/main.ui:162 msgid "" "No child users are currently set up on the system. Create one before setting " "up their parental controls." msgstr "" #: malcontent-control/main.ui:174 msgid "Create _Child User" msgstr "" #: malcontent-control/main.ui:202 msgid "Loading…" msgstr "" #: malcontent-control/main.ui:265 msgid "_Help" msgstr "_Βοήθεια" #: malcontent-control/main.ui:269 msgid "_About Parental Controls" msgstr "" #. Translators: the brief summary of the application as it appears in a software center. #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:12 #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:4 msgid "Set parental controls and monitor usage by users" msgstr "" #. Translators: These are the application description paragraphs in the AppData file. #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:16 msgid "" "Manage users’ parental controls restrictions, controlling how long they can " "use the computer for, what software they can install, and what installed " "software they can run." msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:39 msgid "The GNOME Project" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:50 #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:59 msgid "Minor improvements to parental controls application UI" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:51 msgid "Add a user manual" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:52 msgid "Translation updates" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:60 msgid "Translations to Ukrainian and Polish" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:67 msgid "Improve parental controls application UI and add icon" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:68 msgid "Support for indicating which accounts are parent accounts" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:75 msgid "Initial release of basic parental controls application" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:76 msgid "Support for setting app installation and run restrictions on users" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:83 msgid "Maintenance release of underlying parental controls library" msgstr "" #. Translators: Do NOT translate or transliterate this text (this is an icon file name)! #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:7 msgid "org.freedesktop.MalcontentControl" msgstr "" #. Translators: Search terms to find this application. Do NOT translate or localise the semicolons! The list MUST also end with a semicolon! #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:13 msgid "" "parental controls;screen time;app restrictions;web browser restrictions;oars;" "usage;usage limit;kid;child;" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.policy.in:9 msgid "Manage parental controls" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.policy.in:10 msgid "Authentication is required to read and change user parental controls" msgstr "" #: malcontent-control/user-selector.c:426 msgid "Your account" msgstr "Ο λογαριασμός σας" #. Always allow root, to avoid a situation where this PAM module prevents #. * all users logging in with no way of recovery. #: pam/pam_malcontent.c:142 pam/pam_malcontent.c:188 #, c-format msgid "User ‘%s’ has no time limits enabled" msgstr "" #: pam/pam_malcontent.c:151 pam/pam_malcontent.c:172 #, c-format msgid "Error getting session limits for user ‘%s’: %s" msgstr "" #: pam/pam_malcontent.c:182 #, c-format msgid "User ‘%s’ has no time remaining" msgstr "" #: pam/pam_malcontent.c:200 #, c-format msgid "Error setting time limit on login session: %s" msgstr "" #~ msgid "No cartoon violence" #~ msgstr "Κινούμενα σχέδια χωρίς βία" #~ msgid "Cartoon characters in unsafe situations" #~ msgstr "Χαρακτήρες κινουμένων σχεδίων σε επικίνδυνες καταστάσεις" #~ msgid "Cartoon characters in aggressive conflict" #~ msgstr "Χαρακτήρες κινουμένων σχεδίων σε επιθετική σύγκρουση" #~ msgid "Graphic violence involving cartoon characters" #~ msgstr "Γραφική βία μεταξύ χαρακτήρων κινουμένων σχεδίων" #~ msgid "No fantasy violence" #~ msgstr "Χωρίς φανταστική βία" #~ msgid "Characters in unsafe situations easily distinguishable from reality" #~ msgstr "" #~ "Χαρακτήρες σε επικίνδυνες καταστάσεις όπου διακρίνονται εύκολα από την " #~ "πραγματικότητα" #~ msgid "" #~ "Characters in aggressive conflict easily distinguishable from reality" #~ msgstr "" #~ "Χαρακτήρες σε επιθετικές συγκρούσεις όπου διακρίνονται εύκολα από την " #~ "πραγματικότητα" #~ msgid "Graphic violence easily distinguishable from reality" #~ msgstr "Γραφική βία όπου διακρίνεται εύκολα από την πραγματικότητα" #~ msgid "No realistic violence" #~ msgstr "Χωρίς ρεαλιστική βία" #~ msgid "Mildly realistic characters in unsafe situations" #~ msgstr "Ήπιοι ρεαλιστικοί χαρακτήρες σε επικίνδυνες καταστάσεις" #~ msgid "Depictions of realistic characters in aggressive conflict" #~ msgstr "Απεικονίσεις ρεαλιστικών χαρακτήρων σε επιθετική σύγκρουση" #~ msgid "Graphic violence involving realistic characters" #~ msgstr "Γραφική βία μεταξύ πραγματικών χαρακτήρων" #~ msgid "No bloodshed" #~ msgstr "Χωρίς αιματοχυσία" #~ msgid "Unrealistic bloodshed" #~ msgstr "Μη ρεαλιστική αιματοχυσία" #~ msgid "Realistic bloodshed" #~ msgstr "Ρεαλιστική αιματοχυσία" #~ msgid "Depictions of bloodshed and the mutilation of body parts" #~ msgstr "Απεικονίσεις αιματοχυσίας και ακρωτηριασμού μερών του σώματος" #~ msgid "No sexual violence" #~ msgstr "Χωρίς σεξουαλική βία" #~ msgid "Rape or other violent sexual behavior" #~ msgstr "Βιασμός ή άλλη βίαιη σεξουαλική συμπεριφορά" #~ msgid "No references to alcohol" #~ msgstr "Χωρίς αναφορές σε αλκοόλ" #~ msgid "References to alcoholic beverages" #~ msgstr "Αναφορές σε αλκοολούχα ποτά" #~ msgid "Use of alcoholic beverages" #~ msgstr "Χρήση αλκοολούχων ποτών" #~ msgid "No references to illicit drugs" #~ msgstr "Χωρίς αναφορές σε παράνομα ναρκωτικά" #~ msgid "References to illicit drugs" #~ msgstr "Αναφορές σε παράνομα ναρκωτικά" #~ msgid "Use of illicit drugs" #~ msgstr "Χρήση παράνομων ναρκωτικών" #~ msgid "References to tobacco products" #~ msgstr "Αναφορές σε προϊόντα καπνού" #~ msgid "Use of tobacco products" #~ msgstr "Χρήση προϊόντων καπνού" #~ msgid "No nudity of any sort" #~ msgstr "Χωρίς γυμνό οποιοδήποτε είδους" #~ msgid "Brief artistic nudity" #~ msgstr "Σύντομο καλλιτεχνικό γυμνό" #~ msgid "Prolonged nudity" #~ msgstr "Παρατεταμένο γυμνό" #~ msgid "No references or depictions of sexual nature" #~ msgstr "Χωρίς αναφορές ή απεικονίσεις σεξουαλικού χαρακτήρα" #~ msgid "Provocative references or depictions" #~ msgstr "Προκλητικές αναφορές ή απεικονίσεις" #~ msgid "Sexual references or depictions" #~ msgstr "Σεξουαλικές αναφορές ή απεικονίσεις" #~ msgid "Graphic sexual behavior" #~ msgstr "Γραφική σεξουαλική συμπεριφορά" #~ msgid "No profanity of any kind" #~ msgstr "Χωρίς βωμολοχίες κάθε είδους" #~ msgid "Mild or infrequent use of profanity" #~ msgstr "Ήπια ή σπάνια χρήση βωμολοχιών" #~ msgid "Moderate use of profanity" #~ msgstr "Μέτρια χρήση βωμολοχιών" #~ msgid "Strong or frequent use of profanity" #~ msgstr "Συχνή χρήση βωμολοχιών" #~ msgid "No inappropriate humor" #~ msgstr "Χωρίς ακατάλληλο χιούμορ" #~ msgid "Slapstick humor" #~ msgstr "Χονδροειδές χιούμορ" #~ msgid "Vulgar or bathroom humor" #~ msgstr "Χυδαίο ή βρώμικο χιόυμορ" #~ msgid "Mature or sexual humor" #~ msgstr "Σεξουαλικό χιόυμορ" #~ msgid "No discriminatory language of any kind" #~ msgstr "Χωρίς βωμολοχίες κάθε είδους" #~ msgid "Negativity towards a specific group of people" #~ msgstr "Αρνητικότητα προς μια συγκεκριμένη ομάδα ανθρώπων" #~ msgid "Discrimination designed to cause emotional harm" #~ msgstr "Διακρίσεις με σκοπό συναισθηματική βλάβη" #~ msgid "Explicit discrimination based on gender, sexuality, race or religion" #~ msgstr "" #~ "Σαφής διάκριση με βάση το φύλο, τη σεξουαλικότητα, το γένος ή τη θρησκεία" #~ msgid "No advertising of any kind" #~ msgstr "Χωρίς διαφήμιση κάθε είδους" #~ msgid "Product placement" #~ msgstr "Τοποθέτηση προϊόντος" #~ msgid "Explicit references to specific brands or trademarked products" #~ msgstr "Ρητές αναφορές σε συγκεκριμένες μάρκες ή εμπορικά σήματα προϊόντων" #~ msgid "Users are encouraged to purchase specific real-world items" #~ msgstr "" #~ "Οι χρήστες ενθαρρύνονται να αγοράζουν συγκεκριμένα πραγματικά αντικείμενα" #~ msgid "No gambling of any kind" #~ msgstr "Χωρίς τζόγο κάθε είδους" #~ msgid "Gambling on random events using tokens or credits" #~ msgstr "Τζόγος σε τυχαία γεγονότα χρησιμοποιώντας μάρκες" #~ msgid "Gambling using “play” money" #~ msgstr "Τζόγος χρησιμοποιώντας «εικονικά» χρήματα" #~ msgid "Gambling using real money" #~ msgstr "Τζόγος με πραγματικά χρήματα" #~ msgid "No ability to spend money" #~ msgstr "Χωρίς δυνατότητα χρήσης χρημάτων" #~ msgid "Users are encouraged to donate real money" #~ msgstr "Οι παίκτες ενθαρρύνονται να αγοράζουν πραγματικά χρήματα" #~ msgid "Ability to spend real money in-game" #~ msgstr "Δυνατότητα χρήσης πραγματικών χρημάτων στο παιχνίδι" #~ msgid "No way to chat with other users" #~ msgstr "Χωρίς δυνατότητας συνομιλίας με άλλους χρήστες" #~ msgid "Moderated chat functionality between users" #~ msgstr "Ελεγχόμενη λειτουργία συνομιλίας μεταξύ των χρηστών" #~ msgid "Uncontrolled chat functionality between users" #~ msgstr "Ανεξέλεγκτη λειτουργία συνομιλίας μεταξύ των χρηστών" #~ msgid "No way to talk with other users" #~ msgstr "Χωρίς δυνατότητας συνομιλίας με άλλους χρήστες" #~ msgid "Uncontrolled audio or video chat functionality between users" #~ msgstr "" #~ "Ανεξέλεγκτη λειτουργία συνομιλίας με ήχο ή βίντεο μεταξύ των χρηστών" #~ msgid "No sharing of social network usernames or email addresses" #~ msgstr "" #~ "Δεν γίνεται κοινή χρήση των ονομάτων χρηστών κοινωνικής δικτύωσης ή των " #~ "διευθύνσεων ηλεκτρονικού ταχυδρομείου" #~ msgid "Sharing social network usernames or email addresses" #~ msgstr "" #~ "Γίνεται κοινή χρήση των ονομάτων χρηστών κοινωνικής δικτύωσης ή των " #~ "διευθύνσεων ηλεκτρονικού ταχυδρομείου" #~ msgid "No sharing of user information with 3rd parties" #~ msgstr "Χωρίς διαμοιρασμό πληροφοριών του χρήστη με τρίτους" #~ msgid "Checking for the latest application version" #~ msgstr "Γίνεται έλεγχος για την πιο πρόσφατη έκδοση της εφαρμογής" #~ msgid "Sharing diagnostic data that does not let others identify the user" #~ msgstr "" #~ "Διαμοιρασμός διαγνωστικών δεδομένων που δεν επιτρέπουν σε άλλους να " #~ "αναγνωρίσουν τον χρήστη" #~ msgid "Sharing information that lets others identify the user" #~ msgstr "" #~ "Διαμοιρασμός πληροφοριών που επιτρέπει σε άλλους να αναγνωρίσουν τον " #~ "χρήστη" #~ msgid "No sharing of physical location to other users" #~ msgstr "Χωρίς διαμοιρασμό φυσικής τοποθεσίας σε άλλους χρήστες" #~ msgid "Sharing physical location to other users" #~ msgstr "Διαμοιρασμός φυσικής τοποθεσίας σε άλλους χρήστες" #~ msgid "No references to homosexuality" #~ msgstr "Χωρίς αναφορές σε ομοφυλοφιλία" #~ msgid "Indirect references to homosexuality" #~ msgstr "Έμμεσες αναφορές στην ομοφυλοφιλία" #~ msgid "Kissing between people of the same gender" #~ msgstr "Φιλί μεταξύ ανθρώπων του ίδιου φύλου" #~ msgid "Graphic sexual behavior between people of the same gender" #~ msgstr "Γραφική σεξουαλική συμπεριφορά μεταξύ ατόμων του ίδιου φύλου" #~ msgid "No references to prostitution" #~ msgstr "Χωρίς αναφορές σε πορνεία" #~ msgid "Indirect references to prostitution" #~ msgstr "Έμμεσες αναφορές στην πορνεία" #~ msgid "Direct references to prostitution" #~ msgstr "Άμεσες αναφορές σε πορνεία" #~ msgid "Graphic depictions of the act of prostitution" #~ msgstr "Γραφικές απεικονίσεις της πράξης πορνείας" #~ msgid "No references to adultery" #~ msgstr "Χωρίς αναφορές σε μοιχεία" #~ msgid "Indirect references to adultery" #~ msgstr "Έμμεσες αναφορές σε μοιχεία" #~ msgid "Direct references to adultery" #~ msgstr "Άμεσες αναφορές σε μοιχεία" #~ msgid "Graphic depictions of the act of adultery" #~ msgstr "Γραφικές απεικονίσεις της μοιχείας" #~ msgid "No sexualized characters" #~ msgstr "Δεν υπάρχουν σεξουαλικοποιημένοι χαρακτήρες" #~ msgid "Scantily clad human characters" #~ msgstr "Ελαφρά ντυμένοι ανθρώπινοι χαρακτήρες" #~ msgid "Overtly sexualized human characters" #~ msgstr "Εξαιρετικά σεξουαλικοποιημένοι ανθρώπινοι χαρακτήρες" #~ msgid "No references to desecration" #~ msgstr "Χωρίς αναφορές σε βεβήλωση" #~ msgid "Depictions of modern-day human desecration" #~ msgstr "Απεικονίσεις της σύγχρονης ανθρώπινης βεβήλωσης" #~ msgid "Graphic depictions of modern-day desecration" #~ msgstr "Γραφικές απεικονίσεις της σύγχρονης βεβήλωσης" #~ msgid "No visible dead human remains" #~ msgstr "Δεν υπάρχουν ορατά νεκρά ανθρώπινα κατάλοιπα" #~ msgid "Visible dead human remains" #~ msgstr "Ορατά νεκρά ανθρώπινα κατάλοιπα" #~ msgid "Dead human remains that are exposed to the elements" #~ msgstr "Νεκρά ανθρώπινα λείψανα που εκτίθενται στα στοιχεία" #~ msgid "Graphic depictions of desecration of human bodies" #~ msgstr "Γραφικές απεικονίσεις της βεβήλωσης των ανθρώπινων σωμάτων" #~ msgid "No references to slavery" #~ msgstr "Χωρίς αναφορές σε δουλεία" #~ msgid "Depictions of modern-day slavery" #~ msgstr "Απεικονίσεις της σύγχρονης δουλείας" #~ msgid "Graphic depictions of modern-day slavery" #~ msgstr "Γραφικές απεικονίσεις της σύγχρονης δουλείας" malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/po/eo.po000066400000000000000000000537331505556674000231700ustar00rootroot00000000000000# Esperanto translations for malcontent package. # Copyright (C) 2020 THE malcontent'S COPYRIGHT HOLDER # This file is distributed under the same license as the malcontent package. # Automatically generated, 2020. # msgid "" msgstr "" "Project-Id-Version: malcontent\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-06-10 12:04+0100\n" "PO-Revision-Date: 2020-04-15 13:42+0100\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: eo\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: accounts-service/com.endlessm.ParentalControls.policy.in:4 msgid "Change your own app filter" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:5 msgid "Authentication is required to change your app filter." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:14 msgid "Read your own app filter" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:15 msgid "Authentication is required to read your app filter." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:24 msgid "Change another user’s app filter" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:25 msgid "Authentication is required to change another user’s app filter." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:34 msgid "Read another user’s app filter" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:35 msgid "Authentication is required to read another user’s app filter." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:44 msgid "Change your own session limits" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:45 msgid "Authentication is required to change your session limits." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:54 msgid "Read your own session limits" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:55 msgid "Authentication is required to read your session limits." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:64 msgid "Change another user’s session limits" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:65 msgid "Authentication is required to change another user’s session limits." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:74 msgid "Read another user’s session limits" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:75 msgid "Authentication is required to read another user’s session limits." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:84 msgid "Change your own account info" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:85 msgid "Authentication is required to change your account info." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:94 msgid "Read your own account info" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:95 msgid "Authentication is required to read your account info." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:104 msgid "Change another user’s account info" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:105 msgid "Authentication is required to change another user’s account info." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:114 msgid "Read another user’s account info" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:115 msgid "Authentication is required to read another user’s account info." msgstr "" #: libmalcontent/app-filter.c:694 #, c-format msgid "App filter for user %u was in an unrecognized format" msgstr "" #: libmalcontent/app-filter.c:725 #, c-format msgid "OARS filter for user %u has an unrecognized kind ‘%s’" msgstr "" #: libmalcontent/manager.c:283 libmalcontent/manager.c:412 #, c-format msgid "Not allowed to query app filter data for user %u" msgstr "" #: libmalcontent/manager.c:288 #, c-format msgid "User %u does not exist" msgstr "" #: libmalcontent/manager.c:394 msgid "App filtering is globally disabled" msgstr "" #: libmalcontent/manager.c:777 msgid "Session limits are globally disabled" msgstr "" #: libmalcontent/manager.c:795 #, c-format msgid "Not allowed to query session limits data for user %u" msgstr "" #: libmalcontent/session-limits.c:306 #, c-format msgid "Session limit for user %u was in an unrecognized format" msgstr "" #: libmalcontent/session-limits.c:328 #, c-format msgid "Session limit for user %u has an unrecognized type ‘%u’" msgstr "" #: libmalcontent/session-limits.c:346 #, c-format msgid "Session limit for user %u has invalid daily schedule %u–%u" msgstr "" #. TRANSLATORS: This is the formatting of English and localized name #. of the rating e.g. "Adults Only (solo adultos)" #: libmalcontent-ui/gs-content-rating.c:75 #, c-format msgid "%s (%s)" msgstr "" #: libmalcontent-ui/gs-content-rating.c:209 msgid "General" msgstr "" #: libmalcontent-ui/gs-content-rating.c:218 msgid "ALL" msgstr "" #: libmalcontent-ui/gs-content-rating.c:222 #: libmalcontent-ui/gs-content-rating.c:485 msgid "Adults Only" msgstr "" #: libmalcontent-ui/gs-content-rating.c:224 #: libmalcontent-ui/gs-content-rating.c:484 msgid "Mature" msgstr "" #: libmalcontent-ui/gs-content-rating.c:226 #: libmalcontent-ui/gs-content-rating.c:483 msgid "Teen" msgstr "" #: libmalcontent-ui/gs-content-rating.c:228 #: libmalcontent-ui/gs-content-rating.c:482 msgid "Everyone 10+" msgstr "" #: libmalcontent-ui/gs-content-rating.c:230 #: libmalcontent-ui/gs-content-rating.c:481 msgid "Everyone" msgstr "" #: libmalcontent-ui/gs-content-rating.c:232 #: libmalcontent-ui/gs-content-rating.c:480 msgid "Early Childhood" msgstr "" #. Translators: the placeholder is a user’s full name #: libmalcontent-ui/restrict-applications-dialog.c:222 #, c-format msgid "Restrict %s from using the following installed applications." msgstr "" #: libmalcontent-ui/restrict-applications-dialog.ui:6 #: libmalcontent-ui/restrict-applications-dialog.ui:12 msgid "Restrict Applications" msgstr "" #: libmalcontent-ui/restrict-applications-selector.ui:24 msgid "No applications found to restrict." msgstr "" #. Translators: this is the full name for an unknown user account. #: libmalcontent-ui/user-controls.c:242 libmalcontent-ui/user-controls.c:253 msgid "unknown" msgstr "" #: libmalcontent-ui/user-controls.c:338 libmalcontent-ui/user-controls.c:425 #: libmalcontent-ui/user-controls.c:711 msgid "All Ages" msgstr "" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:514 #, c-format msgid "" "Prevents %s from running web browsers. Limited web content may still be " "available in other applications." msgstr "" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:519 #, c-format msgid "Prevents specified applications from being used by %s." msgstr "" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:524 #, c-format msgid "Prevents %s from installing applications." msgstr "" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:529 #, c-format msgid "Applications installed by %s will not appear for other users." msgstr "" #: libmalcontent-ui/user-controls.ui:17 msgid "Application Usage Restrictions" msgstr "" #: libmalcontent-ui/user-controls.ui:68 msgid "Restrict _Web Browsers" msgstr "" #: libmalcontent-ui/user-controls.ui:152 msgid "_Restrict Applications" msgstr "" #: libmalcontent-ui/user-controls.ui:231 msgid "Software Installation Restrictions" msgstr "" #: libmalcontent-ui/user-controls.ui:281 msgid "Restrict Application _Installation" msgstr "" #: libmalcontent-ui/user-controls.ui:366 msgid "Restrict Application Installation for _Others" msgstr "" #: libmalcontent-ui/user-controls.ui:451 msgid "Application _Suitability" msgstr "" #: libmalcontent-ui/user-controls.ui:473 msgid "" "Restricts browsing or installation of applications to applications suitable " "for certain ages or above." msgstr "" #. Translators: This is the title of the main window #. Translators: the name of the application as it appears in a software center #: malcontent-control/application.c:105 malcontent-control/main.ui:12 #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:9 #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:3 msgid "Parental Controls" msgstr "" #: malcontent-control/application.c:270 msgid "Copyright © 2019, 2020 Endless Mobile, Inc." msgstr "" #. Translators: this should be "translated" to the #. names of people who have translated Malcontent into #. this language, one per line. #: malcontent-control/application.c:275 msgid "translator-credits" msgstr "" #. Translators: "Malcontent" is the brand name of this #. project, so should not be translated. #: malcontent-control/application.c:281 msgid "Malcontent Website" msgstr "" #: malcontent-control/application.c:299 msgid "The help contents could not be displayed" msgstr "" #: malcontent-control/application.c:336 msgid "Failed to load user data from the system" msgstr "" #: malcontent-control/application.c:338 msgid "Please make sure that the AccountsService is installed and enabled." msgstr "" #: malcontent-control/carousel.ui:48 msgid "Previous Page" msgstr "" #: malcontent-control/carousel.ui:74 msgid "Next Page" msgstr "" #: malcontent-control/main.ui:93 msgid "Permission Required" msgstr "" #: malcontent-control/main.ui:107 msgid "" "Permission is required to view and change user parental controls settings." msgstr "" #: malcontent-control/main.ui:148 msgid "No Child Users Configured" msgstr "" #: malcontent-control/main.ui:162 msgid "" "No child users are currently set up on the system. Create one before setting " "up their parental controls." msgstr "" #: malcontent-control/main.ui:174 msgid "Create _Child User" msgstr "" #: malcontent-control/main.ui:202 msgid "Loading…" msgstr "" #: malcontent-control/main.ui:265 msgid "_Help" msgstr "_Helpo" #: malcontent-control/main.ui:269 msgid "_About Parental Controls" msgstr "" #. Translators: the brief summary of the application as it appears in a software center. #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:12 #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:4 msgid "Set parental controls and monitor usage by users" msgstr "" #. Translators: These are the application description paragraphs in the AppData file. #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:16 msgid "" "Manage users’ parental controls restrictions, controlling how long they can " "use the computer for, what software they can install, and what installed " "software they can run." msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:39 msgid "The GNOME Project" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:50 #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:59 msgid "Minor improvements to parental controls application UI" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:51 msgid "Add a user manual" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:52 msgid "Translation updates" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:60 msgid "Translations to Ukrainian and Polish" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:67 msgid "Improve parental controls application UI and add icon" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:68 msgid "Support for indicating which accounts are parent accounts" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:75 msgid "Initial release of basic parental controls application" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:76 msgid "Support for setting app installation and run restrictions on users" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:83 msgid "Maintenance release of underlying parental controls library" msgstr "" #. Translators: Do NOT translate or transliterate this text (this is an icon file name)! #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:7 msgid "org.freedesktop.MalcontentControl" msgstr "" #. Translators: Search terms to find this application. Do NOT translate or localise the semicolons! The list MUST also end with a semicolon! #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:13 msgid "" "parental controls;screen time;app restrictions;web browser restrictions;oars;" "usage;usage limit;kid;child;" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.policy.in:9 msgid "Manage parental controls" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.policy.in:10 msgid "Authentication is required to read and change user parental controls" msgstr "" #: malcontent-control/user-selector.c:426 msgid "Your account" msgstr "Via konto" #. Always allow root, to avoid a situation where this PAM module prevents #. * all users logging in with no way of recovery. #: pam/pam_malcontent.c:142 pam/pam_malcontent.c:188 #, c-format msgid "User ‘%s’ has no time limits enabled" msgstr "" #: pam/pam_malcontent.c:151 pam/pam_malcontent.c:172 #, c-format msgid "Error getting session limits for user ‘%s’: %s" msgstr "" #: pam/pam_malcontent.c:182 #, c-format msgid "User ‘%s’ has no time remaining" msgstr "" #: pam/pam_malcontent.c:200 #, c-format msgid "Error setting time limit on login session: %s" msgstr "" #~ msgid "No cartoon violence" #~ msgstr "Neniu kartuna perforto" #~ msgid "Cartoon characters in unsafe situations" #~ msgstr "Kartunaj roluloj en nesekuraj situacioj" #~ msgid "Cartoon characters in aggressive conflict" #~ msgstr "Kartunaj roluloj en agresa konflikto" #~ msgid "Graphic violence involving cartoon characters" #~ msgstr "Serioza perforto koncernante kartunaj roluloj" #~ msgid "No fantasy violence" #~ msgstr "Neniu fantazia perforto" #~ msgid "Characters in unsafe situations easily distinguishable from reality" #~ msgstr "Roluloj en nesekuraj situacioj facile distingeblaj de realeco" #~ msgid "" #~ "Characters in aggressive conflict easily distinguishable from reality" #~ msgstr "Roluloj en agresa konflikto facile distingebla de realeco" #~ msgid "Graphic violence easily distinguishable from reality" #~ msgstr "Serioza perforto facile distingebla de realeco" #~ msgid "No realistic violence" #~ msgstr "Neniu vivovera perforto" #~ msgid "Mildly realistic characters in unsafe situations" #~ msgstr "Modere vivoveraj roluloj en nesekuraj situacioj" #~ msgid "Depictions of realistic characters in aggressive conflict" #~ msgstr "Figurado de vivoveraj roluloj en agresa konflikto" #~ msgid "Graphic violence involving realistic characters" #~ msgstr "Serioza perforto koncernante vivoveraj roluloj" #~ msgid "No bloodshed" #~ msgstr "Neniu sangoverŝo" #~ msgid "Unrealistic bloodshed" #~ msgstr "Malvivovera sangoverŝo" #~ msgid "Realistic bloodshed" #~ msgstr "Vivovera sangoverŝo" #~ msgid "Depictions of bloodshed and the mutilation of body parts" #~ msgstr "Figurado de sangoverŝo kaj kripligo de korpopartoj" #~ msgid "No sexual violence" #~ msgstr "Neniu seksperforto" #~ msgid "Rape or other violent sexual behavior" #~ msgstr "Seksperforto aŭ alia perforta seksa konduto" #~ msgid "No references to alcohol" #~ msgstr "Neniu priparolado de alkoholo" #~ msgid "References to alcoholic beverages" #~ msgstr "Priparolado de alkoholaĵoj" #~ msgid "Use of alcoholic beverages" #~ msgstr "Uzado de alkoholaĵoj" #~ msgid "No references to illicit drugs" #~ msgstr "Neniu priparolado de malpermesitaj drogoj" #~ msgid "References to illicit drugs" #~ msgstr "Priparolado de malpermesitaj drogoj" #~ msgid "Use of illicit drugs" #~ msgstr "Uzado de malpermesitaj drogoj" #~ msgid "References to tobacco products" #~ msgstr "Priparolado de tabakaĵoj" #~ msgid "Use of tobacco products" #~ msgstr "Uzado de tabakaĵoj" #~ msgid "No nudity of any sort" #~ msgstr "Neniu nudeco" #~ msgid "Brief artistic nudity" #~ msgstr "Nedaŭra arta nudeco" #~ msgid "Prolonged nudity" #~ msgstr "Daŭra nudeco" #~ msgid "Provocative references or depictions" #~ msgstr "Provoka priparolado aŭ figurado" #~ msgid "Sexual references or depictions" #~ msgstr "Seka priparolado aŭ figurado" #~ msgid "Graphic sexual behavior" #~ msgstr "Serioza seksa konduto" #~ msgid "No profanity of any kind" #~ msgstr "Neniu sakro" #~ msgid "Mild or infrequent use of profanity" #~ msgstr "Milda aŭ malofta uzado de sakro" #~ msgid "Moderate use of profanity" #~ msgstr "Modera uzado de sakro" #~ msgid "Strong or frequent use of profanity" #~ msgstr "Forta aŭ ofta uzado de sakro" #~ msgid "No inappropriate humor" #~ msgstr "Neniu nedeca humuro" #~ msgid "Slapstick humor" #~ msgstr "Senvoĉa humuro" #~ msgid "Vulgar or bathroom humor" #~ msgstr "Vulgara aŭ baneja humuro" #~ msgid "Mature or sexual humor" #~ msgstr "Matura aŭ seksuma humuro" #~ msgid "No discriminatory language of any kind" #~ msgstr "Neniu diskriminacia lingvo" #~ msgid "Negativity towards a specific group of people" #~ msgstr "Negativeco kontraŭ specifa grupo de homoj" #~ msgid "Discrimination designed to cause emotional harm" #~ msgstr "Diskriminacio kun la intenco kaŭzi emocian malprofiton" #~ msgid "Explicit discrimination based on gender, sexuality, race or religion" #~ msgstr "Eksplika diskriminacio pro genro, sekseco, etno aŭ religio" #~ msgid "No advertising of any kind" #~ msgstr "Neniu reklamo" #~ msgid "Product placement" #~ msgstr "Produkt-enmeto" #~ msgid "Explicit references to specific brands or trademarked products" #~ msgstr "Eksplika priparolado de specifaj markoj aŭ produktoj varmarkitaj" #~ msgid "Users are encouraged to purchase specific real-world items" #~ msgstr "Uzantoj kuraĝiĝas aĉeti specifajn realajn aferojn" #~ msgid "No gambling of any kind" #~ msgstr "Neniu vetludado" #~ msgid "Gambling on random events using tokens or credits" #~ msgstr "Vetludado je hazardaj okazaĵoj uzante ĵetonojn" #~ msgid "Gambling using “play” money" #~ msgstr "Vetludado uzante “ludan” monon" #~ msgid "Gambling using real money" #~ msgstr "Vetludado uzante realan monon" #~ msgid "No ability to spend money" #~ msgstr "Neniu ebleco elspezi monon" #~ msgid "Users are encouraged to donate real money" #~ msgstr "Uzantoj kuraĝiĝas donaci realan monon" #~ msgid "No way to chat with other users" #~ msgstr "Neniu maniero por babili kun aliaj uzantoj" #~ msgid "Moderated chat functionality between users" #~ msgstr "Kontrolata babilfunkcio inter uzantoj" #~ msgid "Uncontrolled chat functionality between users" #~ msgstr "Nekontrolata babilfunkcio inter uzantoj" #~ msgid "No way to talk with other users" #~ msgstr "Neniu maniero paroli kun aliaj uzantoj" #~ msgid "Uncontrolled audio or video chat functionality between users" #~ msgstr "Nekontrolata aŭda aŭ videa babilfunkcio inter uzantoj" #~ msgid "No sharing of social network usernames or email addresses" #~ msgstr "Neniu kunhavigado de sociaj retejaj uzantonomoj aŭ retpoŝtadresoj" #~ msgid "Sharing social network usernames or email addresses" #~ msgstr "Kunhavigado de sociaj retejaj uzantonomoj aŭ retpoŝtadresoj" #~ msgid "Checking for the latest application version" #~ msgstr "Kontrolante por la lasta version de la aplikaĵo" #~ msgid "Sharing diagnostic data that does not let others identify the user" #~ msgstr "" #~ "Kunhavigado de diagnozaj datumoj kiuj ne lasas al aliuloj identigi la " #~ "uzanton" #~ msgid "Sharing information that lets others identify the user" #~ msgstr "Kunhavigado de informoj kiuj lasas al aliuloj identigi la uzanton" #~ msgid "No references to homosexuality" #~ msgstr "Neniu priparolado de samseksemeco" #~ msgid "Indirect references to homosexuality" #~ msgstr "Nerekta priparolado de samseksemeco" #~ msgid "Kissing between people of the same gender" #~ msgstr "Kisado inter samseksaj homoj" #~ msgid "Graphic sexual behavior between people of the same gender" #~ msgstr "Serioza seksa konduta inter samseksaj homoj" #~ msgid "No references to prostitution" #~ msgstr "Neniu priparolado de prostituo" #~ msgid "Indirect references to prostitution" #~ msgstr "Nerekta priparolado de prostituo" #~ msgid "Direct references to prostitution" #~ msgstr "Rekta priparolado de prostituo" #~ msgid "Graphic depictions of the act of prostitution" #~ msgstr "Serioza figurado de prostituo" #~ msgid "No references to adultery" #~ msgstr "Neniu priparolado de adulto" #~ msgid "Indirect references to adultery" #~ msgstr "Nerekta priparolado de adulto" #~ msgid "Direct references to adultery" #~ msgstr "Rekta priparolado de adulto" #~ msgid "Graphic depictions of the act of adultery" #~ msgstr "Serioza figurado de adulto" #~ msgid "No sexualized characters" #~ msgstr "Neniu seksigita rolulo" #~ msgid "Scantily clad human characters" #~ msgstr "Malabunde vestigitaj homaj roluloj" #~ msgid "Overtly sexualized human characters" #~ msgstr "Nekaŝe seksigitaj homaj roluloj" #~ msgid "No references to desecration" #~ msgstr "Neniu priparolado de malsanktigo" #~ msgid "Depictions of modern-day human desecration" #~ msgstr "Figurado de nunatempa homa malsanktigo" #~ msgid "Graphic depictions of modern-day desecration" #~ msgstr "Serioza figurado de nunatempa malsanktigo" #~ msgid "No visible dead human remains" #~ msgstr "Neniu videbla homa kadavro" #~ msgid "Visible dead human remains" #~ msgstr "Videblaj homaj kadavroj" #~ msgid "Dead human remains that are exposed to the elements" #~ msgstr "Korpopartoj de mortinto(j) kiuj daŭre estis en la naturo" #~ msgid "Graphic depictions of desecration of human bodies" #~ msgstr "Serioza figurado de malsanktigo de homaj korpoj" #~ msgid "No references to slavery" #~ msgstr "Neniu priparolado de sklaveco" #~ msgid "Depictions of modern-day slavery" #~ msgstr "Figurado de nunatempa sklaveco" #~ msgid "Graphic depictions of modern-day slavery" #~ msgstr "Serioza figurado de nunatempa sklaveco" malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/po/es.po000066400000000000000000000710061505556674000231650ustar00rootroot00000000000000# Spanish translations for malcontent. # Copyright © 2020 the malcontent authors # This file is distributed under the same license as the malcontent package. # Adolfo Jayme Barrientos , 2020. # msgid "" msgstr "" "Project-Id-Version: malcontent\n" "POT-Creation-Date: 2020-06-10 12:08+0100\n" "PO-Revision-Date: 2020-08-22 05:13-0500\n" "Last-Translator: Adolfo Jayme Barrientos \n" "Language-Team: \n" "Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Poedit 2.4.1\n" #: accounts-service/com.endlessm.ParentalControls.policy.in:4 msgid "Change your own app filter" msgstr "Cambiar su propio filtro de aplicaciones" #: accounts-service/com.endlessm.ParentalControls.policy.in:5 msgid "Authentication is required to change your app filter." msgstr "Necesita autenticarse para cambiar su filtro de aplicaciones." #: accounts-service/com.endlessm.ParentalControls.policy.in:14 msgid "Read your own app filter" msgstr "Leer su propio filtro de aplicaciones" #: accounts-service/com.endlessm.ParentalControls.policy.in:15 msgid "Authentication is required to read your app filter." msgstr "Necesita autenticarse para leer su filtro de aplicaciones." #: accounts-service/com.endlessm.ParentalControls.policy.in:24 msgid "Change another user’s app filter" msgstr "Cambiar filtro de aplicaciones de otra cuenta" #: accounts-service/com.endlessm.ParentalControls.policy.in:25 msgid "Authentication is required to change another user’s app filter." msgstr "" "Necesita autenticarse para cambiar el filtro de aplicaciones de otra cuenta." #: accounts-service/com.endlessm.ParentalControls.policy.in:34 msgid "Read another user’s app filter" msgstr "Leer el filtro de aplicaciones de otra cuenta" #: accounts-service/com.endlessm.ParentalControls.policy.in:35 msgid "Authentication is required to read another user’s app filter." msgstr "" "Necesita autenticarse para leer el filtro de aplicaciones de otra cuenta." #: accounts-service/com.endlessm.ParentalControls.policy.in:44 msgid "Change your own session limits" msgstr "Cambiar sus propios límites de sesión" #: accounts-service/com.endlessm.ParentalControls.policy.in:45 msgid "Authentication is required to change your session limits." msgstr "Necesita autenticarse para cambiar los límites de su sesión." #: accounts-service/com.endlessm.ParentalControls.policy.in:54 msgid "Read your own session limits" msgstr "Leer sus propios límites de sesión" #: accounts-service/com.endlessm.ParentalControls.policy.in:55 msgid "Authentication is required to read your session limits." msgstr "Necesita autenticarse para leer los límites de su sesión." #: accounts-service/com.endlessm.ParentalControls.policy.in:64 msgid "Change another user’s session limits" msgstr "Cambiar los límites de sesión de otra cuenta" #: accounts-service/com.endlessm.ParentalControls.policy.in:65 msgid "Authentication is required to change another user’s session limits." msgstr "" "Necesita autenticarse para cambiar los límites de sesión de otra cuenta." #: accounts-service/com.endlessm.ParentalControls.policy.in:74 msgid "Read another user’s session limits" msgstr "Leer los límites de sesión de otra cuenta" #: accounts-service/com.endlessm.ParentalControls.policy.in:75 msgid "Authentication is required to read another user’s session limits." msgstr "Necesita autenticarse para leer los límites de sesión de otra cuenta." #: accounts-service/com.endlessm.ParentalControls.policy.in:84 msgid "Change your own account info" msgstr "Cambiar información de su propia cuenta" #: accounts-service/com.endlessm.ParentalControls.policy.in:85 msgid "Authentication is required to change your account info." msgstr "Necesita autenticarse para cambiar la información de su cuenta." #: accounts-service/com.endlessm.ParentalControls.policy.in:94 msgid "Read your own account info" msgstr "Leer información de su propia cuenta" #: accounts-service/com.endlessm.ParentalControls.policy.in:95 msgid "Authentication is required to read your account info." msgstr "Necesita autenticarse para leer la información de su cuenta." #: accounts-service/com.endlessm.ParentalControls.policy.in:104 msgid "Change another user’s account info" msgstr "Cambiar información de la cuenta de otra cuenta" #: accounts-service/com.endlessm.ParentalControls.policy.in:105 msgid "Authentication is required to change another user’s account info." msgstr "" "Necesita autenticarse para cambiar la información de la cuenta de otro " "usuario." #: accounts-service/com.endlessm.ParentalControls.policy.in:114 msgid "Read another user’s account info" msgstr "Leer información de la cuenta de otro usuario" #: accounts-service/com.endlessm.ParentalControls.policy.in:115 msgid "Authentication is required to read another user’s account info." msgstr "" "Necesita autenticarse para leer la información de la cuenta de otro usuario." #: libmalcontent/app-filter.c:694 #, c-format msgid "App filter for user %u was in an unrecognized format" msgstr "No se reconoce el formato del filtro de aplicaciones de la cuenta %u" #: libmalcontent/app-filter.c:725 #, c-format msgid "OARS filter for user %u has an unrecognized kind ‘%s’" msgstr "El filtro OARS de la cuenta %u es del tipo no reconocido «%s»" #: libmalcontent/manager.c:283 libmalcontent/manager.c:412 #, c-format msgid "Not allowed to query app filter data for user %u" msgstr "" "No se permite consultar los datos del filtro de aplicaciones de la cuenta %u" #: libmalcontent/manager.c:288 #, c-format msgid "User %u does not exist" msgstr "La cuenta %u no existe" #: libmalcontent/manager.c:394 msgid "App filtering is globally disabled" msgstr "El filtrado de aplicaciones está desactivado a nivel global" #: libmalcontent/manager.c:777 msgid "Session limits are globally disabled" msgstr "Los límites de las sesiones están desactivados globalmente" #: libmalcontent/manager.c:795 #, c-format msgid "Not allowed to query session limits data for user %u" msgstr "" "No se permite consultar los datos de los límites de sesión de la cuenta %u" #: libmalcontent/session-limits.c:306 #, c-format msgid "Session limit for user %u was in an unrecognized format" msgstr "No se reconoce el formato del límite de sesión de la cuenta %u" #: libmalcontent/session-limits.c:328 #, c-format msgid "Session limit for user %u has an unrecognized type ‘%u’" msgstr "El límite de sesión de la cuenta %u es del tipo no reconocido «%u»" #: libmalcontent/session-limits.c:346 #, c-format msgid "Session limit for user %u has invalid daily schedule %u–%u" msgstr "" "El límite de sesión de la cuenta %u tiene una programación diaria no válida, " "de %u a %u" #. TRANSLATORS: This is the formatting of English and localized name #. of the rating e.g. "Adults Only (solo adultos)" #: libmalcontent-ui/gs-content-rating.c:75 #, c-format msgid "%s (%s)" msgstr "%s (%s)" #: libmalcontent-ui/gs-content-rating.c:209 msgid "General" msgstr "General" #: libmalcontent-ui/gs-content-rating.c:218 msgid "ALL" msgstr "TODOS" #: libmalcontent-ui/gs-content-rating.c:222 #: libmalcontent-ui/gs-content-rating.c:485 msgid "Adults Only" msgstr "Adultos únicamente" #: libmalcontent-ui/gs-content-rating.c:224 #: libmalcontent-ui/gs-content-rating.c:484 msgid "Mature" msgstr "Maduro +17" #: libmalcontent-ui/gs-content-rating.c:226 #: libmalcontent-ui/gs-content-rating.c:483 msgid "Teen" msgstr "Adolescentes" #: libmalcontent-ui/gs-content-rating.c:228 #: libmalcontent-ui/gs-content-rating.c:482 msgid "Everyone 10+" msgstr "Todos +10" #: libmalcontent-ui/gs-content-rating.c:230 #: libmalcontent-ui/gs-content-rating.c:481 msgid "Everyone" msgstr "Todos" #: libmalcontent-ui/gs-content-rating.c:232 #: libmalcontent-ui/gs-content-rating.c:480 msgid "Early Childhood" msgstr "Niños pequeños" #. Translators: the placeholder is a user’s full name #: libmalcontent-ui/restrict-applications-dialog.c:222 #, c-format msgid "Restrict %s from using the following installed applications." msgstr "" "Restringe el uso por parte de %s de las aplicaciones instaladas siguientes." #: libmalcontent-ui/restrict-applications-dialog.ui:6 #: libmalcontent-ui/restrict-applications-dialog.ui:12 msgid "Restrict Applications" msgstr "Restringir aplicaciones" #: libmalcontent-ui/restrict-applications-selector.ui:24 msgid "No applications found to restrict." msgstr "No se han encontrado solicitudes de restricciones." #. Translators: this is the full name for an unknown user account. #: libmalcontent-ui/user-controls.c:242 libmalcontent-ui/user-controls.c:253 msgid "unknown" msgstr "desconocido" #: libmalcontent-ui/user-controls.c:338 libmalcontent-ui/user-controls.c:425 #: libmalcontent-ui/user-controls.c:711 msgid "All Ages" msgstr "Todas las edades" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:514 #, c-format msgid "" "Prevents %s from running web browsers. Limited web content may still be " "available in other applications." msgstr "" "Evita que %s ejecute los navegadores web. Otras aplicaciones aún podrían " "mostrar contenido web limitado." #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:519 #, c-format msgid "Prevents specified applications from being used by %s." msgstr "Evita que %s utilice las aplicaciones especificadas." #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:524 #, c-format msgid "Prevents %s from installing applications." msgstr "Evita que %s instale aplicaciones." #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:529 #, c-format msgid "Applications installed by %s will not appear for other users." msgstr "Las aplicaciones instaladas por %s no aparecerán para otros usuarios." #: libmalcontent-ui/user-controls.ui:17 msgid "Application Usage Restrictions" msgstr "Restricciones de uso de aplicaciones" #: libmalcontent-ui/user-controls.ui:68 msgid "Restrict _Web Browsers" msgstr "Restringir _navegadores web" #: libmalcontent-ui/user-controls.ui:152 msgid "_Restrict Applications" msgstr "_Restringir aplicaciones" #: libmalcontent-ui/user-controls.ui:231 msgid "Software Installation Restrictions" msgstr "Restricciones a la instalación de software" #: libmalcontent-ui/user-controls.ui:281 msgid "Restrict Application _Installation" msgstr "Restringir _instalación de aplicaciones" #: libmalcontent-ui/user-controls.ui:366 msgid "Restrict Application Installation for _Others" msgstr "Restringir instalación de aplicaciones a los _otros" #: libmalcontent-ui/user-controls.ui:451 msgid "Application _Suitability" msgstr "_Idoneidad de aplicaciones" #: libmalcontent-ui/user-controls.ui:473 msgid "" "Restricts browsing or installation of applications to applications suitable " "for certain ages or above." msgstr "" "Restringe la navegación o la instalación de aplicaciones a aquellas " "adecuadas para determinadas edades." #. Translators: This is the title of the main window #. Translators: the name of the application as it appears in a software center #: malcontent-control/application.c:105 malcontent-control/main.ui:12 #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:9 #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:3 msgid "Parental Controls" msgstr "Controles parentales" #: malcontent-control/application.c:270 msgid "Copyright © 2019, 2020 Endless Mobile, Inc." msgstr "Derechos de autor © 2019-2020 de Endless Mobile, Inc." #. Translators: this should be "translated" to the #. names of people who have translated Malcontent into #. this language, one per line. #: malcontent-control/application.c:275 msgid "translator-credits" msgstr "" "Adolfo Jayme Barrientos , 2020\n" "Endless Mobile, Inc., 2019-2020" #. Translators: "Malcontent" is the brand name of this #. project, so should not be translated. #: malcontent-control/application.c:281 msgid "Malcontent Website" msgstr "Sitio web de Malcontent" #: malcontent-control/application.c:299 msgid "The help contents could not be displayed" msgstr "No se pudo mostrar el contenido de la ayuda" #: malcontent-control/application.c:336 msgid "Failed to load user data from the system" msgstr "No se cargaron los datos de los usuarios del sistema" #: malcontent-control/application.c:338 msgid "Please make sure that the AccountsService is installed and enabled." msgstr "Cerciórese de que el AccountsService esté instalado y activado." #: malcontent-control/carousel.ui:48 msgid "Previous Page" msgstr "Página anterior" #: malcontent-control/carousel.ui:74 msgid "Next Page" msgstr "Página siguiente" #: malcontent-control/main.ui:93 msgid "Permission Required" msgstr "Permiso obligatorio" #: malcontent-control/main.ui:107 msgid "" "Permission is required to view and change user parental controls settings." msgstr "" "Se necesita permiso para ver y cambiar la configuración de los controles " "parentales de la cuenta." #: malcontent-control/main.ui:148 msgid "No Child Users Configured" msgstr "No hay cuentas infantiles configuradas" #: malcontent-control/main.ui:162 msgid "" "No child users are currently set up on the system. Create one before setting " "up their parental controls." msgstr "" "Actualmente no hay cuentas infantiles en el sistema. Cree una antes de " "configurar sus controles parentales." #: malcontent-control/main.ui:174 msgid "Create _Child User" msgstr "Crear cuenta _infantil" #: malcontent-control/main.ui:202 msgid "Loading…" msgstr "Cargando…" #: malcontent-control/main.ui:265 msgid "_Help" msgstr "Ay_uda" #: malcontent-control/main.ui:269 msgid "_About Parental Controls" msgstr "_Acerca de los controles parentales" #. Translators: the brief summary of the application as it appears in a software center. #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:12 #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:4 msgid "Set parental controls and monitor usage by users" msgstr "" "Establezca controles parentales y supervise el uso por parte de los usuarios" #. Translators: These are the application description paragraphs in the AppData file. #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:16 msgid "" "Manage users’ parental controls restrictions, controlling how long they can " "use the computer for, what software they can install, and what installed " "software they can run." msgstr "" "Gestione las restricciones de los controles parentales de los usuarios, " "controlando el tiempo que pueden usar el equipo, el software que pueden " "instalar y el software instalado que pueden ejecutar." #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:39 msgid "The GNOME Project" msgstr "El proyecto GNOME" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:50 #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:59 msgid "Minor improvements to parental controls application UI" msgstr "" "Refinamientos a la interfaz de usuario de la aplicación de controles " "parentales" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:51 msgid "Add a user manual" msgstr "Incorporación de un manual de uso" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:52 msgid "Translation updates" msgstr "Traducciones actualizadas" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:60 msgid "Translations to Ukrainian and Polish" msgstr "Traducciones en ucraniano y polaco" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:67 msgid "Improve parental controls application UI and add icon" msgstr "" "Mejoras a la interfaz de la aplicación de controles parentales y adición de " "un icono" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:68 msgid "Support for indicating which accounts are parent accounts" msgstr "Es posible indicar cuáles cuentas pertenecen a los padres" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:75 msgid "Initial release of basic parental controls application" msgstr "Versión inicial de la aplicación de controles parentales básicos" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:76 msgid "Support for setting app installation and run restrictions on users" msgstr "" "Se permite establecer restricciones de instalación y ejecución de " "aplicaciones para cada cuenta" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:83 msgid "Maintenance release of underlying parental controls library" msgstr "" "Actualización de mantenimiento para la biblioteca subyacente de los " "controles parentales" #. Translators: Do NOT translate or transliterate this text (this is an icon file name)! #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:7 msgid "org.freedesktop.MalcontentControl" msgstr "org.freedesktop.MalcontentControl" #. Translators: Search terms to find this application. Do NOT translate or localise the semicolons! The list MUST also end with a semicolon! #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:13 msgid "" "parental controls;screen time;app restrictions;web browser restrictions;oars;" "usage;usage limit;kid;child;" msgstr "" "controles parentales;tiempo ante pantalla;restricciones de las aplicaciones;" "restricciones del navegador web;oars;uso;límite de uso;niño;hijo;infantil;" #: malcontent-control/org.freedesktop.MalcontentControl.policy.in:9 msgid "Manage parental controls" msgstr "Gestionar controles parentales" #: malcontent-control/org.freedesktop.MalcontentControl.policy.in:10 msgid "Authentication is required to read and change user parental controls" msgstr "" "Necesita autenticarse para leer y cambiar los controles parentales de la " "cuenta" #: malcontent-control/user-selector.c:426 msgid "Your account" msgstr "Su cuenta" #. Always allow root, to avoid a situation where this PAM module prevents #. * all users logging in with no way of recovery. #: pam/pam_malcontent.c:142 pam/pam_malcontent.c:188 #, c-format msgid "User ‘%s’ has no time limits enabled" msgstr "El usuario «%s» no tiene límites de tiempo activados" #: pam/pam_malcontent.c:151 pam/pam_malcontent.c:172 #, c-format msgid "Error getting session limits for user ‘%s’: %s" msgstr "Error al obtener los límites de sesión de la cuenta «%s»: %s" #: pam/pam_malcontent.c:182 #, c-format msgid "User ‘%s’ has no time remaining" msgstr "Al usuario «%s» no le queda tiempo" #: pam/pam_malcontent.c:200 #, c-format msgid "Error setting time limit on login session: %s" msgstr "Error al establecer el límite de tiempo en la sesión de acceso: %s" #~ msgid "No cartoon violence" #~ msgstr "Sin violencia con personajes animados" #~ msgid "Cartoon characters in unsafe situations" #~ msgstr "Personajes animados en situaciones no seguras" #~ msgid "Cartoon characters in aggressive conflict" #~ msgstr "Personajes animados en conflictos agresivos" #~ msgid "Graphic violence involving cartoon characters" #~ msgstr "Violencia gráfica con personajes animados" #~ msgid "No fantasy violence" #~ msgstr "Sin violencia fantástica" #~ msgid "Characters in unsafe situations easily distinguishable from reality" #~ msgstr "" #~ "Personajes en situaciones no seguras distinguibles fácilmente de la " #~ "realidad" #~ msgid "" #~ "Characters in aggressive conflict easily distinguishable from reality" #~ msgstr "" #~ "Personajes en conflictos agresivos distinguibles fácilmente de la realidad" #~ msgid "Graphic violence easily distinguishable from reality" #~ msgstr "Violencia gráfica distinguible fácilmente de la realidad" #~ msgid "No realistic violence" #~ msgstr "Sin violencia realista" #~ msgid "Mildly realistic characters in unsafe situations" #~ msgstr "Personajes semi-realistas en situaciones no seguras" #~ msgid "Depictions of realistic characters in aggressive conflict" #~ msgstr "Representaciones de personajes realistas en conflictos agresivos" #~ msgid "Graphic violence involving realistic characters" #~ msgstr "Violencia gráfica con personajes realistas" #~ msgid "No bloodshed" #~ msgstr "Sin masacres" #~ msgid "Unrealistic bloodshed" #~ msgstr "Masacre no realista" #~ msgid "Realistic bloodshed" #~ msgstr "Masacre realista" #~ msgid "Depictions of bloodshed and the mutilation of body parts" #~ msgstr "Representaciones de masacres y mutilación de partes del cuerpo" #~ msgid "No sexual violence" #~ msgstr "Sin violencia sexual" #~ msgid "Rape or other violent sexual behavior" #~ msgstr "Violación u otro comportamiento sexual violento" #~ msgid "No references to alcohol" #~ msgstr "Sin referencias a bebidas alcohólicas" #~ msgid "References to alcoholic beverages" #~ msgstr "Referencias a bebidas alcohólicas" #~ msgid "Use of alcoholic beverages" #~ msgstr "Uso de bebidas alcohólicas" #~ msgid "No references to illicit drugs" #~ msgstr "Sin referencias a drogas ilegales" #~ msgid "References to illicit drugs" #~ msgstr "Referencias a drogas ilegales" #~ msgid "Use of illicit drugs" #~ msgstr "Uso de drogas ilegales" #~ msgid "References to tobacco products" #~ msgstr "Referencias al tabaco" #~ msgid "Use of tobacco products" #~ msgstr "Uso de tabaco" #~ msgid "No nudity of any sort" #~ msgstr "Sin desnudos de ningún tipo" #~ msgid "Brief artistic nudity" #~ msgstr "Desnudez artística breve" #~ msgid "Prolonged nudity" #~ msgstr "Desnudez prolongada" #~ msgid "No references or depictions of sexual nature" #~ msgstr "Sin representaciones o referencias sexuales" #~ msgid "Provocative references or depictions" #~ msgstr "Representaciones o referencias provocativas" #~ msgid "Sexual references or depictions" #~ msgstr "Representaciones o referencias sexuales" #~ msgid "Graphic sexual behavior" #~ msgstr "Comportamiento sexual gráfico" #~ msgid "No profanity of any kind" #~ msgstr "Sin blasfemia de ningún tipo" #~ msgid "Mild or infrequent use of profanity" #~ msgstr "Uso moderado o poco frecuente de la blasfemia" #~ msgid "Moderate use of profanity" #~ msgstr "Uso moderado de la blasfemia" #~ msgid "Strong or frequent use of profanity" #~ msgstr "Uso amplio o frecuente de la blasfemia" #~ msgid "No inappropriate humor" #~ msgstr "Sin humor inapropiado" #~ msgid "Slapstick humor" #~ msgstr "Humor absurdo" #~ msgid "Vulgar or bathroom humor" #~ msgstr "Humor vulgar o escatológico" #~ msgid "Mature or sexual humor" #~ msgstr "Humor adulto o sexual" #~ msgid "No discriminatory language of any kind" #~ msgstr "Sin lenguaje discriminatorio de cualquier tipo" #~ msgid "Negativity towards a specific group of people" #~ msgstr "Negatividad hacia un determinado grupo de personas" #~ msgid "Discrimination designed to cause emotional harm" #~ msgstr "Discriminación para causar daño emocional" #~ msgid "Explicit discrimination based on gender, sexuality, race or religion" #~ msgstr "" #~ "Discriminación explícita basada en género, sexualidad, raza o religión" #~ msgid "No advertising of any kind" #~ msgstr "Sin publicidad de ningún tipo" #~ msgid "Product placement" #~ msgstr "Venta de productos" #~ msgid "Explicit references to specific brands or trademarked products" #~ msgstr "" #~ "Referencias explícitas a marcas concretas o productos de marcas " #~ "registradas" #~ msgid "Users are encouraged to purchase specific real-world items" #~ msgstr "" #~ "Se incita a los jugadores a comprar determinados elementos del mundo real" #~ msgid "No gambling of any kind" #~ msgstr "Sin apuestas de ningún tipo" #~ msgid "Gambling on random events using tokens or credits" #~ msgstr "Juego en eventos aleatorios usando créditos o vidas" #~ msgid "Gambling using “play” money" #~ msgstr "Juego usando dinero virtual" #~ msgid "Gambling using real money" #~ msgstr "Juego usando dinero real" #~ msgid "No ability to spend money" #~ msgstr "Sin posibilidad de gastar" #~ msgid "Users are encouraged to donate real money" #~ msgstr "Se incita a los jugadores a donar dinero real" #~ msgid "Ability to spend real money in-game" #~ msgstr "Posibilidad de gastar dinero real en el juego" #~ msgid "No way to chat with other users" #~ msgstr "Sin posibilidad de chatear con otros jugadores" #~ msgid "User-to-user game interactions without chat functionality" #~ msgstr "" #~ "Interacciones de jugador a jugador del juego sin funcionalidad de chat" #~ msgid "Moderated chat functionality between users" #~ msgstr "Funcionalidad de chat moderada entre jugadores" #~ msgid "Uncontrolled chat functionality between users" #~ msgstr "Funcionalidad de chat sin controlar entre jugadores" #~ msgid "No way to talk with other users" #~ msgstr "Sin posibilidad de hablar con otros jugadores" #~ msgid "Uncontrolled audio or video chat functionality between users" #~ msgstr "Funcionalidad de sonido o vídeo sin controlar entre jugadores" #~ msgid "No sharing of social network usernames or email addresses" #~ msgstr "" #~ "No comparte en redes sociales de nombres de usuario o direcciones de " #~ "correo-e" #~ msgid "Sharing social network usernames or email addresses" #~ msgstr "" #~ "Compartición en redes sociales de nombres de usuario o direcciones de " #~ "correo-e" #~ msgid "No sharing of user information with 3rd parties" #~ msgstr "No comparte la información del usuario con terceros" #~ msgid "Checking for the latest application version" #~ msgstr "Comprobando la última versión de la aplicación" #~ msgid "Sharing diagnostic data that does not let others identify the user" #~ msgstr "" #~ "Compartición de datos diagnósticos que no permiten a otros identificar al " #~ "usuario" #~ msgid "Sharing information that lets others identify the user" #~ msgstr "" #~ "Compartición de información que permite a otros identificar al usuario" #~ msgid "No sharing of physical location to other users" #~ msgstr "No comparte la ubicación física con otros usuarios" #~ msgid "Sharing physical location to other users" #~ msgstr "Compartición de la ubicación física con otros usuarios" #~ msgid "No references to homosexuality" #~ msgstr "Sin referencias a la homosexualidad" #~ msgid "Indirect references to homosexuality" #~ msgstr "Referencias indirectas a la homosexualidad" #~ msgid "Kissing between people of the same gender" #~ msgstr "Besos entre personas del mismo sexo" #~ msgid "Graphic sexual behavior between people of the same gender" #~ msgstr "Comportamiento sexual gráfico entre personas del mismo sexo" #~ msgid "No references to prostitution" #~ msgstr "Sin referencias a la prostitución" #~ msgid "Indirect references to prostitution" #~ msgstr "Referencias indirectas a la prostitución" #~ msgid "Direct references to prostitution" #~ msgstr "Referencias directas a la prostitución" #~ msgid "Graphic depictions of the act of prostitution" #~ msgstr "Representación gráfica del acto de prostitución" #~ msgid "No references to adultery" #~ msgstr "Sin referencias al adulterio" #~ msgid "Indirect references to adultery" #~ msgstr "Referencias indirectas al adulterio" #~ msgid "Direct references to adultery" #~ msgstr "Referencias directas al adulterio" #~ msgid "Graphic depictions of the act of adultery" #~ msgstr "Representación gráfica del acto de adulterio" #~ msgid "No sexualized characters" #~ msgstr "Sin caracteres sexualizados" #~ msgid "Scantily clad human characters" #~ msgstr "Caracteres humanos apenas vestidos" #~ msgid "Overtly sexualized human characters" #~ msgstr "Caracteres humanos abiertamente sexualizados" #~ msgid "No references to desecration" #~ msgstr "Sin referencias a la profanación" #~ msgid "Depictions or references to historical desecration" #~ msgstr "Representación gráfica de profanación histórica" #~ msgid "Depictions of modern-day human desecration" #~ msgstr "Representación gráfica de profanación humana actual" #~ msgid "Graphic depictions of modern-day desecration" #~ msgstr "Representación gráfica de profanación actual" #~ msgid "No visible dead human remains" #~ msgstr "Sin restos mortales humanos visibles" #~ msgid "Visible dead human remains" #~ msgstr "Restos mortales humanos visibles" #~ msgid "Dead human remains that are exposed to the elements" #~ msgstr "Restos mortales humanos expuestos a los elementos" #~ msgid "Graphic depictions of desecration of human bodies" #~ msgstr "Representación gráfica de profanación de cuerpos humanos" #~ msgid "No references to slavery" #~ msgstr "Sin referencias a la esclavitud" #~ msgid "Depictions or references to historical slavery" #~ msgstr "Representaciones o referencias a la esclavitud histórica" #~ msgid "Depictions of modern-day slavery" #~ msgstr "Representaciones o referencias a la esclavitud actual" #~ msgid "Graphic depictions of modern-day slavery" #~ msgstr "Representación gráfica de esclavitud actual" malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/po/eu.po000066400000000000000000000562411505556674000231730ustar00rootroot00000000000000# Basque translations for malcontent package. # Copyright (C) 2020 THE malcontent'S COPYRIGHT HOLDER # This file is distributed under the same license as the malcontent package. # Automatically generated, 2020. # msgid "" msgstr "" "Project-Id-Version: malcontent\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-06-10 12:04+0100\n" "PO-Revision-Date: 2020-04-15 13:42+0100\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: eu\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: accounts-service/com.endlessm.ParentalControls.policy.in:4 msgid "Change your own app filter" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:5 msgid "Authentication is required to change your app filter." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:14 msgid "Read your own app filter" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:15 msgid "Authentication is required to read your app filter." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:24 msgid "Change another user’s app filter" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:25 msgid "Authentication is required to change another user’s app filter." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:34 msgid "Read another user’s app filter" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:35 msgid "Authentication is required to read another user’s app filter." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:44 msgid "Change your own session limits" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:45 msgid "Authentication is required to change your session limits." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:54 msgid "Read your own session limits" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:55 msgid "Authentication is required to read your session limits." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:64 msgid "Change another user’s session limits" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:65 msgid "Authentication is required to change another user’s session limits." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:74 msgid "Read another user’s session limits" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:75 msgid "Authentication is required to read another user’s session limits." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:84 msgid "Change your own account info" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:85 msgid "Authentication is required to change your account info." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:94 msgid "Read your own account info" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:95 msgid "Authentication is required to read your account info." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:104 msgid "Change another user’s account info" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:105 msgid "Authentication is required to change another user’s account info." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:114 msgid "Read another user’s account info" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:115 msgid "Authentication is required to read another user’s account info." msgstr "" #: libmalcontent/app-filter.c:694 #, c-format msgid "App filter for user %u was in an unrecognized format" msgstr "" #: libmalcontent/app-filter.c:725 #, c-format msgid "OARS filter for user %u has an unrecognized kind ‘%s’" msgstr "" #: libmalcontent/manager.c:283 libmalcontent/manager.c:412 #, c-format msgid "Not allowed to query app filter data for user %u" msgstr "" #: libmalcontent/manager.c:288 #, c-format msgid "User %u does not exist" msgstr "" #: libmalcontent/manager.c:394 msgid "App filtering is globally disabled" msgstr "" #: libmalcontent/manager.c:777 msgid "Session limits are globally disabled" msgstr "" #: libmalcontent/manager.c:795 #, c-format msgid "Not allowed to query session limits data for user %u" msgstr "" #: libmalcontent/session-limits.c:306 #, c-format msgid "Session limit for user %u was in an unrecognized format" msgstr "" #: libmalcontent/session-limits.c:328 #, c-format msgid "Session limit for user %u has an unrecognized type ‘%u’" msgstr "" #: libmalcontent/session-limits.c:346 #, c-format msgid "Session limit for user %u has invalid daily schedule %u–%u" msgstr "" #. TRANSLATORS: This is the formatting of English and localized name #. of the rating e.g. "Adults Only (solo adultos)" #: libmalcontent-ui/gs-content-rating.c:75 #, c-format msgid "%s (%s)" msgstr "" #: libmalcontent-ui/gs-content-rating.c:209 msgid "General" msgstr "" #: libmalcontent-ui/gs-content-rating.c:218 msgid "ALL" msgstr "" #: libmalcontent-ui/gs-content-rating.c:222 #: libmalcontent-ui/gs-content-rating.c:485 msgid "Adults Only" msgstr "" #: libmalcontent-ui/gs-content-rating.c:224 #: libmalcontent-ui/gs-content-rating.c:484 msgid "Mature" msgstr "" #: libmalcontent-ui/gs-content-rating.c:226 #: libmalcontent-ui/gs-content-rating.c:483 msgid "Teen" msgstr "" #: libmalcontent-ui/gs-content-rating.c:228 #: libmalcontent-ui/gs-content-rating.c:482 msgid "Everyone 10+" msgstr "" #: libmalcontent-ui/gs-content-rating.c:230 #: libmalcontent-ui/gs-content-rating.c:481 msgid "Everyone" msgstr "" #: libmalcontent-ui/gs-content-rating.c:232 #: libmalcontent-ui/gs-content-rating.c:480 msgid "Early Childhood" msgstr "" #. Translators: the placeholder is a user’s full name #: libmalcontent-ui/restrict-applications-dialog.c:222 #, c-format msgid "Restrict %s from using the following installed applications." msgstr "" #: libmalcontent-ui/restrict-applications-dialog.ui:6 #: libmalcontent-ui/restrict-applications-dialog.ui:12 msgid "Restrict Applications" msgstr "" #: libmalcontent-ui/restrict-applications-selector.ui:24 msgid "No applications found to restrict." msgstr "" #. Translators: this is the full name for an unknown user account. #: libmalcontent-ui/user-controls.c:242 libmalcontent-ui/user-controls.c:253 msgid "unknown" msgstr "" #: libmalcontent-ui/user-controls.c:338 libmalcontent-ui/user-controls.c:425 #: libmalcontent-ui/user-controls.c:711 msgid "All Ages" msgstr "" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:514 #, c-format msgid "" "Prevents %s from running web browsers. Limited web content may still be " "available in other applications." msgstr "" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:519 #, c-format msgid "Prevents specified applications from being used by %s." msgstr "" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:524 #, c-format msgid "Prevents %s from installing applications." msgstr "" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:529 #, c-format msgid "Applications installed by %s will not appear for other users." msgstr "" #: libmalcontent-ui/user-controls.ui:17 msgid "Application Usage Restrictions" msgstr "" #: libmalcontent-ui/user-controls.ui:68 msgid "Restrict _Web Browsers" msgstr "" #: libmalcontent-ui/user-controls.ui:152 msgid "_Restrict Applications" msgstr "" #: libmalcontent-ui/user-controls.ui:231 msgid "Software Installation Restrictions" msgstr "" #: libmalcontent-ui/user-controls.ui:281 msgid "Restrict Application _Installation" msgstr "" #: libmalcontent-ui/user-controls.ui:366 msgid "Restrict Application Installation for _Others" msgstr "" #: libmalcontent-ui/user-controls.ui:451 msgid "Application _Suitability" msgstr "" #: libmalcontent-ui/user-controls.ui:473 msgid "" "Restricts browsing or installation of applications to applications suitable " "for certain ages or above." msgstr "" #. Translators: This is the title of the main window #. Translators: the name of the application as it appears in a software center #: malcontent-control/application.c:105 malcontent-control/main.ui:12 #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:9 #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:3 msgid "Parental Controls" msgstr "" #: malcontent-control/application.c:270 msgid "Copyright © 2019, 2020 Endless Mobile, Inc." msgstr "" #. Translators: this should be "translated" to the #. names of people who have translated Malcontent into #. this language, one per line. #: malcontent-control/application.c:275 msgid "translator-credits" msgstr "" #. Translators: "Malcontent" is the brand name of this #. project, so should not be translated. #: malcontent-control/application.c:281 msgid "Malcontent Website" msgstr "" #: malcontent-control/application.c:299 msgid "The help contents could not be displayed" msgstr "" #: malcontent-control/application.c:336 msgid "Failed to load user data from the system" msgstr "" #: malcontent-control/application.c:338 msgid "Please make sure that the AccountsService is installed and enabled." msgstr "" #: malcontent-control/carousel.ui:48 msgid "Previous Page" msgstr "" #: malcontent-control/carousel.ui:74 msgid "Next Page" msgstr "" #: malcontent-control/main.ui:93 msgid "Permission Required" msgstr "" #: malcontent-control/main.ui:107 msgid "" "Permission is required to view and change user parental controls settings." msgstr "" #: malcontent-control/main.ui:148 msgid "No Child Users Configured" msgstr "" #: malcontent-control/main.ui:162 msgid "" "No child users are currently set up on the system. Create one before setting " "up their parental controls." msgstr "" #: malcontent-control/main.ui:174 msgid "Create _Child User" msgstr "" #: malcontent-control/main.ui:202 msgid "Loading…" msgstr "" #: malcontent-control/main.ui:265 msgid "_Help" msgstr "_Laguntza" #: malcontent-control/main.ui:269 msgid "_About Parental Controls" msgstr "" #. Translators: the brief summary of the application as it appears in a software center. #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:12 #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:4 msgid "Set parental controls and monitor usage by users" msgstr "" #. Translators: These are the application description paragraphs in the AppData file. #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:16 msgid "" "Manage users’ parental controls restrictions, controlling how long they can " "use the computer for, what software they can install, and what installed " "software they can run." msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:39 msgid "The GNOME Project" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:50 #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:59 msgid "Minor improvements to parental controls application UI" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:51 msgid "Add a user manual" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:52 msgid "Translation updates" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:60 msgid "Translations to Ukrainian and Polish" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:67 msgid "Improve parental controls application UI and add icon" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:68 msgid "Support for indicating which accounts are parent accounts" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:75 msgid "Initial release of basic parental controls application" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:76 msgid "Support for setting app installation and run restrictions on users" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:83 msgid "Maintenance release of underlying parental controls library" msgstr "" #. Translators: Do NOT translate or transliterate this text (this is an icon file name)! #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:7 msgid "org.freedesktop.MalcontentControl" msgstr "" #. Translators: Search terms to find this application. Do NOT translate or localise the semicolons! The list MUST also end with a semicolon! #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:13 msgid "" "parental controls;screen time;app restrictions;web browser restrictions;oars;" "usage;usage limit;kid;child;" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.policy.in:9 msgid "Manage parental controls" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.policy.in:10 msgid "Authentication is required to read and change user parental controls" msgstr "" #: malcontent-control/user-selector.c:426 msgid "Your account" msgstr "Zure kontua" #. Always allow root, to avoid a situation where this PAM module prevents #. * all users logging in with no way of recovery. #: pam/pam_malcontent.c:142 pam/pam_malcontent.c:188 #, c-format msgid "User ‘%s’ has no time limits enabled" msgstr "" #: pam/pam_malcontent.c:151 pam/pam_malcontent.c:172 #, c-format msgid "Error getting session limits for user ‘%s’: %s" msgstr "" #: pam/pam_malcontent.c:182 #, c-format msgid "User ‘%s’ has no time remaining" msgstr "" #: pam/pam_malcontent.c:200 #, c-format msgid "Error setting time limit on login session: %s" msgstr "" #~ msgid "No cartoon violence" #~ msgstr "Marrazki bizidunetan biolentziarik ez" #~ msgid "Cartoon characters in unsafe situations" #~ msgstr "Marrazki bizidunetako pertsonaiak egoera arriskutsuetan" #~ msgid "Cartoon characters in aggressive conflict" #~ msgstr "Marrazki bizidunetako pertsonaiak gatazka latzetan" #~ msgid "Graphic violence involving cartoon characters" #~ msgstr "Biolentzia grafikoa marrazki bizidunetako pertsonaietan" #~ msgid "No fantasy violence" #~ msgstr "Fantasiazko biolentziarik ez" #~ msgid "Characters in unsafe situations easily distinguishable from reality" #~ msgstr "Pertsonaiak egoera arriskuetan, errealitatetik erraz berezituz" #~ msgid "" #~ "Characters in aggressive conflict easily distinguishable from reality" #~ msgstr "Pertsonaiak gatazka oldarkorrean, errealitatetik erraz berezituz" #~ msgid "Graphic violence easily distinguishable from reality" #~ msgstr "Biolentzia grafikoa, errealitatetik erraz berezituz" #~ msgid "No realistic violence" #~ msgstr "Biolentzia errealistarik ez" #~ msgid "Mildly realistic characters in unsafe situations" #~ msgstr "Pertsonai sasi-errealistikoak egoera arriskutsuetan" #~ msgid "Depictions of realistic characters in aggressive conflict" #~ msgstr "Pertsonai errealisten adierazpenak gatazka oldarkorrean" #~ msgid "Graphic violence involving realistic characters" #~ msgstr "Biolentzia grafikoa pertsonai errealistikoetan" #~ msgid "No bloodshed" #~ msgstr "Odol-isurtzerik gabekoa" #~ msgid "Unrealistic bloodshed" #~ msgstr "Odol-isurtze ez-errealistikoa" #~ msgid "Realistic bloodshed" #~ msgstr "Odol-isurtze errealistikoa" #~ msgid "Depictions of bloodshed and the mutilation of body parts" #~ msgstr "Odol-isurketen eta gorputz-mozketen adierazpenak" #~ msgid "No sexual violence" #~ msgstr "Sexu-biolentziarik gabe" #~ msgid "Rape or other violent sexual behavior" #~ msgstr "Bortxaketak edo bestelako indarkeriazko sexu portaerak" #~ msgid "No references to alcohol" #~ msgstr "Alkoholen erreferentziarik gabe" #~ msgid "References to alcoholic beverages" #~ msgstr "Edari alkoholdunen erreferentziak" #~ msgid "Use of alcoholic beverages" #~ msgstr "Edari alkoholdunen erabilera" #~ msgid "No references to illicit drugs" #~ msgstr "Droga ilegalen erreferentziarik gabe" #~ msgid "References to illicit drugs" #~ msgstr "Droga ilegalen erreferentziak" #~ msgid "Use of illicit drugs" #~ msgstr "Droga ilegalen erabilera" #~ msgid "References to tobacco products" #~ msgstr "Tabakoen produktuen erreferentziak" #~ msgid "Use of tobacco products" #~ msgstr "Tabakoen produktuen erabilera" #~ msgid "No nudity of any sort" #~ msgstr "Inolako biluztasunik gabe" #~ msgid "Brief artistic nudity" #~ msgstr "Biluztasun artistiko gutxi" #~ msgid "Prolonged nudity" #~ msgstr "Biluztasun hedatua" #~ msgid "No references or depictions of sexual nature" #~ msgstr "Izaera sexualeko erreferentziarik edo adierazpenik gabe" #~ msgid "Provocative references or depictions" #~ msgstr "Zirikatzearen erreferentziak edo adierazpenak" #~ msgid "Sexual references or depictions" #~ msgstr "Erreferentzia edo adierazpen sexualak" #~ msgid "Graphic sexual behavior" #~ msgstr "Sexu portaera grafikoa" #~ msgid "No profanity of any kind" #~ msgstr "Inolako motako biraorik gabe" #~ msgid "Mild or infrequent use of profanity" #~ msgstr "Erabilera baxuko biraoa" #~ msgid "Moderate use of profanity" #~ msgstr "Erabilera ertaineko biraoa" #~ msgid "Strong or frequent use of profanity" #~ msgstr "Erabilera altuko biraoa" #~ msgid "No inappropriate humor" #~ msgstr "Umore ez desegokia" #~ msgid "Slapstick humor" #~ msgstr "Komedia" #~ msgid "Vulgar or bathroom humor" #~ msgstr "Umore lizuna" #~ msgid "Mature or sexual humor" #~ msgstr "Umore sexuala edo helduentzakoa" #~ msgid "No discriminatory language of any kind" #~ msgstr "Inolako mintzaira diskriminatzailerik gabea" #~ msgid "Negativity towards a specific group of people" #~ msgstr "Pertsona talde zehatz batekiko negatibotasuna" #~ msgid "Discrimination designed to cause emotional harm" #~ msgstr "Min emozionala eragiteko diseinatutako diskriminazioa" #~ msgid "Explicit discrimination based on gender, sexuality, race or religion" #~ msgstr "" #~ "Generoa, sexualitatea, arraza edo erlijioan oinarritutako diskriminazio " #~ "esplizitua" #~ msgid "No advertising of any kind" #~ msgstr "Inolako iragarkirik gabe" #~ msgid "Product placement" #~ msgstr "Produktu-kokapena" #~ msgid "Explicit references to specific brands or trademarked products" #~ msgstr "" #~ "Produktuen marka edo marka erregistratu zehatzen erreferentzia esplizitua" #~ msgid "Users are encouraged to purchase specific real-world items" #~ msgstr "" #~ "Erabiltzaileei benetako munduko gauza zehatzak erostera bultzatzen zaie" #~ msgid "No gambling of any kind" #~ msgstr "Inolako apusturik gabe" #~ msgid "Gambling on random events using tokens or credits" #~ msgstr "Ausazko gertaeretan apustu egitea fitxak edo kredituak erabiliz" #~ msgid "Gambling using “play” money" #~ msgstr "Apustuak gezurrezko diruarekin" #~ msgid "Gambling using real money" #~ msgstr "Apustuak benetako diruarekin" #~ msgid "No ability to spend money" #~ msgstr "Dirua gastatzeko gaitasunik gabe" #~ msgid "Users are encouraged to donate real money" #~ msgstr "Erabiltzaileei benetako dirua dohaitzan ematera bultzatzen zaie" #~ msgid "Ability to spend real money in-game" #~ msgstr "Jokoan Benetako dirua gastatzeko gaitasuna" #~ msgid "No way to chat with other users" #~ msgstr "Ez dago modurik beste erabiltzaileekin berriketan aritzeko" #~ msgid "Moderated chat functionality between users" #~ msgstr "Erabiltzaileen arteko berriketa moderatuen funtzionaltasuna" #~ msgid "Uncontrolled chat functionality between users" #~ msgstr "Erabiltzaileen arteko kontrolik gabeko berriketen funtzionaltasuna" #~ msgid "No way to talk with other users" #~ msgstr "Ez dago modurik beste erabiltzaileekin hitz egiteko" #~ msgid "Uncontrolled audio or video chat functionality between users" #~ msgstr "" #~ "Erabiltzaileen arteko kontrolik gabeko audio- edo bideo-berriketen " #~ "funtzionaltasuna" #~ msgid "No sharing of social network usernames or email addresses" #~ msgstr "" #~ "Sare sozialetako erabiltzaile-izen edo helb. elektronikorik partekatu gabe" #~ msgid "Sharing social network usernames or email addresses" #~ msgstr "" #~ "Sare sozialetako erabiltzaile-izen edo helbide elektronikoak partekatuta" #~ msgid "No sharing of user information with 3rd parties" #~ msgstr "Erabiltzailearen datuak hirugarrengoekin partekatu gabe" #~ msgid "Checking for the latest application version" #~ msgstr "Aplikazioaren azken bertsioa egiaztatzea" #~ msgid "Sharing diagnostic data that does not let others identify the user" #~ msgstr "" #~ "Besteek erabiltzailea identifikatzeko balio ez dute diagnostiko-datu " #~ "partekatuak" #~ msgid "Sharing information that lets others identify the user" #~ msgstr "" #~ "Besteek erabiltzailea identifikatzeko erabil daitekeen informazioa " #~ "partekatuta" #~ msgid "No sharing of physical location to other users" #~ msgstr "Kokaleku fisikoa beste erabiltzaileekin partekatu gabe" #~ msgid "Sharing physical location to other users" #~ msgstr "Kokaleku fisikoa beste erabiltzaileekin partekatzea" #~ msgid "No references to homosexuality" #~ msgstr "Homosexualitatearen erreferentziarik gabe" #~ msgid "Indirect references to homosexuality" #~ msgstr "Homosexualitatearen zeharkako erreferentziak" #~ msgid "Kissing between people of the same gender" #~ msgstr "Sexu bereko pertsonen arteko musukatzea" #~ msgid "Graphic sexual behavior between people of the same gender" #~ msgstr "Sexu bereko pertsonen arteko sexu-jokabide esplizitua" #~ msgid "No references to prostitution" #~ msgstr "Prostituzioaren erreferentziarik gabe" #~ msgid "Indirect references to prostitution" #~ msgstr "Prostituzioaren zeharkako erreferentziak" #~ msgid "Direct references to prostitution" #~ msgstr "Prostituzioaren erreferentzia zuzenak" #~ msgid "Graphic depictions of the act of prostitution" #~ msgstr "Prostituzioaren ekintzaren adierazpen grafikoak" #~ msgid "No references to adultery" #~ msgstr "Adulterioaren erreferentziarik gabe" #~ msgid "Indirect references to adultery" #~ msgstr "Adulterioaren zeharkako erreferentzia" #~ msgid "Direct references to adultery" #~ msgstr "Adulterioaren erreferentzia zuzena" #~ msgid "Graphic depictions of the act of adultery" #~ msgstr "Adulterioaren ekintzaren adierazpen grafikoak" #~ msgid "No sexualized characters" #~ msgstr "Sexualizatu gabeko pertsonaiak" #~ msgid "Scantily clad human characters" #~ msgstr "Erdi biluzik dauden giza pertsonaiak" #~ msgid "Overtly sexualized human characters" #~ msgstr "Oso sexualizatutako giza pertsonaiak" #~ msgid "No references to desecration" #~ msgstr "Profanazioen erreferentziarik gabe" #~ msgid "Depictions of modern-day human desecration" #~ msgstr "Gaur egungo giza profanazioen adierazpenak" #~ msgid "Graphic depictions of modern-day desecration" #~ msgstr "Gaur egungo profanazioen adierazpen grafikoak" #~ msgid "No visible dead human remains" #~ msgstr "Giza gorpuzki hil ikusgairik gabe" #~ msgid "Visible dead human remains" #~ msgstr "Giza gorpuzki hil ikusgaiak" #~ msgid "Dead human remains that are exposed to the elements" #~ msgstr "Eguraldia jasaten duten giza gorpuzki hilak" #~ msgid "Graphic depictions of desecration of human bodies" #~ msgstr "Giza gorputzen profanazioaren adierazpen grafikoak" #~ msgid "No references to slavery" #~ msgstr "Esklabotasunaren erreferentziarik gabe" #~ msgid "Depictions of modern-day slavery" #~ msgstr "Gaur egungo esklabotasunaren adierazpenak" #~ msgid "Graphic depictions of modern-day slavery" #~ msgstr "Gaur egungo esklabotasunaren adierazpen grafikoak" malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/po/fa.po000066400000000000000000000624401505556674000231460ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the malcontent package. # FIRST AUTHOR , YEAR. # # Translators: # Will Thompson , 2020 # Basirahmad Askari , 2020 # Danial Behzadi , 2024. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: malcontent\n" "Report-Msgid-Bugs-To: https://gitlab.freedesktop.org/pwithnall/malcontent/" "issues\n" "POT-Creation-Date: 2024-03-16 03:25+0000\n" "PO-Revision-Date: 2024-03-17 00:36+0330\n" "Last-Translator: Danial Behzadi \n" "Language-Team: Persian (https://www.transifex.com/endless-os/teams/9016/fa/)\n" "Language: fa\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" "X-Generator: Poedit 3.4.2\n" #: accounts-service/com.endlessm.ParentalControls.policy.in:4 msgid "Change your own app filter" msgstr "تغییر پالایهٔ کارهٔ خودتان" #: accounts-service/com.endlessm.ParentalControls.policy.in:5 msgid "Authentication is required to change your app filter." msgstr "دگرگونی پالایهٔ کاره‌تان نیازمند هویت‌سنجی است." #: accounts-service/com.endlessm.ParentalControls.policy.in:14 msgid "Read your own app filter" msgstr "خواندن پالایهٔ کارهٔ خودتان" #: accounts-service/com.endlessm.ParentalControls.policy.in:15 msgid "Authentication is required to read your app filter." msgstr "خواندن پالایهٔ کارهٔ خودتان نیازمند هویت‌سنجی است." #: accounts-service/com.endlessm.ParentalControls.policy.in:24 msgid "Change another user’s app filter" msgstr "تغییر پالایهٔ کارهٔ کاربری دیگر" #: accounts-service/com.endlessm.ParentalControls.policy.in:25 msgid "Authentication is required to change another user’s app filter." msgstr "تشخیص هویت برای تغیر دادن فیلتر برنامه یوزر دیگر ضروری است." #: accounts-service/com.endlessm.ParentalControls.policy.in:34 msgid "Read another user’s app filter" msgstr "فیلتر برنامه کاربر دیگر را بخوانید" #: accounts-service/com.endlessm.ParentalControls.policy.in:35 msgid "Authentication is required to read another user’s app filter." msgstr "نیازمند هویت‌سنجی برای خواندن پالایهٔ کارهٔ کاربری دیگر." #: accounts-service/com.endlessm.ParentalControls.policy.in:44 msgid "Change your own session limits" msgstr "دگرگونی محدودیت‌های نشست خودتان" #: accounts-service/com.endlessm.ParentalControls.policy.in:45 msgid "Authentication is required to change your session limits." msgstr "نیازمند هویت‌سنجی برای دگرگونی محدودیت‌های نشستتان." #: accounts-service/com.endlessm.ParentalControls.policy.in:54 msgid "Read your own session limits" msgstr "خواندن محدودیت‌های نشست خودتان" #: accounts-service/com.endlessm.ParentalControls.policy.in:55 msgid "Authentication is required to read your session limits." msgstr "نیازمند هویت‌سنجی برای خواندن محدودیت‌های نشستتان." #: accounts-service/com.endlessm.ParentalControls.policy.in:64 msgid "Change another user’s session limits" msgstr "دگرگونی محدودیت‌های نشست کاربری دیگر" #: accounts-service/com.endlessm.ParentalControls.policy.in:65 msgid "Authentication is required to change another user’s session limits." msgstr "نیازمند هویت‌سنجی برای دگرگونی محدودیت‌های نشست کاربری دیگر." #: accounts-service/com.endlessm.ParentalControls.policy.in:74 msgid "Read another user’s session limits" msgstr "خواندن محدودیت‌های نشست کاربری دیگر" #: accounts-service/com.endlessm.ParentalControls.policy.in:75 msgid "Authentication is required to read another user’s session limits." msgstr "نیازمند هویت‌سنجی برای خواندن محدودیت‌های نشست کاربری دیگر." #: accounts-service/com.endlessm.ParentalControls.policy.in:84 msgid "Change your own account info" msgstr "دگرگونی اطّلاعات حساب خودتان" #: accounts-service/com.endlessm.ParentalControls.policy.in:85 msgid "Authentication is required to change your account info." msgstr "نیازمند هویت‌سنجی برای دگرگونی اطّلاعات حسابتان." #: accounts-service/com.endlessm.ParentalControls.policy.in:94 msgid "Read your own account info" msgstr "خواندن اطّلاعات حساب خودتان" #: accounts-service/com.endlessm.ParentalControls.policy.in:95 msgid "Authentication is required to read your account info." msgstr "نیازمند هویت‌سنجی برای خواندن اطّلاعات حسابتان." #: accounts-service/com.endlessm.ParentalControls.policy.in:104 msgid "Change another user’s account info" msgstr "دگرگونی اطّلاعات حساب کاربری دیگر" #: accounts-service/com.endlessm.ParentalControls.policy.in:105 msgid "Authentication is required to change another user’s account info." msgstr "نیازمند هویت‌سنجی برای دگرگونی اطّلاعات حسابتان کاربری دیگر." #: accounts-service/com.endlessm.ParentalControls.policy.in:114 msgid "Read another user’s account info" msgstr "خواندن اطّلاعات حساب کاربری دیگر" #: accounts-service/com.endlessm.ParentalControls.policy.in:115 msgid "Authentication is required to read another user’s account info." msgstr "نیازمند هویت‌سنجی برای خواندن اطّلاعات حساب کاربری دیگر." #: libmalcontent/app-filter.c:696 #, c-format msgid "App filter for user %u was in an unrecognized format" msgstr "پالایهٔ کارهٔ کاربر %Iu در قالبی ناشناخته بود" #: libmalcontent/app-filter.c:727 #, c-format msgid "OARS filter for user %u has an unrecognized kind ‘%s’" msgstr "پالایهٔ OARS کاربر %Iu نوع ناشناختهٔ %s را دارد" #: libmalcontent/manager.c:283 libmalcontent/manager.c:420 #: libmalcontent/manager.c:803 #, c-format msgid "Not allowed to query parental controls data for user %u" msgstr "پرس‌وجوی داده‌های واپایش‌های والدین برای کاربر %Iu مجاز نیست" #: libmalcontent/manager.c:288 #, c-format msgid "User %u does not exist" msgstr "کاربر %Iu وجود ندارد" #: libmalcontent/manager.c:296 msgid "System accounts service not available" msgstr "خدمت حساب‌های سامانه در دسترس نیست" #: libmalcontent/manager.c:402 msgid "App filtering is globally disabled" msgstr "پلایش کاره به صورت سراسری از کار افتاده" #: libmalcontent/manager.c:785 msgid "Session limits are globally disabled" msgstr "محدودیت‌های نشست به صورت سراسری از کار افتاده" #: libmalcontent/session-limits.c:306 #, c-format msgid "Session limit for user %u was in an unrecognized format" msgstr "محدودیت نشست برای کاربر %Iu در قالبی ناشناخته بود" #: libmalcontent/session-limits.c:328 #, c-format msgid "Session limit for user %u has an unrecognized type ‘%u’" msgstr "محدودیت نشست برای کاربر %Iu در گونهٔ ناشناختهٔ %Iu بود" #: libmalcontent/session-limits.c:346 #, c-format msgid "Session limit for user %u has invalid daily schedule %u–%u" msgstr "محدودیت نشست برای کاربر %Iu زمان‌بندی روزانهٔ‌نامعتبر %Iu-%Iu دارد" #. Translators: the placeholder is a user’s full name #: libmalcontent-ui/restrict-applications-dialog.c:256 #, c-format msgid "Restrict %s from using the following installed applications." msgstr "محدود کردن %s از استفادهٔ برنامه‌های زیر." #: libmalcontent-ui/restrict-applications-dialog.ui:6 msgid "Restrict Applications" msgstr "محدود کردن برنامه‌ها" #: libmalcontent-ui/restrict-applications-dialog.ui:22 msgid "Search for applications…" msgstr "جست‌وجوی برنامه‌ها…" #: libmalcontent-ui/restrict-applications-selector.ui:13 msgid "No applications found to restrict." msgstr "هیچ برنامه‌ای برای محدودیت پیدا نشد." #. Translators: this is the full name for an unknown user account. #: libmalcontent-ui/user-controls.c:198 libmalcontent-ui/user-controls.c:209 msgid "unknown" msgstr "ناشناخته" #: libmalcontent-ui/user-controls.c:306 libmalcontent-ui/user-controls.c:394 #: libmalcontent-ui/user-controls.c:647 msgid "Unrestricted" msgstr "نامحدود" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:476 #, c-format msgid "" "Prevents %s from running web browsers. Limited web content may still be " "available in other applications." msgstr "" "از اجرای مرورگرهای وب به دست %s جلوگیری می‌کند. ممکن است محتوای محدود وب در دیگر " "برنامه‌ها در دسترس باشند." #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:481 #, c-format msgid "Prevents specified applications from being used by %s." msgstr "از اجرای برنامه‌های خاص به دست %s جلوگیری می‌کند." #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:486 #, c-format msgid "Prevents %s from installing applications." msgstr "از نصب برنامه‌ها به دست %s جلوگیری می‌کند." #: libmalcontent-ui/user-controls.ui:25 msgid "Application Usage Restrictions" msgstr "محدودیت‌های استفادهٔ برنامه" #: libmalcontent-ui/user-controls.ui:28 msgid "Restrict _Web Browsers" msgstr "محدود کردن مرورگرهای _وب" #: libmalcontent-ui/user-controls.ui:51 msgid "_Restrict Applications" msgstr "_محدود کردن برنامه‌ها" #: libmalcontent-ui/user-controls.ui:73 msgid "Software Installation Restrictions" msgstr "محدودیت‌های نصب نرم‌افزار" #: libmalcontent-ui/user-controls.ui:77 msgid "Restrict Application _Installation" msgstr "محدود کردن _نصب برنامه‌ها" #: libmalcontent-ui/user-controls.ui:99 msgid "Application _Suitability" msgstr "_مناسب بودن برنامه‌ها" #: libmalcontent-ui/user-controls.ui:102 msgid "" "Restricts the browsing or installation of applications unsuitable for this age " "or younger." msgstr "مرور یا نصب برنامه‌های نامناسب برای این سن یا کم‌تر را محدود می‌کند." #. Translators: This documents the --user command line option to malcontent-control: #: malcontent-control/application.c:102 msgid "User to select in the UI" msgstr "کاربر برای گزینش در میانای کاربری" #. Translators: This is a placeholder for a command line argument value: #: malcontent-control/application.c:104 msgid "USERNAME" msgstr "USERNAME" #: malcontent-control/application.c:116 msgid "— view and edit parental controls" msgstr "— دیدن و ویرایش واپایش‌های والدین" #. Translators: This is the title of the main window #. Translators: the name of the application as it appears in a software center #: malcontent-control/application.c:123 malcontent-control/main.ui:17 #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:9 #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:3 msgid "Parental Controls" msgstr "واپایش‌های والدین" #: malcontent-control/application.c:309 msgid "Copyright © 2019, 2020 Endless Mobile, Inc." msgstr "حق رونوشت © ۲۰۱۹، ۲۰۲۰ شرکت اندلس موبایل." #. Translators: this should be "translated" to the #. names of people who have translated Malcontent into #. this language, one per line. #: malcontent-control/application.c:314 msgid "translator-credits" msgstr "دانیال بهزادی " #. Translators: "Malcontent" is the brand name of this #. project, so should not be translated. #: malcontent-control/application.c:320 msgid "Malcontent Website" msgstr "پایگاه وب بدمحتوا" #: malcontent-control/application.c:340 msgid "The help contents could not be displayed" msgstr "محتویات راهنما را نمی‌توان نمایش داد" #: malcontent-control/application.c:389 msgid "Failed to load user data from the system" msgstr "شکست در بار کردن داده‌های کاربری از سامانه" #: malcontent-control/application.c:391 msgid "Please make sure that the AccountsService is installed and enabled." msgstr "اطمینان از نصب و به کار افتاده بودن AccountsService." #. Translators: Replace the link to commonsensemedia.org with some #. * localised guidance for parents/carers on how to set restrictions on #. * their child/caree in a responsible way which is in keeping with the #. * best practice and culture of the region. If no suitable localised #. * guidance exists, and if the default commonsensemedia.org link is not #. * suitable, please file an issue against malcontent so we can discuss #. * further! #. * https://gitlab.freedesktop.org/pwithnall/malcontent/-/issues/new #. #: malcontent-control/application.c:424 #, c-format msgid "" "It’s recommended that restrictions are set as part of an ongoing conversation " "with %s. Read guidance on what to consider." msgstr "" "توصیه می‌شود محدودیت‌ها به عنوان بخشی از گفت‌وگو با %s تنظیم شوند. برای مواردی که " "باید در نظر گرفته شوند راهنما را بخوانید." #: malcontent-control/carousel.ui:38 msgid "Previous Page" msgstr "صفحهٔ پیشین" #: malcontent-control/carousel.ui:57 msgid "Next Page" msgstr "صفحهٔ بعدی" #: malcontent-control/main.ui:87 msgid "Permission Required" msgstr "نیازمند اجازه" #: malcontent-control/main.ui:88 msgid "Permission is required to view and change user parental controls settings." msgstr "دیدن و دگرگونی تنظیمات واپایش والدین کاربر نیازمند اجازه است." #: malcontent-control/main.ui:110 msgid "No Standard User Accounts" msgstr "بدون حساب کاربری استاندارد" #: malcontent-control/main.ui:111 msgid "" "Parental controls can only be applied to standard user\n" "accounts. These can be created in the user settings." msgstr "" "واپایش‌های کاربری تنها می‌توانند به حساب‌های کاربری استاندارد اعمال شوند.\n" "این واپایش‌ها می‌توانند رد تنظیمات کاربری ایجاد شوند." #: malcontent-control/main.ui:115 msgid "_User Settings" msgstr "_تنظیمات کاربری" #: malcontent-control/main.ui:138 msgid "Loading…" msgstr "بار کردن…" #: malcontent-control/main.ui:171 msgid "_Help" msgstr "_راهنما" #: malcontent-control/main.ui:175 msgid "_About Parental Controls" msgstr "_دربارهٔ واپایش‌های والدین" #. Translators: the brief summary of the application as it appears in a software center. #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:12 #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:4 msgid "Set parental controls and monitor usage by users" msgstr "تنظیم واپایش‌های والدین و پایش استفادهٔ کاربران" #. Translators: These are the application description paragraphs in the AppData file. #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:16 msgid "" "Manage users’ parental controls restrictions, controlling how long they can use " "the computer for, what software they can install, and what installed software " "they can run." msgstr "" "مدیریت محدودیت‌های واپایش‌های والدین کاربران، واپایش مدّت زمانی که می‌توانند از " "رایانه استفاده کنند، نرم‌افزارهایی که می‌توانند نصب کنند و برنامه‌های نصب شده‌ای که " "می‌توانند اجرا کنند." #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:25 msgid "Main window" msgstr "پنجرهٔ اصلی" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:40 msgid "The GNOME Project" msgstr "پروژهٔ گنوم" #. Translators: Search terms to find this application. Do NOT translate or localise the semicolons! The list MUST also end with a semicolon! #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:14 msgid "" "parental controls;screen time;app restrictions;web browser restrictions;oars;" "usage;usage limit;kid;child;" msgstr "" "parental controls;screen time;app restrictions;web browser restrictions;oars;" "usage;usage limit;kid;child;کنترل;واپایش;والدین;زمان;محدودیت;مرورگر;استفاده;" "فرزند;کودک;بچه;" #: malcontent-control/org.freedesktop.MalcontentControl.policy.in:9 msgid "Manage parental controls" msgstr "مدیریت واپایش‌های والدین" #: malcontent-control/org.freedesktop.MalcontentControl.policy.in:10 msgid "Authentication is required to read and change user parental controls" msgstr "خواندن و دگرگونی واپایش‌های والدین نیازمند هویت‌سنجی است" #: malcontent-control/user-selector.c:426 msgid "Your account" msgstr "حساب شمانام‌کاربری گزیده در دسترس نیست" #. Always allow root, to avoid a situation where this PAM module prevents #. * all users logging in with no way of recovery. #: pam/pam_malcontent.c:142 pam/pam_malcontent.c:188 #, c-format msgid "User ‘%s’ has no time limits enabled" msgstr "کاربر %s هیچ محدودیت زمانی به کار افتاده‌ای ندارد" #: pam/pam_malcontent.c:151 pam/pam_malcontent.c:172 #, c-format msgid "Error getting session limits for user ‘%s’: %s" msgstr "خطا در گرفتن محدودیت‌های نشست برای کاربر %s: ‏%s" #: pam/pam_malcontent.c:182 #, c-format msgid "User ‘%s’ has no time remaining" msgstr "کاربر %s زمان باقی‌مانده‌ای ندارد" #: pam/pam_malcontent.c:200 #, c-format msgid "Error setting time limit on login session: %s" msgstr "خطا در تنظیم محدودیت زمانی در نشست ورود: %s" #~ msgid "No cartoon violence" #~ msgstr "بدون خشونت کارتونی" #~ msgid "Cartoon characters in unsafe situations" #~ msgstr "شخصیت‌های کارتونی در وضعیت‌های نا امن" #~ msgid "Cartoon characters in aggressive conflict" #~ msgstr "شخصیت‌های کارتونی در وضعیت‌های درگیری" #~ msgid "Graphic violence involving cartoon characters" #~ msgstr "خشونت شامل شخصیت‌های کارتونی" #~ msgid "No fantasy violence" #~ msgstr "بدون خشونت فانتزی" #~ msgid "Characters in unsafe situations easily distinguishable from reality" #~ msgstr "شخصیت‌ها در موقعیت‌های نا امن که به راحتی از واقعیت قابل تشخیص هستند" #~ msgid "Characters in aggressive conflict easily distinguishable from reality" #~ msgstr "" #~ "شخصیت‌های کارتونی در وضعیت‌های درگیری که به راحتی از واقعیت قابل تشخیص هستند" #~ msgid "Graphic violence easily distinguishable from reality" #~ msgstr "شامل خشونت که به راحتی از واقعیت قابل تشخیص هستند" #~ msgid "No realistic violence" #~ msgstr "بدون خشونت واقعی" #~ msgid "Mildly realistic characters in unsafe situations" #~ msgstr "شخصیت‌های تقریبا واقعی که در وضعیت‌های نا امن" #~ msgid "Depictions of realistic characters in aggressive conflict" #~ msgstr "تصاویر شخصیت‌های واقعی در وضعیت‌های درگیری" #~ msgid "Graphic violence involving realistic characters" #~ msgstr "خشونت شامل شخصیت‌های واقعی" #~ msgid "No bloodshed" #~ msgstr "بدون خون‌ریزی" #~ msgid "Realistic bloodshed" #~ msgstr "خون‌ریزی واقعی" #~ msgid "Depictions of bloodshed and the mutilation of body parts" #~ msgstr "تصاویر خون‌ریزی و قطع اعضای بدن" #~ msgid "No sexual violence" #~ msgstr "بدون خشونت جنسی" #~ msgid "Rape or other violent sexual behavior" #~ msgstr "تجاوز یا سایر اعمال جنسی خشونت‌آمیز" #~ msgid "No references to alcohol" #~ msgstr "بدون اشاره به نوشیدنی‌های الکلی" #~ msgid "References to alcoholic beverages" #~ msgstr "اشاره به نوشیدنی‌های الکلی" #~ msgid "Use of alcoholic beverages" #~ msgstr "استفاده از نوشیدنی‌های الکلی" #~ msgid "No references to illicit drugs" #~ msgstr "بدون اشاره به مخدرهای غیرقانونی" #~ msgid "References to illicit drugs" #~ msgstr "اشاره به مخدرهای غیرقانونی" #~ msgid "Use of illicit drugs" #~ msgstr "استفاده از مخدرهای غیرقانونی" #~ msgid "References to tobacco products" #~ msgstr "اشاره به محصولات تنباکو" #~ msgid "Use of tobacco products" #~ msgstr "استفاده از محصولات تنباکو" #~ msgid "No nudity of any sort" #~ msgstr "بدون هیچ نوع برهنگی" #~ msgid "Brief artistic nudity" #~ msgstr "عریانی هنری و مختصر" #~ msgid "Prolonged nudity" #~ msgstr "عریانی طولانی مدت" #~ msgid "Provocative references or depictions" #~ msgstr "اشاره و یا تصاویر تحریک‌آمیز" #~ msgid "Sexual references or depictions" #~ msgstr "اشاره یا تصاویر جنسی" #~ msgid "Graphic sexual behavior" #~ msgstr "رفتارهای جنسی گرافیکی" #~ msgid "No profanity of any kind" #~ msgstr "بدون هیچ نوع ناسزا" #~ msgid "Mild or infrequent use of profanity" #~ msgstr "استفاده کم یا ملایم از ناسزا" #~ msgid "Moderate use of profanity" #~ msgstr "استفاده متوسط از ناسزا" #~ msgid "Strong or frequent use of profanity" #~ msgstr "استفاده زیاد یا مکرر از ناسزا" #~ msgid "No inappropriate humor" #~ msgstr "بدون شوخی‌های نامربوط" #~ msgid "Slapstick humor" #~ msgstr "شوخی‌های هیجانی" #~ msgid "Vulgar or bathroom humor" #~ msgstr "شوخی‌های مبتذل" #~ msgid "Mature or sexual humor" #~ msgstr "شوخی‌های جنسی" #~ msgid "No discriminatory language of any kind" #~ msgstr "بدون هیچ نوع زبان تبعیض‌آمیز" #~ msgid "Negativity towards a specific group of people" #~ msgstr "اشاره منفی به گروه خاصی از مردم" #~ msgid "Discrimination designed to cause emotional harm" #~ msgstr "طراحی خاص برای ایجاد آسیب عاطفی" #~ msgid "Explicit discrimination based on gender, sexuality, race or religion" #~ msgstr "تبعیض آشکار بر اساس جنسیت، نژاد یا دین" #~ msgid "No advertising of any kind" #~ msgstr "بدون هیچ نوع تبلیغات" #~ msgid "Product placement" #~ msgstr "جایگذاری محصول" #~ msgid "Explicit references to specific brands or trademarked products" #~ msgstr "اشاره‌های واضح به برندهای مشخص یا محصولات تجاری" #~ msgid "No gambling of any kind" #~ msgstr "بدون هیچ نوع قمار" #~ msgid "Gambling on random events using tokens or credits" #~ msgstr "شرط‌بندی بر روی رویداد اتفاقی با استفاده از توکن یا اعتبار" #~ msgid "Gambling using “play” money" #~ msgstr "شرط‌بندی با استفاده از پولِ «بازی»" #~ msgid "Gambling using real money" #~ msgstr "شرط‌بندی با استفاده از پول واقعی" #~ msgid "No ability to spend money" #~ msgstr "بدون امکان خرج کردن پول" #~ msgid "Ability to spend real money in-game" #~ msgstr "امکان خرج کردن پول واقعی در بازی" #~ msgid "No sharing of social network usernames or email addresses" #~ msgstr "" #~ "بدون اشتراک‌گذاری نام‌کاربری شبکه‌های اجتماعی کاربر یا آدرس پست‌های الکترونیکی" #~ msgid "Sharing social network usernames or email addresses" #~ msgstr "اشتراک‌گذاری نام‌کاربری شبکه‌های اجتماعی کاربر یا آدرس پست‌های الکترونیکی" #~ msgid "No sharing of user information with 3rd parties" #~ msgstr "بدون اشتراک‌گذاری اطلاعات کاربر با اشخاص ثالث" #~ msgid "No sharing of physical location to other users" #~ msgstr "بدون اشتراک‌گذاری مکان فیزیکی با سایر کاربران" #~ msgid "Sharing physical location to other users" #~ msgstr "اشتراک‌گذاری مکان فیزیکی با سایر کاربران" malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/po/fi.po000066400000000000000000000563721505556674000231650ustar00rootroot00000000000000# Finnish translations for malcontent package. # Copyright (C) 2020 THE malcontent'S COPYRIGHT HOLDER # This file is distributed under the same license as the malcontent package. # Automatically generated, 2020. # msgid "" msgstr "" "Project-Id-Version: malcontent\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-06-10 12:04+0100\n" "PO-Revision-Date: 2020-04-15 13:42+0100\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: fi\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: accounts-service/com.endlessm.ParentalControls.policy.in:4 msgid "Change your own app filter" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:5 msgid "Authentication is required to change your app filter." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:14 msgid "Read your own app filter" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:15 msgid "Authentication is required to read your app filter." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:24 msgid "Change another user’s app filter" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:25 msgid "Authentication is required to change another user’s app filter." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:34 msgid "Read another user’s app filter" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:35 msgid "Authentication is required to read another user’s app filter." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:44 msgid "Change your own session limits" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:45 msgid "Authentication is required to change your session limits." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:54 msgid "Read your own session limits" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:55 msgid "Authentication is required to read your session limits." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:64 msgid "Change another user’s session limits" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:65 msgid "Authentication is required to change another user’s session limits." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:74 msgid "Read another user’s session limits" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:75 msgid "Authentication is required to read another user’s session limits." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:84 msgid "Change your own account info" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:85 msgid "Authentication is required to change your account info." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:94 msgid "Read your own account info" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:95 msgid "Authentication is required to read your account info." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:104 msgid "Change another user’s account info" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:105 msgid "Authentication is required to change another user’s account info." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:114 msgid "Read another user’s account info" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:115 msgid "Authentication is required to read another user’s account info." msgstr "" #: libmalcontent/app-filter.c:694 #, c-format msgid "App filter for user %u was in an unrecognized format" msgstr "" #: libmalcontent/app-filter.c:725 #, c-format msgid "OARS filter for user %u has an unrecognized kind ‘%s’" msgstr "" #: libmalcontent/manager.c:283 libmalcontent/manager.c:412 #, c-format msgid "Not allowed to query app filter data for user %u" msgstr "" #: libmalcontent/manager.c:288 #, c-format msgid "User %u does not exist" msgstr "" #: libmalcontent/manager.c:394 msgid "App filtering is globally disabled" msgstr "" #: libmalcontent/manager.c:777 msgid "Session limits are globally disabled" msgstr "" #: libmalcontent/manager.c:795 #, c-format msgid "Not allowed to query session limits data for user %u" msgstr "" #: libmalcontent/session-limits.c:306 #, c-format msgid "Session limit for user %u was in an unrecognized format" msgstr "" #: libmalcontent/session-limits.c:328 #, c-format msgid "Session limit for user %u has an unrecognized type ‘%u’" msgstr "" #: libmalcontent/session-limits.c:346 #, c-format msgid "Session limit for user %u has invalid daily schedule %u–%u" msgstr "" #. TRANSLATORS: This is the formatting of English and localized name #. of the rating e.g. "Adults Only (solo adultos)" #: libmalcontent-ui/gs-content-rating.c:75 #, c-format msgid "%s (%s)" msgstr "" #: libmalcontent-ui/gs-content-rating.c:209 msgid "General" msgstr "" #: libmalcontent-ui/gs-content-rating.c:218 msgid "ALL" msgstr "" #: libmalcontent-ui/gs-content-rating.c:222 #: libmalcontent-ui/gs-content-rating.c:485 msgid "Adults Only" msgstr "" #: libmalcontent-ui/gs-content-rating.c:224 #: libmalcontent-ui/gs-content-rating.c:484 msgid "Mature" msgstr "" #: libmalcontent-ui/gs-content-rating.c:226 #: libmalcontent-ui/gs-content-rating.c:483 msgid "Teen" msgstr "" #: libmalcontent-ui/gs-content-rating.c:228 #: libmalcontent-ui/gs-content-rating.c:482 msgid "Everyone 10+" msgstr "" #: libmalcontent-ui/gs-content-rating.c:230 #: libmalcontent-ui/gs-content-rating.c:481 msgid "Everyone" msgstr "" #: libmalcontent-ui/gs-content-rating.c:232 #: libmalcontent-ui/gs-content-rating.c:480 msgid "Early Childhood" msgstr "" #. Translators: the placeholder is a user’s full name #: libmalcontent-ui/restrict-applications-dialog.c:222 #, c-format msgid "Restrict %s from using the following installed applications." msgstr "" #: libmalcontent-ui/restrict-applications-dialog.ui:6 #: libmalcontent-ui/restrict-applications-dialog.ui:12 msgid "Restrict Applications" msgstr "" #: libmalcontent-ui/restrict-applications-selector.ui:24 msgid "No applications found to restrict." msgstr "" #. Translators: this is the full name for an unknown user account. #: libmalcontent-ui/user-controls.c:242 libmalcontent-ui/user-controls.c:253 msgid "unknown" msgstr "" #: libmalcontent-ui/user-controls.c:338 libmalcontent-ui/user-controls.c:425 #: libmalcontent-ui/user-controls.c:711 msgid "All Ages" msgstr "" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:514 #, c-format msgid "" "Prevents %s from running web browsers. Limited web content may still be " "available in other applications." msgstr "" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:519 #, c-format msgid "Prevents specified applications from being used by %s." msgstr "" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:524 #, c-format msgid "Prevents %s from installing applications." msgstr "" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:529 #, c-format msgid "Applications installed by %s will not appear for other users." msgstr "" #: libmalcontent-ui/user-controls.ui:17 msgid "Application Usage Restrictions" msgstr "" #: libmalcontent-ui/user-controls.ui:68 msgid "Restrict _Web Browsers" msgstr "" #: libmalcontent-ui/user-controls.ui:152 msgid "_Restrict Applications" msgstr "" #: libmalcontent-ui/user-controls.ui:231 msgid "Software Installation Restrictions" msgstr "" #: libmalcontent-ui/user-controls.ui:281 msgid "Restrict Application _Installation" msgstr "" #: libmalcontent-ui/user-controls.ui:366 msgid "Restrict Application Installation for _Others" msgstr "" #: libmalcontent-ui/user-controls.ui:451 msgid "Application _Suitability" msgstr "" #: libmalcontent-ui/user-controls.ui:473 msgid "" "Restricts browsing or installation of applications to applications suitable " "for certain ages or above." msgstr "" #. Translators: This is the title of the main window #. Translators: the name of the application as it appears in a software center #: malcontent-control/application.c:105 malcontent-control/main.ui:12 #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:9 #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:3 msgid "Parental Controls" msgstr "" #: malcontent-control/application.c:270 msgid "Copyright © 2019, 2020 Endless Mobile, Inc." msgstr "" #. Translators: this should be "translated" to the #. names of people who have translated Malcontent into #. this language, one per line. #: malcontent-control/application.c:275 msgid "translator-credits" msgstr "" #. Translators: "Malcontent" is the brand name of this #. project, so should not be translated. #: malcontent-control/application.c:281 msgid "Malcontent Website" msgstr "" #: malcontent-control/application.c:299 msgid "The help contents could not be displayed" msgstr "" #: malcontent-control/application.c:336 msgid "Failed to load user data from the system" msgstr "" #: malcontent-control/application.c:338 msgid "Please make sure that the AccountsService is installed and enabled." msgstr "" #: malcontent-control/carousel.ui:48 msgid "Previous Page" msgstr "" #: malcontent-control/carousel.ui:74 msgid "Next Page" msgstr "" #: malcontent-control/main.ui:93 msgid "Permission Required" msgstr "" #: malcontent-control/main.ui:107 msgid "" "Permission is required to view and change user parental controls settings." msgstr "" #: malcontent-control/main.ui:148 msgid "No Child Users Configured" msgstr "" #: malcontent-control/main.ui:162 msgid "" "No child users are currently set up on the system. Create one before setting " "up their parental controls." msgstr "" #: malcontent-control/main.ui:174 msgid "Create _Child User" msgstr "" #: malcontent-control/main.ui:202 msgid "Loading…" msgstr "" #: malcontent-control/main.ui:265 msgid "_Help" msgstr "_Ohje" #: malcontent-control/main.ui:269 msgid "_About Parental Controls" msgstr "" #. Translators: the brief summary of the application as it appears in a software center. #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:12 #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:4 msgid "Set parental controls and monitor usage by users" msgstr "" #. Translators: These are the application description paragraphs in the AppData file. #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:16 msgid "" "Manage users’ parental controls restrictions, controlling how long they can " "use the computer for, what software they can install, and what installed " "software they can run." msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:39 msgid "The GNOME Project" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:50 #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:59 msgid "Minor improvements to parental controls application UI" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:51 msgid "Add a user manual" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:52 msgid "Translation updates" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:60 msgid "Translations to Ukrainian and Polish" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:67 msgid "Improve parental controls application UI and add icon" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:68 msgid "Support for indicating which accounts are parent accounts" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:75 msgid "Initial release of basic parental controls application" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:76 msgid "Support for setting app installation and run restrictions on users" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:83 msgid "Maintenance release of underlying parental controls library" msgstr "" #. Translators: Do NOT translate or transliterate this text (this is an icon file name)! #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:7 msgid "org.freedesktop.MalcontentControl" msgstr "" #. Translators: Search terms to find this application. Do NOT translate or localise the semicolons! The list MUST also end with a semicolon! #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:13 msgid "" "parental controls;screen time;app restrictions;web browser restrictions;oars;" "usage;usage limit;kid;child;" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.policy.in:9 msgid "Manage parental controls" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.policy.in:10 msgid "Authentication is required to read and change user parental controls" msgstr "" #: malcontent-control/user-selector.c:426 msgid "Your account" msgstr "Tilisi" #. Always allow root, to avoid a situation where this PAM module prevents #. * all users logging in with no way of recovery. #: pam/pam_malcontent.c:142 pam/pam_malcontent.c:188 #, c-format msgid "User ‘%s’ has no time limits enabled" msgstr "" #: pam/pam_malcontent.c:151 pam/pam_malcontent.c:172 #, c-format msgid "Error getting session limits for user ‘%s’: %s" msgstr "" #: pam/pam_malcontent.c:182 #, c-format msgid "User ‘%s’ has no time remaining" msgstr "" #: pam/pam_malcontent.c:200 #, c-format msgid "Error setting time limit on login session: %s" msgstr "" #~ msgid "No cartoon violence" #~ msgstr "Ei piirroksilla esitettävää väkivaltaa" #~ msgid "Cartoon characters in unsafe situations" #~ msgstr "Piirroshahmoja vaarallisissa tilanteissa" #~ msgid "Cartoon characters in aggressive conflict" #~ msgstr "Piirroshahmot aggressiivisessa ristiriidassa" #~ msgid "Graphic violence involving cartoon characters" #~ msgstr "Graafista väkivaltaa, johon liittyy piirroshahmoja" #~ msgid "No fantasy violence" #~ msgstr "Ei fantasiaan liittyvää väkivaltaa" #~ msgid "Characters in unsafe situations easily distinguishable from reality" #~ msgstr "" #~ "Hahmoja vaarallisissa tilanteissa, helposti todellisuudesta erotettavissa" #~ msgid "" #~ "Characters in aggressive conflict easily distinguishable from reality" #~ msgstr "" #~ "Hahmoja aggressiivisessa ristiriidassa, helposti todellisuudesta " #~ "erotettavissa" #~ msgid "Graphic violence easily distinguishable from reality" #~ msgstr "Graafista väkivaltaa, helposti todellisuudesta erotettavissa" #~ msgid "No realistic violence" #~ msgstr "Ei realistista väkivaltaa" #~ msgid "Mildly realistic characters in unsafe situations" #~ msgstr "Tunnistettavia hahmoja vaarallisissa tilanteissa" #~ msgid "Depictions of realistic characters in aggressive conflict" #~ msgstr "Kuvauksia todellisista hahmoista aggressiivisessa ristiriidassa" #~ msgid "Graphic violence involving realistic characters" #~ msgstr "Graafista väkivaltaa, johon sisältyy todellisia hahmoja" #~ msgid "No bloodshed" #~ msgstr "Ei verilöylyä" #~ msgid "Unrealistic bloodshed" #~ msgstr "Epärealistinen verilöyly" #~ msgid "Realistic bloodshed" #~ msgstr "Realistinen verilöyly" #~ msgid "Depictions of bloodshed and the mutilation of body parts" #~ msgstr "Kuvauksia verilöylystä ja ruumiinosien silpomista" #~ msgid "No sexual violence" #~ msgstr "Ei seksuaalista väkivaltaa" #~ msgid "Rape or other violent sexual behavior" #~ msgstr "Raiskaus tai muuta väkivaltaista seksuaalista käytöstä" #~ msgid "No references to alcohol" #~ msgstr "Ei viittauksia alkoholituotteisiin" #~ msgid "References to alcoholic beverages" #~ msgstr "Viittauksia alkoholituotteisiin" #~ msgid "Use of alcoholic beverages" #~ msgstr "Alkoholin käyttöä" #~ msgid "No references to illicit drugs" #~ msgstr "Ei viittauksia laittomiin huumausaineisiin" #~ msgid "References to illicit drugs" #~ msgstr "Viittauksia laittomiin huumausaineisiin" #~ msgid "Use of illicit drugs" #~ msgstr "Laittomien huumausaineiden käyttöä" #~ msgid "References to tobacco products" #~ msgstr "Viittauksia tupakkatuotteisiin" #~ msgid "Use of tobacco products" #~ msgstr "Tupakan polttamista" #~ msgid "No nudity of any sort" #~ msgstr "Ei minkäänlaista alastomuutta" #~ msgid "Brief artistic nudity" #~ msgstr "Hetkellistä taiteellista alastomuutta" #~ msgid "Prolonged nudity" #~ msgstr "Pitkäkestoista alastomuutta" #~ msgid "No references or depictions of sexual nature" #~ msgstr "Ei seksuaalisia viittauksia tai kuvauksia" #~ msgid "Provocative references or depictions" #~ msgstr "Provokatiivisia viittauksia tai kuvauksia" #~ msgid "Sexual references or depictions" #~ msgstr "Seksuaalisia viittauksia tai kuvauksia" #~ msgid "Graphic sexual behavior" #~ msgstr "Graafista seksuaalista käytöstä" #~ msgid "No profanity of any kind" #~ msgstr "Ei minkäänlaista kiroilua" #~ msgid "Mild or infrequent use of profanity" #~ msgstr "Vähäistä tai epäsäännöllistä kiroilua" #~ msgid "Moderate use of profanity" #~ msgstr "Keskitason kiroilua" #~ msgid "Strong or frequent use of profanity" #~ msgstr "Vahvaa tai säännöllistä kiroilua" #~ msgid "No inappropriate humor" #~ msgstr "Ei epäasiallista huumoria" #~ msgid "Slapstick humor" #~ msgstr "Kermakakkukomiikkaa" #~ msgid "Vulgar or bathroom humor" #~ msgstr "Alatyylistä wc-huumoria" #~ msgid "Mature or sexual humor" #~ msgstr "Aikuismaista tai seksuaalista huumoria" #~ msgid "No discriminatory language of any kind" #~ msgstr "Ei minkäänlaista syrjivää kieltä" #~ msgid "Negativity towards a specific group of people" #~ msgstr "Kielteisyyttä tiettyä ihmisryhmää kohtaan" #~ msgid "Discrimination designed to cause emotional harm" #~ msgstr "Syrjintää tarkoituksena aiheuttaa tunteellista epämukavuutta" #~ msgid "Explicit discrimination based on gender, sexuality, race or religion" #~ msgstr "" #~ "Syrjintää kohdistuen sukupuoleen, seksuaalisuuteen, rotuun tai uskontoon" #~ msgid "No advertising of any kind" #~ msgstr "Ei minkäänlaisia mainoksia" #~ msgid "Product placement" #~ msgstr "Tuotesijoittelua" #~ msgid "Explicit references to specific brands or trademarked products" #~ msgstr "Selkeitä viittauksia tiettyyn brändiin tai tavaramerkkiin" #~ msgid "Users are encouraged to purchase specific real-world items" #~ msgstr "Käyttäjiä kehotetaan ostamaan tiettyjä todellisia esineitä" #~ msgid "No gambling of any kind" #~ msgstr "Ei minkäänlaista uhkapeliä" #~ msgid "Gambling on random events using tokens or credits" #~ msgstr "Satunnaista uhkapeliä pelinappuloita käyttäen" #~ msgid "Gambling using “play” money" #~ msgstr "Uhkapeliä käyttäen pelin sisäistä rahaa" #~ msgid "Gambling using real money" #~ msgstr "Uhkapeliä käyttäen oikeaa rahaa" #~ msgid "No ability to spend money" #~ msgstr "Ei mahdollisuutta käyttää oikeaa rahaa" #~ msgid "Users are encouraged to donate real money" #~ msgstr "Käyttäjiä kehotetaan lahjoittamaan oikeaa rahaa" #~ msgid "Ability to spend real money in-game" #~ msgstr "Mahdollisuus käyttää oikeaa rahaa pelissä" #~ msgid "No way to chat with other users" #~ msgstr "Ei mahdollisuutta keskustella muiden käyttäjien kanssa" #~ msgid "Moderated chat functionality between users" #~ msgstr "Valvottu keskusteluominaisuus käyttäjien välillä" #~ msgid "Uncontrolled chat functionality between users" #~ msgstr "Valvomaton keskusteluominaisuus käyttäjien välillä" #~ msgid "No way to talk with other users" #~ msgstr "Ei mahdollisuutta puhua muiden käyttäjien kanssa" #~ msgid "Uncontrolled audio or video chat functionality between users" #~ msgstr "Valvomaton ääni- tai videokeskusteluominaisuus käyttäjien välillä" #~ msgid "No sharing of social network usernames or email addresses" #~ msgstr "" #~ "Ei sosiaalisen median käyttäjätunnusten tai sähköpostiosoitteiden " #~ "jakamista" #~ msgid "Sharing social network usernames or email addresses" #~ msgstr "" #~ "Sosiaalisen median käyttäjätunnusten tai sähköpostiosoitteiden jakamista" #~ msgid "No sharing of user information with 3rd parties" #~ msgstr "Ei käyttäjätiedon jakamista kolmansien osapuolten kanssa" #~ msgid "Checking for the latest application version" #~ msgstr "Tarkistetaan viimeisintä sovellusversiota" #~ msgid "Sharing diagnostic data that does not let others identify the user" #~ msgstr "" #~ "Jakaa diagnostiikkatietoja, jotka eivät ole yhdistettävissä käyttäjään" #~ msgid "Sharing information that lets others identify the user" #~ msgstr "Jakaa käyttäjään yhdistettävissä olevia tietoja" #~ msgid "No sharing of physical location to other users" #~ msgstr "Ei fyysisen sijainnin jakamista muille pelaajille" #~ msgid "Sharing physical location to other users" #~ msgstr "Fyysisen sijainnin jakamista muille pelaajille" #~ msgid "No references to homosexuality" #~ msgstr "Ei viittauksia homoseksuaalisuuteen" #~ msgid "Indirect references to homosexuality" #~ msgstr "Epäsuoria viittauksia homoseksuaalisuuteen" #~ msgid "Kissing between people of the same gender" #~ msgstr "Suutelua samaa sukupuolta olevien kesken" #~ msgid "Graphic sexual behavior between people of the same gender" #~ msgstr "" #~ "Graafista seksuaalista käyttäytymistä samaa sukupuolta olevien kesken" #~ msgid "No references to prostitution" #~ msgstr "Ei viittauksia prostituutioon" #~ msgid "Indirect references to prostitution" #~ msgstr "Epäsuoria viittauksia prosituutioon" #~ msgid "Direct references to prostitution" #~ msgstr "Suoria viittauksia prosituutioon" #~ msgid "Graphic depictions of the act of prostitution" #~ msgstr "Graafisia kuvauksia prostituutioon liittyvistä toimista" #~ msgid "No references to adultery" #~ msgstr "Ei viittauksia haureuteen" #~ msgid "Indirect references to adultery" #~ msgstr "Epäsuoria viittauksia haureuteen" #~ msgid "Direct references to adultery" #~ msgstr "Suoria viittauksia haureuteen" #~ msgid "Graphic depictions of the act of adultery" #~ msgstr "Graafisia kuvauksia haureuteen liittyvistä toimista" #~ msgid "No sexualized characters" #~ msgstr "Ei seksualisoituja hahmoja" #~ msgid "Scantily clad human characters" #~ msgstr "Vähävaatteisia ihmishahmoja" #~ msgid "Overtly sexualized human characters" #~ msgstr "Avoimesti seksualisoituja ihmishahmoja" #~ msgid "No references to desecration" #~ msgstr "Ei viittauksia häpäisyyn" #~ msgid "Depictions of modern-day human desecration" #~ msgstr "Kuvauksia nykypäivän ihmishäpäisystä" #~ msgid "Graphic depictions of modern-day desecration" #~ msgstr "Graafisia kuvauksia nykypäivän häpäisystä" #~ msgid "No visible dead human remains" #~ msgstr "Ei näkyviä kuolleen ihmisen jäännöksiä" #~ msgid "Visible dead human remains" #~ msgstr "Näkyviä kuolleen ihmisen jäännöksiä" #~ msgid "Dead human remains that are exposed to the elements" #~ msgstr "Kuolleen ihmisen jäännöksiä, jotka altistetaan elementeille" #~ msgid "Graphic depictions of desecration of human bodies" #~ msgstr "Graafisia kuvauksia tai häpäisyä liittyen ihmisruumiisiin" #~ msgid "No references to slavery" #~ msgstr "Ei viittauksia orjuuteen" #~ msgid "Depictions of modern-day slavery" #~ msgstr "Kuvauksia nykypäivän orjuudesta" #~ msgid "Graphic depictions of modern-day slavery" #~ msgstr "Graafisia kuvauksia nykypäivän orjuudesta" malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/po/fr.po000066400000000000000000000707471505556674000232000ustar00rootroot00000000000000# French translations for malcontent package. # Copyright (C) 2020 THE malcontent'S COPYRIGHT HOLDER # This file is distributed under the same license as the malcontent package. # Automatically generated, 2020. # msgid "" msgstr "" "Project-Id-Version: malcontent\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-06-10 12:08+0100\n" "PO-Revision-Date: 2020-04-17 21:58+0000\n" "Last-Translator: Will Thompson , 2020\n" "Language-Team: French (https://www.transifex.com/endless-os/teams/9016/fr/)\n" "Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #: accounts-service/com.endlessm.ParentalControls.policy.in:4 msgid "Change your own app filter" msgstr "Modifiez votre propre filtre d'application" #: accounts-service/com.endlessm.ParentalControls.policy.in:5 msgid "Authentication is required to change your app filter." msgstr "" "L'authentification est requise pour modifier votre filtre d'application." #: accounts-service/com.endlessm.ParentalControls.policy.in:14 msgid "Read your own app filter" msgstr "Lisez votre propre filtre d'application" #: accounts-service/com.endlessm.ParentalControls.policy.in:15 msgid "Authentication is required to read your app filter." msgstr "L'authentification est requise pour lire votre filtre d'application." #: accounts-service/com.endlessm.ParentalControls.policy.in:24 msgid "Change another user’s app filter" msgstr "Modifier le filtre d'application d'un autre utilisateur" #: accounts-service/com.endlessm.ParentalControls.policy.in:25 msgid "Authentication is required to change another user’s app filter." msgstr "" "L'authentification est requise pour modifier le filtre d'application d'un " "autre utilisateur." #: accounts-service/com.endlessm.ParentalControls.policy.in:34 msgid "Read another user’s app filter" msgstr "Lire le filtre d'application d'un autre utilisateur" #: accounts-service/com.endlessm.ParentalControls.policy.in:35 msgid "Authentication is required to read another user’s app filter." msgstr "" "L'authentification est requise pour lire le filtre d'application d'un autre " "utilisateur." #: accounts-service/com.endlessm.ParentalControls.policy.in:44 msgid "Change your own session limits" msgstr "Modifiez vos propres limites de session" #: accounts-service/com.endlessm.ParentalControls.policy.in:45 msgid "Authentication is required to change your session limits." msgstr "L'authentification est requise pour modifier vos limites de session." #: accounts-service/com.endlessm.ParentalControls.policy.in:54 msgid "Read your own session limits" msgstr "Lisez vos propres limites de session" #: accounts-service/com.endlessm.ParentalControls.policy.in:55 msgid "Authentication is required to read your session limits." msgstr "L'authentification est requise pour lire vos limites de session." #: accounts-service/com.endlessm.ParentalControls.policy.in:64 msgid "Change another user’s session limits" msgstr "Modifier les limites de session d'un autre utilisateur" #: accounts-service/com.endlessm.ParentalControls.policy.in:65 msgid "Authentication is required to change another user’s session limits." msgstr "" "L'authentification est requise pour modifier les limites de session d'un " "autre utilisateur." #: accounts-service/com.endlessm.ParentalControls.policy.in:74 msgid "Read another user’s session limits" msgstr "Lire les limites de session d'un autre utilisateur" #: accounts-service/com.endlessm.ParentalControls.policy.in:75 msgid "Authentication is required to read another user’s session limits." msgstr "" "L'authentification est requise pour lire les limites de session d'un autre " "utilisateur." #: accounts-service/com.endlessm.ParentalControls.policy.in:84 msgid "Change your own account info" msgstr "Modifiez vos propres infos de compte" #: accounts-service/com.endlessm.ParentalControls.policy.in:85 msgid "Authentication is required to change your account info." msgstr "L'authentification est requise pour modifier vos infos de compte." #: accounts-service/com.endlessm.ParentalControls.policy.in:94 msgid "Read your own account info" msgstr "Lisez vos propres infos de compte" #: accounts-service/com.endlessm.ParentalControls.policy.in:95 msgid "Authentication is required to read your account info." msgstr "L'authentification est requise pour lire les infos de votre compte." #: accounts-service/com.endlessm.ParentalControls.policy.in:104 msgid "Change another user’s account info" msgstr "Modifier les infos de compte d'un autre utilisateur" #: accounts-service/com.endlessm.ParentalControls.policy.in:105 msgid "Authentication is required to change another user’s account info." msgstr "" "L'authentification est requise pour modifier les informations de compte d'un " "autre utilisateur." #: accounts-service/com.endlessm.ParentalControls.policy.in:114 msgid "Read another user’s account info" msgstr "Lire les infos de compte d'un autre utilisateur" #: accounts-service/com.endlessm.ParentalControls.policy.in:115 msgid "Authentication is required to read another user’s account info." msgstr "" "L'authentification est requise pour lire les infos de compte d'un autre " "utilisateur." #: libmalcontent/app-filter.c:694 #, c-format msgid "App filter for user %u was in an unrecognized format" msgstr "" "Le filtre d'application de l'utilisateur %u était dans un format non reconnu." #: libmalcontent/app-filter.c:725 #, c-format msgid "OARS filter for user %u has an unrecognized kind ‘%s’" msgstr "Le filtre OARS de l'utilisateur %u a un type non reconnu ‘%s’" #: libmalcontent/manager.c:283 libmalcontent/manager.c:412 #, c-format msgid "Not allowed to query app filter data for user %u" msgstr "" "Pas autorisé à interroger les données du filtre d'application de " "l'utilisateur %u" #: libmalcontent/manager.c:288 #, c-format msgid "User %u does not exist" msgstr "L'utilisateur %u n'existe pas." #: libmalcontent/manager.c:394 msgid "App filtering is globally disabled" msgstr "Le filtrage de l'application est globalement désactivé." #: libmalcontent/manager.c:777 msgid "Session limits are globally disabled" msgstr "Les limites de session sont globalement désactivées." #: libmalcontent/manager.c:795 #, c-format msgid "Not allowed to query session limits data for user %u" msgstr "" "Pas autorisé à interroger les données de limites de session de l'utilisateur " "%u" #: libmalcontent/session-limits.c:306 #, c-format msgid "Session limit for user %u was in an unrecognized format" msgstr "" "La limite de session de l'utilisateur %u était dans un format non reconnu." #: libmalcontent/session-limits.c:328 #, c-format msgid "Session limit for user %u has an unrecognized type ‘%u’" msgstr "La limite de session de l'utilisateur %u a un type non reconnu ‘%u’" #: libmalcontent/session-limits.c:346 #, c-format msgid "Session limit for user %u has invalid daily schedule %u–%u" msgstr "" "La limite de session de l'utilisateur %u a un horaire quotidien invalide %u–" "%u" #. TRANSLATORS: This is the formatting of English and localized name #. of the rating e.g. "Adults Only (solo adultos)" #: libmalcontent-ui/gs-content-rating.c:75 #, c-format msgid "%s (%s)" msgstr "" #: libmalcontent-ui/gs-content-rating.c:209 msgid "General" msgstr "" #: libmalcontent-ui/gs-content-rating.c:218 msgid "ALL" msgstr "" #: libmalcontent-ui/gs-content-rating.c:222 #: libmalcontent-ui/gs-content-rating.c:485 msgid "Adults Only" msgstr "" #: libmalcontent-ui/gs-content-rating.c:224 #: libmalcontent-ui/gs-content-rating.c:484 msgid "Mature" msgstr "" #: libmalcontent-ui/gs-content-rating.c:226 #: libmalcontent-ui/gs-content-rating.c:483 msgid "Teen" msgstr "" #: libmalcontent-ui/gs-content-rating.c:228 #: libmalcontent-ui/gs-content-rating.c:482 msgid "Everyone 10+" msgstr "" #: libmalcontent-ui/gs-content-rating.c:230 #: libmalcontent-ui/gs-content-rating.c:481 msgid "Everyone" msgstr "" #: libmalcontent-ui/gs-content-rating.c:232 #: libmalcontent-ui/gs-content-rating.c:480 msgid "Early Childhood" msgstr "" #. Translators: the placeholder is a user’s full name #: libmalcontent-ui/restrict-applications-dialog.c:222 #, c-format msgid "Restrict %s from using the following installed applications." msgstr "Interdire %s d'utiliser les applications installées suivantes." #: libmalcontent-ui/restrict-applications-dialog.ui:6 #: libmalcontent-ui/restrict-applications-dialog.ui:12 msgid "Restrict Applications" msgstr "Restreindre des applications" #: libmalcontent-ui/restrict-applications-selector.ui:24 msgid "No applications found to restrict." msgstr "Aucune application à restreindre n'a été trouvée." #. Translators: this is the full name for an unknown user account. #: libmalcontent-ui/user-controls.c:242 libmalcontent-ui/user-controls.c:253 msgid "unknown" msgstr "inconnu" #: libmalcontent-ui/user-controls.c:338 libmalcontent-ui/user-controls.c:425 #: libmalcontent-ui/user-controls.c:711 msgid "All Ages" msgstr "Tous les âges" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:514 #, c-format msgid "" "Prevents %s from running web browsers. Limited web content may still be " "available in other applications." msgstr "" "Empêche %s d'exécuter des navigateurs web. Du contenu web limité peut encore " "être disponible dans d'autres applications." #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:519 #, c-format msgid "Prevents specified applications from being used by %s." msgstr "Empêche l'utilisation des applications spécifiées par %s." #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:524 #, c-format msgid "Prevents %s from installing applications." msgstr "Empêche %s d'installer des applications." #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:529 #, c-format msgid "Applications installed by %s will not appear for other users." msgstr "" "Les applications installées par %s n'apparaîtront pas pour les autres " "utilisateurs." #: libmalcontent-ui/user-controls.ui:17 msgid "Application Usage Restrictions" msgstr "Restrictions d'usage de l'application" #: libmalcontent-ui/user-controls.ui:68 msgid "Restrict _Web Browsers" msgstr "Restreindre les navigateurs web" #: libmalcontent-ui/user-controls.ui:152 msgid "_Restrict Applications" msgstr "_Restreindre les applications" #: libmalcontent-ui/user-controls.ui:231 msgid "Software Installation Restrictions" msgstr "Restrictions d'installation de logiciels" #: libmalcontent-ui/user-controls.ui:281 msgid "Restrict Application _Installation" msgstr "Restreindre l'installation d'applications" #: libmalcontent-ui/user-controls.ui:366 msgid "Restrict Application Installation for _Others" msgstr "Restreindre l'installation d'applications pour les autres" #: libmalcontent-ui/user-controls.ui:451 msgid "Application _Suitability" msgstr "Adéquation de l'application" #: libmalcontent-ui/user-controls.ui:473 msgid "" "Restricts browsing or installation of applications to applications suitable " "for certain ages or above." msgstr "" "Restreint la navigation ou l'installation d'applications aux applications " "adaptées à certains âges ou au-delà." #. Translators: This is the title of the main window #. Translators: the name of the application as it appears in a software center #: malcontent-control/application.c:105 malcontent-control/main.ui:12 #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:9 #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:3 msgid "Parental Controls" msgstr "Contrôles parentaux" #: malcontent-control/application.c:270 msgid "Copyright © 2019, 2020 Endless Mobile, Inc." msgstr "" #. Translators: this should be "translated" to the #. names of people who have translated Malcontent into #. this language, one per line. #: malcontent-control/application.c:275 msgid "translator-credits" msgstr "" #. Translators: "Malcontent" is the brand name of this #. project, so should not be translated. #: malcontent-control/application.c:281 msgid "Malcontent Website" msgstr "Site web de Malcontent" #: malcontent-control/application.c:299 msgid "The help contents could not be displayed" msgstr "Les contenus d'aide n'ont pas pu être affichés." #: malcontent-control/application.c:336 msgid "Failed to load user data from the system" msgstr "Échec de chargement des données de l'utilisateur à partir du système" #: malcontent-control/application.c:338 msgid "Please make sure that the AccountsService is installed and enabled." msgstr "Veuillez vous assurer que le AccountsService est installé et activé." #: malcontent-control/carousel.ui:48 msgid "Previous Page" msgstr "Page précédente" #: malcontent-control/carousel.ui:74 msgid "Next Page" msgstr "Page suivante" #: malcontent-control/main.ui:93 msgid "Permission Required" msgstr "Permission requise" #: malcontent-control/main.ui:107 msgid "" "Permission is required to view and change user parental controls settings." msgstr "" "Une permission est requise pour consulter et modifier les paramètres des " "contrôles parentaux de l'utilisateur." #: malcontent-control/main.ui:148 msgid "No Child Users Configured" msgstr "Aucun utilisateur enfant configuré" #: malcontent-control/main.ui:162 msgid "" "No child users are currently set up on the system. Create one before setting " "up their parental controls." msgstr "" "Aucun utilisateur enfant n'est actuellement configuré sur le système. Créez-" "en un avant de configurer ses contrôles parentaux." #: malcontent-control/main.ui:174 msgid "Create _Child User" msgstr "Créer un utilisateur enfant" #: malcontent-control/main.ui:202 msgid "Loading…" msgstr "Chargement..." #: malcontent-control/main.ui:265 msgid "_Help" msgstr "Aid_e" #: malcontent-control/main.ui:269 msgid "_About Parental Controls" msgstr "_À propos des contrôles parentaux" #. Translators: the brief summary of the application as it appears in a software center. #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:12 #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:4 msgid "Set parental controls and monitor usage by users" msgstr "" "Configurer les contrôles parentaux et surveiller l'usage par les utilisateurs" #. Translators: These are the application description paragraphs in the AppData file. #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:16 msgid "" "Manage users’ parental controls restrictions, controlling how long they can " "use the computer for, what software they can install, and what installed " "software they can run." msgstr "" "Gérez les restrictions des contrôles parentaux des utilisateurs, contrôlez " "la durée pendant laquelle ils peuvent utiliser l'ordinateur, quels logiciels " "ils peuvent installer, et quels logiciels installés ils peuvent exécuter." #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:39 msgid "The GNOME Project" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:50 #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:59 msgid "Minor improvements to parental controls application UI" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:51 msgid "Add a user manual" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:52 msgid "Translation updates" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:60 msgid "Translations to Ukrainian and Polish" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:67 msgid "Improve parental controls application UI and add icon" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:68 msgid "Support for indicating which accounts are parent accounts" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:75 msgid "Initial release of basic parental controls application" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:76 msgid "Support for setting app installation and run restrictions on users" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:83 msgid "Maintenance release of underlying parental controls library" msgstr "" #. Translators: Do NOT translate or transliterate this text (this is an icon file name)! #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:7 msgid "org.freedesktop.MalcontentControl" msgstr "" #. Translators: Search terms to find this application. Do NOT translate or localise the semicolons! The list MUST also end with a semicolon! #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:13 msgid "" "parental controls;screen time;app restrictions;web browser restrictions;oars;" "usage;usage limit;kid;child;" msgstr "" "contrôles parentaux;temps d'écran;restrictions d'application;restrictions de " "navigateur web;oars;usage;limite d'usage;enfant;enfant" #: malcontent-control/org.freedesktop.MalcontentControl.policy.in:9 msgid "Manage parental controls" msgstr "Gérer les contrôles parentaux" #: malcontent-control/org.freedesktop.MalcontentControl.policy.in:10 msgid "Authentication is required to read and change user parental controls" msgstr "" "L'authentification est requise pour lire et modifier les contrôles parentaux " "de l'utilisateur." #: malcontent-control/user-selector.c:426 msgid "Your account" msgstr "Votre compte" #. Always allow root, to avoid a situation where this PAM module prevents #. * all users logging in with no way of recovery. #: pam/pam_malcontent.c:142 pam/pam_malcontent.c:188 #, c-format msgid "User ‘%s’ has no time limits enabled" msgstr "L'utilisateur ‘%s’ n'a aucune limite de temps activée." #: pam/pam_malcontent.c:151 pam/pam_malcontent.c:172 #, c-format msgid "Error getting session limits for user ‘%s’: %s" msgstr "Erreur d'obtention des limites de session de l'utilisateur ‘%s’ : %s" #: pam/pam_malcontent.c:182 #, c-format msgid "User ‘%s’ has no time remaining" msgstr "L'utilisateur ‘%s’ n'a plus de temps." #: pam/pam_malcontent.c:200 #, c-format msgid "Error setting time limit on login session: %s" msgstr "" "Erreur de configuration de la limite de temps sur la session de " "connexion : %s" #~ msgid "No cartoon violence" #~ msgstr "Aucune violence de dessins animés" #~ msgid "Cartoon characters in unsafe situations" #~ msgstr "Personnages de dessins animés en situation de danger" #~ msgid "Cartoon characters in aggressive conflict" #~ msgstr "Personnages de dessins animés en conflit agressif" #~ msgid "Graphic violence involving cartoon characters" #~ msgstr "" #~ "Illustration de violences impliquant les personnages de dessins animés" #~ msgid "No fantasy violence" #~ msgstr "Pas de violences fantastiques" #~ msgid "Characters in unsafe situations easily distinguishable from reality" #~ msgstr "Personnages en situations dangereuses franchement irréelles" #~ msgid "" #~ "Characters in aggressive conflict easily distinguishable from reality" #~ msgstr "Personnages en situation de conflit agressif franchement irréel" #~ msgid "Graphic violence easily distinguishable from reality" #~ msgstr "Illustration violente franchement irréelle" #~ msgid "No realistic violence" #~ msgstr "Aucune violence réaliste" #~ msgid "Mildly realistic characters in unsafe situations" #~ msgstr "Personnages moyennement réalistes en situation dangereuse" #~ msgid "Depictions of realistic characters in aggressive conflict" #~ msgstr "Illustrations de personnages réalistes en conflit agressif" #~ msgid "Graphic violence involving realistic characters" #~ msgstr "Illustrations de violences impliquant des personnages réalistes" #~ msgid "No bloodshed" #~ msgstr "Aucun massacre" #~ msgid "Unrealistic bloodshed" #~ msgstr "Massacre irréaliste" #~ msgid "Realistic bloodshed" #~ msgstr "Massacre réaliste" #~ msgid "Depictions of bloodshed and the mutilation of body parts" #~ msgstr "Illustrations d’un massacre et de mutilations corporelles" #~ msgid "No sexual violence" #~ msgstr "Aucune violence sexuelle" #~ msgid "Rape or other violent sexual behavior" #~ msgstr "Viol ou autre comportement sexuel violent" #~ msgid "No references to alcohol" #~ msgstr "Aucune allusion à des boissons alcoolisées" #~ msgid "References to alcoholic beverages" #~ msgstr "Allusions à des boissons alcoolisées" #~ msgid "Use of alcoholic beverages" #~ msgstr "Usage de boissons alcoolisées" #~ msgid "No references to illicit drugs" #~ msgstr "Aucune allusion à des stupéfiants illicites" #~ msgid "References to illicit drugs" #~ msgstr "Allusions à des stupéfiants illicites" #~ msgid "Use of illicit drugs" #~ msgstr "Usage de stupéfiants illicites" #~ msgid "References to tobacco products" #~ msgstr "Allusions à des produits dérivés du tabac" #~ msgid "Use of tobacco products" #~ msgstr "Usage de produits dérivés du tabac" #~ msgid "No nudity of any sort" #~ msgstr "Aucun nu d’aucune sorte" #~ msgid "Brief artistic nudity" #~ msgstr "Nu artistique de courte durée" #~ msgid "Prolonged nudity" #~ msgstr "État de nudité prolongée" #~ msgid "No references or depictions of sexual nature" #~ msgstr "Aucune allusion ou image à caractère sexuel" #~ msgid "Provocative references or depictions" #~ msgstr "Allusions ou images provocatrices" #~ msgid "Sexual references or depictions" #~ msgstr "Allusions ou images à caractère sexuel" #~ msgid "Graphic sexual behavior" #~ msgstr "Illustrations de comportements sexuels" #~ msgid "No profanity of any kind" #~ msgstr "Aucune profanation d’aucune sorte" #~ msgid "Mild or infrequent use of profanity" #~ msgstr "Utilisation modérée ou occasionnelle d’injures" #~ msgid "Moderate use of profanity" #~ msgstr "Utilisation modérée d’injures" #~ msgid "Strong or frequent use of profanity" #~ msgstr "Utilisation forte ou fréquente d’injures" #~ msgid "No inappropriate humor" #~ msgstr "Aucun humour déplacé" #~ msgid "Slapstick humor" #~ msgstr "Humour burlesque" #~ msgid "Vulgar or bathroom humor" #~ msgstr "Humour vulgaire ou de caniveau" #~ msgid "Mature or sexual humor" #~ msgstr "Humour pour adultes ou sexuel" #~ msgid "No discriminatory language of any kind" #~ msgstr "Aucune allusion discriminatoire d’aucune sorte" #~ msgid "Negativity towards a specific group of people" #~ msgstr "Attitudes négatives vis à vis de groupes spécifiques de gens" #~ msgid "Discrimination designed to cause emotional harm" #~ msgstr "Discriminations destinées à blesser émotionnellement" #~ msgid "Explicit discrimination based on gender, sexuality, race or religion" #~ msgstr "" #~ "Discriminations explicites basées sur le genre, le sexe, la race ou la " #~ "religion" #~ msgid "No advertising of any kind" #~ msgstr "Aucune publicité d’aucune sorte" #~ msgid "Product placement" #~ msgstr "Placement de produits" #~ msgid "Explicit references to specific brands or trademarked products" #~ msgstr "Allusions explicites à des produits de marque spécifique ou déposée" #~ msgid "Users are encouraged to purchase specific real-world items" #~ msgstr "" #~ "Les utilisateurs sont encouragés à acheter des éléments spécifiques du " #~ "monde réel" #~ msgid "No gambling of any kind" #~ msgstr "Aucun pari d’aucune sorte" #~ msgid "Gambling on random events using tokens or credits" #~ msgstr "Paris sur des événements aléatoires à l’aide de jetons ou à crédit" #~ msgid "Gambling using “play” money" #~ msgstr "Paris avec de la monnaie « fictive »" #~ msgid "Gambling using real money" #~ msgstr "Paris avec du vrai argent" #~ msgid "No ability to spend money" #~ msgstr "Aucune possibilité de dépenser de l’argent" #~ msgid "Users are encouraged to donate real money" #~ msgstr "Les utilisateurs sont encouragés à donner de l’argent réel" #~ msgid "Ability to spend real money in-game" #~ msgstr "Possibilité de dépenser du vrai argent dans le jeu" #~ msgid "No way to chat with other users" #~ msgstr "Aucune possibilité de discuter avec les autres utilisateurs" #~ msgid "User-to-user game interactions without chat functionality" #~ msgstr "Actions de jeu entre utilisateurs sans possibilité de discussion" #~ msgid "Moderated chat functionality between users" #~ msgstr "Possibilité modérée de discuter entre utilisateurs" #~ msgid "Uncontrolled chat functionality between users" #~ msgstr "Possibilité de discuter sans contrôle entre utilisateurs" #~ msgid "No way to talk with other users" #~ msgstr "Aucun moyen de parler avec les autres utilisateurs" #~ msgid "Uncontrolled audio or video chat functionality between users" #~ msgstr "Possibilité de discuter ou se voir sans contrôle entre utilisateurs" #~ msgid "No sharing of social network usernames or email addresses" #~ msgstr "" #~ "Aucun partage des noms d’utilisateur de réseaux sociaux ou des adresses " #~ "courriel" #~ msgid "Sharing social network usernames or email addresses" #~ msgstr "" #~ "Partage des noms d’utilisateur de réseaux sociaux ou des adresses courriel" #~ msgid "No sharing of user information with 3rd parties" #~ msgstr "" #~ "Aucun partage des identifiants d’utilisateur avec des tierces parties" #~ msgid "Checking for the latest application version" #~ msgstr "Vérification s’il s’agit de la dernière version de l’application" #~ msgid "Sharing diagnostic data that does not let others identify the user" #~ msgstr "" #~ "Partage des données de diagnostic ne permettant pas l’identification de " #~ "l’utilisateur" #~ msgid "Sharing information that lets others identify the user" #~ msgstr "Partage d’informations permettant l’identification de l’utilisateur" #~ msgid "No sharing of physical location to other users" #~ msgstr "Aucun partage de géolocalisation avec les autres utilisateurs" #~ msgid "Sharing physical location to other users" #~ msgstr "Partage de géolocalisation avec les autres utilisateurs" #~ msgid "No references to homosexuality" #~ msgstr "Aucune allusion à l’homosexualité" #~ msgid "Indirect references to homosexuality" #~ msgstr "Allusions indirectes à l’homosexualité" #~ msgid "Kissing between people of the same gender" #~ msgstr "Étreintes entre personnes d’un même sexe" #~ msgid "Graphic sexual behavior between people of the same gender" #~ msgstr "Images de comportements sexuels entre personnes d’un même sexe" #~ msgid "No references to prostitution" #~ msgstr "Aucune allusion à la prostitution" #~ msgid "Indirect references to prostitution" #~ msgstr "Allusions indirectes à la prostitution" #~ msgid "Direct references to prostitution" #~ msgstr "Allusions directes à la prostitution" #~ msgid "Graphic depictions of the act of prostitution" #~ msgstr "Images d’actes de prostitution" #~ msgid "No references to adultery" #~ msgstr "Aucune allusion à l’adultère" #~ msgid "Indirect references to adultery" #~ msgstr "Allusions indirectes à l’adultère" #~ msgid "Direct references to adultery" #~ msgstr "Allusions directes à l’adultère" #~ msgid "Graphic depictions of the act of adultery" #~ msgstr "Images d’actes d’adultère" #~ msgid "No sexualized characters" #~ msgstr "Représentations humaines à caractère non sexuel" #~ msgid "Scantily clad human characters" #~ msgstr "Représentations humaines légèrement vêtues" #~ msgid "Overtly sexualized human characters" #~ msgstr "Représentations humaines à caractère ouvertement sexuel" #~ msgid "No references to desecration" #~ msgstr "Aucune allusion à de la profanation" #~ msgid "Depictions or references to historical desecration" #~ msgstr "Allusions ou images de profanations historiques" #~ msgid "Depictions of modern-day human desecration" #~ msgstr "Représentations d’actes de profanation contemporains sur humains" #~ msgid "Graphic depictions of modern-day desecration" #~ msgstr "Images d’actes de profanation contemporains sur humains" #~ msgid "No visible dead human remains" #~ msgstr "Aucune image de restes humains" #~ msgid "Visible dead human remains" #~ msgstr "Images de restes humains" #~ msgid "Dead human remains that are exposed to the elements" #~ msgstr "Restes humains exposés aux éléments" #~ msgid "Graphic depictions of desecration of human bodies" #~ msgstr "Images de profanations sur des corps humains" #~ msgid "No references to slavery" #~ msgstr "Aucune allusion à l’esclavagisme" #~ msgid "Depictions or references to historical slavery" #~ msgstr "Représentations ou allusions à l’esclavagisme historique" #~ msgid "Depictions of modern-day slavery" #~ msgstr "Représentations d’esclavagisme contemporain" #~ msgid "Graphic depictions of modern-day slavery" #~ msgstr "Images d’esclavagisme contemporain" malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/po/fur.po000066400000000000000000000561261505556674000233600ustar00rootroot00000000000000# Friulian translations for malcontent package. # Copyright (C) 2020 THE malcontent'S COPYRIGHT HOLDER # This file is distributed under the same license as the malcontent package. # Automatically generated, 2020. # msgid "" msgstr "" "Project-Id-Version: malcontent\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-06-10 12:04+0100\n" "PO-Revision-Date: 2020-04-15 13:42+0100\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: fur\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: accounts-service/com.endlessm.ParentalControls.policy.in:4 msgid "Change your own app filter" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:5 msgid "Authentication is required to change your app filter." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:14 msgid "Read your own app filter" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:15 msgid "Authentication is required to read your app filter." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:24 msgid "Change another user’s app filter" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:25 msgid "Authentication is required to change another user’s app filter." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:34 msgid "Read another user’s app filter" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:35 msgid "Authentication is required to read another user’s app filter." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:44 msgid "Change your own session limits" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:45 msgid "Authentication is required to change your session limits." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:54 msgid "Read your own session limits" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:55 msgid "Authentication is required to read your session limits." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:64 msgid "Change another user’s session limits" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:65 msgid "Authentication is required to change another user’s session limits." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:74 msgid "Read another user’s session limits" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:75 msgid "Authentication is required to read another user’s session limits." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:84 msgid "Change your own account info" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:85 msgid "Authentication is required to change your account info." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:94 msgid "Read your own account info" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:95 msgid "Authentication is required to read your account info." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:104 msgid "Change another user’s account info" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:105 msgid "Authentication is required to change another user’s account info." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:114 msgid "Read another user’s account info" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:115 msgid "Authentication is required to read another user’s account info." msgstr "" #: libmalcontent/app-filter.c:694 #, c-format msgid "App filter for user %u was in an unrecognized format" msgstr "" #: libmalcontent/app-filter.c:725 #, c-format msgid "OARS filter for user %u has an unrecognized kind ‘%s’" msgstr "" #: libmalcontent/manager.c:283 libmalcontent/manager.c:412 #, c-format msgid "Not allowed to query app filter data for user %u" msgstr "" #: libmalcontent/manager.c:288 #, c-format msgid "User %u does not exist" msgstr "" #: libmalcontent/manager.c:394 msgid "App filtering is globally disabled" msgstr "" #: libmalcontent/manager.c:777 msgid "Session limits are globally disabled" msgstr "" #: libmalcontent/manager.c:795 #, c-format msgid "Not allowed to query session limits data for user %u" msgstr "" #: libmalcontent/session-limits.c:306 #, c-format msgid "Session limit for user %u was in an unrecognized format" msgstr "" #: libmalcontent/session-limits.c:328 #, c-format msgid "Session limit for user %u has an unrecognized type ‘%u’" msgstr "" #: libmalcontent/session-limits.c:346 #, c-format msgid "Session limit for user %u has invalid daily schedule %u–%u" msgstr "" #. TRANSLATORS: This is the formatting of English and localized name #. of the rating e.g. "Adults Only (solo adultos)" #: libmalcontent-ui/gs-content-rating.c:75 #, c-format msgid "%s (%s)" msgstr "" #: libmalcontent-ui/gs-content-rating.c:209 msgid "General" msgstr "" #: libmalcontent-ui/gs-content-rating.c:218 msgid "ALL" msgstr "" #: libmalcontent-ui/gs-content-rating.c:222 #: libmalcontent-ui/gs-content-rating.c:485 msgid "Adults Only" msgstr "" #: libmalcontent-ui/gs-content-rating.c:224 #: libmalcontent-ui/gs-content-rating.c:484 msgid "Mature" msgstr "" #: libmalcontent-ui/gs-content-rating.c:226 #: libmalcontent-ui/gs-content-rating.c:483 msgid "Teen" msgstr "" #: libmalcontent-ui/gs-content-rating.c:228 #: libmalcontent-ui/gs-content-rating.c:482 msgid "Everyone 10+" msgstr "" #: libmalcontent-ui/gs-content-rating.c:230 #: libmalcontent-ui/gs-content-rating.c:481 msgid "Everyone" msgstr "" #: libmalcontent-ui/gs-content-rating.c:232 #: libmalcontent-ui/gs-content-rating.c:480 msgid "Early Childhood" msgstr "" #. Translators: the placeholder is a user’s full name #: libmalcontent-ui/restrict-applications-dialog.c:222 #, c-format msgid "Restrict %s from using the following installed applications." msgstr "" #: libmalcontent-ui/restrict-applications-dialog.ui:6 #: libmalcontent-ui/restrict-applications-dialog.ui:12 msgid "Restrict Applications" msgstr "" #: libmalcontent-ui/restrict-applications-selector.ui:24 msgid "No applications found to restrict." msgstr "" #. Translators: this is the full name for an unknown user account. #: libmalcontent-ui/user-controls.c:242 libmalcontent-ui/user-controls.c:253 msgid "unknown" msgstr "" #: libmalcontent-ui/user-controls.c:338 libmalcontent-ui/user-controls.c:425 #: libmalcontent-ui/user-controls.c:711 msgid "All Ages" msgstr "" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:514 #, c-format msgid "" "Prevents %s from running web browsers. Limited web content may still be " "available in other applications." msgstr "" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:519 #, c-format msgid "Prevents specified applications from being used by %s." msgstr "" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:524 #, c-format msgid "Prevents %s from installing applications." msgstr "" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:529 #, c-format msgid "Applications installed by %s will not appear for other users." msgstr "" #: libmalcontent-ui/user-controls.ui:17 msgid "Application Usage Restrictions" msgstr "" #: libmalcontent-ui/user-controls.ui:68 msgid "Restrict _Web Browsers" msgstr "" #: libmalcontent-ui/user-controls.ui:152 msgid "_Restrict Applications" msgstr "" #: libmalcontent-ui/user-controls.ui:231 msgid "Software Installation Restrictions" msgstr "" #: libmalcontent-ui/user-controls.ui:281 msgid "Restrict Application _Installation" msgstr "" #: libmalcontent-ui/user-controls.ui:366 msgid "Restrict Application Installation for _Others" msgstr "" #: libmalcontent-ui/user-controls.ui:451 msgid "Application _Suitability" msgstr "" #: libmalcontent-ui/user-controls.ui:473 msgid "" "Restricts browsing or installation of applications to applications suitable " "for certain ages or above." msgstr "" #. Translators: This is the title of the main window #. Translators: the name of the application as it appears in a software center #: malcontent-control/application.c:105 malcontent-control/main.ui:12 #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:9 #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:3 msgid "Parental Controls" msgstr "" #: malcontent-control/application.c:270 msgid "Copyright © 2019, 2020 Endless Mobile, Inc." msgstr "" #. Translators: this should be "translated" to the #. names of people who have translated Malcontent into #. this language, one per line. #: malcontent-control/application.c:275 msgid "translator-credits" msgstr "" #. Translators: "Malcontent" is the brand name of this #. project, so should not be translated. #: malcontent-control/application.c:281 msgid "Malcontent Website" msgstr "" #: malcontent-control/application.c:299 msgid "The help contents could not be displayed" msgstr "" #: malcontent-control/application.c:336 msgid "Failed to load user data from the system" msgstr "" #: malcontent-control/application.c:338 msgid "Please make sure that the AccountsService is installed and enabled." msgstr "" #: malcontent-control/carousel.ui:48 msgid "Previous Page" msgstr "" #: malcontent-control/carousel.ui:74 msgid "Next Page" msgstr "" #: malcontent-control/main.ui:93 msgid "Permission Required" msgstr "" #: malcontent-control/main.ui:107 msgid "" "Permission is required to view and change user parental controls settings." msgstr "" #: malcontent-control/main.ui:148 msgid "No Child Users Configured" msgstr "" #: malcontent-control/main.ui:162 msgid "" "No child users are currently set up on the system. Create one before setting " "up their parental controls." msgstr "" #: malcontent-control/main.ui:174 msgid "Create _Child User" msgstr "" #: malcontent-control/main.ui:202 msgid "Loading…" msgstr "" #: malcontent-control/main.ui:265 msgid "_Help" msgstr "_Jutori" #: malcontent-control/main.ui:269 msgid "_About Parental Controls" msgstr "" #. Translators: the brief summary of the application as it appears in a software center. #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:12 #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:4 msgid "Set parental controls and monitor usage by users" msgstr "" #. Translators: These are the application description paragraphs in the AppData file. #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:16 msgid "" "Manage users’ parental controls restrictions, controlling how long they can " "use the computer for, what software they can install, and what installed " "software they can run." msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:39 msgid "The GNOME Project" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:50 #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:59 msgid "Minor improvements to parental controls application UI" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:51 msgid "Add a user manual" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:52 msgid "Translation updates" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:60 msgid "Translations to Ukrainian and Polish" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:67 msgid "Improve parental controls application UI and add icon" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:68 msgid "Support for indicating which accounts are parent accounts" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:75 msgid "Initial release of basic parental controls application" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:76 msgid "Support for setting app installation and run restrictions on users" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:83 msgid "Maintenance release of underlying parental controls library" msgstr "" #. Translators: Do NOT translate or transliterate this text (this is an icon file name)! #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:7 msgid "org.freedesktop.MalcontentControl" msgstr "" #. Translators: Search terms to find this application. Do NOT translate or localise the semicolons! The list MUST also end with a semicolon! #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:13 msgid "" "parental controls;screen time;app restrictions;web browser restrictions;oars;" "usage;usage limit;kid;child;" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.policy.in:9 msgid "Manage parental controls" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.policy.in:10 msgid "Authentication is required to read and change user parental controls" msgstr "" #: malcontent-control/user-selector.c:426 msgid "Your account" msgstr "Il to account" #. Always allow root, to avoid a situation where this PAM module prevents #. * all users logging in with no way of recovery. #: pam/pam_malcontent.c:142 pam/pam_malcontent.c:188 #, c-format msgid "User ‘%s’ has no time limits enabled" msgstr "" #: pam/pam_malcontent.c:151 pam/pam_malcontent.c:172 #, c-format msgid "Error getting session limits for user ‘%s’: %s" msgstr "" #: pam/pam_malcontent.c:182 #, c-format msgid "User ‘%s’ has no time remaining" msgstr "" #: pam/pam_malcontent.c:200 #, c-format msgid "Error setting time limit on login session: %s" msgstr "" #~ msgid "No cartoon violence" #~ msgstr "Nissune violence dai cartons animâts" #~ msgid "Cartoon characters in unsafe situations" #~ msgstr "Personaçs di cartons animâts in situazions pericolosis" #~ msgid "Cartoon characters in aggressive conflict" #~ msgstr "Personaçs di cartons animâts in conflit violent" #~ msgid "Graphic violence involving cartoon characters" #~ msgstr "" #~ "Grafiche di violence che e cjape dentri personaçs di cartons animâts" #~ msgid "No fantasy violence" #~ msgstr "Nissune violence fantasy" #~ msgid "Characters in unsafe situations easily distinguishable from reality" #~ msgstr "Personaçs in situazions pericolosis facilis di distingui de realtât" #~ msgid "" #~ "Characters in aggressive conflict easily distinguishable from reality" #~ msgstr "Personaçs in conflit violent facil di distingui de realtât" #~ msgid "Graphic violence easily distinguishable from reality" #~ msgstr "Grafiche di violence facil di distingui de realtât" #~ msgid "No realistic violence" #~ msgstr "Nissune violence realistiche" #~ msgid "Mildly realistic characters in unsafe situations" #~ msgstr "Personaçs un pôc realistics in situazions pericolosis" #~ msgid "Depictions of realistic characters in aggressive conflict" #~ msgstr "Figuris di personaçs realistics in conflit violent" #~ msgid "Graphic violence involving realistic characters" #~ msgstr "Grafiche di violence che e cjape dentri personaçs realistics" #~ msgid "No bloodshed" #~ msgstr "Nissun maçament" #~ msgid "Unrealistic bloodshed" #~ msgstr "Maçaments no realistics" #~ msgid "Realistic bloodshed" #~ msgstr "Maçaments realistics" #~ msgid "Depictions of bloodshed and the mutilation of body parts" #~ msgstr "Figuris di sassinaments e mutilazions di tocs di cuarp" #~ msgid "No sexual violence" #~ msgstr "Nissune violence sessuâl" #~ msgid "Rape or other violent sexual behavior" #~ msgstr "Stupri o altris compuartaments sessuâi violents" #~ msgid "No references to alcohol" #~ msgstr "Nissun riferiment a bevandis alcolichis" #~ msgid "References to alcoholic beverages" #~ msgstr "Riferiments a bevandis alcolichis" #~ msgid "Use of alcoholic beverages" #~ msgstr "Ûs di bevandis alcolichis" #~ msgid "No references to illicit drugs" #~ msgstr "Nissun riferiment a droghis ilecitis" #~ msgid "References to illicit drugs" #~ msgstr "Riferiments a droghis ilecitis" #~ msgid "Use of illicit drugs" #~ msgstr "Ûs ilecit di droghis" #~ msgid "References to tobacco products" #~ msgstr "Riferiments a tabacs" #~ msgid "Use of tobacco products" #~ msgstr "Ûs di tabacs" #~ msgid "No nudity of any sort" #~ msgstr "Nissune crotarie di cualsisei gjenar" #~ msgid "Brief artistic nudity" #~ msgstr "Curte crotarie artistiche" #~ msgid "Prolonged nudity" #~ msgstr "Crotarie sprolungjade" #~ msgid "No references or depictions of sexual nature" #~ msgstr "Nissun riferiment o figure di nature sessuâl" #~ msgid "Provocative references or depictions" #~ msgstr "Figuris o riferiments provocants" #~ msgid "Sexual references or depictions" #~ msgstr "Riferiments o figuris sessuâi" #~ msgid "Graphic sexual behavior" #~ msgstr "Grafiche di compuartaments sessuâi" #~ msgid "No profanity of any kind" #~ msgstr "Nissune blasfemie di cualsisei gjenar" #~ msgid "Mild or infrequent use of profanity" #~ msgstr "Ûs lizêr o no frecuent di profanitâts" #~ msgid "Moderate use of profanity" #~ msgstr "Ûs moderât di blasfemie" #~ msgid "Strong or frequent use of profanity" #~ msgstr "Ûs frecuent e fuart di blasfemie" #~ msgid "No inappropriate humor" #~ msgstr "Nissun umorisim sconvenient" #~ msgid "Slapstick humor" #~ msgstr "Umorisim di comedie grese" #~ msgid "Vulgar or bathroom humor" #~ msgstr "Umorisim volgâr o di cesso" #~ msgid "Mature or sexual humor" #~ msgstr "Umorisim soç o par grancj" #~ msgid "No discriminatory language of any kind" #~ msgstr "Nissun lengaç discriminatori di cualsisei gjenar" #~ msgid "Negativity towards a specific group of people" #~ msgstr "Negativitât viers un specific grup di personis" #~ msgid "Discrimination designed to cause emotional harm" #~ msgstr "Discriminazion pensade par fâ mâl emotivamentri" #~ msgid "Explicit discrimination based on gender, sexuality, race or religion" #~ msgstr "" #~ "Discriminazion esplicite basade su gjenar, sessualitât, raze o religjon" #~ msgid "No advertising of any kind" #~ msgstr "Nissune publicitât di cualsisei gjenar" #~ msgid "Product placement" #~ msgstr "Vendite di prodots" #~ msgid "Explicit references to specific brands or trademarked products" #~ msgstr "Riferiments esplicits a marcjis specifichis o prodots firmâts" #~ msgid "Users are encouraged to purchase specific real-world items" #~ msgstr "I utents a son incitâts a comprâ ogjets reâi specifics" #~ msgid "No gambling of any kind" #~ msgstr "Nissun zûc di azart di cualsisei gjenar" #~ msgid "Gambling on random events using tokens or credits" #~ msgstr "Zûc di azart su events casuâi che al dopre gjetons o credits" #~ msgid "Gambling using “play” money" #~ msgstr "Zûc di azart che al dopre bêçs “dal zûc”" #~ msgid "Gambling using real money" #~ msgstr "Zûc di azart che al dopre bêçs vêrs" #~ msgid "No ability to spend money" #~ msgstr "Nissune pussibilitât di spindi bêçs" #~ msgid "Users are encouraged to donate real money" #~ msgstr "I utents a son incitâts a donâ bêçs vêrs" #~ msgid "Ability to spend real money in-game" #~ msgstr "Abilitât di spindi bêçs vêrs tal zûc" #~ msgid "No way to chat with other users" #~ msgstr "Nissune maniere par chatâ cun altris utents" #~ msgid "Moderated chat functionality between users" #~ msgstr "Funzionalitât no controllade di chat tra utents" #~ msgid "Uncontrolled chat functionality between users" #~ msgstr "Funzionalitât no controllade di chat tra utents" #~ msgid "No way to talk with other users" #~ msgstr "Nissune maniere par cjacarâ cun altris utents" #~ msgid "Uncontrolled audio or video chat functionality between users" #~ msgstr "Funzionalitât no controllade di chat video o audio tra utents" #~ msgid "No sharing of social network usernames or email addresses" #~ msgstr "" #~ "Nissune condivision di nons utent di social network o direzions e-mail" #~ msgid "Sharing social network usernames or email addresses" #~ msgstr "Condivision di nons utent di social network o direzions e-mail" #~ msgid "No sharing of user information with 3rd parties" #~ msgstr "Nissune condivision di informazions dal utent cun tiercis parts" #~ msgid "Checking for the latest application version" #~ msgstr "Control pe ultime version de aplicazion" #~ msgid "Sharing diagnostic data that does not let others identify the user" #~ msgstr "" #~ "Condivision di dâts diagnostics che no permetin a altris di identificâ " #~ "l'utent" #~ msgid "Sharing information that lets others identify the user" #~ msgstr "" #~ "Condivision di dâts diagnostics che a permetin a altris di identificâ " #~ "l'utent" #~ msgid "No sharing of physical location to other users" #~ msgstr "Nissune condivision di posizion fisiche cun altris utents" #~ msgid "Sharing physical location to other users" #~ msgstr "Condivision posizion fisiche cun altris utents" #~ msgid "No references to homosexuality" #~ msgstr "Nissun riferiment a omosessualitât" #~ msgid "Indirect references to homosexuality" #~ msgstr "Riferiments indirets ae omosessualitât" #~ msgid "Kissing between people of the same gender" #~ msgstr "Bussadis tra personis dal stes ses" #~ msgid "Graphic sexual behavior between people of the same gender" #~ msgstr "Compuartament sessuâl grafic tra personis dal stes ses" #~ msgid "No references to prostitution" #~ msgstr "Nissun riferiment a prostituzion" #~ msgid "Indirect references to prostitution" #~ msgstr "Riferiments indirets ae prostituzion" #~ msgid "Direct references to prostitution" #~ msgstr "Riferiments direts ae prostituzion" #~ msgid "Graphic depictions of the act of prostitution" #~ msgstr "Rapresentazions grafichis dal at di prostituzion" #~ msgid "No references to adultery" #~ msgstr "Nissun riferiment a adulteri" #~ msgid "Indirect references to adultery" #~ msgstr "Riferiments indirets al adulteri" #~ msgid "Direct references to adultery" #~ msgstr "Riferiment direts al adulteri" #~ msgid "Graphic depictions of the act of adultery" #~ msgstr "Rapresentazions grafichis dal at di adulteri" #~ msgid "No sexualized characters" #~ msgstr "Nissun personaç sessuât" #~ msgid "Scantily clad human characters" #~ msgstr "Personaçs umans pôc vistîts" #~ msgid "Overtly sexualized human characters" #~ msgstr "Personaçs umans sessuâts in maniere anomale" #~ msgid "No references to desecration" #~ msgstr "Nissun riferiment a profanazion" #~ msgid "Depictions of modern-day human desecration" #~ msgstr "Rapresentazion di profanazion umane moderne" #~ msgid "Graphic depictions of modern-day desecration" #~ msgstr "Rapresentazions grafichis di profanazion moderne" #~ msgid "No visible dead human remains" #~ msgstr "Nissun rest visibil di oms muarts" #~ msgid "Visible dead human remains" #~ msgstr "Rescj di oms muarts visibii" #~ msgid "Dead human remains that are exposed to the elements" #~ msgstr "Rescj di oms muarts che a son esposcj ai elements" #~ msgid "Graphic depictions of desecration of human bodies" #~ msgstr "Rapresentazions grafichis di profanazion di cuarps umans" #~ msgid "No references to slavery" #~ msgstr "Nissun riferiment a sclavitût" #~ msgid "Depictions of modern-day slavery" #~ msgstr "Rapresentazions de sclavitût moderne" #~ msgid "Graphic depictions of modern-day slavery" #~ msgstr "Rapresentazions grafichis de sclavitût moderne" malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/po/gd.po000066400000000000000000000561351505556674000231560ustar00rootroot00000000000000# Scottish Gaelic translations for malcontent package. # Copyright (C) 2020 THE malcontent'S COPYRIGHT HOLDER # This file is distributed under the same license as the malcontent package. # Automatically generated, 2020. # msgid "" msgstr "" "Project-Id-Version: malcontent\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-06-10 12:04+0100\n" "PO-Revision-Date: 2020-04-15 13:42+0100\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: gd\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: accounts-service/com.endlessm.ParentalControls.policy.in:4 msgid "Change your own app filter" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:5 msgid "Authentication is required to change your app filter." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:14 msgid "Read your own app filter" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:15 msgid "Authentication is required to read your app filter." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:24 msgid "Change another user’s app filter" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:25 msgid "Authentication is required to change another user’s app filter." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:34 msgid "Read another user’s app filter" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:35 msgid "Authentication is required to read another user’s app filter." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:44 msgid "Change your own session limits" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:45 msgid "Authentication is required to change your session limits." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:54 msgid "Read your own session limits" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:55 msgid "Authentication is required to read your session limits." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:64 msgid "Change another user’s session limits" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:65 msgid "Authentication is required to change another user’s session limits." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:74 msgid "Read another user’s session limits" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:75 msgid "Authentication is required to read another user’s session limits." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:84 msgid "Change your own account info" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:85 msgid "Authentication is required to change your account info." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:94 msgid "Read your own account info" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:95 msgid "Authentication is required to read your account info." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:104 msgid "Change another user’s account info" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:105 msgid "Authentication is required to change another user’s account info." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:114 msgid "Read another user’s account info" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:115 msgid "Authentication is required to read another user’s account info." msgstr "" #: libmalcontent/app-filter.c:694 #, c-format msgid "App filter for user %u was in an unrecognized format" msgstr "" #: libmalcontent/app-filter.c:725 #, c-format msgid "OARS filter for user %u has an unrecognized kind ‘%s’" msgstr "" #: libmalcontent/manager.c:283 libmalcontent/manager.c:412 #, c-format msgid "Not allowed to query app filter data for user %u" msgstr "" #: libmalcontent/manager.c:288 #, c-format msgid "User %u does not exist" msgstr "" #: libmalcontent/manager.c:394 msgid "App filtering is globally disabled" msgstr "" #: libmalcontent/manager.c:777 msgid "Session limits are globally disabled" msgstr "" #: libmalcontent/manager.c:795 #, c-format msgid "Not allowed to query session limits data for user %u" msgstr "" #: libmalcontent/session-limits.c:306 #, c-format msgid "Session limit for user %u was in an unrecognized format" msgstr "" #: libmalcontent/session-limits.c:328 #, c-format msgid "Session limit for user %u has an unrecognized type ‘%u’" msgstr "" #: libmalcontent/session-limits.c:346 #, c-format msgid "Session limit for user %u has invalid daily schedule %u–%u" msgstr "" #. TRANSLATORS: This is the formatting of English and localized name #. of the rating e.g. "Adults Only (solo adultos)" #: libmalcontent-ui/gs-content-rating.c:75 #, c-format msgid "%s (%s)" msgstr "" #: libmalcontent-ui/gs-content-rating.c:209 msgid "General" msgstr "" #: libmalcontent-ui/gs-content-rating.c:218 msgid "ALL" msgstr "" #: libmalcontent-ui/gs-content-rating.c:222 #: libmalcontent-ui/gs-content-rating.c:485 msgid "Adults Only" msgstr "" #: libmalcontent-ui/gs-content-rating.c:224 #: libmalcontent-ui/gs-content-rating.c:484 msgid "Mature" msgstr "" #: libmalcontent-ui/gs-content-rating.c:226 #: libmalcontent-ui/gs-content-rating.c:483 msgid "Teen" msgstr "" #: libmalcontent-ui/gs-content-rating.c:228 #: libmalcontent-ui/gs-content-rating.c:482 msgid "Everyone 10+" msgstr "" #: libmalcontent-ui/gs-content-rating.c:230 #: libmalcontent-ui/gs-content-rating.c:481 msgid "Everyone" msgstr "" #: libmalcontent-ui/gs-content-rating.c:232 #: libmalcontent-ui/gs-content-rating.c:480 msgid "Early Childhood" msgstr "" #. Translators: the placeholder is a user’s full name #: libmalcontent-ui/restrict-applications-dialog.c:222 #, c-format msgid "Restrict %s from using the following installed applications." msgstr "" #: libmalcontent-ui/restrict-applications-dialog.ui:6 #: libmalcontent-ui/restrict-applications-dialog.ui:12 msgid "Restrict Applications" msgstr "" #: libmalcontent-ui/restrict-applications-selector.ui:24 msgid "No applications found to restrict." msgstr "" #. Translators: this is the full name for an unknown user account. #: libmalcontent-ui/user-controls.c:242 libmalcontent-ui/user-controls.c:253 msgid "unknown" msgstr "" #: libmalcontent-ui/user-controls.c:338 libmalcontent-ui/user-controls.c:425 #: libmalcontent-ui/user-controls.c:711 msgid "All Ages" msgstr "" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:514 #, c-format msgid "" "Prevents %s from running web browsers. Limited web content may still be " "available in other applications." msgstr "" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:519 #, c-format msgid "Prevents specified applications from being used by %s." msgstr "" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:524 #, c-format msgid "Prevents %s from installing applications." msgstr "" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:529 #, c-format msgid "Applications installed by %s will not appear for other users." msgstr "" #: libmalcontent-ui/user-controls.ui:17 msgid "Application Usage Restrictions" msgstr "" #: libmalcontent-ui/user-controls.ui:68 msgid "Restrict _Web Browsers" msgstr "" #: libmalcontent-ui/user-controls.ui:152 msgid "_Restrict Applications" msgstr "" #: libmalcontent-ui/user-controls.ui:231 msgid "Software Installation Restrictions" msgstr "" #: libmalcontent-ui/user-controls.ui:281 msgid "Restrict Application _Installation" msgstr "" #: libmalcontent-ui/user-controls.ui:366 msgid "Restrict Application Installation for _Others" msgstr "" #: libmalcontent-ui/user-controls.ui:451 msgid "Application _Suitability" msgstr "" #: libmalcontent-ui/user-controls.ui:473 msgid "" "Restricts browsing or installation of applications to applications suitable " "for certain ages or above." msgstr "" #. Translators: This is the title of the main window #. Translators: the name of the application as it appears in a software center #: malcontent-control/application.c:105 malcontent-control/main.ui:12 #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:9 #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:3 msgid "Parental Controls" msgstr "" #: malcontent-control/application.c:270 msgid "Copyright © 2019, 2020 Endless Mobile, Inc." msgstr "" #. Translators: this should be "translated" to the #. names of people who have translated Malcontent into #. this language, one per line. #: malcontent-control/application.c:275 msgid "translator-credits" msgstr "" #. Translators: "Malcontent" is the brand name of this #. project, so should not be translated. #: malcontent-control/application.c:281 msgid "Malcontent Website" msgstr "" #: malcontent-control/application.c:299 msgid "The help contents could not be displayed" msgstr "" #: malcontent-control/application.c:336 msgid "Failed to load user data from the system" msgstr "" #: malcontent-control/application.c:338 msgid "Please make sure that the AccountsService is installed and enabled." msgstr "" #: malcontent-control/carousel.ui:48 msgid "Previous Page" msgstr "" #: malcontent-control/carousel.ui:74 msgid "Next Page" msgstr "" #: malcontent-control/main.ui:93 msgid "Permission Required" msgstr "" #: malcontent-control/main.ui:107 msgid "" "Permission is required to view and change user parental controls settings." msgstr "" #: malcontent-control/main.ui:148 msgid "No Child Users Configured" msgstr "" #: malcontent-control/main.ui:162 msgid "" "No child users are currently set up on the system. Create one before setting " "up their parental controls." msgstr "" #: malcontent-control/main.ui:174 msgid "Create _Child User" msgstr "" #: malcontent-control/main.ui:202 msgid "Loading…" msgstr "" #: malcontent-control/main.ui:265 msgid "_Help" msgstr "Cob_hair" #: malcontent-control/main.ui:269 msgid "_About Parental Controls" msgstr "" #. Translators: the brief summary of the application as it appears in a software center. #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:12 #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:4 msgid "Set parental controls and monitor usage by users" msgstr "" #. Translators: These are the application description paragraphs in the AppData file. #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:16 msgid "" "Manage users’ parental controls restrictions, controlling how long they can " "use the computer for, what software they can install, and what installed " "software they can run." msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:39 msgid "The GNOME Project" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:50 #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:59 msgid "Minor improvements to parental controls application UI" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:51 msgid "Add a user manual" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:52 msgid "Translation updates" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:60 msgid "Translations to Ukrainian and Polish" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:67 msgid "Improve parental controls application UI and add icon" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:68 msgid "Support for indicating which accounts are parent accounts" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:75 msgid "Initial release of basic parental controls application" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:76 msgid "Support for setting app installation and run restrictions on users" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:83 msgid "Maintenance release of underlying parental controls library" msgstr "" #. Translators: Do NOT translate or transliterate this text (this is an icon file name)! #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:7 msgid "org.freedesktop.MalcontentControl" msgstr "" #. Translators: Search terms to find this application. Do NOT translate or localise the semicolons! The list MUST also end with a semicolon! #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:13 msgid "" "parental controls;screen time;app restrictions;web browser restrictions;oars;" "usage;usage limit;kid;child;" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.policy.in:9 msgid "Manage parental controls" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.policy.in:10 msgid "Authentication is required to read and change user parental controls" msgstr "" #: malcontent-control/user-selector.c:426 msgid "Your account" msgstr "An cunntas agad" #. Always allow root, to avoid a situation where this PAM module prevents #. * all users logging in with no way of recovery. #: pam/pam_malcontent.c:142 pam/pam_malcontent.c:188 #, c-format msgid "User ‘%s’ has no time limits enabled" msgstr "" #: pam/pam_malcontent.c:151 pam/pam_malcontent.c:172 #, c-format msgid "Error getting session limits for user ‘%s’: %s" msgstr "" #: pam/pam_malcontent.c:182 #, c-format msgid "User ‘%s’ has no time remaining" msgstr "" #: pam/pam_malcontent.c:200 #, c-format msgid "Error setting time limit on login session: %s" msgstr "" #~ msgid "No cartoon violence" #~ msgstr "Gun ainneart cartùin" #~ msgid "Cartoon characters in unsafe situations" #~ msgstr "Pearsachan cartùin ann an suidheachaidhean nach eil sàbhailte" #~ msgid "Cartoon characters in aggressive conflict" #~ msgstr "Pearsachan cartùin ri còmhstri ionnsaigheach" #~ msgid "Graphic violence involving cartoon characters" #~ msgstr "Ainneart grafaigeach le pearsachan cartùin" #~ msgid "No fantasy violence" #~ msgstr "Gun ainneart fantastach" #~ msgid "Characters in unsafe situations easily distinguishable from reality" #~ msgstr "" #~ "Pearsachan ann an suidheachaidhean nach eil sàbhailte gun choltas na " #~ "fìrinne orra" #~ msgid "" #~ "Characters in aggressive conflict easily distinguishable from reality" #~ msgstr "Pearsachan ri còmhstri ionnsaigheach gun choltas na fìrinne oirre" #~ msgid "Graphic violence easily distinguishable from reality" #~ msgstr "Ainneart grafaigeach gun choltas na fìrinne air" #~ msgid "No realistic violence" #~ msgstr "Gun ainneart le coltas na fìrinne air" #~ msgid "Mildly realistic characters in unsafe situations" #~ msgstr "" #~ "Pearsachan fìor-riochdail ann an suidheachaidhean nach eil sàbhailte gu " #~ "socair" #~ msgid "Depictions of realistic characters in aggressive conflict" #~ msgstr "Pearsachan fìor-riochdail ri còmhstri ionnsaigheach" #~ msgid "Graphic violence involving realistic characters" #~ msgstr "Ainneart grafaigeach le pearsachan fìor-riochdail" #~ msgid "No bloodshed" #~ msgstr "Gun dòrtadh-fala" #~ msgid "Unrealistic bloodshed" #~ msgstr "Dòrtadh-fala gun choltas na fìrinne air" #~ msgid "Realistic bloodshed" #~ msgstr "Dòrtadh-fala fìor-riochdail" #~ msgid "Depictions of bloodshed and the mutilation of body parts" #~ msgstr "Dòrtadh-fala agus milleadh buill na bodhaige" #~ msgid "No sexual violence" #~ msgstr "Gun ainneart gnèitheach" #~ msgid "Rape or other violent sexual behavior" #~ msgstr "Neach-èigneachadh agus giùlan feise ainneartach eile" #~ msgid "No references to alcohol" #~ msgstr "Gun iomradh air deoch-làidir" #~ msgid "References to alcoholic beverages" #~ msgstr "Iomradh air deoch-làidir" #~ msgid "Use of alcoholic beverages" #~ msgstr "Gabhail dibhe-làidir" #~ msgid "No references to illicit drugs" #~ msgstr "Gun iomradh air drugaichean neo-cheadaichte" #~ msgid "References to illicit drugs" #~ msgstr "Iomradh air drugaichean neo-cheadaichte" #~ msgid "Use of illicit drugs" #~ msgstr "Cleachdadh dhrugaichean neo-cheadaichte" #~ msgid "References to tobacco products" #~ msgstr "Iomradh air tombaca" #~ msgid "Use of tobacco products" #~ msgstr "Cleachdadh tombaca" #~ msgid "No nudity of any sort" #~ msgstr "Gun lomnochd sam bith" #~ msgid "Brief artistic nudity" #~ msgstr "Lomnochd maiseach gu goirid" #~ msgid "Prolonged nudity" #~ msgstr "Lomnochd gu fada" #~ msgid "No references or depictions of sexual nature" #~ msgstr "Gun iomradh no sealladh feise" #~ msgid "Provocative references or depictions" #~ msgstr "Iomraidhean no seallaidhean buaireasach" #~ msgid "Sexual references or depictions" #~ msgstr "Iomraidhean no seallaidhean feise" #~ msgid "Graphic sexual behavior" #~ msgstr "Giùlan feise grafaigeach" #~ msgid "No profanity of any kind" #~ msgstr "Gun droch-chainnt sam bith" #~ msgid "Mild or infrequent use of profanity" #~ msgstr "Droch-chainnt ainneamh no shocair" #~ msgid "Moderate use of profanity" #~ msgstr "Cleachdadh droch-chainnte measarra" #~ msgid "Strong or frequent use of profanity" #~ msgstr "Droch-chainnt làidir no thric" #~ msgid "No inappropriate humor" #~ msgstr "Gun àbhachdas neo-iomchaidh sam bith" #~ msgid "Slapstick humor" #~ msgstr "Àbhachdas slapstick" #~ msgid "Vulgar or bathroom humor" #~ msgstr "Àbhachdas garbh no taighe-bhig" #~ msgid "Mature or sexual humor" #~ msgstr "Àbhachdas inbheach no feise" #~ msgid "No discriminatory language of any kind" #~ msgstr "Gun chainnt leth-bhreithe sam bith" #~ msgid "Negativity towards a specific group of people" #~ msgstr "Dìmeas air seòrsa sònraichte de dhaoine" #~ msgid "Discrimination designed to cause emotional harm" #~ msgstr "Leth-bhreith ag amas air cron fhaireachdainnean" #~ msgid "Explicit discrimination based on gender, sexuality, race or religion" #~ msgstr "" #~ "Leth-bhreith follaiseach air gnè, gnèitheachd, cinneadh no creideamh" #~ msgid "No advertising of any kind" #~ msgstr "Gun sanasachd sam bith" #~ msgid "Product placement" #~ msgstr "Sanasachd" #~ msgid "Explicit references to specific brands or trademarked products" #~ msgstr "" #~ "Iomraidhean follaiseach air branndaichean sònraichte no batharan le " #~ "comharra-malairt" #~ msgid "Users are encouraged to purchase specific real-world items" #~ msgstr "" #~ "Tha na cleachdaichean ’gam brosnachadh ach an ceannaich iad rudan " #~ "sònraichte" #~ msgid "No gambling of any kind" #~ msgstr "Gun chearrachas sam bith" #~ msgid "Gambling on random events using tokens or credits" #~ msgstr "Cearrachas air tachartasan tuaireamach le tòcanan no creideasan" #~ msgid "Gambling using “play” money" #~ msgstr "Cearrachas le airgead “cluiche”" #~ msgid "Gambling using real money" #~ msgstr "Cearrachas le fìor-airgead" #~ msgid "No ability to spend money" #~ msgstr "Gun chomas gus airgead a chosg" #~ msgid "Users are encouraged to donate real money" #~ msgstr "" #~ "Tha na cleachdaichean ’gam brosnachadh ach an doir iad tabhartas airgid" #~ msgid "Ability to spend real money in-game" #~ msgstr "Comas gus fìor-airgead a chosg am broinn a’ gheama" #~ msgid "No way to chat with other users" #~ msgstr "Gun chomas cabadaich le cleachdaichean eile" #~ msgid "Moderated chat functionality between users" #~ msgstr "Gleus cabadaich le maoir eadar na cleachdaichean" #~ msgid "Uncontrolled chat functionality between users" #~ msgstr "Gleus cabadaich gun stiùireadh eadar na cleachdaichean" #~ msgid "No way to talk with other users" #~ msgstr "Gun chomas bruidhinn ri cleachdaichean eile" #~ msgid "Uncontrolled audio or video chat functionality between users" #~ msgstr "" #~ "Gleus cabadaich fuaime no video gun stiùireadh eadar na cleachdaichean" #~ msgid "No sharing of social network usernames or email addresses" #~ msgstr "" #~ "Gun cho-roinneadh ainmean-cleachdaiche airson lìonraidhean sòisealta no " #~ "sheòlaidhean puist-d" #~ msgid "Sharing social network usernames or email addresses" #~ msgstr "" #~ "Co-roinneadh ainmean-cleachdaiche airson lìonraidhean sòisealta no " #~ "sheòlaidhean puist-d" #~ msgid "No sharing of user information with 3rd parties" #~ msgstr "" #~ "Gun cho-roinneadh fiosrachadh a’ chleachdaiche le treas-phàrtaidhean" #~ msgid "Checking for the latest application version" #~ msgstr "A’ toirt sùil airson an tionndaidh as ùire dhen aplacaid" #~ msgid "Sharing diagnostic data that does not let others identify the user" #~ msgstr "" #~ "Co-roinneadh dàta diagnosachd nach leig le daoine eile an cleachdaiche " #~ "aithneachadh" #~ msgid "Sharing information that lets others identify the user" #~ msgstr "" #~ "Co-roinneadh fiosrachaidh a leigeas le daoine eile an cleachdaiche " #~ "aithneachadh" #~ msgid "No sharing of physical location to other users" #~ msgstr "" #~ "Gun cho-roinneadh fiosrachaidh air far a bheil thu le cleachdaichean eile" #~ msgid "Sharing physical location to other users" #~ msgstr "Co-roinneadh far a bheil thu le cleachdaichean eile" #~ msgid "No references to homosexuality" #~ msgstr "Gun iomradh air co-sheòrsachd" #~ msgid "Indirect references to homosexuality" #~ msgstr "Leth-iomradh air co-sheòrsachd" #~ msgid "Kissing between people of the same gender" #~ msgstr "Dithis dhen aon ghnè a’ toirt pòg" #~ msgid "Graphic sexual behavior between people of the same gender" #~ msgstr "Giùlan feise grafaigeach eadar dithis dhen aon ghnè" #~ msgid "No references to prostitution" #~ msgstr "Gun iomradh air siùrsachd" #~ msgid "Indirect references to prostitution" #~ msgstr "Leth-iomradh air siùrsachd" #~ msgid "Graphic depictions of the act of prostitution" #~ msgstr "Sealladh grafaigeach de shiùrsachd" #~ msgid "No references to adultery" #~ msgstr "Gun iomradh air adhaltranas" #~ msgid "Indirect references to adultery" #~ msgstr "Leth-iomradh air adhaltranas" #~ msgid "Graphic depictions of the act of adultery" #~ msgstr "Sealladh grafaigeach de dh’adhaltranas" #~ msgid "No sexualized characters" #~ msgstr "Gun phearsachan drabasta" #~ msgid "Scantily clad human characters" #~ msgstr "Pearsachan daonna le aodach gann" #~ msgid "Overtly sexualized human characters" #~ msgstr "Pearsachan daonna drabasta" #~ msgid "No references to desecration" #~ msgstr "Gun iomradh air mì-naomhachadh" #~ msgid "Depictions of modern-day human desecration" #~ msgstr "Sealladh no iomradh air mì-naomhachadh daonna an latha an-diugh" #~ msgid "Graphic depictions of modern-day desecration" #~ msgstr "Sealladh grafaigeach air mì-naomhachadh an latha an-diugh" #~ msgid "No visible dead human remains" #~ msgstr "Gun sealladh air iarsmadh daonna" #~ msgid "Visible dead human remains" #~ msgstr "Sealladh air iarsmadh daonna" #~ msgid "Dead human remains that are exposed to the elements" #~ msgstr "Iarsmadh daonna nochdte ris na dùilean" #~ msgid "Graphic depictions of desecration of human bodies" #~ msgstr "Sealladh grafaigeach air mì-naomhachadh bodhaigean daonna" #~ msgid "No references to slavery" #~ msgstr "Gun iomradh air tràilleachd" #~ msgid "Depictions of modern-day slavery" #~ msgstr "Sealladh no iomradh air tràilleachd an latha an-diugh" #~ msgid "Graphic depictions of modern-day slavery" #~ msgstr "Sealladh grafaigeach air tràlleachd an latha an-diugh" malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/po/gl.po000066400000000000000000000560751505556674000231710ustar00rootroot00000000000000# Galician translations for malcontent package. # Copyright (C) 2020 THE malcontent'S COPYRIGHT HOLDER # This file is distributed under the same license as the malcontent package. # Automatically generated, 2020. # msgid "" msgstr "" "Project-Id-Version: malcontent\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-06-10 12:04+0100\n" "PO-Revision-Date: 2020-04-15 13:42+0100\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: gl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: accounts-service/com.endlessm.ParentalControls.policy.in:4 msgid "Change your own app filter" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:5 msgid "Authentication is required to change your app filter." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:14 msgid "Read your own app filter" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:15 msgid "Authentication is required to read your app filter." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:24 msgid "Change another user’s app filter" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:25 msgid "Authentication is required to change another user’s app filter." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:34 msgid "Read another user’s app filter" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:35 msgid "Authentication is required to read another user’s app filter." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:44 msgid "Change your own session limits" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:45 msgid "Authentication is required to change your session limits." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:54 msgid "Read your own session limits" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:55 msgid "Authentication is required to read your session limits." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:64 msgid "Change another user’s session limits" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:65 msgid "Authentication is required to change another user’s session limits." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:74 msgid "Read another user’s session limits" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:75 msgid "Authentication is required to read another user’s session limits." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:84 msgid "Change your own account info" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:85 msgid "Authentication is required to change your account info." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:94 msgid "Read your own account info" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:95 msgid "Authentication is required to read your account info." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:104 msgid "Change another user’s account info" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:105 msgid "Authentication is required to change another user’s account info." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:114 msgid "Read another user’s account info" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:115 msgid "Authentication is required to read another user’s account info." msgstr "" #: libmalcontent/app-filter.c:694 #, c-format msgid "App filter for user %u was in an unrecognized format" msgstr "" #: libmalcontent/app-filter.c:725 #, c-format msgid "OARS filter for user %u has an unrecognized kind ‘%s’" msgstr "" #: libmalcontent/manager.c:283 libmalcontent/manager.c:412 #, c-format msgid "Not allowed to query app filter data for user %u" msgstr "" #: libmalcontent/manager.c:288 #, c-format msgid "User %u does not exist" msgstr "" #: libmalcontent/manager.c:394 msgid "App filtering is globally disabled" msgstr "" #: libmalcontent/manager.c:777 msgid "Session limits are globally disabled" msgstr "" #: libmalcontent/manager.c:795 #, c-format msgid "Not allowed to query session limits data for user %u" msgstr "" #: libmalcontent/session-limits.c:306 #, c-format msgid "Session limit for user %u was in an unrecognized format" msgstr "" #: libmalcontent/session-limits.c:328 #, c-format msgid "Session limit for user %u has an unrecognized type ‘%u’" msgstr "" #: libmalcontent/session-limits.c:346 #, c-format msgid "Session limit for user %u has invalid daily schedule %u–%u" msgstr "" #. TRANSLATORS: This is the formatting of English and localized name #. of the rating e.g. "Adults Only (solo adultos)" #: libmalcontent-ui/gs-content-rating.c:75 #, c-format msgid "%s (%s)" msgstr "" #: libmalcontent-ui/gs-content-rating.c:209 msgid "General" msgstr "" #: libmalcontent-ui/gs-content-rating.c:218 msgid "ALL" msgstr "" #: libmalcontent-ui/gs-content-rating.c:222 #: libmalcontent-ui/gs-content-rating.c:485 msgid "Adults Only" msgstr "" #: libmalcontent-ui/gs-content-rating.c:224 #: libmalcontent-ui/gs-content-rating.c:484 msgid "Mature" msgstr "" #: libmalcontent-ui/gs-content-rating.c:226 #: libmalcontent-ui/gs-content-rating.c:483 msgid "Teen" msgstr "" #: libmalcontent-ui/gs-content-rating.c:228 #: libmalcontent-ui/gs-content-rating.c:482 msgid "Everyone 10+" msgstr "" #: libmalcontent-ui/gs-content-rating.c:230 #: libmalcontent-ui/gs-content-rating.c:481 msgid "Everyone" msgstr "" #: libmalcontent-ui/gs-content-rating.c:232 #: libmalcontent-ui/gs-content-rating.c:480 msgid "Early Childhood" msgstr "" #. Translators: the placeholder is a user’s full name #: libmalcontent-ui/restrict-applications-dialog.c:222 #, c-format msgid "Restrict %s from using the following installed applications." msgstr "" #: libmalcontent-ui/restrict-applications-dialog.ui:6 #: libmalcontent-ui/restrict-applications-dialog.ui:12 msgid "Restrict Applications" msgstr "" #: libmalcontent-ui/restrict-applications-selector.ui:24 msgid "No applications found to restrict." msgstr "" #. Translators: this is the full name for an unknown user account. #: libmalcontent-ui/user-controls.c:242 libmalcontent-ui/user-controls.c:253 msgid "unknown" msgstr "" #: libmalcontent-ui/user-controls.c:338 libmalcontent-ui/user-controls.c:425 #: libmalcontent-ui/user-controls.c:711 msgid "All Ages" msgstr "" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:514 #, c-format msgid "" "Prevents %s from running web browsers. Limited web content may still be " "available in other applications." msgstr "" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:519 #, c-format msgid "Prevents specified applications from being used by %s." msgstr "" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:524 #, c-format msgid "Prevents %s from installing applications." msgstr "" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:529 #, c-format msgid "Applications installed by %s will not appear for other users." msgstr "" #: libmalcontent-ui/user-controls.ui:17 msgid "Application Usage Restrictions" msgstr "" #: libmalcontent-ui/user-controls.ui:68 msgid "Restrict _Web Browsers" msgstr "" #: libmalcontent-ui/user-controls.ui:152 msgid "_Restrict Applications" msgstr "" #: libmalcontent-ui/user-controls.ui:231 msgid "Software Installation Restrictions" msgstr "" #: libmalcontent-ui/user-controls.ui:281 msgid "Restrict Application _Installation" msgstr "" #: libmalcontent-ui/user-controls.ui:366 msgid "Restrict Application Installation for _Others" msgstr "" #: libmalcontent-ui/user-controls.ui:451 msgid "Application _Suitability" msgstr "" #: libmalcontent-ui/user-controls.ui:473 msgid "" "Restricts browsing or installation of applications to applications suitable " "for certain ages or above." msgstr "" #. Translators: This is the title of the main window #. Translators: the name of the application as it appears in a software center #: malcontent-control/application.c:105 malcontent-control/main.ui:12 #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:9 #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:3 msgid "Parental Controls" msgstr "" #: malcontent-control/application.c:270 msgid "Copyright © 2019, 2020 Endless Mobile, Inc." msgstr "" #. Translators: this should be "translated" to the #. names of people who have translated Malcontent into #. this language, one per line. #: malcontent-control/application.c:275 msgid "translator-credits" msgstr "" #. Translators: "Malcontent" is the brand name of this #. project, so should not be translated. #: malcontent-control/application.c:281 msgid "Malcontent Website" msgstr "" #: malcontent-control/application.c:299 msgid "The help contents could not be displayed" msgstr "" #: malcontent-control/application.c:336 msgid "Failed to load user data from the system" msgstr "" #: malcontent-control/application.c:338 msgid "Please make sure that the AccountsService is installed and enabled." msgstr "" #: malcontent-control/carousel.ui:48 msgid "Previous Page" msgstr "" #: malcontent-control/carousel.ui:74 msgid "Next Page" msgstr "" #: malcontent-control/main.ui:93 msgid "Permission Required" msgstr "" #: malcontent-control/main.ui:107 msgid "" "Permission is required to view and change user parental controls settings." msgstr "" #: malcontent-control/main.ui:148 msgid "No Child Users Configured" msgstr "" #: malcontent-control/main.ui:162 msgid "" "No child users are currently set up on the system. Create one before setting " "up their parental controls." msgstr "" #: malcontent-control/main.ui:174 msgid "Create _Child User" msgstr "" #: malcontent-control/main.ui:202 msgid "Loading…" msgstr "" #: malcontent-control/main.ui:265 msgid "_Help" msgstr "_Axuda" #: malcontent-control/main.ui:269 msgid "_About Parental Controls" msgstr "" #. Translators: the brief summary of the application as it appears in a software center. #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:12 #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:4 msgid "Set parental controls and monitor usage by users" msgstr "" #. Translators: These are the application description paragraphs in the AppData file. #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:16 msgid "" "Manage users’ parental controls restrictions, controlling how long they can " "use the computer for, what software they can install, and what installed " "software they can run." msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:39 msgid "The GNOME Project" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:50 #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:59 msgid "Minor improvements to parental controls application UI" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:51 msgid "Add a user manual" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:52 msgid "Translation updates" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:60 msgid "Translations to Ukrainian and Polish" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:67 msgid "Improve parental controls application UI and add icon" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:68 msgid "Support for indicating which accounts are parent accounts" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:75 msgid "Initial release of basic parental controls application" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:76 msgid "Support for setting app installation and run restrictions on users" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:83 msgid "Maintenance release of underlying parental controls library" msgstr "" #. Translators: Do NOT translate or transliterate this text (this is an icon file name)! #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:7 msgid "org.freedesktop.MalcontentControl" msgstr "" #. Translators: Search terms to find this application. Do NOT translate or localise the semicolons! The list MUST also end with a semicolon! #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:13 msgid "" "parental controls;screen time;app restrictions;web browser restrictions;oars;" "usage;usage limit;kid;child;" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.policy.in:9 msgid "Manage parental controls" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.policy.in:10 msgid "Authentication is required to read and change user parental controls" msgstr "" #: malcontent-control/user-selector.c:426 msgid "Your account" msgstr "A súa conta" #. Always allow root, to avoid a situation where this PAM module prevents #. * all users logging in with no way of recovery. #: pam/pam_malcontent.c:142 pam/pam_malcontent.c:188 #, c-format msgid "User ‘%s’ has no time limits enabled" msgstr "" #: pam/pam_malcontent.c:151 pam/pam_malcontent.c:172 #, c-format msgid "Error getting session limits for user ‘%s’: %s" msgstr "" #: pam/pam_malcontent.c:182 #, c-format msgid "User ‘%s’ has no time remaining" msgstr "" #: pam/pam_malcontent.c:200 #, c-format msgid "Error setting time limit on login session: %s" msgstr "" #~ msgid "No cartoon violence" #~ msgstr "Sen violencia con personaxes animados" #~ msgid "Cartoon characters in unsafe situations" #~ msgstr "Personaxes de banda deseñada en situacións non seguras" #~ msgid "Cartoon characters in aggressive conflict" #~ msgstr "Personaxes animados en conflitos agresivos" #~ msgid "Graphic violence involving cartoon characters" #~ msgstr "Violencia gráfica con personaxes animados " #~ msgid "No fantasy violence" #~ msgstr "Sen violencia fantástica" #~ msgid "Characters in unsafe situations easily distinguishable from reality" #~ msgstr "" #~ "Personaxes en situacións non seguras distinguíbeis facilmante da realidade" #~ msgid "" #~ "Characters in aggressive conflict easily distinguishable from reality" #~ msgstr "" #~ "Personaxes en conflitos agresivos distinguíbeis facilmente da realidade" #~ msgid "Graphic violence easily distinguishable from reality" #~ msgstr "Violencia gráfica distinguíbel facilmente da realidade" #~ msgid "No realistic violence" #~ msgstr "Sen violencia realista" #~ msgid "Mildly realistic characters in unsafe situations" #~ msgstr "Personaxes semi-realistas en situacións non seguras" #~ msgid "Depictions of realistic characters in aggressive conflict" #~ msgstr "Representacións de personaxes realistas en conflitos agresivos" #~ msgid "Graphic violence involving realistic characters" #~ msgstr "Violencia gráfica con personaes realistas" #~ msgid "No bloodshed" #~ msgstr "Sen masacres" #~ msgid "Unrealistic bloodshed" #~ msgstr "Masacre non realista" #~ msgid "Realistic bloodshed" #~ msgstr "Masacre realista" #~ msgid "Depictions of bloodshed and the mutilation of body parts" #~ msgstr "Representacións de masacres e mutilación de partes do corpo" #~ msgid "No sexual violence" #~ msgstr "Sen violencia sexual" #~ msgid "Rape or other violent sexual behavior" #~ msgstr "Violación ou outro comportamento sexual violento" #~ msgid "No references to alcohol" #~ msgstr "Sen referencias a bebidas alcohólicas" #~ msgid "References to alcoholic beverages" #~ msgstr "Referencias a bebeidas alcohólicas" #~ msgid "Use of alcoholic beverages" #~ msgstr "Use de bebidas alcohólicas" #~ msgid "No references to illicit drugs" #~ msgstr "Sen referencias a drogas ilegais" #~ msgid "References to illicit drugs" #~ msgstr "Referencias a drogas ilegais" #~ msgid "Use of illicit drugs" #~ msgstr "Uso de drogas ilegais" #~ msgid "References to tobacco products" #~ msgstr "Referencias ao tabaco" #~ msgid "Use of tobacco products" #~ msgstr "Uso de tabaco" #~ msgid "No nudity of any sort" #~ msgstr "Sen desnudos de ningún tipo" #~ msgid "Brief artistic nudity" #~ msgstr "Desnudez artística breve" #~ msgid "Prolonged nudity" #~ msgstr "Desnudez prolongada" #~ msgid "No references or depictions of sexual nature" #~ msgstr "Sen representacións ou referencias sexuais" #~ msgid "Provocative references or depictions" #~ msgstr "Representacións ou referencias provocativas" #~ msgid "Sexual references or depictions" #~ msgstr "Representacións ou referencias sexuais" #~ msgid "Graphic sexual behavior" #~ msgstr "Comportamento sexual gráfico" #~ msgid "No profanity of any kind" #~ msgstr "Sen blasfemia de ningún tipo" #~ msgid "Mild or infrequent use of profanity" #~ msgstr "Uso moderado ou pouco frecuente da blasfemia" #~ msgid "Moderate use of profanity" #~ msgstr "Uso moderado da blasfemia" #~ msgid "Strong or frequent use of profanity" #~ msgstr "Uso amplio ou frecuente da blasfemia" #~ msgid "No inappropriate humor" #~ msgstr "Sen humor non axeitado" #~ msgid "Slapstick humor" #~ msgstr "Humor " #~ msgid "Vulgar or bathroom humor" #~ msgstr "Humor vulgar ou estolóxico" #~ msgid "Mature or sexual humor" #~ msgstr "Humor adulto ou sexual" #~ msgid "No discriminatory language of any kind" #~ msgstr "Sen idioma discriminatorio de calqueira tipo" #~ msgid "Negativity towards a specific group of people" #~ msgstr "Negatividade cara un determinado grupo de persoas" #~ msgid "Discrimination designed to cause emotional harm" #~ msgstr "Discriminación para causar dano emocional" #~ msgid "Explicit discrimination based on gender, sexuality, race or religion" #~ msgstr "" #~ "Discriminación explícita baseada en xénero, sexualidade, raza ou relixión" #~ msgid "No advertising of any kind" #~ msgstr "Sen publicidade de ningún tipo" #~ msgid "Product placement" #~ msgstr "Venta de produtos" #~ msgid "Explicit references to specific brands or trademarked products" #~ msgstr "" #~ "Referencias explícitas a marcas concretas ou produtos de marcas " #~ "rexistradas" #~ msgid "Users are encouraged to purchase specific real-world items" #~ msgstr "" #~ "Incítase aos xogadores a comprar determian dos elementos do mundo real" #~ msgid "No gambling of any kind" #~ msgstr "Sen apostas de ningún tipo" #~ msgid "Gambling on random events using tokens or credits" #~ msgstr "Xogo en eventos aleatorios usando créditos ou vidas" #~ msgid "Gambling using “play” money" #~ msgstr "Xogo usando diñeiro virtual" #~ msgid "Gambling using real money" #~ msgstr "Xogo usando diñeiro real" #~ msgid "No ability to spend money" #~ msgstr "Sen posibilidade de gastar" #~ msgid "Users are encouraged to donate real money" #~ msgstr "Incítase aos xogadores a donar diñeiro real" #~ msgid "Ability to spend real money in-game" #~ msgstr "Posibilidade de gastar diñeiro real no xogo" #~ msgid "No way to chat with other users" #~ msgstr "Sen posibilidade de chatear con outros usuarios" #~ msgid "Moderated chat functionality between users" #~ msgstr "Funcionalidade de chat moderado entre usuarios" #~ msgid "Uncontrolled chat functionality between users" #~ msgstr "Funcionalidade de chat sen controlar entre usuarios" #~ msgid "No way to talk with other users" #~ msgstr "Sen posibilidade de falar con outros usuarios" #~ msgid "Uncontrolled audio or video chat functionality between users" #~ msgstr "Funcionalidade de son ou vídeo sen controlar entre usuarios" #~ msgid "No sharing of social network usernames or email addresses" #~ msgstr "" #~ "Non comparte nas redes socaiais de nomes de usuario ou enderezos de " #~ "correo-e" #~ msgid "Sharing social network usernames or email addresses" #~ msgstr "" #~ "Compartición en redes sociais de nomes de usuario ou enderezos de correo-e" #~ msgid "No sharing of user information with 3rd parties" #~ msgstr "Non comnparte a información do usuario con terceiros" #~ msgid "Checking for the latest application version" #~ msgstr "Buscando a última versión do aplicativo" #~ msgid "Sharing diagnostic data that does not let others identify the user" #~ msgstr "" #~ "Compartición de datos de diagnóstico que non lle permite a outros " #~ "identificar ao usuario" #~ msgid "Sharing information that lets others identify the user" #~ msgstr "Compartición de información identificable ao usuario" #~ msgid "No sharing of physical location to other users" #~ msgstr "Non comparte a localización física con outros usuarios" #~ msgid "Sharing physical location to other users" #~ msgstr "Compartición da localización física con outros usuarios" #~ msgid "No references to homosexuality" #~ msgstr "Sen referencias a homosexualidade" #~ msgid "Indirect references to homosexuality" #~ msgstr "Referencias indirectas á homosexualidade" #~ msgid "Kissing between people of the same gender" #~ msgstr "Bicos entre persoas do mesmo xénero" #~ msgid "Graphic sexual behavior between people of the same gender" #~ msgstr "Comportamento sexual gráfico entre persoas do mesmo sexo" #~ msgid "No references to prostitution" #~ msgstr "Sen referencias a prostitución" #~ msgid "Indirect references to prostitution" #~ msgstr "Referencias indirectas á prostitución" #~ msgid "Direct references to prostitution" #~ msgstr "Referencias directas á prostitución" #~ msgid "Graphic depictions of the act of prostitution" #~ msgstr "Representacións gráficas do acto da prostitución" #~ msgid "No references to adultery" #~ msgstr "Sen referencias ao adulterio" #~ msgid "Indirect references to adultery" #~ msgstr "Referencias indirectas ao adulterio" #~ msgid "Direct references to adultery" #~ msgstr "Referencias directas ao adulterio" #~ msgid "Graphic depictions of the act of adultery" #~ msgstr "Representacións gráficas ao acto do adulterio" #~ msgid "No sexualized characters" #~ msgstr "Sen personaxes sexualizados" #~ msgid "Scantily clad human characters" #~ msgstr "Personaxes humanos escasamente vestidos" #~ msgid "Overtly sexualized human characters" #~ msgstr "Caracteres humanos abertamente sexualizados" #~ msgid "No references to desecration" #~ msgstr "Sen referencias á profanación" #~ msgid "Depictions of modern-day human desecration" #~ msgstr "Representacións da profanación humana moderna" #~ msgid "Graphic depictions of modern-day desecration" #~ msgstr "Representacións gráficas da profanación moderna" #~ msgid "No visible dead human remains" #~ msgstr "Non hai restos humanos mortos visíbeis" #~ msgid "Visible dead human remains" #~ msgstr "Restos humanos mortos visíbeis" #~ msgid "Dead human remains that are exposed to the elements" #~ msgstr "Restos humanos mortos que están expostos aos elementos" #~ msgid "Graphic depictions of desecration of human bodies" #~ msgstr "Representacións gráficas de profanación de corpos humanos" #~ msgid "No references to slavery" #~ msgstr "Sen referencias á escravitude" #~ msgid "Depictions of modern-day slavery" #~ msgstr "Representacións de escravitude moderna" #~ msgid "Graphic depictions of modern-day slavery" #~ msgstr "Representacións gráficas de escravitude moderna" malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/po/he.po000066400000000000000000000430161505556674000231520ustar00rootroot00000000000000# Hebrew translations for malcontent package. # Copyright (C) 2020 THE malcontent'S COPYRIGHT HOLDER # This file is distributed under the same license as the malcontent package. # Automatically generated, 2020. # msgid "" msgstr "" "Project-Id-Version: malcontent\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-06-10 12:04+0100\n" "PO-Revision-Date: 2020-04-15 13:42+0100\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: he\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: accounts-service/com.endlessm.ParentalControls.policy.in:4 msgid "Change your own app filter" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:5 msgid "Authentication is required to change your app filter." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:14 msgid "Read your own app filter" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:15 msgid "Authentication is required to read your app filter." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:24 msgid "Change another user’s app filter" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:25 msgid "Authentication is required to change another user’s app filter." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:34 msgid "Read another user’s app filter" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:35 msgid "Authentication is required to read another user’s app filter." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:44 msgid "Change your own session limits" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:45 msgid "Authentication is required to change your session limits." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:54 msgid "Read your own session limits" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:55 msgid "Authentication is required to read your session limits." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:64 msgid "Change another user’s session limits" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:65 msgid "Authentication is required to change another user’s session limits." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:74 msgid "Read another user’s session limits" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:75 msgid "Authentication is required to read another user’s session limits." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:84 msgid "Change your own account info" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:85 msgid "Authentication is required to change your account info." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:94 msgid "Read your own account info" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:95 msgid "Authentication is required to read your account info." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:104 msgid "Change another user’s account info" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:105 msgid "Authentication is required to change another user’s account info." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:114 msgid "Read another user’s account info" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:115 msgid "Authentication is required to read another user’s account info." msgstr "" #: libmalcontent/app-filter.c:694 #, c-format msgid "App filter for user %u was in an unrecognized format" msgstr "" #: libmalcontent/app-filter.c:725 #, c-format msgid "OARS filter for user %u has an unrecognized kind ‘%s’" msgstr "" #: libmalcontent/manager.c:283 libmalcontent/manager.c:412 #, c-format msgid "Not allowed to query app filter data for user %u" msgstr "" #: libmalcontent/manager.c:288 #, c-format msgid "User %u does not exist" msgstr "" #: libmalcontent/manager.c:394 msgid "App filtering is globally disabled" msgstr "" #: libmalcontent/manager.c:777 msgid "Session limits are globally disabled" msgstr "" #: libmalcontent/manager.c:795 #, c-format msgid "Not allowed to query session limits data for user %u" msgstr "" #: libmalcontent/session-limits.c:306 #, c-format msgid "Session limit for user %u was in an unrecognized format" msgstr "" #: libmalcontent/session-limits.c:328 #, c-format msgid "Session limit for user %u has an unrecognized type ‘%u’" msgstr "" #: libmalcontent/session-limits.c:346 #, c-format msgid "Session limit for user %u has invalid daily schedule %u–%u" msgstr "" #. TRANSLATORS: This is the formatting of English and localized name #. of the rating e.g. "Adults Only (solo adultos)" #: libmalcontent-ui/gs-content-rating.c:75 #, c-format msgid "%s (%s)" msgstr "" #: libmalcontent-ui/gs-content-rating.c:209 msgid "General" msgstr "" #: libmalcontent-ui/gs-content-rating.c:218 msgid "ALL" msgstr "" #: libmalcontent-ui/gs-content-rating.c:222 #: libmalcontent-ui/gs-content-rating.c:485 msgid "Adults Only" msgstr "" #: libmalcontent-ui/gs-content-rating.c:224 #: libmalcontent-ui/gs-content-rating.c:484 msgid "Mature" msgstr "" #: libmalcontent-ui/gs-content-rating.c:226 #: libmalcontent-ui/gs-content-rating.c:483 msgid "Teen" msgstr "" #: libmalcontent-ui/gs-content-rating.c:228 #: libmalcontent-ui/gs-content-rating.c:482 msgid "Everyone 10+" msgstr "" #: libmalcontent-ui/gs-content-rating.c:230 #: libmalcontent-ui/gs-content-rating.c:481 msgid "Everyone" msgstr "" #: libmalcontent-ui/gs-content-rating.c:232 #: libmalcontent-ui/gs-content-rating.c:480 msgid "Early Childhood" msgstr "" #. Translators: the placeholder is a user’s full name #: libmalcontent-ui/restrict-applications-dialog.c:222 #, c-format msgid "Restrict %s from using the following installed applications." msgstr "" #: libmalcontent-ui/restrict-applications-dialog.ui:6 #: libmalcontent-ui/restrict-applications-dialog.ui:12 msgid "Restrict Applications" msgstr "" #: libmalcontent-ui/restrict-applications-selector.ui:24 msgid "No applications found to restrict." msgstr "" #. Translators: this is the full name for an unknown user account. #: libmalcontent-ui/user-controls.c:242 libmalcontent-ui/user-controls.c:253 msgid "unknown" msgstr "" #: libmalcontent-ui/user-controls.c:338 libmalcontent-ui/user-controls.c:425 #: libmalcontent-ui/user-controls.c:711 msgid "All Ages" msgstr "" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:514 #, c-format msgid "" "Prevents %s from running web browsers. Limited web content may still be " "available in other applications." msgstr "" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:519 #, c-format msgid "Prevents specified applications from being used by %s." msgstr "" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:524 #, c-format msgid "Prevents %s from installing applications." msgstr "" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:529 #, c-format msgid "Applications installed by %s will not appear for other users." msgstr "" #: libmalcontent-ui/user-controls.ui:17 msgid "Application Usage Restrictions" msgstr "" #: libmalcontent-ui/user-controls.ui:68 msgid "Restrict _Web Browsers" msgstr "" #: libmalcontent-ui/user-controls.ui:152 msgid "_Restrict Applications" msgstr "" #: libmalcontent-ui/user-controls.ui:231 msgid "Software Installation Restrictions" msgstr "" #: libmalcontent-ui/user-controls.ui:281 msgid "Restrict Application _Installation" msgstr "" #: libmalcontent-ui/user-controls.ui:366 msgid "Restrict Application Installation for _Others" msgstr "" #: libmalcontent-ui/user-controls.ui:451 msgid "Application _Suitability" msgstr "" #: libmalcontent-ui/user-controls.ui:473 msgid "" "Restricts browsing or installation of applications to applications suitable " "for certain ages or above." msgstr "" #. Translators: This is the title of the main window #. Translators: the name of the application as it appears in a software center #: malcontent-control/application.c:105 malcontent-control/main.ui:12 #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:9 #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:3 msgid "Parental Controls" msgstr "" #: malcontent-control/application.c:270 msgid "Copyright © 2019, 2020 Endless Mobile, Inc." msgstr "" #. Translators: this should be "translated" to the #. names of people who have translated Malcontent into #. this language, one per line. #: malcontent-control/application.c:275 msgid "translator-credits" msgstr "" #. Translators: "Malcontent" is the brand name of this #. project, so should not be translated. #: malcontent-control/application.c:281 msgid "Malcontent Website" msgstr "" #: malcontent-control/application.c:299 msgid "The help contents could not be displayed" msgstr "" #: malcontent-control/application.c:336 msgid "Failed to load user data from the system" msgstr "" #: malcontent-control/application.c:338 msgid "Please make sure that the AccountsService is installed and enabled." msgstr "" #: malcontent-control/carousel.ui:48 msgid "Previous Page" msgstr "" #: malcontent-control/carousel.ui:74 msgid "Next Page" msgstr "" #: malcontent-control/main.ui:93 msgid "Permission Required" msgstr "" #: malcontent-control/main.ui:107 msgid "" "Permission is required to view and change user parental controls settings." msgstr "" #: malcontent-control/main.ui:148 msgid "No Child Users Configured" msgstr "" #: malcontent-control/main.ui:162 msgid "" "No child users are currently set up on the system. Create one before setting " "up their parental controls." msgstr "" #: malcontent-control/main.ui:174 msgid "Create _Child User" msgstr "" #: malcontent-control/main.ui:202 msgid "Loading…" msgstr "" #: malcontent-control/main.ui:265 msgid "_Help" msgstr "_עזרה" #: malcontent-control/main.ui:269 msgid "_About Parental Controls" msgstr "" #. Translators: the brief summary of the application as it appears in a software center. #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:12 #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:4 msgid "Set parental controls and monitor usage by users" msgstr "" #. Translators: These are the application description paragraphs in the AppData file. #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:16 msgid "" "Manage users’ parental controls restrictions, controlling how long they can " "use the computer for, what software they can install, and what installed " "software they can run." msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:39 msgid "The GNOME Project" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:50 #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:59 msgid "Minor improvements to parental controls application UI" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:51 msgid "Add a user manual" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:52 msgid "Translation updates" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:60 msgid "Translations to Ukrainian and Polish" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:67 msgid "Improve parental controls application UI and add icon" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:68 msgid "Support for indicating which accounts are parent accounts" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:75 msgid "Initial release of basic parental controls application" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:76 msgid "Support for setting app installation and run restrictions on users" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:83 msgid "Maintenance release of underlying parental controls library" msgstr "" #. Translators: Do NOT translate or transliterate this text (this is an icon file name)! #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:7 msgid "org.freedesktop.MalcontentControl" msgstr "" #. Translators: Search terms to find this application. Do NOT translate or localise the semicolons! The list MUST also end with a semicolon! #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:13 msgid "" "parental controls;screen time;app restrictions;web browser restrictions;oars;" "usage;usage limit;kid;child;" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.policy.in:9 msgid "Manage parental controls" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.policy.in:10 msgid "Authentication is required to read and change user parental controls" msgstr "" #: malcontent-control/user-selector.c:426 msgid "Your account" msgstr "" #. Always allow root, to avoid a situation where this PAM module prevents #. * all users logging in with no way of recovery. #: pam/pam_malcontent.c:142 pam/pam_malcontent.c:188 #, c-format msgid "User ‘%s’ has no time limits enabled" msgstr "" #: pam/pam_malcontent.c:151 pam/pam_malcontent.c:172 #, c-format msgid "Error getting session limits for user ‘%s’: %s" msgstr "" #: pam/pam_malcontent.c:182 #, c-format msgid "User ‘%s’ has no time remaining" msgstr "" #: pam/pam_malcontent.c:200 #, c-format msgid "Error setting time limit on login session: %s" msgstr "" #~ msgid "Cartoon characters in unsafe situations" #~ msgstr "Cartoon characters in unsafe situations" #~ msgid "Cartoon characters in aggressive conflict" #~ msgstr "Cartoon characters in aggressive conflict" #~ msgid "Graphic violence involving cartoon characters" #~ msgstr "Graphic violence involving cartoon characters" #~ msgid "Characters in unsafe situations easily distinguishable from reality" #~ msgstr "Characters in unsafe situations easily distinguishable from reality" #~ msgid "" #~ "Characters in aggressive conflict easily distinguishable from reality" #~ msgstr "" #~ "Characters in aggressive conflict easily distinguishable from reality" #~ msgid "Graphic violence easily distinguishable from reality" #~ msgstr "Graphic violence easily distinguishable from reality" #~ msgid "Mildly realistic characters in unsafe situations" #~ msgstr "Mildly realistic characters in unsafe situations" #~ msgid "Depictions of realistic characters in aggressive conflict" #~ msgstr "Depictions of realistic characters in aggressive conflict" #~ msgid "Graphic violence involving realistic characters" #~ msgstr "Graphic violence involving realistic characters" #~ msgid "Unrealistic bloodshed" #~ msgstr "Unrealistic bloodshed" #~ msgid "Realistic bloodshed" #~ msgstr "Realistic bloodshed" #~ msgid "Depictions of bloodshed and the mutilation of body parts" #~ msgstr "Depictions of bloodshed and the mutilation of body parts" #~ msgid "Rape or other violent sexual behavior" #~ msgstr "Rape or other violent sexual behavior" #~ msgid "References to alcoholic beverages" #~ msgstr "References to alcoholic beverages" #~ msgid "Use of alcoholic beverages" #~ msgstr "Use of alcoholic beverages" #~ msgid "References to illicit drugs" #~ msgstr "References to illicit drugs" #~ msgid "Use of illicit drugs" #~ msgstr "Use of illicit drugs" #~ msgid "References to tobacco products" #~ msgstr "References to tobacco products" #~ msgid "Use of tobacco products" #~ msgstr "Use of tobacco products" #~ msgid "Brief artistic nudity" #~ msgstr "Brief artistic nudity" #~ msgid "Prolonged nudity" #~ msgstr "Prolonged nudity" #~ msgid "Provocative references or depictions" #~ msgstr "Provocative references or depictions" #~ msgid "Sexual references or depictions" #~ msgstr "Sexual references or depictions" #~ msgid "Graphic sexual behavior" #~ msgstr "Graphic sexual behavior" #~ msgid "Mild or infrequent use of profanity" #~ msgstr "Mild or infrequent use of profanity" #~ msgid "Moderate use of profanity" #~ msgstr "Moderate use of profanity" #~ msgid "Strong or frequent use of profanity" #~ msgstr "Strong or frequent use of profanity" #~ msgid "Slapstick humor" #~ msgstr "Slapstick humor" #~ msgid "Vulgar or bathroom humor" #~ msgstr "Vulgar or bathroom humor" #~ msgid "Mature or sexual humor" #~ msgstr "Mature or sexual humor" #~ msgid "Negativity towards a specific group of people" #~ msgstr "Negativity towards a specific group of people" #~ msgid "Discrimination designed to cause emotional harm" #~ msgstr "Discrimination designed to cause emotional harm" #~ msgid "Explicit discrimination based on gender, sexuality, race or religion" #~ msgstr "" #~ "Explicit discrimination based on gender, sexuality, race or religion" #~ msgid "Product placement" #~ msgstr "Product placement" #~ msgid "Explicit references to specific brands or trademarked products" #~ msgstr "Explicit references to specific brands or trademarked products" #~ msgid "Gambling on random events using tokens or credits" #~ msgstr "Gambling on random events using tokens or credits" #~ msgid "Gambling using real money" #~ msgstr "Gambling using real money" #~ msgid "Ability to spend real money in-game" #~ msgstr "Ability to spend real money in-game" #~ msgid "Sharing social network usernames or email addresses" #~ msgstr "Sharing social network usernames or email addresses" #~ msgid "Sharing physical location to other users" #~ msgstr "Sharing physical location to other users" malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/po/hi.po000066400000000000000000000560751505556674000231670ustar00rootroot00000000000000# Hindi translations for malcontent package. # Copyright (C) 2022 THE malcontent'S COPYRIGHT HOLDER # This file is distributed under the same license as the malcontent package. # Automatically generated, 2020. # Will Thompson , 202>, 202>-2022. # Some of credits are lost, as the translations were pulled from Transifex to upstream, but the project does not exist on Transifex now. # Hemish , 2022. # msgid "" msgstr "" "Project-Id-Version: malcontent\n" "Report-Msgid-Bugs-To: https://gitlab.freedesktop.org/pwithnall/malcontent/" "issues\n" "POT-Creation-Date: 2022-07-25 03:26+0000\n" "PO-Revision-Date: 2022-11-29 13:03+0530\n" "Last-Translator: Hemish \n" "Language-Team: Hindi \n" "Language: hi\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" "X-Generator: Gtranslator 42.0\n" #: accounts-service/com.endlessm.ParentalControls.policy.in:4 msgid "Change your own app filter" msgstr "स्वयं के ऐप फ़िल्टर बदलें" #: accounts-service/com.endlessm.ParentalControls.policy.in:5 msgid "Authentication is required to change your app filter." msgstr "स्वयं के ऐप फिल्टर को बदलने के लिए सत्यापन की आवश्यकता है।" #: accounts-service/com.endlessm.ParentalControls.policy.in:14 msgid "Read your own app filter" msgstr "स्वयं के ऐप फिल्टर पढ़ें" #: accounts-service/com.endlessm.ParentalControls.policy.in:15 msgid "Authentication is required to read your app filter." msgstr "स्वयं के एप फ़िल्टर को पढ़ने के लिए प्रमाणीकरण आवश्यक है।" #: accounts-service/com.endlessm.ParentalControls.policy.in:24 msgid "Change another user’s app filter" msgstr "किसी अन्य उपयोगकर्ता के ऐप फ़िल्टर बदलें" #: accounts-service/com.endlessm.ParentalControls.policy.in:25 msgid "Authentication is required to change another user’s app filter." msgstr "किसी अन्य उपयोगकर्ता के ऐप फ़िल्टर को बदलने के लिए प्रमाणीकरण की आवश्यकता है।" #: accounts-service/com.endlessm.ParentalControls.policy.in:34 msgid "Read another user’s app filter" msgstr "किसी अन्य उपयोगकर्ता के ऐप फ़िल्टर पढ़ें" #: accounts-service/com.endlessm.ParentalControls.policy.in:35 msgid "Authentication is required to read another user’s app filter." msgstr "किसी अन्य उपयोगकर्ता के ऐप फ़िल्टर को पढ़ने के लिए सत्यापन आवश्यक है।" #: accounts-service/com.endlessm.ParentalControls.policy.in:44 msgid "Change your own session limits" msgstr "स्वयं की सत्र सीमा को बदलें" #: accounts-service/com.endlessm.ParentalControls.policy.in:45 msgid "Authentication is required to change your session limits." msgstr "स्वयं की सत्र सीमा को बदलने के लिए सत्यापन की आवश्यकता है।" #: accounts-service/com.endlessm.ParentalControls.policy.in:54 msgid "Read your own session limits" msgstr "स्वयं की सत्र सीमा को पढ़ें" #: accounts-service/com.endlessm.ParentalControls.policy.in:55 msgid "Authentication is required to read your session limits." msgstr "स्वयं की सत्र सीमा को पढ़ने के लिए सत्यापन की आवश्यकता है।" #: accounts-service/com.endlessm.ParentalControls.policy.in:64 msgid "Change another user’s session limits" msgstr "किसी अन्य उपयोगकर्ता की सत्र सीमा बदलें" #: accounts-service/com.endlessm.ParentalControls.policy.in:65 msgid "Authentication is required to change another user’s session limits." msgstr "किसी अन्य उपयोगकर्ता की सत्र सीमाओं को बदलने के लिए प्रमाणीकरण आवश्यक है" #: accounts-service/com.endlessm.ParentalControls.policy.in:74 msgid "Read another user’s session limits" msgstr "किसी अन्य उपयोगकर्ता की सत्र सीमा पढ़ें" #: accounts-service/com.endlessm.ParentalControls.policy.in:75 msgid "Authentication is required to read another user’s session limits." msgstr "किसी अन्य उपयोगकर्ता की सेशन की सीमाओं को पढ़ने के लिए सत्यापन आवश्यक है।" #: accounts-service/com.endlessm.ParentalControls.policy.in:84 msgid "Change your own account info" msgstr "स्वयं के खाते की जानकारी बदलें" #: accounts-service/com.endlessm.ParentalControls.policy.in:85 msgid "Authentication is required to change your account info." msgstr "स्वयं के खाते की जानकारी बदलने के लिए प्रमाणीकरण आवश्यक है।" #: accounts-service/com.endlessm.ParentalControls.policy.in:94 msgid "Read your own account info" msgstr "स्वयं के खाते की जानकारी पढ़ें" #: accounts-service/com.endlessm.ParentalControls.policy.in:95 msgid "Authentication is required to read your account info." msgstr "स्वयं के खाते की जानकारी पढ़ने के लिए सत्यापन आवश्यक है।" #: accounts-service/com.endlessm.ParentalControls.policy.in:104 msgid "Change another user’s account info" msgstr "किसी अन्य उपयोगकर्ता की खाता जानकारी बदलें" #: accounts-service/com.endlessm.ParentalControls.policy.in:105 msgid "Authentication is required to change another user’s account info." msgstr "किसी अन्य उपयोगकर्ता के खाते की जानकारी को बदलने के लिए सत्यापन आवश्यक है।" #: accounts-service/com.endlessm.ParentalControls.policy.in:114 msgid "Read another user’s account info" msgstr "अन्य उपयोगकर्ता के खाते की जानकारी पढ़ें" #: accounts-service/com.endlessm.ParentalControls.policy.in:115 msgid "Authentication is required to read another user’s account info." msgstr "किसी अन्य उपयोगकर्ता के खाते की जानकारी को पढ़ने के लिए प्रमाणीकरण आवश्यक है।" #: libmalcontent/app-filter.c:694 #, c-format msgid "App filter for user %u was in an unrecognized format" msgstr "उपयोगकर्ता %u के लिए एप फ़िल्टर एक अपरिचित प्रारूप में था।" #: libmalcontent/app-filter.c:725 #, c-format msgid "OARS filter for user %u has an unrecognized kind ‘%s’" msgstr "उपयोगकर्ता %u के लिए OARS फ़िल्टर के पास एक अपरिचित प्रकार ‘%s’ है।" #: libmalcontent/manager.c:283 libmalcontent/manager.c:420 #: libmalcontent/manager.c:803 #, c-format msgid "Not allowed to query parental controls data for user %u" msgstr "उपयोगकर्ता %u के लिए ऐप फ़िल्टर डेटा को क्वेरी करने की अनुमति नहीं है" #: libmalcontent/manager.c:288 #, c-format msgid "User %u does not exist" msgstr "उपयोगकर्ता %u मौजूद नहीं है।" #: libmalcontent/manager.c:296 msgid "System accounts service not available" msgstr "सिस्टम खाता सेवा (AccountsService) उपलब्ध नहीं है।" #: libmalcontent/manager.c:402 msgid "App filtering is globally disabled" msgstr "ऐप फ़िल्टरिंग सार्वभौमिक स्तर पर निष्क्रिय है।" #: libmalcontent/manager.c:785 msgid "Session limits are globally disabled" msgstr "सत्र सीमाएँ सार्वभौमिक स्तर पर निष्क्रिय हैं।" #: libmalcontent/session-limits.c:306 #, c-format msgid "Session limit for user %u was in an unrecognized format" msgstr "उपयोगकर्ता %u के लिए सत्र सीमा एक अपरिचित प्रारूप में थी।" #: libmalcontent/session-limits.c:328 #, c-format msgid "Session limit for user %u has an unrecognized type ‘%u’" msgstr "उपयोगकर्ता %u के लिए सत्र सीमा एक अपरिचित प्रकार ‘%u’ की है।" #: libmalcontent/session-limits.c:346 #, c-format msgid "Session limit for user %u has invalid daily schedule %u–%u" msgstr "उपयोगकर्ता %u के सत्र सीमा में अमान्य दैनिक शेड्यूल %u-%u है" #. Translators: the placeholder is a user’s full name #: libmalcontent-ui/restrict-applications-dialog.c:223 #, c-format msgid "Restrict %s from using the following installed applications." msgstr "निम्न इंस्टाल हुई एप्लिकेशन के उपयोग से %s को प्रतिबंधित करें।" #: libmalcontent-ui/restrict-applications-dialog.ui:6 msgid "Restrict Applications" msgstr "एप्लीकेशन को प्रतिबंधित करें" #: libmalcontent-ui/restrict-applications-selector.ui:13 msgid "No applications found to restrict." msgstr "प्रतिबंधित करने के लिए कोई भी एप्लिकेशन नहीं मिली।" #. Translators: this is the full name for an unknown user account. #: libmalcontent-ui/user-controls.c:198 libmalcontent-ui/user-controls.c:209 msgid "unknown" msgstr "अज्ञात" #: libmalcontent-ui/user-controls.c:303 libmalcontent-ui/user-controls.c:388 #: libmalcontent-ui/user-controls.c:641 msgid "All Ages" msgstr "सभी आयु" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:470 #, c-format msgid "" "Prevents %s from running web browsers. Limited web content may still be " "available in other applications." msgstr "" "%s को वेब ब्राउज़र चलाने से रोकता है। सीमित वेब सामग्री अभी भी अन्य एप्लिकेशन में उपलब्ध " "हो सकती है।" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:475 #, c-format msgid "Prevents specified applications from being used by %s." msgstr "%s को विशिष्ट एप्लीकेशन का उपयोग करने से रोकता है।" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:480 #, c-format msgid "Prevents %s from installing applications." msgstr " %s को एप्लिकेशन इंस्टॉल करने से रोकता है।" #: libmalcontent-ui/user-controls.ui:25 msgid "Application Usage Restrictions" msgstr "एप्लीकेशन उपयोग पर प्रतिबंध" #: libmalcontent-ui/user-controls.ui:28 msgid "Restrict _Web Browsers" msgstr "वेब ब्राउज़रों को प्रतिबंधित करें (_W)" #: libmalcontent-ui/user-controls.ui:50 msgid "_Restrict Applications" msgstr "एप्लीकेशन प्रतिबंधित करें (_R)" #: libmalcontent-ui/user-controls.ui:72 msgid "Software Installation Restrictions" msgstr "साफ्टवेयर इंस्टालेशन पर प्रतिबंध" #: libmalcontent-ui/user-controls.ui:76 msgid "Restrict Application _Installation" msgstr "एप्लीकेशन के इंस्टालेशन को रोकें (_I)" #: libmalcontent-ui/user-controls.ui:97 msgid "Application _Suitability" msgstr "एप्लीकेशन की उपयुक्तता (_S)" #: libmalcontent-ui/user-controls.ui:100 msgid "" "Restricts browsing or installation of applications to applications suitable " "for certain ages or above." msgstr "" "विशिष्ट उम्र या उससे ऊपर के लोगों के लिए उपयुक्त एप्लिकेशन इंस्टाल या ब्राउज़िंग को " "प्रतिबंधित करता है।" #. Translators: This documents the --user command line option to malcontent-control: #: malcontent-control/application.c:102 msgid "User to select in the UI" msgstr "UI में जो उपयोगकर्ता चुना जाना चाहिए" # This is a place holder for command line field, thus left as such. #. Translators: This is a placeholder for a command line argument value: #: malcontent-control/application.c:104 msgid "USERNAME" msgstr "USERNAME" #: malcontent-control/application.c:116 msgid "— view and edit parental controls" msgstr "— पैरेंटल कंट्रोल को देखें व उनका प्रबंधन करें" #. Translators: This is the title of the main window #. Translators: the name of the application as it appears in a software center #: malcontent-control/application.c:123 malcontent-control/main.ui:17 #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:9 #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:3 msgid "Parental Controls" msgstr "पैरेंटल कंट्रोल " #: malcontent-control/application.c:309 msgid "Copyright © 2019, 2020 Endless Mobile, Inc." msgstr "कॉपीराइट © 2019, 2020 Endless Mobile, Inc." #. Translators: this should be "translated" to the #. names of people who have translated Malcontent into #. this language, one per line. #: malcontent-control/application.c:314 msgid "translator-credits" msgstr "" "Hemish \n" "https://www.transifex.com/endless-os/teams/9016/hi/" # 'Malcontent' is a brand name, so to clarify for Hindi audience, it is put in inverted commas #. Translators: "Malcontent" is the brand name of this #. project, so should not be translated. #: malcontent-control/application.c:320 msgid "Malcontent Website" msgstr "'Malcontent' की वेबसाइट" #: malcontent-control/application.c:341 msgid "The help contents could not be displayed" msgstr "सहायता सामग्री प्रदर्शित नहीं की जा सकी" #: malcontent-control/application.c:388 msgid "Failed to load user data from the system" msgstr "सिस्टम से उपयोगकर्ता डेटा को लोड करने में असक्षम" #: malcontent-control/application.c:390 msgid "Please make sure that the AccountsService is installed and enabled." msgstr "कृपया सुनिश्चित करें कि AccountsService इनस्टॉल है और सक्रिय है।" # A google-translated link of commonsensemedia.org has been provided, as the language is not available at the site, and any good localised guide does not exist. #. Translators: Replace the link to commonsensemedia.org with some #. * localised guidance for parents/carers on how to set restrictions on #. * their child/caree in a responsible way which is in keeping with the #. * best practice and culture of the region. If no suitable localised #. * guidance exists, and if the default commonsensemedia.org link is not #. * suitable, please file an issue against malcontent so we can discuss #. * further! #. * https://gitlab.freedesktop.org/pwithnall/malcontent/-/issues/new #. #: malcontent-control/application.c:421 #, c-format msgid "" "It’s recommended that restrictions are set as part of an ongoing " "conversation with %s. Read guidance on what to consider." msgstr "" "यह सलाह दी जाती है कि प्रतिबंध %s से बातचीत के हिस्से हैं। कृपया गाइड को पढें व जानें कि क्या-क्या चीज़ों पर ध्यान " "रखना चाहिए।" #: malcontent-control/carousel.ui:38 msgid "Previous Page" msgstr "पिछला पृष्ठ" #: malcontent-control/carousel.ui:57 msgid "Next Page" msgstr "अगला पृष्ठ" #: malcontent-control/main.ui:87 msgid "Permission Required" msgstr "अनुमति आवश्यक है" #: malcontent-control/main.ui:88 msgid "" "Permission is required to view and change user parental controls settings." msgstr "" "उपयोगकर्ता पैरेंटल नियंत्रण की सेटिंग्स को देखने और बदलने के लिए अनुमति की आवश्यकता है।" #: malcontent-control/main.ui:110 msgid "No Standard User Accounts" msgstr "कोई साधारण उपयोगकर्ता खाता नहीं पाया गया" #: malcontent-control/main.ui:111 msgid "" "Parental controls can only be applied to standard user\n" "accounts. These can be created in the user settings." msgstr "" "उपयोगकर्ता प्रतिबंध का नियंत्रण केवल सामान्य उपयोगकर्ता खातों पर लागू किया\n" "जा सकता है। इन्हें उपयोगकर्ता सेटिंग्स में प्रबंधित किया जा सकता है।" #: malcontent-control/main.ui:115 msgid "_User Settings" msgstr "उपयोगकर्ता सेटिंग्स" #: malcontent-control/main.ui:138 msgid "Loading…" msgstr "लोड हो रहा है…" #: malcontent-control/main.ui:171 msgid "_Help" msgstr "सहायता (_H)" #: malcontent-control/main.ui:175 msgid "_About Parental Controls" msgstr "'पैरेंटल कंट्रोल' का परिचय (_A)" #. Translators: the brief summary of the application as it appears in a software center. #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:12 #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:4 msgid "Set parental controls and monitor usage by users" msgstr "पैरेंटल नियंत्रण सेट करें और उपयोगकर्ता द्वारा प्रयोग को मॉनीटर करें" #. Translators: These are the application description paragraphs in the AppData file. #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:16 msgid "" "Manage users’ parental controls restrictions, controlling how long they can " "use the computer for, what software they can install, and what installed " "software they can run." msgstr "" "उपयोगकर्ताओं के पैरेंटल कंट्रोल प्रतिबंधों को प्रबंधित करें, यह नियंत्रित करते हुए कि वे कितने " "समय तक कंप्यूटर का उपयोग कर सकते हैं, वे कौन से सॉफ़्टवेयर इंस्टाल कर सकते हैं और कौन से " "इंस्टाल हो चुके सॉफ़्टवेयर चला सकते हैं।" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:25 msgid "Main window" msgstr "मुख्य विंडो" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:39 msgid "The GNOME Project" msgstr "दी गनोम प्रॉजेक्ट" #. Translators: Search terms to find this application. Do NOT translate or localise the semicolons! The list MUST also end with a semicolon! #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:14 msgid "" "parental controls;screen time;app restrictions;web browser restrictions;oars;" "usage;usage limit;kid;child;" msgstr "" "अभिभावक नियंत्रण; स्क्रीन समय; ऐप प्रतिबंध; वेब ब्राउज़र पर प्रतिबंध; ऑर्स; उपयोग; उपयोग " "की सीमा; बच्चा;parental controls;screen time;app restrictions;web browser " "restrictions;oars;usage;usage limit;kid;child;" #: malcontent-control/org.freedesktop.MalcontentControl.policy.in:9 msgid "Manage parental controls" msgstr "पैरेंटल कंट्रोल का प्रबंधन करें" #: malcontent-control/org.freedesktop.MalcontentControl.policy.in:10 msgid "Authentication is required to read and change user parental controls" msgstr "उपयोगकर्ता प्रतिबंध व नियंत्रणों को पढ़ने और बदलने के लिए सत्यापन आवश्यक है।" #: malcontent-control/user-selector.c:426 msgid "Your account" msgstr "आपका खाता" #. Always allow root, to avoid a situation where this PAM module prevents #. * all users logging in with no way of recovery. #: pam/pam_malcontent.c:142 pam/pam_malcontent.c:188 #, c-format msgid "User ‘%s’ has no time limits enabled" msgstr "उपयोगकर्ता '%s' के लिए कोई समय सीमा सक्रिय नहीं है।" #: pam/pam_malcontent.c:151 pam/pam_malcontent.c:172 #, c-format msgid "Error getting session limits for user ‘%s’: %s" msgstr "उपयोगकर्ता ‘%s’ के लिए सेशन सत्र की सीमाएँ प्राप्त करने में समस्या हुई: %s" #: pam/pam_malcontent.c:182 #, c-format msgid "User ‘%s’ has no time remaining" msgstr "उपयोगकर्ता ‘%s’ के पास समय नहीं बचा है।" #: pam/pam_malcontent.c:200 #, c-format msgid "Error setting time limit on login session: %s" msgstr "%s के लॉगिन सत्र पर समय सीमा सेट करने में त्रुटि हुई" malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/po/hr.po000066400000000000000000000556611505556674000232000ustar00rootroot00000000000000# Croatian translations for malcontent package. # Copyright (C) 2020 THE malcontent'S COPYRIGHT HOLDER # This file is distributed under the same license as the malcontent package. # Automatically generated, 2020. # msgid "" msgstr "" "Project-Id-Version: malcontent\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-06-10 12:04+0100\n" "PO-Revision-Date: 2020-04-15 13:42+0100\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: hr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" #: accounts-service/com.endlessm.ParentalControls.policy.in:4 msgid "Change your own app filter" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:5 msgid "Authentication is required to change your app filter." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:14 msgid "Read your own app filter" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:15 msgid "Authentication is required to read your app filter." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:24 msgid "Change another user’s app filter" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:25 msgid "Authentication is required to change another user’s app filter." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:34 msgid "Read another user’s app filter" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:35 msgid "Authentication is required to read another user’s app filter." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:44 msgid "Change your own session limits" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:45 msgid "Authentication is required to change your session limits." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:54 msgid "Read your own session limits" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:55 msgid "Authentication is required to read your session limits." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:64 msgid "Change another user’s session limits" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:65 msgid "Authentication is required to change another user’s session limits." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:74 msgid "Read another user’s session limits" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:75 msgid "Authentication is required to read another user’s session limits." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:84 msgid "Change your own account info" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:85 msgid "Authentication is required to change your account info." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:94 msgid "Read your own account info" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:95 msgid "Authentication is required to read your account info." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:104 msgid "Change another user’s account info" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:105 msgid "Authentication is required to change another user’s account info." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:114 msgid "Read another user’s account info" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:115 msgid "Authentication is required to read another user’s account info." msgstr "" #: libmalcontent/app-filter.c:694 #, c-format msgid "App filter for user %u was in an unrecognized format" msgstr "" #: libmalcontent/app-filter.c:725 #, c-format msgid "OARS filter for user %u has an unrecognized kind ‘%s’" msgstr "" #: libmalcontent/manager.c:283 libmalcontent/manager.c:412 #, c-format msgid "Not allowed to query app filter data for user %u" msgstr "" #: libmalcontent/manager.c:288 #, c-format msgid "User %u does not exist" msgstr "" #: libmalcontent/manager.c:394 msgid "App filtering is globally disabled" msgstr "" #: libmalcontent/manager.c:777 msgid "Session limits are globally disabled" msgstr "" #: libmalcontent/manager.c:795 #, c-format msgid "Not allowed to query session limits data for user %u" msgstr "" #: libmalcontent/session-limits.c:306 #, c-format msgid "Session limit for user %u was in an unrecognized format" msgstr "" #: libmalcontent/session-limits.c:328 #, c-format msgid "Session limit for user %u has an unrecognized type ‘%u’" msgstr "" #: libmalcontent/session-limits.c:346 #, c-format msgid "Session limit for user %u has invalid daily schedule %u–%u" msgstr "" #. TRANSLATORS: This is the formatting of English and localized name #. of the rating e.g. "Adults Only (solo adultos)" #: libmalcontent-ui/gs-content-rating.c:75 #, c-format msgid "%s (%s)" msgstr "" #: libmalcontent-ui/gs-content-rating.c:209 msgid "General" msgstr "" #: libmalcontent-ui/gs-content-rating.c:218 msgid "ALL" msgstr "" #: libmalcontent-ui/gs-content-rating.c:222 #: libmalcontent-ui/gs-content-rating.c:485 msgid "Adults Only" msgstr "" #: libmalcontent-ui/gs-content-rating.c:224 #: libmalcontent-ui/gs-content-rating.c:484 msgid "Mature" msgstr "" #: libmalcontent-ui/gs-content-rating.c:226 #: libmalcontent-ui/gs-content-rating.c:483 msgid "Teen" msgstr "" #: libmalcontent-ui/gs-content-rating.c:228 #: libmalcontent-ui/gs-content-rating.c:482 msgid "Everyone 10+" msgstr "" #: libmalcontent-ui/gs-content-rating.c:230 #: libmalcontent-ui/gs-content-rating.c:481 msgid "Everyone" msgstr "" #: libmalcontent-ui/gs-content-rating.c:232 #: libmalcontent-ui/gs-content-rating.c:480 msgid "Early Childhood" msgstr "" #. Translators: the placeholder is a user’s full name #: libmalcontent-ui/restrict-applications-dialog.c:222 #, c-format msgid "Restrict %s from using the following installed applications." msgstr "" #: libmalcontent-ui/restrict-applications-dialog.ui:6 #: libmalcontent-ui/restrict-applications-dialog.ui:12 msgid "Restrict Applications" msgstr "" #: libmalcontent-ui/restrict-applications-selector.ui:24 msgid "No applications found to restrict." msgstr "" #. Translators: this is the full name for an unknown user account. #: libmalcontent-ui/user-controls.c:242 libmalcontent-ui/user-controls.c:253 msgid "unknown" msgstr "" #: libmalcontent-ui/user-controls.c:338 libmalcontent-ui/user-controls.c:425 #: libmalcontent-ui/user-controls.c:711 msgid "All Ages" msgstr "" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:514 #, c-format msgid "" "Prevents %s from running web browsers. Limited web content may still be " "available in other applications." msgstr "" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:519 #, c-format msgid "Prevents specified applications from being used by %s." msgstr "" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:524 #, c-format msgid "Prevents %s from installing applications." msgstr "" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:529 #, c-format msgid "Applications installed by %s will not appear for other users." msgstr "" #: libmalcontent-ui/user-controls.ui:17 msgid "Application Usage Restrictions" msgstr "" #: libmalcontent-ui/user-controls.ui:68 msgid "Restrict _Web Browsers" msgstr "" #: libmalcontent-ui/user-controls.ui:152 msgid "_Restrict Applications" msgstr "" #: libmalcontent-ui/user-controls.ui:231 msgid "Software Installation Restrictions" msgstr "" #: libmalcontent-ui/user-controls.ui:281 msgid "Restrict Application _Installation" msgstr "" #: libmalcontent-ui/user-controls.ui:366 msgid "Restrict Application Installation for _Others" msgstr "" #: libmalcontent-ui/user-controls.ui:451 msgid "Application _Suitability" msgstr "" #: libmalcontent-ui/user-controls.ui:473 msgid "" "Restricts browsing or installation of applications to applications suitable " "for certain ages or above." msgstr "" #. Translators: This is the title of the main window #. Translators: the name of the application as it appears in a software center #: malcontent-control/application.c:105 malcontent-control/main.ui:12 #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:9 #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:3 msgid "Parental Controls" msgstr "" #: malcontent-control/application.c:270 msgid "Copyright © 2019, 2020 Endless Mobile, Inc." msgstr "" #. Translators: this should be "translated" to the #. names of people who have translated Malcontent into #. this language, one per line. #: malcontent-control/application.c:275 msgid "translator-credits" msgstr "" #. Translators: "Malcontent" is the brand name of this #. project, so should not be translated. #: malcontent-control/application.c:281 msgid "Malcontent Website" msgstr "" #: malcontent-control/application.c:299 msgid "The help contents could not be displayed" msgstr "" #: malcontent-control/application.c:336 msgid "Failed to load user data from the system" msgstr "" #: malcontent-control/application.c:338 msgid "Please make sure that the AccountsService is installed and enabled." msgstr "" #: malcontent-control/carousel.ui:48 msgid "Previous Page" msgstr "" #: malcontent-control/carousel.ui:74 msgid "Next Page" msgstr "" #: malcontent-control/main.ui:93 msgid "Permission Required" msgstr "" #: malcontent-control/main.ui:107 msgid "" "Permission is required to view and change user parental controls settings." msgstr "" #: malcontent-control/main.ui:148 msgid "No Child Users Configured" msgstr "" #: malcontent-control/main.ui:162 msgid "" "No child users are currently set up on the system. Create one before setting " "up their parental controls." msgstr "" #: malcontent-control/main.ui:174 msgid "Create _Child User" msgstr "" #: malcontent-control/main.ui:202 msgid "Loading…" msgstr "" #: malcontent-control/main.ui:265 msgid "_Help" msgstr "_Pomoć" #: malcontent-control/main.ui:269 msgid "_About Parental Controls" msgstr "" #. Translators: the brief summary of the application as it appears in a software center. #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:12 #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:4 msgid "Set parental controls and monitor usage by users" msgstr "" #. Translators: These are the application description paragraphs in the AppData file. #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:16 msgid "" "Manage users’ parental controls restrictions, controlling how long they can " "use the computer for, what software they can install, and what installed " "software they can run." msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:39 msgid "The GNOME Project" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:50 #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:59 msgid "Minor improvements to parental controls application UI" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:51 msgid "Add a user manual" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:52 msgid "Translation updates" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:60 msgid "Translations to Ukrainian and Polish" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:67 msgid "Improve parental controls application UI and add icon" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:68 msgid "Support for indicating which accounts are parent accounts" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:75 msgid "Initial release of basic parental controls application" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:76 msgid "Support for setting app installation and run restrictions on users" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:83 msgid "Maintenance release of underlying parental controls library" msgstr "" #. Translators: Do NOT translate or transliterate this text (this is an icon file name)! #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:7 msgid "org.freedesktop.MalcontentControl" msgstr "" #. Translators: Search terms to find this application. Do NOT translate or localise the semicolons! The list MUST also end with a semicolon! #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:13 msgid "" "parental controls;screen time;app restrictions;web browser restrictions;oars;" "usage;usage limit;kid;child;" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.policy.in:9 msgid "Manage parental controls" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.policy.in:10 msgid "Authentication is required to read and change user parental controls" msgstr "" #: malcontent-control/user-selector.c:426 msgid "Your account" msgstr "Vaš račun" #. Always allow root, to avoid a situation where this PAM module prevents #. * all users logging in with no way of recovery. #: pam/pam_malcontent.c:142 pam/pam_malcontent.c:188 #, c-format msgid "User ‘%s’ has no time limits enabled" msgstr "" #: pam/pam_malcontent.c:151 pam/pam_malcontent.c:172 #, c-format msgid "Error getting session limits for user ‘%s’: %s" msgstr "" #: pam/pam_malcontent.c:182 #, c-format msgid "User ‘%s’ has no time remaining" msgstr "" #: pam/pam_malcontent.c:200 #, c-format msgid "Error setting time limit on login session: %s" msgstr "" #~ msgid "No cartoon violence" #~ msgstr "Bez nasilja u crtićima" #~ msgid "Cartoon characters in unsafe situations" #~ msgstr "Likovi crtića su u opasnim situacijama" #~ msgid "Cartoon characters in aggressive conflict" #~ msgstr "Likovi crtića su u agresivnim sukobima" #~ msgid "Graphic violence involving cartoon characters" #~ msgstr "Animirano nasilje uključuje likove crtića" #~ msgid "No fantasy violence" #~ msgstr "Bez umišljenog nasilja" #~ msgid "Characters in unsafe situations easily distinguishable from reality" #~ msgstr "Likovi u opasnim situacijama se lako mogu razlikovati od stvarnosti" #~ msgid "" #~ "Characters in aggressive conflict easily distinguishable from reality" #~ msgstr "Likovi u agresivnim sukobima se lako mogu razlikovati od stvarnosti" #~ msgid "Graphic violence easily distinguishable from reality" #~ msgstr "Animirano nasilje se lako može razlikovati od stvarnosti" #~ msgid "No realistic violence" #~ msgstr "Bez stvarnog nasilja" #~ msgid "Mildly realistic characters in unsafe situations" #~ msgstr "Srednje realni likovi u agresivnom sukobu" #~ msgid "Depictions of realistic characters in aggressive conflict" #~ msgstr "Prikaz realnih likova u agresivnom sukobu" #~ msgid "Graphic violence involving realistic characters" #~ msgstr "Animirano nasilje uključuje realne likove" #~ msgid "No bloodshed" #~ msgstr "Bez krvoprolića" #~ msgid "Unrealistic bloodshed" #~ msgstr "Nerealno krvoproliće" #~ msgid "Realistic bloodshed" #~ msgstr "Realno krvoproliće" #~ msgid "Depictions of bloodshed and the mutilation of body parts" #~ msgstr "Prikaz krvoprolića i sakaćenja dijelova tijela" #~ msgid "No sexual violence" #~ msgstr "Bez seksualnog nasilja" #~ msgid "Rape or other violent sexual behavior" #~ msgstr "Silovanje ili ostalo nasilje seksualnog ponašanja" #~ msgid "No references to alcohol" #~ msgstr "Bez pozivanja na alkoholna pića" #~ msgid "References to alcoholic beverages" #~ msgstr "Pozivanje na alkoholna pića" #~ msgid "Use of alcoholic beverages" #~ msgstr "Upotreba alkoholnih pića" #~ msgid "No references to illicit drugs" #~ msgstr "Bez pozivanja na nedopuštene droge" #~ msgid "References to illicit drugs" #~ msgstr "Pozivanje na nedopuštene droge" #~ msgid "Use of illicit drugs" #~ msgstr "Upotreba nedopuštenih droga" #~ msgid "References to tobacco products" #~ msgstr "Pozivanje na duhanske proizvode" #~ msgid "Use of tobacco products" #~ msgstr "Upotreba duhanskih proizvoda" #~ msgid "No nudity of any sort" #~ msgstr "Bez golotinje svake vrste" #~ msgid "Brief artistic nudity" #~ msgstr "Kratka umjetnička golotinja" #~ msgid "Prolonged nudity" #~ msgstr "Dugotrajna golotinja" #~ msgid "No references or depictions of sexual nature" #~ msgstr "Bez aluzije ili prikaza seksualne prirode" #~ msgid "Provocative references or depictions" #~ msgstr "Provokativne aluzije ili crteži" #~ msgid "Sexual references or depictions" #~ msgstr "Seksualne aluzije ili crteži" #~ msgid "Graphic sexual behavior" #~ msgstr "Animirano seksualno ponašanje" #~ msgid "No profanity of any kind" #~ msgstr "Bez psovki bilo koje vrste" #~ msgid "Mild or infrequent use of profanity" #~ msgstr "Blaga ili sporadičnu upotreba psovki" #~ msgid "Moderate use of profanity" #~ msgstr "Umjerena upotreba psovki" #~ msgid "Strong or frequent use of profanity" #~ msgstr "Snažna ili česta upotreba psovki" #~ msgid "No inappropriate humor" #~ msgstr "Bez neprimjerenog humora" #~ msgid "Slapstick humor" #~ msgstr "Urnebesni humor" #~ msgid "Vulgar or bathroom humor" #~ msgstr "Vulgaran ili kafanski humor" #~ msgid "Mature or sexual humor" #~ msgstr "Seksualni ili humor za odrasle" #~ msgid "No discriminatory language of any kind" #~ msgstr "Bez diskriminirajućeg jezika bilo koje vrste" #~ msgid "Negativity towards a specific group of people" #~ msgstr "Negativnost prema određenoj skupini ljudi" #~ msgid "Discrimination designed to cause emotional harm" #~ msgstr "Diskriminacija osmišljena da uzrokuje emocionalno nasilje" #~ msgid "Explicit discrimination based on gender, sexuality, race or religion" #~ msgstr "" #~ "Eksplicitna diskriminacija na osnovi spola, spolnosti, rasi ili religiji" #~ msgid "No advertising of any kind" #~ msgstr "Bez oglasa bilo koje vrste" #~ msgid "Product placement" #~ msgstr "Plasman proizvoda" #~ msgid "Explicit references to specific brands or trademarked products" #~ msgstr "Jasne odredbe zaštićene robne marke ili zaštitnog znaka proizvoda" #~ msgid "Users are encouraged to purchase specific real-world items" #~ msgstr "Korisnici se potiču na kupnju određenog stvarnog predmeta" #~ msgid "No gambling of any kind" #~ msgstr "Bez kockanja bilo koje vrste" #~ msgid "Gambling on random events using tokens or credits" #~ msgstr "Kockanje na slučajnim događajima pomoću žetona ili kredita" #~ msgid "Gambling using “play” money" #~ msgstr "Kockanje upotrebom novca iz \"igre\"" #~ msgid "Gambling using real money" #~ msgstr "Kockanje upotrebno stvarnog novca" #~ msgid "No ability to spend money" #~ msgstr "Bez mogućnosti trošenja stvarnog novca" #~ msgid "Users are encouraged to donate real money" #~ msgstr "Korisnici se potiču na kupnju određenog stvarnog predmeta" #~ msgid "Ability to spend real money in-game" #~ msgstr "Mogućnost trošenja stvarnog novca u igri" #~ msgid "No way to chat with other users" #~ msgstr "Bez mogućnost razgovora s drugim korisnicima" #~ msgid "Moderated chat functionality between users" #~ msgstr "Ograničena mogućnost razgovora između korisnika" #~ msgid "Uncontrolled chat functionality between users" #~ msgstr "Nekontrolirana mogućnost razgovora između korisnika" #~ msgid "No way to talk with other users" #~ msgstr "Bez mogućnost razgovora s drugim korisnicima" #~ msgid "Uncontrolled audio or video chat functionality between users" #~ msgstr "" #~ "Nekontrolirana mogućnost glasovnog i video razgovora između korisnika" #~ msgid "No sharing of social network usernames or email addresses" #~ msgstr "Bez dijeljenja imena i adresa e-pošte društvenih mreža" #~ msgid "Sharing social network usernames or email addresses" #~ msgstr "Dijeljenje imena i adresa e-pošte društvenih mreža" #~ msgid "No sharing of user information with 3rd parties" #~ msgstr "Bez dijeljenja informacija korisnika sa trećom stranom" #~ msgid "Checking for the latest application version" #~ msgstr "Provjera najnovije inačice aplikacije" #~ msgid "Sharing diagnostic data that does not let others identify the user" #~ msgstr "" #~ "Dijeljenji dijagnostički podaci koji ne dopuštaju drugima da " #~ "identificiraju korisnika" #~ msgid "Sharing information that lets others identify the user" #~ msgstr "" #~ "Dijeljene informacije koju dopuštaju drugima da identificiraju korisnika" #~ msgid "No sharing of physical location to other users" #~ msgstr "Bez dijeljenja fizičke lokacije sa ostalim korisnicima" #~ msgid "Sharing physical location to other users" #~ msgstr "Dijeljenje fizičke lokacije sa ostalim korisnicima" #~ msgid "No references to homosexuality" #~ msgstr "Bez pozivanja na homoseksualnost" #~ msgid "Indirect references to homosexuality" #~ msgstr "Neizrano pozivanje na homoseksualnost" #~ msgid "Kissing between people of the same gender" #~ msgstr "Ljubljenje između ljudi istog spola" #~ msgid "Graphic sexual behavior between people of the same gender" #~ msgstr "Grafičko spolno ponašanje između ljudi istog spola" #~ msgid "No references to prostitution" #~ msgstr "Bez pozivanja na prostituciju" #~ msgid "Indirect references to prostitution" #~ msgstr "Neizravno pozivanje na prostituciju" #~ msgid "Direct references to prostitution" #~ msgstr "Izravno pozivanje na prostituciju" #~ msgid "Graphic depictions of the act of prostitution" #~ msgstr "Grafički prikaz čina prostitucije" #~ msgid "No references to adultery" #~ msgstr "Bez pozivanja na preljub" #~ msgid "Indirect references to adultery" #~ msgstr "Neizravno pozivanje na preljub" #~ msgid "Direct references to adultery" #~ msgstr "Izravno pozivanje na preljub" #~ msgid "Graphic depictions of the act of adultery" #~ msgstr "Grafički prikaz čina preljuba" #~ msgid "No sexualized characters" #~ msgstr "Bez seksualnih likova" #~ msgid "Scantily clad human characters" #~ msgstr "Oskudno odjeveni likovi" #~ msgid "Overtly sexualized human characters" #~ msgstr "Javno neprimjereni seksualni likovi" #~ msgid "No references to desecration" #~ msgstr "Bez pozivanja na oskvrnuće" #~ msgid "Depictions of modern-day human desecration" #~ msgstr "Prikaz oskvrnuća ljudske suvremenosti" #~ msgid "Graphic depictions of modern-day desecration" #~ msgstr "Grafički prikaz oskvrnuća ljudske suvremenosti" #~ msgid "No visible dead human remains" #~ msgstr "Bez vidljivih mrtvih ljudskih ostataka" #~ msgid "Visible dead human remains" #~ msgstr "Vidlji mrtvi ljudski ostaci" #~ msgid "Dead human remains that are exposed to the elements" #~ msgstr "Vidlji mrtvi ljudski ostaci koji su izloženi u elementima" #~ msgid "Graphic depictions of desecration of human bodies" #~ msgstr "Grafički prikazi oskvrnuća ljudskih tijela" #~ msgid "No references to slavery" #~ msgstr "Bez pozivanja na ropstvo" #~ msgid "Depictions of modern-day slavery" #~ msgstr "Prikaz suvremenog ropstva" #~ msgid "Graphic depictions of modern-day slavery" #~ msgstr "Grafički prikaz suvremenog ropstva" malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/po/hu.po000066400000000000000000000424751505556674000232020ustar00rootroot00000000000000# Hungarian translation for malcontent. # Copyright (C) 2022, 2024 Free Software Foundation, Inc. # This file is distributed under the same license as the malcontent package. # # Balázs Úr , 2022, 2024. msgid "" msgstr "" "Project-Id-Version: malcontent\n" "Report-Msgid-Bugs-To: https://gitlab.freedesktop.org/pwithnall/malcontent/" "issues\n" "POT-Creation-Date: 2023-10-13 16:18+0000\n" "PO-Revision-Date: 2024-03-10 21:03+0100\n" "Last-Translator: Balázs Úr \n" "Language-Team: Hungarian \n" "Language: hu\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Lokalize 23.08.4\n" #: accounts-service/com.endlessm.ParentalControls.policy.in:4 msgid "Change your own app filter" msgstr "A saját alkalmazásszűrőjének megváltoztatása" #: accounts-service/com.endlessm.ParentalControls.policy.in:5 msgid "Authentication is required to change your app filter." msgstr "Hitelesítés szükséges az alkalmazásszűrőjének megváltoztatásához." #: accounts-service/com.endlessm.ParentalControls.policy.in:14 msgid "Read your own app filter" msgstr "A saját alkalmazásszűrőjének olvasása" #: accounts-service/com.endlessm.ParentalControls.policy.in:15 msgid "Authentication is required to read your app filter." msgstr "Hitelesítés szükséges az alkalmazásszűrőjének olvasásához." #: accounts-service/com.endlessm.ParentalControls.policy.in:24 msgid "Change another user’s app filter" msgstr "Egy másik felhasználó alkalmazásszűrőjének megváltoztatása" #: accounts-service/com.endlessm.ParentalControls.policy.in:25 msgid "Authentication is required to change another user’s app filter." msgstr "" "Hitelesítés szükséges egy másik felhasználó alkalmazásszűrőjének " "megváltoztatásához." #: accounts-service/com.endlessm.ParentalControls.policy.in:34 msgid "Read another user’s app filter" msgstr "Egy másik felhasználó alkalmazásszűrőjének olvasása" #: accounts-service/com.endlessm.ParentalControls.policy.in:35 msgid "Authentication is required to read another user’s app filter." msgstr "" "Hitelesítés szükséges egy másik felhasználó alkalmazásszűrőjének olvasásához." #: accounts-service/com.endlessm.ParentalControls.policy.in:44 msgid "Change your own session limits" msgstr "A saját munkamenetkorlátainak megváltoztatása" #: accounts-service/com.endlessm.ParentalControls.policy.in:45 msgid "Authentication is required to change your session limits." msgstr "Hitelesítés szükséges a munkamenetkorlátainak megváltoztatásához." #: accounts-service/com.endlessm.ParentalControls.policy.in:54 msgid "Read your own session limits" msgstr "A saját munkamenetkorlátainak olvasása" #: accounts-service/com.endlessm.ParentalControls.policy.in:55 msgid "Authentication is required to read your session limits." msgstr "Hitelesítés szükséges a munkamenetkorlátainak olvasásához." #: accounts-service/com.endlessm.ParentalControls.policy.in:64 msgid "Change another user’s session limits" msgstr "Egy másik felhasználó munkamenetkorlátainak megváltoztatása" #: accounts-service/com.endlessm.ParentalControls.policy.in:65 msgid "Authentication is required to change another user’s session limits." msgstr "" "Hitelesítés szükséges egy másik felhasználó munkamenetkorlátainak " "megváltoztatásához." #: accounts-service/com.endlessm.ParentalControls.policy.in:74 msgid "Read another user’s session limits" msgstr "Egy másik felhasználó munkamenetkorlátainak olvasása" #: accounts-service/com.endlessm.ParentalControls.policy.in:75 msgid "Authentication is required to read another user’s session limits." msgstr "" "Hitelesítés szükséges egy másik felhasználó munkamenetkorlátainak " "olvasásához." #: accounts-service/com.endlessm.ParentalControls.policy.in:84 msgid "Change your own account info" msgstr "A saját fiókinformációinak megváltoztatása" #: accounts-service/com.endlessm.ParentalControls.policy.in:85 msgid "Authentication is required to change your account info." msgstr "Hitelesítés szükséges a fiókinformációinak megváltoztatásához." #: accounts-service/com.endlessm.ParentalControls.policy.in:94 msgid "Read your own account info" msgstr "A saját fiókinformációinak olvasása" #: accounts-service/com.endlessm.ParentalControls.policy.in:95 msgid "Authentication is required to read your account info." msgstr "Hitelesítés szükséges a fiókinformációinak olvasásához." #: accounts-service/com.endlessm.ParentalControls.policy.in:104 msgid "Change another user’s account info" msgstr "Egy másik felhasználó fiókinformációinak megváltoztatása" #: accounts-service/com.endlessm.ParentalControls.policy.in:105 msgid "Authentication is required to change another user’s account info." msgstr "" "Hitelesítés szükséges egy másik felhasználó fiókinformációinak " "megváltoztatásához." #: accounts-service/com.endlessm.ParentalControls.policy.in:114 msgid "Read another user’s account info" msgstr "Egy másik felhasználó fiókinformációinak olvasása" #: accounts-service/com.endlessm.ParentalControls.policy.in:115 msgid "Authentication is required to read another user’s account info." msgstr "" "Hitelesítés szükséges egy másik felhasználó fiókinformációinak olvasásához." #: libmalcontent/app-filter.c:694 #, c-format msgid "App filter for user %u was in an unrecognized format" msgstr "%u felhasználó alkalmazásszűrője felismerhetetlen formátumban volt" #: libmalcontent/app-filter.c:725 #, c-format msgid "OARS filter for user %u has an unrecognized kind ‘%s’" msgstr "%u felhasználó OARS-szűrője felismerhetetlen „%s” fajtájú" #: libmalcontent/manager.c:283 libmalcontent/manager.c:420 #: libmalcontent/manager.c:803 #, c-format msgid "Not allowed to query parental controls data for user %u" msgstr "" "Nem engedélyezett %u felhasználó szülői felügyeleti adatainak lekérdezése" #: libmalcontent/manager.c:288 #, c-format msgid "User %u does not exist" msgstr "%u felhasználó nem létezik" #: libmalcontent/manager.c:296 msgid "System accounts service not available" msgstr "A rendszer fiókjainak szolgáltatása nem érhető el" #: libmalcontent/manager.c:402 msgid "App filtering is globally disabled" msgstr "Az alkalmazásszűrés globálisan le van tiltva" #: libmalcontent/manager.c:785 msgid "Session limits are globally disabled" msgstr "A munkamenetkorlátok globálisan le vannak tiltva" #: libmalcontent/session-limits.c:306 #, c-format msgid "Session limit for user %u was in an unrecognized format" msgstr "%u felhasználó munkamenetkorlátja felismerhetetlen formátumban volt" #: libmalcontent/session-limits.c:328 #, c-format msgid "Session limit for user %u has an unrecognized type ‘%u’" msgstr "%u felhasználó munkamenetkorlátjának felismerhetetlen „%u” típusa van" #: libmalcontent/session-limits.c:346 #, c-format msgid "Session limit for user %u has invalid daily schedule %u–%u" msgstr "" "%u felhasználó munkamenetkorlátjának érvénytelen %u–%u napi ütemezése van" #. Translators: the placeholder is a user’s full name #: libmalcontent-ui/restrict-applications-dialog.c:256 #, c-format msgid "Restrict %s from using the following installed applications." msgstr "" "%s korlátozása abban, hogy a következő telepített alkalmazásokat használja." #: libmalcontent-ui/restrict-applications-dialog.ui:6 msgid "Restrict Applications" msgstr "Alkalmazások korlátozása" #: libmalcontent-ui/restrict-applications-dialog.ui:22 msgid "Search for applications…" msgstr "Alkalmazások keresése…" #: libmalcontent-ui/restrict-applications-selector.ui:13 msgid "No applications found to restrict." msgstr "Nem találhatók korlátozandó alkalmazások." #. Translators: this is the full name for an unknown user account. #: libmalcontent-ui/user-controls.c:198 libmalcontent-ui/user-controls.c:209 msgid "unknown" msgstr "ismeretlen" #: libmalcontent-ui/user-controls.c:303 libmalcontent-ui/user-controls.c:388 #: libmalcontent-ui/user-controls.c:641 msgid "All Ages" msgstr "Összes életkor" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:470 #, c-format msgid "" "Prevents %s from running web browsers. Limited web content may still be " "available in other applications." msgstr "" "Megakadályozza, hogy %s webböngészőket futtasson. Korlátozott webes tartalom " "továbbra is elérhető lehet egyéb alkalmazásokban." #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:475 #, c-format msgid "Prevents specified applications from being used by %s." msgstr "Megakadályozza, hogy %s a megadott alkalmazásokat használja." #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:480 #, c-format msgid "Prevents %s from installing applications." msgstr "Megakadályozza, hogy %s alkalmazásokat telepítsen." #: libmalcontent-ui/user-controls.ui:25 msgid "Application Usage Restrictions" msgstr "Alkalmazáshasználati korlátozások" #: libmalcontent-ui/user-controls.ui:28 msgid "Restrict _Web Browsers" msgstr "_Webböngészők korlátozása" #: libmalcontent-ui/user-controls.ui:51 msgid "_Restrict Applications" msgstr "_Alkalmazások korlátozása" #: libmalcontent-ui/user-controls.ui:73 msgid "Software Installation Restrictions" msgstr "Szoftvertelepítési korlátozások" #: libmalcontent-ui/user-controls.ui:77 msgid "Restrict Application _Installation" msgstr "Alkalmazás_telepítés korlátozása" #: libmalcontent-ui/user-controls.ui:99 msgid "Application _Suitability" msgstr "Alkalmazás _alkalmassága" #: libmalcontent-ui/user-controls.ui:102 msgid "" "Restricts the browsing or installation of applications unsuitable for this " "age or younger." msgstr "" "Korlátozza az ebben a korban lévőknek vagy fiatalabbaknak nem megfelelő " "alkalmazások böngészését vagy telepítését." #. Translators: This documents the --user command line option to malcontent-control: #: malcontent-control/application.c:102 msgid "User to select in the UI" msgstr "A felhasználói felületen kiválasztandó felhasználó" #. Translators: This is a placeholder for a command line argument value: #: malcontent-control/application.c:104 msgid "USERNAME" msgstr "FELHASZNÁLÓNÉV" #: malcontent-control/application.c:116 msgid "— view and edit parental controls" msgstr "— szülői felügyelet megtekintése és szerkesztése" #. Translators: This is the title of the main window #. Translators: the name of the application as it appears in a software center #: malcontent-control/application.c:123 malcontent-control/main.ui:17 #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:9 #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:3 msgid "Parental Controls" msgstr "Szülői felügyelet" #: malcontent-control/application.c:309 msgid "Copyright © 2019, 2020 Endless Mobile, Inc." msgstr "Copyright © 2019, 2020 Endless Mobile, Inc." #. Translators: this should be "translated" to the #. names of people who have translated Malcontent into #. this language, one per line. #: malcontent-control/application.c:314 msgid "translator-credits" msgstr "Úr Balázs , 2022." #. Translators: "Malcontent" is the brand name of this #. project, so should not be translated. #: malcontent-control/application.c:320 msgid "Malcontent Website" msgstr "A Malcontent weboldala" #: malcontent-control/application.c:341 msgid "The help contents could not be displayed" msgstr "A súgótartalmat nem sikerült megjeleníteni" #: malcontent-control/application.c:388 msgid "Failed to load user data from the system" msgstr "Nem sikerült betölteni a felhasználói adatokat a rendszerről" #: malcontent-control/application.c:390 msgid "Please make sure that the AccountsService is installed and enabled." msgstr "" "Győződjön meg arról, hogy az AccountsService telepítve van-e és engedélyezve " "van-e." #. Translators: Replace the link to commonsensemedia.org with some #. * localised guidance for parents/carers on how to set restrictions on #. * their child/caree in a responsible way which is in keeping with the #. * best practice and culture of the region. If no suitable localised #. * guidance exists, and if the default commonsensemedia.org link is not #. * suitable, please file an issue against malcontent so we can discuss #. * further! #. * https://gitlab.freedesktop.org/pwithnall/malcontent/-/issues/new #. #: malcontent-control/application.c:421 #, c-format msgid "" "It’s recommended that restrictions are set as part of an ongoing " "conversation with %s. Read guidance on what to consider." msgstr "" "Azt javasoljuk, hogy a korlátozásokat %s felhasználóval történő folyamatos " "beszélgetés részeként határozzák meg. Olvasson útmutatást arról, hogy mit " "kell figyelembe venni." #: malcontent-control/carousel.ui:38 msgid "Previous Page" msgstr "Előző oldal" #: malcontent-control/carousel.ui:57 msgid "Next Page" msgstr "Következő oldal" #: malcontent-control/main.ui:87 msgid "Permission Required" msgstr "Engedély szükséges" #: malcontent-control/main.ui:88 msgid "" "Permission is required to view and change user parental controls settings." msgstr "" "Engedély szükséges a felhasználó szülői felügyeleti beállításainak " "megtekintéséhez és megváltoztatásához." #: malcontent-control/main.ui:110 msgid "No Standard User Accounts" msgstr "Nincsenek szabványos felhasználói fiókok" #: malcontent-control/main.ui:111 msgid "" "Parental controls can only be applied to standard user\n" "accounts. These can be created in the user settings." msgstr "" "A szülői felügyeletet csak szabványos felhasználói fiókokra lehet\n" "alkalmazni. Ezek a felhasználói beállításokban hozhatók létre." #: malcontent-control/main.ui:115 msgid "_User Settings" msgstr "_Felhasználói beállítások" #: malcontent-control/main.ui:138 msgid "Loading…" msgstr "Betöltés…" #: malcontent-control/main.ui:171 msgid "_Help" msgstr "_Súgó" #: malcontent-control/main.ui:175 msgid "_About Parental Controls" msgstr "_A szülői felügyeletről" #. Translators: the brief summary of the application as it appears in a software center. #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:12 #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:4 msgid "Set parental controls and monitor usage by users" msgstr "" "Szülői felügyelet beállítása és a felhasználók tevékenységeinek megfigyelése" #. Translators: These are the application description paragraphs in the AppData file. #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:16 msgid "" "Manage users’ parental controls restrictions, controlling how long they can " "use the computer for, what software they can install, and what installed " "software they can run." msgstr "" "A felhasználók szülői felügyeleti korlátozásainak kezelése, a számítógép " "használati idejének szabályozása, milyen szoftvereket telepíthetnek, " "valamint mely telepített szoftvereket futtathatnak." #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:25 msgid "Main window" msgstr "Főablak" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:39 msgid "The GNOME Project" msgstr "A GNOME projekt" #. Translators: Search terms to find this application. Do NOT translate or localise the semicolons! The list MUST also end with a semicolon! #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:14 msgid "" "parental controls;screen time;app restrictions;web browser restrictions;oars;" "usage;usage limit;kid;child;" msgstr "" "szülői felügyelet;képernyőidő;alkalmazáskorlátozások;webböngésző-" "korlátozások;oars;használat;használati korlátozás;kölyök;gyerek;gyermek;" #: malcontent-control/org.freedesktop.MalcontentControl.policy.in:9 msgid "Manage parental controls" msgstr "Szülői felügyelet kezelése" #: malcontent-control/org.freedesktop.MalcontentControl.policy.in:10 msgid "Authentication is required to read and change user parental controls" msgstr "" "Hitelesítés szükséges a felhasználó szülői felügyeletének olvasásához és " "megváltoztatásához" #: malcontent-control/user-selector.c:426 msgid "Your account" msgstr "Az Ön fiókja" #. Always allow root, to avoid a situation where this PAM module prevents #. * all users logging in with no way of recovery. #: pam/pam_malcontent.c:142 pam/pam_malcontent.c:188 #, c-format msgid "User ‘%s’ has no time limits enabled" msgstr "„%s” felhasználónak nincsenek időkorlátok engedélyezve" #: pam/pam_malcontent.c:151 pam/pam_malcontent.c:172 #, c-format msgid "Error getting session limits for user ‘%s’: %s" msgstr "Hiba történt „%s” felhasználó munkamenetkorlátjainak lekérésekor: %s" #: pam/pam_malcontent.c:182 #, c-format msgid "User ‘%s’ has no time remaining" msgstr "„%s” felhasználónak nincs hátralévő ideje" #: pam/pam_malcontent.c:200 #, c-format msgid "Error setting time limit on login session: %s" msgstr "" "Hiba történt a bejelentkezési munkameneten való időkorlát beállításakor: %s" malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/po/id.po000066400000000000000000000421251505556674000231520ustar00rootroot00000000000000# Indonesian translation for malcontent. # Copyright (C) 2020 malcontent's COPYRIGHT HOLDER # This file is distributed under the same license as the malcontent package. # Andika Triwidada , 2020, 2021. # msgid "" msgstr "" "Project-Id-Version: malcontent master\n" "Report-Msgid-Bugs-To: https://gitlab.freedesktop.org/pwithnall/malcontent/" "issues\n" "POT-Creation-Date: 2020-12-18 15:14+0000\n" "PO-Revision-Date: 2021-08-30 18:21+0700\n" "Last-Translator: Andika Triwidada \n" "Language-Team: Indonesian \n" "Language: id\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 2.4.3\n" #: accounts-service/com.endlessm.ParentalControls.policy.in:4 msgid "Change your own app filter" msgstr "Ubah filter aplikasi Anda sendiri" #: accounts-service/com.endlessm.ParentalControls.policy.in:5 msgid "Authentication is required to change your app filter." msgstr "Diperlukan autentikasi untuk mengubah filter aplikasi Anda." #: accounts-service/com.endlessm.ParentalControls.policy.in:14 msgid "Read your own app filter" msgstr "Baca filter aplikasi Anda sendiri" #: accounts-service/com.endlessm.ParentalControls.policy.in:15 msgid "Authentication is required to read your app filter." msgstr "Diperlukan autentikasi untuk membaca filter aplikasi Anda." #: accounts-service/com.endlessm.ParentalControls.policy.in:24 msgid "Change another user’s app filter" msgstr "Ubah filter aplikasi pengguna lain" #: accounts-service/com.endlessm.ParentalControls.policy.in:25 msgid "Authentication is required to change another user’s app filter." msgstr "Diperlukan autentikasi untuk mengubah filter aplikasi pengguna lain." #: accounts-service/com.endlessm.ParentalControls.policy.in:34 msgid "Read another user’s app filter" msgstr "Baca filter aplikasi pengguna lain" #: accounts-service/com.endlessm.ParentalControls.policy.in:35 msgid "Authentication is required to read another user’s app filter." msgstr "Diperlukan autentikasi untuk membaca filter aplikasi pengguna lain." #: accounts-service/com.endlessm.ParentalControls.policy.in:44 msgid "Change your own session limits" msgstr "Ubah batas sesi Anda sendiri" #: accounts-service/com.endlessm.ParentalControls.policy.in:45 msgid "Authentication is required to change your session limits." msgstr "Diperlukan autentikasi untuk mengubah batas sesi Anda." #: accounts-service/com.endlessm.ParentalControls.policy.in:54 msgid "Read your own session limits" msgstr "Baca batas sesi Anda sendiri" #: accounts-service/com.endlessm.ParentalControls.policy.in:55 msgid "Authentication is required to read your session limits." msgstr "Diperlukan autentikasi untuk membaca batas sesi Anda." #: accounts-service/com.endlessm.ParentalControls.policy.in:64 msgid "Change another user’s session limits" msgstr "Ubah batas sesi pengguna lain" #: accounts-service/com.endlessm.ParentalControls.policy.in:65 msgid "Authentication is required to change another user’s session limits." msgstr "Diperlukan autentikasi untuk mengubah batas sesi pengguna lain." #: accounts-service/com.endlessm.ParentalControls.policy.in:74 msgid "Read another user’s session limits" msgstr "Baca batas sesi pengguna lain" #: accounts-service/com.endlessm.ParentalControls.policy.in:75 msgid "Authentication is required to read another user’s session limits." msgstr "Diperlukan autentikasi untuk membaca batas sesi pengguna lain." #: accounts-service/com.endlessm.ParentalControls.policy.in:84 msgid "Change your own account info" msgstr "Ubah info akun Anda sendiri" #: accounts-service/com.endlessm.ParentalControls.policy.in:85 msgid "Authentication is required to change your account info." msgstr "Diperlukan autentikasi untuk mengubah info akun Anda." #: accounts-service/com.endlessm.ParentalControls.policy.in:94 msgid "Read your own account info" msgstr "Baca info akun Anda sendiri" #: accounts-service/com.endlessm.ParentalControls.policy.in:95 msgid "Authentication is required to read your account info." msgstr "Diperlukan autentikasi untuk membaca info akun Anda." #: accounts-service/com.endlessm.ParentalControls.policy.in:104 msgid "Change another user’s account info" msgstr "Ubah info akun pengguna lain" #: accounts-service/com.endlessm.ParentalControls.policy.in:105 msgid "Authentication is required to change another user’s account info." msgstr "Diperlukan autentikasi untuk mengubah info akun pengguna lain." #: accounts-service/com.endlessm.ParentalControls.policy.in:114 msgid "Read another user’s account info" msgstr "Baca info akun pengguna lain" #: accounts-service/com.endlessm.ParentalControls.policy.in:115 msgid "Authentication is required to read another user’s account info." msgstr "Diperlukan autentikasi untuk membaca info akun pengguna lain." #: libmalcontent/app-filter.c:694 #, c-format msgid "App filter for user %u was in an unrecognized format" msgstr "Filter aplikasi untuk pengguna %u dalam format yang tidak dikenal" #: libmalcontent/app-filter.c:725 #, c-format msgid "OARS filter for user %u has an unrecognized kind ‘%s’" msgstr "Filter OARS untuk pengguna %u memiliki jenis yang tidak dikenal '%s'" #: libmalcontent/manager.c:283 libmalcontent/manager.c:420 #: libmalcontent/manager.c:803 #, c-format msgid "Not allowed to query parental controls data for user %u" msgstr "" "Tidak diizinkan untuk menanyakan data pengawasan orang tua untuk pengguna %u" #: libmalcontent/manager.c:288 #, c-format msgid "User %u does not exist" msgstr "Pengguna %u tidak ada" #: libmalcontent/manager.c:296 msgid "System accounts service not available" msgstr "Layanan akun sistem tidak tersedia" #: libmalcontent/manager.c:402 msgid "App filtering is globally disabled" msgstr "Penyaringan aplikasi dinonaktifkan secara global" #: libmalcontent/manager.c:785 msgid "Session limits are globally disabled" msgstr "Batas sesi dinonaktifkan secara global" #: libmalcontent/session-limits.c:306 #, c-format msgid "Session limit for user %u was in an unrecognized format" msgstr "Batas sesi untuk pengguna %u dalam format yang tidak dikenal" #: libmalcontent/session-limits.c:328 #, c-format msgid "Session limit for user %u has an unrecognized type ‘%u’" msgstr "Batas sesi untuk pengguna %u memiliki tipe '%u' yang tidak dikenal" #: libmalcontent/session-limits.c:346 #, c-format msgid "Session limit for user %u has invalid daily schedule %u–%u" msgstr "" "Batas sesi untuk pengguna %u memiliki jadwal harian yang tidak valid %u–%u" #. TRANSLATORS: This is the formatting of English and localized name #. of the rating e.g. "Adults Only (solo adultos)" #: libmalcontent-ui/gs-content-rating.c:75 #, c-format msgid "%s (%s)" msgstr "%s (%s)" #: libmalcontent-ui/gs-content-rating.c:209 msgid "General" msgstr "Umum" #: libmalcontent-ui/gs-content-rating.c:218 msgid "ALL" msgstr "SEMUA" #: libmalcontent-ui/gs-content-rating.c:222 #: libmalcontent-ui/gs-content-rating.c:485 msgid "Adults Only" msgstr "Hanya Orang Dewasa" #: libmalcontent-ui/gs-content-rating.c:224 #: libmalcontent-ui/gs-content-rating.c:484 msgid "Mature" msgstr "Dewasa" #: libmalcontent-ui/gs-content-rating.c:226 #: libmalcontent-ui/gs-content-rating.c:483 msgid "Teen" msgstr "Remaja" #: libmalcontent-ui/gs-content-rating.c:228 #: libmalcontent-ui/gs-content-rating.c:482 msgid "Everyone 10+" msgstr "Siapa Pun 10+" #: libmalcontent-ui/gs-content-rating.c:230 #: libmalcontent-ui/gs-content-rating.c:481 msgid "Everyone" msgstr "Siapa Pun" #: libmalcontent-ui/gs-content-rating.c:232 #: libmalcontent-ui/gs-content-rating.c:480 msgid "Early Childhood" msgstr "Anak Usia Dini" #. Translators: the placeholder is a user’s full name #: libmalcontent-ui/restrict-applications-dialog.c:222 #, c-format msgid "Restrict %s from using the following installed applications." msgstr "Batasi %s dari menggunakan aplikasi yang diinstal berikut ini." #: libmalcontent-ui/restrict-applications-dialog.ui:6 #: libmalcontent-ui/restrict-applications-dialog.ui:12 msgid "Restrict Applications" msgstr "Batasi Aplikasi" #: libmalcontent-ui/restrict-applications-selector.ui:24 msgid "No applications found to restrict." msgstr "Tidak ditemukan aplikasi yang akan dibatasi." #. Translators: this is the full name for an unknown user account. #: libmalcontent-ui/user-controls.c:207 libmalcontent-ui/user-controls.c:218 msgid "unknown" msgstr "tidak dikenal" #: libmalcontent-ui/user-controls.c:312 libmalcontent-ui/user-controls.c:397 #: libmalcontent-ui/user-controls.c:669 msgid "All Ages" msgstr "Semua umur" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:477 #, c-format msgid "" "Prevents %s from running web browsers. Limited web content may still be " "available in other applications." msgstr "" "Mencegah %s dari menjalankan peramban web. Konten web terbatas mungkin masih " "tersedia di aplikasi lain." #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:482 #, c-format msgid "Prevents specified applications from being used by %s." msgstr "Mencegah aplikasi tertentu agar tidak digunakan oleh %s." #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:487 #, c-format msgid "Prevents %s from installing applications." msgstr "Mencegah %s menginstal aplikasi." #: libmalcontent-ui/user-controls.ui:16 msgid "Application Usage Restrictions" msgstr "Pembatasan Penggunaan Aplikasi" #: libmalcontent-ui/user-controls.ui:67 msgid "Restrict _Web Browsers" msgstr "Batasi Peramban _Web" #: libmalcontent-ui/user-controls.ui:151 msgid "_Restrict Applications" msgstr "_Batasi Aplikasi" #: libmalcontent-ui/user-controls.ui:230 msgid "Software Installation Restrictions" msgstr "Pembatasan Instalasi Perangkat Lunak" #: libmalcontent-ui/user-controls.ui:280 msgid "Restrict Application _Installation" msgstr "Batasi _Instalasi Aplikasi" #: libmalcontent-ui/user-controls.ui:365 msgid "Application _Suitability" msgstr "Ke_sesuaian Aplikasi" #: libmalcontent-ui/user-controls.ui:387 msgid "" "Restricts browsing or installation of applications to applications suitable " "for certain ages or above." msgstr "" "Membatasi penjelajahan atau pemasangan aplikasi ke aplikasi yang sesuai " "untuk usia tertentu atau di atas." #. Translators: This documents the --user command line option to malcontent-control: #: malcontent-control/application.c:102 msgid "User to select in the UI" msgstr "Pengguna yang dipilih dalam UI" #. Translators: This is a placeholder for a command line argument value: #: malcontent-control/application.c:104 msgid "USERNAME" msgstr "NAMAPENGGUNA" #: malcontent-control/application.c:115 msgid "— view and edit parental controls" msgstr "— tilik dan kelola pengawasan orang tua" #. Translators: This is the title of the main window #. Translators: the name of the application as it appears in a software center #: malcontent-control/application.c:122 malcontent-control/main.ui:12 #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:9 #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:3 msgid "Parental Controls" msgstr "Pengawasan Orang Tua" #: malcontent-control/application.c:308 msgid "Copyright © 2019, 2020 Endless Mobile, Inc." msgstr "Hak cipta © 2019, 2020 Endless Mobile, Inc." #. Translators: this should be "translated" to the #. names of people who have translated Malcontent into #. this language, one per line. #: malcontent-control/application.c:313 msgid "translator-credits" msgstr "Andika Triwidada , 2020, 2021." #. Translators: "Malcontent" is the brand name of this #. project, so should not be translated. #: malcontent-control/application.c:319 msgid "Malcontent Website" msgstr "Situs Web Malcontent" #: malcontent-control/application.c:337 msgid "The help contents could not be displayed" msgstr "Isi bantuan tidak dapat ditampilkan" #: malcontent-control/application.c:374 msgid "Failed to load user data from the system" msgstr "Gagal memuat data pengguna dari sistem" #: malcontent-control/application.c:376 msgid "Please make sure that the AccountsService is installed and enabled." msgstr "Harap pastikan bahwa AccountsService diinstal dan diaktifkan." #. Translators: Replace the link to commonsensemedia.org with some #. * localised guidance for parents/carers on how to set restrictions on #. * their child/caree in a responsible way which is in keeping with the #. * best practice and culture of the region. If no suitable localised #. * guidance exists, and if the default commonsensemedia.org link is not #. * suitable, please file an issue against malcontent so we can discuss #. * further! #. * https://gitlab.freedesktop.org/pwithnall/malcontent/-/issues/new #. #: malcontent-control/application.c:407 #, c-format msgid "" "It’s recommended that restrictions are set as part of an ongoing " "conversation with %s. Read guidance on what to consider." msgstr "" "Disarankan agar pembatasan ditetapkan sebagai bagian dari percakapan yang " "sedang berlangsung dengan %s. Baca panduan tentang apa yang harus " "dipertimbangkan." #: malcontent-control/carousel.ui:48 msgid "Previous Page" msgstr "Halaman Sebelumnya" #: malcontent-control/carousel.ui:74 msgid "Next Page" msgstr "Halaman Selanjutnya" #: malcontent-control/main.ui:115 msgid "Permission Required" msgstr "Diperlukan Izin" #: malcontent-control/main.ui:129 msgid "" "Permission is required to view and change user parental controls settings." msgstr "" "Diperlukan izin untuk melihat dan mengubah pengaturan kontrol orang tua " "pengguna." #: malcontent-control/main.ui:184 msgid "No Standard User Accounts" msgstr "Tidak Ada Akun Pengguna Standar" #: malcontent-control/main.ui:199 msgid "" "Parental controls can only be applied to standard user\n" "accounts. These can be created in the user settings." msgstr "" "Pengawasan orang tua hanya dapat diterapkan pada akun\n" "pengguna standar. Ini dapat dibuat di pengaturan pengguna." #: malcontent-control/main.ui:212 msgid "_User Settings" msgstr "Pengat_uran Pengguna" #: malcontent-control/main.ui:242 msgid "Loading…" msgstr "Memuat…" #: malcontent-control/main.ui:305 msgid "_Help" msgstr "Ba_ntuan" #: malcontent-control/main.ui:309 msgid "_About Parental Controls" msgstr "Tent_ang Pengawasan Orang Tua" #. Translators: the brief summary of the application as it appears in a software center. #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:12 #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:4 msgid "Set parental controls and monitor usage by users" msgstr "Tata kontrol orangtua dan pantau pemakaian oleh pengguna" #. Translators: These are the application description paragraphs in the AppData file. #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:16 msgid "" "Manage users’ parental controls restrictions, controlling how long they can " "use the computer for, what software they can install, and what installed " "software they can run." msgstr "" "Kelola pembatasan kontrol orang tua pengguna, mengontrol berapa lama mereka " "dapat menggunakan komputer, perangkat lunak apa yang dapat mereka instal, " "dan perangkat lunak terinstal mana yang dapat mereka jalankan." #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:25 msgid "Main window" msgstr "Jendela utama" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:38 msgid "The GNOME Project" msgstr "Projek GNOME" #. Translators: Search terms to find this application. Do NOT translate or localise the semicolons! The list MUST also end with a semicolon! #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:13 msgid "" "parental controls;screen time;app restrictions;web browser restrictions;oars;" "usage;usage limit;kid;child;" msgstr "" "kontrol orang tua;waktu layar;pembatasan aplikasi;pembatasan peramban web;" "oars;penggunaan;batas penggunaan;anak;" #: malcontent-control/org.freedesktop.MalcontentControl.policy.in:9 msgid "Manage parental controls" msgstr "Kelola kontrol orangtua" #: malcontent-control/org.freedesktop.MalcontentControl.policy.in:10 msgid "Authentication is required to read and change user parental controls" msgstr "" "Diperlukan autentikasi untuk membaca dan mengubah kontrol orangtua pengguna" #: malcontent-control/user-selector.c:426 msgid "Your account" msgstr "Akun Anda" #. Always allow root, to avoid a situation where this PAM module prevents #. * all users logging in with no way of recovery. #: pam/pam_malcontent.c:142 pam/pam_malcontent.c:188 #, c-format msgid "User ‘%s’ has no time limits enabled" msgstr "Pengguna '%s' tidak memiliki batas waktu yang diaktifkan" #: pam/pam_malcontent.c:151 pam/pam_malcontent.c:172 #, c-format msgid "Error getting session limits for user ‘%s’: %s" msgstr "Kesalahan saat mendapatkan batas sesi untuk pengguna '%s': %s" #: pam/pam_malcontent.c:182 #, c-format msgid "User ‘%s’ has no time remaining" msgstr "Pengguna '%s' tidak punya waktu tersisa" #: pam/pam_malcontent.c:200 #, c-format msgid "Error setting time limit on login session: %s" msgstr "Kesalahan pengaturan batas waktu pada sesi login: %s" malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/po/it.po000066400000000000000000000437301505556674000231750ustar00rootroot00000000000000# Italian translations for malcontent package. # Copyright (C) 2020, 2021 Free Software Foundation, Inc. # This file is distributed under the same license as the malcontent package. # Milo Casagrande , 2020, 2021. # Albano Battistella , 2022. # msgid "" msgstr "" "Project-Id-Version: malcontent\n" "Report-Msgid-Bugs-To: https://gitlab.freedesktop.org/pwithnall/malcontent/" "issues\n" "POT-Creation-Date: 2020-12-18 15:14+0000\n" "PO-Revision-Date: 2022-03-12 13:27+0100\n" "Last-Translator: Albano Battistella \n" "Language-Team: none\n" "Language: it\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Poedit 2.4.2\n" #: accounts-service/com.endlessm.ParentalControls.policy.in:4 msgid "Change your own app filter" msgstr "Modifica filtri app personali" #: accounts-service/com.endlessm.ParentalControls.policy.in:5 msgid "Authentication is required to change your app filter." msgstr "È richiesto autenticarsi per modificare i propri filtri app." #: accounts-service/com.endlessm.ParentalControls.policy.in:14 msgid "Read your own app filter" msgstr "Lettura dei filtri app personali" #: accounts-service/com.endlessm.ParentalControls.policy.in:15 msgid "Authentication is required to read your app filter." msgstr "È richiesto autenticarsi per leggere i propri filtri app." #: accounts-service/com.endlessm.ParentalControls.policy.in:24 msgid "Change another user’s app filter" msgstr "Modifica dei filtri app di un altro utente" #: accounts-service/com.endlessm.ParentalControls.policy.in:25 msgid "Authentication is required to change another user’s app filter." msgstr "" "È richiesto autenticarsi per modificare i filtri app di un altro utente." #: accounts-service/com.endlessm.ParentalControls.policy.in:34 msgid "Read another user’s app filter" msgstr "Lettura dei filtri app di un altro utente" #: accounts-service/com.endlessm.ParentalControls.policy.in:35 msgid "Authentication is required to read another user’s app filter." msgstr "È richiesto autenticarsi per leggere i filtri app di un altro utente." #: accounts-service/com.endlessm.ParentalControls.policy.in:44 msgid "Change your own session limits" msgstr "Modifica dei limiti di sessione personali" #: accounts-service/com.endlessm.ParentalControls.policy.in:45 msgid "Authentication is required to change your session limits." msgstr "È richiesto autenticarsi per modificare i propri limiti di sessione." #: accounts-service/com.endlessm.ParentalControls.policy.in:54 msgid "Read your own session limits" msgstr "Lettura limiti di sessione personali" #: accounts-service/com.endlessm.ParentalControls.policy.in:55 msgid "Authentication is required to read your session limits." msgstr "È richiesto autenticarsi per leggere i propri limiti di sessione." #: accounts-service/com.endlessm.ParentalControls.policy.in:64 msgid "Change another user’s session limits" msgstr "Modifica dei limiti di sessione di un altro utente" #: accounts-service/com.endlessm.ParentalControls.policy.in:65 msgid "Authentication is required to change another user’s session limits." msgstr "" "È richiesto autenticarsi per modificare i limiti di sessione di un altro " "utente." #: accounts-service/com.endlessm.ParentalControls.policy.in:74 msgid "Read another user’s session limits" msgstr "Lettura dei limiti di sessione di un altro utente" #: accounts-service/com.endlessm.ParentalControls.policy.in:75 msgid "Authentication is required to read another user’s session limits." msgstr "" "È richiesto autenticarsi per leggere i limiti di sessione di un altro utente." #: accounts-service/com.endlessm.ParentalControls.policy.in:84 msgid "Change your own account info" msgstr "Modifica delle informazioni dell'account personale" #: accounts-service/com.endlessm.ParentalControls.policy.in:85 msgid "Authentication is required to change your account info." msgstr "" "È richiesto autenticarsi per modificare le informazioni del proprio account." #: accounts-service/com.endlessm.ParentalControls.policy.in:94 msgid "Read your own account info" msgstr "Lettura delle informazioni dell'account personale" #: accounts-service/com.endlessm.ParentalControls.policy.in:95 msgid "Authentication is required to read your account info." msgstr "" "È richiesto autenticarsi per leggere le informazioni del proprio account." #: accounts-service/com.endlessm.ParentalControls.policy.in:104 msgid "Change another user’s account info" msgstr "Modifica delle informazioni dell'account di un altro utente" #: accounts-service/com.endlessm.ParentalControls.policy.in:105 msgid "Authentication is required to change another user’s account info." msgstr "" "È richiesto autenticarsi per modificare le informazioni dell'account di un " "altro utente." #: accounts-service/com.endlessm.ParentalControls.policy.in:114 msgid "Read another user’s account info" msgstr "Lettura delle informazioni dell'account di un altro utente" #: accounts-service/com.endlessm.ParentalControls.policy.in:115 msgid "Authentication is required to read another user’s account info." msgstr "" "È richiesto autenticarsi per leggere le informazioni dell'account di un " "altro utente." #: libmalcontent/app-filter.c:694 #, c-format msgid "App filter for user %u was in an unrecognized format" msgstr "Il filtro app per l'utente %u era in un formato non riconosciuto" #: libmalcontent/app-filter.c:725 #, c-format msgid "OARS filter for user %u has an unrecognized kind ‘%s’" msgstr "Il filtro OARS per l'utente %u presenta un tipo «%s» non riconosciuto" #: libmalcontent/manager.c:283 libmalcontent/manager.c:420 #: libmalcontent/manager.c:803 #, c-format msgid "Not allowed to query parental controls data for user %u" msgstr "" "Non è consentito richiedere i dati sui controlli parentali per l'utente %u" #: libmalcontent/manager.c:288 #, c-format msgid "User %u does not exist" msgstr "L'utente %u non esiste" #: libmalcontent/manager.c:296 msgid "System accounts service not available" msgstr "Servizio account di sistema non disponibile" #: libmalcontent/manager.c:402 msgid "App filtering is globally disabled" msgstr "I filtri sulle app sono disabilitati globalmente" #: libmalcontent/manager.c:785 msgid "Session limits are globally disabled" msgstr "I limiti sulla sessione sono disabilitati globalmente" #: libmalcontent/session-limits.c:306 #, c-format msgid "Session limit for user %u was in an unrecognized format" msgstr "" "Il limite di sessione per l'utente %u era in un formato non riconosciuto" #: libmalcontent/session-limits.c:328 #, c-format msgid "Session limit for user %u has an unrecognized type ‘%u’" msgstr "" "Il limite di sessione per l'utente %u presenta un tipo «%u» non riconosciuto" #: libmalcontent/session-limits.c:346 #, c-format msgid "Session limit for user %u has invalid daily schedule %u–%u" msgstr "" "Il limite di sessione per l'utente %u presenta una pianificazione " "giornaliera %u-%u non valida" #. TRANSLATORS: This is the formatting of English and localized name #. of the rating e.g. "Adults Only (solo adultos)" #: libmalcontent-ui/gs-content-rating.c:75 #, c-format msgid "%s (%s)" msgstr "%2$s (%1$s)" #: libmalcontent-ui/gs-content-rating.c:209 msgid "General" msgstr "Generale" #: libmalcontent-ui/gs-content-rating.c:218 msgid "ALL" msgstr "TUTTO" #: libmalcontent-ui/gs-content-rating.c:222 #: libmalcontent-ui/gs-content-rating.c:485 msgid "Adults Only" msgstr "Solo per adulti" #: libmalcontent-ui/gs-content-rating.c:224 #: libmalcontent-ui/gs-content-rating.c:484 msgid "Mature" msgstr "Maturo" #: libmalcontent-ui/gs-content-rating.c:226 #: libmalcontent-ui/gs-content-rating.c:483 msgid "Teen" msgstr "Adolescente" #: libmalcontent-ui/gs-content-rating.c:228 #: libmalcontent-ui/gs-content-rating.c:482 msgid "Everyone 10+" msgstr "Chiunque di 10+" #: libmalcontent-ui/gs-content-rating.c:230 #: libmalcontent-ui/gs-content-rating.c:481 msgid "Everyone" msgstr "Chiunque" #: libmalcontent-ui/gs-content-rating.c:232 #: libmalcontent-ui/gs-content-rating.c:480 msgid "Early Childhood" msgstr "Prima infanzia" #. Translators: the placeholder is a user’s full name #: libmalcontent-ui/restrict-applications-dialog.c:222 #, c-format msgid "Restrict %s from using the following installed applications." msgstr "Limita l'uso delle seguenti applicazioni da parte dell'utente %s." #: libmalcontent-ui/restrict-applications-dialog.ui:6 #: libmalcontent-ui/restrict-applications-dialog.ui:12 msgid "Restrict Applications" msgstr "Limita applicazioni" #: libmalcontent-ui/restrict-applications-selector.ui:24 msgid "No applications found to restrict." msgstr "Non è stata trovata alcuna applicazione da limitare." #. Translators: this is the full name for an unknown user account. #: libmalcontent-ui/user-controls.c:207 libmalcontent-ui/user-controls.c:218 msgid "unknown" msgstr "sconosciuto" #: libmalcontent-ui/user-controls.c:312 libmalcontent-ui/user-controls.c:397 #: libmalcontent-ui/user-controls.c:669 msgid "All Ages" msgstr "Tutte le età" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:477 #, c-format msgid "" "Prevents %s from running web browsers. Limited web content may still be " "available in other applications." msgstr "" "Impedisce all'utente %s di lanciare browser web. Contenuti web limitati " "possono comunque essere accessibili in altre applicazioni." #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:482 #, c-format msgid "Prevents specified applications from being used by %s." msgstr "Impedisce all'utente %s di utilizzare applicazioni specifiche." #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:487 #, c-format msgid "Prevents %s from installing applications." msgstr "Impedisce all'utente %s di installare applicazioni." #: libmalcontent-ui/user-controls.ui:16 msgid "Application Usage Restrictions" msgstr "Limitazioni utilizzo applicazioni" #: libmalcontent-ui/user-controls.ui:67 msgid "Restrict _Web Browsers" msgstr "Limita browser _web" #: libmalcontent-ui/user-controls.ui:151 msgid "_Restrict Applications" msgstr "_Limita applicazioni" #: libmalcontent-ui/user-controls.ui:230 msgid "Software Installation Restrictions" msgstr "Limitazioni installazione software" #: libmalcontent-ui/user-controls.ui:280 msgid "Restrict Application _Installation" msgstr "Limita _installazione applicazioni" #: libmalcontent-ui/user-controls.ui:365 msgid "Application _Suitability" msgstr "Co_mpatibilità applicazioni" #: libmalcontent-ui/user-controls.ui:387 msgid "" "Restricts browsing or installation of applications to applications suitable " "for certain ages or above." msgstr "" "Limita l'esplorazione o l'installazione di applicazioni a solo quelle " "compatibili con certe fasce d'età." #. Translators: This documents the --user command line option to malcontent-control: #: malcontent-control/application.c:102 msgid "User to select in the UI" msgstr "Utente da selezionare nell'interfaccia utente" #. Translators: This is a placeholder for a command line argument value: #: malcontent-control/application.c:104 msgid "USERNAME" msgstr "NOMEUTENTE" #: malcontent-control/application.c:115 msgid "— view and edit parental controls" msgstr "— Visualizza e modifica i controlli parentali" #. Translators: This is the title of the main window #. Translators: the name of the application as it appears in a software center #: malcontent-control/application.c:122 malcontent-control/main.ui:12 #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:9 #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:3 msgid "Parental Controls" msgstr "Controlli parentali" #: malcontent-control/application.c:308 msgid "Copyright © 2019, 2020 Endless Mobile, Inc." msgstr "Copyright © 2019, 2020 Endless Mobile, Inc." #. Translators: this should be "translated" to the #. names of people who have translated Malcontent into #. this language, one per line. #: malcontent-control/application.c:313 msgid "translator-credits" msgstr "Milo Casagrande , 2020, Albano Battistella,2022" #. Translators: "Malcontent" is the brand name of this #. project, so should not be translated. #: malcontent-control/application.c:319 msgid "Malcontent Website" msgstr "Sito web di Malcontent" #: malcontent-control/application.c:337 msgid "The help contents could not be displayed" msgstr "I contenuti dell'aiuto non possono essere visualizzati" #: malcontent-control/application.c:374 msgid "Failed to load user data from the system" msgstr "Caricamento dei dati utente dal sistema non riuscito" #: malcontent-control/application.c:376 msgid "Please make sure that the AccountsService is installed and enabled." msgstr "" "Assicurarsi che il servizio AccountsService sia installato e abilitato." #. Translators: Replace the link to commonsensemedia.org with some #. * localised guidance for parents/carers on how to set restrictions on #. * their child/caree in a responsible way which is in keeping with the #. * best practice and culture of the region. If no suitable localised #. * guidance exists, and if the default commonsensemedia.org link is not #. * suitable, please file an issue against malcontent so we can discuss #. * further! #. * https://gitlab.freedesktop.org/pwithnall/malcontent/-/issues/new #. #: malcontent-control/application.c:407 #, c-format msgid "" "It’s recommended that restrictions are set as part of an ongoing " "conversation with %s. Read guidance on what to consider." msgstr "" "Si consiglia di impostare le restrizioni come parte di una conversazione " "attiva con %s. Per maggiori informazioni su cosa considerare per le " "restrizioni, è possibile consultare questa guida." #: malcontent-control/carousel.ui:48 msgid "Previous Page" msgstr "Pagina precedente" #: malcontent-control/carousel.ui:74 msgid "Next Page" msgstr "Pagina successiva" #: malcontent-control/main.ui:115 msgid "Permission Required" msgstr "Richiesti permessi" #: malcontent-control/main.ui:129 msgid "" "Permission is required to view and change user parental controls settings." msgstr "" "È richiesto avere i permessi necessari per visualizzare e modificare i " "controlli parentali dell'utente." #: malcontent-control/main.ui:184 msgid "No Standard User Accounts" msgstr "Nessun account utente standard" #: malcontent-control/main.ui:199 msgid "" "Parental controls can only be applied to standard user\n" "accounts. These can be created in the user settings." msgstr "" "I controlli parentali possono essere applicati solo agli account utenti\n" "standard. Questi possono essere creati nelle impostazioni utente." #: malcontent-control/main.ui:212 msgid "_User Settings" msgstr "Impostazioni _utente" #: malcontent-control/main.ui:242 msgid "Loading…" msgstr "Caricamento…" #: malcontent-control/main.ui:305 msgid "_Help" msgstr "A_iuto" #: malcontent-control/main.ui:309 msgid "_About Parental Controls" msgstr "I_nformazioni su Controlli parentali" #. Translators: the brief summary of the application as it appears in a software center. #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:12 #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:4 msgid "Set parental controls and monitor usage by users" msgstr "Imposta i controlli parentali e monitora l'utilizzo degli utenti" #. Translators: These are the application description paragraphs in the AppData file. #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:16 msgid "" "Manage users’ parental controls restrictions, controlling how long they can " "use the computer for, what software they can install, and what installed " "software they can run." msgstr "" "Gestisce i limiti sui controlli parentali dell'utente, controllando per " "quanto tempo possono usare il computer, che software possono installare e " "quali applicazioni installate possono usare." #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:25 msgid "Main window" msgstr "Finestra principale" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:38 msgid "The GNOME Project" msgstr "Il progetto GNOME" #. Translators: Search terms to find this application. Do NOT translate or localise the semicolons! The list MUST also end with a semicolon! #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:13 msgid "" "parental controls;screen time;app restrictions;web browser restrictions;oars;" "usage;usage limit;kid;child;" msgstr "" "controlli parentali;tempo schermo;tempo utilizzo;limitazione app;limitazioni " "browser web;utilizzo;limite utilizzo;utilizzazione;bambino;bambina;ragazzo;" "ragazza;" #: malcontent-control/org.freedesktop.MalcontentControl.policy.in:9 msgid "Manage parental controls" msgstr "Gestione controlli parentali" #: malcontent-control/org.freedesktop.MalcontentControl.policy.in:10 msgid "Authentication is required to read and change user parental controls" msgstr "" "È richiesto autenticarsi per leggere e modificare i controlli parentali" #: malcontent-control/user-selector.c:426 msgid "Your account" msgstr "Il proprio account" #. Always allow root, to avoid a situation where this PAM module prevents #. * all users logging in with no way of recovery. #: pam/pam_malcontent.c:142 pam/pam_malcontent.c:188 #, c-format msgid "User ‘%s’ has no time limits enabled" msgstr "L'utente «%s» non ha alcun limite di tempo abilitato" #: pam/pam_malcontent.c:151 pam/pam_malcontent.c:172 #, c-format msgid "Error getting session limits for user ‘%s’: %s" msgstr "Errore nell'ottenere i limiti di sessione per l'utente «%s»: %s" #: pam/pam_malcontent.c:182 #, c-format msgid "User ‘%s’ has no time remaining" msgstr "L'utente «%s» non ha più tempo disponibile" #: pam/pam_malcontent.c:200 #, c-format msgid "Error setting time limit on login session: %s" msgstr "Errore nell'impostare il tempo limite sulla sessione di accesso: %s" malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/po/ka.po000066400000000000000000000574151505556674000231610ustar00rootroot00000000000000# Georgian translations for malcontent package. # Copyright (C) 2022 THE malcontent'S COPYRIGHT HOLDER # This file is distributed under the same license as the malcontent package. # Temuri Doghonadze , 2020. # msgid "" msgstr "" "Project-Id-Version: malcontent\n" "Report-Msgid-Bugs-To: https://gitlab.freedesktop.org/pwithnall/malcontent/" "issues\n" "POT-Creation-Date: 2021-09-18 12:41+0000\n" "PO-Revision-Date: 2022-09-14 09:48+0200\n" "Last-Translator: Temuri Doghonadze \n" "Language-Team: Georgian <(nothing)>\n" "Language: ka\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Poedit 3.1.1\n" #: accounts-service/com.endlessm.ParentalControls.policy.in:4 msgid "Change your own app filter" msgstr "შეცვალეთ თქვენი საკუთარი აპის ფილტრი" #: accounts-service/com.endlessm.ParentalControls.policy.in:5 msgid "Authentication is required to change your app filter." msgstr "თქვენი აპის ფილტრის შესაცვლელად საჭიროა ავთენტიკაცია." #: accounts-service/com.endlessm.ParentalControls.policy.in:14 msgid "Read your own app filter" msgstr "წაიკთხეთ თქვენი საკუთარი აპის ფილტრი" #: accounts-service/com.endlessm.ParentalControls.policy.in:15 msgid "Authentication is required to read your app filter." msgstr "თქვენი აპის ფილტრის წასაკითხად საჭიროა ავთენტიკაცია." #: accounts-service/com.endlessm.ParentalControls.policy.in:24 msgid "Change another user’s app filter" msgstr "სხვა მომხმარებლის აპის ფილტრის შეცვლა" #: accounts-service/com.endlessm.ParentalControls.policy.in:25 msgid "Authentication is required to change another user’s app filter." msgstr "სხვა მომხმარებლის აპის ფილტრის შესაცვლელად ავთენტიკაციაა საჭირო." #: accounts-service/com.endlessm.ParentalControls.policy.in:34 msgid "Read another user’s app filter" msgstr "სხვა მომხმარებლის აპის ფილტრის წაკითხვა" #: accounts-service/com.endlessm.ParentalControls.policy.in:35 msgid "Authentication is required to read another user’s app filter." msgstr "სხვა მომხმარებლის აპის ფილტრის წასაკითხად ავთენტიკაციაა საჭირო." #: accounts-service/com.endlessm.ParentalControls.policy.in:44 msgid "Change your own session limits" msgstr "თქვენი საკუთარი სესიის ლიმიტების შეცვლა" #: accounts-service/com.endlessm.ParentalControls.policy.in:45 msgid "Authentication is required to change your session limits." msgstr "თქვენი საკუთარი სესიის ლიმიტების შესაცვლელად ავთენთიკაციაა საჭირო." #: accounts-service/com.endlessm.ParentalControls.policy.in:54 msgid "Read your own session limits" msgstr "თქვენი საკუთარი სესიის ლიმიტების შეცვლა" #: accounts-service/com.endlessm.ParentalControls.policy.in:55 msgid "Authentication is required to read your session limits." msgstr "თქვენი საკუთარი სესიის ლიმიტების წასაკითხად ავთენთიკაციაა საჭირო." #: accounts-service/com.endlessm.ParentalControls.policy.in:64 msgid "Change another user’s session limits" msgstr "სხვა მომხმარებლის სესიის ლიმიტების შეცვლა" #: accounts-service/com.endlessm.ParentalControls.policy.in:65 msgid "Authentication is required to change another user’s session limits." msgstr "სხვა მომხმარებლის სესიის ლიმიტების შესაცვლელად ავთენტიკაციაა საჭირო." #: accounts-service/com.endlessm.ParentalControls.policy.in:74 msgid "Read another user’s session limits" msgstr "სხვა მომხმარებლის სესიის ლიმიტების წაკითხვა" #: accounts-service/com.endlessm.ParentalControls.policy.in:75 msgid "Authentication is required to read another user’s session limits." msgstr "სხვა მომხმარებლის სესიის ლიმიტების წასაკითხად ავთენტიკაციაა საჭირო." #: accounts-service/com.endlessm.ParentalControls.policy.in:84 msgid "Change your own account info" msgstr "თქვენი საკუთარი ანგარიშის ინფორმაციის შეცვლა" #: accounts-service/com.endlessm.ParentalControls.policy.in:85 msgid "Authentication is required to change your account info." msgstr "" "თქვენი საკუთარი ანგარიშის ინფორმაციის შესაცვლელად ავთენთიკაციაა საჭირო." #: accounts-service/com.endlessm.ParentalControls.policy.in:94 msgid "Read your own account info" msgstr "თქვენი საკუთარი ანგარიშის ინფორმაციის წაკითხვა" #: accounts-service/com.endlessm.ParentalControls.policy.in:95 msgid "Authentication is required to read your account info." msgstr "თქვენი საკუთარი ანგარიშის ინფორმაციის წასაკითხად ავთენთიკაციაა საჭირო." #: accounts-service/com.endlessm.ParentalControls.policy.in:104 msgid "Change another user’s account info" msgstr "სხვა მომხმარებლის ანგარიშის ინფორმაციის შეცვლა" #: accounts-service/com.endlessm.ParentalControls.policy.in:105 msgid "Authentication is required to change another user’s account info." msgstr "" "სხვა მომხმარებლის ანგარიშის ინფორმაციის შესაცვლელად ავთენტიკაციაა საჭირო." #: accounts-service/com.endlessm.ParentalControls.policy.in:114 msgid "Read another user’s account info" msgstr "სხვა მომხმარებლის ანგარიშის ინფორმაციის წაკითხვა" #: accounts-service/com.endlessm.ParentalControls.policy.in:115 msgid "Authentication is required to read another user’s account info." msgstr "" "სხვა მომხმარებლის ანგარიშის ინფორმაციის წასაკითხად ავთენტიკაციაა საჭირო." #: libmalcontent/app-filter.c:694 #, c-format msgid "App filter for user %u was in an unrecognized format" msgstr "აპის ფილტრი მომხმარებლისთვის %u უცნობი ფორმატითაა" #: libmalcontent/app-filter.c:725 #, c-format msgid "OARS filter for user %u has an unrecognized kind ‘%s’" msgstr "OARS ფილტრი მომხმარებლისთვის %u უცნობი სახისაა: '%s'" #: libmalcontent/manager.c:283 libmalcontent/manager.c:420 #: libmalcontent/manager.c:803 #, c-format msgid "Not allowed to query parental controls data for user %u" msgstr "" "მშობლების კონტროლის მონაცემების გამოთხოვა მომხმარებლისთვის %u დაშვებული არაა" #: libmalcontent/manager.c:288 #, c-format msgid "User %u does not exist" msgstr "მომხმარებელი %u არ არსებობს" #: libmalcontent/manager.c:296 msgid "System accounts service not available" msgstr "სისტემური ანგარიშების სერვისი მიუწვდომელია" #: libmalcontent/manager.c:402 msgid "App filtering is globally disabled" msgstr "აპის გაფილტვრა გლობალურადაა გათიშული" #: libmalcontent/manager.c:785 msgid "Session limits are globally disabled" msgstr "სესიის ლიმიტები გლობალურადაა გათიშული" #: libmalcontent/session-limits.c:306 #, c-format msgid "Session limit for user %u was in an unrecognized format" msgstr "მომხმარებლისთვის %u სესიის ლიმიტი უცნობ ფორმატშია" #: libmalcontent/session-limits.c:328 #, c-format msgid "Session limit for user %u has an unrecognized type ‘%u’" msgstr "მომხმარებლისთვის %u სესიის ლიმიტის ტიპი (%u) უცნობია" #: libmalcontent/session-limits.c:346 #, c-format msgid "Session limit for user %u has invalid daily schedule %u–%u" msgstr "" "სესიის ლიმიტს მომხმარებლისთვის %u არასწორი დღიური გრაფიკი(%u–%u) გააჩნია" #. TRANSLATORS: This is the formatting of English and localized name #. of the rating e.g. "Adults Only (solo adultos)" #: libmalcontent-ui/gs-content-rating.c:75 #, c-format msgid "%s (%s)" msgstr "%s (%s)" #: libmalcontent-ui/gs-content-rating.c:209 msgid "General" msgstr "ზოგადი" #: libmalcontent-ui/gs-content-rating.c:218 msgid "ALL" msgstr "ყველა" #: libmalcontent-ui/gs-content-rating.c:222 #: libmalcontent-ui/gs-content-rating.c:485 msgid "Adults Only" msgstr "მხოლოდ დიდებისთვის" #: libmalcontent-ui/gs-content-rating.c:224 #: libmalcontent-ui/gs-content-rating.c:484 msgid "Mature" msgstr "ასაკიანები" #: libmalcontent-ui/gs-content-rating.c:226 #: libmalcontent-ui/gs-content-rating.c:483 msgid "Teen" msgstr "მოზარდები" #: libmalcontent-ui/gs-content-rating.c:228 #: libmalcontent-ui/gs-content-rating.c:482 msgid "Everyone 10+" msgstr "ყველა 10+" #: libmalcontent-ui/gs-content-rating.c:230 #: libmalcontent-ui/gs-content-rating.c:481 msgid "Everyone" msgstr "ყველა" #: libmalcontent-ui/gs-content-rating.c:232 #: libmalcontent-ui/gs-content-rating.c:480 msgid "Early Childhood" msgstr "პტარა ბავშვები" #. Translators: the placeholder is a user’s full name #: libmalcontent-ui/restrict-applications-dialog.c:222 #, c-format msgid "Restrict %s from using the following installed applications." msgstr "%s-სთვის მითითებული დაყენებული აპლიკაციების გამოყენების აკრძალვა." #: libmalcontent-ui/restrict-applications-dialog.ui:6 #: libmalcontent-ui/restrict-applications-dialog.ui:12 msgid "Restrict Applications" msgstr "აპლიკაციების შეზღუდვა" #: libmalcontent-ui/restrict-applications-selector.ui:24 msgid "No applications found to restrict." msgstr "შესაზღუდი აპლიკაციების გარეშე." #. Translators: this is the full name for an unknown user account. #: libmalcontent-ui/user-controls.c:207 libmalcontent-ui/user-controls.c:218 msgid "unknown" msgstr "უცნობი" #: libmalcontent-ui/user-controls.c:312 libmalcontent-ui/user-controls.c:397 #: libmalcontent-ui/user-controls.c:669 msgid "All Ages" msgstr "ყველა ასაკი" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:477 #, c-format msgid "" "Prevents %s from running web browsers. Limited web content may still be " "available in other applications." msgstr "" "%s-სთვის ბრაუზერების გაშვების აკრძალვა. სხვა აპლიკაციებში შეზღუდული ვებ-" "შემცველობა მაინც შეიძლება ხელმისაწვდომი იყოს." #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:482 #, c-format msgid "Prevents specified applications from being used by %s." msgstr "%s-სთვის მითითებული აპლიკაციების გამოყენების აკრძალვა." #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:487 #, c-format msgid "Prevents %s from installing applications." msgstr "%s-სთვის აპლიკაციების დაყენების უფლების წართმევა." #: libmalcontent-ui/user-controls.ui:16 msgid "Application Usage Restrictions" msgstr "აპლიკაციის გამოყენების შეზღუდვები" #: libmalcontent-ui/user-controls.ui:67 msgid "Restrict _Web Browsers" msgstr "_ვებ ბრაუზერების შეზღუდვა" #: libmalcontent-ui/user-controls.ui:151 msgid "_Restrict Applications" msgstr "აპლიკაციების _შეზღუდვა" #: libmalcontent-ui/user-controls.ui:230 msgid "Software Installation Restrictions" msgstr "პროგრამების დაყენების შეზღუდვები" #: libmalcontent-ui/user-controls.ui:280 msgid "Restrict Application _Installation" msgstr "აპლიკაციების _დაყენების შეზღუდვა" #: libmalcontent-ui/user-controls.ui:365 msgid "Application _Suitability" msgstr "აპლიკაციის _შესაბამისობა" #: libmalcontent-ui/user-controls.ui:387 msgid "" "Restricts browsing or installation of applications to applications suitable " "for certain ages or above." msgstr "" "ზღუდავს აპლიკაციების დათვალიერებას ან დაყენებას გარკვეული ასაკამდე ან ქვემოთ." #. Translators: This documents the --user command line option to malcontent-control: #: malcontent-control/application.c:102 msgid "User to select in the UI" msgstr "UI-ში ასარჩევი მომხმარებელი" #. Translators: This is a placeholder for a command line argument value: #: malcontent-control/application.c:104 msgid "USERNAME" msgstr "მომხმარებლის სახელი" #: malcontent-control/application.c:115 msgid "— view and edit parental controls" msgstr "— მშობლის კონტროლების ნახვა და ჩასწორება" #. Translators: This is the title of the main window #. Translators: the name of the application as it appears in a software center #: malcontent-control/application.c:122 malcontent-control/main.ui:12 #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:9 #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:3 msgid "Parental Controls" msgstr "მშობლის კონტროლი" #: malcontent-control/application.c:308 msgid "Copyright © 2019, 2020 Endless Mobile, Inc." msgstr "© 2019, 2020 Endless Mobile, Inc., ყველა უფლება დაცულია." #. Translators: this should be "translated" to the #. names of people who have translated Malcontent into #. this language, one per line. #: malcontent-control/application.c:313 msgid "translator-credits" msgstr "თემური დოღონაძე" #. Translators: "Malcontent" is the brand name of this #. project, so should not be translated. #: malcontent-control/application.c:319 msgid "Malcontent Website" msgstr "Malcontent -ის ვებგვერდი" #: malcontent-control/application.c:337 msgid "The help contents could not be displayed" msgstr "დახმარების შემცველობის ჩვენება შეუძლებელია" #: malcontent-control/application.c:374 msgid "Failed to load user data from the system" msgstr "სისტემიდან მომხმარებლის მონაცემების წაკითხვის შეცდომა" #: malcontent-control/application.c:376 msgid "Please make sure that the AccountsService is installed and enabled." msgstr "დარწმუნდით, რომ AccountService დაყენებული და ჩართულია." #. Translators: Replace the link to commonsensemedia.org with some #. * localised guidance for parents/carers on how to set restrictions on #. * their child/caree in a responsible way which is in keeping with the #. * best practice and culture of the region. If no suitable localised #. * guidance exists, and if the default commonsensemedia.org link is not #. * suitable, please file an issue against malcontent so we can discuss #. * further! #. * https://gitlab.freedesktop.org/pwithnall/malcontent/-/issues/new #. #: malcontent-control/application.c:407 #, c-format msgid "" "It’s recommended that restrictions are set as part of an ongoing " "conversation with %s. Read guidance on what to consider." msgstr "" "რეკომენდებულია, რომ შეზღუდვები %s-სთან მიმდინარე საუბრის ნაწილი იყოს. წაიკითხეთ, რა უნდა გაითვალისწინოთ." #: malcontent-control/carousel.ui:48 msgid "Previous Page" msgstr "წინა გვერდი" #: malcontent-control/carousel.ui:74 msgid "Next Page" msgstr "შემდეგი გვერდი" #: malcontent-control/main.ui:115 msgid "Permission Required" msgstr "საჭიროა წვდომის უფლება" #: malcontent-control/main.ui:129 msgid "" "Permission is required to view and change user parental controls settings." msgstr "" "მომხმარებლის მშობლის კონტროლის პარამეტრების შესაცვლელად საჭირო წვდომა არ " "გაგაჩნიათ." #: malcontent-control/main.ui:184 msgid "No Standard User Accounts" msgstr "სტანდარტული მომხმარებლის ანგარიშების გარეშე" #: malcontent-control/main.ui:199 msgid "" "Parental controls can only be applied to standard user\n" "accounts. These can be created in the user settings." msgstr "" "მშობლის კონტროლის პოლიტიკის გადატარება მხოლოდ ჩვეულებრივ\n" "მომხმარებლებზე შეიძლება. მათი შექმნა მომხმარებლის პარამეტრებში შეგიძლიათ." #: malcontent-control/main.ui:212 msgid "_User Settings" msgstr "_მომხმარებლის პარამეტრები" #: malcontent-control/main.ui:242 msgid "Loading…" msgstr "ჩატვირთვა…" #: malcontent-control/main.ui:305 msgid "_Help" msgstr "და_ხმარება" #: malcontent-control/main.ui:309 msgid "_About Parental Controls" msgstr "მშობლის კონტროლის _შესახებ" #. Translators: the brief summary of the application as it appears in a software center. #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:12 #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:4 msgid "Set parental controls and monitor usage by users" msgstr "დააყენეთ მშობლის კონტროლი და აკონტროლეთ მომხმარებლების ქცევა" #. Translators: These are the application description paragraphs in the AppData file. #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:16 msgid "" "Manage users’ parental controls restrictions, controlling how long they can " "use the computer for, what software they can install, and what installed " "software they can run." msgstr "" "მართეთ მომხმარებლის მშობლის კონტროლის შეზღუდვები. აკონტროლეთ, რამდენ ხანს " "შეუძლიათ, ისარგებლონ კომპიუტერით, რა პროგრამების დაყენება შეუძლიათ და " "დაყენებული პროგრამებიდან რისი გაშვება შეუძლიათ." #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:25 msgid "Main window" msgstr "მთავარი ფანჯარა" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:38 msgid "The GNOME Project" msgstr "პროექტი \"GNOME\"" #. Translators: Search terms to find this application. Do NOT translate or localise the semicolons! The list MUST also end with a semicolon! #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:14 msgid "" "parental controls;screen time;app restrictions;web browser restrictions;oars;" "usage;usage limit;kid;child;" msgstr "" "parental controls;screen time;app restrictions;web browser restrictions;oars;" "usage;usage limit;kid;child;" #: malcontent-control/org.freedesktop.MalcontentControl.policy.in:9 msgid "Manage parental controls" msgstr "მშობლის კონტროლის მართვა" #: malcontent-control/org.freedesktop.MalcontentControl.policy.in:10 msgid "Authentication is required to read and change user parental controls" msgstr "" "მომხმარებლის მშობლის კონტროლის წასაკითხად და შესაცვლელად ავთენტიკაციაა საჭირო" #: malcontent-control/user-selector.c:426 msgid "Your account" msgstr "თქვენი ანგარიში" #. Always allow root, to avoid a situation where this PAM module prevents #. * all users logging in with no way of recovery. #: pam/pam_malcontent.c:142 pam/pam_malcontent.c:188 #, c-format msgid "User ‘%s’ has no time limits enabled" msgstr "მომხმარებელს \"%s\" დროის ლიმიტები ჩართული არ აქვს" #: pam/pam_malcontent.c:151 pam/pam_malcontent.c:172 #, c-format msgid "Error getting session limits for user ‘%s’: %s" msgstr "მომხმარებლისთვის '%s' სესიის ლიმიტების მიღების შეცდომა: %s" #: pam/pam_malcontent.c:182 #, c-format msgid "User ‘%s’ has no time remaining" msgstr "მომხმარებელს \"%s\" დრო დარჩენილი არ აქვს" #: pam/pam_malcontent.c:200 #, c-format msgid "Error setting time limit on login session: %s" msgstr "შესვლის სესიაზე დროის ლიმიტის დაყენების შეცდომა: %s" malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/po/kk.po000066400000000000000000000415531505556674000231670ustar00rootroot00000000000000# Kazakh translations for malcontent package. # Copyright (C) 2020 THE malcontent'S COPYRIGHT HOLDER # This file is distributed under the same license as the malcontent package. # Automatically generated, 2020. # msgid "" msgstr "" "Project-Id-Version: malcontent\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-06-10 12:04+0100\n" "PO-Revision-Date: 2020-04-15 13:42+0100\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: kk\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: accounts-service/com.endlessm.ParentalControls.policy.in:4 msgid "Change your own app filter" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:5 msgid "Authentication is required to change your app filter." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:14 msgid "Read your own app filter" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:15 msgid "Authentication is required to read your app filter." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:24 msgid "Change another user’s app filter" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:25 msgid "Authentication is required to change another user’s app filter." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:34 msgid "Read another user’s app filter" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:35 msgid "Authentication is required to read another user’s app filter." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:44 msgid "Change your own session limits" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:45 msgid "Authentication is required to change your session limits." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:54 msgid "Read your own session limits" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:55 msgid "Authentication is required to read your session limits." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:64 msgid "Change another user’s session limits" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:65 msgid "Authentication is required to change another user’s session limits." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:74 msgid "Read another user’s session limits" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:75 msgid "Authentication is required to read another user’s session limits." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:84 msgid "Change your own account info" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:85 msgid "Authentication is required to change your account info." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:94 msgid "Read your own account info" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:95 msgid "Authentication is required to read your account info." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:104 msgid "Change another user’s account info" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:105 msgid "Authentication is required to change another user’s account info." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:114 msgid "Read another user’s account info" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:115 msgid "Authentication is required to read another user’s account info." msgstr "" #: libmalcontent/app-filter.c:694 #, c-format msgid "App filter for user %u was in an unrecognized format" msgstr "" #: libmalcontent/app-filter.c:725 #, c-format msgid "OARS filter for user %u has an unrecognized kind ‘%s’" msgstr "" #: libmalcontent/manager.c:283 libmalcontent/manager.c:412 #, c-format msgid "Not allowed to query app filter data for user %u" msgstr "" #: libmalcontent/manager.c:288 #, c-format msgid "User %u does not exist" msgstr "" #: libmalcontent/manager.c:394 msgid "App filtering is globally disabled" msgstr "" #: libmalcontent/manager.c:777 msgid "Session limits are globally disabled" msgstr "" #: libmalcontent/manager.c:795 #, c-format msgid "Not allowed to query session limits data for user %u" msgstr "" #: libmalcontent/session-limits.c:306 #, c-format msgid "Session limit for user %u was in an unrecognized format" msgstr "" #: libmalcontent/session-limits.c:328 #, c-format msgid "Session limit for user %u has an unrecognized type ‘%u’" msgstr "" #: libmalcontent/session-limits.c:346 #, c-format msgid "Session limit for user %u has invalid daily schedule %u–%u" msgstr "" #. TRANSLATORS: This is the formatting of English and localized name #. of the rating e.g. "Adults Only (solo adultos)" #: libmalcontent-ui/gs-content-rating.c:75 #, c-format msgid "%s (%s)" msgstr "" #: libmalcontent-ui/gs-content-rating.c:209 msgid "General" msgstr "" #: libmalcontent-ui/gs-content-rating.c:218 msgid "ALL" msgstr "" #: libmalcontent-ui/gs-content-rating.c:222 #: libmalcontent-ui/gs-content-rating.c:485 msgid "Adults Only" msgstr "" #: libmalcontent-ui/gs-content-rating.c:224 #: libmalcontent-ui/gs-content-rating.c:484 msgid "Mature" msgstr "" #: libmalcontent-ui/gs-content-rating.c:226 #: libmalcontent-ui/gs-content-rating.c:483 msgid "Teen" msgstr "" #: libmalcontent-ui/gs-content-rating.c:228 #: libmalcontent-ui/gs-content-rating.c:482 msgid "Everyone 10+" msgstr "" #: libmalcontent-ui/gs-content-rating.c:230 #: libmalcontent-ui/gs-content-rating.c:481 msgid "Everyone" msgstr "" #: libmalcontent-ui/gs-content-rating.c:232 #: libmalcontent-ui/gs-content-rating.c:480 msgid "Early Childhood" msgstr "" #. Translators: the placeholder is a user’s full name #: libmalcontent-ui/restrict-applications-dialog.c:222 #, c-format msgid "Restrict %s from using the following installed applications." msgstr "" #: libmalcontent-ui/restrict-applications-dialog.ui:6 #: libmalcontent-ui/restrict-applications-dialog.ui:12 msgid "Restrict Applications" msgstr "" #: libmalcontent-ui/restrict-applications-selector.ui:24 msgid "No applications found to restrict." msgstr "" #. Translators: this is the full name for an unknown user account. #: libmalcontent-ui/user-controls.c:242 libmalcontent-ui/user-controls.c:253 msgid "unknown" msgstr "" #: libmalcontent-ui/user-controls.c:338 libmalcontent-ui/user-controls.c:425 #: libmalcontent-ui/user-controls.c:711 msgid "All Ages" msgstr "" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:514 #, c-format msgid "" "Prevents %s from running web browsers. Limited web content may still be " "available in other applications." msgstr "" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:519 #, c-format msgid "Prevents specified applications from being used by %s." msgstr "" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:524 #, c-format msgid "Prevents %s from installing applications." msgstr "" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:529 #, c-format msgid "Applications installed by %s will not appear for other users." msgstr "" #: libmalcontent-ui/user-controls.ui:17 msgid "Application Usage Restrictions" msgstr "" #: libmalcontent-ui/user-controls.ui:68 msgid "Restrict _Web Browsers" msgstr "" #: libmalcontent-ui/user-controls.ui:152 msgid "_Restrict Applications" msgstr "" #: libmalcontent-ui/user-controls.ui:231 msgid "Software Installation Restrictions" msgstr "" #: libmalcontent-ui/user-controls.ui:281 msgid "Restrict Application _Installation" msgstr "" #: libmalcontent-ui/user-controls.ui:366 msgid "Restrict Application Installation for _Others" msgstr "" #: libmalcontent-ui/user-controls.ui:451 msgid "Application _Suitability" msgstr "" #: libmalcontent-ui/user-controls.ui:473 msgid "" "Restricts browsing or installation of applications to applications suitable " "for certain ages or above." msgstr "" #. Translators: This is the title of the main window #. Translators: the name of the application as it appears in a software center #: malcontent-control/application.c:105 malcontent-control/main.ui:12 #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:9 #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:3 msgid "Parental Controls" msgstr "" #: malcontent-control/application.c:270 msgid "Copyright © 2019, 2020 Endless Mobile, Inc." msgstr "" #. Translators: this should be "translated" to the #. names of people who have translated Malcontent into #. this language, one per line. #: malcontent-control/application.c:275 msgid "translator-credits" msgstr "" #. Translators: "Malcontent" is the brand name of this #. project, so should not be translated. #: malcontent-control/application.c:281 msgid "Malcontent Website" msgstr "" #: malcontent-control/application.c:299 msgid "The help contents could not be displayed" msgstr "" #: malcontent-control/application.c:336 msgid "Failed to load user data from the system" msgstr "" #: malcontent-control/application.c:338 msgid "Please make sure that the AccountsService is installed and enabled." msgstr "" #: malcontent-control/carousel.ui:48 msgid "Previous Page" msgstr "" #: malcontent-control/carousel.ui:74 msgid "Next Page" msgstr "" #: malcontent-control/main.ui:93 msgid "Permission Required" msgstr "" #: malcontent-control/main.ui:107 msgid "" "Permission is required to view and change user parental controls settings." msgstr "" #: malcontent-control/main.ui:148 msgid "No Child Users Configured" msgstr "" #: malcontent-control/main.ui:162 msgid "" "No child users are currently set up on the system. Create one before setting " "up their parental controls." msgstr "" #: malcontent-control/main.ui:174 msgid "Create _Child User" msgstr "" #: malcontent-control/main.ui:202 msgid "Loading…" msgstr "" #: malcontent-control/main.ui:265 msgid "_Help" msgstr "Кө_мек" #: malcontent-control/main.ui:269 msgid "_About Parental Controls" msgstr "" #. Translators: the brief summary of the application as it appears in a software center. #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:12 #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:4 msgid "Set parental controls and monitor usage by users" msgstr "" #. Translators: These are the application description paragraphs in the AppData file. #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:16 msgid "" "Manage users’ parental controls restrictions, controlling how long they can " "use the computer for, what software they can install, and what installed " "software they can run." msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:39 msgid "The GNOME Project" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:50 #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:59 msgid "Minor improvements to parental controls application UI" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:51 msgid "Add a user manual" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:52 msgid "Translation updates" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:60 msgid "Translations to Ukrainian and Polish" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:67 msgid "Improve parental controls application UI and add icon" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:68 msgid "Support for indicating which accounts are parent accounts" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:75 msgid "Initial release of basic parental controls application" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:76 msgid "Support for setting app installation and run restrictions on users" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:83 msgid "Maintenance release of underlying parental controls library" msgstr "" #. Translators: Do NOT translate or transliterate this text (this is an icon file name)! #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:7 msgid "org.freedesktop.MalcontentControl" msgstr "" #. Translators: Search terms to find this application. Do NOT translate or localise the semicolons! The list MUST also end with a semicolon! #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:13 msgid "" "parental controls;screen time;app restrictions;web browser restrictions;oars;" "usage;usage limit;kid;child;" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.policy.in:9 msgid "Manage parental controls" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.policy.in:10 msgid "Authentication is required to read and change user parental controls" msgstr "" #: malcontent-control/user-selector.c:426 msgid "Your account" msgstr "Сіздің тіркелгіңіз" #. Always allow root, to avoid a situation where this PAM module prevents #. * all users logging in with no way of recovery. #: pam/pam_malcontent.c:142 pam/pam_malcontent.c:188 #, c-format msgid "User ‘%s’ has no time limits enabled" msgstr "" #: pam/pam_malcontent.c:151 pam/pam_malcontent.c:172 #, c-format msgid "Error getting session limits for user ‘%s’: %s" msgstr "" #: pam/pam_malcontent.c:182 #, c-format msgid "User ‘%s’ has no time remaining" msgstr "" #: pam/pam_malcontent.c:200 #, c-format msgid "Error setting time limit on login session: %s" msgstr "" #~ msgid "No references to alcohol" #~ msgstr "Алкогольге сілтемелер жоқ" #~ msgid "References to alcoholic beverages" #~ msgstr "Алкогольді өнімдеріне сілтемелер" #~ msgid "Use of alcoholic beverages" #~ msgstr "Алкогольді өнімдерін пайдалану" #~ msgid "References to tobacco products" #~ msgstr "Темекі өнімдеріне сілтемелер" #~ msgid "Use of tobacco products" #~ msgstr "Темекі өнімдерін пайдалану" #~ msgid "No advertising of any kind" #~ msgstr "Жарнаманың ешбір түрі жоқ" #~ msgid "Explicit references to specific brands or trademarked products" #~ msgstr "" #~ "Кейбір брендтер немесе сауда маркасымен қорғалған өнімдерге тікелей сілтеу" #~ msgid "Users are encouraged to purchase specific real-world items" #~ msgstr "Пайдаланушыларға шын әлемнен кейбір нәрселерді сатып алу ұсынылады" #~ msgid "No ability to spend money" #~ msgstr "Ақшаны жарату мүмкіндігі жоқ" #~ msgid "Users are encouraged to donate real money" #~ msgstr "Пайдаланушылар шын ақшаны жіберуге ұсынылады" #~ msgid "Ability to spend real money in-game" #~ msgstr "Ойынша шын ақшаны жарату мүмкіндігі" #~ msgid "No way to chat with other users" #~ msgstr "Басқа ойыншылармен чат мүмкін емес" #~ msgid "Moderated chat functionality between users" #~ msgstr "Ойыншылар арасындағы басқарылатын чат мүмкіндігі" #~ msgid "Uncontrolled chat functionality between users" #~ msgstr "Ойыншылар арасындағы басқарылмайтын чат мүмкіндігі" #~ msgid "No way to talk with other users" #~ msgstr "Басқа ойыншылармен сөйлесу мүмкін емес" #~ msgid "Uncontrolled audio or video chat functionality between users" #~ msgstr "" #~ "Ойыншылар арасындағы басқарылмайтын аудио немесе видео чат мүмкіндігі" #~ msgid "No sharing of social network usernames or email addresses" #~ msgstr "" #~ "Әлеуметтік желілердегі аттар немесе эл. пошта адрестермен бөлісу жоқ" #~ msgid "Sharing social network usernames or email addresses" #~ msgstr "Әлеуметтік желілердегі аттар немесе эл. пошта адрестермен бөлісу" #~ msgid "No sharing of user information with 3rd parties" #~ msgstr "Пайдаланушы ақпаратын 3-ші жақтармен бөлісу жоқ" #~ msgid "Sharing information that lets others identify the user" #~ msgstr "Басқалар пайдаланушыны анықтай алатын ақпаратымен бөлісу" #~ msgid "No sharing of physical location to other users" #~ msgstr "Басқа пайдаланушылармен нақты орналасумен бөлісу жоқ" #~ msgid "Sharing physical location to other users" #~ msgstr "Басқа пайдаланушылармен нақты орналасумен бөлісу" malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/po/ko.po000066400000000000000000000546701505556674000231770ustar00rootroot00000000000000# Korean translations for malcontent package. # Copyright (C) 2020 THE malcontent'S COPYRIGHT HOLDER # This file is distributed under the same license as the malcontent package. # Automatically generated, 2020. # msgid "" msgstr "" "Project-Id-Version: malcontent\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-06-10 12:04+0100\n" "PO-Revision-Date: 2020-04-15 13:42+0100\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: ko\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" #: accounts-service/com.endlessm.ParentalControls.policy.in:4 msgid "Change your own app filter" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:5 msgid "Authentication is required to change your app filter." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:14 msgid "Read your own app filter" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:15 msgid "Authentication is required to read your app filter." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:24 msgid "Change another user’s app filter" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:25 msgid "Authentication is required to change another user’s app filter." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:34 msgid "Read another user’s app filter" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:35 msgid "Authentication is required to read another user’s app filter." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:44 msgid "Change your own session limits" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:45 msgid "Authentication is required to change your session limits." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:54 msgid "Read your own session limits" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:55 msgid "Authentication is required to read your session limits." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:64 msgid "Change another user’s session limits" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:65 msgid "Authentication is required to change another user’s session limits." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:74 msgid "Read another user’s session limits" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:75 msgid "Authentication is required to read another user’s session limits." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:84 msgid "Change your own account info" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:85 msgid "Authentication is required to change your account info." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:94 msgid "Read your own account info" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:95 msgid "Authentication is required to read your account info." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:104 msgid "Change another user’s account info" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:105 msgid "Authentication is required to change another user’s account info." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:114 msgid "Read another user’s account info" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:115 msgid "Authentication is required to read another user’s account info." msgstr "" #: libmalcontent/app-filter.c:694 #, c-format msgid "App filter for user %u was in an unrecognized format" msgstr "" #: libmalcontent/app-filter.c:725 #, c-format msgid "OARS filter for user %u has an unrecognized kind ‘%s’" msgstr "" #: libmalcontent/manager.c:283 libmalcontent/manager.c:412 #, c-format msgid "Not allowed to query app filter data for user %u" msgstr "" #: libmalcontent/manager.c:288 #, c-format msgid "User %u does not exist" msgstr "" #: libmalcontent/manager.c:394 msgid "App filtering is globally disabled" msgstr "" #: libmalcontent/manager.c:777 msgid "Session limits are globally disabled" msgstr "" #: libmalcontent/manager.c:795 #, c-format msgid "Not allowed to query session limits data for user %u" msgstr "" #: libmalcontent/session-limits.c:306 #, c-format msgid "Session limit for user %u was in an unrecognized format" msgstr "" #: libmalcontent/session-limits.c:328 #, c-format msgid "Session limit for user %u has an unrecognized type ‘%u’" msgstr "" #: libmalcontent/session-limits.c:346 #, c-format msgid "Session limit for user %u has invalid daily schedule %u–%u" msgstr "" #. TRANSLATORS: This is the formatting of English and localized name #. of the rating e.g. "Adults Only (solo adultos)" #: libmalcontent-ui/gs-content-rating.c:75 #, c-format msgid "%s (%s)" msgstr "" #: libmalcontent-ui/gs-content-rating.c:209 msgid "General" msgstr "" #: libmalcontent-ui/gs-content-rating.c:218 msgid "ALL" msgstr "" #: libmalcontent-ui/gs-content-rating.c:222 #: libmalcontent-ui/gs-content-rating.c:485 msgid "Adults Only" msgstr "" #: libmalcontent-ui/gs-content-rating.c:224 #: libmalcontent-ui/gs-content-rating.c:484 msgid "Mature" msgstr "" #: libmalcontent-ui/gs-content-rating.c:226 #: libmalcontent-ui/gs-content-rating.c:483 msgid "Teen" msgstr "" #: libmalcontent-ui/gs-content-rating.c:228 #: libmalcontent-ui/gs-content-rating.c:482 msgid "Everyone 10+" msgstr "" #: libmalcontent-ui/gs-content-rating.c:230 #: libmalcontent-ui/gs-content-rating.c:481 msgid "Everyone" msgstr "" #: libmalcontent-ui/gs-content-rating.c:232 #: libmalcontent-ui/gs-content-rating.c:480 msgid "Early Childhood" msgstr "" #. Translators: the placeholder is a user’s full name #: libmalcontent-ui/restrict-applications-dialog.c:222 #, c-format msgid "Restrict %s from using the following installed applications." msgstr "" #: libmalcontent-ui/restrict-applications-dialog.ui:6 #: libmalcontent-ui/restrict-applications-dialog.ui:12 msgid "Restrict Applications" msgstr "" #: libmalcontent-ui/restrict-applications-selector.ui:24 msgid "No applications found to restrict." msgstr "" #. Translators: this is the full name for an unknown user account. #: libmalcontent-ui/user-controls.c:242 libmalcontent-ui/user-controls.c:253 msgid "unknown" msgstr "" #: libmalcontent-ui/user-controls.c:338 libmalcontent-ui/user-controls.c:425 #: libmalcontent-ui/user-controls.c:711 msgid "All Ages" msgstr "" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:514 #, c-format msgid "" "Prevents %s from running web browsers. Limited web content may still be " "available in other applications." msgstr "" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:519 #, c-format msgid "Prevents specified applications from being used by %s." msgstr "" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:524 #, c-format msgid "Prevents %s from installing applications." msgstr "" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:529 #, c-format msgid "Applications installed by %s will not appear for other users." msgstr "" #: libmalcontent-ui/user-controls.ui:17 msgid "Application Usage Restrictions" msgstr "" #: libmalcontent-ui/user-controls.ui:68 msgid "Restrict _Web Browsers" msgstr "" #: libmalcontent-ui/user-controls.ui:152 msgid "_Restrict Applications" msgstr "" #: libmalcontent-ui/user-controls.ui:231 msgid "Software Installation Restrictions" msgstr "" #: libmalcontent-ui/user-controls.ui:281 msgid "Restrict Application _Installation" msgstr "" #: libmalcontent-ui/user-controls.ui:366 msgid "Restrict Application Installation for _Others" msgstr "" #: libmalcontent-ui/user-controls.ui:451 msgid "Application _Suitability" msgstr "" #: libmalcontent-ui/user-controls.ui:473 msgid "" "Restricts browsing or installation of applications to applications suitable " "for certain ages or above." msgstr "" #. Translators: This is the title of the main window #. Translators: the name of the application as it appears in a software center #: malcontent-control/application.c:105 malcontent-control/main.ui:12 #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:9 #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:3 msgid "Parental Controls" msgstr "" #: malcontent-control/application.c:270 msgid "Copyright © 2019, 2020 Endless Mobile, Inc." msgstr "" #. Translators: this should be "translated" to the #. names of people who have translated Malcontent into #. this language, one per line. #: malcontent-control/application.c:275 msgid "translator-credits" msgstr "" #. Translators: "Malcontent" is the brand name of this #. project, so should not be translated. #: malcontent-control/application.c:281 msgid "Malcontent Website" msgstr "" #: malcontent-control/application.c:299 msgid "The help contents could not be displayed" msgstr "" #: malcontent-control/application.c:336 msgid "Failed to load user data from the system" msgstr "" #: malcontent-control/application.c:338 msgid "Please make sure that the AccountsService is installed and enabled." msgstr "" #: malcontent-control/carousel.ui:48 msgid "Previous Page" msgstr "" #: malcontent-control/carousel.ui:74 msgid "Next Page" msgstr "" #: malcontent-control/main.ui:93 msgid "Permission Required" msgstr "" #: malcontent-control/main.ui:107 msgid "" "Permission is required to view and change user parental controls settings." msgstr "" #: malcontent-control/main.ui:148 msgid "No Child Users Configured" msgstr "" #: malcontent-control/main.ui:162 msgid "" "No child users are currently set up on the system. Create one before setting " "up their parental controls." msgstr "" #: malcontent-control/main.ui:174 msgid "Create _Child User" msgstr "" #: malcontent-control/main.ui:202 msgid "Loading…" msgstr "" #: malcontent-control/main.ui:265 msgid "_Help" msgstr "도움말(_H)" #: malcontent-control/main.ui:269 msgid "_About Parental Controls" msgstr "" #. Translators: the brief summary of the application as it appears in a software center. #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:12 #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:4 msgid "Set parental controls and monitor usage by users" msgstr "" #. Translators: These are the application description paragraphs in the AppData file. #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:16 msgid "" "Manage users’ parental controls restrictions, controlling how long they can " "use the computer for, what software they can install, and what installed " "software they can run." msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:39 msgid "The GNOME Project" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:50 #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:59 msgid "Minor improvements to parental controls application UI" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:51 msgid "Add a user manual" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:52 msgid "Translation updates" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:60 msgid "Translations to Ukrainian and Polish" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:67 msgid "Improve parental controls application UI and add icon" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:68 msgid "Support for indicating which accounts are parent accounts" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:75 msgid "Initial release of basic parental controls application" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:76 msgid "Support for setting app installation and run restrictions on users" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:83 msgid "Maintenance release of underlying parental controls library" msgstr "" #. Translators: Do NOT translate or transliterate this text (this is an icon file name)! #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:7 msgid "org.freedesktop.MalcontentControl" msgstr "" #. Translators: Search terms to find this application. Do NOT translate or localise the semicolons! The list MUST also end with a semicolon! #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:13 msgid "" "parental controls;screen time;app restrictions;web browser restrictions;oars;" "usage;usage limit;kid;child;" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.policy.in:9 msgid "Manage parental controls" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.policy.in:10 msgid "Authentication is required to read and change user parental controls" msgstr "" #: malcontent-control/user-selector.c:426 msgid "Your account" msgstr "내 계정" #. Always allow root, to avoid a situation where this PAM module prevents #. * all users logging in with no way of recovery. #: pam/pam_malcontent.c:142 pam/pam_malcontent.c:188 #, c-format msgid "User ‘%s’ has no time limits enabled" msgstr "" #: pam/pam_malcontent.c:151 pam/pam_malcontent.c:172 #, c-format msgid "Error getting session limits for user ‘%s’: %s" msgstr "" #: pam/pam_malcontent.c:182 #, c-format msgid "User ‘%s’ has no time remaining" msgstr "" #: pam/pam_malcontent.c:200 #, c-format msgid "Error setting time limit on login session: %s" msgstr "" #~ msgid "No cartoon violence" #~ msgstr "만화 수준 폭력 내용 없음" #~ msgid "Cartoon characters in unsafe situations" #~ msgstr "안전하지 않은 상황의 만화 주인공 표현" #~ msgid "Cartoon characters in aggressive conflict" #~ msgstr "적극적 폭력 상황의 만화 주인공 표현" #~ msgid "Graphic violence involving cartoon characters" #~ msgstr "만화 주인공의 그래픽 폭력" #~ msgid "No fantasy violence" #~ msgstr "판타지 폭력 내용 없음" #~ msgid "Characters in unsafe situations easily distinguishable from reality" #~ msgstr "실제와 구분할 수 있는 안전하지 않은 상황의 등장 인물 표현" #~ msgid "" #~ "Characters in aggressive conflict easily distinguishable from reality" #~ msgstr "실제와 구분할 수 있는 적극적 폭력 상황의 등장 인물 표현" #~ msgid "Graphic violence easily distinguishable from reality" #~ msgstr "실제와 구분할 수 있는 그래픽 폭력" #~ msgid "No realistic violence" #~ msgstr "폭력 재현 내용 없음" #~ msgid "Mildly realistic characters in unsafe situations" #~ msgstr "실제와 비슷하게 안전하지 않은 상황의 등장 인물 표현" #~ msgid "Depictions of realistic characters in aggressive conflict" #~ msgstr "실제에 가깝게 적극적 폭력 상황의 등장 인물 표현" #~ msgid "Graphic violence involving realistic characters" #~ msgstr "실제에 가까운 적극적 그래픽 폭력" #~ msgid "No bloodshed" #~ msgstr "유혈 장면 없음" #~ msgid "Unrealistic bloodshed" #~ msgstr "비현실적 혈흔" #~ msgid "Realistic bloodshed" #~ msgstr "현실적 혈흔" #~ msgid "Depictions of bloodshed and the mutilation of body parts" #~ msgstr "혈흔 묘사 및 사지 절단" #~ msgid "No sexual violence" #~ msgstr "성폭력 내용 없음" #~ msgid "Rape or other violent sexual behavior" #~ msgstr "강간/기타 금지 성 행위" #~ msgid "No references to alcohol" #~ msgstr "알콜 음료 언급 없음" #~ msgid "References to alcoholic beverages" #~ msgstr "알콜 음료 언급" #~ msgid "Use of alcoholic beverages" #~ msgstr "알콜 음료 활용" #~ msgid "No references to illicit drugs" #~ msgstr "불법 약물 언급 없음" #~ msgid "References to illicit drugs" #~ msgstr "불법 약물 언급" #~ msgid "Use of illicit drugs" #~ msgstr "불법 약물 활용" #~ msgid "References to tobacco products" #~ msgstr "담배 상품 언급" #~ msgid "Use of tobacco products" #~ msgstr "담배 상품 활용" #~ msgid "No nudity of any sort" #~ msgstr "나체 표현 내용 없음" #~ msgid "Brief artistic nudity" #~ msgstr "대략적인 예술 전라 표현" #~ msgid "Prolonged nudity" #~ msgstr "지속적인 전라 표현" #~ msgid "No references or depictions of sexual nature" #~ msgstr "성적 표현 출현 또는 묘사 없음" #~ msgid "Provocative references or depictions" #~ msgstr "도발적 표현 언급 또는 묘사" #~ msgid "Sexual references or depictions" #~ msgstr "성적 표현 언급 또는 묘사" #~ msgid "Graphic sexual behavior" #~ msgstr "그래픽 성 행위" #~ msgid "No profanity of any kind" #~ msgstr "비속어 없음" #~ msgid "Mild or infrequent use of profanity" #~ msgstr "온화하거나 드문 모독 표현" #~ msgid "Moderate use of profanity" #~ msgstr "어중간한 모독 표현" #~ msgid "Strong or frequent use of profanity" #~ msgstr "강렬하거나 빈번한 모독 표현" #~ msgid "No inappropriate humor" #~ msgstr "부적절한 유머 없음" #~ msgid "Slapstick humor" #~ msgstr "슬랩스틱 유머" #~ msgid "Vulgar or bathroom humor" #~ msgstr "3류/화장실 유머" #~ msgid "Mature or sexual humor" #~ msgstr "성인/성 유머" #~ msgid "No discriminatory language of any kind" #~ msgstr "차별 문구 없음" #~ msgid "Negativity towards a specific group of people" #~ msgstr "특정 인물 집단에 대한 부정" #~ msgid "Discrimination designed to cause emotional harm" #~ msgstr "감정적 해를 끼치도록 의도한 차별" #~ msgid "Explicit discrimination based on gender, sexuality, race or religion" #~ msgstr "성, 인종, 종교에 기반한 적나라한 차별" #~ msgid "No advertising of any kind" #~ msgstr "광고 내용 없음" #~ msgid "Product placement" #~ msgstr "제품 배치" #~ msgid "Explicit references to specific brands or trademarked products" #~ msgstr "특정 브랜드 및 상표 등록 제품을 명백하게 언급" #~ msgid "Users are encouraged to purchase specific real-world items" #~ msgstr "특정 실물 구매를 장려" #~ msgid "No gambling of any kind" #~ msgstr "도박 내용 없음" #~ msgid "Gambling on random events using tokens or credits" #~ msgstr "토큰 또는 크레딧을 활용한 임의 이벤트 도박" #~ msgid "Gambling using “play” money" #~ msgstr "“게임” 머니 활용 도박" #~ msgid "Gambling using real money" #~ msgstr "현금 활용 도박" #~ msgid "No ability to spend money" #~ msgstr "현금 소비 기능 없음" #~ msgid "Users are encouraged to donate real money" #~ msgstr "현금 기부 장려" #~ msgid "Ability to spend real money in-game" #~ msgstr "게임 내 현금 소비성" #~ msgid "No way to chat with other users" #~ msgstr "다른 사용자와의 문장 대화 기능 없음" #~ msgid "Moderated chat functionality between users" #~ msgstr "사용자간 중재 문장 대화 기능" #~ msgid "Uncontrolled chat functionality between users" #~ msgstr "사용자간 비통제 문장 대화 기능" #~ msgid "No way to talk with other users" #~ msgstr "다른 사용자와의 음성 대화 기능 없음" #~ msgid "Uncontrolled audio or video chat functionality between users" #~ msgstr "사용자간 비통제 영상/음성 대화 기능" #~ msgid "No sharing of social network usernames or email addresses" #~ msgstr "소셜 네트워크 사용자 이름 또는 전자메일 주소를 공유하지 않음" #~ msgid "Sharing social network usernames or email addresses" #~ msgstr "소셜 네트워크 사용자 이름 또는 전자메일 주소를 공유함" #~ msgid "No sharing of user information with 3rd parties" #~ msgstr "제 3자 사용자 정보 공유 안함" #~ msgid "Checking for the latest application version" #~ msgstr "프로그램 최신 버전 확인" #~ msgid "Sharing diagnostic data that does not let others identify the user" #~ msgstr "사용자를 식별할 수 없는 진단 데이터 공유" #~ msgid "Sharing information that lets others identify the user" #~ msgstr "사용자 상호 식별 가능한 정보 공유" #~ msgid "No sharing of physical location to other users" #~ msgstr "실제 위치 공유하지 않음" #~ msgid "Sharing physical location to other users" #~ msgstr "다른 사용자와 실제 위치를 공유함" #~ msgid "No references to homosexuality" #~ msgstr "동성애 언급 없음" #~ msgid "Indirect references to homosexuality" #~ msgstr "동성애 간접 언급" #~ msgid "Kissing between people of the same gender" #~ msgstr "동성간의 키스" #~ msgid "Graphic sexual behavior between people of the same gender" #~ msgstr "동성간의 성적 행동 화면 표현" #~ msgid "No references to prostitution" #~ msgstr "매춘 언급 없음" #~ msgid "Indirect references to prostitution" #~ msgstr "매춘 간접 언급" #~ msgid "Direct references to prostitution" #~ msgstr "매춘 직접 언급" #~ msgid "Graphic depictions of the act of prostitution" #~ msgstr "매춘 행위 화면 묘사" #~ msgid "No references to adultery" #~ msgstr "간통 언급 없음" #~ msgid "Indirect references to adultery" #~ msgstr "간통 간접 언급" #~ msgid "Direct references to adultery" #~ msgstr "간통 직접 언급" #~ msgid "Graphic depictions of the act of adultery" #~ msgstr "간통 행위 화면 묘사" #~ msgid "No sexualized characters" #~ msgstr "성적 대상화 주인공 없음" #~ msgid "Scantily clad human characters" #~ msgstr "반라 인간상" #~ msgid "Overtly sexualized human characters" #~ msgstr "명백히 성적 매력을 부여한 인간상" #~ msgid "No references to desecration" #~ msgstr "신성 모독 언급 없음" #~ msgid "Depictions of modern-day human desecration" #~ msgstr "현대식 인간 모독 표현" #~ msgid "Graphic depictions of modern-day desecration" #~ msgstr "현대식 모독 화면 묘사" #~ msgid "No visible dead human remains" #~ msgstr "명확하지 않은 죽은 인간 시신 묘사" #~ msgid "Visible dead human remains" #~ msgstr "명확한 죽은 인간 시신 묘사" #~ msgid "Dead human remains that are exposed to the elements" #~ msgstr "실외에 노출된 죽은 인간 시신 묘사" #~ msgid "Graphic depictions of desecration of human bodies" #~ msgstr "인간 신체 모독 화면 묘사" #~ msgid "No references to slavery" #~ msgstr "노예제도 언급 없음" #~ msgid "Depictions of modern-day slavery" #~ msgstr "현대식 노예제도 표현" #~ msgid "Graphic depictions of modern-day slavery" #~ msgstr "현대식 노예제도 화면 묘사" malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/po/lt.po000066400000000000000000000565611505556674000232060ustar00rootroot00000000000000# Lithuanian translations for malcontent package. # Copyright (C) 2020 THE malcontent'S COPYRIGHT HOLDER # This file is distributed under the same license as the malcontent package. # Automatically generated, 2020. # msgid "" msgstr "" "Project-Id-Version: malcontent\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-06-10 12:04+0100\n" "PO-Revision-Date: 2020-04-15 13:42+0100\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: lt\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n" "%100<10 || n%100>=20) ? 1 : 2);\n" #: accounts-service/com.endlessm.ParentalControls.policy.in:4 msgid "Change your own app filter" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:5 msgid "Authentication is required to change your app filter." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:14 msgid "Read your own app filter" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:15 msgid "Authentication is required to read your app filter." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:24 msgid "Change another user’s app filter" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:25 msgid "Authentication is required to change another user’s app filter." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:34 msgid "Read another user’s app filter" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:35 msgid "Authentication is required to read another user’s app filter." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:44 msgid "Change your own session limits" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:45 msgid "Authentication is required to change your session limits." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:54 msgid "Read your own session limits" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:55 msgid "Authentication is required to read your session limits." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:64 msgid "Change another user’s session limits" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:65 msgid "Authentication is required to change another user’s session limits." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:74 msgid "Read another user’s session limits" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:75 msgid "Authentication is required to read another user’s session limits." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:84 msgid "Change your own account info" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:85 msgid "Authentication is required to change your account info." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:94 msgid "Read your own account info" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:95 msgid "Authentication is required to read your account info." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:104 msgid "Change another user’s account info" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:105 msgid "Authentication is required to change another user’s account info." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:114 msgid "Read another user’s account info" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:115 msgid "Authentication is required to read another user’s account info." msgstr "" #: libmalcontent/app-filter.c:694 #, c-format msgid "App filter for user %u was in an unrecognized format" msgstr "" #: libmalcontent/app-filter.c:725 #, c-format msgid "OARS filter for user %u has an unrecognized kind ‘%s’" msgstr "" #: libmalcontent/manager.c:283 libmalcontent/manager.c:412 #, c-format msgid "Not allowed to query app filter data for user %u" msgstr "" #: libmalcontent/manager.c:288 #, c-format msgid "User %u does not exist" msgstr "" #: libmalcontent/manager.c:394 msgid "App filtering is globally disabled" msgstr "" #: libmalcontent/manager.c:777 msgid "Session limits are globally disabled" msgstr "" #: libmalcontent/manager.c:795 #, c-format msgid "Not allowed to query session limits data for user %u" msgstr "" #: libmalcontent/session-limits.c:306 #, c-format msgid "Session limit for user %u was in an unrecognized format" msgstr "" #: libmalcontent/session-limits.c:328 #, c-format msgid "Session limit for user %u has an unrecognized type ‘%u’" msgstr "" #: libmalcontent/session-limits.c:346 #, c-format msgid "Session limit for user %u has invalid daily schedule %u–%u" msgstr "" #. TRANSLATORS: This is the formatting of English and localized name #. of the rating e.g. "Adults Only (solo adultos)" #: libmalcontent-ui/gs-content-rating.c:75 #, c-format msgid "%s (%s)" msgstr "" #: libmalcontent-ui/gs-content-rating.c:209 msgid "General" msgstr "" #: libmalcontent-ui/gs-content-rating.c:218 msgid "ALL" msgstr "" #: libmalcontent-ui/gs-content-rating.c:222 #: libmalcontent-ui/gs-content-rating.c:485 msgid "Adults Only" msgstr "" #: libmalcontent-ui/gs-content-rating.c:224 #: libmalcontent-ui/gs-content-rating.c:484 msgid "Mature" msgstr "" #: libmalcontent-ui/gs-content-rating.c:226 #: libmalcontent-ui/gs-content-rating.c:483 msgid "Teen" msgstr "" #: libmalcontent-ui/gs-content-rating.c:228 #: libmalcontent-ui/gs-content-rating.c:482 msgid "Everyone 10+" msgstr "" #: libmalcontent-ui/gs-content-rating.c:230 #: libmalcontent-ui/gs-content-rating.c:481 msgid "Everyone" msgstr "" #: libmalcontent-ui/gs-content-rating.c:232 #: libmalcontent-ui/gs-content-rating.c:480 msgid "Early Childhood" msgstr "" #. Translators: the placeholder is a user’s full name #: libmalcontent-ui/restrict-applications-dialog.c:222 #, c-format msgid "Restrict %s from using the following installed applications." msgstr "" #: libmalcontent-ui/restrict-applications-dialog.ui:6 #: libmalcontent-ui/restrict-applications-dialog.ui:12 msgid "Restrict Applications" msgstr "" #: libmalcontent-ui/restrict-applications-selector.ui:24 msgid "No applications found to restrict." msgstr "" #. Translators: this is the full name for an unknown user account. #: libmalcontent-ui/user-controls.c:242 libmalcontent-ui/user-controls.c:253 msgid "unknown" msgstr "" #: libmalcontent-ui/user-controls.c:338 libmalcontent-ui/user-controls.c:425 #: libmalcontent-ui/user-controls.c:711 msgid "All Ages" msgstr "" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:514 #, c-format msgid "" "Prevents %s from running web browsers. Limited web content may still be " "available in other applications." msgstr "" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:519 #, c-format msgid "Prevents specified applications from being used by %s." msgstr "" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:524 #, c-format msgid "Prevents %s from installing applications." msgstr "" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:529 #, c-format msgid "Applications installed by %s will not appear for other users." msgstr "" #: libmalcontent-ui/user-controls.ui:17 msgid "Application Usage Restrictions" msgstr "" #: libmalcontent-ui/user-controls.ui:68 msgid "Restrict _Web Browsers" msgstr "" #: libmalcontent-ui/user-controls.ui:152 msgid "_Restrict Applications" msgstr "" #: libmalcontent-ui/user-controls.ui:231 msgid "Software Installation Restrictions" msgstr "" #: libmalcontent-ui/user-controls.ui:281 msgid "Restrict Application _Installation" msgstr "" #: libmalcontent-ui/user-controls.ui:366 msgid "Restrict Application Installation for _Others" msgstr "" #: libmalcontent-ui/user-controls.ui:451 msgid "Application _Suitability" msgstr "" #: libmalcontent-ui/user-controls.ui:473 msgid "" "Restricts browsing or installation of applications to applications suitable " "for certain ages or above." msgstr "" #. Translators: This is the title of the main window #. Translators: the name of the application as it appears in a software center #: malcontent-control/application.c:105 malcontent-control/main.ui:12 #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:9 #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:3 msgid "Parental Controls" msgstr "" #: malcontent-control/application.c:270 msgid "Copyright © 2019, 2020 Endless Mobile, Inc." msgstr "" #. Translators: this should be "translated" to the #. names of people who have translated Malcontent into #. this language, one per line. #: malcontent-control/application.c:275 msgid "translator-credits" msgstr "" #. Translators: "Malcontent" is the brand name of this #. project, so should not be translated. #: malcontent-control/application.c:281 msgid "Malcontent Website" msgstr "" #: malcontent-control/application.c:299 msgid "The help contents could not be displayed" msgstr "" #: malcontent-control/application.c:336 msgid "Failed to load user data from the system" msgstr "" #: malcontent-control/application.c:338 msgid "Please make sure that the AccountsService is installed and enabled." msgstr "" #: malcontent-control/carousel.ui:48 msgid "Previous Page" msgstr "" #: malcontent-control/carousel.ui:74 msgid "Next Page" msgstr "" #: malcontent-control/main.ui:93 msgid "Permission Required" msgstr "" #: malcontent-control/main.ui:107 msgid "" "Permission is required to view and change user parental controls settings." msgstr "" #: malcontent-control/main.ui:148 msgid "No Child Users Configured" msgstr "" #: malcontent-control/main.ui:162 msgid "" "No child users are currently set up on the system. Create one before setting " "up their parental controls." msgstr "" #: malcontent-control/main.ui:174 msgid "Create _Child User" msgstr "" #: malcontent-control/main.ui:202 msgid "Loading…" msgstr "" #: malcontent-control/main.ui:265 msgid "_Help" msgstr "_Žinynas" #: malcontent-control/main.ui:269 msgid "_About Parental Controls" msgstr "" #. Translators: the brief summary of the application as it appears in a software center. #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:12 #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:4 msgid "Set parental controls and monitor usage by users" msgstr "" #. Translators: These are the application description paragraphs in the AppData file. #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:16 msgid "" "Manage users’ parental controls restrictions, controlling how long they can " "use the computer for, what software they can install, and what installed " "software they can run." msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:39 msgid "The GNOME Project" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:50 #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:59 msgid "Minor improvements to parental controls application UI" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:51 msgid "Add a user manual" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:52 msgid "Translation updates" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:60 msgid "Translations to Ukrainian and Polish" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:67 msgid "Improve parental controls application UI and add icon" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:68 msgid "Support for indicating which accounts are parent accounts" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:75 msgid "Initial release of basic parental controls application" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:76 msgid "Support for setting app installation and run restrictions on users" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:83 msgid "Maintenance release of underlying parental controls library" msgstr "" #. Translators: Do NOT translate or transliterate this text (this is an icon file name)! #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:7 msgid "org.freedesktop.MalcontentControl" msgstr "" #. Translators: Search terms to find this application. Do NOT translate or localise the semicolons! The list MUST also end with a semicolon! #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:13 msgid "" "parental controls;screen time;app restrictions;web browser restrictions;oars;" "usage;usage limit;kid;child;" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.policy.in:9 msgid "Manage parental controls" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.policy.in:10 msgid "Authentication is required to read and change user parental controls" msgstr "" #: malcontent-control/user-selector.c:426 msgid "Your account" msgstr "Jūsų paskyra" #. Always allow root, to avoid a situation where this PAM module prevents #. * all users logging in with no way of recovery. #: pam/pam_malcontent.c:142 pam/pam_malcontent.c:188 #, c-format msgid "User ‘%s’ has no time limits enabled" msgstr "" #: pam/pam_malcontent.c:151 pam/pam_malcontent.c:172 #, c-format msgid "Error getting session limits for user ‘%s’: %s" msgstr "" #: pam/pam_malcontent.c:182 #, c-format msgid "User ‘%s’ has no time remaining" msgstr "" #: pam/pam_malcontent.c:200 #, c-format msgid "Error setting time limit on login session: %s" msgstr "" #~ msgid "No cartoon violence" #~ msgstr "Nėra animacinio smurto" #~ msgid "Cartoon characters in unsafe situations" #~ msgstr "Animaciniai personažai nesaugiose situacijose" #~ msgid "Cartoon characters in aggressive conflict" #~ msgstr "Animaciniai personažai agresyviame konflikte" #~ msgid "Graphic violence involving cartoon characters" #~ msgstr "Grafinis smurtas, įtraukiantis animacinius personažus" #~ msgid "No fantasy violence" #~ msgstr "Nėra fantastinio smurto" #~ msgid "Characters in unsafe situations easily distinguishable from reality" #~ msgstr "" #~ "Personažai nesaugiose, lengvai nuo realybės atskiriamose, situacijose" #~ msgid "" #~ "Characters in aggressive conflict easily distinguishable from reality" #~ msgstr "" #~ "Personažai agresyviame, lengvai nuo realybės atskiriamame, konflikte" #~ msgid "Graphic violence easily distinguishable from reality" #~ msgstr "Grafinis, lengvai nuo realybės atskiriamas, smurtas" #~ msgid "No realistic violence" #~ msgstr "Nėra tikroviško smurto" #~ msgid "Mildly realistic characters in unsafe situations" #~ msgstr "Švelnūs tikroviški personažai nesaugiose situacijose" #~ msgid "Depictions of realistic characters in aggressive conflict" #~ msgstr "Tikroviškų personažų vaizdavimai agresyviame konflikte" #~ msgid "Graphic violence involving realistic characters" #~ msgstr "Grafinis smurtas, įtraukiantis tikroviškus personažus" #~ msgid "No bloodshed" #~ msgstr "Nėra kraujo praliejimo" #~ msgid "Unrealistic bloodshed" #~ msgstr "Netikroviškas kraujo praliejimas" #~ msgid "Realistic bloodshed" #~ msgstr "Tikroviškas kraujo praliejimas" #~ msgid "Depictions of bloodshed and the mutilation of body parts" #~ msgstr "Kraujo praliejimo ir kūno dalių sužalojimo vaizdavimai" #~ msgid "No sexual violence" #~ msgstr "Nėra seksualinio smurto" #~ msgid "Rape or other violent sexual behavior" #~ msgstr "Išprievartavimai ar kita smurtinė seksualinė elgsena" #~ msgid "No references to alcohol" #~ msgstr "Nėra nuorodos į alkoholinius gėrimus" #~ msgid "References to alcoholic beverages" #~ msgstr "Nuorodos į alkoholinius gėrimus" #~ msgid "Use of alcoholic beverages" #~ msgstr "Alkoholinių gėrimų vartojimas" #~ msgid "No references to illicit drugs" #~ msgstr "Nėra nuorodų į uždraustus narkotikus" #~ msgid "References to illicit drugs" #~ msgstr "Nuorodos į uždraustus narkotikus" #~ msgid "Use of illicit drugs" #~ msgstr "Uždraustų narkotikų vartojimas" #~ msgid "References to tobacco products" #~ msgstr "Nuorodos į tabako gaminius" #~ msgid "Use of tobacco products" #~ msgstr "Tabako gaminių vartojimas" #~ msgid "No nudity of any sort" #~ msgstr "Nėra jokio tipo nuogumo" #~ msgid "Brief artistic nudity" #~ msgstr "Trumpas meninis nuogumas" #~ msgid "Prolonged nudity" #~ msgstr "Užsitęsęs nuogumas" #~ msgid "No references or depictions of sexual nature" #~ msgstr "Nėra nuorodų į seksualinį pobūdį ar jo vaizdavimų" #~ msgid "Provocative references or depictions" #~ msgstr "Provokuojančios nuorodos ar vaizdavimai" #~ msgid "Sexual references or depictions" #~ msgstr "Seksualinės nuorodos ar vaizdavimai" #~ msgid "Graphic sexual behavior" #~ msgstr "Grafinė seksualinė elgsena" #~ msgid "No profanity of any kind" #~ msgstr "Nėra jokių keiksmažodžių" #~ msgid "Mild or infrequent use of profanity" #~ msgstr "Nesmarkus ar nedažnas keiksmų naudojimas" #~ msgid "Moderate use of profanity" #~ msgstr "Vidutinis keiksmų naudojimas" #~ msgid "Strong or frequent use of profanity" #~ msgstr "Smarkus ar dažnas keiksmų naudojimas" #~ msgid "No inappropriate humor" #~ msgstr "Nėra netinkamo humoro" #~ msgid "Slapstick humor" #~ msgstr "Papliauškų humoras" #~ msgid "Vulgar or bathroom humor" #~ msgstr "Vulgarus ar tualeto humoras" #~ msgid "Mature or sexual humor" #~ msgstr "Suaugusiųjų ar seksualinis humoras" #~ msgid "No discriminatory language of any kind" #~ msgstr "Nėra jokio pobūdžio diskriminuojančios kalbos" #~ msgid "Negativity towards a specific group of people" #~ msgstr "Priešiškumas, nukreiptas į tam tikrą žmonių grupę" #~ msgid "Discrimination designed to cause emotional harm" #~ msgstr "Diskriminacija, sukurta sukelti emocinę žalą" #~ msgid "Explicit discrimination based on gender, sexuality, race or religion" #~ msgstr "Atvira diskriminacija dėl lyties, rasės ar religijos" #~ msgid "No advertising of any kind" #~ msgstr "Nėra jokio pobūdžio reklamų" #~ msgid "Product placement" #~ msgstr "Produktų išdėstymas" #~ msgid "Explicit references to specific brands or trademarked products" #~ msgstr "" #~ "Atviros nuorodos į tam tikrus prekės ženklus ar produktus su prekyženkliu" #~ msgid "Users are encouraged to purchase specific real-world items" #~ msgstr "" #~ "Naudotojai yra skatinami įsigyti tam tikrus realaus pasaulio daiktus" #~ msgid "No gambling of any kind" #~ msgstr "Nėra jokio pobūdžio azartinių lošimų" #~ msgid "Gambling on random events using tokens or credits" #~ msgstr "Lošimas iš atsitiktinių įvykių, naudojantis žetonais ar kreditais" #~ msgid "Gambling using “play” money" #~ msgstr "Lošimai naudojant „žaidimo“ pinigus" #~ msgid "Gambling using real money" #~ msgstr "Lošimai naudojant tikrus pinigus" #~ msgid "No ability to spend money" #~ msgstr "Nėra galimybės išleisti pinigus" #~ msgid "Users are encouraged to donate real money" #~ msgstr "Naudotojai yra skatinami aukoti realius pinigus" #~ msgid "Ability to spend real money in-game" #~ msgstr "Galimybė žaidime išleisti tikrus pinigus" #~ msgid "No way to chat with other users" #~ msgstr "Nėra galimybės susirašinėti su kitais žaidėjais" #~ msgid "Moderated chat functionality between users" #~ msgstr "Prižiūrimas pokalbių funkcionalumas tarp žaidėjų" #~ msgid "Uncontrolled chat functionality between users" #~ msgstr "Neprižiūrimas pokalbių funkcionalumas tarp žaidėjų" #~ msgid "No way to talk with other users" #~ msgstr "Nėra galimybės kalbėti su kitais žaidėjais" #~ msgid "Uncontrolled audio or video chat functionality between users" #~ msgstr "Neprižiūrimas garso ir vaizdo pokalbių funkcionalumas tarp žaidėjų" #~ msgid "No sharing of social network usernames or email addresses" #~ msgstr "" #~ "Nėra dalinimosi socialinių tinklų naudotojų vardais ar el. pašto adresais" #~ msgid "Sharing social network usernames or email addresses" #~ msgstr "" #~ "Dalinimasis socialinių tinklų naudotojų vardais ar el. pašto adresais" #~ msgid "No sharing of user information with 3rd parties" #~ msgstr "Nėra dalinimosi naudotojo informacija su trečiosiomis šalimis" #~ msgid "Checking for the latest application version" #~ msgstr "Tikrinama, ar naujausia programos versija" #~ msgid "Sharing diagnostic data that does not let others identify the user" #~ msgstr "" #~ "Dalinimasis diagnostikos duomenimis neleidžia kitiems identifikuoti " #~ "naudotojų" #~ msgid "Sharing information that lets others identify the user" #~ msgstr "" #~ "Dalinimasis informacija, kuri leidžia kitiems identifikuoti naudotoją" #~ msgid "No sharing of physical location to other users" #~ msgstr "Nėra dalinimosi savo fizine buvimo vieta su kitais naudotojais" #~ msgid "Sharing physical location to other users" #~ msgstr "Dalinimasis savo fizine buvimo vieta su kitais naudotojais" #~ msgid "No references to homosexuality" #~ msgstr "Nėra nuorodos į homoseksualumą" #~ msgid "Indirect references to homosexuality" #~ msgstr "Netiesioginės nuorodos į homoseksualumą" #~ msgid "Kissing between people of the same gender" #~ msgstr "Bučiniai tarp tos pačios lyties asmenų" #~ msgid "Graphic sexual behavior between people of the same gender" #~ msgstr "Vazdinis seksualus elgesys tarp tos pačios lyties asmenų" #~ msgid "No references to prostitution" #~ msgstr "Nėra nuorodų į prostituciją" #~ msgid "Indirect references to prostitution" #~ msgstr "Netiesioginės nuorodos į prostituciją" #~ msgid "Direct references to prostitution" #~ msgstr "Tiesioginės nuorodos į prostituciją" #~ msgid "Graphic depictions of the act of prostitution" #~ msgstr "Vaizdinis prostitucijos akto atvaizdavimas" #~ msgid "No references to adultery" #~ msgstr "Nėra nuorodos į turinį suaugusiems" #~ msgid "Indirect references to adultery" #~ msgstr "Netiesioginės nuorodos į turinį suaugusiems" #~ msgid "Direct references to adultery" #~ msgstr "Tiesioginės nuorodos į turinį suaugusiems" #~ msgid "Graphic depictions of the act of adultery" #~ msgstr "Vaizdinis turinio suaugusiems atvaizdavimas" #~ msgid "No sexualized characters" #~ msgstr "Nėra išreikšto seksualumo veikėjų" #~ msgid "Scantily clad human characters" #~ msgstr "Mažai apsirengę žmonės/herojai" #~ msgid "Overtly sexualized human characters" #~ msgstr "Itin seksualūs žmonės/herojai" #~ msgid "No references to desecration" #~ msgstr "Nėra nuorodų į išniekinimą" #~ msgid "Depictions of modern-day human desecration" #~ msgstr "Šiuolaikinio žmonių išniekinimo vaizdavimai" #~ msgid "Graphic depictions of modern-day desecration" #~ msgstr "Šiuolaikinio žmonių išniekinimo vaizdai" #~ msgid "No visible dead human remains" #~ msgstr "Nėra matomų mirusių žmonių palaikų" #~ msgid "Visible dead human remains" #~ msgstr "Matomi mirusių žmonių palaikai" #~ msgid "Dead human remains that are exposed to the elements" #~ msgstr "Detaliai vaizduojami mirusių žmonių palaikai" #~ msgid "Graphic depictions of desecration of human bodies" #~ msgstr "Žmonių kūnų išniekinimo vaizdai" #~ msgid "No references to slavery" #~ msgstr "Nėra nuorodos į vergiją" #~ msgid "Depictions of modern-day slavery" #~ msgstr "Šiuolaikinės vergijos vaizdavimai" #~ msgid "Graphic depictions of modern-day slavery" #~ msgstr "Šiuolaikinės vergijos vaizdai" malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/po/lv.po000066400000000000000000000563051505556674000232040ustar00rootroot00000000000000# Latvian translations for malcontent package. # Copyright (C) 2020 THE malcontent'S COPYRIGHT HOLDER # This file is distributed under the same license as the malcontent package. # Automatically generated, 2020. # msgid "" msgstr "" "Project-Id-Version: malcontent\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-06-10 12:04+0100\n" "PO-Revision-Date: 2020-04-15 13:42+0100\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: lv\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : " "2);\n" #: accounts-service/com.endlessm.ParentalControls.policy.in:4 msgid "Change your own app filter" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:5 msgid "Authentication is required to change your app filter." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:14 msgid "Read your own app filter" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:15 msgid "Authentication is required to read your app filter." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:24 msgid "Change another user’s app filter" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:25 msgid "Authentication is required to change another user’s app filter." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:34 msgid "Read another user’s app filter" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:35 msgid "Authentication is required to read another user’s app filter." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:44 msgid "Change your own session limits" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:45 msgid "Authentication is required to change your session limits." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:54 msgid "Read your own session limits" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:55 msgid "Authentication is required to read your session limits." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:64 msgid "Change another user’s session limits" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:65 msgid "Authentication is required to change another user’s session limits." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:74 msgid "Read another user’s session limits" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:75 msgid "Authentication is required to read another user’s session limits." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:84 msgid "Change your own account info" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:85 msgid "Authentication is required to change your account info." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:94 msgid "Read your own account info" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:95 msgid "Authentication is required to read your account info." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:104 msgid "Change another user’s account info" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:105 msgid "Authentication is required to change another user’s account info." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:114 msgid "Read another user’s account info" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:115 msgid "Authentication is required to read another user’s account info." msgstr "" #: libmalcontent/app-filter.c:694 #, c-format msgid "App filter for user %u was in an unrecognized format" msgstr "" #: libmalcontent/app-filter.c:725 #, c-format msgid "OARS filter for user %u has an unrecognized kind ‘%s’" msgstr "" #: libmalcontent/manager.c:283 libmalcontent/manager.c:412 #, c-format msgid "Not allowed to query app filter data for user %u" msgstr "" #: libmalcontent/manager.c:288 #, c-format msgid "User %u does not exist" msgstr "" #: libmalcontent/manager.c:394 msgid "App filtering is globally disabled" msgstr "" #: libmalcontent/manager.c:777 msgid "Session limits are globally disabled" msgstr "" #: libmalcontent/manager.c:795 #, c-format msgid "Not allowed to query session limits data for user %u" msgstr "" #: libmalcontent/session-limits.c:306 #, c-format msgid "Session limit for user %u was in an unrecognized format" msgstr "" #: libmalcontent/session-limits.c:328 #, c-format msgid "Session limit for user %u has an unrecognized type ‘%u’" msgstr "" #: libmalcontent/session-limits.c:346 #, c-format msgid "Session limit for user %u has invalid daily schedule %u–%u" msgstr "" #. TRANSLATORS: This is the formatting of English and localized name #. of the rating e.g. "Adults Only (solo adultos)" #: libmalcontent-ui/gs-content-rating.c:75 #, c-format msgid "%s (%s)" msgstr "" #: libmalcontent-ui/gs-content-rating.c:209 msgid "General" msgstr "" #: libmalcontent-ui/gs-content-rating.c:218 msgid "ALL" msgstr "" #: libmalcontent-ui/gs-content-rating.c:222 #: libmalcontent-ui/gs-content-rating.c:485 msgid "Adults Only" msgstr "" #: libmalcontent-ui/gs-content-rating.c:224 #: libmalcontent-ui/gs-content-rating.c:484 msgid "Mature" msgstr "" #: libmalcontent-ui/gs-content-rating.c:226 #: libmalcontent-ui/gs-content-rating.c:483 msgid "Teen" msgstr "" #: libmalcontent-ui/gs-content-rating.c:228 #: libmalcontent-ui/gs-content-rating.c:482 msgid "Everyone 10+" msgstr "" #: libmalcontent-ui/gs-content-rating.c:230 #: libmalcontent-ui/gs-content-rating.c:481 msgid "Everyone" msgstr "" #: libmalcontent-ui/gs-content-rating.c:232 #: libmalcontent-ui/gs-content-rating.c:480 msgid "Early Childhood" msgstr "" #. Translators: the placeholder is a user’s full name #: libmalcontent-ui/restrict-applications-dialog.c:222 #, c-format msgid "Restrict %s from using the following installed applications." msgstr "" #: libmalcontent-ui/restrict-applications-dialog.ui:6 #: libmalcontent-ui/restrict-applications-dialog.ui:12 msgid "Restrict Applications" msgstr "" #: libmalcontent-ui/restrict-applications-selector.ui:24 msgid "No applications found to restrict." msgstr "" #. Translators: this is the full name for an unknown user account. #: libmalcontent-ui/user-controls.c:242 libmalcontent-ui/user-controls.c:253 msgid "unknown" msgstr "" #: libmalcontent-ui/user-controls.c:338 libmalcontent-ui/user-controls.c:425 #: libmalcontent-ui/user-controls.c:711 msgid "All Ages" msgstr "" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:514 #, c-format msgid "" "Prevents %s from running web browsers. Limited web content may still be " "available in other applications." msgstr "" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:519 #, c-format msgid "Prevents specified applications from being used by %s." msgstr "" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:524 #, c-format msgid "Prevents %s from installing applications." msgstr "" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:529 #, c-format msgid "Applications installed by %s will not appear for other users." msgstr "" #: libmalcontent-ui/user-controls.ui:17 msgid "Application Usage Restrictions" msgstr "" #: libmalcontent-ui/user-controls.ui:68 msgid "Restrict _Web Browsers" msgstr "" #: libmalcontent-ui/user-controls.ui:152 msgid "_Restrict Applications" msgstr "" #: libmalcontent-ui/user-controls.ui:231 msgid "Software Installation Restrictions" msgstr "" #: libmalcontent-ui/user-controls.ui:281 msgid "Restrict Application _Installation" msgstr "" #: libmalcontent-ui/user-controls.ui:366 msgid "Restrict Application Installation for _Others" msgstr "" #: libmalcontent-ui/user-controls.ui:451 msgid "Application _Suitability" msgstr "" #: libmalcontent-ui/user-controls.ui:473 msgid "" "Restricts browsing or installation of applications to applications suitable " "for certain ages or above." msgstr "" #. Translators: This is the title of the main window #. Translators: the name of the application as it appears in a software center #: malcontent-control/application.c:105 malcontent-control/main.ui:12 #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:9 #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:3 msgid "Parental Controls" msgstr "" #: malcontent-control/application.c:270 msgid "Copyright © 2019, 2020 Endless Mobile, Inc." msgstr "" #. Translators: this should be "translated" to the #. names of people who have translated Malcontent into #. this language, one per line. #: malcontent-control/application.c:275 msgid "translator-credits" msgstr "" #. Translators: "Malcontent" is the brand name of this #. project, so should not be translated. #: malcontent-control/application.c:281 msgid "Malcontent Website" msgstr "" #: malcontent-control/application.c:299 msgid "The help contents could not be displayed" msgstr "" #: malcontent-control/application.c:336 msgid "Failed to load user data from the system" msgstr "" #: malcontent-control/application.c:338 msgid "Please make sure that the AccountsService is installed and enabled." msgstr "" #: malcontent-control/carousel.ui:48 msgid "Previous Page" msgstr "" #: malcontent-control/carousel.ui:74 msgid "Next Page" msgstr "" #: malcontent-control/main.ui:93 msgid "Permission Required" msgstr "" #: malcontent-control/main.ui:107 msgid "" "Permission is required to view and change user parental controls settings." msgstr "" #: malcontent-control/main.ui:148 msgid "No Child Users Configured" msgstr "" #: malcontent-control/main.ui:162 msgid "" "No child users are currently set up on the system. Create one before setting " "up their parental controls." msgstr "" #: malcontent-control/main.ui:174 msgid "Create _Child User" msgstr "" #: malcontent-control/main.ui:202 msgid "Loading…" msgstr "" #: malcontent-control/main.ui:265 msgid "_Help" msgstr "_Palīdzība" #: malcontent-control/main.ui:269 msgid "_About Parental Controls" msgstr "" #. Translators: the brief summary of the application as it appears in a software center. #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:12 #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:4 msgid "Set parental controls and monitor usage by users" msgstr "" #. Translators: These are the application description paragraphs in the AppData file. #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:16 msgid "" "Manage users’ parental controls restrictions, controlling how long they can " "use the computer for, what software they can install, and what installed " "software they can run." msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:39 msgid "The GNOME Project" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:50 #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:59 msgid "Minor improvements to parental controls application UI" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:51 msgid "Add a user manual" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:52 msgid "Translation updates" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:60 msgid "Translations to Ukrainian and Polish" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:67 msgid "Improve parental controls application UI and add icon" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:68 msgid "Support for indicating which accounts are parent accounts" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:75 msgid "Initial release of basic parental controls application" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:76 msgid "Support for setting app installation and run restrictions on users" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:83 msgid "Maintenance release of underlying parental controls library" msgstr "" #. Translators: Do NOT translate or transliterate this text (this is an icon file name)! #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:7 msgid "org.freedesktop.MalcontentControl" msgstr "" #. Translators: Search terms to find this application. Do NOT translate or localise the semicolons! The list MUST also end with a semicolon! #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:13 msgid "" "parental controls;screen time;app restrictions;web browser restrictions;oars;" "usage;usage limit;kid;child;" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.policy.in:9 msgid "Manage parental controls" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.policy.in:10 msgid "Authentication is required to read and change user parental controls" msgstr "" #: malcontent-control/user-selector.c:426 msgid "Your account" msgstr "Jūsu konts" #. Always allow root, to avoid a situation where this PAM module prevents #. * all users logging in with no way of recovery. #: pam/pam_malcontent.c:142 pam/pam_malcontent.c:188 #, c-format msgid "User ‘%s’ has no time limits enabled" msgstr "" #: pam/pam_malcontent.c:151 pam/pam_malcontent.c:172 #, c-format msgid "Error getting session limits for user ‘%s’: %s" msgstr "" #: pam/pam_malcontent.c:182 #, c-format msgid "User ‘%s’ has no time remaining" msgstr "" #: pam/pam_malcontent.c:200 #, c-format msgid "Error setting time limit on login session: %s" msgstr "" #~ msgid "No cartoon violence" #~ msgstr "Nav multeņu vardarbības" #~ msgid "Cartoon characters in unsafe situations" #~ msgstr "Multeņu tēli nedrošās situācijās" #~ msgid "Cartoon characters in aggressive conflict" #~ msgstr "Multeņu tēli agresīvā konfliktā" #~ msgid "Graphic violence involving cartoon characters" #~ msgstr "Grafiska vardarbība, kur iesaistīti multeņu tēli" #~ msgid "No fantasy violence" #~ msgstr "Nav fantāzijas vardarbības" #~ msgid "Characters in unsafe situations easily distinguishable from reality" #~ msgstr "Tēli nedrošās situācijās, ko viegli atšķirt no realitātes" #~ msgid "" #~ "Characters in aggressive conflict easily distinguishable from reality" #~ msgstr "Tēli agresīvā konfliktā, ko viegli atšķirt no realitātes" #~ msgid "Graphic violence easily distinguishable from reality" #~ msgstr "Grafiska vardarbība, ko viegli atšķirt no realitātes" #~ msgid "No realistic violence" #~ msgstr "Nav reālistiskas vardarbības" #~ msgid "Mildly realistic characters in unsafe situations" #~ msgstr "Nedaudz reālistiski tēli nedrošās situācijās" #~ msgid "Depictions of realistic characters in aggressive conflict" #~ msgstr "Ataino reālistiskus tēlus agresīvā konfliktā" #~ msgid "Graphic violence involving realistic characters" #~ msgstr "Grafiska vardarbība, kur iesaistīti reālistiski tēli" #~ msgid "No bloodshed" #~ msgstr "Nav asinsizliešanas" #~ msgid "Unrealistic bloodshed" #~ msgstr "Nereālistiska asinsizliešana" #~ msgid "Realistic bloodshed" #~ msgstr "Reālistiska asinsizliešana" #~ msgid "Depictions of bloodshed and the mutilation of body parts" #~ msgstr "Ataino asinsizliešanu un ķermeņu daļu kropļošanu" #~ msgid "No sexual violence" #~ msgstr "Nav seksuālas vardarbības" #~ msgid "Rape or other violent sexual behavior" #~ msgstr "Izvarošana un cita vardarbīga seksuāla uzvedība" #~ msgid "No references to alcohol" #~ msgstr "Nav norāžu uz alkoholiskiem dzērieniem" #~ msgid "References to alcoholic beverages" #~ msgstr "Norādes uz alkoholiskiem dzērieniem" #~ msgid "Use of alcoholic beverages" #~ msgstr "Alkoholisku dzērienu lietošana" #~ msgid "No references to illicit drugs" #~ msgstr "Nav norāžu uz nelegālām narkotikām" #~ msgid "References to illicit drugs" #~ msgstr "Norādes uz nelegālām narkotikām" #~ msgid "Use of illicit drugs" #~ msgstr "Nelegālu narkotiku lietošana" #~ msgid "References to tobacco products" #~ msgstr "Norādes uz tabakas produktiem" #~ msgid "Use of tobacco products" #~ msgstr "Tabakas produktu izmantošana" #~ msgid "No nudity of any sort" #~ msgstr "Nav nekāda veida kailuma" #~ msgid "Brief artistic nudity" #~ msgstr "Īss māksliniecisks kailums" #~ msgid "Prolonged nudity" #~ msgstr "Ilglaicīgs kailums" #~ msgid "No references or depictions of sexual nature" #~ msgstr "Nav seksuālas dabas norādes vai atainojumi" #~ msgid "Provocative references or depictions" #~ msgstr "Provocējošas norādes vai atainojumi" #~ msgid "Sexual references or depictions" #~ msgstr "Seksuālas norādes vai atainojumi" #~ msgid "Graphic sexual behavior" #~ msgstr "Grafiska seksuāla uzvedība" #~ msgid "No profanity of any kind" #~ msgstr "Nav nekāda veida lādēšanās" #~ msgid "Mild or infrequent use of profanity" #~ msgstr "Neliela vai reta rupjību lietošana" #~ msgid "Moderate use of profanity" #~ msgstr "Mērena rupjību lietošana" #~ msgid "Strong or frequent use of profanity" #~ msgstr "Stipra vai bieža rupjību lietošana" #~ msgid "No inappropriate humor" #~ msgstr "Nav nepiedienīga humora" #~ msgid "Slapstick humor" #~ msgstr "Farsa humors" #~ msgid "Vulgar or bathroom humor" #~ msgstr "Vulgārs vai atejas humors" #~ msgid "Mature or sexual humor" #~ msgstr "Pieaugušo vai seksuāls humors" #~ msgid "No discriminatory language of any kind" #~ msgstr "Nav nekāda veida diskriminējošas valodas" #~ msgid "Negativity towards a specific group of people" #~ msgstr "Negativitāte pret noteiktu cilvēku grupu" #~ msgid "Discrimination designed to cause emotional harm" #~ msgstr "Diskriminācija, kas paredzēta emocionāla kaitējuma izraisīšanai" #~ msgid "Explicit discrimination based on gender, sexuality, race or religion" #~ msgstr "" #~ "Eksplicīta dzimuma, seksualitātes, rases vai reliģijas diskriminācija" #~ msgid "No advertising of any kind" #~ msgstr "Nav nekāda veida reklāmu" #~ msgid "Product placement" #~ msgstr "Produktu izvietošana" #~ msgid "Explicit references to specific brands or trademarked products" #~ msgstr "Atklātas norādes uz noteikiem zīmoliem vai preču zīmju produktiem" #~ msgid "Users are encouraged to purchase specific real-world items" #~ msgstr "" #~ "Lietotāji tiek iedrošināti iegādāties noteiktas reālās pasaules preces" #~ msgid "No gambling of any kind" #~ msgstr "Nav nekāda veida derības" #~ msgid "Gambling on random events using tokens or credits" #~ msgstr "" #~ "Likt derības uz nejaušiem notikumiem, izmantojot žetonus vai kredītus" #~ msgid "Gambling using “play” money" #~ msgstr "Likt derības ar “spēļu” naudu" #~ msgid "Gambling using real money" #~ msgstr "Likt derības ar īstu naudu" #~ msgid "No ability to spend money" #~ msgstr "Nav iespējas tērēt naudu" #~ msgid "Users are encouraged to donate real money" #~ msgstr "Lietotāji tiek iedrošināti ziedot īstu naudu" #~ msgid "Ability to spend real money in-game" #~ msgstr "Iespēja spēlē tērēt īstu naudu" #~ msgid "No way to chat with other users" #~ msgstr "Nav tērzēšanas iespējas ar citiem lietotājiem" #~ msgid "Moderated chat functionality between users" #~ msgstr "Moderēta tērzēšanas iespēja starp lietotājiem" #~ msgid "Uncontrolled chat functionality between users" #~ msgstr "Nekontrolēta tērzēšanas iespēja starp lietotājiem" #~ msgid "No way to talk with other users" #~ msgstr "Nav sarunāšanās iespējas ar citiem lietotājiem" #~ msgid "Uncontrolled audio or video chat functionality between users" #~ msgstr "Nekontrolēta audio un video tērzēšanas iespēja starp lietotājiem" #~ msgid "No sharing of social network usernames or email addresses" #~ msgstr "Nav dalīšanās ar sociālo tīklu lietotājvārdiem vai e-pasta adresēm" #~ msgid "Sharing social network usernames or email addresses" #~ msgstr "Dalās ar sociālo tīklu lietotājvārdiem vai e-pasta adresēm" #~ msgid "No sharing of user information with 3rd parties" #~ msgstr "Nav dalīšanās ar lietotāju informāciju ar trešajām pusēm" #~ msgid "Checking for the latest application version" #~ msgstr "Pārbauda, vai ir jaunāka lietotnes versija" #~ msgid "Sharing diagnostic data that does not let others identify the user" #~ msgstr "" #~ "Dalās ar diagnostikas datiem, kas neļauj citiem identificēt lietotāju" #~ msgid "Sharing information that lets others identify the user" #~ msgstr "Dalās informāciju, kas ļauj citiem identificēt lietotāju" #~ msgid "No sharing of physical location to other users" #~ msgstr "Nav dalīšanās ar fizisko atrašanās vietu ar citiem lietotājiem" #~ msgid "Sharing physical location to other users" #~ msgstr "Dalās ar citiem lietotājiem ar fizisko atrašanās vietu" #~ msgid "No references to homosexuality" #~ msgstr "Nav norāžu uz homoseksualitāti" #~ msgid "Indirect references to homosexuality" #~ msgstr "Netiešas norādes uz homoseksualitāti" #~ msgid "Kissing between people of the same gender" #~ msgstr "Skūpstīšanās starp viena dzimuma cilvēkiem" #~ msgid "Graphic sexual behavior between people of the same gender" #~ msgstr "Grafiska seksuāla uzvedība starp viena dzimuma cilvēkiem" #~ msgid "No references to prostitution" #~ msgstr "Nav norāžu uz prostitūciju" #~ msgid "Indirect references to prostitution" #~ msgstr "Netiešas norādes uz prostitūciju" #~ msgid "Direct references to prostitution" #~ msgstr "Tiešas norādes uz prostitūciju" #~ msgid "Graphic depictions of the act of prostitution" #~ msgstr "Grafisks prostitūcijas akta atainojums" #~ msgid "No references to adultery" #~ msgstr "Nav norāžu uz laulības pārkāpšanu" #~ msgid "Indirect references to adultery" #~ msgstr "Netiešas norādes uz laulības pārkāpšanu" #~ msgid "Direct references to adultery" #~ msgstr "Tiešas norādes uz laulības pārkāpšanu" #~ msgid "Graphic depictions of the act of adultery" #~ msgstr "Grafisks laulības pārkāpšanas akta atainojums" #~ msgid "No sexualized characters" #~ msgstr "Nav seksualizētu tēlu" #~ msgid "Scantily clad human characters" #~ msgstr "Daļēji apģērbti cilvēku tēli" #~ msgid "Overtly sexualized human characters" #~ msgstr "Atklāti seksualizēti cilvēki tēli" #~ msgid "No references to desecration" #~ msgstr "Nav norāžu uz apgānīšanu" #~ msgid "Depictions of modern-day human desecration" #~ msgstr "Mūsdienu apgānīšanas atainojumi" #~ msgid "Graphic depictions of modern-day desecration" #~ msgstr "Grafiski mūsdienu apgānīšanas atainojumi" #~ msgid "No visible dead human remains" #~ msgstr "Nav redzamu cilvēku mirstīgo atlieku" #~ msgid "Visible dead human remains" #~ msgstr "Redzamas cilvēku mirstīgās atliekas" #~ msgid "Dead human remains that are exposed to the elements" #~ msgstr "Cilvēku mirstīgās atliekas skarbos vides apstākļos" #~ msgid "Graphic depictions of desecration of human bodies" #~ msgstr "Grafiski cilvēku ķermeņu apgānīšanas atainojumi" #~ msgid "No references to slavery" #~ msgstr "Nav norāžu uz verdzību" #~ msgid "Depictions of modern-day slavery" #~ msgstr "Mūsdienu verdzības atainojumi" #~ msgid "Graphic depictions of modern-day slavery" #~ msgstr "Grafiski mūsdienu verdzības atainojumi" malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/po/meson.build000066400000000000000000000000521505556674000243510ustar00rootroot00000000000000i18n.gettext('malcontent', preset: 'glib')malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/po/ml.po000066400000000000000000000733441505556674000231750ustar00rootroot00000000000000# Malayalam translations for malcontent package. # Copyright (C) 2020 THE malcontent'S COPYRIGHT HOLDER # This file is distributed under the same license as the malcontent package. # Automatically generated, 2020. # msgid "" msgstr "" "Project-Id-Version: malcontent\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-06-10 12:04+0100\n" "PO-Revision-Date: 2020-04-15 13:42+0100\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: ml\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: accounts-service/com.endlessm.ParentalControls.policy.in:4 msgid "Change your own app filter" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:5 msgid "Authentication is required to change your app filter." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:14 msgid "Read your own app filter" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:15 msgid "Authentication is required to read your app filter." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:24 msgid "Change another user’s app filter" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:25 msgid "Authentication is required to change another user’s app filter." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:34 msgid "Read another user’s app filter" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:35 msgid "Authentication is required to read another user’s app filter." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:44 msgid "Change your own session limits" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:45 msgid "Authentication is required to change your session limits." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:54 msgid "Read your own session limits" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:55 msgid "Authentication is required to read your session limits." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:64 msgid "Change another user’s session limits" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:65 msgid "Authentication is required to change another user’s session limits." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:74 msgid "Read another user’s session limits" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:75 msgid "Authentication is required to read another user’s session limits." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:84 msgid "Change your own account info" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:85 msgid "Authentication is required to change your account info." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:94 msgid "Read your own account info" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:95 msgid "Authentication is required to read your account info." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:104 msgid "Change another user’s account info" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:105 msgid "Authentication is required to change another user’s account info." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:114 msgid "Read another user’s account info" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:115 msgid "Authentication is required to read another user’s account info." msgstr "" #: libmalcontent/app-filter.c:694 #, c-format msgid "App filter for user %u was in an unrecognized format" msgstr "" #: libmalcontent/app-filter.c:725 #, c-format msgid "OARS filter for user %u has an unrecognized kind ‘%s’" msgstr "" #: libmalcontent/manager.c:283 libmalcontent/manager.c:412 #, c-format msgid "Not allowed to query app filter data for user %u" msgstr "" #: libmalcontent/manager.c:288 #, c-format msgid "User %u does not exist" msgstr "" #: libmalcontent/manager.c:394 msgid "App filtering is globally disabled" msgstr "" #: libmalcontent/manager.c:777 msgid "Session limits are globally disabled" msgstr "" #: libmalcontent/manager.c:795 #, c-format msgid "Not allowed to query session limits data for user %u" msgstr "" #: libmalcontent/session-limits.c:306 #, c-format msgid "Session limit for user %u was in an unrecognized format" msgstr "" #: libmalcontent/session-limits.c:328 #, c-format msgid "Session limit for user %u has an unrecognized type ‘%u’" msgstr "" #: libmalcontent/session-limits.c:346 #, c-format msgid "Session limit for user %u has invalid daily schedule %u–%u" msgstr "" #. TRANSLATORS: This is the formatting of English and localized name #. of the rating e.g. "Adults Only (solo adultos)" #: libmalcontent-ui/gs-content-rating.c:75 #, c-format msgid "%s (%s)" msgstr "" #: libmalcontent-ui/gs-content-rating.c:209 msgid "General" msgstr "" #: libmalcontent-ui/gs-content-rating.c:218 msgid "ALL" msgstr "" #: libmalcontent-ui/gs-content-rating.c:222 #: libmalcontent-ui/gs-content-rating.c:485 msgid "Adults Only" msgstr "" #: libmalcontent-ui/gs-content-rating.c:224 #: libmalcontent-ui/gs-content-rating.c:484 msgid "Mature" msgstr "" #: libmalcontent-ui/gs-content-rating.c:226 #: libmalcontent-ui/gs-content-rating.c:483 msgid "Teen" msgstr "" #: libmalcontent-ui/gs-content-rating.c:228 #: libmalcontent-ui/gs-content-rating.c:482 msgid "Everyone 10+" msgstr "" #: libmalcontent-ui/gs-content-rating.c:230 #: libmalcontent-ui/gs-content-rating.c:481 msgid "Everyone" msgstr "" #: libmalcontent-ui/gs-content-rating.c:232 #: libmalcontent-ui/gs-content-rating.c:480 msgid "Early Childhood" msgstr "" #. Translators: the placeholder is a user’s full name #: libmalcontent-ui/restrict-applications-dialog.c:222 #, c-format msgid "Restrict %s from using the following installed applications." msgstr "" #: libmalcontent-ui/restrict-applications-dialog.ui:6 #: libmalcontent-ui/restrict-applications-dialog.ui:12 msgid "Restrict Applications" msgstr "" #: libmalcontent-ui/restrict-applications-selector.ui:24 msgid "No applications found to restrict." msgstr "" #. Translators: this is the full name for an unknown user account. #: libmalcontent-ui/user-controls.c:242 libmalcontent-ui/user-controls.c:253 msgid "unknown" msgstr "" #: libmalcontent-ui/user-controls.c:338 libmalcontent-ui/user-controls.c:425 #: libmalcontent-ui/user-controls.c:711 msgid "All Ages" msgstr "" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:514 #, c-format msgid "" "Prevents %s from running web browsers. Limited web content may still be " "available in other applications." msgstr "" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:519 #, c-format msgid "Prevents specified applications from being used by %s." msgstr "" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:524 #, c-format msgid "Prevents %s from installing applications." msgstr "" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:529 #, c-format msgid "Applications installed by %s will not appear for other users." msgstr "" #: libmalcontent-ui/user-controls.ui:17 msgid "Application Usage Restrictions" msgstr "" #: libmalcontent-ui/user-controls.ui:68 msgid "Restrict _Web Browsers" msgstr "" #: libmalcontent-ui/user-controls.ui:152 msgid "_Restrict Applications" msgstr "" #: libmalcontent-ui/user-controls.ui:231 msgid "Software Installation Restrictions" msgstr "" #: libmalcontent-ui/user-controls.ui:281 msgid "Restrict Application _Installation" msgstr "" #: libmalcontent-ui/user-controls.ui:366 msgid "Restrict Application Installation for _Others" msgstr "" #: libmalcontent-ui/user-controls.ui:451 msgid "Application _Suitability" msgstr "" #: libmalcontent-ui/user-controls.ui:473 msgid "" "Restricts browsing or installation of applications to applications suitable " "for certain ages or above." msgstr "" #. Translators: This is the title of the main window #. Translators: the name of the application as it appears in a software center #: malcontent-control/application.c:105 malcontent-control/main.ui:12 #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:9 #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:3 msgid "Parental Controls" msgstr "" #: malcontent-control/application.c:270 msgid "Copyright © 2019, 2020 Endless Mobile, Inc." msgstr "" #. Translators: this should be "translated" to the #. names of people who have translated Malcontent into #. this language, one per line. #: malcontent-control/application.c:275 msgid "translator-credits" msgstr "" #. Translators: "Malcontent" is the brand name of this #. project, so should not be translated. #: malcontent-control/application.c:281 msgid "Malcontent Website" msgstr "" #: malcontent-control/application.c:299 msgid "The help contents could not be displayed" msgstr "" #: malcontent-control/application.c:336 msgid "Failed to load user data from the system" msgstr "" #: malcontent-control/application.c:338 msgid "Please make sure that the AccountsService is installed and enabled." msgstr "" #: malcontent-control/carousel.ui:48 msgid "Previous Page" msgstr "" #: malcontent-control/carousel.ui:74 msgid "Next Page" msgstr "" #: malcontent-control/main.ui:93 msgid "Permission Required" msgstr "" #: malcontent-control/main.ui:107 msgid "" "Permission is required to view and change user parental controls settings." msgstr "" #: malcontent-control/main.ui:148 msgid "No Child Users Configured" msgstr "" #: malcontent-control/main.ui:162 msgid "" "No child users are currently set up on the system. Create one before setting " "up their parental controls." msgstr "" #: malcontent-control/main.ui:174 msgid "Create _Child User" msgstr "" #: malcontent-control/main.ui:202 msgid "Loading…" msgstr "" #: malcontent-control/main.ui:265 msgid "_Help" msgstr "സഹായം (_H)" #: malcontent-control/main.ui:269 msgid "_About Parental Controls" msgstr "" #. Translators: the brief summary of the application as it appears in a software center. #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:12 #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:4 msgid "Set parental controls and monitor usage by users" msgstr "" #. Translators: These are the application description paragraphs in the AppData file. #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:16 msgid "" "Manage users’ parental controls restrictions, controlling how long they can " "use the computer for, what software they can install, and what installed " "software they can run." msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:39 msgid "The GNOME Project" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:50 #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:59 msgid "Minor improvements to parental controls application UI" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:51 msgid "Add a user manual" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:52 msgid "Translation updates" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:60 msgid "Translations to Ukrainian and Polish" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:67 msgid "Improve parental controls application UI and add icon" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:68 msgid "Support for indicating which accounts are parent accounts" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:75 msgid "Initial release of basic parental controls application" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:76 msgid "Support for setting app installation and run restrictions on users" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:83 msgid "Maintenance release of underlying parental controls library" msgstr "" #. Translators: Do NOT translate or transliterate this text (this is an icon file name)! #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:7 msgid "org.freedesktop.MalcontentControl" msgstr "" #. Translators: Search terms to find this application. Do NOT translate or localise the semicolons! The list MUST also end with a semicolon! #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:13 msgid "" "parental controls;screen time;app restrictions;web browser restrictions;oars;" "usage;usage limit;kid;child;" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.policy.in:9 msgid "Manage parental controls" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.policy.in:10 msgid "Authentication is required to read and change user parental controls" msgstr "" #: malcontent-control/user-selector.c:426 msgid "Your account" msgstr "നിങ്ങളുടെ അക്കൌണ്ട്‌" #. Always allow root, to avoid a situation where this PAM module prevents #. * all users logging in with no way of recovery. #: pam/pam_malcontent.c:142 pam/pam_malcontent.c:188 #, c-format msgid "User ‘%s’ has no time limits enabled" msgstr "" #: pam/pam_malcontent.c:151 pam/pam_malcontent.c:172 #, c-format msgid "Error getting session limits for user ‘%s’: %s" msgstr "" #: pam/pam_malcontent.c:182 #, c-format msgid "User ‘%s’ has no time remaining" msgstr "" #: pam/pam_malcontent.c:200 #, c-format msgid "Error setting time limit on login session: %s" msgstr "" #~ msgid "No cartoon violence" #~ msgstr "കാർട്ടൂൺ അക്രമം പാടില്ല" #~ msgid "Cartoon characters in unsafe situations" #~ msgstr "സുരക്ഷിതമല്ലാത്ത സാഹചര്യങ്ങളിലെ കാർട്ടൂൺ പ്രതീകങ്ങൾ" #~ msgid "Cartoon characters in aggressive conflict" #~ msgstr "ആക്രമണ സംഘർഷത്താലുള്ള കാർട്ടൂൺ പ്രതീകങ്ങൾ" #~ msgid "Graphic violence involving cartoon characters" #~ msgstr "കാർട്ടൂൺ പ്രതീകങ്ങൾ ഉൾപ്പെടുന്ന വിവരണരൂപേണയുള്ള അക്രമം" #~ msgid "No fantasy violence" #~ msgstr "കാൽപനിക അക്രമം പാടില്ല" #~ msgid "Characters in unsafe situations easily distinguishable from reality" #~ msgstr "" #~ "സുരക്ഷിതമല്ലാത്ത സാഹചര്യങ്ങളിൽ പ്രതീകങ്ങൾ യാഥാർഥ്യത്തിൽ നിന്ന് എളുപ്പത്തിൽ " #~ "വേർതിരിച്ചറിയാൻ കഴിയുന്നതാണ്" #~ msgid "" #~ "Characters in aggressive conflict easily distinguishable from reality" #~ msgstr "" #~ "ആക്രമണകാരികളായ പ്രതീകങ്ങൾ യാഥാർഥ്യത്തിൽ നിന്ന് എളുപ്പത്തിൽ വേർതിരിച്ചറിയാൻ കഴിയുന്നതാണ്" #~ msgid "Graphic violence easily distinguishable from reality" #~ msgstr "" #~ "യാഥാർത്ഥ്യത്തെ തിരിച്ചറിയാൻ വിവരണരൂപേണയുള്ള അതിക്രമം എളുപ്പത്തിൽ വേർതിരിച്ചറിയാൻ കഴിയും" #~ msgid "No realistic violence" #~ msgstr "യാഥാർഥ്യമായ അക്രമം പാടില്ല" #~ msgid "Mildly realistic characters in unsafe situations" #~ msgstr "സുരക്ഷിതമല്ലാത്ത സാഹചര്യങ്ങളിലെ യാഥാസ്ഥിതിക സൗമ്യ പ്രതീകങ്ങൾ" #~ msgid "Depictions of realistic characters in aggressive conflict" #~ msgstr "ആക്രമണാത്മക സംഘർഷത്തിൽ യാഥാസ്ഥിതിക കഥാപാത്രങ്ങളുടെ ചിത്രീകരണം" #~ msgid "Graphic violence involving realistic characters" #~ msgstr "യഥാർത്ഥ പ്രതീകങ്ങൾ ഉൾപ്പെടുന്ന വിവരണരൂപേണയുള്ള അക്രമം" #~ msgid "No bloodshed" #~ msgstr "രക്തച്ചൊരിച്ചില്‍ പാടില്ല" #~ msgid "Unrealistic bloodshed" #~ msgstr "അയാഥാര്‍ത്ഥ്യമായ രക്തച്ചൊരിച്ചില്‍" #~ msgid "Realistic bloodshed" #~ msgstr "യഥാർത്ഥ രക്തച്ചൊരിച്ചിൽ" #~ msgid "Depictions of bloodshed and the mutilation of body parts" #~ msgstr "രക്തച്ചൊരിച്ചിലെ പ്രതിബന്ധം, ശരീര ഭാഗങ്ങളുടെ അവയവഛേദം" #~ msgid "No sexual violence" #~ msgstr "ലൈംഗിക അതിക്രമം പാടില്ല" #~ msgid "Rape or other violent sexual behavior" #~ msgstr "ബലാത്സംഗം അല്ലെങ്കിൽ മറ്റ് അക്രമാസക്തമായ ലൈംഗിക പെരുമാറ്റം" #~ msgid "No references to alcohol" #~ msgstr "മദ്യത്തെ പറ്റി പരാമർശിച്ചിട്ടില്ല" #~ msgid "References to alcoholic beverages" #~ msgstr "ലഹരിപാനീയങ്ങൾക്കുള്ള പരാമർശങ്ങൾ" #~ msgid "Use of alcoholic beverages" #~ msgstr "ലഹരിപാനീയങ്ങളുടെ ഉപയോഗം" #~ msgid "No references to illicit drugs" #~ msgstr "നിയമവിരുദ്ധമായ ലഹരിമരുന്നുകളെ പറ്റിയുള്ള പരാമർശങ്ങളൊന്നുമില്ല" #~ msgid "References to illicit drugs" #~ msgstr "നിയമവിരുദ്ധമായ ലഹരിമരുന്നുകളെ പറ്റിയുള്ള പരാമർശം" #~ msgid "Use of illicit drugs" #~ msgstr "അനധികൃത മരുന്നുകളുടെ ഉപയോഗം" #~ msgid "References to tobacco products" #~ msgstr "പുകയില ഉത്പന്നങ്ങൾക്കുള്ള പരാമർശങ്ങൾ" #~ msgid "Use of tobacco products" #~ msgstr "പുകയില ഉൽപന്നങ്ങളുടെ ഉപയോഗം" #~ msgid "No nudity of any sort" #~ msgstr "ഏത് തരത്തിലുള്ള നഗ്നതയും പാടില്ല" #~ msgid "Brief artistic nudity" #~ msgstr "ലഘു കലാപരമായ നഗ്നത" #~ msgid "Prolonged nudity" #~ msgstr "നീണ്ട നഗ്നത" #~ msgid "Provocative references or depictions" #~ msgstr "പ്രകോപനപരമായ പരാമർശങ്ങൾ അല്ലെങ്കിൽ ചിത്രീകരണങ്ങൾ" #~ msgid "Sexual references or depictions" #~ msgstr "ലൈംഗിക പരാമർശങ്ങൾ അല്ലെങ്കിൽ ചിത്രീകരണങ്ങൾ" #~ msgid "Graphic sexual behavior" #~ msgstr "വിവരണരൂപേണയുള്ള ലൈംഗിക പെരുമാറ്റം" #~ msgid "No profanity of any kind" #~ msgstr "ഒരു തരത്തിലുള്ള അശ്ലീലവും ഇല്ല" #~ msgid "Mild or infrequent use of profanity" #~ msgstr "ചെറുതോ അപൂര്‍വ്വമായതോ അശ്ലീലങ്ങളുടെ ഉപയോഗം" #~ msgid "Moderate use of profanity" #~ msgstr "അശ്ലീലത്തിൻറെ മിതമായ ഉപയോഗം" #~ msgid "Strong or frequent use of profanity" #~ msgstr "വൃത്തികെട്ട അല്ലെങ്കിൽ പതിവായി ഉപയോഗിക്കുന്ന അശ്ലീലം" #~ msgid "No inappropriate humor" #~ msgstr "അനുചിതമായ ഹാസ്യം പാടില്ല" #~ msgid "Slapstick humor" #~ msgstr "തരം താണ ഹാസ്യം" #~ msgid "Vulgar or bathroom humor" #~ msgstr "അസഭ്യമായ അല്ലെങ്കിൽ ബാത്ത്റൂം ഹാസ്യം" #~ msgid "Mature or sexual humor" #~ msgstr "പക്വമായ അല്ലെങ്കിൽ ലൈംഗിക ഹാസ്യം" #~ msgid "No discriminatory language of any kind" #~ msgstr "ഏതെങ്കിലും തരത്തിലുള്ള വിവേചന ഭാഷയില്ല" #~ msgid "Negativity towards a specific group of people" #~ msgstr "ഒരു പ്രത്യേക കൂട്ടത്തോടുള്ള അവഗണന" #~ msgid "Discrimination designed to cause emotional harm" #~ msgstr "വൈകാരികമായ ദോഷം ഉണ്ടാക്കുന്നതിന് രൂപകൽപ്പന ചെയ്തിരിക്കുന്ന വിവേചനങ്ങൾ" #~ msgid "Explicit discrimination based on gender, sexuality, race or religion" #~ msgstr "" #~ "ലിംഗഭേദം, ലൈംഗികത, വർഗം അല്ലെങ്കിൽ മതം എന്നിവയെ അടിസ്ഥാനമാക്കിയുള്ള വിവേചനം" #~ msgid "No advertising of any kind" #~ msgstr "ഒരു തരത്തിലുള്ള പരസ്യവും പാടില്ല" #~ msgid "Product placement" #~ msgstr "ഉൽപന്നനിയമനം" #~ msgid "Explicit references to specific brands or trademarked products" #~ msgstr "നിർദ്ദിഷ്ട ബ്രാൻഡുകൾ അല്ലെങ്കിൽ വ്യാപാരമുദ്ര ഉല്പന്നങ്ങൾക്ക് വ്യക്തമായ പരാമർശങ്ങൾ" #~ msgid "Users are encouraged to purchase specific real-world items" #~ msgstr "ഉപയോക്താക്കൾക്ക് നിർദ്ദിഷ്ട യഥാർത്ഥ ഇനങ്ങൾ വാങ്ങാൻ പ്രോത്സാഹിപ്പിക്കുന്നു" #~ msgid "No gambling of any kind" #~ msgstr "ഒരു തരത്തിലുള്ള ചൂതാട്ടവുമില്ല" #~ msgid "Gambling on random events using tokens or credits" #~ msgstr "അടയാളങ്ങൾ അല്ലെങ്കിൽ വായ്‌പ്പ ഉപയോഗിച്ചുള്ള ആകസ്‌മികമായ ഇനങ്ങളിലെ ചൂതാട്ടം" #~ msgid "Gambling using “play” money" #~ msgstr "യഥാർത്ഥമല്ലാത്ത പണം ഉപയോഗിച്ച് ചൂതാട്ടം" #~ msgid "Gambling using real money" #~ msgstr "യഥാർത്ഥ പണം ഉപയോഗിച്ച് ചൂതാട്ടം" #~ msgid "No ability to spend money" #~ msgstr "പണം ചെലവഴിക്കാൻ ശേഷിയില്ല" #~ msgid "Users are encouraged to donate real money" #~ msgstr "യഥാർത്ഥ പണം സംഭാവന ചെയ്യാൻ ഉപയോക്താക്കളെ പ്രോത്സാഹിപ്പിക്കുന്നു" #~ msgid "No way to chat with other users" #~ msgstr "മറ്റ് ഉപയോക്താക്കളുമായി ചാറ്റ് ചെയ്യുന്നതിനുള്ള മാർഗമില്ല" #~ msgid "Moderated chat functionality between users" #~ msgstr "ഉപയോക്താക്കൾക്കിടയിലുള്ള മിതമായ സംഭാഷണ പ്രവർത്തനം" #~ msgid "Uncontrolled chat functionality between users" #~ msgstr "ഉപയോക്താക്കൾക്കിടയിൽ നിയന്ത്രിക്കാത്ത സംഭാഷണ പ്രവർത്തനം" #~ msgid "No way to talk with other users" #~ msgstr "മറ്റ് ഉപയോക്താക്കളുമായി സംസാരിക്കാൻ യാതൊരു വഴിയുമില്ല" #~ msgid "Uncontrolled audio or video chat functionality between users" #~ msgstr "ഉപയോക്താക്കളെ തമ്മിൽ നിയന്ത്രിക്കാത്ത ഓഡിയോ അല്ലെങ്കിൽ വീഡിയോ ചാറ്റ് പ്രവർത്തനം" #~ msgid "No sharing of social network usernames or email addresses" #~ msgstr "സാമൂഹിക ശൃംഖലകളിലെ ഉപയോക്തൃനാമങ്ങൾ അല്ലെങ്കിൽ ഇമെയിൽ വിലാസങ്ങൾ പങ്കിടരുത്" #~ msgid "Sharing social network usernames or email addresses" #~ msgstr "സാമൂഹിക ശൃംഖലകളിലെ ഉപയോക്തൃനാമങ്ങൾ അല്ലെങ്കിൽ ഇമെയിൽ വിലാസങ്ങൾ പങ്കിടുന്നു" #~ msgid "Checking for the latest application version" #~ msgstr "ഏറ്റവും പുതിയ അപ്ലിക്കേഷൻ പതിപ്പിനായി പരിശോധിക്കുന്നു" #~ msgid "Sharing diagnostic data that does not let others identify the user" #~ msgstr "മറ്റുള്ളവർക്ക് തിരിച്ചറിയാത്ത രീതിയിൽ ഡയഗണോസ്റ്റിക് വിവരം പങ്കുവെയ്ക്കുന്നു" #~ msgid "Sharing information that lets others identify the user" #~ msgstr "മറ്റുള്ളവരെ തിരിച്ചറിയാൻ അനുവദിക്കുന്ന വിവരങ്ങൾ പങ്കുവെക്കൽ" #~ msgid "No references to homosexuality" #~ msgstr "സ്വവർഗാനുരാഗത്തെക്കുറിച്ച് പരാമർശങ്ങളില്ല" #~ msgid "Indirect references to homosexuality" #~ msgstr "സ്വവർഗ്ഗരതിയെക്കുറിച്ചുള്ള പരോക്ഷ പരാമർശങ്ങൾ" #~ msgid "Kissing between people of the same gender" #~ msgstr "ഒരേ ലിംഗത്തിലുള്ള ആളുകൾ തമ്മിലുള്ള ചുംബനം" #~ msgid "Graphic sexual behavior between people of the same gender" #~ msgstr "ഒരേ ലിംഗത്തിലുള്ള ആളുകൾ തമ്മിലുള്ള വിവരണരൂപേനയുള്ള ലൈംഗിക പെരുമാറ്റം" #~ msgid "No references to prostitution" #~ msgstr "വേശ്യാവൃത്തിയെ പറ്റി പരാമർശങ്ങളൊന്നുമില്ല" #~ msgid "Indirect references to prostitution" #~ msgstr "വേശ്യാവൃത്തിക്ക് പരോക്ഷ സൂചനകൾ" #~ msgid "Graphic depictions of the act of prostitution" #~ msgstr "വേശ്യാവൃത്തിയെ പറ്റിയുള്ള വിവരണരൂപേനയുള്ള ചിത്രീകരണം" #~ msgid "No references to adultery" #~ msgstr "വ്യഭിചാരത്തെ പറ്റി പരാമർശങ്ങളില്ല" #~ msgid "Indirect references to adultery" #~ msgstr "വ്യഭിചാരത്തെക്കുറിച്ച് പരോക്ഷ സൂചനകൾ" #~ msgid "Graphic depictions of the act of adultery" #~ msgstr "വ്യഭിചാരത്തെ പറ്റിയുള്ള വിവരണരൂപേനയുള്ള ചിത്രീകരണം" #~ msgid "No sexualized characters" #~ msgstr "ലൈംഗികതയുള്ള പ്രതീകങ്ങൾ പാടില്ല" #~ msgid "Scantily clad human characters" #~ msgstr "നാമമാത്രമായ വസ്ത്രമുള്ള മനുഷ്യ പ്രതീകങ്ങൾ" #~ msgid "Overtly sexualized human characters" #~ msgstr "അതിലൈംഗികതയുള്ള മനുഷ്യ പ്രതീകങ്ങൾ" #~ msgid "No references to desecration" #~ msgstr "ഹീനതയെ പറ്റിയുള്ള പരാമർശങ്ങളൊന്നുമില്ല" #~ msgid "Depictions of modern-day human desecration" #~ msgstr "ആധുനിക മനുഷ്യഹീനതയെ പറ്റിയുള്ള ചിത്രീകരണം" #~ msgid "Graphic depictions of modern-day desecration" #~ msgstr "ആധുനിക ദിനാചരണത്തിൻ്റെ വിവരണരൂപേനയുള്ള ചിത്രീകരണം" #~ msgid "No visible dead human remains" #~ msgstr "മരിച്ചവരുടെ മൃതദേഹങ്ങൾ കാണാതിരിക്കൽ" #~ msgid "Visible dead human remains" #~ msgstr "മരിച്ചവരുടെ അവശിഷ്ടങ്ങൾ" #~ msgid "Dead human remains that are exposed to the elements" #~ msgstr "അംഗഭംഗം സംഭവിച്ച മനുഷ്യ മൃതദേഹങ്ങൾ" #~ msgid "Graphic depictions of desecration of human bodies" #~ msgstr "മനുഷ്യ ശരീരം നശിപ്പിക്കുന്നതിൻ്റെ വിവരണരൂപേനയുള്ള ചിത്രീകരണം" #~ msgid "No references to slavery" #~ msgstr "അടിമത്തെ പറ്റി പരാമർശമില്ല" #~ msgid "Depictions of modern-day slavery" #~ msgstr "ആധുനിക കാലഘട്ടത്തിലെ അടിമത്തത്തെ പറ്റിയുള്ള പരാമർശങ്ങൾ" #~ msgid "Graphic depictions of modern-day slavery" #~ msgstr "ആധുനിക കാലഘട്ടത്തിലെ അടിമത്തത്തിൻ്റെ വിവരണരൂപേനയുള്ള ചിത്രീകരണം" malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/po/ms.po000066400000000000000000000620771505556674000232050ustar00rootroot00000000000000# Malay translations for malcontent package. # Copyright (C) 2020 THE malcontent'S COPYRIGHT HOLDER # This file is distributed under the same license as the malcontent package. # Automatically generated, 2020. # # Translators: # abuyop , 2020 # msgid "" msgstr "" "Project-Id-Version: malcontent\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-06-10 12:08+0100\n" "PO-Revision-Date: 2020-04-17 21:58+0000\n" "Last-Translator: abuyop , 2020\n" "Language-Team: Malay (https://www.transifex.com/endless-os/teams/9016/ms/)\n" "Language: ms\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" #: accounts-service/com.endlessm.ParentalControls.policy.in:4 msgid "Change your own app filter" msgstr "Ubah penapis apl anda sendiri" #: accounts-service/com.endlessm.ParentalControls.policy.in:5 msgid "Authentication is required to change your app filter." msgstr "Pengesahihan diperlukan untuk mengubah penapis apl anda." #: accounts-service/com.endlessm.ParentalControls.policy.in:14 msgid "Read your own app filter" msgstr "Baca penapis apl anda sendiri" #: accounts-service/com.endlessm.ParentalControls.policy.in:15 msgid "Authentication is required to read your app filter." msgstr "Pengesahihan diperlukan untuk membaca penapis apl anda." #: accounts-service/com.endlessm.ParentalControls.policy.in:24 msgid "Change another user’s app filter" msgstr "Ubah penapis apl pengguna lain" #: accounts-service/com.endlessm.ParentalControls.policy.in:25 msgid "Authentication is required to change another user’s app filter." msgstr "Pengesahihan diperlukan untuk mengubah penapis apl pengguna yang lain." #: accounts-service/com.endlessm.ParentalControls.policy.in:34 msgid "Read another user’s app filter" msgstr "Baca penapis apl pengguna lain" #: accounts-service/com.endlessm.ParentalControls.policy.in:35 msgid "Authentication is required to read another user’s app filter." msgstr "Pengesahihan diperlukan untuk membaca penapis apl pengguna yang lain." #: accounts-service/com.endlessm.ParentalControls.policy.in:44 msgid "Change your own session limits" msgstr "Ubah had sesi anda sendiri" #: accounts-service/com.endlessm.ParentalControls.policy.in:45 msgid "Authentication is required to change your session limits." msgstr "Pengesahihan diperlukan untuk mengubah had sesi anda." #: accounts-service/com.endlessm.ParentalControls.policy.in:54 msgid "Read your own session limits" msgstr "Baca had sesi anda sendiri" #: accounts-service/com.endlessm.ParentalControls.policy.in:55 msgid "Authentication is required to read your session limits." msgstr "Pengesahihan diperlukan untuk membaca had sesi anda." #: accounts-service/com.endlessm.ParentalControls.policy.in:64 msgid "Change another user’s session limits" msgstr "Ubah had sesi pengguna lain" #: accounts-service/com.endlessm.ParentalControls.policy.in:65 msgid "Authentication is required to change another user’s session limits." msgstr "Pengesahihan diperlukan untuk mengubah had pengguna yang lain." #: accounts-service/com.endlessm.ParentalControls.policy.in:74 msgid "Read another user’s session limits" msgstr "Baca had sesi pengguna lain" #: accounts-service/com.endlessm.ParentalControls.policy.in:75 msgid "Authentication is required to read another user’s session limits." msgstr "Pengesahihan diperlukan untuk membaca had sesi pengguna yang lain." #: accounts-service/com.endlessm.ParentalControls.policy.in:84 msgid "Change your own account info" msgstr "Ubah maklumat akaun anda sendiri" #: accounts-service/com.endlessm.ParentalControls.policy.in:85 msgid "Authentication is required to change your account info." msgstr "Pengesahihan diperlukan untuk mengubah maklumat akaun anda." #: accounts-service/com.endlessm.ParentalControls.policy.in:94 msgid "Read your own account info" msgstr "Baca maklumat akaun anda sendiri" #: accounts-service/com.endlessm.ParentalControls.policy.in:95 msgid "Authentication is required to read your account info." msgstr "Pengesahihan diperlukan untuk membaca maklumat akaun anda." #: accounts-service/com.endlessm.ParentalControls.policy.in:104 msgid "Change another user’s account info" msgstr "Ubah maklumat akaun pengguna lain" #: accounts-service/com.endlessm.ParentalControls.policy.in:105 msgid "Authentication is required to change another user’s account info." msgstr "" "Pengesahihan diperlukan untuk mengubah maklumat akaun pengguna yang lain." #: accounts-service/com.endlessm.ParentalControls.policy.in:114 msgid "Read another user’s account info" msgstr "Baca maklumat akaun pengguna lain" #: accounts-service/com.endlessm.ParentalControls.policy.in:115 msgid "Authentication is required to read another user’s account info." msgstr "" "Pengesahihan diperlukan untuk membaca maklumat akaun pengguna yang lain." #: libmalcontent/app-filter.c:694 #, c-format msgid "App filter for user %u was in an unrecognized format" msgstr "" #: libmalcontent/app-filter.c:725 #, c-format msgid "OARS filter for user %u has an unrecognized kind ‘%s’" msgstr "" #: libmalcontent/manager.c:283 libmalcontent/manager.c:412 #, c-format msgid "Not allowed to query app filter data for user %u" msgstr "" #: libmalcontent/manager.c:288 #, c-format msgid "User %u does not exist" msgstr "" #: libmalcontent/manager.c:394 msgid "App filtering is globally disabled" msgstr "" #: libmalcontent/manager.c:777 msgid "Session limits are globally disabled" msgstr "" #: libmalcontent/manager.c:795 #, c-format msgid "Not allowed to query session limits data for user %u" msgstr "" #: libmalcontent/session-limits.c:306 #, c-format msgid "Session limit for user %u was in an unrecognized format" msgstr "" #: libmalcontent/session-limits.c:328 #, c-format msgid "Session limit for user %u has an unrecognized type ‘%u’" msgstr "" #: libmalcontent/session-limits.c:346 #, c-format msgid "Session limit for user %u has invalid daily schedule %u–%u" msgstr "" #. TRANSLATORS: This is the formatting of English and localized name #. of the rating e.g. "Adults Only (solo adultos)" #: libmalcontent-ui/gs-content-rating.c:75 #, c-format msgid "%s (%s)" msgstr "" #: libmalcontent-ui/gs-content-rating.c:209 msgid "General" msgstr "" #: libmalcontent-ui/gs-content-rating.c:218 msgid "ALL" msgstr "" #: libmalcontent-ui/gs-content-rating.c:222 #: libmalcontent-ui/gs-content-rating.c:485 msgid "Adults Only" msgstr "" #: libmalcontent-ui/gs-content-rating.c:224 #: libmalcontent-ui/gs-content-rating.c:484 msgid "Mature" msgstr "" #: libmalcontent-ui/gs-content-rating.c:226 #: libmalcontent-ui/gs-content-rating.c:483 msgid "Teen" msgstr "" #: libmalcontent-ui/gs-content-rating.c:228 #: libmalcontent-ui/gs-content-rating.c:482 msgid "Everyone 10+" msgstr "" #: libmalcontent-ui/gs-content-rating.c:230 #: libmalcontent-ui/gs-content-rating.c:481 msgid "Everyone" msgstr "" #: libmalcontent-ui/gs-content-rating.c:232 #: libmalcontent-ui/gs-content-rating.c:480 msgid "Early Childhood" msgstr "" #. Translators: the placeholder is a user’s full name #: libmalcontent-ui/restrict-applications-dialog.c:222 #, c-format msgid "Restrict %s from using the following installed applications." msgstr "" #: libmalcontent-ui/restrict-applications-dialog.ui:6 #: libmalcontent-ui/restrict-applications-dialog.ui:12 msgid "Restrict Applications" msgstr "" #: libmalcontent-ui/restrict-applications-selector.ui:24 msgid "No applications found to restrict." msgstr "" #. Translators: this is the full name for an unknown user account. #: libmalcontent-ui/user-controls.c:242 libmalcontent-ui/user-controls.c:253 msgid "unknown" msgstr "" #: libmalcontent-ui/user-controls.c:338 libmalcontent-ui/user-controls.c:425 #: libmalcontent-ui/user-controls.c:711 msgid "All Ages" msgstr "" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:514 #, c-format msgid "" "Prevents %s from running web browsers. Limited web content may still be " "available in other applications." msgstr "" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:519 #, c-format msgid "Prevents specified applications from being used by %s." msgstr "" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:524 #, c-format msgid "Prevents %s from installing applications." msgstr "" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:529 #, c-format msgid "Applications installed by %s will not appear for other users." msgstr "" #: libmalcontent-ui/user-controls.ui:17 msgid "Application Usage Restrictions" msgstr "" #: libmalcontent-ui/user-controls.ui:68 msgid "Restrict _Web Browsers" msgstr "" #: libmalcontent-ui/user-controls.ui:152 msgid "_Restrict Applications" msgstr "" #: libmalcontent-ui/user-controls.ui:231 msgid "Software Installation Restrictions" msgstr "" #: libmalcontent-ui/user-controls.ui:281 msgid "Restrict Application _Installation" msgstr "" #: libmalcontent-ui/user-controls.ui:366 msgid "Restrict Application Installation for _Others" msgstr "" #: libmalcontent-ui/user-controls.ui:451 msgid "Application _Suitability" msgstr "" #: libmalcontent-ui/user-controls.ui:473 msgid "" "Restricts browsing or installation of applications to applications suitable " "for certain ages or above." msgstr "" #. Translators: This is the title of the main window #. Translators: the name of the application as it appears in a software center #: malcontent-control/application.c:105 malcontent-control/main.ui:12 #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:9 #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:3 msgid "Parental Controls" msgstr "" #: malcontent-control/application.c:270 msgid "Copyright © 2019, 2020 Endless Mobile, Inc." msgstr "" #. Translators: this should be "translated" to the #. names of people who have translated Malcontent into #. this language, one per line. #: malcontent-control/application.c:275 msgid "translator-credits" msgstr "" #. Translators: "Malcontent" is the brand name of this #. project, so should not be translated. #: malcontent-control/application.c:281 msgid "Malcontent Website" msgstr "" #: malcontent-control/application.c:299 msgid "The help contents could not be displayed" msgstr "" #: malcontent-control/application.c:336 msgid "Failed to load user data from the system" msgstr "" #: malcontent-control/application.c:338 msgid "Please make sure that the AccountsService is installed and enabled." msgstr "" #: malcontent-control/carousel.ui:48 msgid "Previous Page" msgstr "" #: malcontent-control/carousel.ui:74 msgid "Next Page" msgstr "" #: malcontent-control/main.ui:93 msgid "Permission Required" msgstr "" #: malcontent-control/main.ui:107 msgid "" "Permission is required to view and change user parental controls settings." msgstr "" #: malcontent-control/main.ui:148 msgid "No Child Users Configured" msgstr "" #: malcontent-control/main.ui:162 msgid "" "No child users are currently set up on the system. Create one before setting " "up their parental controls." msgstr "" #: malcontent-control/main.ui:174 msgid "Create _Child User" msgstr "" #: malcontent-control/main.ui:202 msgid "Loading…" msgstr "" #: malcontent-control/main.ui:265 msgid "_Help" msgstr "_Bantuan" #: malcontent-control/main.ui:269 msgid "_About Parental Controls" msgstr "" #. Translators: the brief summary of the application as it appears in a software center. #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:12 #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:4 msgid "Set parental controls and monitor usage by users" msgstr "" #. Translators: These are the application description paragraphs in the AppData file. #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:16 msgid "" "Manage users’ parental controls restrictions, controlling how long they can " "use the computer for, what software they can install, and what installed " "software they can run." msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:39 msgid "The GNOME Project" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:50 #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:59 msgid "Minor improvements to parental controls application UI" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:51 msgid "Add a user manual" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:52 msgid "Translation updates" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:60 msgid "Translations to Ukrainian and Polish" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:67 msgid "Improve parental controls application UI and add icon" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:68 msgid "Support for indicating which accounts are parent accounts" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:75 msgid "Initial release of basic parental controls application" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:76 msgid "Support for setting app installation and run restrictions on users" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:83 msgid "Maintenance release of underlying parental controls library" msgstr "" #. Translators: Do NOT translate or transliterate this text (this is an icon file name)! #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:7 msgid "org.freedesktop.MalcontentControl" msgstr "" #. Translators: Search terms to find this application. Do NOT translate or localise the semicolons! The list MUST also end with a semicolon! #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:13 msgid "" "parental controls;screen time;app restrictions;web browser restrictions;oars;" "usage;usage limit;kid;child;" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.policy.in:9 msgid "Manage parental controls" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.policy.in:10 msgid "Authentication is required to read and change user parental controls" msgstr "" #: malcontent-control/user-selector.c:426 msgid "Your account" msgstr "Akaun anda" #. Always allow root, to avoid a situation where this PAM module prevents #. * all users logging in with no way of recovery. #: pam/pam_malcontent.c:142 pam/pam_malcontent.c:188 #, c-format msgid "User ‘%s’ has no time limits enabled" msgstr "" #: pam/pam_malcontent.c:151 pam/pam_malcontent.c:172 #, c-format msgid "Error getting session limits for user ‘%s’: %s" msgstr "" #: pam/pam_malcontent.c:182 #, c-format msgid "User ‘%s’ has no time remaining" msgstr "" #: pam/pam_malcontent.c:200 #, c-format msgid "Error setting time limit on login session: %s" msgstr "" #~ msgid "No cartoon violence" #~ msgstr "Tiada aksi keganasan kartun" #~ msgid "Cartoon characters in unsafe situations" #~ msgstr "Karakter-karakter kartun dalam situasi-situasi tidak selamat" #~ msgid "Cartoon characters in aggressive conflict" #~ msgstr "Karakter-karakter kartun berada dalam konflik yang agresif" #~ msgid "Graphic violence involving cartoon characters" #~ msgstr "" #~ "Keganasan dalam bentuk grafik yang melibatkan karakter-karakter kartun" #~ msgid "No fantasy violence" #~ msgstr "Tiada aksi keganasan fantasi" #~ msgid "Characters in unsafe situations easily distinguishable from reality" #~ msgstr "" #~ "Karakter-karakter dalam situasi tidak selamat yang mudah dibezakan dengan " #~ "realiti" #~ msgid "" #~ "Characters in aggressive conflict easily distinguishable from reality" #~ msgstr "" #~ "Karakter-karakter berada dalam konflik agresif yang mudah dibezakan " #~ "dengan realiti" #~ msgid "Graphic violence easily distinguishable from reality" #~ msgstr "Keganasan dalam bentuk grafik yang mudah dibezakan dengan realiti" #~ msgid "No realistic violence" #~ msgstr "Tiada aksi keganasan realistik" #~ msgid "Mildly realistic characters in unsafe situations" #~ msgstr "" #~ "Karakter-karakter berkeadaan sedikit realistik dalam situasi-situasi " #~ "tidak selamat" #~ msgid "Depictions of realistic characters in aggressive conflict" #~ msgstr "" #~ "Pelukisan karakter-karakter berkeadaan realistik dengan konflik agresif" #~ msgid "Graphic violence involving realistic characters" #~ msgstr "" #~ "Keganasan dalam bentuk grafik yang melibatkan karakter-karakter " #~ "berkeadaan realistik" #~ msgid "No bloodshed" #~ msgstr "Tiada pertumpahan darah" #~ msgid "Unrealistic bloodshed" #~ msgstr "Pertumpahan darah tidak realistik" #~ msgid "Realistic bloodshed" #~ msgstr "Pertumpahan darah yang realistik" #~ msgid "Depictions of bloodshed and the mutilation of body parts" #~ msgstr "Pelukisan pertumpahan darah dan pencacatan anggota badan" #~ msgid "No sexual violence" #~ msgstr "Tiada aksi keganasan seks" #~ msgid "Rape or other violent sexual behavior" #~ msgstr "Aksi rogol atau lain-lain kelakuan seks ganas" #~ msgid "No references to alcohol" #~ msgstr "Tiada penggambaran berkenaan alkohol" #~ msgid "References to alcoholic beverages" #~ msgstr "Gambaran berkenaan minuman beralkohol" #~ msgid "Use of alcoholic beverages" #~ msgstr "Penggunaan minuman beralkohol" #~ msgid "No references to illicit drugs" #~ msgstr "Tiada penggambaran berkenaan dadah-dadah terlarang" #~ msgid "References to illicit drugs" #~ msgstr "Gambaran berkenaan dadah-dadah terlarang" #~ msgid "Use of illicit drugs" #~ msgstr "Penggunaan dadah-dadah terlarang" #~ msgid "References to tobacco products" #~ msgstr "Gambaran berkenaan produk-produk tembakau" #~ msgid "Use of tobacco products" #~ msgstr "Penggunaan produk-produk tembakau" #~ msgid "No nudity of any sort" #~ msgstr "Tiada unsur-unsur kebogelan" #~ msgid "Brief artistic nudity" #~ msgstr "Sedikit unsur-unsur kebogelan bersifat artistik" #~ msgid "Prolonged nudity" #~ msgstr "Gambaran kebogelan yang berlanjutan" #~ msgid "No references or depictions of sexual nature" #~ msgstr "Tiada gambaran berkenaan tabiat-tabiat seks" #~ msgid "Provocative references or depictions" #~ msgstr "Gambaran berkenaan sikap-sikap provokatif" #~ msgid "Sexual references or depictions" #~ msgstr "Gambaran berkenaan aksi-aksi seksual" #~ msgid "Graphic sexual behavior" #~ msgstr "Kelakuan seksual yang jelas dan nyata" #~ msgid "No profanity of any kind" #~ msgstr "Tiada aksi-aksi tidak senonoh" #~ msgid "Mild or infrequent use of profanity" #~ msgstr "Sedikit atau jarang-jarang kelakuan tidak senonoh" #~ msgid "Moderate use of profanity" #~ msgstr "Ada pelakuan tidak senonoh" #~ msgid "Strong or frequent use of profanity" #~ msgstr "Aksi-aksi tidak senonoh kerap ditayangkan atau sangat menonjol" #~ msgid "No inappropriate humor" #~ msgstr "Tiada lawak tidak senonoh" #~ msgid "Slapstick humor" #~ msgstr "Lawak bodoh" #~ msgid "Vulgar or bathroom humor" #~ msgstr "Lawak ganas" #~ msgid "Mature or sexual humor" #~ msgstr "Lawak dewasa atau seks" #~ msgid "No discriminatory language of any kind" #~ msgstr "Tiada pengucapan bersifat diskriminasi" #~ msgid "Negativity towards a specific group of people" #~ msgstr "Ada unsur-unsur negatif yang khusus kepada kumpulan tertentu" #~ msgid "Discrimination designed to cause emotional harm" #~ msgstr "Ada unsur-unsur diskriminasi yang mengugat emos" #~ msgid "Explicit discrimination based on gender, sexuality, race or religion" #~ msgstr "" #~ "Ada unsur-unsur diskriminasi terhadap jantina, seks, bangsa atau agama" #~ msgid "No advertising of any kind" #~ msgstr "Tiada pengiklanan" #~ msgid "Product placement" #~ msgstr "Ada memaparkan produk-produk tertentu" #~ msgid "Explicit references to specific brands or trademarked products" #~ msgstr "Gambaran jelas terhadap jenama-jenama atau produk-produk tertentu" #~ msgid "Users are encouraged to purchase specific real-world items" #~ msgstr "Para pengguna digalakkan membeli item-item sebenar" #~ msgid "No gambling of any kind" #~ msgstr "Tiada aksi-aksi perjudian" #~ msgid "Gambling on random events using tokens or credits" #~ msgstr "" #~ "Ada unsur-unsur perjudian pada acara-acara secara rawak menggunakan token " #~ "atau kredit" #~ msgid "Gambling using “play” money" #~ msgstr "Ada aksi perjudian menggunakan duit \"khusus\"" #~ msgid "Gambling using real money" #~ msgstr "Ada aksi perjudian menggunakan duit sebenar" #~ msgid "No ability to spend money" #~ msgstr "Tidak melibatkan penggunaan duit" #~ msgid "Users are encouraged to donate real money" #~ msgstr "Para pengguna digalakkan menderma duit sebenar" #~ msgid "Ability to spend real money in-game" #~ msgstr "Ada fungsi yang melibatkan duit di dalam permainan" #~ msgid "No way to chat with other users" #~ msgstr "Tiada fungsi sembang dengan pengguna lain" #~ msgid "User-to-user game interactions without chat functionality" #~ msgstr "Interaksi permainan pengguna-dengan-pengguna tanpa fungsi sembang" #~ msgid "Moderated chat functionality between users" #~ msgstr "Ada fungsi sembang bersifat sederhana antara pengguna " #~ msgid "Uncontrolled chat functionality between users" #~ msgstr "Ada fungsi sembang tanpa kawalan antara pengguna" #~ msgid "No way to talk with other users" #~ msgstr "Tiada fungsi berbual dengan pengguna lain" #~ msgid "Uncontrolled audio or video chat functionality between users" #~ msgstr "Ada fungsi sembang audio atau video tanpa kawalan antara pengguna" #~ msgid "No sharing of social network usernames or email addresses" #~ msgstr "Tiada perkongsian nama pengguna rangkaian sosial atau alamat emel" #~ msgid "Sharing social network usernames or email addresses" #~ msgstr "Ada perkongsian nama pengguna rangkaian sosial atau alamat emel" #~ msgid "No sharing of user information with 3rd parties" #~ msgstr "Tiada perkongsian maklumat pengguna dengan pihak ke-3" #~ msgid "Checking for the latest application version" #~ msgstr "Ada pemeriksaan versi aplikasi yang terkini" #~ msgid "Sharing diagnostic data that does not let others identify the user" #~ msgstr "" #~ "Ada perkongsian data diagnostik yang membolehkan orang lain dapat " #~ "mengenal pasti pengguna" #~ msgid "Sharing information that lets others identify the user" #~ msgstr "" #~ "Ada perkongsian maklumat yang membolehkan orang lain dapat mengenal pasti " #~ "pengguna" #~ msgid "No sharing of physical location to other users" #~ msgstr "Tiada perkongsian lokasi sebenar dengan pengguna lain" #~ msgid "Sharing physical location to other users" #~ msgstr "Ada perkongsian lokasi sebenar dengan pengguna lain" #~ msgid "No references to homosexuality" #~ msgstr "Tiada gambaran berkenaan homoseks" #~ msgid "Indirect references to homosexuality" #~ msgstr "Gambaran tidak langsung berkenaan homoseks" #~ msgid "Kissing between people of the same gender" #~ msgstr "Ada adegan cium antara sama jantina" #~ msgid "Graphic sexual behavior between people of the same gender" #~ msgstr "Ada adegan seks bergrafik antara sama jantina" #~ msgid "No references to prostitution" #~ msgstr "Tiada gambaran berkenaan pelacuran" #~ msgid "Indirect references to prostitution" #~ msgstr "Gambaran tidak langsung berkenaan pelacuran" #~ msgid "Direct references to prostitution" #~ msgstr "Ada gambaran jelas berkenaan pelacuran" #~ msgid "Graphic depictions of the act of prostitution" #~ msgstr "Ada gambaran bergrafik aksi-aksi pelacuran" #~ msgid "No references to adultery" #~ msgstr "Tiada penggambaran berkenaan zina" #~ msgid "Indirect references to adultery" #~ msgstr "Ada gambaran tidak langsung berkenaan zina" #~ msgid "Direct references to adultery" #~ msgstr "Ada gambaran jelas berkenaan zina" #~ msgid "Graphic depictions of the act of adultery" #~ msgstr "Ada gambaran bergrafik aksi-aksi penzinaan" #~ msgid "No sexualized characters" #~ msgstr "Tiada karakter-karakter seks" #~ msgid "Scantily clad human characters" #~ msgstr "Ada karakter-karakter manusia hampir tidak berpakaian" #~ msgid "Overtly sexualized human characters" #~ msgstr "Ada karakter-karakter manusia berkelakuan seks yang melampau" #~ msgid "No references to desecration" #~ msgstr "Tiada gambaran berkenaan penodaan" #~ msgid "Depictions or references to historical desecration" #~ msgstr "Ada gambaran berkenaan penodaan bersejarah" #~ msgid "Depictions of modern-day human desecration" #~ msgstr "Ada gambaran berkenaan penodaan manusia di era modern" #~ msgid "Graphic depictions of modern-day desecration" #~ msgstr "Ada gambaran jelas penodaan di era modern" #~ msgid "No visible dead human remains" #~ msgstr "Tiada penampakan mayat" #~ msgid "Visible dead human remains" #~ msgstr "Ada penampakan mayat" #~ msgid "Dead human remains that are exposed to the elements" #~ msgstr "Ada penampakan mayat yang telah terdedah dengan persekitaran" #~ msgid "Graphic depictions of desecration of human bodies" #~ msgstr "Ada gambaran jelas penodaan jasad manusia" #~ msgid "No references to slavery" #~ msgstr "Tiada gambaran berkenaan perhambaan" #~ msgid "Depictions or references to historical slavery" #~ msgstr "Ada gambaran berkenaan perhambaan bersejarah" #~ msgid "Depictions of modern-day slavery" #~ msgstr "Ada gambaran berkenaan perhambaan di era modern" #~ msgid "Graphic depictions of modern-day slavery" #~ msgstr "Ada gambaran jelas perhambaan di era modern" malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/po/nb.po000066400000000000000000000531701505556674000231570ustar00rootroot00000000000000# Norwegian Bokmal translations for malcontent package. # Copyright (C) 2020 THE malcontent'S COPYRIGHT HOLDER # This file is distributed under the same license as the malcontent package. # Automatically generated, 2020. # msgid "" msgstr "" "Project-Id-Version: malcontent\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-06-10 12:04+0100\n" "PO-Revision-Date: 2020-04-15 13:42+0100\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: nb\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: accounts-service/com.endlessm.ParentalControls.policy.in:4 msgid "Change your own app filter" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:5 msgid "Authentication is required to change your app filter." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:14 msgid "Read your own app filter" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:15 msgid "Authentication is required to read your app filter." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:24 msgid "Change another user’s app filter" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:25 msgid "Authentication is required to change another user’s app filter." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:34 msgid "Read another user’s app filter" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:35 msgid "Authentication is required to read another user’s app filter." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:44 msgid "Change your own session limits" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:45 msgid "Authentication is required to change your session limits." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:54 msgid "Read your own session limits" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:55 msgid "Authentication is required to read your session limits." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:64 msgid "Change another user’s session limits" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:65 msgid "Authentication is required to change another user’s session limits." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:74 msgid "Read another user’s session limits" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:75 msgid "Authentication is required to read another user’s session limits." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:84 msgid "Change your own account info" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:85 msgid "Authentication is required to change your account info." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:94 msgid "Read your own account info" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:95 msgid "Authentication is required to read your account info." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:104 msgid "Change another user’s account info" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:105 msgid "Authentication is required to change another user’s account info." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:114 msgid "Read another user’s account info" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:115 msgid "Authentication is required to read another user’s account info." msgstr "" #: libmalcontent/app-filter.c:694 #, c-format msgid "App filter for user %u was in an unrecognized format" msgstr "" #: libmalcontent/app-filter.c:725 #, c-format msgid "OARS filter for user %u has an unrecognized kind ‘%s’" msgstr "" #: libmalcontent/manager.c:283 libmalcontent/manager.c:412 #, c-format msgid "Not allowed to query app filter data for user %u" msgstr "" #: libmalcontent/manager.c:288 #, c-format msgid "User %u does not exist" msgstr "" #: libmalcontent/manager.c:394 msgid "App filtering is globally disabled" msgstr "" #: libmalcontent/manager.c:777 msgid "Session limits are globally disabled" msgstr "" #: libmalcontent/manager.c:795 #, c-format msgid "Not allowed to query session limits data for user %u" msgstr "" #: libmalcontent/session-limits.c:306 #, c-format msgid "Session limit for user %u was in an unrecognized format" msgstr "" #: libmalcontent/session-limits.c:328 #, c-format msgid "Session limit for user %u has an unrecognized type ‘%u’" msgstr "" #: libmalcontent/session-limits.c:346 #, c-format msgid "Session limit for user %u has invalid daily schedule %u–%u" msgstr "" #. TRANSLATORS: This is the formatting of English and localized name #. of the rating e.g. "Adults Only (solo adultos)" #: libmalcontent-ui/gs-content-rating.c:75 #, c-format msgid "%s (%s)" msgstr "" #: libmalcontent-ui/gs-content-rating.c:209 msgid "General" msgstr "" #: libmalcontent-ui/gs-content-rating.c:218 msgid "ALL" msgstr "" #: libmalcontent-ui/gs-content-rating.c:222 #: libmalcontent-ui/gs-content-rating.c:485 msgid "Adults Only" msgstr "" #: libmalcontent-ui/gs-content-rating.c:224 #: libmalcontent-ui/gs-content-rating.c:484 msgid "Mature" msgstr "" #: libmalcontent-ui/gs-content-rating.c:226 #: libmalcontent-ui/gs-content-rating.c:483 msgid "Teen" msgstr "" #: libmalcontent-ui/gs-content-rating.c:228 #: libmalcontent-ui/gs-content-rating.c:482 msgid "Everyone 10+" msgstr "" #: libmalcontent-ui/gs-content-rating.c:230 #: libmalcontent-ui/gs-content-rating.c:481 msgid "Everyone" msgstr "" #: libmalcontent-ui/gs-content-rating.c:232 #: libmalcontent-ui/gs-content-rating.c:480 msgid "Early Childhood" msgstr "" #. Translators: the placeholder is a user’s full name #: libmalcontent-ui/restrict-applications-dialog.c:222 #, c-format msgid "Restrict %s from using the following installed applications." msgstr "" #: libmalcontent-ui/restrict-applications-dialog.ui:6 #: libmalcontent-ui/restrict-applications-dialog.ui:12 msgid "Restrict Applications" msgstr "" #: libmalcontent-ui/restrict-applications-selector.ui:24 msgid "No applications found to restrict." msgstr "" #. Translators: this is the full name for an unknown user account. #: libmalcontent-ui/user-controls.c:242 libmalcontent-ui/user-controls.c:253 msgid "unknown" msgstr "" #: libmalcontent-ui/user-controls.c:338 libmalcontent-ui/user-controls.c:425 #: libmalcontent-ui/user-controls.c:711 msgid "All Ages" msgstr "" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:514 #, c-format msgid "" "Prevents %s from running web browsers. Limited web content may still be " "available in other applications." msgstr "" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:519 #, c-format msgid "Prevents specified applications from being used by %s." msgstr "" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:524 #, c-format msgid "Prevents %s from installing applications." msgstr "" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:529 #, c-format msgid "Applications installed by %s will not appear for other users." msgstr "" #: libmalcontent-ui/user-controls.ui:17 msgid "Application Usage Restrictions" msgstr "" #: libmalcontent-ui/user-controls.ui:68 msgid "Restrict _Web Browsers" msgstr "" #: libmalcontent-ui/user-controls.ui:152 msgid "_Restrict Applications" msgstr "" #: libmalcontent-ui/user-controls.ui:231 msgid "Software Installation Restrictions" msgstr "" #: libmalcontent-ui/user-controls.ui:281 msgid "Restrict Application _Installation" msgstr "" #: libmalcontent-ui/user-controls.ui:366 msgid "Restrict Application Installation for _Others" msgstr "" #: libmalcontent-ui/user-controls.ui:451 msgid "Application _Suitability" msgstr "" #: libmalcontent-ui/user-controls.ui:473 msgid "" "Restricts browsing or installation of applications to applications suitable " "for certain ages or above." msgstr "" #. Translators: This is the title of the main window #. Translators: the name of the application as it appears in a software center #: malcontent-control/application.c:105 malcontent-control/main.ui:12 #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:9 #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:3 msgid "Parental Controls" msgstr "" #: malcontent-control/application.c:270 msgid "Copyright © 2019, 2020 Endless Mobile, Inc." msgstr "" #. Translators: this should be "translated" to the #. names of people who have translated Malcontent into #. this language, one per line. #: malcontent-control/application.c:275 msgid "translator-credits" msgstr "" #. Translators: "Malcontent" is the brand name of this #. project, so should not be translated. #: malcontent-control/application.c:281 msgid "Malcontent Website" msgstr "" #: malcontent-control/application.c:299 msgid "The help contents could not be displayed" msgstr "" #: malcontent-control/application.c:336 msgid "Failed to load user data from the system" msgstr "" #: malcontent-control/application.c:338 msgid "Please make sure that the AccountsService is installed and enabled." msgstr "" #: malcontent-control/carousel.ui:48 msgid "Previous Page" msgstr "" #: malcontent-control/carousel.ui:74 msgid "Next Page" msgstr "" #: malcontent-control/main.ui:93 msgid "Permission Required" msgstr "" #: malcontent-control/main.ui:107 msgid "" "Permission is required to view and change user parental controls settings." msgstr "" #: malcontent-control/main.ui:148 msgid "No Child Users Configured" msgstr "" #: malcontent-control/main.ui:162 msgid "" "No child users are currently set up on the system. Create one before setting " "up their parental controls." msgstr "" #: malcontent-control/main.ui:174 msgid "Create _Child User" msgstr "" #: malcontent-control/main.ui:202 msgid "Loading…" msgstr "" #: malcontent-control/main.ui:265 msgid "_Help" msgstr "_Hjelp" #: malcontent-control/main.ui:269 msgid "_About Parental Controls" msgstr "" #. Translators: the brief summary of the application as it appears in a software center. #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:12 #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:4 msgid "Set parental controls and monitor usage by users" msgstr "" #. Translators: These are the application description paragraphs in the AppData file. #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:16 msgid "" "Manage users’ parental controls restrictions, controlling how long they can " "use the computer for, what software they can install, and what installed " "software they can run." msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:39 msgid "The GNOME Project" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:50 #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:59 msgid "Minor improvements to parental controls application UI" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:51 msgid "Add a user manual" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:52 msgid "Translation updates" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:60 msgid "Translations to Ukrainian and Polish" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:67 msgid "Improve parental controls application UI and add icon" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:68 msgid "Support for indicating which accounts are parent accounts" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:75 msgid "Initial release of basic parental controls application" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:76 msgid "Support for setting app installation and run restrictions on users" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:83 msgid "Maintenance release of underlying parental controls library" msgstr "" #. Translators: Do NOT translate or transliterate this text (this is an icon file name)! #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:7 msgid "org.freedesktop.MalcontentControl" msgstr "" #. Translators: Search terms to find this application. Do NOT translate or localise the semicolons! The list MUST also end with a semicolon! #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:13 msgid "" "parental controls;screen time;app restrictions;web browser restrictions;oars;" "usage;usage limit;kid;child;" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.policy.in:9 msgid "Manage parental controls" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.policy.in:10 msgid "Authentication is required to read and change user parental controls" msgstr "" #: malcontent-control/user-selector.c:426 msgid "Your account" msgstr "Din konto" #. Always allow root, to avoid a situation where this PAM module prevents #. * all users logging in with no way of recovery. #: pam/pam_malcontent.c:142 pam/pam_malcontent.c:188 #, c-format msgid "User ‘%s’ has no time limits enabled" msgstr "" #: pam/pam_malcontent.c:151 pam/pam_malcontent.c:172 #, c-format msgid "Error getting session limits for user ‘%s’: %s" msgstr "" #: pam/pam_malcontent.c:182 #, c-format msgid "User ‘%s’ has no time remaining" msgstr "" #: pam/pam_malcontent.c:200 #, c-format msgid "Error setting time limit on login session: %s" msgstr "" #~ msgid "No cartoon violence" #~ msgstr "Ingen tegneserievold" #~ msgid "Cartoon characters in unsafe situations" #~ msgstr "Tegneseriefigurer i utrygge situasjoner" #~ msgid "Cartoon characters in aggressive conflict" #~ msgstr "Tegneseriefigurer i agressiv konflikt" #~ msgid "Graphic violence involving cartoon characters" #~ msgstr "Grafisk vold som involverer tegneseriefigurer" #~ msgid "No fantasy violence" #~ msgstr "Ingen fantasivold" #~ msgid "Characters in unsafe situations easily distinguishable from reality" #~ msgstr "" #~ "Karakterer i utrygge situasjoner som lett kan skilles fra virkeligheten" #~ msgid "" #~ "Characters in aggressive conflict easily distinguishable from reality" #~ msgstr "Karakterer i agressiv konflikt og lett å skille fra virkeligheten" #~ msgid "Graphic violence easily distinguishable from reality" #~ msgstr "Grafisk vold som lett kan skilles fra virkeligheten" #~ msgid "No realistic violence" #~ msgstr "Ingen realistisk vold" #~ msgid "Mildly realistic characters in unsafe situations" #~ msgstr "Mildt realistiske roller i utrygge situasjoner" #~ msgid "Depictions of realistic characters in aggressive conflict" #~ msgstr "Avbilding av realistiske karakterer i agressiv konflikt" #~ msgid "Graphic violence involving realistic characters" #~ msgstr "Grafisk vold som involverer realistiske karakterer" #~ msgid "No bloodshed" #~ msgstr "Ingen blodsutgytelse" #~ msgid "Unrealistic bloodshed" #~ msgstr "Urealistisk blodsutgytelse" #~ msgid "Realistic bloodshed" #~ msgstr "Realistisk blodsutgytelse" #~ msgid "Depictions of bloodshed and the mutilation of body parts" #~ msgstr "Avbilding av blodsutgytelse og lemlesting av kroppsdeler" #~ msgid "No sexual violence" #~ msgstr "Ingen seksuell vold" #~ msgid "Rape or other violent sexual behavior" #~ msgstr "Voldtekt eller annen voldelig seksuell adferd" #~ msgid "No references to alcohol" #~ msgstr "Ingen referanser til alkohol" #~ msgid "References to alcoholic beverages" #~ msgstr "Referanser til alkoholholdige drikker" #~ msgid "Use of alcoholic beverages" #~ msgstr "Bruk av alkoholholdige drikker" #~ msgid "No references to illicit drugs" #~ msgstr "Ingen referanser til ulovlig dop" #~ msgid "References to illicit drugs" #~ msgstr "Referanser til ulovlig dop" #~ msgid "Use of illicit drugs" #~ msgstr "Bruk av ulovlig dop" #~ msgid "References to tobacco products" #~ msgstr "Referanser til tobakksprodukter" #~ msgid "Use of tobacco products" #~ msgstr "Bruk av tobakksprodukter" #~ msgid "No nudity of any sort" #~ msgstr "Ingen nakenhet av noen sort" #~ msgid "Brief artistic nudity" #~ msgstr "Kortvarig artistisk nakenhet" #~ msgid "Prolonged nudity" #~ msgstr "Langvarig nakenhet" #~ msgid "No references or depictions of sexual nature" #~ msgstr "Ingen seksuelle referanser eller avbildninger" #~ msgid "Provocative references or depictions" #~ msgstr "Provoserende referanser eller avbildinger" #~ msgid "Sexual references or depictions" #~ msgstr "Seksuelle referanser eller avbildninger" #~ msgid "Graphic sexual behavior" #~ msgstr "Grafisk seksuell atferd" #~ msgid "No profanity of any kind" #~ msgstr "Ingen banning av noe slag" #~ msgid "Mild or infrequent use of profanity" #~ msgstr "Mild eller sjelden bruk av banning" #~ msgid "Moderate use of profanity" #~ msgstr "Moderat bruk av banning" #~ msgid "Strong or frequent use of profanity" #~ msgstr "Sterk eller hyppig bruk av banning" #~ msgid "No inappropriate humor" #~ msgstr "Ingen upassende humor" #~ msgid "Slapstick humor" #~ msgstr "Slapstick-humor" #~ msgid "Vulgar or bathroom humor" #~ msgstr "Vulgær eller baderomshumor" #~ msgid "Mature or sexual humor" #~ msgstr "Voksen eller seksuell humor" #~ msgid "No discriminatory language of any kind" #~ msgstr "Ingen diskriminerende språkbruk av noe slag" #~ msgid "Negativity towards a specific group of people" #~ msgstr "Negativitet mot en spesifikk gruppe med mennesker" #~ msgid "Discrimination designed to cause emotional harm" #~ msgstr "Disrkiminering med mål om å forårsake følelsesmessig skade" #~ msgid "Explicit discrimination based on gender, sexuality, race or religion" #~ msgstr "" #~ "Eksplisitt diskriminering basert på kjønn, seksualitet, rase eller " #~ "religion" #~ msgid "No advertising of any kind" #~ msgstr "Ingen reklame av noe slag" #~ msgid "Product placement" #~ msgstr "Produktplassering" #~ msgid "Explicit references to specific brands or trademarked products" #~ msgstr "" #~ "Eksplisitte referanser til spesifikke merker eller merkevarebeskyttede " #~ "produkter" #~ msgid "Users are encouraged to purchase specific real-world items" #~ msgstr "Spillere oppfordres til å kjøpe spesifikke og virkelige varer" #~ msgid "No gambling of any kind" #~ msgstr "Ingen pengespill av noe slag" #~ msgid "Gambling on random events using tokens or credits" #~ msgstr "" #~ "Pengespill på tilfeldige hendelser med bruk av polletter eller kreditt" #~ msgid "Gambling using “play” money" #~ msgstr "Pengespill med lekepenger" #~ msgid "Gambling using real money" #~ msgstr "Pengespill med ekte penger" #~ msgid "No ability to spend money" #~ msgstr "Inge mulighet for å bruke penger" #~ msgid "Users are encouraged to donate real money" #~ msgstr "Spillere oppfordres til å donere ekte penger" #~ msgid "Ability to spend real money in-game" #~ msgstr "Mulighet for å bruke penger i spillet" #~ msgid "No way to chat with other users" #~ msgstr "Ingen måte å prate med andre brukere" #~ msgid "Moderated chat functionality between users" #~ msgstr "Moderert funksjonalitet for prating mellom spillere" #~ msgid "Uncontrolled chat functionality between users" #~ msgstr "Ukontrollert funksjonalitet for prating mellom spillere" #~ msgid "No way to talk with other users" #~ msgstr "Ingen måte å snakke med andre spillere" #~ msgid "Uncontrolled audio or video chat functionality between users" #~ msgstr "Ukontrollert funksjonalitet for lyd eller bildeprat mellom spillere" #~ msgid "No sharing of social network usernames or email addresses" #~ msgstr "Ingen deling av brukernavn for sosiale medier eller e-postadresser" #~ msgid "Sharing social network usernames or email addresses" #~ msgstr "Deler brukernavn for sosiale medier eller e-postadresser" #~ msgid "No sharing of user information with 3rd parties" #~ msgstr "Ingen deling av brukerinformasjon med tredjepart" #~ msgid "Checking for the latest application version" #~ msgstr "Ser etter siste versjon av programmet" #~ msgid "Sharing diagnostic data that does not let others identify the user" #~ msgstr "Deler diagnostiske data som ikke lar andre identifisere brukeren" #~ msgid "Sharing information that lets others identify the user" #~ msgstr "Deler informasjon som lar andre identifisere brukeren" #~ msgid "No sharing of physical location to other users" #~ msgstr "Ingen deling av fysisk lokasjon med andre brukere" #~ msgid "Sharing physical location to other users" #~ msgstr "Deler fysisk lokasjon med andre brukere" #~ msgid "No references to homosexuality" #~ msgstr "Ingen referanser til homoseksualitet" #~ msgid "Indirect references to homosexuality" #~ msgstr "Indirekte referanser til homoseksualitet" #~ msgid "Kissing between people of the same gender" #~ msgstr "Kyssing mellom personer av samme kjønn" #~ msgid "Graphic sexual behavior between people of the same gender" #~ msgstr "Grafisk seksuell oppførsel mellom personer av samme kjønn" #~ msgid "No references to prostitution" #~ msgstr "Ingen referanser til prostitusjon" #~ msgid "Indirect references to prostitution" #~ msgstr "Indirekte referanser til prostitusjon" #~ msgid "Graphic depictions of the act of prostitution" #~ msgstr "Grafiske avbildninger av prostitusjonsakten" #~ msgid "No references to adultery" #~ msgstr "Ingen referanser til utroskap" #~ msgid "Indirect references to adultery" #~ msgstr "Indirekte referanser til utroskap" #~ msgid "No sexualized characters" #~ msgstr "Ingen seksualiserte karakterer" #~ msgid "Scantily clad human characters" #~ msgstr "Lettkledde menneskelige karakterer" #~ msgid "No references to slavery" #~ msgstr "Ingen referanser til slaveri" malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/po/nl.po000066400000000000000000000573441505556674000232000ustar00rootroot00000000000000# Dutch translations for malcontent package. # Copyright (C) 2020 THE malcontent'S COPYRIGHT HOLDER # This file is distributed under the same license as the malcontent package. # Automatically generated, 2020. # msgid "" msgstr "" "Project-Id-Version: malcontent\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-06-10 12:04+0100\n" "PO-Revision-Date: 2020-04-15 13:42+0100\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: nl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: accounts-service/com.endlessm.ParentalControls.policy.in:4 msgid "Change your own app filter" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:5 msgid "Authentication is required to change your app filter." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:14 msgid "Read your own app filter" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:15 msgid "Authentication is required to read your app filter." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:24 msgid "Change another user’s app filter" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:25 msgid "Authentication is required to change another user’s app filter." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:34 msgid "Read another user’s app filter" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:35 msgid "Authentication is required to read another user’s app filter." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:44 msgid "Change your own session limits" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:45 msgid "Authentication is required to change your session limits." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:54 msgid "Read your own session limits" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:55 msgid "Authentication is required to read your session limits." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:64 msgid "Change another user’s session limits" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:65 msgid "Authentication is required to change another user’s session limits." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:74 msgid "Read another user’s session limits" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:75 msgid "Authentication is required to read another user’s session limits." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:84 msgid "Change your own account info" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:85 msgid "Authentication is required to change your account info." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:94 msgid "Read your own account info" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:95 msgid "Authentication is required to read your account info." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:104 msgid "Change another user’s account info" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:105 msgid "Authentication is required to change another user’s account info." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:114 msgid "Read another user’s account info" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:115 msgid "Authentication is required to read another user’s account info." msgstr "" #: libmalcontent/app-filter.c:694 #, c-format msgid "App filter for user %u was in an unrecognized format" msgstr "" #: libmalcontent/app-filter.c:725 #, c-format msgid "OARS filter for user %u has an unrecognized kind ‘%s’" msgstr "" #: libmalcontent/manager.c:283 libmalcontent/manager.c:412 #, c-format msgid "Not allowed to query app filter data for user %u" msgstr "" #: libmalcontent/manager.c:288 #, c-format msgid "User %u does not exist" msgstr "" #: libmalcontent/manager.c:394 msgid "App filtering is globally disabled" msgstr "" #: libmalcontent/manager.c:777 msgid "Session limits are globally disabled" msgstr "" #: libmalcontent/manager.c:795 #, c-format msgid "Not allowed to query session limits data for user %u" msgstr "" #: libmalcontent/session-limits.c:306 #, c-format msgid "Session limit for user %u was in an unrecognized format" msgstr "" #: libmalcontent/session-limits.c:328 #, c-format msgid "Session limit for user %u has an unrecognized type ‘%u’" msgstr "" #: libmalcontent/session-limits.c:346 #, c-format msgid "Session limit for user %u has invalid daily schedule %u–%u" msgstr "" #. TRANSLATORS: This is the formatting of English and localized name #. of the rating e.g. "Adults Only (solo adultos)" #: libmalcontent-ui/gs-content-rating.c:75 #, c-format msgid "%s (%s)" msgstr "" #: libmalcontent-ui/gs-content-rating.c:209 msgid "General" msgstr "" #: libmalcontent-ui/gs-content-rating.c:218 msgid "ALL" msgstr "" #: libmalcontent-ui/gs-content-rating.c:222 #: libmalcontent-ui/gs-content-rating.c:485 msgid "Adults Only" msgstr "" #: libmalcontent-ui/gs-content-rating.c:224 #: libmalcontent-ui/gs-content-rating.c:484 msgid "Mature" msgstr "" #: libmalcontent-ui/gs-content-rating.c:226 #: libmalcontent-ui/gs-content-rating.c:483 msgid "Teen" msgstr "" #: libmalcontent-ui/gs-content-rating.c:228 #: libmalcontent-ui/gs-content-rating.c:482 msgid "Everyone 10+" msgstr "" #: libmalcontent-ui/gs-content-rating.c:230 #: libmalcontent-ui/gs-content-rating.c:481 msgid "Everyone" msgstr "" #: libmalcontent-ui/gs-content-rating.c:232 #: libmalcontent-ui/gs-content-rating.c:480 msgid "Early Childhood" msgstr "" #. Translators: the placeholder is a user’s full name #: libmalcontent-ui/restrict-applications-dialog.c:222 #, c-format msgid "Restrict %s from using the following installed applications." msgstr "" #: libmalcontent-ui/restrict-applications-dialog.ui:6 #: libmalcontent-ui/restrict-applications-dialog.ui:12 msgid "Restrict Applications" msgstr "" #: libmalcontent-ui/restrict-applications-selector.ui:24 msgid "No applications found to restrict." msgstr "" #. Translators: this is the full name for an unknown user account. #: libmalcontent-ui/user-controls.c:242 libmalcontent-ui/user-controls.c:253 msgid "unknown" msgstr "" #: libmalcontent-ui/user-controls.c:338 libmalcontent-ui/user-controls.c:425 #: libmalcontent-ui/user-controls.c:711 msgid "All Ages" msgstr "" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:514 #, c-format msgid "" "Prevents %s from running web browsers. Limited web content may still be " "available in other applications." msgstr "" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:519 #, c-format msgid "Prevents specified applications from being used by %s." msgstr "" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:524 #, c-format msgid "Prevents %s from installing applications." msgstr "" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:529 #, c-format msgid "Applications installed by %s will not appear for other users." msgstr "" #: libmalcontent-ui/user-controls.ui:17 msgid "Application Usage Restrictions" msgstr "" #: libmalcontent-ui/user-controls.ui:68 msgid "Restrict _Web Browsers" msgstr "" #: libmalcontent-ui/user-controls.ui:152 msgid "_Restrict Applications" msgstr "" #: libmalcontent-ui/user-controls.ui:231 msgid "Software Installation Restrictions" msgstr "" #: libmalcontent-ui/user-controls.ui:281 msgid "Restrict Application _Installation" msgstr "" #: libmalcontent-ui/user-controls.ui:366 msgid "Restrict Application Installation for _Others" msgstr "" #: libmalcontent-ui/user-controls.ui:451 msgid "Application _Suitability" msgstr "" #: libmalcontent-ui/user-controls.ui:473 msgid "" "Restricts browsing or installation of applications to applications suitable " "for certain ages or above." msgstr "" #. Translators: This is the title of the main window #. Translators: the name of the application as it appears in a software center #: malcontent-control/application.c:105 malcontent-control/main.ui:12 #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:9 #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:3 msgid "Parental Controls" msgstr "" #: malcontent-control/application.c:270 msgid "Copyright © 2019, 2020 Endless Mobile, Inc." msgstr "" #. Translators: this should be "translated" to the #. names of people who have translated Malcontent into #. this language, one per line. #: malcontent-control/application.c:275 msgid "translator-credits" msgstr "" #. Translators: "Malcontent" is the brand name of this #. project, so should not be translated. #: malcontent-control/application.c:281 msgid "Malcontent Website" msgstr "" #: malcontent-control/application.c:299 msgid "The help contents could not be displayed" msgstr "" #: malcontent-control/application.c:336 msgid "Failed to load user data from the system" msgstr "" #: malcontent-control/application.c:338 msgid "Please make sure that the AccountsService is installed and enabled." msgstr "" #: malcontent-control/carousel.ui:48 msgid "Previous Page" msgstr "" #: malcontent-control/carousel.ui:74 msgid "Next Page" msgstr "" #: malcontent-control/main.ui:93 msgid "Permission Required" msgstr "" #: malcontent-control/main.ui:107 msgid "" "Permission is required to view and change user parental controls settings." msgstr "" #: malcontent-control/main.ui:148 msgid "No Child Users Configured" msgstr "" #: malcontent-control/main.ui:162 msgid "" "No child users are currently set up on the system. Create one before setting " "up their parental controls." msgstr "" #: malcontent-control/main.ui:174 msgid "Create _Child User" msgstr "" #: malcontent-control/main.ui:202 msgid "Loading…" msgstr "" #: malcontent-control/main.ui:265 msgid "_Help" msgstr "_Hulp" #: malcontent-control/main.ui:269 msgid "_About Parental Controls" msgstr "" #. Translators: the brief summary of the application as it appears in a software center. #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:12 #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:4 msgid "Set parental controls and monitor usage by users" msgstr "" #. Translators: These are the application description paragraphs in the AppData file. #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:16 msgid "" "Manage users’ parental controls restrictions, controlling how long they can " "use the computer for, what software they can install, and what installed " "software they can run." msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:39 msgid "The GNOME Project" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:50 #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:59 msgid "Minor improvements to parental controls application UI" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:51 msgid "Add a user manual" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:52 msgid "Translation updates" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:60 msgid "Translations to Ukrainian and Polish" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:67 msgid "Improve parental controls application UI and add icon" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:68 msgid "Support for indicating which accounts are parent accounts" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:75 msgid "Initial release of basic parental controls application" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:76 msgid "Support for setting app installation and run restrictions on users" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:83 msgid "Maintenance release of underlying parental controls library" msgstr "" #. Translators: Do NOT translate or transliterate this text (this is an icon file name)! #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:7 msgid "org.freedesktop.MalcontentControl" msgstr "" #. Translators: Search terms to find this application. Do NOT translate or localise the semicolons! The list MUST also end with a semicolon! #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:13 msgid "" "parental controls;screen time;app restrictions;web browser restrictions;oars;" "usage;usage limit;kid;child;" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.policy.in:9 msgid "Manage parental controls" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.policy.in:10 msgid "Authentication is required to read and change user parental controls" msgstr "" #: malcontent-control/user-selector.c:426 msgid "Your account" msgstr "Je account" #. Always allow root, to avoid a situation where this PAM module prevents #. * all users logging in with no way of recovery. #: pam/pam_malcontent.c:142 pam/pam_malcontent.c:188 #, c-format msgid "User ‘%s’ has no time limits enabled" msgstr "" #: pam/pam_malcontent.c:151 pam/pam_malcontent.c:172 #, c-format msgid "Error getting session limits for user ‘%s’: %s" msgstr "" #: pam/pam_malcontent.c:182 #, c-format msgid "User ‘%s’ has no time remaining" msgstr "" #: pam/pam_malcontent.c:200 #, c-format msgid "Error setting time limit on login session: %s" msgstr "" #~ msgid "No cartoon violence" #~ msgstr "Geen geweld in stripverhalen" #~ msgid "Cartoon characters in unsafe situations" #~ msgstr "Stripfiguren in onveilige situaties" #~ msgid "Cartoon characters in aggressive conflict" #~ msgstr "Stripfiguren in een agressieve conflictsituatie" #~ msgid "Graphic violence involving cartoon characters" #~ msgstr "Grafisch geweld met stripfiguren" #~ msgid "No fantasy violence" #~ msgstr "Geen geweld in fantasieverhalen" #~ msgid "Characters in unsafe situations easily distinguishable from reality" #~ msgstr "" #~ "Figuren in onveilige situaties, gemakkelijk te onderscheiden van de " #~ "werkelijkheid" #~ msgid "" #~ "Characters in aggressive conflict easily distinguishable from reality" #~ msgstr "" #~ "Figuren in agressieve conflictsituaties, gemakkelijk te onderscheiden van " #~ "de werkelijkheid" #~ msgid "Graphic violence easily distinguishable from reality" #~ msgstr "Grafisch geweld, gemakkelijk te onderscheiden van de werkelijkheid" #~ msgid "No realistic violence" #~ msgstr "Geen realistisch geweld" #~ msgid "Mildly realistic characters in unsafe situations" #~ msgstr "Enigszins realistisch figuur in onveilige situaties" #~ msgid "Depictions of realistic characters in aggressive conflict" #~ msgstr "" #~ "Afbeeldingen van realistische figuren in agressieve conflictsituatie" #~ msgid "Graphic violence involving realistic characters" #~ msgstr "Grafisch geweld met realistische figuren" #~ msgid "No bloodshed" #~ msgstr "Geen bloedvergieten" #~ msgid "Unrealistic bloodshed" #~ msgstr "Onrealistische bloedvergieten" #~ msgid "Realistic bloodshed" #~ msgstr "Realistische bloedvergieten" #~ msgid "Depictions of bloodshed and the mutilation of body parts" #~ msgstr "Afbeeldingen van bloedvergieten en het mutileren van lichaamsdelen" #~ msgid "No sexual violence" #~ msgstr "Geen seksueel geweld" #~ msgid "Rape or other violent sexual behavior" #~ msgstr "Verkrachting of ander gewelddadig seksueel gedrag" #~ msgid "No references to alcohol" #~ msgstr "Geen verwijzingen naar alcohol" #~ msgid "References to alcoholic beverages" #~ msgstr "Verwijzingen naar alcoholische dranken" #~ msgid "Use of alcoholic beverages" #~ msgstr "Nuttiging van alcoholische dranken" #~ msgid "No references to illicit drugs" #~ msgstr "Geen verwijzingen naar illegale drugs" #~ msgid "References to illicit drugs" #~ msgstr "Verwijzingen naar illegale drugs" #~ msgid "Use of illicit drugs" #~ msgstr "Gebruik van illegale drugs" #~ msgid "References to tobacco products" #~ msgstr "Verwijzingen naar tabaksproducten" #~ msgid "Use of tobacco products" #~ msgstr "Gebruik van tabaksproducten" #~ msgid "No nudity of any sort" #~ msgstr "Geen naaktheid" #~ msgid "Brief artistic nudity" #~ msgstr "Beknopte artistieke naaktheid" #~ msgid "Prolonged nudity" #~ msgstr "Langdurige naaktheid" #~ msgid "No references or depictions of sexual nature" #~ msgstr "Geen seksuele verwijzingen of afbeeldingen" #~ msgid "Provocative references or depictions" #~ msgstr "Provocerende verwijzingen of afbeeldingen" #~ msgid "Sexual references or depictions" #~ msgstr "Seksuele verwijzingen of afbeeldingen" #~ msgid "Graphic sexual behavior" #~ msgstr "Grafisch seksueel gedrag" #~ msgid "No profanity of any kind" #~ msgstr "Geen enkele godslastering" #~ msgid "Mild or infrequent use of profanity" #~ msgstr "Mild of niet veelvuldig gebruik van godslastering" #~ msgid "Moderate use of profanity" #~ msgstr "Matig gebruik van godslastering" #~ msgid "Strong or frequent use of profanity" #~ msgstr "Sterk of veelvuldig gebruik van godslastering" #~ msgid "No inappropriate humor" #~ msgstr "Geen ongepaste humor" #~ msgid "Slapstick humor" #~ msgstr "Slapstick-humor" #~ msgid "Vulgar or bathroom humor" #~ msgstr "Vulgaire of platte humor" #~ msgid "Mature or sexual humor" #~ msgstr "Volwassen of seksuele humor" #~ msgid "No discriminatory language of any kind" #~ msgstr "Geen enkel discriminerend woordgebruik" #~ msgid "Negativity towards a specific group of people" #~ msgstr "Negativiteit in de richting van een specifieke groep mensen" #~ msgid "Discrimination designed to cause emotional harm" #~ msgstr "Discriminatie met de bedoeling emotionele schade te berokkenen" #~ msgid "Explicit discrimination based on gender, sexuality, race or religion" #~ msgstr "" #~ "Expliciete discriminatie op grond van geslacht, seksuele geaardheid, ras " #~ "of religie" #~ msgid "No advertising of any kind" #~ msgstr "Zonder enige reclame" #~ msgid "Product placement" #~ msgstr "Sluikreclame" #~ msgid "Explicit references to specific brands or trademarked products" #~ msgstr "" #~ "Expliciete verwijzingen naar bepaalde merken of producten met handelsmerk" #~ msgid "Users are encouraged to purchase specific real-world items" #~ msgstr "Gebruikers worden aangemoedigd om bepaalde echte artikelen te kopen" #~ msgid "No gambling of any kind" #~ msgstr "Zonder gokken" #~ msgid "Gambling on random events using tokens or credits" #~ msgstr "" #~ "Gokken op willekeurige gebeurtenissen met behulp van fiches of krediet" #~ msgid "Gambling using “play” money" #~ msgstr "Gokken met ‘speel’geld" #~ msgid "Gambling using real money" #~ msgstr "Gokken met echt geld" #~ msgid "No ability to spend money" #~ msgstr "Geen mogelijkheid om echt geld uit te geven" #~ msgid "Users are encouraged to donate real money" #~ msgstr "Gebruikers worden aangemoedigd om echt geld te doneren" #~ msgid "Ability to spend real money in-game" #~ msgstr "Mogelijk om in het spel echt geld uit te geven" #~ msgid "No way to chat with other users" #~ msgstr "Niet mogelijk om met andere gebruikers te chatten" #~ msgid "User-to-user game interactions without chat functionality" #~ msgstr "Spelinteractie tussen spelers zonder gespreksfunctionaliteit" #~ msgid "Moderated chat functionality between users" #~ msgstr "Gecontroleerde gespreksfunctionaliteit tussen gebruikers" #~ msgid "Uncontrolled chat functionality between users" #~ msgstr "Niet-gecontroleerde gespreksfunctionaliteit tussen gebruikers" #~ msgid "No way to talk with other users" #~ msgstr "Geen manier om met andere gebruikers te praten" #~ msgid "Uncontrolled audio or video chat functionality between users" #~ msgstr "" #~ "Niet-gecontroleerde audio- of videogespreksfunctionaliteit tussen " #~ "gebruikers" #~ msgid "No sharing of social network usernames or email addresses" #~ msgstr "" #~ "Gebruikersnamen van sociale netwerken en e-mailadressen worden niet " #~ "gedeeld" #~ msgid "Sharing social network usernames or email addresses" #~ msgstr "Deelt gebruikersnamen van sociale netwerken of e-mailadressen" #~ msgid "No sharing of user information with 3rd parties" #~ msgstr "Gebruikersinformatie wordt niet gedeeld met externe partijen" #~ msgid "Checking for the latest application version" #~ msgstr "Controleert voor de nieuwste toepassingsversie" #~ msgid "Sharing diagnostic data that does not let others identify the user" #~ msgstr "" #~ "Deelt diagnostische gegevens waarmee anderen de gebruiker niet kunnen " #~ "identificeren" #~ msgid "Sharing information that lets others identify the user" #~ msgstr "" #~ "Deelt diagnostische gegevens waarmee anderen de gebruiker kunnen " #~ "identificeren" #~ msgid "No sharing of physical location to other users" #~ msgstr "Fysieke locatie wordt niet gedeeld met andere gebruikers" #~ msgid "Sharing physical location to other users" #~ msgstr "Deelt fysieke locatie met andere gebruikers" #~ msgid "No references to homosexuality" #~ msgstr "Geen verwijzingen naar homoseksualiteit" #~ msgid "Indirect references to homosexuality" #~ msgstr "Indirecte verwijzingen naar homoseksualiteit" #~ msgid "Kissing between people of the same gender" #~ msgstr "Mensen van hetzelfde geslacht kussen" #~ msgid "Graphic sexual behavior between people of the same gender" #~ msgstr "Grafisch seksueel gedrag tussen mensen van hetzelfde geslacht" #~ msgid "No references to prostitution" #~ msgstr "Geen verwijzingen naar prostitutie" #~ msgid "Indirect references to prostitution" #~ msgstr "Indirecte verwijzingen naar prostitutie" #~ msgid "Direct references to prostitution" #~ msgstr "Directe verwijzingen naar prostitutie" #~ msgid "Graphic depictions of the act of prostitution" #~ msgstr "Grafische vertoningen van prostitutiedaden" #~ msgid "No references to adultery" #~ msgstr "Geen verwijzingen naar overspel" #~ msgid "Indirect references to adultery" #~ msgstr "Indirecte verwijzingen naar overspel" #~ msgid "Direct references to adultery" #~ msgstr "Directe verwijzingen naar overspel" #~ msgid "Graphic depictions of the act of adultery" #~ msgstr "Grafische vertoningen van overspel" #~ msgid "No sexualized characters" #~ msgstr "Geen geseksualiseerde personages" #~ msgid "Scantily clad human characters" #~ msgstr "Schaars geklede menselijke personages" #~ msgid "Overtly sexualized human characters" #~ msgstr "Openlijk geseksualiseerde menselijke personages" #~ msgid "No references to desecration" #~ msgstr "Geen verwijzingen naar beschadigingen" #~ msgid "Depictions or references to historical desecration" #~ msgstr "Uitingen of verwijzingen naar historische ontheiliging" #~ msgid "Depictions of modern-day human desecration" #~ msgstr "Vertoningen van moderne menselijke beschadigingen" #~ msgid "Graphic depictions of modern-day desecration" #~ msgstr "Grafische vertoningen van moderne menselijke beschadigingen" #~ msgid "No visible dead human remains" #~ msgstr "Geen zichtbare dode menselijke overblijfselen" #~ msgid "Visible dead human remains" #~ msgstr "Zichtbare dode menselijke overblijfselen" #~ msgid "Dead human remains that are exposed to the elements" #~ msgstr "" #~ "Dode menselijke overblijfselen die worden blootgesteld aan weer en wind" #~ msgid "Graphic depictions of desecration of human bodies" #~ msgstr "Grafische vertoningen van beschadiging van menselijke lichamen" #~ msgid "No references to slavery" #~ msgstr "Geen verwijzingen naar slavernij" #~ msgid "Depictions or references to historical slavery" #~ msgstr "Uitingen of verwijzingen naar historische slavernij" #~ msgid "Depictions of modern-day slavery" #~ msgstr "Vertoningen van moderne slavernij" #~ msgid "Graphic depictions of modern-day slavery" #~ msgstr "Grafische vertoningen van moderne slavernij" malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/po/oc.po000066400000000000000000000564661505556674000231740ustar00rootroot00000000000000# Occitan translations for malcontent package. # Copyright (C) 2020 THE malcontent'S COPYRIGHT HOLDER # This file is distributed under the same license as the malcontent package. # Automatically generated, 2020. # msgid "" msgstr "" "Project-Id-Version: malcontent\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-06-10 12:04+0100\n" "PO-Revision-Date: 2020-04-15 13:42+0100\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: oc\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: accounts-service/com.endlessm.ParentalControls.policy.in:4 msgid "Change your own app filter" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:5 msgid "Authentication is required to change your app filter." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:14 msgid "Read your own app filter" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:15 msgid "Authentication is required to read your app filter." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:24 msgid "Change another user’s app filter" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:25 msgid "Authentication is required to change another user’s app filter." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:34 msgid "Read another user’s app filter" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:35 msgid "Authentication is required to read another user’s app filter." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:44 msgid "Change your own session limits" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:45 msgid "Authentication is required to change your session limits." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:54 msgid "Read your own session limits" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:55 msgid "Authentication is required to read your session limits." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:64 msgid "Change another user’s session limits" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:65 msgid "Authentication is required to change another user’s session limits." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:74 msgid "Read another user’s session limits" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:75 msgid "Authentication is required to read another user’s session limits." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:84 msgid "Change your own account info" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:85 msgid "Authentication is required to change your account info." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:94 msgid "Read your own account info" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:95 msgid "Authentication is required to read your account info." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:104 msgid "Change another user’s account info" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:105 msgid "Authentication is required to change another user’s account info." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:114 msgid "Read another user’s account info" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:115 msgid "Authentication is required to read another user’s account info." msgstr "" #: libmalcontent/app-filter.c:694 #, c-format msgid "App filter for user %u was in an unrecognized format" msgstr "" #: libmalcontent/app-filter.c:725 #, c-format msgid "OARS filter for user %u has an unrecognized kind ‘%s’" msgstr "" #: libmalcontent/manager.c:283 libmalcontent/manager.c:412 #, c-format msgid "Not allowed to query app filter data for user %u" msgstr "" #: libmalcontent/manager.c:288 #, c-format msgid "User %u does not exist" msgstr "" #: libmalcontent/manager.c:394 msgid "App filtering is globally disabled" msgstr "" #: libmalcontent/manager.c:777 msgid "Session limits are globally disabled" msgstr "" #: libmalcontent/manager.c:795 #, c-format msgid "Not allowed to query session limits data for user %u" msgstr "" #: libmalcontent/session-limits.c:306 #, c-format msgid "Session limit for user %u was in an unrecognized format" msgstr "" #: libmalcontent/session-limits.c:328 #, c-format msgid "Session limit for user %u has an unrecognized type ‘%u’" msgstr "" #: libmalcontent/session-limits.c:346 #, c-format msgid "Session limit for user %u has invalid daily schedule %u–%u" msgstr "" #. TRANSLATORS: This is the formatting of English and localized name #. of the rating e.g. "Adults Only (solo adultos)" #: libmalcontent-ui/gs-content-rating.c:75 #, c-format msgid "%s (%s)" msgstr "" #: libmalcontent-ui/gs-content-rating.c:209 msgid "General" msgstr "" #: libmalcontent-ui/gs-content-rating.c:218 msgid "ALL" msgstr "" #: libmalcontent-ui/gs-content-rating.c:222 #: libmalcontent-ui/gs-content-rating.c:485 msgid "Adults Only" msgstr "" #: libmalcontent-ui/gs-content-rating.c:224 #: libmalcontent-ui/gs-content-rating.c:484 msgid "Mature" msgstr "" #: libmalcontent-ui/gs-content-rating.c:226 #: libmalcontent-ui/gs-content-rating.c:483 msgid "Teen" msgstr "" #: libmalcontent-ui/gs-content-rating.c:228 #: libmalcontent-ui/gs-content-rating.c:482 msgid "Everyone 10+" msgstr "" #: libmalcontent-ui/gs-content-rating.c:230 #: libmalcontent-ui/gs-content-rating.c:481 msgid "Everyone" msgstr "" #: libmalcontent-ui/gs-content-rating.c:232 #: libmalcontent-ui/gs-content-rating.c:480 msgid "Early Childhood" msgstr "" #. Translators: the placeholder is a user’s full name #: libmalcontent-ui/restrict-applications-dialog.c:222 #, c-format msgid "Restrict %s from using the following installed applications." msgstr "" #: libmalcontent-ui/restrict-applications-dialog.ui:6 #: libmalcontent-ui/restrict-applications-dialog.ui:12 msgid "Restrict Applications" msgstr "" #: libmalcontent-ui/restrict-applications-selector.ui:24 msgid "No applications found to restrict." msgstr "" #. Translators: this is the full name for an unknown user account. #: libmalcontent-ui/user-controls.c:242 libmalcontent-ui/user-controls.c:253 msgid "unknown" msgstr "" #: libmalcontent-ui/user-controls.c:338 libmalcontent-ui/user-controls.c:425 #: libmalcontent-ui/user-controls.c:711 msgid "All Ages" msgstr "" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:514 #, c-format msgid "" "Prevents %s from running web browsers. Limited web content may still be " "available in other applications." msgstr "" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:519 #, c-format msgid "Prevents specified applications from being used by %s." msgstr "" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:524 #, c-format msgid "Prevents %s from installing applications." msgstr "" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:529 #, c-format msgid "Applications installed by %s will not appear for other users." msgstr "" #: libmalcontent-ui/user-controls.ui:17 msgid "Application Usage Restrictions" msgstr "" #: libmalcontent-ui/user-controls.ui:68 msgid "Restrict _Web Browsers" msgstr "" #: libmalcontent-ui/user-controls.ui:152 msgid "_Restrict Applications" msgstr "" #: libmalcontent-ui/user-controls.ui:231 msgid "Software Installation Restrictions" msgstr "" #: libmalcontent-ui/user-controls.ui:281 msgid "Restrict Application _Installation" msgstr "" #: libmalcontent-ui/user-controls.ui:366 msgid "Restrict Application Installation for _Others" msgstr "" #: libmalcontent-ui/user-controls.ui:451 msgid "Application _Suitability" msgstr "" #: libmalcontent-ui/user-controls.ui:473 msgid "" "Restricts browsing or installation of applications to applications suitable " "for certain ages or above." msgstr "" #. Translators: This is the title of the main window #. Translators: the name of the application as it appears in a software center #: malcontent-control/application.c:105 malcontent-control/main.ui:12 #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:9 #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:3 msgid "Parental Controls" msgstr "" #: malcontent-control/application.c:270 msgid "Copyright © 2019, 2020 Endless Mobile, Inc." msgstr "" #. Translators: this should be "translated" to the #. names of people who have translated Malcontent into #. this language, one per line. #: malcontent-control/application.c:275 msgid "translator-credits" msgstr "" #. Translators: "Malcontent" is the brand name of this #. project, so should not be translated. #: malcontent-control/application.c:281 msgid "Malcontent Website" msgstr "" #: malcontent-control/application.c:299 msgid "The help contents could not be displayed" msgstr "" #: malcontent-control/application.c:336 msgid "Failed to load user data from the system" msgstr "" #: malcontent-control/application.c:338 msgid "Please make sure that the AccountsService is installed and enabled." msgstr "" #: malcontent-control/carousel.ui:48 msgid "Previous Page" msgstr "" #: malcontent-control/carousel.ui:74 msgid "Next Page" msgstr "" #: malcontent-control/main.ui:93 msgid "Permission Required" msgstr "" #: malcontent-control/main.ui:107 msgid "" "Permission is required to view and change user parental controls settings." msgstr "" #: malcontent-control/main.ui:148 msgid "No Child Users Configured" msgstr "" #: malcontent-control/main.ui:162 msgid "" "No child users are currently set up on the system. Create one before setting " "up their parental controls." msgstr "" #: malcontent-control/main.ui:174 msgid "Create _Child User" msgstr "" #: malcontent-control/main.ui:202 msgid "Loading…" msgstr "" #: malcontent-control/main.ui:265 msgid "_Help" msgstr "_Ajuda" #: malcontent-control/main.ui:269 msgid "_About Parental Controls" msgstr "" #. Translators: the brief summary of the application as it appears in a software center. #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:12 #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:4 msgid "Set parental controls and monitor usage by users" msgstr "" #. Translators: These are the application description paragraphs in the AppData file. #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:16 msgid "" "Manage users’ parental controls restrictions, controlling how long they can " "use the computer for, what software they can install, and what installed " "software they can run." msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:39 msgid "The GNOME Project" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:50 #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:59 msgid "Minor improvements to parental controls application UI" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:51 msgid "Add a user manual" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:52 msgid "Translation updates" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:60 msgid "Translations to Ukrainian and Polish" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:67 msgid "Improve parental controls application UI and add icon" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:68 msgid "Support for indicating which accounts are parent accounts" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:75 msgid "Initial release of basic parental controls application" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:76 msgid "Support for setting app installation and run restrictions on users" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:83 msgid "Maintenance release of underlying parental controls library" msgstr "" #. Translators: Do NOT translate or transliterate this text (this is an icon file name)! #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:7 msgid "org.freedesktop.MalcontentControl" msgstr "" #. Translators: Search terms to find this application. Do NOT translate or localise the semicolons! The list MUST also end with a semicolon! #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:13 msgid "" "parental controls;screen time;app restrictions;web browser restrictions;oars;" "usage;usage limit;kid;child;" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.policy.in:9 msgid "Manage parental controls" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.policy.in:10 msgid "Authentication is required to read and change user parental controls" msgstr "" #: malcontent-control/user-selector.c:426 msgid "Your account" msgstr "Vòstre compte" #. Always allow root, to avoid a situation where this PAM module prevents #. * all users logging in with no way of recovery. #: pam/pam_malcontent.c:142 pam/pam_malcontent.c:188 #, c-format msgid "User ‘%s’ has no time limits enabled" msgstr "" #: pam/pam_malcontent.c:151 pam/pam_malcontent.c:172 #, c-format msgid "Error getting session limits for user ‘%s’: %s" msgstr "" #: pam/pam_malcontent.c:182 #, c-format msgid "User ‘%s’ has no time remaining" msgstr "" #: pam/pam_malcontent.c:200 #, c-format msgid "Error setting time limit on login session: %s" msgstr "" #~ msgid "No cartoon violence" #~ msgstr "Pas cap de violéncia de dessenhs animats" #~ msgid "Cartoon characters in unsafe situations" #~ msgstr "Personatges de dessenh animat en situacion de dangièr" #~ msgid "Cartoon characters in aggressive conflict" #~ msgstr "Personatges de dessenh animat en conflicte agressiu" #~ msgid "Graphic violence involving cartoon characters" #~ msgstr "" #~ "Illustracion de violéncias implicant los personatges del dessenh animat" #~ msgid "No fantasy violence" #~ msgstr "Pas de violéncias fantasticas" #~ msgid "Characters in unsafe situations easily distinguishable from reality" #~ msgstr "Personatges en situacions dangereuses franchement irrealas" #~ msgid "" #~ "Characters in aggressive conflict easily distinguishable from reality" #~ msgstr "Personatges en situacion de conflicte agressiu francament irreal" #~ msgid "Graphic violence easily distinguishable from reality" #~ msgstr "Illustracion violenta francament irreala" #~ msgid "No realistic violence" #~ msgstr "Pas cap de violéncia realista" #~ msgid "Mildly realistic characters in unsafe situations" #~ msgstr "Personatges mejanament realistas en situacion dangierosa" #~ msgid "Depictions of realistic characters in aggressive conflict" #~ msgstr "Illustracions de personatges realistas en conflicte agressiu" #~ msgid "Graphic violence involving realistic characters" #~ msgstr "Illustracions de violéncias implicant de personatges realistas" #~ msgid "No bloodshed" #~ msgstr "Pas cap de massacre" #~ msgid "Unrealistic bloodshed" #~ msgstr "Chaple irrealista" #~ msgid "Realistic bloodshed" #~ msgstr "Chaple realista" #~ msgid "Depictions of bloodshed and the mutilation of body parts" #~ msgstr "Illustracions d'un chaple e de mutilacions corporalas" #~ msgid "No sexual violence" #~ msgstr "Pas cap de violéncia sexuala" #~ msgid "Rape or other violent sexual behavior" #~ msgstr "Viòl e autre compòrtament sexual violent" #~ msgid "No references to alcohol" #~ msgstr "Pas cap d'allusion a de bevendas alcoolizadas" #~ msgid "References to alcoholic beverages" #~ msgstr "Allusions a de bevendas alcoolizadas" #~ msgid "Use of alcoholic beverages" #~ msgstr "Usatge de bevendas alcoolicas" #~ msgid "No references to illicit drugs" #~ msgstr "Pas cap d'allusion a de drògas illicitas" #~ msgid "References to illicit drugs" #~ msgstr "Allusions a de drògas illicitas" #~ msgid "Use of illicit drugs" #~ msgstr "Usatge de drògas illicitas" #~ msgid "References to tobacco products" #~ msgstr "Allusions a de produits derivats del tabat" #~ msgid "Use of tobacco products" #~ msgstr "Referéncia al tabat" #~ msgid "No nudity of any sort" #~ msgstr "Pas cap de nud, de cap de mena" #~ msgid "Brief artistic nudity" #~ msgstr "Nud artistic de corta durada" #~ msgid "Prolonged nudity" #~ msgstr "Nuditat perlongada" #~ msgid "No references or depictions of sexual nature" #~ msgstr "Pas cap d'allusion o imatge amb caractèr sexual" #~ msgid "Provocative references or depictions" #~ msgstr "Allusions e imatges provocators" #~ msgid "Sexual references or depictions" #~ msgstr "Recercar d'aplicacions" #~ msgid "Graphic sexual behavior" #~ msgstr "Illustracions de compòrtaments sexuals" #~ msgid "No profanity of any kind" #~ msgstr "Pas cap de profanacion, de cap de mena" #~ msgid "Mild or infrequent use of profanity" #~ msgstr "Utilizacion moderada e ocasionnala d'injúrias" #~ msgid "Moderate use of profanity" #~ msgstr "Utilizacion moderada d'injúrias" #~ msgid "Strong or frequent use of profanity" #~ msgstr "Utilizacion fòrta e frequenta d'injúrias" #~ msgid "No inappropriate humor" #~ msgstr "Pas cap d'umor desplaçat" #~ msgid "Slapstick humor" #~ msgstr "Umor burlèsc" #~ msgid "Vulgar or bathroom humor" #~ msgstr "Umor vulgar e de regòla" #~ msgid "Mature or sexual humor" #~ msgstr "Umor per adultes e sexual" #~ msgid "No discriminatory language of any kind" #~ msgstr "Pas cap d'allusion discriminatòria, de cap de mena" #~ msgid "Negativity towards a specific group of people" #~ msgstr "Actituds negativas de cap a de gropes especifics de gents" #~ msgid "Discrimination designed to cause emotional harm" #~ msgstr "Discriminacions destinadas a nafrar emocionalament" #~ msgid "Explicit discrimination based on gender, sexuality, race or religion" #~ msgstr "" #~ "Discriminacions explicitas basadas sul genre, lo sèxe, la raça e la " #~ "religion" #~ msgid "No advertising of any kind" #~ msgstr "Pas cap de publicitat, de cap de mena" #~ msgid "Product placement" #~ msgstr "Gestion de projècte" #~ msgid "Explicit references to specific brands or trademarked products" #~ msgstr "Allusions explicitas a de produits de marca especifica e depausada" #~ msgid "Users are encouraged to purchase specific real-world items" #~ msgstr "" #~ "Los utilizaires son encoratjats a crompar d'elements especifics del monde " #~ "real" #~ msgid "No gambling of any kind" #~ msgstr "Pas cap de pariatge, de cap de mena" #~ msgid "Gambling on random events using tokens or credits" #~ msgstr "" #~ "Pariatges sus d'eveniments aleatòris amb l'ajuda de getons e a crèdit" #~ msgid "Gambling using “play” money" #~ msgstr "Pariatges amb de moneda « fictiva »" #~ msgid "Gambling using real money" #~ msgstr "Pariatges amb d'argent vertadièr" #~ msgid "No ability to spend money" #~ msgstr "Pas cap de possibilitat de despensar d'argent" #~ msgid "Users are encouraged to donate real money" #~ msgstr "Los utilizaires son encoratjats a donar d’argent real" #~ msgid "Ability to spend real money in-game" #~ msgstr "Propension a despensar d'argent vertadièr dins lo jòc" #~ msgid "No way to chat with other users" #~ msgstr "Pas cap de possibilitat de discutir amb los autres utilizaires" #~ msgid "Moderated chat functionality between users" #~ msgstr "Possibilitat moderada de discutir entre utilizaires" #~ msgid "Uncontrolled chat functionality between users" #~ msgstr "Possibilitat de discutir sens contròtle entre utilizaires" #~ msgid "No way to talk with other users" #~ msgstr "Pas cap de mejan de parlar amb los autres utilizaires" #~ msgid "Uncontrolled audio or video chat functionality between users" #~ msgstr "" #~ "Possibilitat de discutir o se veire sens contròtle entre utilizaires" #~ msgid "No sharing of social network usernames or email addresses" #~ msgstr "" #~ "Pas cap de partiment dels noms d'utilizaire de rets socialas o d'adreças " #~ "electronicas" #~ msgid "Sharing social network usernames or email addresses" #~ msgstr "" #~ "Partiment dels noms d'utilizaire de rets socialas e de las adreças " #~ "corrièr electronic" #~ msgid "No sharing of user information with 3rd parties" #~ msgstr "" #~ "Pas cap de partiment dels identificants d'utilizaire amb de tèrças " #~ "partidas" #~ msgid "Checking for the latest application version" #~ msgstr "Verificacion se s’agís de la darrièra version de l’aplicacion" #~ msgid "Sharing diagnostic data that does not let others identify the user" #~ msgstr "" #~ "Partiment de las donadas de diagnostic que permet pas l’identification de " #~ "l’utilizaire" #~ msgid "Sharing information that lets others identify the user" #~ msgstr "" #~ "Partiment d’informacions que permet l’identificacion de l’utilizaire" #~ msgid "No sharing of physical location to other users" #~ msgstr "Pas cap de partiment de geolocalizacion amb los autres utilizaires" #~ msgid "Sharing physical location to other users" #~ msgstr "Partiment de l'emplaçament fisic amb d'autres utilizaires" #~ msgid "No references to homosexuality" #~ msgstr "Pas cap d'allusion a l’omosexualitat" #~ msgid "Indirect references to homosexuality" #~ msgstr "Allusions indirèctas a l’omosexualitat" #~ msgid "Kissing between people of the same gender" #~ msgstr "Estrentas entre personas d’un meteis sèxe" #~ msgid "Graphic sexual behavior between people of the same gender" #~ msgstr "Imatges de comportaments sexuals entre personas d’un meteis sèxe" #~ msgid "No references to prostitution" #~ msgstr "Pas cap d'allusion a la prostitucion" #~ msgid "Indirect references to prostitution" #~ msgstr "Allusions indirèctas a la prostitucion" #~ msgid "Graphic depictions of the act of prostitution" #~ msgstr "Imatges d’actes de prostitucion" #~ msgid "No references to adultery" #~ msgstr "Pas cap d'allusion a l’adultèri" #~ msgid "Indirect references to adultery" #~ msgstr "Allusions indirèctas a l’adultèri" #~ msgid "Graphic depictions of the act of adultery" #~ msgstr "Imatges d’actes d’adultèri" #~ msgid "No sexualized characters" #~ msgstr "Representacions umanas amb caractèr non sexual" #~ msgid "Scantily clad human characters" #~ msgstr "Representacions umanas leugièrament vestidas" #~ msgid "Overtly sexualized human characters" #~ msgstr "Representacions umanas amb caractèr dobèrtament sexual" #~ msgid "No references to desecration" #~ msgstr "Pas cap d'allusion a de profanacion" #~ msgid "Depictions of modern-day human desecration" #~ msgstr "Representacions d’actes de profanacion contemporanèus sus umans" #~ msgid "Graphic depictions of modern-day desecration" #~ msgstr "Imatges d’actes de profanacion contemporanèus sus umans" #~ msgid "No visible dead human remains" #~ msgstr "Pas cap d'imatge de rèstas umanas" #~ msgid "Visible dead human remains" #~ msgstr "Imatges de rèstas umanas" #~ msgid "Dead human remains that are exposed to the elements" #~ msgstr "Rèstas umanas expausadas als elements" #~ msgid "Graphic depictions of desecration of human bodies" #~ msgstr "Imatges de profanacions sus de còsses umans" #~ msgid "No references to slavery" #~ msgstr "Pas cap d'allusion a l’esclavagisme" #~ msgid "Depictions of modern-day slavery" #~ msgstr "Representacions d’esclavagisme contemporanèu" #~ msgid "Graphic depictions of modern-day slavery" #~ msgstr "Imatges d’esclavagisme contemporanèu" malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/po/pa.po000066400000000000000000000672571505556674000231730ustar00rootroot00000000000000# Punjabi translations for malcontent package. # Copyright (C) 2020 THE malcontent'S COPYRIGHT HOLDER # This file is distributed under the same license as the malcontent package. # Automatically generated, 2020. # msgid "" msgstr "" "Project-Id-Version: malcontent\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-06-10 12:04+0100\n" "PO-Revision-Date: 2020-04-15 13:42+0100\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: pa\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: accounts-service/com.endlessm.ParentalControls.policy.in:4 msgid "Change your own app filter" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:5 msgid "Authentication is required to change your app filter." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:14 msgid "Read your own app filter" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:15 msgid "Authentication is required to read your app filter." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:24 msgid "Change another user’s app filter" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:25 msgid "Authentication is required to change another user’s app filter." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:34 msgid "Read another user’s app filter" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:35 msgid "Authentication is required to read another user’s app filter." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:44 msgid "Change your own session limits" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:45 msgid "Authentication is required to change your session limits." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:54 msgid "Read your own session limits" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:55 msgid "Authentication is required to read your session limits." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:64 msgid "Change another user’s session limits" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:65 msgid "Authentication is required to change another user’s session limits." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:74 msgid "Read another user’s session limits" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:75 msgid "Authentication is required to read another user’s session limits." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:84 msgid "Change your own account info" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:85 msgid "Authentication is required to change your account info." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:94 msgid "Read your own account info" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:95 msgid "Authentication is required to read your account info." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:104 msgid "Change another user’s account info" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:105 msgid "Authentication is required to change another user’s account info." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:114 msgid "Read another user’s account info" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:115 msgid "Authentication is required to read another user’s account info." msgstr "" #: libmalcontent/app-filter.c:694 #, c-format msgid "App filter for user %u was in an unrecognized format" msgstr "" #: libmalcontent/app-filter.c:725 #, c-format msgid "OARS filter for user %u has an unrecognized kind ‘%s’" msgstr "" #: libmalcontent/manager.c:283 libmalcontent/manager.c:412 #, c-format msgid "Not allowed to query app filter data for user %u" msgstr "" #: libmalcontent/manager.c:288 #, c-format msgid "User %u does not exist" msgstr "" #: libmalcontent/manager.c:394 msgid "App filtering is globally disabled" msgstr "" #: libmalcontent/manager.c:777 msgid "Session limits are globally disabled" msgstr "" #: libmalcontent/manager.c:795 #, c-format msgid "Not allowed to query session limits data for user %u" msgstr "" #: libmalcontent/session-limits.c:306 #, c-format msgid "Session limit for user %u was in an unrecognized format" msgstr "" #: libmalcontent/session-limits.c:328 #, c-format msgid "Session limit for user %u has an unrecognized type ‘%u’" msgstr "" #: libmalcontent/session-limits.c:346 #, c-format msgid "Session limit for user %u has invalid daily schedule %u–%u" msgstr "" #. TRANSLATORS: This is the formatting of English and localized name #. of the rating e.g. "Adults Only (solo adultos)" #: libmalcontent-ui/gs-content-rating.c:75 #, c-format msgid "%s (%s)" msgstr "" #: libmalcontent-ui/gs-content-rating.c:209 msgid "General" msgstr "" #: libmalcontent-ui/gs-content-rating.c:218 msgid "ALL" msgstr "" #: libmalcontent-ui/gs-content-rating.c:222 #: libmalcontent-ui/gs-content-rating.c:485 msgid "Adults Only" msgstr "" #: libmalcontent-ui/gs-content-rating.c:224 #: libmalcontent-ui/gs-content-rating.c:484 msgid "Mature" msgstr "" #: libmalcontent-ui/gs-content-rating.c:226 #: libmalcontent-ui/gs-content-rating.c:483 msgid "Teen" msgstr "" #: libmalcontent-ui/gs-content-rating.c:228 #: libmalcontent-ui/gs-content-rating.c:482 msgid "Everyone 10+" msgstr "" #: libmalcontent-ui/gs-content-rating.c:230 #: libmalcontent-ui/gs-content-rating.c:481 msgid "Everyone" msgstr "" #: libmalcontent-ui/gs-content-rating.c:232 #: libmalcontent-ui/gs-content-rating.c:480 msgid "Early Childhood" msgstr "" #. Translators: the placeholder is a user’s full name #: libmalcontent-ui/restrict-applications-dialog.c:222 #, c-format msgid "Restrict %s from using the following installed applications." msgstr "" #: libmalcontent-ui/restrict-applications-dialog.ui:6 #: libmalcontent-ui/restrict-applications-dialog.ui:12 msgid "Restrict Applications" msgstr "" #: libmalcontent-ui/restrict-applications-selector.ui:24 msgid "No applications found to restrict." msgstr "" #. Translators: this is the full name for an unknown user account. #: libmalcontent-ui/user-controls.c:242 libmalcontent-ui/user-controls.c:253 msgid "unknown" msgstr "" #: libmalcontent-ui/user-controls.c:338 libmalcontent-ui/user-controls.c:425 #: libmalcontent-ui/user-controls.c:711 msgid "All Ages" msgstr "" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:514 #, c-format msgid "" "Prevents %s from running web browsers. Limited web content may still be " "available in other applications." msgstr "" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:519 #, c-format msgid "Prevents specified applications from being used by %s." msgstr "" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:524 #, c-format msgid "Prevents %s from installing applications." msgstr "" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:529 #, c-format msgid "Applications installed by %s will not appear for other users." msgstr "" #: libmalcontent-ui/user-controls.ui:17 msgid "Application Usage Restrictions" msgstr "" #: libmalcontent-ui/user-controls.ui:68 msgid "Restrict _Web Browsers" msgstr "" #: libmalcontent-ui/user-controls.ui:152 msgid "_Restrict Applications" msgstr "" #: libmalcontent-ui/user-controls.ui:231 msgid "Software Installation Restrictions" msgstr "" #: libmalcontent-ui/user-controls.ui:281 msgid "Restrict Application _Installation" msgstr "" #: libmalcontent-ui/user-controls.ui:366 msgid "Restrict Application Installation for _Others" msgstr "" #: libmalcontent-ui/user-controls.ui:451 msgid "Application _Suitability" msgstr "" #: libmalcontent-ui/user-controls.ui:473 msgid "" "Restricts browsing or installation of applications to applications suitable " "for certain ages or above." msgstr "" #. Translators: This is the title of the main window #. Translators: the name of the application as it appears in a software center #: malcontent-control/application.c:105 malcontent-control/main.ui:12 #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:9 #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:3 msgid "Parental Controls" msgstr "" #: malcontent-control/application.c:270 msgid "Copyright © 2019, 2020 Endless Mobile, Inc." msgstr "" #. Translators: this should be "translated" to the #. names of people who have translated Malcontent into #. this language, one per line. #: malcontent-control/application.c:275 msgid "translator-credits" msgstr "" #. Translators: "Malcontent" is the brand name of this #. project, so should not be translated. #: malcontent-control/application.c:281 msgid "Malcontent Website" msgstr "" #: malcontent-control/application.c:299 msgid "The help contents could not be displayed" msgstr "" #: malcontent-control/application.c:336 msgid "Failed to load user data from the system" msgstr "" #: malcontent-control/application.c:338 msgid "Please make sure that the AccountsService is installed and enabled." msgstr "" #: malcontent-control/carousel.ui:48 msgid "Previous Page" msgstr "" #: malcontent-control/carousel.ui:74 msgid "Next Page" msgstr "" #: malcontent-control/main.ui:93 msgid "Permission Required" msgstr "" #: malcontent-control/main.ui:107 msgid "" "Permission is required to view and change user parental controls settings." msgstr "" #: malcontent-control/main.ui:148 msgid "No Child Users Configured" msgstr "" #: malcontent-control/main.ui:162 msgid "" "No child users are currently set up on the system. Create one before setting " "up their parental controls." msgstr "" #: malcontent-control/main.ui:174 msgid "Create _Child User" msgstr "" #: malcontent-control/main.ui:202 msgid "Loading…" msgstr "" #: malcontent-control/main.ui:265 msgid "_Help" msgstr "ਮਦਦ(_H)" #: malcontent-control/main.ui:269 msgid "_About Parental Controls" msgstr "" #. Translators: the brief summary of the application as it appears in a software center. #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:12 #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:4 msgid "Set parental controls and monitor usage by users" msgstr "" #. Translators: These are the application description paragraphs in the AppData file. #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:16 msgid "" "Manage users’ parental controls restrictions, controlling how long they can " "use the computer for, what software they can install, and what installed " "software they can run." msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:39 msgid "The GNOME Project" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:50 #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:59 msgid "Minor improvements to parental controls application UI" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:51 msgid "Add a user manual" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:52 msgid "Translation updates" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:60 msgid "Translations to Ukrainian and Polish" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:67 msgid "Improve parental controls application UI and add icon" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:68 msgid "Support for indicating which accounts are parent accounts" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:75 msgid "Initial release of basic parental controls application" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:76 msgid "Support for setting app installation and run restrictions on users" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:83 msgid "Maintenance release of underlying parental controls library" msgstr "" #. Translators: Do NOT translate or transliterate this text (this is an icon file name)! #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:7 msgid "org.freedesktop.MalcontentControl" msgstr "" #. Translators: Search terms to find this application. Do NOT translate or localise the semicolons! The list MUST also end with a semicolon! #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:13 msgid "" "parental controls;screen time;app restrictions;web browser restrictions;oars;" "usage;usage limit;kid;child;" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.policy.in:9 msgid "Manage parental controls" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.policy.in:10 msgid "Authentication is required to read and change user parental controls" msgstr "" #: malcontent-control/user-selector.c:426 msgid "Your account" msgstr "ਤੁਹਾਡਾ ਖਾਤਾ" #. Always allow root, to avoid a situation where this PAM module prevents #. * all users logging in with no way of recovery. #: pam/pam_malcontent.c:142 pam/pam_malcontent.c:188 #, c-format msgid "User ‘%s’ has no time limits enabled" msgstr "" #: pam/pam_malcontent.c:151 pam/pam_malcontent.c:172 #, c-format msgid "Error getting session limits for user ‘%s’: %s" msgstr "" #: pam/pam_malcontent.c:182 #, c-format msgid "User ‘%s’ has no time remaining" msgstr "" #: pam/pam_malcontent.c:200 #, c-format msgid "Error setting time limit on login session: %s" msgstr "" #~ msgid "No cartoon violence" #~ msgstr "ਕੋਈ ਕਾਰਟੂਨ ਤਸ਼ਦੱਦ ਨਹੀਂ" #~ msgid "Cartoon characters in unsafe situations" #~ msgstr "ਅਸੁਰੱਖਿਅਤ ਹਾਲਤਾਂ 'ਚ ਕਾਰਟੂਨ ਕਰੈਟਰ" #~ msgid "Cartoon characters in aggressive conflict" #~ msgstr "ਲੜਾਕੇ ਟਾਕਰਿਆਂ ਵਿੱਚ ਕਾਰਟੂਨ ਕਰੈਟਰ" #~ msgid "Graphic violence involving cartoon characters" #~ msgstr "ਕਾਰਟੂਨ ਕਰੈਟਰ ਦੇ ਨਾਲ ਗਰਾਫਿਕ ਤਸ਼ਦੱਦ" #~ msgid "No fantasy violence" #~ msgstr "ਕਲਪਨਿਕ ਤਸ਼ਦੱਦ ਨਹੀਂ" #~ msgid "Characters in unsafe situations easily distinguishable from reality" #~ msgstr "ਅਸੁਰੱਖਿਅਤ ਹਾਲਤਾਂ ਵਿੱਚ ਅਸਲੀਅਤ ਤੋਂ ਸੌਖੀ ਤਰ੍ਹਾਂ ਪਛਾਣੇ ਜਾਣ ਵਾਲੇ ਚਿੰਨ੍ਹ" #~ msgid "" #~ "Characters in aggressive conflict easily distinguishable from reality" #~ msgstr "ਹਮਲਾਵਰ ਟਕਰਾ ਵਿੱਚ ਅਸਲੀਅਤ ਤੋਂ ਸੌਖੀ ਤਰ੍ਹਾਂ ਪਛਾਣੇ ਜਾਣ ਵਾਲੇ ਚਿੰਨ੍ਹ" #~ msgid "Graphic violence easily distinguishable from reality" #~ msgstr "ਅਸਲੀਅਤ ਤੋਂ ਸੌਖੀ ਤਰ੍ਹਾਂ ਪਛਾਣੇ ਜਾਣ ਵਾਲਾ ਚਿੱਤਰਨ ਕੀਤਾ ਤਸ਼ਦੱਦ" #~ msgid "No realistic violence" #~ msgstr "ਕੋਈ ਅਸਲੀ ਤਸ਼ਦੱਦ ਨਹੀਂ" #~ msgid "Mildly realistic characters in unsafe situations" #~ msgstr "ਅਸੁਰੱਖਿਅਤ ਹਾਲਤਾਂ 'ਚ ਨਰਮ ਰੁਖ ਵਾਲਾ ਯਥਾਰਥਿਕ ਚਿੰਨ੍ਹ" #~ msgid "Depictions of realistic characters in aggressive conflict" #~ msgstr "ਲੜਾਕੇ ਟਾਕਰਿਆਂ ਵਿੱਚ ਅਸਲੀ ਚਿੰਨ੍ਹਾਂ ਦਾ ਚਿੱਤਰਨ" #~ msgid "Graphic violence involving realistic characters" #~ msgstr "ਯਥਾਰਥਿਕ ਕਰੈਟਰ ਦੇ ਨਾਲ ਗਰਾਫਿਕ ਤਸ਼ਦੱਦ" #~ msgid "No bloodshed" #~ msgstr "ਕੋਈ ਖ਼ੂਨ-ਖ਼ਰਾਬਾ ਨਹੀਂ" #~ msgid "Unrealistic bloodshed" #~ msgstr "ਕਾਲਪਨਿਕ ਖ਼ੂਨ-ਖ਼ਰਾਬਾ" #~ msgid "Realistic bloodshed" #~ msgstr "ਅਸਲੀ ਖ਼ੂਨ-ਖ਼ਰਾਬਾ" #~ msgid "Depictions of bloodshed and the mutilation of body parts" #~ msgstr "ਖ਼ੂਨ-ਖ਼ਰਾਬੇ ਦਾ ਵਰਣਨ ਅਤੇ ਸਰੀਰਿਕ ਅੰਗਾਂ ਦੀ ਕੱਟ-ਵੱਢ" #~ msgid "No sexual violence" #~ msgstr "ਕੋਈ ਜਿਨਸੀ ਧੱਕਾ ਨਹੀਂ" #~ msgid "Rape or other violent sexual behavior" #~ msgstr "ਜਬਰ-ਜ਼ਿਨਾਹ ਜਾਂ ਹੋਰ ਧੱਕੇ ਵਾਲਾ ਜਿਨਸੀ ਰਵੱਈਆ" #~ msgid "No references to alcohol" #~ msgstr "ਕੋਈ ਸ਼ਰਾਬੀ ਖਾਣ-ਪੀਣ ਲਈ ਹਵਾਲੇ ਨਹੀਂ" #~ msgid "References to alcoholic beverages" #~ msgstr "ਸ਼ਰਾਬੀ ਖਾਣ-ਪੀਣ ਲਈ ਹਵਾਲੇ" #~ msgid "Use of alcoholic beverages" #~ msgstr "ਸ਼ਰਾਬੀ ਖਾਣ-ਪੀਣ ਦੀ ਵਰਤੋਂ" #~ msgid "No references to illicit drugs" #~ msgstr "ਵਰਜਿਤ ਦਵਾਈਆਂ (ਨਸ਼ਿਆਂ) ਲਈ ਕੋਈ ਹਵਾਲਾ ਨਹੀਂ" #~ msgid "References to illicit drugs" #~ msgstr "ਵਰਜਿਤ ਦਵਾਈਆਂ (ਨਸ਼ਿਆਂ) ਲਈ ਹਵਾਲੇ" #~ msgid "Use of illicit drugs" #~ msgstr "ਵਰਜਿਤ ਦਵਾਈਆਂ (ਨਸ਼ਿਆਂ) ਦੀ ਵਰਤੋਂ" #~ msgid "References to tobacco products" #~ msgstr "ਤਮਾਕੂ ਉਤਪਾਦਾਂ ਲਈ ਹਵਾਲੇ" #~ msgid "Use of tobacco products" #~ msgstr "ਤਮਾਕੂ ਉਤਪਾਦਾਂ ਦੀ ਵਰਤੋਂ" #~ msgid "No nudity of any sort" #~ msgstr "ਕਿਸੇ ਵੀ ਕਿਸਮ ਦਾ ਨੰਗੇਜ਼ ਨਹੀਂ ਹੈ" #~ msgid "Brief artistic nudity" #~ msgstr "ਸੰਖੇਪ ਕਲਕਾਰੀ ਨੰਗੇਜ਼" #~ msgid "Prolonged nudity" #~ msgstr "ਲੰਮੇ ਸਮੇਂ ਲਈ ਨੰਗੇਜ਼" #~ msgid "No references or depictions of sexual nature" #~ msgstr "ਜਿਨਸੀ ਕਿਸਮ ਦੇ ਕੋਈ ਹਵਾਲੇ ਜਾਂ ਵਰਣਨ ਨਹੀਂ ਹੈ" #~ msgid "Provocative references or depictions" #~ msgstr "ਭੜਕਾਊ ਹਵਾਲੇ ਜਾਂ ਵਰਣਨ" #~ msgid "Sexual references or depictions" #~ msgstr "ਜਿਨਸੀ ਹਵਾਲੇ ਜਾਂ ਵਰਣਨ" #~ msgid "Graphic sexual behavior" #~ msgstr "ਗਰਾਫ਼ਿਕ ਜਿਨਸੀ ਰਵੱਈਆ" #~ msgid "No profanity of any kind" #~ msgstr "ਕਿਸੇ ਵੀ ਕਿਸਮ ਦੀ ਕੋਈ ਵੀ ਬੇਅਦਬੀ ਨਹੀਂ" #~ msgid "Mild or infrequent use of profanity" #~ msgstr "ਹਲਕੀ ਜਾਂ ਕਦੇ ਕਦਾਈ ਬੇਅਦਬੀ ਦੀ ਵਰਤੋਂ" #~ msgid "Moderate use of profanity" #~ msgstr "ਬੇਅਦਬੀ ਦੀ ਠੀਕ-ਠਾਕ ਵਰਤੋਂ" #~ msgid "Strong or frequent use of profanity" #~ msgstr "ਬੇਅਦਬੀ ਦੀ ਜ਼ੋਰਦਾਰ ਜਾਂ ਅਕਸਰ ਵਰਤੋਂ" #~ msgid "No inappropriate humor" #~ msgstr "ਕੋਈ ਅਢੁੱਕਵਾਂ ਮਜ਼ਾਕ ਨਹੀਂ" #~ msgid "Slapstick humor" #~ msgstr "ਮਸ਼ਕਰੀਆ ਮਜ਼ਾਕ" #~ msgid "Vulgar or bathroom humor" #~ msgstr "ਘਟੀਆ ਜਾਂ ਬਾਥਰੂਮ ਮਜ਼ਾਕ" #~ msgid "Mature or sexual humor" #~ msgstr "ਪ੍ਰੋੜ੍ਹ ਜਾਂ ਜਿਨਸੀ ਮਜ਼ਾਕ" #~ msgid "No discriminatory language of any kind" #~ msgstr "ਕਿਸੇ ਵੀ ਕਿਸਮ ਦੀ ਪੱਖਪਾਤੀ ਭਾਸ਼ਾ ਨਹੀਂ" #~ msgid "Negativity towards a specific group of people" #~ msgstr "ਖਾਸ ਕਿਸਮ ਦੇ ਲੋਕਾਂ ਦੇ ਖਿਲਾਫ਼ ਨਿਖੇਧੀ" #~ msgid "Discrimination designed to cause emotional harm" #~ msgstr "ਜ਼ਜ਼ਬਾਤੀ ਨੁਕਸਾਨ ਕਰਨ ਲਈ ਤਿਆਰ ਕੀਤਾ ਪੱਖਪਾਤ" #~ msgid "Explicit discrimination based on gender, sexuality, race or religion" #~ msgstr "ਲਿੰਗ, ਜਿਨਸ, ਨਸਲ ਜਾਂ ਧਰਮ 'ਤੇ ਅਧਾਰਿਤ ਸਾਫ਼ ਸਾਫ਼ ਪੱਖਪਾਤ" #~ msgid "No advertising of any kind" #~ msgstr "ਕਿਸੇ ਵੀ ਕਿਸਮ ਦੇ ਕੋਈ ਇਸ਼ਤਿਹਾਰ ਨਹੀਂ" #~ msgid "Product placement" #~ msgstr "ਉਤਪਾਦ ਸਥਾਪਨਾ" #~ msgid "Explicit references to specific brands or trademarked products" #~ msgstr "ਖਾਸ ਬਰੈਂਡਾਂ ਜਾਂ ਟਰੇਡਮਾਰਕ ਉਤਪਾਦਾਂ ਲਈ ਅਲਹਿਦਾ ਹਵਾਲੇ" #~ msgid "Users are encouraged to purchase specific real-world items" #~ msgstr "ਵਰਤੋਂਕਾਰਾਂ ਨੂੰ ਖਾਸ ਅਸਲ ਸੰਸਾਰ ਦੀਆਂ ਚੀਜ਼ਾਂ ਖਰੀਦਣ ਲਈ ਉਤਸ਼ਾਹਿਤ ਕੀਤਾ ਜਾਂਦਾ ਹੈ" #~ msgid "No gambling of any kind" #~ msgstr "ਕਿਸੇ ਵੀ ਕਿਸਮ ਦਾ ਜੂਆ ਨਹੀਂ" #~ msgid "Gambling on random events using tokens or credits" #~ msgstr "ਟੋਕਨ ਜਾਂ ਕਰੈਡਿਟ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਰਲਵੇਂ ਈਵੈਂਟਾਂ ਲਈ ਜੂਆ ਖੇਡਣਾ" #~ msgid "Gambling using “play” money" #~ msgstr "\"ਪਲੇਅ\" ਧਨ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਜੂਆ ਖੇਡਣਾ" #~ msgid "Gambling using real money" #~ msgstr "ਅਸਲੀ ਧਨ ਦੀ ਵਰਤੋਂਂ ਨਾਲ ਜੂਆ ਖੇਡਣਾ" #~ msgid "No ability to spend money" #~ msgstr "ਧਨ ਖ਼ਰਚਣ ਦੀ ਸਮਰੱਥ ਨਹੀਂ" #~ msgid "Users are encouraged to donate real money" #~ msgstr "ਵਰਤੋਂਕਾਰਾਂ ਨੂੰ ਅਸਲ ਧਨ ਦਾਨ ਕਰਨ ਲਈ ਉਤਸ਼ਾਹਿਤ ਕੀਤਾ ਜਾਂਦਾ ਹੈ" #~ msgid "No way to chat with other users" #~ msgstr "ਹੋਰ ਵਰਤੋਂਕਾਰਾਂ ਨਾਲ ਗੱਲਾਂ ਕਰਨ ਦਾ ਕੋਈ ਢੰਗ ਨਹੀਂ" #~ msgid "Moderated chat functionality between users" #~ msgstr "ਵਰਤੋਂਕਾਰਾਂ ਵਿਚਾਲੇ ਸੰਜਮੀ ਗੱਲਬਾਤ ਸਹੂਲਤ" #~ msgid "Uncontrolled chat functionality between users" #~ msgstr "ਵਰਤੋਂਕਾਰਾਂ 'ਚ ਬਿਨਾਂ-ਕੰਟਰੋਲ ਗੱਲਬਾਤ ਸਹੂਲਤ" #~ msgid "No way to talk with other users" #~ msgstr "ਹੋਰ ਵਰਤੋਂਕਾਰਾਂ ਨਾਲ ਗੱਲਾਂ (ਬੋਲ ਕੇ) ਕਰਨ ਦਾ ਕੋਈ ਢੰਗ ਨਹੀਂ" #~ msgid "Uncontrolled audio or video chat functionality between users" #~ msgstr "ਵਰਤੋਂਕਾਰਾਂ 'ਚ ਬਿਨਾਂ-ਕੰਟਰੋਲ ਆਡੀਓ ਜਾਂ ਵੀਡੀਓ ਗੱਲਬਾਤ ਸਹੂਲਤ" #~ msgid "No sharing of social network usernames or email addresses" #~ msgstr "ਸਮਾਜਿਕ ਨੈੱਟਵਰਕ ਵਰਤੋਂਕਾਰ ਜਾਂ ਈਮੇਲ ਸਿਰਨਾਵੇਂ ਸਾਂਝੇ ਨਹੀਂ ਕੀਤੇ ਜਾ ਰਹੇ ਹਨ" #~ msgid "Sharing social network usernames or email addresses" #~ msgstr "ਸਮਾਜਿਕ ਨੈੱਟਵਰਕ ਵਰਤੋਂਕਾਰ ਜਾਂ ਈਮੇਲ ਸਿਰਨਾਵੇਂ ਸਾਂਝੇ ਕੀਤੇ ਜਾ ਰਹੇ ਹਨ" #~ msgid "No sharing of user information with 3rd parties" #~ msgstr "ਤੀਜੀਆਂ ਧਿਰਾਂ ਨਾਲ ਵਰਤੋਂਕਾਰ ਜਾਣਕਾਰੀ ਸਾਂਝੀ ਨਹੀਂ ਕੀਤੀ ਜਾਂਦੀ" #~ msgid "Checking for the latest application version" #~ msgstr "ਐਪਲੀਕੇਸ਼ਨ ਦੇ ਨਵੇਂ ਵਰਜ਼ਨ ਲਈ ਜਾਂਚ ਕੀਤੀ ਜਾ ਰਹੀ ਹੈ" #~ msgid "Sharing diagnostic data that does not let others identify the user" #~ msgstr "" #~ "ਜਾਂਚ-ਪੜਤਾਲ ਡਾਟਾ ਸਾਂਝਾ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ, ਜੋ ਕਿ ਹੋਰਾਂ ਨੂੰ ਵਰਤੋਂਕਾਰ ਦੀ ਪਛਾਣ ਨਹੀਂ ਕਰਨ " #~ "ਦਿੰਦਾ ਹੈ" #~ msgid "Sharing information that lets others identify the user" #~ msgstr "ਜਾਣਕਾਰੀ ਸਾਂਝੀ ਕਰਨੀ, ਜਿਸ ਨਾਲ ਹੋਰ ਵਰਤੋਂਕਾਰ ਦੀ ਪਛਾਣ ਕਰਦੇ ਹਨ" #~ msgid "No sharing of physical location to other users" #~ msgstr "ਹੋਰ ਵਰਤੋਂਕਾਰਾਂ ਨਾਲ ਭੂਗੋਲਿਕ ਟਿਕਾਣਾ ਨਹੀਂ ਸਾਂਝਾ ਨਹੀਂ ਕੀਤਾ ਜਾਂਦਾ ਹੈ" #~ msgid "Sharing physical location to other users" #~ msgstr "ਹੋਰ ਵਰਤੋਂਕਾਰਾਂ ਨਾਲ ਭੂਗੋਲਿਕ ਟਿਕਾਣਾ ਸਾਂਝਾ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ" #~ msgid "No references to homosexuality" #~ msgstr "ਕੋਈ ਸਮਲਿੰਗ ਕਾਮੁਕਤਾ ਲਈ ਹਵਾਲੇ ਨਹੀਂ" #~ msgid "Indirect references to homosexuality" #~ msgstr "ਸਮਲਿੰਗ ਕਾਮੁਕਤਾ ਲਈ ਅਸਿੱਧੇ ਹਵਾਲੇ" #~ msgid "Kissing between people of the same gender" #~ msgstr "ਇੱਕੋ ਲਿੰਗ ਦੇ ਲੋਕਾਂ ਵਿਚਾਲੇ ਚੁੰਮਣ" #~ msgid "Graphic sexual behavior between people of the same gender" #~ msgstr "ਇੱਕੋ ਲਿੰਗ ਦੇ ਲੋਕਾਂ ਵਿਚਾਲੇ ਜਿਨਸੀ ਸੰਬੰਧਾਂ ਦਾ ਚਿੱਤਰਨ" #~ msgid "No references to prostitution" #~ msgstr "ਕੋਈ ਕੰਜਰਪੁਣੇ ਲਈ ਹਵਾਲੇ ਨਹੀਂ" #~ msgid "Indirect references to prostitution" #~ msgstr "ਕੰਜਰਪੁਣੇ ਲਈ ਅਸਿੱਧੇ ਹਵਾਲੇ" #~ msgid "Direct references to prostitution" #~ msgstr "ਕੰਜਰਪੁਣੇ ਲਈ ਸਿੱਧੇ ਹਵਾਲੇ" #~ msgid "Graphic depictions of the act of prostitution" #~ msgstr "ਕੰਜਰਪੁਣੇ ਦੇ ਕੰਮ ਲਈ ਚਿੱਤਰਨ" #~ msgid "No references to adultery" #~ msgstr "ਕੋਈ ਬਦਕਾਰੀ ਲਈ ਹਵਾਲੇ ਨਹੀਂ" #~ msgid "Indirect references to adultery" #~ msgstr "ਬਦਕਾਰੀ ਲਈ ਅਸਿੱਧੇ ਹਵਾਲੇ" #~ msgid "Direct references to adultery" #~ msgstr "ਬਦਕਾਰੀ ਲਈ ਸਿੱਧੇ ਹਵਾਲੇ" #~ msgid "Graphic depictions of the act of adultery" #~ msgstr "ਬਦਕਾਰੀ ਦੇ ਕੰਮ ਲਈ ਚਿੱਤਰਨ" #~ msgid "No sexualized characters" #~ msgstr "ਕੋਈ ਕਾਮਕਤਾ ਪਾਤਰ ਨਹੀਂ" #~ msgid "Scantily clad human characters" #~ msgstr "ਟਾਵੇਂ-ਟਾਵੇਂ ਕੱਪੜੇ ਪਾਏ ਹੋਏ ਮਨੁੱਖੀ ਪਾਤਰ" #~ msgid "Overtly sexualized human characters" #~ msgstr "ਪ੍ਰਤੱਖ ਜਿਨਸੀ ਸੰਬੰਧਾਂ ਵਿੱਚ ਰੁਝੇ ਮਨੁੱਖੀ ਪਾਤਰ" #~ msgid "No references to desecration" #~ msgstr "ਕੋਈ ਬੇਹੁਰਮਤੀ ਦੇ ਹਵਾਲੇ ਨਹੀਂ" #~ msgid "Depictions of modern-day human desecration" #~ msgstr "ਅੱਜ ਦੀ ਮਨੁੱਖੀ ਬੇਅਦਬੀ ਦਾ ਚਿੱਤਰਨ" #~ msgid "Graphic depictions of modern-day desecration" #~ msgstr "ਅੱਜ ਦੀ ਬੇਅਦਬੀ ਦਾ ਚਿੱਤਰ ਰੂਪੀ ਵਰਣਨ" #~ msgid "No visible dead human remains" #~ msgstr "ਕੋਈ ਮਰੇ ਹੋਏ ਮਨੁੱਖੀ ਬਚੇ ਹੋਏ ਸਰੀਰਿਕ ਹਿੱਸੇ ਨਹੀਂ" #~ msgid "Visible dead human remains" #~ msgstr "ਮਰੇ ਹੋਏ ਮਨੁੱਖੀ ਬਚੇ ਹੋਏ ਸਰੀਰਿਕ ਹਿੱਸੇ" #~ msgid "Dead human remains that are exposed to the elements" #~ msgstr "ਮਰੇ ਹੋਏ ਮਨੁੱਖ ਦੇ ਸਰੀਰਿਕ ਹਿੱਸੇ, ਜੋ ਕਿ ਤੱਤਾਂ ਦੇ ਸਾਹਮਣੇ ਨੰਗੇ ਸਨ" #~ msgid "Graphic depictions of desecration of human bodies" #~ msgstr "ਮਨੁੱਖੀ ਸਰੀਰ ਦੇ ਹਿੱਸਿਆਂ ਦੀ ਬੇਅਦਬੀ ਦਾ ਚਿੱਤਰਾਂ ਦੇ ਰੂਪ ਵਿੱਚ ਵਰਣਨ" #~ msgid "No references to slavery" #~ msgstr "ਕੋਈ ਗ਼ੁਲਾਮੀ ਦੇ ਹਵਾਲੇ ਨਹੀਂ" #~ msgid "Depictions of modern-day slavery" #~ msgstr "ਅੱਜ ਦੀ ਗ਼ੁਲਾਮੀ ਲਈ ਚਿੱਤਰਨ" #~ msgid "Graphic depictions of modern-day slavery" #~ msgstr "ਅੱਜ ਦੀ ਗ਼ੁਲਾਮੀ ਲਈ ਚਿੱਤਰਾਂ ਦੇ ਰੂਪ ਵਿੱਚ ਵਰਣਨ" malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/po/pl.po000066400000000000000000000417601505556674000231750ustar00rootroot00000000000000# Polish translation for malcontent. # Copyright © 2020, 2024 the malcontent authors. # This file is distributed under the same license as the malcontent package. # Piotr Drąg , 2020, 2024. # Aviary.pl , 2020, 2024. # msgid "" msgstr "" "Project-Id-Version: malcontent\n" "Report-Msgid-Bugs-To: https://gitlab.freedesktop.org/pwithnall/malcontent/" "issues\n" "POT-Creation-Date: 2024-09-09 16:32+0000\n" "PO-Revision-Date: 2024-09-09 18:33+0200\n" "Last-Translator: Piotr Drąg \n" "Language-Team: Polish \n" "Language: pl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " "|| n%100>=20) ? 1 : 2);\n" #: accounts-service/com.endlessm.ParentalControls.policy.in:4 msgid "Change your own app filter" msgstr "Zmiana własnego filtru programów" #: accounts-service/com.endlessm.ParentalControls.policy.in:5 msgid "Authentication is required to change your app filter." msgstr "Wymagane jest uwierzytelnienie, aby zmienić swój filtr programów." #: accounts-service/com.endlessm.ParentalControls.policy.in:14 msgid "Read your own app filter" msgstr "Odczytanie własnego filtru programów" #: accounts-service/com.endlessm.ParentalControls.policy.in:15 msgid "Authentication is required to read your app filter." msgstr "Wymagane jest uwierzytelnienie, aby odczytać własne filtry programów." #: accounts-service/com.endlessm.ParentalControls.policy.in:24 msgid "Change another user’s app filter" msgstr "Zmiana filtru programów innego użytkownika" #: accounts-service/com.endlessm.ParentalControls.policy.in:25 msgid "Authentication is required to change another user’s app filter." msgstr "" "Wymagane jest uwierzytelnienie, aby zmienić filtr programów innego " "użytkownika." #: accounts-service/com.endlessm.ParentalControls.policy.in:34 msgid "Read another user’s app filter" msgstr "Odczytanie filtru programów innego użytkownika" #: accounts-service/com.endlessm.ParentalControls.policy.in:35 msgid "Authentication is required to read another user’s app filter." msgstr "" "Wymagane jest uwierzytelnienie, aby odczytać filtr programów innego " "użytkownika." #: accounts-service/com.endlessm.ParentalControls.policy.in:44 msgid "Change your own session limits" msgstr "Zmiana własnych ograniczeń sesji" #: accounts-service/com.endlessm.ParentalControls.policy.in:45 msgid "Authentication is required to change your session limits." msgstr "Wymagane jest uwierzytelnienie, aby zmienić własne ograniczenia sesji." #: accounts-service/com.endlessm.ParentalControls.policy.in:54 msgid "Read your own session limits" msgstr "Odczytanie własnych ograniczeń sesji" #: accounts-service/com.endlessm.ParentalControls.policy.in:55 msgid "Authentication is required to read your session limits." msgstr "" "Wymagane jest uwierzytelnienie, aby odczytać własne ograniczenia sesji." #: accounts-service/com.endlessm.ParentalControls.policy.in:64 msgid "Change another user’s session limits" msgstr "Zmiana ograniczeń sesji innego użytkownika" #: accounts-service/com.endlessm.ParentalControls.policy.in:65 msgid "Authentication is required to change another user’s session limits." msgstr "" "Wymagane jest uwierzytelnienie, aby zmienić ograniczenia sesji innego " "użytkownika." #: accounts-service/com.endlessm.ParentalControls.policy.in:74 msgid "Read another user’s session limits" msgstr "Odczytanie ograniczeń sesji innego użytkownika" #: accounts-service/com.endlessm.ParentalControls.policy.in:75 msgid "Authentication is required to read another user’s session limits." msgstr "" "Wymagane jest uwierzytelnienie, aby odczytać ograniczenia sesji innego " "użytkownika." #: accounts-service/com.endlessm.ParentalControls.policy.in:84 msgid "Change your own account info" msgstr "Zmiana własnych informacji o koncie" #: accounts-service/com.endlessm.ParentalControls.policy.in:85 msgid "Authentication is required to change your account info." msgstr "" "Wymagane jest uwierzytelnienie, aby zmienić własne informacje o koncie." #: accounts-service/com.endlessm.ParentalControls.policy.in:94 msgid "Read your own account info" msgstr "Odczytanie własnych informacji o koncie" #: accounts-service/com.endlessm.ParentalControls.policy.in:95 msgid "Authentication is required to read your account info." msgstr "" "Wymagane jest uwierzytelnienie, aby odczytać własne informacje o koncie." #: accounts-service/com.endlessm.ParentalControls.policy.in:104 msgid "Change another user’s account info" msgstr "Zmiana informacji o koncie innego użytkownika" #: accounts-service/com.endlessm.ParentalControls.policy.in:105 msgid "Authentication is required to change another user’s account info." msgstr "" "Wymagane jest uwierzytelnienie, aby zmienić informacje o koncie innego " "użytkownika." #: accounts-service/com.endlessm.ParentalControls.policy.in:114 msgid "Read another user’s account info" msgstr "Odczytanie informacji o koncie innego użytkownika" #: accounts-service/com.endlessm.ParentalControls.policy.in:115 msgid "Authentication is required to read another user’s account info." msgstr "" "Wymagane jest uwierzytelnienie, aby odczytać informacje o koncie innego " "użytkownika." #: libmalcontent/app-filter.c:696 #, c-format msgid "App filter for user %u was in an unrecognized format" msgstr "Filtr programów użytkownika %u jest w nieznanym formacie" #: libmalcontent/app-filter.c:727 #, c-format msgid "OARS filter for user %u has an unrecognized kind ‘%s’" msgstr "Filtr OARS użytkownika %u ma nieznany rodzaj „%s”" #: libmalcontent/manager.c:283 libmalcontent/manager.c:420 #: libmalcontent/manager.c:803 #, c-format msgid "Not allowed to query parental controls data for user %u" msgstr "" "Brak zezwolenia na odpytanie danych kontroli rodzicielskiej użytkownika %u" #: libmalcontent/manager.c:288 #, c-format msgid "User %u does not exist" msgstr "Użytkownik %u nie istnieje" #: libmalcontent/manager.c:296 msgid "System accounts service not available" msgstr "Systemowa usługa kont jest niedostępna" #: libmalcontent/manager.c:402 msgid "App filtering is globally disabled" msgstr "Filtrowanie programów jest wyłączone globalnie" #: libmalcontent/manager.c:785 msgid "Session limits are globally disabled" msgstr "Ograniczenia sesji są wyłączone globalnie" #: libmalcontent/session-limits.c:306 #, c-format msgid "Session limit for user %u was in an unrecognized format" msgstr "Ograniczenie sesji użytkownika %u jest w nieznanym formacie" #: libmalcontent/session-limits.c:328 #, c-format msgid "Session limit for user %u has an unrecognized type ‘%u’" msgstr "Ograniczenie sesji użytkownika %u ma nieznany typ „%u”" #: libmalcontent/session-limits.c:346 #, c-format msgid "Session limit for user %u has invalid daily schedule %u–%u" msgstr "" "Ograniczenie sesji użytkownika %u ma nieprawidłowy dzienny harmonogram %u-%u" #. Translators: the placeholder is a user’s full name #: libmalcontent-ui/restrict-applications-dialog.c:256 #, c-format msgid "Restrict %s from using the following installed applications." msgstr "" "Ograniczanie użytkownikowi %s możliwości używania poniższych zainstalowanych " "programów." #: libmalcontent-ui/restrict-applications-dialog.ui:6 msgid "Restrict Applications" msgstr "Ograniczanie programów" #: libmalcontent-ui/restrict-applications-dialog.ui:22 msgid "Search for applications…" msgstr "Wyszukiwanie programów…" #: libmalcontent-ui/restrict-applications-selector.ui:13 msgid "No applications found to restrict." msgstr "Nie odnaleziono żadnych programów do ograniczenia." #. Translators: this is the full name for an unknown user account. #: libmalcontent-ui/user-controls.c:198 libmalcontent-ui/user-controls.c:209 msgid "unknown" msgstr "nieznany" #: libmalcontent-ui/user-controls.c:306 libmalcontent-ui/user-controls.c:394 #: libmalcontent-ui/user-controls.c:647 msgid "Unrestricted" msgstr "Bez ograniczeń" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:476 #, c-format msgid "" "Prevents %s from running web browsers. Limited web content may still be " "available in other applications." msgstr "" "Uniemożliwia użytkownikowi %s używanie przeglądarek internetowych. Pewne " "treści internetowe mogą nadal być dostępne w innych programach." #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:481 #, c-format msgid "Prevents specified applications from being used by %s." msgstr "Uniemożliwia użytkownikowi %s używanie podanych programów." #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:486 #, c-format msgid "Prevents %s from installing applications." msgstr "Uniemożliwia użytkownikowi %s instalowanie programów." #: libmalcontent-ui/user-controls.ui:25 msgid "Application Usage Restrictions" msgstr "Ograniczenia używania programów" #: libmalcontent-ui/user-controls.ui:28 msgid "Restrict _Web Browsers" msgstr "_Ograniczanie przeglądarek internetowych" #: libmalcontent-ui/user-controls.ui:51 msgid "_Restrict Applications" msgstr "Ogr_aniczanie programów" #: libmalcontent-ui/user-controls.ui:73 msgid "Software Installation Restrictions" msgstr "Ograniczenia instalacji oprogramowania" #: libmalcontent-ui/user-controls.ui:77 msgid "Restrict Application _Installation" msgstr "Ogra_niczanie instalacji programów" #: libmalcontent-ui/user-controls.ui:99 msgid "Application _Suitability" msgstr "O_dpowiedniość programów" #: libmalcontent-ui/user-controls.ui:102 msgid "" "Restricts the browsing or installation of applications unsuitable for this " "age or younger." msgstr "" "Ogranicza przeglądanie lub instalowanie programów nieodpowiednich dla tego " "wieku lub młodszych." #. Translators: This documents the --user command line option to malcontent-control: #: malcontent-control/application.c:102 msgid "User to select in the UI" msgstr "Użytkownik do wybrania w interfejsie użytkownika" #. Translators: This is a placeholder for a command line argument value: #: malcontent-control/application.c:104 msgid "USERNAME" msgstr "NAZWA-UŻYTKOWNIKA" #: malcontent-control/application.c:116 msgid "— view and edit parental controls" msgstr "— wyświetlanie i modyfikowanie kontroli rodzicielskiej" #. Translators: This is the title of the main window #. Translators: the name of the application as it appears in a software center #: malcontent-control/application.c:123 malcontent-control/main.ui:17 #: malcontent-control/org.freedesktop.MalcontentControl.metainfo.xml.in:9 #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:3 msgid "Parental Controls" msgstr "Kontrola rodzicielska" #: malcontent-control/application.c:309 msgid "Copyright © 2019, 2020 Endless Mobile, Inc." msgstr "Copyright © 2019, 2020 Endless Mobile, Inc." #. Translators: this should be "translated" to the #. names of people who have translated Malcontent into #. this language, one per line. #: malcontent-control/application.c:314 msgid "translator-credits" msgstr "" "Piotr Drąg , 2020, 2024\n" "Aviary.pl , 2020, 2024" #. Translators: "Malcontent" is the brand name of this #. project, so should not be translated. #: malcontent-control/application.c:320 msgid "Malcontent Website" msgstr "Witryna projektu Malcontent" #: malcontent-control/application.c:340 msgid "The help contents could not be displayed" msgstr "Nie można wyświetlić treści pomocy" #: malcontent-control/application.c:389 msgid "Failed to load user data from the system" msgstr "Wczytanie danych użytkownika z systemu się nie powiodło" #: malcontent-control/application.c:391 msgid "Please make sure that the AccountsService is installed and enabled." msgstr "" "Proszę się upewnić, że usługa AccountsService jest zainstalowana i włączona." #. Translators: Replace the link to commonsensemedia.org with some #. * localised guidance for parents/carers on how to set restrictions on #. * their child/caree in a responsible way which is in keeping with the #. * best practice and culture of the region. If no suitable localised #. * guidance exists, and if the default commonsensemedia.org link is not #. * suitable, please file an issue against malcontent so we can discuss #. * further! #. * https://gitlab.freedesktop.org/pwithnall/malcontent/-/issues/new #. #: malcontent-control/application.c:424 #, c-format msgid "" "It’s recommended that restrictions are set as part of an ongoing " "conversation with %s. Read guidance on what to consider." msgstr "" "Zalecane jest ustawianie ograniczeń jako część rozmowy z użytkownikiem %s. " "Można przeczytać porady na ten temat." #: malcontent-control/carousel.ui:38 msgid "Previous Page" msgstr "Poprzednia strona" #: malcontent-control/carousel.ui:57 msgid "Next Page" msgstr "Następna strona" #: malcontent-control/main.ui:87 msgid "Permission Required" msgstr "Wymagane jest pozwolenie" #: malcontent-control/main.ui:88 msgid "" "Permission is required to view and change user parental controls settings." msgstr "" "Wymagane jest uprawnienie, aby wyświetlić lub zmienić ustawienia kontroli " "rodzicielskiej użytkownika." #: malcontent-control/main.ui:110 msgid "No Standard User Accounts" msgstr "Brak standardowych kont użytkowników" #: malcontent-control/main.ui:111 msgid "" "Parental controls can only be applied to standard user\n" "accounts. These can be created in the user settings." msgstr "" "Kontrola rodzicielska może być stosowana tylko na standardowych\n" "kontach użytkowników. Można je utworzyć w ustawieniach użytkowników." #: malcontent-control/main.ui:115 msgid "_User Settings" msgstr "_Ustawienia użytkowników" #: malcontent-control/main.ui:138 msgid "Loading…" msgstr "Wczytywanie…" #: malcontent-control/main.ui:171 msgid "_Help" msgstr "Pomo_c" #: malcontent-control/main.ui:175 msgid "_About Parental Controls" msgstr "_O programie" #. Translators: the brief summary of the application as it appears in a software center. #: malcontent-control/org.freedesktop.MalcontentControl.metainfo.xml.in:12 #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:4 msgid "Set parental controls and monitor usage by users" msgstr "Kontrola rodzicielska i monitorowanie użycia" #. Translators: These are the application description paragraphs in the AppData file. #: malcontent-control/org.freedesktop.MalcontentControl.metainfo.xml.in:16 msgid "" "Manage users’ parental controls restrictions, controlling how long they can " "use the computer for, what software they can install, and what installed " "software they can run." msgstr "" "Umożliwia zarządzanie ograniczeniami kontroli rodzicielskiej użytkowników, " "kontrolowanie jak długo mogą używać komputera, jakie oprogramowanie mogą " "instalować oraz którego zainstalowanego oprogramowania mogą używać." #: malcontent-control/org.freedesktop.MalcontentControl.metainfo.xml.in:25 msgid "Main window" msgstr "Główne okno" #. Translators: Search terms to find this application. Do NOT translate or localise the semicolons! The list MUST also end with a semicolon! #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:13 msgid "" "parental controls;screen time;app restrictions;web browser restrictions;oars;" "usage;usage limit;kid;child;" msgstr "" "kontrola rodzicielska;ograniczanie;restrykcje;ograniczenia programów;" "ograniczenia aplikacji;ograniczenia przeglądarki internetowej;www;oars;" "użycie;użytek;czas korzystania;limit korzystania;dziecko;dzieciak;dzieci;" "children;kids;" #: malcontent-control/org.freedesktop.MalcontentControl.policy.in:9 msgid "Manage parental controls" msgstr "Zarządzanie kontrolą rodzicielską" #: malcontent-control/org.freedesktop.MalcontentControl.policy.in:10 msgid "Authentication is required to read and change user parental controls" msgstr "" "Wymagane jest uwierzytelnienie, aby odczytać lub zmienić kontrolę " "rodzicielską użytkownika" #: malcontent-control/user-selector.c:426 msgid "Your account" msgstr "Moje konto" #. Always allow root, to avoid a situation where this PAM module prevents #. * all users logging in with no way of recovery. #: pam/pam_malcontent.c:142 pam/pam_malcontent.c:188 #, c-format msgid "User ‘%s’ has no time limits enabled" msgstr "Użytkownik „%s” nie ma włączonych żadnych ograniczeń czasowych" #: pam/pam_malcontent.c:151 pam/pam_malcontent.c:172 #, c-format msgid "Error getting session limits for user ‘%s’: %s" msgstr "Błąd podczas uzyskiwania ograniczeń sesji użytkownika „%s”: %s" #: pam/pam_malcontent.c:182 #, c-format msgid "User ‘%s’ has no time remaining" msgstr "Użytkownikowi „%s” skończył się czas" #: pam/pam_malcontent.c:200 #, c-format msgid "Error setting time limit on login session: %s" msgstr "Błąd podczas ustawiania ograniczenia czasowego na sesję logowania: %s" malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/po/pt.po000066400000000000000000000431201505556674000231750ustar00rootroot00000000000000# Portuguese translations for malcontent package. # Copyright (C) 2020 THE malcontent'S COPYRIGHT HOLDER # This file is distributed under the same license as the malcontent package. # Automatically generated, 2020. # msgid "" msgstr "" "Project-Id-Version: malcontent\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-06-10 12:04+0100\n" "PO-Revision-Date: 2020-04-15 13:42+0100\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: pt\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: accounts-service/com.endlessm.ParentalControls.policy.in:4 msgid "Change your own app filter" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:5 msgid "Authentication is required to change your app filter." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:14 msgid "Read your own app filter" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:15 msgid "Authentication is required to read your app filter." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:24 msgid "Change another user’s app filter" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:25 msgid "Authentication is required to change another user’s app filter." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:34 msgid "Read another user’s app filter" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:35 msgid "Authentication is required to read another user’s app filter." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:44 msgid "Change your own session limits" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:45 msgid "Authentication is required to change your session limits." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:54 msgid "Read your own session limits" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:55 msgid "Authentication is required to read your session limits." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:64 msgid "Change another user’s session limits" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:65 msgid "Authentication is required to change another user’s session limits." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:74 msgid "Read another user’s session limits" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:75 msgid "Authentication is required to read another user’s session limits." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:84 msgid "Change your own account info" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:85 msgid "Authentication is required to change your account info." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:94 msgid "Read your own account info" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:95 msgid "Authentication is required to read your account info." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:104 msgid "Change another user’s account info" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:105 msgid "Authentication is required to change another user’s account info." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:114 msgid "Read another user’s account info" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:115 msgid "Authentication is required to read another user’s account info." msgstr "" #: libmalcontent/app-filter.c:694 #, c-format msgid "App filter for user %u was in an unrecognized format" msgstr "" #: libmalcontent/app-filter.c:725 #, c-format msgid "OARS filter for user %u has an unrecognized kind ‘%s’" msgstr "" #: libmalcontent/manager.c:283 libmalcontent/manager.c:412 #, c-format msgid "Not allowed to query app filter data for user %u" msgstr "" #: libmalcontent/manager.c:288 #, c-format msgid "User %u does not exist" msgstr "" #: libmalcontent/manager.c:394 msgid "App filtering is globally disabled" msgstr "" #: libmalcontent/manager.c:777 msgid "Session limits are globally disabled" msgstr "" #: libmalcontent/manager.c:795 #, c-format msgid "Not allowed to query session limits data for user %u" msgstr "" #: libmalcontent/session-limits.c:306 #, c-format msgid "Session limit for user %u was in an unrecognized format" msgstr "" #: libmalcontent/session-limits.c:328 #, c-format msgid "Session limit for user %u has an unrecognized type ‘%u’" msgstr "" #: libmalcontent/session-limits.c:346 #, c-format msgid "Session limit for user %u has invalid daily schedule %u–%u" msgstr "" #. TRANSLATORS: This is the formatting of English and localized name #. of the rating e.g. "Adults Only (solo adultos)" #: libmalcontent-ui/gs-content-rating.c:75 #, c-format msgid "%s (%s)" msgstr "" #: libmalcontent-ui/gs-content-rating.c:209 msgid "General" msgstr "" #: libmalcontent-ui/gs-content-rating.c:218 msgid "ALL" msgstr "" #: libmalcontent-ui/gs-content-rating.c:222 #: libmalcontent-ui/gs-content-rating.c:485 msgid "Adults Only" msgstr "" #: libmalcontent-ui/gs-content-rating.c:224 #: libmalcontent-ui/gs-content-rating.c:484 msgid "Mature" msgstr "" #: libmalcontent-ui/gs-content-rating.c:226 #: libmalcontent-ui/gs-content-rating.c:483 msgid "Teen" msgstr "" #: libmalcontent-ui/gs-content-rating.c:228 #: libmalcontent-ui/gs-content-rating.c:482 msgid "Everyone 10+" msgstr "" #: libmalcontent-ui/gs-content-rating.c:230 #: libmalcontent-ui/gs-content-rating.c:481 msgid "Everyone" msgstr "" #: libmalcontent-ui/gs-content-rating.c:232 #: libmalcontent-ui/gs-content-rating.c:480 msgid "Early Childhood" msgstr "" #. Translators: the placeholder is a user’s full name #: libmalcontent-ui/restrict-applications-dialog.c:222 #, c-format msgid "Restrict %s from using the following installed applications." msgstr "" #: libmalcontent-ui/restrict-applications-dialog.ui:6 #: libmalcontent-ui/restrict-applications-dialog.ui:12 msgid "Restrict Applications" msgstr "" #: libmalcontent-ui/restrict-applications-selector.ui:24 msgid "No applications found to restrict." msgstr "" #. Translators: this is the full name for an unknown user account. #: libmalcontent-ui/user-controls.c:242 libmalcontent-ui/user-controls.c:253 msgid "unknown" msgstr "" #: libmalcontent-ui/user-controls.c:338 libmalcontent-ui/user-controls.c:425 #: libmalcontent-ui/user-controls.c:711 msgid "All Ages" msgstr "" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:514 #, c-format msgid "" "Prevents %s from running web browsers. Limited web content may still be " "available in other applications." msgstr "" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:519 #, c-format msgid "Prevents specified applications from being used by %s." msgstr "" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:524 #, c-format msgid "Prevents %s from installing applications." msgstr "" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:529 #, c-format msgid "Applications installed by %s will not appear for other users." msgstr "" #: libmalcontent-ui/user-controls.ui:17 msgid "Application Usage Restrictions" msgstr "" #: libmalcontent-ui/user-controls.ui:68 msgid "Restrict _Web Browsers" msgstr "" #: libmalcontent-ui/user-controls.ui:152 msgid "_Restrict Applications" msgstr "" #: libmalcontent-ui/user-controls.ui:231 msgid "Software Installation Restrictions" msgstr "" #: libmalcontent-ui/user-controls.ui:281 msgid "Restrict Application _Installation" msgstr "" #: libmalcontent-ui/user-controls.ui:366 msgid "Restrict Application Installation for _Others" msgstr "" #: libmalcontent-ui/user-controls.ui:451 msgid "Application _Suitability" msgstr "" #: libmalcontent-ui/user-controls.ui:473 msgid "" "Restricts browsing or installation of applications to applications suitable " "for certain ages or above." msgstr "" #. Translators: This is the title of the main window #. Translators: the name of the application as it appears in a software center #: malcontent-control/application.c:105 malcontent-control/main.ui:12 #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:9 #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:3 msgid "Parental Controls" msgstr "" #: malcontent-control/application.c:270 msgid "Copyright © 2019, 2020 Endless Mobile, Inc." msgstr "" #. Translators: this should be "translated" to the #. names of people who have translated Malcontent into #. this language, one per line. #: malcontent-control/application.c:275 msgid "translator-credits" msgstr "" #. Translators: "Malcontent" is the brand name of this #. project, so should not be translated. #: malcontent-control/application.c:281 msgid "Malcontent Website" msgstr "" #: malcontent-control/application.c:299 msgid "The help contents could not be displayed" msgstr "" #: malcontent-control/application.c:336 msgid "Failed to load user data from the system" msgstr "" #: malcontent-control/application.c:338 msgid "Please make sure that the AccountsService is installed and enabled." msgstr "" #: malcontent-control/carousel.ui:48 msgid "Previous Page" msgstr "" #: malcontent-control/carousel.ui:74 msgid "Next Page" msgstr "" #: malcontent-control/main.ui:93 msgid "Permission Required" msgstr "" #: malcontent-control/main.ui:107 msgid "" "Permission is required to view and change user parental controls settings." msgstr "" #: malcontent-control/main.ui:148 msgid "No Child Users Configured" msgstr "" #: malcontent-control/main.ui:162 msgid "" "No child users are currently set up on the system. Create one before setting " "up their parental controls." msgstr "" #: malcontent-control/main.ui:174 msgid "Create _Child User" msgstr "" #: malcontent-control/main.ui:202 msgid "Loading…" msgstr "" #: malcontent-control/main.ui:265 msgid "_Help" msgstr "A_juda" #: malcontent-control/main.ui:269 msgid "_About Parental Controls" msgstr "" #. Translators: the brief summary of the application as it appears in a software center. #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:12 #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:4 msgid "Set parental controls and monitor usage by users" msgstr "" #. Translators: These are the application description paragraphs in the AppData file. #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:16 msgid "" "Manage users’ parental controls restrictions, controlling how long they can " "use the computer for, what software they can install, and what installed " "software they can run." msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:39 msgid "The GNOME Project" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:50 #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:59 msgid "Minor improvements to parental controls application UI" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:51 msgid "Add a user manual" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:52 msgid "Translation updates" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:60 msgid "Translations to Ukrainian and Polish" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:67 msgid "Improve parental controls application UI and add icon" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:68 msgid "Support for indicating which accounts are parent accounts" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:75 msgid "Initial release of basic parental controls application" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:76 msgid "Support for setting app installation and run restrictions on users" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:83 msgid "Maintenance release of underlying parental controls library" msgstr "" #. Translators: Do NOT translate or transliterate this text (this is an icon file name)! #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:7 msgid "org.freedesktop.MalcontentControl" msgstr "" #. Translators: Search terms to find this application. Do NOT translate or localise the semicolons! The list MUST also end with a semicolon! #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:13 msgid "" "parental controls;screen time;app restrictions;web browser restrictions;oars;" "usage;usage limit;kid;child;" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.policy.in:9 msgid "Manage parental controls" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.policy.in:10 msgid "Authentication is required to read and change user parental controls" msgstr "" #: malcontent-control/user-selector.c:426 msgid "Your account" msgstr "" #. Always allow root, to avoid a situation where this PAM module prevents #. * all users logging in with no way of recovery. #: pam/pam_malcontent.c:142 pam/pam_malcontent.c:188 #, c-format msgid "User ‘%s’ has no time limits enabled" msgstr "" #: pam/pam_malcontent.c:151 pam/pam_malcontent.c:172 #, c-format msgid "Error getting session limits for user ‘%s’: %s" msgstr "" #: pam/pam_malcontent.c:182 #, c-format msgid "User ‘%s’ has no time remaining" msgstr "" #: pam/pam_malcontent.c:200 #, c-format msgid "Error setting time limit on login session: %s" msgstr "" #~ msgid "Cartoon characters in unsafe situations" #~ msgstr "Personagem de desenhos animados em situações inseguras" #~ msgid "Cartoon characters in aggressive conflict" #~ msgstr "Personagem de desenhos animados em conflito agressivo" #~ msgid "Graphic violence involving cartoon characters" #~ msgstr "Violência gráfica envolvendo personagem de desenhos animados" #~ msgid "Characters in unsafe situations easily distinguishable from reality" #~ msgstr "" #~ "Personagens em situações inseguras facilmente distinguíveis da realidade" #~ msgid "" #~ "Characters in aggressive conflict easily distinguishable from reality" #~ msgstr "" #~ "Personagem em conflito agressivo facilmente distinguíveis da realidade" #~ msgid "Graphic violence easily distinguishable from reality" #~ msgstr "Violência gráfica facilmente distinguível da realidade" #~ msgid "Depictions of realistic characters in aggressive conflict" #~ msgstr "Personagens moderadamente realistas em conflito agressivo" #~ msgid "Graphic violence involving realistic characters" #~ msgstr "Violência gráfica envolvendo personagens realistas" #~ msgid "Unrealistic bloodshed" #~ msgstr "Derrame de sangue não realista" #~ msgid "Realistic bloodshed" #~ msgstr "Derrame de sangue realista" #~ msgid "Depictions of bloodshed and the mutilation of body parts" #~ msgstr "Representações de derrame de sangue e mutilações de partes do corpo" #~ msgid "Rape or other violent sexual behavior" #~ msgstr "Violação ou outro comportamento sexual violento" #~ msgid "References to alcoholic beverages" #~ msgstr "Referência a bebidas alcoólicas" #~ msgid "Use of alcoholic beverages" #~ msgstr "Uso de bebidas alcoólicas" #~ msgid "References to illicit drugs" #~ msgstr "Referência a drogas ilícitas" #~ msgid "Use of illicit drugs" #~ msgstr "Uso de drogas ilícitas" #~ msgid "References to tobacco products" #~ msgstr "Referências a produtos com tabaco" #~ msgid "Use of tobacco products" #~ msgstr "Uso de produtos com tabaco" #~ msgid "Brief artistic nudity" #~ msgstr "Nudez artística breve" #~ msgid "Prolonged nudity" #~ msgstr "Nudez prolongada" #~ msgid "Provocative references or depictions" #~ msgstr "Referências ou representações provocatórias" #~ msgid "Sexual references or depictions" #~ msgstr "Referências ou representações sexuais" #~ msgid "Graphic sexual behavior" #~ msgstr "Comportamento sexual gráfico" #~ msgid "Mild or infrequent use of profanity" #~ msgstr "Uso ligeiro ou infrequente de profanidades" #~ msgid "Moderate use of profanity" #~ msgstr "Uso moderado de profanidades " #~ msgid "Strong or frequent use of profanity" #~ msgstr "Uso constante ou frequente de profanidades" #~ msgid "Slapstick humor" #~ msgstr "Humor brejeiro" #~ msgid "Vulgar or bathroom humor" #~ msgstr "Humor vulgar ou visceral" #~ msgid "Mature or sexual humor" #~ msgstr "Humor maduro ou sexual" #~ msgid "Negativity towards a specific group of people" #~ msgstr "Negatividade em relação a um grupo específico de pessoas" #~ msgid "Explicit discrimination based on gender, sexuality, race or religion" #~ msgstr "" #~ "Descriminação explícita baseada em género, sexualidade, raça ou religião" #~ msgid "Product placement" #~ msgstr "Colocação de produtos" #~ msgid "Explicit references to specific brands or trademarked products" #~ msgstr "Referências explícitas a determinadas marcas ou produtos registados" #~ msgid "Gambling on random events using tokens or credits" #~ msgstr "" #~ "Jogo de apostas com eventos aleatórios utilizando tokens ou créditos" #~ msgid "Gambling using real money" #~ msgstr "Jogo de apostas com dinheiro real" #~ msgid "Ability to spend real money in-game" #~ msgstr "Possibilidade de gastar dinheiro real dentro do jogo" #~ msgid "Sharing social network usernames or email addresses" #~ msgstr "" #~ "Partilha de nomes de utilizadores de redes sociais e endereços de email" #~ msgid "Sharing physical location to other users" #~ msgstr "Partilha de localizações físicas de outros utilizadores" malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/po/pt_BR.po000066400000000000000000000417301505556674000235650ustar00rootroot00000000000000# Brazilian Portuguese translation for malcontent. # Copyright © 2020-2024 malcontent's COPYRIGHT HOLDER # This file is distributed under the same license as the malcontent package. # # Rafael Fontenelle , 2020. # Matheus Polkorny , 2022, 2023, 2024. msgid "" msgstr "" "Project-Id-Version: malcontent master\n" "Report-Msgid-Bugs-To: https://gitlab.freedesktop.org/pwithnall/malcontent/" "issues\n" "POT-Creation-Date: 2020-07-18 03:28+0000\n" "PO-Revision-Date: 2024-02-27 19:47-0300\n" "Last-Translator: Matheus Polkorny \n" "Language-Team: Brazilian Portuguese \n" "Language: pt_BR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" "X-Generator: Poedit 3.4.2\n" #: accounts-service/com.endlessm.ParentalControls.policy.in:4 msgid "Change your own app filter" msgstr "Alterar seu próprio filtro de aplicativos" #: accounts-service/com.endlessm.ParentalControls.policy.in:5 msgid "Authentication is required to change your app filter." msgstr "Autenticação é necessária para alterar seu filtro de aplicativos." #: accounts-service/com.endlessm.ParentalControls.policy.in:14 msgid "Read your own app filter" msgstr "Ler seu próprio filtro de aplicativos" #: accounts-service/com.endlessm.ParentalControls.policy.in:15 msgid "Authentication is required to read your app filter." msgstr "Autenticação é necessária para ler seu filtro de aplicativos." #: accounts-service/com.endlessm.ParentalControls.policy.in:24 msgid "Change another user’s app filter" msgstr "Alterar o filtro de aplicativos de outro usuário" #: accounts-service/com.endlessm.ParentalControls.policy.in:25 msgid "Authentication is required to change another user’s app filter." msgstr "" "Autenticação é necessária para alterar o filtro de aplicativos de outro " "usuário." #: accounts-service/com.endlessm.ParentalControls.policy.in:34 msgid "Read another user’s app filter" msgstr "Ler o filtro de aplicativo de outro usuário" #: accounts-service/com.endlessm.ParentalControls.policy.in:35 msgid "Authentication is required to read another user’s app filter." msgstr "" "Autenticação é necessária para ler o filtro de aplicativos de outro usuário." #: accounts-service/com.endlessm.ParentalControls.policy.in:44 msgid "Change your own session limits" msgstr "Alterar seus próprios limites de sessão" #: accounts-service/com.endlessm.ParentalControls.policy.in:45 msgid "Authentication is required to change your session limits." msgstr "" "Autenticação é necessária para alterar seus próprios limites de sessão." #: accounts-service/com.endlessm.ParentalControls.policy.in:54 msgid "Read your own session limits" msgstr "Ler seus próprios limites de sessão" #: accounts-service/com.endlessm.ParentalControls.policy.in:55 msgid "Authentication is required to read your session limits." msgstr "Autenticação é necessária para ler seus próprios limites de sessão." #: accounts-service/com.endlessm.ParentalControls.policy.in:64 msgid "Change another user’s session limits" msgstr "Alterar os limites de sessão de outro usuário" #: accounts-service/com.endlessm.ParentalControls.policy.in:65 msgid "Authentication is required to change another user’s session limits." msgstr "" "Autenticação é necessária para alterar os limites de sessão de outro usuário." #: accounts-service/com.endlessm.ParentalControls.policy.in:74 msgid "Read another user’s session limits" msgstr "Ler os limites de sessão de outro usuário" #: accounts-service/com.endlessm.ParentalControls.policy.in:75 msgid "Authentication is required to read another user’s session limits." msgstr "" "Autenticação é necessária para ler os limites de sessão de outro usuário." #: accounts-service/com.endlessm.ParentalControls.policy.in:84 msgid "Change your own account info" msgstr "Alterar informações de sua própria conta" #: accounts-service/com.endlessm.ParentalControls.policy.in:85 msgid "Authentication is required to change your account info." msgstr "" "Autenticação é necessária para alterar informações de sua própria conta." #: accounts-service/com.endlessm.ParentalControls.policy.in:94 msgid "Read your own account info" msgstr "Ler informações de sua própria conta" #: accounts-service/com.endlessm.ParentalControls.policy.in:95 msgid "Authentication is required to read your account info." msgstr "Autenticação é necessária para ler informações de sua própria conta." #: accounts-service/com.endlessm.ParentalControls.policy.in:104 msgid "Change another user’s account info" msgstr "Alterar informações da conta de outro usuário" #: accounts-service/com.endlessm.ParentalControls.policy.in:105 msgid "Authentication is required to change another user’s account info." msgstr "" "Autenticação é necessária para alterar as informações da conta de outro " "usuário." #: accounts-service/com.endlessm.ParentalControls.policy.in:114 msgid "Read another user’s account info" msgstr "Ler informações da conta de outro usuário" #: accounts-service/com.endlessm.ParentalControls.policy.in:115 msgid "Authentication is required to read another user’s account info." msgstr "" "Autenticação é necessária para ler as informações da conta de outro usuário." #: libmalcontent/app-filter.c:694 #, c-format msgid "App filter for user %u was in an unrecognized format" msgstr "" "O filtro de aplicativos para o usuário %u estava em um formato não " "reconhecido" #: libmalcontent/app-filter.c:725 #, c-format msgid "OARS filter for user %u has an unrecognized kind ‘%s’" msgstr "O filtro OARS para o usuário %u possui um tipo não reconhecido “%s”" #: libmalcontent/manager.c:283 libmalcontent/manager.c:420 #: libmalcontent/manager.c:803 #, c-format msgid "Not allowed to query parental controls data for user %u" msgstr "" "Não é permitido consultar dados do controle parental para o usuário %u" #: libmalcontent/manager.c:288 #, c-format msgid "User %u does not exist" msgstr "O usuário %u não existe" #: libmalcontent/manager.c:296 msgid "System accounts service not available" msgstr "Serviço de contas do sistema não disponível" #: libmalcontent/manager.c:402 msgid "App filtering is globally disabled" msgstr "A filtragem de aplicativos está desabilitada globalmente" #: libmalcontent/manager.c:785 msgid "Session limits are globally disabled" msgstr "Os limites de sessão estão desabilitados globalmente" #: libmalcontent/session-limits.c:306 #, c-format msgid "Session limit for user %u was in an unrecognized format" msgstr "" "O limite de sessão para o usuário %u estava em um formato não reconhecido" #: libmalcontent/session-limits.c:328 #, c-format msgid "Session limit for user %u has an unrecognized type ‘%u’" msgstr "" "O limite de sessão para o usuário %u possui um tipo não reconhecido “%u”" #: libmalcontent/session-limits.c:346 #, c-format msgid "Session limit for user %u has invalid daily schedule %u–%u" msgstr "" "O limite de sessão para o usuário %u possui agendamento diário inválido %u–%u" #. Translators: the placeholder is a user’s full name #: libmalcontent-ui/restrict-applications-dialog.c:256 #, c-format msgid "Restrict %s from using the following installed applications." msgstr "Restringir %s de usar os seguintes aplicativos instalados." #: libmalcontent-ui/restrict-applications-dialog.ui:6 msgid "Restrict Applications" msgstr "Restringir aplicativos" #: libmalcontent-ui/restrict-applications-dialog.ui:22 msgid "Search for applications…" msgstr "Pesquisar aplicativos…" #: libmalcontent-ui/restrict-applications-selector.ui:13 msgid "No applications found to restrict." msgstr "Nenhum aplicativo encontrado para ser restringido." #. Translators: this is the full name for an unknown user account. #: libmalcontent-ui/user-controls.c:198 libmalcontent-ui/user-controls.c:209 msgid "unknown" msgstr "desconhecido" #: libmalcontent-ui/user-controls.c:303 libmalcontent-ui/user-controls.c:388 #: libmalcontent-ui/user-controls.c:641 msgid "All Ages" msgstr "Todas as idades" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:470 #, c-format msgid "" "Prevents %s from running web browsers. Limited web content may still be " "available in other applications." msgstr "" "Impede que %s execute navegadores web. O conteúdo web limitado ainda pode " "estar disponível em outros aplicativos." #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:475 #, c-format msgid "Prevents specified applications from being used by %s." msgstr "Impede aplicativos específicos de serem usados por %s." #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:480 #, c-format msgid "Prevents %s from installing applications." msgstr "Impede que %s instale aplicativos." #: libmalcontent-ui/user-controls.ui:25 msgid "Application Usage Restrictions" msgstr "Restrições de uso de aplicativo" #: libmalcontent-ui/user-controls.ui:28 msgid "Restrict _Web Browsers" msgstr "Restringir navegadores _web" #: libmalcontent-ui/user-controls.ui:51 msgid "_Restrict Applications" msgstr "_Restringir aplicativos" #: libmalcontent-ui/user-controls.ui:73 msgid "Software Installation Restrictions" msgstr "Restrições de instalação de software" #: libmalcontent-ui/user-controls.ui:77 msgid "Restrict Application _Installation" msgstr "Restringir _instalação de aplicativo" #: libmalcontent-ui/user-controls.ui:99 msgid "Application _Suitability" msgstr "A_dequação do aplicativo" #: libmalcontent-ui/user-controls.ui:102 msgid "" "Restricts browsing or installation of applications to " "applications suitable for certain ages or above." msgstr "" "Restringe a navegação ou instalação de aplicativos " "inadequados para certas idades." #. Translators: This documents the --user command line option to malcontent-control: #: malcontent-control/application.c:102 msgid "User to select in the UI" msgstr "Usuário a ser selecionado na IU" #. Translators: This is a placeholder for a command line argument value: #: malcontent-control/application.c:104 msgid "USERNAME" msgstr "NOME DE USUÁRIO" #: malcontent-control/application.c:116 msgid "— view and edit parental controls" msgstr "— visualizar e editar controle parental" #. Translators: This is the title of the main window #. Translators: the name of the application as it appears in a software center #: malcontent-control/application.c:123 malcontent-control/main.ui:17 #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:9 #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:3 msgid "Parental Controls" msgstr "Controle parental" #: malcontent-control/application.c:309 msgid "Copyright © 2019, 2020 Endless Mobile, Inc." msgstr "Copyright © 2019, 2020 Endless Mobile, Inc." #. Translators: this should be "translated" to the #. names of people who have translated Malcontent into #. this language, one per line. #: malcontent-control/application.c:314 msgid "translator-credits" msgstr "" "Rafael Fontenelle \n" "Matheus Polkorny " #. Translators: "Malcontent" is the brand name of this #. project, so should not be translated. #: malcontent-control/application.c:320 msgid "Malcontent Website" msgstr "Site do Malcontent" #: malcontent-control/application.c:340 msgid "The help contents could not be displayed" msgstr "O conteúdo de ajuda não pôde ser exibido" #: malcontent-control/application.c:388 msgid "Failed to load user data from the system" msgstr "Falha ao carregar dados do usuário do sistema" #: malcontent-control/application.c:390 msgid "Please make sure that the AccountsService is installed and enabled." msgstr "Certifique-se que o AccountsService está instalado e habilitado." #. Translators: Replace the link to commonsensemedia.org with some #. * localised guidance for parents/carers on how to set restrictions on #. * their child/caree in a responsible way which is in keeping with the #. * best practice and culture of the region. If no suitable localised #. * guidance exists, and if the default commonsensemedia.org link is not #. * suitable, please file an issue against malcontent so we can discuss #. * further! #. * https://gitlab.freedesktop.org/pwithnall/malcontent/-/issues/new #. #: malcontent-control/application.c:421 #, c-format msgid "" "It’s recommended that restrictions are set as part of an ongoing " "conversation with %s. Read guidance on what to consider." msgstr "" "É recomendável que as restrições sejam definidas como parte de uma conversa " "em andamento com %s. Para mais informações Leia as orientações." #: malcontent-control/carousel.ui:38 msgid "Previous Page" msgstr "Página anterior" #: malcontent-control/carousel.ui:57 msgid "Next Page" msgstr "Próxima página" #: malcontent-control/main.ui:87 msgid "Permission Required" msgstr "Permissão necessária" #: malcontent-control/main.ui:88 msgid "" "Permission is required to view and change user parental controls settings." msgstr "" "É necessário permissão de administrador para visualizar e alterar as " "configurações do controle parental do usuário." #: malcontent-control/main.ui:110 msgid "No Standard User Accounts" msgstr "Não há conta de usuário padrão" #: malcontent-control/main.ui:111 msgid "" "Parental controls can only be applied to standard user\n" "accounts. These can be created in the user settings." msgstr "" "O Controle Parental só pode ser aplicado para o usuário\n" "padrão. É possível criá-lo nas configurações do usuário." #: malcontent-control/main.ui:115 msgid "_User Settings" msgstr "Configurações do _Usuário" #: malcontent-control/main.ui:138 msgid "Loading…" msgstr "Carregando…" #: malcontent-control/main.ui:171 msgid "_Help" msgstr "Aj_uda" #: malcontent-control/main.ui:175 msgid "_About Parental Controls" msgstr "_Sobre o Controle parental" #. Translators: the brief summary of the application as it appears in a software center. #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:12 #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:4 msgid "Set parental controls and monitor usage by users" msgstr "Defina o controle parental e monitore o uso por usuários" #. Translators: These are the application description paragraphs in the AppData file. #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:16 msgid "" "Manage users’ parental controls restrictions, controlling how long they can " "use the computer for, what software they can install, and what installed " "software they can run." msgstr "" "Gerencie as restrições de controle parental dos usuários, controlando por " "quanto tempo eles podem usar o computador, qual software eles podem instalar " "e qual software instalado eles podem executar." #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:25 msgid "Main window" msgstr "Janela principal" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:40 msgid "The GNOME Project" msgstr "O Projeto GNOME" #. Translators: Search terms to find this application. Do NOT translate or localise the semicolons! The list MUST also end with a semicolon! #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:14 msgid "" "parental controls;screen time;app restrictions;web browser restrictions;oars;" "usage;usage limit;kid;child;" msgstr "" "controle parental;controle dos pais;parental controls;tempo de tela;screen " "time;restrições de aplicativos;app restrictions;restrições de navegador web;" "web browser restrictions;oars;uso;usage;limite de uso;usage limit;criança;" "kid;filho;filha;child;" #: malcontent-control/org.freedesktop.MalcontentControl.policy.in:9 msgid "Manage parental controls" msgstr "Gerenciar controle parental" #: malcontent-control/org.freedesktop.MalcontentControl.policy.in:10 msgid "Authentication is required to read and change user parental controls" msgstr "" "Autenticação é necessária para ler e alterar controle parental de usuários" #: malcontent-control/user-selector.c:426 msgid "Your account" msgstr "Sua conta" #. Always allow root, to avoid a situation where this PAM module prevents #. * all users logging in with no way of recovery. #: pam/pam_malcontent.c:142 pam/pam_malcontent.c:188 #, c-format msgid "User ‘%s’ has no time limits enabled" msgstr "O usuário “%s” não tem limite de tempo habilitado" #: pam/pam_malcontent.c:151 pam/pam_malcontent.c:172 #, c-format msgid "Error getting session limits for user ‘%s’: %s" msgstr "Erro ao obter limites de sessão para o usuário “%s”: %s" #: pam/pam_malcontent.c:182 #, c-format msgid "User ‘%s’ has no time remaining" msgstr "O usuário “%s” não possui tempo restante" #: pam/pam_malcontent.c:200 #, c-format msgid "Error setting time limit on login session: %s" msgstr "Erro ao definir o limite de tempo à sessão: %s" malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/po/ro.po000066400000000000000000000601371505556674000232010ustar00rootroot00000000000000# Romanian translations for malcontent package. # Copyright (C) 2020 THE malcontent'S COPYRIGHT HOLDER # This file is distributed under the same license as the malcontent package. # Automatically generated, 2020. # # Translators: # georgian balan , 2020 # msgid "" msgstr "" "Project-Id-Version: malcontent\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-06-10 12:08+0100\n" "PO-Revision-Date: 2020-04-17 21:58+0000\n" "Last-Translator: georgian balan , 2020\n" "Language-Team: Romanian (https://www.transifex.com/endless-os/teams/9016/" "ro/)\n" "Language: ro\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?" "2:1));\n" #: accounts-service/com.endlessm.ParentalControls.policy.in:4 msgid "Change your own app filter" msgstr "Modifica filtrul aplicatiei" #: accounts-service/com.endlessm.ParentalControls.policy.in:5 msgid "Authentication is required to change your app filter." msgstr "Pentru a schimba filtrul este necesara autentificarea" #: accounts-service/com.endlessm.ParentalControls.policy.in:14 msgid "Read your own app filter" msgstr "Citeste filtrul aplicatiei" #: accounts-service/com.endlessm.ParentalControls.policy.in:15 msgid "Authentication is required to read your app filter." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:24 msgid "Change another user’s app filter" msgstr "Schimba filtrul aplicatiei a altui utilizator" #: accounts-service/com.endlessm.ParentalControls.policy.in:25 msgid "Authentication is required to change another user’s app filter." msgstr "" "Pentru a schimba filrtul aplicatiei a altui utilizator,este necesara " "autentificarea." #: accounts-service/com.endlessm.ParentalControls.policy.in:34 msgid "Read another user’s app filter" msgstr "Citeste filtrul aplicatiei a altui utilizator." #: accounts-service/com.endlessm.ParentalControls.policy.in:35 msgid "Authentication is required to read another user’s app filter." msgstr "" "Pentru a citi filtrul aplicatiei a altui utilizator,este necesara " "autentificarea." #: accounts-service/com.endlessm.ParentalControls.policy.in:44 msgid "Change your own session limits" msgstr "Modifica limita de sesiune personala." #: accounts-service/com.endlessm.ParentalControls.policy.in:45 msgid "Authentication is required to change your session limits." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:54 msgid "Read your own session limits" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:55 msgid "Authentication is required to read your session limits." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:64 msgid "Change another user’s session limits" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:65 msgid "Authentication is required to change another user’s session limits." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:74 msgid "Read another user’s session limits" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:75 msgid "Authentication is required to read another user’s session limits." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:84 msgid "Change your own account info" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:85 msgid "Authentication is required to change your account info." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:94 msgid "Read your own account info" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:95 msgid "Authentication is required to read your account info." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:104 msgid "Change another user’s account info" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:105 msgid "Authentication is required to change another user’s account info." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:114 msgid "Read another user’s account info" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:115 msgid "Authentication is required to read another user’s account info." msgstr "" #: libmalcontent/app-filter.c:694 #, c-format msgid "App filter for user %u was in an unrecognized format" msgstr "" #: libmalcontent/app-filter.c:725 #, c-format msgid "OARS filter for user %u has an unrecognized kind ‘%s’" msgstr "" #: libmalcontent/manager.c:283 libmalcontent/manager.c:412 #, c-format msgid "Not allowed to query app filter data for user %u" msgstr "" #: libmalcontent/manager.c:288 #, c-format msgid "User %u does not exist" msgstr "" #: libmalcontent/manager.c:394 msgid "App filtering is globally disabled" msgstr "" #: libmalcontent/manager.c:777 msgid "Session limits are globally disabled" msgstr "" #: libmalcontent/manager.c:795 #, c-format msgid "Not allowed to query session limits data for user %u" msgstr "" #: libmalcontent/session-limits.c:306 #, c-format msgid "Session limit for user %u was in an unrecognized format" msgstr "" #: libmalcontent/session-limits.c:328 #, c-format msgid "Session limit for user %u has an unrecognized type ‘%u’" msgstr "" #: libmalcontent/session-limits.c:346 #, c-format msgid "Session limit for user %u has invalid daily schedule %u–%u" msgstr "" #. TRANSLATORS: This is the formatting of English and localized name #. of the rating e.g. "Adults Only (solo adultos)" #: libmalcontent-ui/gs-content-rating.c:75 #, c-format msgid "%s (%s)" msgstr "" #: libmalcontent-ui/gs-content-rating.c:209 msgid "General" msgstr "" #: libmalcontent-ui/gs-content-rating.c:218 msgid "ALL" msgstr "" #: libmalcontent-ui/gs-content-rating.c:222 #: libmalcontent-ui/gs-content-rating.c:485 msgid "Adults Only" msgstr "" #: libmalcontent-ui/gs-content-rating.c:224 #: libmalcontent-ui/gs-content-rating.c:484 msgid "Mature" msgstr "" #: libmalcontent-ui/gs-content-rating.c:226 #: libmalcontent-ui/gs-content-rating.c:483 msgid "Teen" msgstr "" #: libmalcontent-ui/gs-content-rating.c:228 #: libmalcontent-ui/gs-content-rating.c:482 msgid "Everyone 10+" msgstr "" #: libmalcontent-ui/gs-content-rating.c:230 #: libmalcontent-ui/gs-content-rating.c:481 msgid "Everyone" msgstr "" #: libmalcontent-ui/gs-content-rating.c:232 #: libmalcontent-ui/gs-content-rating.c:480 msgid "Early Childhood" msgstr "" #. Translators: the placeholder is a user’s full name #: libmalcontent-ui/restrict-applications-dialog.c:222 #, c-format msgid "Restrict %s from using the following installed applications." msgstr "" #: libmalcontent-ui/restrict-applications-dialog.ui:6 #: libmalcontent-ui/restrict-applications-dialog.ui:12 msgid "Restrict Applications" msgstr "" #: libmalcontent-ui/restrict-applications-selector.ui:24 msgid "No applications found to restrict." msgstr "" #. Translators: this is the full name for an unknown user account. #: libmalcontent-ui/user-controls.c:242 libmalcontent-ui/user-controls.c:253 msgid "unknown" msgstr "" #: libmalcontent-ui/user-controls.c:338 libmalcontent-ui/user-controls.c:425 #: libmalcontent-ui/user-controls.c:711 msgid "All Ages" msgstr "" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:514 #, c-format msgid "" "Prevents %s from running web browsers. Limited web content may still be " "available in other applications." msgstr "" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:519 #, c-format msgid "Prevents specified applications from being used by %s." msgstr "" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:524 #, c-format msgid "Prevents %s from installing applications." msgstr "" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:529 #, c-format msgid "Applications installed by %s will not appear for other users." msgstr "" #: libmalcontent-ui/user-controls.ui:17 msgid "Application Usage Restrictions" msgstr "" #: libmalcontent-ui/user-controls.ui:68 msgid "Restrict _Web Browsers" msgstr "" #: libmalcontent-ui/user-controls.ui:152 msgid "_Restrict Applications" msgstr "" #: libmalcontent-ui/user-controls.ui:231 msgid "Software Installation Restrictions" msgstr "" #: libmalcontent-ui/user-controls.ui:281 msgid "Restrict Application _Installation" msgstr "" #: libmalcontent-ui/user-controls.ui:366 msgid "Restrict Application Installation for _Others" msgstr "" #: libmalcontent-ui/user-controls.ui:451 msgid "Application _Suitability" msgstr "" #: libmalcontent-ui/user-controls.ui:473 msgid "" "Restricts browsing or installation of applications to applications suitable " "for certain ages or above." msgstr "" #. Translators: This is the title of the main window #. Translators: the name of the application as it appears in a software center #: malcontent-control/application.c:105 malcontent-control/main.ui:12 #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:9 #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:3 msgid "Parental Controls" msgstr "" #: malcontent-control/application.c:270 msgid "Copyright © 2019, 2020 Endless Mobile, Inc." msgstr "" #. Translators: this should be "translated" to the #. names of people who have translated Malcontent into #. this language, one per line. #: malcontent-control/application.c:275 msgid "translator-credits" msgstr "" #. Translators: "Malcontent" is the brand name of this #. project, so should not be translated. #: malcontent-control/application.c:281 msgid "Malcontent Website" msgstr "" #: malcontent-control/application.c:299 msgid "The help contents could not be displayed" msgstr "" #: malcontent-control/application.c:336 msgid "Failed to load user data from the system" msgstr "" #: malcontent-control/application.c:338 msgid "Please make sure that the AccountsService is installed and enabled." msgstr "" #: malcontent-control/carousel.ui:48 msgid "Previous Page" msgstr "" #: malcontent-control/carousel.ui:74 msgid "Next Page" msgstr "" #: malcontent-control/main.ui:93 msgid "Permission Required" msgstr "" #: malcontent-control/main.ui:107 msgid "" "Permission is required to view and change user parental controls settings." msgstr "" #: malcontent-control/main.ui:148 msgid "No Child Users Configured" msgstr "" #: malcontent-control/main.ui:162 msgid "" "No child users are currently set up on the system. Create one before setting " "up their parental controls." msgstr "" #: malcontent-control/main.ui:174 msgid "Create _Child User" msgstr "" #: malcontent-control/main.ui:202 msgid "Loading…" msgstr "" #: malcontent-control/main.ui:265 msgid "_Help" msgstr "A_jutor" #: malcontent-control/main.ui:269 msgid "_About Parental Controls" msgstr "" #. Translators: the brief summary of the application as it appears in a software center. #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:12 #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:4 msgid "Set parental controls and monitor usage by users" msgstr "" #. Translators: These are the application description paragraphs in the AppData file. #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:16 msgid "" "Manage users’ parental controls restrictions, controlling how long they can " "use the computer for, what software they can install, and what installed " "software they can run." msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:39 msgid "The GNOME Project" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:50 #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:59 msgid "Minor improvements to parental controls application UI" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:51 msgid "Add a user manual" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:52 msgid "Translation updates" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:60 msgid "Translations to Ukrainian and Polish" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:67 msgid "Improve parental controls application UI and add icon" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:68 msgid "Support for indicating which accounts are parent accounts" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:75 msgid "Initial release of basic parental controls application" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:76 msgid "Support for setting app installation and run restrictions on users" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:83 msgid "Maintenance release of underlying parental controls library" msgstr "" #. Translators: Do NOT translate or transliterate this text (this is an icon file name)! #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:7 msgid "org.freedesktop.MalcontentControl" msgstr "" #. Translators: Search terms to find this application. Do NOT translate or localise the semicolons! The list MUST also end with a semicolon! #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:13 msgid "" "parental controls;screen time;app restrictions;web browser restrictions;oars;" "usage;usage limit;kid;child;" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.policy.in:9 msgid "Manage parental controls" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.policy.in:10 msgid "Authentication is required to read and change user parental controls" msgstr "" #: malcontent-control/user-selector.c:426 msgid "Your account" msgstr "Contul tău" #. Always allow root, to avoid a situation where this PAM module prevents #. * all users logging in with no way of recovery. #: pam/pam_malcontent.c:142 pam/pam_malcontent.c:188 #, c-format msgid "User ‘%s’ has no time limits enabled" msgstr "" #: pam/pam_malcontent.c:151 pam/pam_malcontent.c:172 #, c-format msgid "Error getting session limits for user ‘%s’: %s" msgstr "" #: pam/pam_malcontent.c:182 #, c-format msgid "User ‘%s’ has no time remaining" msgstr "" #: pam/pam_malcontent.c:200 #, c-format msgid "Error setting time limit on login session: %s" msgstr "" #~ msgid "No cartoon violence" #~ msgstr "Fără violență animată" #~ msgid "Cartoon characters in unsafe situations" #~ msgstr "Caractere animate în siutații nesigure" #~ msgid "Cartoon characters in aggressive conflict" #~ msgstr "Caractere animate în conflict agresiv" #~ msgid "Graphic violence involving cartoon characters" #~ msgstr "Violență grafică incluzând caractere animate" #~ msgid "No fantasy violence" #~ msgstr "Fără violență fantastică" #~ msgid "Characters in unsafe situations easily distinguishable from reality" #~ msgstr "Caractere în situații nesigure recunoscute ușor din realitate" #~ msgid "" #~ "Characters in aggressive conflict easily distinguishable from reality" #~ msgstr "Caractere în conflict agresiv recunoscute ușor din realitate" #~ msgid "Graphic violence easily distinguishable from reality" #~ msgstr "Violență grafică recunoscută ușor din realitate" #~ msgid "No realistic violence" #~ msgstr "Fără violență reală" #~ msgid "Mildly realistic characters in unsafe situations" #~ msgstr "Caractere realistice moderate în situații nesigure" #~ msgid "Depictions of realistic characters in aggressive conflict" #~ msgstr "Descrieri ale unor caractere realistice în conflict agresiv" #~ msgid "Graphic violence involving realistic characters" #~ msgstr "Violență grafică incluzând caractere realistice" #~ msgid "No bloodshed" #~ msgstr "Fără vărsare de sânge" #~ msgid "Unrealistic bloodshed" #~ msgstr "Vărsare de sânge nerealistică" #~ msgid "Realistic bloodshed" #~ msgstr "Vărsare de sânge realistică" #~ msgid "Depictions of bloodshed and the mutilation of body parts" #~ msgstr "Descrieri de vărsare de sânge și mutilarea părților de corp" #~ msgid "No sexual violence" #~ msgstr "Fără violență sexuală" #~ msgid "Rape or other violent sexual behavior" #~ msgstr "Viol sau alt comportament sexual" #~ msgid "No references to alcohol" #~ msgstr "Fără referințe la băuturi alcoolice" #~ msgid "References to alcoholic beverages" #~ msgstr "Referințe la băuturi alcoolice" #~ msgid "Use of alcoholic beverages" #~ msgstr "Uz de băuturi alcoolice" #~ msgid "No references to illicit drugs" #~ msgstr "Fără referințe la droguri ilegale" #~ msgid "References to illicit drugs" #~ msgstr "Referințe la droguri ilegale" #~ msgid "Use of illicit drugs" #~ msgstr "Uz de droguri ilegale" #~ msgid "References to tobacco products" #~ msgstr "Referințe la produse de tutun" #~ msgid "Use of tobacco products" #~ msgstr "Uz de produse de tutun" #~ msgid "No nudity of any sort" #~ msgstr "Fără nuditate de orice tip" #~ msgid "Brief artistic nudity" #~ msgstr "Scurtă nuditate artistică" #~ msgid "Prolonged nudity" #~ msgstr "Nuditate prelungită" #~ msgid "No references or depictions of sexual nature" #~ msgstr "Fără referințe sau descrieri de natură sexuală" #~ msgid "Provocative references or depictions" #~ msgstr "Referințe sau descrieri provocative" #~ msgid "Sexual references or depictions" #~ msgstr "Referințe sexuale sau descrieri" #~ msgid "Graphic sexual behavior" #~ msgstr "Comportament sexual grafic" #~ msgid "No profanity of any kind" #~ msgstr "Fără profanitate de orice tip" #~ msgid "Mild or infrequent use of profanity" #~ msgstr "Uz moderat sau nefrecvent de obscenitate" #~ msgid "Moderate use of profanity" #~ msgstr "Uz moderat de obscenitate" #~ msgid "Strong or frequent use of profanity" #~ msgstr "Uz puternic sau frecvent de obscenitate" #~ msgid "No inappropriate humor" #~ msgstr "Fără umor inapropriat" #~ msgid "Slapstick humor" #~ msgstr "Umor ieftin" #~ msgid "Vulgar or bathroom humor" #~ msgstr "Umor vulgar" #~ msgid "Mature or sexual humor" #~ msgstr "Umor pentru adulți sau sexual" #~ msgid "No discriminatory language of any kind" #~ msgstr "Fără limbaj discriminator de orice tip" #~ msgid "Negativity towards a specific group of people" #~ msgstr "Negativitate referitor la un grup specific de oameni" #~ msgid "Discrimination designed to cause emotional harm" #~ msgstr "Discriminare destinată să cauzeze ofensă emoțională" #~ msgid "Explicit discrimination based on gender, sexuality, race or religion" #~ msgstr "Discriminare explicită bazată pe sex, sexualitate, rasă sau religie" #~ msgid "No advertising of any kind" #~ msgstr "Fără reclame de orice tip" #~ msgid "Product placement" #~ msgstr "Plasarea de produse" #~ msgid "Explicit references to specific brands or trademarked products" #~ msgstr "" #~ "Referințe explicite la mărci specifice sau produse de mărci înregistrate" #~ msgid "Users are encouraged to purchase specific real-world items" #~ msgstr "" #~ "Utilizatorii sunt încurajați să cumpere obiecte specifice din lumea reală" #~ msgid "No gambling of any kind" #~ msgstr "Fără jocuri de noroc de orice tip" #~ msgid "Gambling on random events using tokens or credits" #~ msgstr "" #~ "Jocuri de noroc la evenimente aleatorii folosind jetoane sau credite" #~ msgid "Gambling using “play” money" #~ msgstr "Jocuri de noroc folosind bani virtuali" #~ msgid "Gambling using real money" #~ msgstr "Jocuri de noroc folosind bani adevărați" #~ msgid "No ability to spend money" #~ msgstr "Fără abilitatea de a cheltui bani" #~ msgid "Users are encouraged to donate real money" #~ msgstr "Utilizatorii sunt încurajați să doneze bani adevărați" #~ msgid "Ability to spend real money in-game" #~ msgstr "Abilitatea de a cheltui bani reali în joc" #~ msgid "No way to chat with other users" #~ msgstr "Fără abilitatea de a discuta cu alți utilizatori" #~ msgid "User-to-user game interactions without chat functionality" #~ msgstr "Interacțiuni utilizator-la-utilizator fără funcționalitate de chat" #~ msgid "Moderated chat functionality between users" #~ msgstr "Funcționalitate de chat moderat între utilizatori" #~ msgid "Uncontrolled chat functionality between users" #~ msgstr "Funcționalitate de chat necontrolat între utilizatori" #~ msgid "No way to talk with other users" #~ msgstr "Fără abilitatea de a vorbi cu alți utilizatori" #~ msgid "Uncontrolled audio or video chat functionality between users" #~ msgstr "" #~ "Funcționalitate de chat necontrolat audio sau video între utilizatori" #~ msgid "No sharing of social network usernames or email addresses" #~ msgstr "" #~ "Fără partajare de nume de utilizatori de rețele sociale sau adrese de " #~ "email" #~ msgid "Sharing social network usernames or email addresses" #~ msgstr "" #~ "Partajare de nume de utilizatori de rețele sociale sau adrese de email" #~ msgid "No sharing of user information with 3rd parties" #~ msgstr "Fără partajare de informații despre utilizatori cu părți terțe" #~ msgid "Checking for the latest application version" #~ msgstr "Verificare după ultima versiune de aplicație" #~ msgid "Sharing diagnostic data that does not let others identify the user" #~ msgstr "" #~ "Partajare de date diagnostice care nu permit altora identificarea " #~ "utilizatorului" #~ msgid "Sharing information that lets others identify the user" #~ msgstr "" #~ "Partajare de informații care permit altora identificarea utilizatorului" #~ msgid "No sharing of physical location to other users" #~ msgstr "Fără partajarea locației fizice cu alți utilizatori" #~ msgid "Sharing physical location to other users" #~ msgstr "Partajarea locației fizice cu alți utilizatori" #~ msgid "No references to homosexuality" #~ msgstr "Fără referințe la homosexualitate" #~ msgid "Indirect references to homosexuality" #~ msgstr "Referințe indirecte la homosexualitate" #~ msgid "Kissing between people of the same gender" #~ msgstr "Sărutarea între oameni de același sex" #~ msgid "Graphic sexual behavior between people of the same gender" #~ msgstr "Comportament sexual grafic între oameni de același sex" #~ msgid "No references to prostitution" #~ msgstr "Fără referințe la prostituție" #~ msgid "Indirect references to prostitution" #~ msgstr "Referințe indirecte la prostituție" #~ msgid "Direct references to prostitution" #~ msgstr "Referințe directe la prostituție" #~ msgid "Graphic depictions of the act of prostitution" #~ msgstr "Descrieri grafice ale actului de prostituție" #~ msgid "No references to adultery" #~ msgstr "Fără referințe la adulter" #~ msgid "Indirect references to adultery" #~ msgstr "Referințe indirecte la adulter" #~ msgid "Direct references to adultery" #~ msgstr "Referințe directe de adulter" #~ msgid "Graphic depictions of the act of adultery" #~ msgstr "Descrieri grafice ale actului de adulter" #~ msgid "No sexualized characters" #~ msgstr "Fără caractere sexuale" #~ msgid "Scantily clad human characters" #~ msgstr "Caractere umane îmbrăcate sumar" #~ msgid "Overtly sexualized human characters" #~ msgstr "Caractere umane sexualizate deschis" #~ msgid "No references to desecration" #~ msgstr "Fără referințe la profanare" #~ msgid "Depictions or references to historical desecration" #~ msgstr "Depictări sau referințe la profanare istorică" #~ msgid "Depictions of modern-day human desecration" #~ msgstr "Descrieri de profanare umană modernă" #~ msgid "Graphic depictions of modern-day desecration" #~ msgstr "Descrieri grafice de profanare modernă" #~ msgid "No visible dead human remains" #~ msgstr "Fără rămășițe umane vizibile" #~ msgid "Visible dead human remains" #~ msgstr "Rămășițe umane vizibile" #~ msgid "Dead human remains that are exposed to the elements" #~ msgstr "Rămășițe umane are expuse elementelor" #~ msgid "Graphic depictions of desecration of human bodies" #~ msgstr "Descrieri grafice ale profanării corpurilor umane" #~ msgid "No references to slavery" #~ msgstr "Fără referințe la sclavagism" #~ msgid "Depictions or references to historical slavery" #~ msgstr "Depictări sau referințe la sclavagismul istoric" #~ msgid "Depictions of modern-day slavery" #~ msgstr "Descrieri ale sclavagismului modern" #~ msgid "Graphic depictions of modern-day slavery" #~ msgstr "Descrieri grafice ale sclavagismului modern" malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/po/ru.po000066400000000000000000001041431505556674000232030ustar00rootroot00000000000000# Russian translations for malcontent package. # Copyright (C) 2020 THE malcontent'S COPYRIGHT HOLDER # This file is distributed under the same license as the malcontent package. # Automatically generated, 2020. # msgid "" msgstr "" "Project-Id-Version: malcontent\n" "Report-Msgid-Bugs-To: https://gitlab.freedesktop.org/pwithnall/malcontent/" "issues\n" "POT-Creation-Date: 2023-10-13 16:18+0000\n" "PO-Revision-Date: 2023-10-29 01:03+1000\n" "Last-Translator: Ser82-png \n" "Language-Team: none\n" "Language: ru\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" "X-Generator: Poedit 3.0.1\n" #: accounts-service/com.endlessm.ParentalControls.policy.in:4 msgid "Change your own app filter" msgstr "Изменение собственного фильтра приложений" #: accounts-service/com.endlessm.ParentalControls.policy.in:5 msgid "Authentication is required to change your app filter." msgstr "Для изменения своего фильтра приложений требуется идентификация." #: accounts-service/com.endlessm.ParentalControls.policy.in:14 msgid "Read your own app filter" msgstr "Чтение собственного фильтра приложений" #: accounts-service/com.endlessm.ParentalControls.policy.in:15 msgid "Authentication is required to read your app filter." msgstr "Для чтения своего фильтра приложений требуется идентификация." #: accounts-service/com.endlessm.ParentalControls.policy.in:24 msgid "Change another user’s app filter" msgstr "Изменение фильтра приложений другого пользователя" #: accounts-service/com.endlessm.ParentalControls.policy.in:25 msgid "Authentication is required to change another user’s app filter." msgstr "" "Для изменения фильтра приложений другого пользователя требуется " "идентификация." #: accounts-service/com.endlessm.ParentalControls.policy.in:34 msgid "Read another user’s app filter" msgstr "Чтение фильтра приложений другого пользователя" #: accounts-service/com.endlessm.ParentalControls.policy.in:35 msgid "Authentication is required to read another user’s app filter." msgstr "" "Для чтения фильтра приложений другого пользователя требуется идентификация." #: accounts-service/com.endlessm.ParentalControls.policy.in:44 msgid "Change your own session limits" msgstr "Изменение ограничений собственного сеанса" #: accounts-service/com.endlessm.ParentalControls.policy.in:45 msgid "Authentication is required to change your session limits." msgstr "Для изменения ограничений собственного сеанса требуется идентификация." #: accounts-service/com.endlessm.ParentalControls.policy.in:54 msgid "Read your own session limits" msgstr "Чтение ограничений собственного сеанса" #: accounts-service/com.endlessm.ParentalControls.policy.in:55 msgid "Authentication is required to read your session limits." msgstr "Для чтения ограничений собственного сеанса требуется идентификация." #: accounts-service/com.endlessm.ParentalControls.policy.in:64 msgid "Change another user’s session limits" msgstr "Изменение ограничений сеанса другого пользователя" #: accounts-service/com.endlessm.ParentalControls.policy.in:65 msgid "Authentication is required to change another user’s session limits." msgstr "" "Для изменения ограничений сеанса другого пользователя требуется " "идентификация." #: accounts-service/com.endlessm.ParentalControls.policy.in:74 msgid "Read another user’s session limits" msgstr "Чтение ограничений сеанса другого пользователя" #: accounts-service/com.endlessm.ParentalControls.policy.in:75 msgid "Authentication is required to read another user’s session limits." msgstr "" "Для чтения ограничений сеанса другого пользователя требуется идентификация." #: accounts-service/com.endlessm.ParentalControls.policy.in:84 msgid "Change your own account info" msgstr "Изменение данных своей учётной записи" #: accounts-service/com.endlessm.ParentalControls.policy.in:85 msgid "Authentication is required to change your account info." msgstr "Для изменения данных своей учётной записи требуется идентификация." #: accounts-service/com.endlessm.ParentalControls.policy.in:94 msgid "Read your own account info" msgstr "Чтение данных своей учётной записи" #: accounts-service/com.endlessm.ParentalControls.policy.in:95 msgid "Authentication is required to read your account info." msgstr "Для чтения данных своей учётной записи требуется идентификация." #: accounts-service/com.endlessm.ParentalControls.policy.in:104 msgid "Change another user’s account info" msgstr "Изменение данных учётной записи другого пользователя" #: accounts-service/com.endlessm.ParentalControls.policy.in:105 msgid "Authentication is required to change another user’s account info." msgstr "" "Для изменения данных учётной записи другого пользователя требуется " "идентификация." #: accounts-service/com.endlessm.ParentalControls.policy.in:114 msgid "Read another user’s account info" msgstr "Чтение данных учётной записи другого пользователя" #: accounts-service/com.endlessm.ParentalControls.policy.in:115 msgid "Authentication is required to read another user’s account info." msgstr "" "Для чтения данных учётной записи другого пользователя требуется " "идентификация." #: libmalcontent/app-filter.c:694 #, c-format msgid "App filter for user %u was in an unrecognized format" msgstr "Фильтр приложений для пользователя %u записан в неизвестном формате" #: libmalcontent/app-filter.c:725 #, c-format msgid "OARS filter for user %u has an unrecognized kind ‘%s’" msgstr "Фильтр OARS для пользователя %u имеет неизвестный тип «%s»" #: libmalcontent/manager.c:283 libmalcontent/manager.c:420 #: libmalcontent/manager.c:803 #, c-format msgid "Not allowed to query parental controls data for user %u" msgstr "" "Запрещено запрашивать данные родительского контроля для пользователя %u" #: libmalcontent/manager.c:288 #, c-format msgid "User %u does not exist" msgstr "Пользователь %u не существует" #: libmalcontent/manager.c:296 msgid "System accounts service not available" msgstr "Служба системных учётных записей недоступна" #: libmalcontent/manager.c:402 msgid "App filtering is globally disabled" msgstr "Фильтрация приложений отключена глобально" #: libmalcontent/manager.c:785 msgid "Session limits are globally disabled" msgstr "Ограничения сеанса отключены глобально" #: libmalcontent/session-limits.c:306 #, c-format msgid "Session limit for user %u was in an unrecognized format" msgstr "Ограничение сеанса для пользователя %u записаны в неизвестном формате" #: libmalcontent/session-limits.c:328 #, c-format msgid "Session limit for user %u has an unrecognized type ‘%u’" msgstr "Ограничение сеанса для пользователя %u имеет неизвестный тип «%u»" #: libmalcontent/session-limits.c:346 #, c-format msgid "Session limit for user %u has invalid daily schedule %u–%u" msgstr "" "Ограничение сеанса для пользователя %u имеет недопустимое ежедневное " "расписание %u–%u" #. Translators: the placeholder is a user’s full name #: libmalcontent-ui/restrict-applications-dialog.c:256 #, c-format msgid "Restrict %s from using the following installed applications." msgstr "Запретить %s использовать следующие установленные приложения." #: libmalcontent-ui/restrict-applications-dialog.ui:6 msgid "Restrict Applications" msgstr "Ограничение доступа к приложениям" #: libmalcontent-ui/restrict-applications-dialog.ui:22 msgid "Search for applications…" msgstr "Поиск приложений…" #: libmalcontent-ui/restrict-applications-selector.ui:13 msgid "No applications found to restrict." msgstr "Не найдено приложений, доступ к которым ограничен." #. Translators: this is the full name for an unknown user account. #: libmalcontent-ui/user-controls.c:198 libmalcontent-ui/user-controls.c:209 msgid "unknown" msgstr "неизвестный" #: libmalcontent-ui/user-controls.c:303 libmalcontent-ui/user-controls.c:388 #: libmalcontent-ui/user-controls.c:641 msgid "All Ages" msgstr "Все возрастные группы" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:470 #, c-format msgid "" "Prevents %s from running web browsers. Limited web content may still be " "available in other applications." msgstr "" "Запретить %s запускать веб-браузеры. Ограниченный веб-контент может быть " "доступен в других приложениях." #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:475 #, c-format msgid "Prevents specified applications from being used by %s." msgstr "Запретить %s использование указанных приложений." #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:480 #, c-format msgid "Prevents %s from installing applications." msgstr "Запретить %s устанавливать приложения." #: libmalcontent-ui/user-controls.ui:25 msgid "Application Usage Restrictions" msgstr "Ограничения на использование приложений" #: libmalcontent-ui/user-controls.ui:28 msgid "Restrict _Web Browsers" msgstr "Ограничить доступ к _Веб-браузерам" #: libmalcontent-ui/user-controls.ui:51 msgid "_Restrict Applications" msgstr "_Ограничить доступ к приложениям" #: libmalcontent-ui/user-controls.ui:73 msgid "Software Installation Restrictions" msgstr "Ограничения на установку программного обеспечения" #: libmalcontent-ui/user-controls.ui:77 msgid "Restrict Application _Installation" msgstr "Ограничить _установку приложений" #: libmalcontent-ui/user-controls.ui:99 msgid "Application _Suitability" msgstr "_Пригодность приложений" #: libmalcontent-ui/user-controls.ui:102 msgid "" "Restricts the browsing or installation of applications unsuitable for this " "age or younger." msgstr "" "Ограничить просмотр или установку приложений неподходящих для этой " "возрастной группы." #. Translators: This documents the --user command line option to malcontent-control: #: malcontent-control/application.c:102 msgid "User to select in the UI" msgstr "Пользователь для выбора в пользовательском интерфейсе" #. Translators: This is a placeholder for a command line argument value: #: malcontent-control/application.c:104 msgid "USERNAME" msgstr "ПОЛЬЗОВАТЕЛЬ" #: malcontent-control/application.c:116 msgid "— view and edit parental controls" msgstr "— просмотр и редактирование родительского контроя" #. Translators: This is the title of the main window #. Translators: the name of the application as it appears in a software center #: malcontent-control/application.c:123 malcontent-control/main.ui:17 #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:9 #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:3 msgid "Parental Controls" msgstr "Родительский контроль" #: malcontent-control/application.c:309 msgid "Copyright © 2019, 2020 Endless Mobile, Inc." msgstr "Copyright © 2019, 2020 Endless Mobile, Inc." #. Translators: this should be "translated" to the #. names of people who have translated Malcontent into #. this language, one per line. #: malcontent-control/application.c:314 msgid "translator-credits" msgstr "Ser82-png , 2022-2023" #. Translators: "Malcontent" is the brand name of this #. project, so should not be translated. #: malcontent-control/application.c:320 msgid "Malcontent Website" msgstr "Веб-сайт Malcontent" #: malcontent-control/application.c:341 msgid "The help contents could not be displayed" msgstr "Содержание справки не может быть отображено" #: malcontent-control/application.c:388 msgid "Failed to load user data from the system" msgstr "Не удалось загрузить пользовательские данные из системы" #: malcontent-control/application.c:390 msgid "Please make sure that the AccountsService is installed and enabled." msgstr "Убедитесь, что служба AccountsService установлена и включена." #. Translators: Replace the link to commonsensemedia.org with some #. * localised guidance for parents/carers on how to set restrictions on #. * their child/caree in a responsible way which is in keeping with the #. * best practice and culture of the region. If no suitable localised #. * guidance exists, and if the default commonsensemedia.org link is not #. * suitable, please file an issue against malcontent so we can discuss #. * further! #. * https://gitlab.freedesktop.org/pwithnall/malcontent/-/issues/new #. #: malcontent-control/application.c:421 #, c-format msgid "" "It’s recommended that restrictions are set as part of an ongoing " "conversation with %s. Read guidance on what to consider." msgstr "" "Рекомендуется устанавливать эти ограничения как дополнение к беседе с %s. Ознакомьтесь с инструкцией о том, что нужно учитывать." #: malcontent-control/carousel.ui:38 msgid "Previous Page" msgstr "Предыдущая страница" #: malcontent-control/carousel.ui:57 msgid "Next Page" msgstr "Следующая страница" #: malcontent-control/main.ui:87 msgid "Permission Required" msgstr "Требуется разрешение" #: malcontent-control/main.ui:88 msgid "" "Permission is required to view and change user parental controls settings." msgstr "" "Требуется разрешение для просмотра и изменения настроек родительского " "контроля пользователя." #: malcontent-control/main.ui:110 msgid "No Standard User Accounts" msgstr "Нет обычных учётных записей пользователей" #: malcontent-control/main.ui:111 msgid "" "Parental controls can only be applied to standard user\n" "accounts. These can be created in the user settings." msgstr "" "Родительский контроль может быть применен только к обычным учётным\n" "записям пользователей. Такие записи можно создать в настройках пользователя." #: malcontent-control/main.ui:115 msgid "_User Settings" msgstr "Настройки _пользователя" #: malcontent-control/main.ui:138 msgid "Loading…" msgstr "Загрузка…" #: malcontent-control/main.ui:171 msgid "_Help" msgstr "_Справка" #: malcontent-control/main.ui:175 msgid "_About Parental Controls" msgstr "_О родительском контроле" #. Translators: the brief summary of the application as it appears in a software center. #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:12 #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:4 msgid "Set parental controls and monitor usage by users" msgstr "" "Создание родительского контроля и управление использованием компьютера для " "каждого пользователя" #. Translators: These are the application description paragraphs in the AppData file. #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:16 msgid "" "Manage users’ parental controls restrictions, controlling how long they can " "use the computer for, what software they can install, and what installed " "software they can run." msgstr "" "Управление ограничениями родительского контроля, позволяет контролировать " "время использования компьютера, какое программное обеспечение вы можете " "установить и какое уже установленное программное обеспечение разрешено " "запускать." #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:25 msgid "Main window" msgstr "Главное окно" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:39 msgid "The GNOME Project" msgstr "Проект GNOME" #. Translators: Search terms to find this application. Do NOT translate or localise the semicolons! The list MUST also end with a semicolon! #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:14 msgid "" "parental controls;screen time;app restrictions;web browser restrictions;oars;" "usage;usage limit;kid;child;" msgstr "" "parental controls;screen time;app restrictions;web browser restrictions;oars;" "usage;usage limit;kid;child;родительский контроль;ребенок;ограничение;" #: malcontent-control/org.freedesktop.MalcontentControl.policy.in:9 msgid "Manage parental controls" msgstr "Управление родительским контролем" #: malcontent-control/org.freedesktop.MalcontentControl.policy.in:10 msgid "Authentication is required to read and change user parental controls" msgstr "" "Для просмотра и внесения изменений в родительский контроль пользователя " "требуется идентификация" #: malcontent-control/user-selector.c:426 msgid "Your account" msgstr "Ваша учётная запись" #. Always allow root, to avoid a situation where this PAM module prevents #. * all users logging in with no way of recovery. #: pam/pam_malcontent.c:142 pam/pam_malcontent.c:188 #, c-format msgid "User ‘%s’ has no time limits enabled" msgstr "Пользователь «%s» не имеет ограничений по времени" #: pam/pam_malcontent.c:151 pam/pam_malcontent.c:172 #, c-format msgid "Error getting session limits for user ‘%s’: %s" msgstr "" "Ошибка при попытке получить данные об ограничениях сеанса пользователя «%s»: " "%s" #: pam/pam_malcontent.c:182 #, c-format msgid "User ‘%s’ has no time remaining" msgstr "У пользователя «%s» не осталось времени" #: pam/pam_malcontent.c:200 #, c-format msgid "Error setting time limit on login session: %s" msgstr "Ошибка установки ограничения времени на сеанс входа в систему: %s" #, c-format #~ msgid "%s (%s)" #~ msgstr "%s (%s)" #~ msgid "General" #~ msgstr "Общие" #~ msgid "ALL" #~ msgstr "ВСЕ" #~ msgid "Adults Only" #~ msgstr "Только для взрослых" #~ msgid "Mature" #~ msgstr "Для повзрослевшых" #~ msgid "Teen" #~ msgstr "Для подростков" #~ msgid "Everyone 10+" #~ msgstr "Для всех старше 10" #~ msgid "Everyone" #~ msgstr "Для всех" #~ msgid "Early Childhood" #~ msgstr "Для маленьких" #~ msgid "No cartoon violence" #~ msgstr "Отсутствуют сцены мультипликационного насилия" #~ msgid "Cartoon characters in unsafe situations" #~ msgstr "Мультипликационные персонажи в опасных ситуациях" #~ msgid "Cartoon characters in aggressive conflict" #~ msgstr "Мультипликационные персонажи в агрессивных конфликтах" #~ msgid "Graphic violence involving cartoon characters" #~ msgstr "Насилие в отношении мультипликационных персонажей" #~ msgid "No fantasy violence" #~ msgstr "Отсутствуют сцены фэнтезийного насилия" #~ msgid "Characters in unsafe situations easily distinguishable from reality" #~ msgstr "Персонажи в опасных ситуациях легко отличимых от реальности" #~ msgid "" #~ "Characters in aggressive conflict easily distinguishable from reality" #~ msgstr "Персонажи в агрессивных конфликтах легко отличимых от реальности" #~ msgid "Graphic violence easily distinguishable from reality" #~ msgstr "Насилие легко отличимое от реальности" #~ msgid "No realistic violence" #~ msgstr "Нереалистичное насилие" #~ msgid "Mildly realistic characters in unsafe situations" #~ msgstr "Умеренно-реалистичные персонажи в опасных ситуациях" #~ msgid "Depictions of realistic characters in aggressive conflict" #~ msgstr "Изображения реалистичных персонажей в агрессивных конфликтах" #~ msgid "Graphic violence involving realistic characters" #~ msgstr "Насилие в отношении реалистичных персонажей" #~ msgid "No bloodshed" #~ msgstr "Отсутствует кровопролитие" #~ msgid "Unrealistic bloodshed" #~ msgstr "Нереалистичное кровопролитие" #~ msgid "Realistic bloodshed" #~ msgstr "Реалистичное кровопролитие" #~ msgid "Depictions of bloodshed and the mutilation of body parts" #~ msgstr "Изображения крови и увечий" #~ msgid "No sexual violence" #~ msgstr "Отсутствует сексуальное насилие" #~ msgid "Rape or other violent sexual behavior" #~ msgstr "Изнасилование или другое сексуальное насилие" #~ msgid "No references to alcohol" #~ msgstr "Отсутствие упоминания алкоголя" #~ msgid "References to alcoholic beverages" #~ msgstr "Упоминание алкогольных напитков" #~ msgid "Use of alcoholic beverages" #~ msgstr "Употребление алкогольных напитков" #~ msgid "No references to illicit drugs" #~ msgstr "Отсутствуют упоминания запрещенных наркотиков" #~ msgid "References to illicit drugs" #~ msgstr "Упоминание запрещенных наркотиков" #~ msgid "Use of illicit drugs" #~ msgstr "Употребление запрещенных наркотиков" #~ msgid "References to tobacco products" #~ msgstr "Упоминание табачных изделий" #~ msgid "Use of tobacco products" #~ msgstr "Использование табачных изделий" #~ msgid "No nudity of any sort" #~ msgstr "Отсутствует обнажение в любом виде" #~ msgid "Brief artistic nudity" #~ msgstr "Короткие или неоткровенные сцены обнажения в художественных целях" #~ msgid "Prolonged nudity" #~ msgstr "Продолжительные сцены обнажения" #~ msgid "No references or depictions of sexual nature" #~ msgstr "Отсутствуют упоминания сексуального характера" #~ msgid "Provocative references or depictions" #~ msgstr "Содержание или упоминание провокационного характера" #~ msgid "Sexual references or depictions" #~ msgstr "Содержание или упоминание сексуального характера" #~ msgid "Graphic sexual behavior" #~ msgstr "Изображения сексуального поведения" #~ msgid "No profanity of any kind" #~ msgstr "Отсутствует ненормативная лексика в любом виде" #~ msgid "Mild or infrequent use of profanity" #~ msgstr "Незначительное или нечастое сквернословие" #~ msgid "Moderate use of profanity" #~ msgstr "Умеренное сквернословие" #~ msgid "Strong or frequent use of profanity" #~ msgstr "Очень грубое и частое сквернословие" #~ msgid "No inappropriate humor" #~ msgstr "Отсутствует неприемлемый юмор" #~ msgid "Slapstick humor" #~ msgstr "Грубый юмор" #~ msgid "Vulgar or bathroom humor" #~ msgstr "Вульгарный или непристойный юмор" #~ msgid "Mature or sexual humor" #~ msgstr "Юмор для взрослых или сексуального характера" #~ msgid "No discriminatory language of any kind" #~ msgstr "Отсутствуют фразы с дискриминацией любого типа" #~ msgid "Negativity towards a specific group of people" #~ msgstr "Негативное отношение к определенной группе людей" #~ msgid "Discrimination designed to cause emotional harm" #~ msgstr "Дискриминация с целью причинить моральный вред" #~ msgid "Explicit discrimination based on gender, sexuality, race or religion" #~ msgstr "" #~ "Явная дискриминация по признаку пола, сексуальной ориентации, расы или " #~ "религии" #~ msgid "No advertising of any kind" #~ msgstr "Отсутствует реклама в любом виде" #~ msgid "Product placement" #~ msgstr "Неявная реклама" #~ msgid "Explicit references to specific brands or trademarked products" #~ msgstr "Явные упоминания конкретных брендов или торговых марок" #~ msgid "Users are encouraged to purchase specific real-world items" #~ msgstr "" #~ "Пользователям предлагается приобрести определенные предметы реального мира" #~ msgid "No gambling of any kind" #~ msgstr "Отсутствуют азартные игры в любом виде" #~ msgid "Gambling on random events using tokens or credits" #~ msgstr "" #~ "Азартные игры с использованием жетонов, основанные на случайных событиях" #~ msgid "Gambling using “play” money" #~ msgstr "Азартные игры с использованием «игровой» валюты" #~ msgid "Gambling using real money" #~ msgstr "Азартные игры с использованием реальных денег" #~ msgid "No ability to spend money" #~ msgstr "Отсутствует возможность тратить деньги" #~ msgid "Users are encouraged to donate real money" #~ msgstr "Пользователям предлагается платить реальные деньги" #~ msgid "Ability to spend real money in-game" #~ msgstr "Присутствует возможность тратить реальные деньги в игре" #~ msgid "No way to chat with other users" #~ msgstr "Отсутствует возможность общаться с другими игроками" #~ msgid "Moderated chat functionality between users" #~ msgstr "Модерируемые функции чата между пользователями" #~ msgid "Uncontrolled chat functionality between users" #~ msgstr "Неконтролируемые функции чата между пользователями" #~ msgid "No way to talk with other users" #~ msgstr "Отсутствует возможность общаться с другими игроками" #~ msgid "Uncontrolled audio or video chat functionality between users" #~ msgstr "Неконтролируемые функции аудио или видеочата между пользователями" #~ msgid "No sharing of social network usernames or email addresses" #~ msgstr "Не распространяет имена пользователей или адреса электронной почты" #~ msgid "Sharing social network usernames or email addresses" #~ msgstr "Распространяет имена пользователей или адреса электронной почты" #~ msgid "No sharing of user information with 3rd parties" #~ msgstr "Не передает информацию о пользователе третьим лицам" #~ msgid "Checking for the latest application version" #~ msgstr "Проверка последней версии приложения" #~ msgid "Sharing diagnostic data that does not let others identify the user" #~ msgstr "" #~ "Совместное использование диагностических данных, которые не позволяют " #~ "другим идентифицировать пользователя" #~ msgid "Sharing information that lets others identify the user" #~ msgstr "Обмен информацией, позволяющей другим идентифицировать пользователя" #~ msgid "No sharing of physical location to other users" #~ msgstr "Не передает реальное местоположение другим пользователям" #~ msgid "Sharing physical location to other users" #~ msgstr "Передает реальное местоположение другим пользователям" #~ msgid "No references to homosexuality" #~ msgstr "Нет ссылок на гомосексуализм" #~ msgid "Indirect references to homosexuality" #~ msgstr "Косвенные ссылки на гомосексуализм" #~ msgid "Kissing between people of the same gender" #~ msgstr "Поцелуи между людьми одного пола" #~ msgid "Graphic sexual behavior between people of the same gender" #~ msgstr "Графическое сексуальное поведение между людьми одного пола" #~ msgid "No references to prostitution" #~ msgstr "Нет ссылок на проституцию" #~ msgid "Indirect references to prostitution" #~ msgstr "Косвенные ссылки на проституцию" #~ msgid "Direct references to prostitution" #~ msgstr "Прямые ссылки на проституцию" #~ msgid "Graphic depictions of the act of prostitution" #~ msgstr "Графические изображения акта проституции" #~ msgid "No references to adultery" #~ msgstr "Нет ссылок на прелюбодеяние" #~ msgid "Indirect references to adultery" #~ msgstr "Косвенные ссылки на прелюбодеяние" #~ msgid "Direct references to adultery" #~ msgstr "Прямые ссылки на прелюбодеяние" #~ msgid "Graphic depictions of the act of adultery" #~ msgstr "Графические изображения акта прелюбодеяния" #~ msgid "No sexualized characters" #~ msgstr "Нет сексуализированных персонажей" #~ msgid "Scantily clad human characters" #~ msgstr "Необычно одетые человеческие персонажи" #~ msgid "Overtly sexualized human characters" #~ msgstr "Чрезмерно сексуализированные человеческие персонажи" #~ msgid "No references to desecration" #~ msgstr "Нет упоминания осквернения" #~ msgid "Depictions of modern-day human desecration" #~ msgstr "Изображения современного человеческого осквернения" #~ msgid "Graphic depictions of modern-day desecration" #~ msgstr "Графические изображения современного осквернения" #~ msgid "No visible dead human remains" #~ msgstr "Нет видимых мертвых человеческих останков" #~ msgid "Visible dead human remains" #~ msgstr "Видимые мертвые человеческие останки" #~ msgid "Dead human remains that are exposed to the elements" #~ msgstr "Мертвые человеческие останки, которые имеют неприкрытые части" #~ msgid "Graphic depictions of desecration of human bodies" #~ msgstr "Графические изображения осквернения человеческих тел" #~ msgid "No references to slavery" #~ msgstr "Отсутствие упоминания рабства" #~ msgid "Depictions of modern-day slavery" #~ msgstr "Изображения современного рабства" #~ msgid "Graphic depictions of modern-day slavery" #~ msgstr "Графические изображения современного рабства" malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/po/sk.po000066400000000000000000000471411505556674000231760ustar00rootroot00000000000000# Slovak translations for malcontent package. # Copyright (C) 2020 THE malcontent'S COPYRIGHT HOLDER # This file is distributed under the same license as the malcontent package. # Automatically generated, 2020. # msgid "" msgstr "" "Project-Id-Version: malcontent\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-06-10 12:04+0100\n" "PO-Revision-Date: 2020-04-15 13:42+0100\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: sk\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" #: accounts-service/com.endlessm.ParentalControls.policy.in:4 msgid "Change your own app filter" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:5 msgid "Authentication is required to change your app filter." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:14 msgid "Read your own app filter" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:15 msgid "Authentication is required to read your app filter." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:24 msgid "Change another user’s app filter" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:25 msgid "Authentication is required to change another user’s app filter." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:34 msgid "Read another user’s app filter" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:35 msgid "Authentication is required to read another user’s app filter." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:44 msgid "Change your own session limits" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:45 msgid "Authentication is required to change your session limits." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:54 msgid "Read your own session limits" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:55 msgid "Authentication is required to read your session limits." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:64 msgid "Change another user’s session limits" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:65 msgid "Authentication is required to change another user’s session limits." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:74 msgid "Read another user’s session limits" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:75 msgid "Authentication is required to read another user’s session limits." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:84 msgid "Change your own account info" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:85 msgid "Authentication is required to change your account info." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:94 msgid "Read your own account info" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:95 msgid "Authentication is required to read your account info." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:104 msgid "Change another user’s account info" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:105 msgid "Authentication is required to change another user’s account info." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:114 msgid "Read another user’s account info" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:115 msgid "Authentication is required to read another user’s account info." msgstr "" #: libmalcontent/app-filter.c:694 #, c-format msgid "App filter for user %u was in an unrecognized format" msgstr "" #: libmalcontent/app-filter.c:725 #, c-format msgid "OARS filter for user %u has an unrecognized kind ‘%s’" msgstr "" #: libmalcontent/manager.c:283 libmalcontent/manager.c:412 #, c-format msgid "Not allowed to query app filter data for user %u" msgstr "" #: libmalcontent/manager.c:288 #, c-format msgid "User %u does not exist" msgstr "" #: libmalcontent/manager.c:394 msgid "App filtering is globally disabled" msgstr "" #: libmalcontent/manager.c:777 msgid "Session limits are globally disabled" msgstr "" #: libmalcontent/manager.c:795 #, c-format msgid "Not allowed to query session limits data for user %u" msgstr "" #: libmalcontent/session-limits.c:306 #, c-format msgid "Session limit for user %u was in an unrecognized format" msgstr "" #: libmalcontent/session-limits.c:328 #, c-format msgid "Session limit for user %u has an unrecognized type ‘%u’" msgstr "" #: libmalcontent/session-limits.c:346 #, c-format msgid "Session limit for user %u has invalid daily schedule %u–%u" msgstr "" #. TRANSLATORS: This is the formatting of English and localized name #. of the rating e.g. "Adults Only (solo adultos)" #: libmalcontent-ui/gs-content-rating.c:75 #, c-format msgid "%s (%s)" msgstr "" #: libmalcontent-ui/gs-content-rating.c:209 msgid "General" msgstr "" #: libmalcontent-ui/gs-content-rating.c:218 msgid "ALL" msgstr "" #: libmalcontent-ui/gs-content-rating.c:222 #: libmalcontent-ui/gs-content-rating.c:485 msgid "Adults Only" msgstr "" #: libmalcontent-ui/gs-content-rating.c:224 #: libmalcontent-ui/gs-content-rating.c:484 msgid "Mature" msgstr "" #: libmalcontent-ui/gs-content-rating.c:226 #: libmalcontent-ui/gs-content-rating.c:483 msgid "Teen" msgstr "" #: libmalcontent-ui/gs-content-rating.c:228 #: libmalcontent-ui/gs-content-rating.c:482 msgid "Everyone 10+" msgstr "" #: libmalcontent-ui/gs-content-rating.c:230 #: libmalcontent-ui/gs-content-rating.c:481 msgid "Everyone" msgstr "" #: libmalcontent-ui/gs-content-rating.c:232 #: libmalcontent-ui/gs-content-rating.c:480 msgid "Early Childhood" msgstr "" #. Translators: the placeholder is a user’s full name #: libmalcontent-ui/restrict-applications-dialog.c:222 #, c-format msgid "Restrict %s from using the following installed applications." msgstr "" #: libmalcontent-ui/restrict-applications-dialog.ui:6 #: libmalcontent-ui/restrict-applications-dialog.ui:12 msgid "Restrict Applications" msgstr "" #: libmalcontent-ui/restrict-applications-selector.ui:24 msgid "No applications found to restrict." msgstr "" #. Translators: this is the full name for an unknown user account. #: libmalcontent-ui/user-controls.c:242 libmalcontent-ui/user-controls.c:253 msgid "unknown" msgstr "" #: libmalcontent-ui/user-controls.c:338 libmalcontent-ui/user-controls.c:425 #: libmalcontent-ui/user-controls.c:711 msgid "All Ages" msgstr "" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:514 #, c-format msgid "" "Prevents %s from running web browsers. Limited web content may still be " "available in other applications." msgstr "" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:519 #, c-format msgid "Prevents specified applications from being used by %s." msgstr "" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:524 #, c-format msgid "Prevents %s from installing applications." msgstr "" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:529 #, c-format msgid "Applications installed by %s will not appear for other users." msgstr "" #: libmalcontent-ui/user-controls.ui:17 msgid "Application Usage Restrictions" msgstr "" #: libmalcontent-ui/user-controls.ui:68 msgid "Restrict _Web Browsers" msgstr "" #: libmalcontent-ui/user-controls.ui:152 msgid "_Restrict Applications" msgstr "" #: libmalcontent-ui/user-controls.ui:231 msgid "Software Installation Restrictions" msgstr "" #: libmalcontent-ui/user-controls.ui:281 msgid "Restrict Application _Installation" msgstr "" #: libmalcontent-ui/user-controls.ui:366 msgid "Restrict Application Installation for _Others" msgstr "" #: libmalcontent-ui/user-controls.ui:451 msgid "Application _Suitability" msgstr "" #: libmalcontent-ui/user-controls.ui:473 msgid "" "Restricts browsing or installation of applications to applications suitable " "for certain ages or above." msgstr "" #. Translators: This is the title of the main window #. Translators: the name of the application as it appears in a software center #: malcontent-control/application.c:105 malcontent-control/main.ui:12 #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:9 #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:3 msgid "Parental Controls" msgstr "" #: malcontent-control/application.c:270 msgid "Copyright © 2019, 2020 Endless Mobile, Inc." msgstr "" #. Translators: this should be "translated" to the #. names of people who have translated Malcontent into #. this language, one per line. #: malcontent-control/application.c:275 msgid "translator-credits" msgstr "" #. Translators: "Malcontent" is the brand name of this #. project, so should not be translated. #: malcontent-control/application.c:281 msgid "Malcontent Website" msgstr "" #: malcontent-control/application.c:299 msgid "The help contents could not be displayed" msgstr "" #: malcontent-control/application.c:336 msgid "Failed to load user data from the system" msgstr "" #: malcontent-control/application.c:338 msgid "Please make sure that the AccountsService is installed and enabled." msgstr "" #: malcontent-control/carousel.ui:48 msgid "Previous Page" msgstr "" #: malcontent-control/carousel.ui:74 msgid "Next Page" msgstr "" #: malcontent-control/main.ui:93 msgid "Permission Required" msgstr "" #: malcontent-control/main.ui:107 msgid "" "Permission is required to view and change user parental controls settings." msgstr "" #: malcontent-control/main.ui:148 msgid "No Child Users Configured" msgstr "" #: malcontent-control/main.ui:162 msgid "" "No child users are currently set up on the system. Create one before setting " "up their parental controls." msgstr "" #: malcontent-control/main.ui:174 msgid "Create _Child User" msgstr "" #: malcontent-control/main.ui:202 msgid "Loading…" msgstr "" #: malcontent-control/main.ui:265 msgid "_Help" msgstr "_Pomocník" #: malcontent-control/main.ui:269 msgid "_About Parental Controls" msgstr "" #. Translators: the brief summary of the application as it appears in a software center. #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:12 #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:4 msgid "Set parental controls and monitor usage by users" msgstr "" #. Translators: These are the application description paragraphs in the AppData file. #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:16 msgid "" "Manage users’ parental controls restrictions, controlling how long they can " "use the computer for, what software they can install, and what installed " "software they can run." msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:39 msgid "The GNOME Project" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:50 #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:59 msgid "Minor improvements to parental controls application UI" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:51 msgid "Add a user manual" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:52 msgid "Translation updates" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:60 msgid "Translations to Ukrainian and Polish" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:67 msgid "Improve parental controls application UI and add icon" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:68 msgid "Support for indicating which accounts are parent accounts" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:75 msgid "Initial release of basic parental controls application" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:76 msgid "Support for setting app installation and run restrictions on users" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:83 msgid "Maintenance release of underlying parental controls library" msgstr "" #. Translators: Do NOT translate or transliterate this text (this is an icon file name)! #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:7 msgid "org.freedesktop.MalcontentControl" msgstr "" #. Translators: Search terms to find this application. Do NOT translate or localise the semicolons! The list MUST also end with a semicolon! #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:13 msgid "" "parental controls;screen time;app restrictions;web browser restrictions;oars;" "usage;usage limit;kid;child;" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.policy.in:9 msgid "Manage parental controls" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.policy.in:10 msgid "Authentication is required to read and change user parental controls" msgstr "" #: malcontent-control/user-selector.c:426 msgid "Your account" msgstr "Váš účet" #. Always allow root, to avoid a situation where this PAM module prevents #. * all users logging in with no way of recovery. #: pam/pam_malcontent.c:142 pam/pam_malcontent.c:188 #, c-format msgid "User ‘%s’ has no time limits enabled" msgstr "" #: pam/pam_malcontent.c:151 pam/pam_malcontent.c:172 #, c-format msgid "Error getting session limits for user ‘%s’: %s" msgstr "" #: pam/pam_malcontent.c:182 #, c-format msgid "User ‘%s’ has no time remaining" msgstr "" #: pam/pam_malcontent.c:200 #, c-format msgid "Error setting time limit on login session: %s" msgstr "" #~ msgid "No cartoon violence" #~ msgstr "Žiadne kreslené násilie" #~ msgid "Cartoon characters in unsafe situations" #~ msgstr "Kreslené postavy v nebezpečných situáciách" #~ msgid "Cartoon characters in aggressive conflict" #~ msgstr "Kreslené postavy v agresívnom konflikte" #~ msgid "Graphic violence involving cartoon characters" #~ msgstr "Vyobrazené násilie zahŕňajúce kreslené postavy" #~ msgid "No fantasy violence" #~ msgstr "Žiadne fiktívne násilie" #~ msgid "Characters in unsafe situations easily distinguishable from reality" #~ msgstr "Postavy v nebezpečných situáciach ľahko odlíšiteľných od reality" #~ msgid "" #~ "Characters in aggressive conflict easily distinguishable from reality" #~ msgstr "Postavy v agresívnom konflikte ľahko odlíšiteľnom od reality" #~ msgid "Graphic violence easily distinguishable from reality" #~ msgstr "Vyobrazené násilie ľahko odlíšiteľné od reality" #~ msgid "No realistic violence" #~ msgstr "Žiadne realistické násilie" #~ msgid "Mildly realistic characters in unsafe situations" #~ msgstr "Mierne skutočné postavy v nebezpečných situáciách" #~ msgid "Depictions of realistic characters in aggressive conflict" #~ msgstr "Znázornenia skutočných postáv v agresívnom konflikte" #~ msgid "Graphic violence involving realistic characters" #~ msgstr "Vyobrazené násilie zahŕňajúce skutočné postavy" #~ msgid "No bloodshed" #~ msgstr "Žiadne krviprelievanie" #~ msgid "Unrealistic bloodshed" #~ msgstr "Neskutočné krviprelievanie" #~ msgid "Realistic bloodshed" #~ msgstr "Skutočné krviprelievanie" #~ msgid "Depictions of bloodshed and the mutilation of body parts" #~ msgstr "Znázornenia krviprelievania a zohavené časti tiel" #~ msgid "No sexual violence" #~ msgstr "Žiadne sexuálne násilie" #~ msgid "Rape or other violent sexual behavior" #~ msgstr "Znásilnenie alebo iné násilné sexuálne správanie" #~ msgid "No references to alcohol" #~ msgstr "Žiadne odkazy na alkohol" #~ msgid "References to alcoholic beverages" #~ msgstr "Odkazy na alkoholické nápoje" #~ msgid "Use of alcoholic beverages" #~ msgstr "Požívanie alkoholických nápojov" #~ msgid "No references to illicit drugs" #~ msgstr "Žiadne odkazy na zakázané drogy" #~ msgid "References to illicit drugs" #~ msgstr "Odkazy na zakázané drogy" #~ msgid "Use of illicit drugs" #~ msgstr "Požívanie zakázaných drog" #~ msgid "References to tobacco products" #~ msgstr "Odkazy na tabakové výrobky" #~ msgid "Use of tobacco products" #~ msgstr "Požívanie tabakových výrobkov" #~ msgid "No nudity of any sort" #~ msgstr "Žiadna nahota akéhokoľvek druhu" #~ msgid "Brief artistic nudity" #~ msgstr "Občasná umelecká nahota" #~ msgid "Prolonged nudity" #~ msgstr "Dlhotrvajúca nahota" #~ msgid "No references or depictions of sexual nature" #~ msgstr "Žiadne sexuálne odkazy alebo vyobrazenia" #~ msgid "Provocative references or depictions" #~ msgstr "Provokačné odkazy alebo vyobrazenia" #~ msgid "Sexual references or depictions" #~ msgstr "Sexuálne odkazy alebo vyobrazenia" #~ msgid "Graphic sexual behavior" #~ msgstr "Vyobrazené sexuálne správanie" #~ msgid "No profanity of any kind" #~ msgstr "Žiadne zneuctenie akéhokoľvek druhu" #~ msgid "Mild or infrequent use of profanity" #~ msgstr "Mierne alebo časte zneuctenie" #~ msgid "Moderate use of profanity" #~ msgstr "Stredne silné zneuctenie" #~ msgid "Strong or frequent use of profanity" #~ msgstr "Silné alebo časté zneuctenie" #~ msgid "No inappropriate humor" #~ msgstr "Žiadny nevhodný humor" #~ msgid "Slapstick humor" #~ msgstr "Drsný humor" #~ msgid "Vulgar or bathroom humor" #~ msgstr "Vulgárny alebo kúpeľňový humor" #~ msgid "Mature or sexual humor" #~ msgstr "Sexuálny humor alebo humor pre dospelých" #~ msgid "No discriminatory language of any kind" #~ msgstr "Žiadny diskriminačný jazyk akéhokoľvek druhu" #~ msgid "Negativity towards a specific group of people" #~ msgstr "Odpor voči špecifickej skupine ľudí" #~ msgid "Discrimination designed to cause emotional harm" #~ msgstr "Diskriminácia s následkami emočnej ujmy" #~ msgid "Explicit discrimination based on gender, sexuality, race or religion" #~ msgstr "" #~ "Jednoznačná diskriminácia založená na pohlaví, sexuálnej orientácii, rase " #~ "alebo náboženstve" #~ msgid "No advertising of any kind" #~ msgstr "Žiadne reklamy akéhokoľvek druhu" #~ msgid "Product placement" #~ msgstr "Umiestnenie výrobku" #~ msgid "Explicit references to specific brands or trademarked products" #~ msgstr "" #~ "Jednoznačné odkazy na produkty špecifických značiek alebo označené " #~ "obchodnou známkou" #~ msgid "No gambling of any kind" #~ msgstr "Žiadne hazardovanie akéhokoľvek druhu" #~ msgid "Gambling on random events using tokens or credits" #~ msgstr "" #~ "Hazardovanie na náhodných podujatiach použitím žetónov alebo kreditov" #~ msgid "Gambling using “play” money" #~ msgstr "Hazardovanie s fiktívnymi peniazmi" #~ msgid "Gambling using real money" #~ msgstr "Hazardovanie so skutočnými peniazmi" #~ msgid "No ability to spend money" #~ msgstr "Žiadne možnosti míňania peňazí" #~ msgid "Ability to spend real money in-game" #~ msgstr "Možnosť míňania skutočných peňazí v hre" #~ msgid "No sharing of social network usernames or email addresses" #~ msgstr "" #~ "Žiadne zdieľanie používateľských mien alebo emailových adries zo " #~ "sociálnych sietí" #~ msgid "Sharing social network usernames or email addresses" #~ msgstr "" #~ "Zdieľanie používateľských mien alebo emailových adries zo sociálnych sietí" #~ msgid "No sharing of user information with 3rd parties" #~ msgstr "Žiadne zdieľanie informácií o používateľoch s tretími stranami" #~ msgid "No sharing of physical location to other users" #~ msgstr "Žiadne zdieľanie fyzickej lokality ostatným používateľom" #~ msgid "Sharing physical location to other users" #~ msgstr "Zdieľanie fyzickej lokality ostatným používateľom" malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/po/sl.po000066400000000000000000000406711505556674000232000ustar00rootroot00000000000000# Slovenian translations for malcontent package. # Copyright (C) 2020 THE malcontent'S COPYRIGHT HOLDER # This file is distributed under the same license as the malcontent package. # Automatically generated, 2020. # msgid "" msgstr "" "Project-Id-Version: malcontent\n" "Report-Msgid-Bugs-To: https://gitlab.freedesktop.org/pwithnall/malcontent/" "issues\n" "POT-Creation-Date: 2024-03-26 03:25+0000\n" "PO-Revision-Date: 2024-07-24 11:06+0200\n" "Last-Translator: Martin Srebotnjak \n" "Language-Team: none\n" "Language: sl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n" "%100==4 ? 2 : 3);\n" "X-Generator: Poedit 2.2.1\n" #: accounts-service/com.endlessm.ParentalControls.policy.in:4 msgid "Change your own app filter" msgstr "Spremennite lastni filter programov" #: accounts-service/com.endlessm.ParentalControls.policy.in:5 msgid "Authentication is required to change your app filter." msgstr "" "Preverjanje pristnosti je potrebno za spreminjanje lastnega filtra programov." #: accounts-service/com.endlessm.ParentalControls.policy.in:14 msgid "Read your own app filter" msgstr "Preberite lastni filter programov" #: accounts-service/com.endlessm.ParentalControls.policy.in:15 msgid "Authentication is required to read your app filter." msgstr "" "Preverjanje pristnosti je potrebno za branje lastnega filtra programov." #: accounts-service/com.endlessm.ParentalControls.policy.in:24 msgid "Change another user’s app filter" msgstr "Spremenite filter programov drugega uporabnika" #: accounts-service/com.endlessm.ParentalControls.policy.in:25 msgid "Authentication is required to change another user’s app filter." msgstr "" "Preverjanje pristnosti je potrebno za spreminjanje filtra programov za " "drugega uporabnika." #: accounts-service/com.endlessm.ParentalControls.policy.in:34 msgid "Read another user’s app filter" msgstr "Preberite filter programov drugega uporabnika" #: accounts-service/com.endlessm.ParentalControls.policy.in:35 msgid "Authentication is required to read another user’s app filter." msgstr "" "Preverjanje pristnosti je potrebno za branje filtra programov drugega " "uporabnika." #: accounts-service/com.endlessm.ParentalControls.policy.in:44 msgid "Change your own session limits" msgstr "Spremenite svoje omejitve sej" #: accounts-service/com.endlessm.ParentalControls.policy.in:45 msgid "Authentication is required to change your session limits." msgstr "Preverjanje pristnosti je potrebno za spreminjanje omejitev sej." #: accounts-service/com.endlessm.ParentalControls.policy.in:54 msgid "Read your own session limits" msgstr "Preberite svoje omejitve sej" #: accounts-service/com.endlessm.ParentalControls.policy.in:55 msgid "Authentication is required to read your session limits." msgstr "Preverjanje pristnosti je potrebno za branje omejitev sej." #: accounts-service/com.endlessm.ParentalControls.policy.in:64 msgid "Change another user’s session limits" msgstr "Spremite omejitve sej drugega uporabnika" #: accounts-service/com.endlessm.ParentalControls.policy.in:65 msgid "Authentication is required to change another user’s session limits." msgstr "" "Preverjanje pristnosti je potrebno za spreminjanje omejitev sej drugega " "uporabnika." #: accounts-service/com.endlessm.ParentalControls.policy.in:74 msgid "Read another user’s session limits" msgstr "Preberite omejitve sej drugega uporabnika" #: accounts-service/com.endlessm.ParentalControls.policy.in:75 msgid "Authentication is required to read another user’s session limits." msgstr "" "Preverjanje pristnosti je potrebno za branje omejitev sej drugega uporabnika." #: accounts-service/com.endlessm.ParentalControls.policy.in:84 msgid "Change your own account info" msgstr "Spremenite podatke o svojem računu" #: accounts-service/com.endlessm.ParentalControls.policy.in:85 msgid "Authentication is required to change your account info." msgstr "" "Preverjanje pristnosti je potrebno za spremembo podatkov vašega računa." #: accounts-service/com.endlessm.ParentalControls.policy.in:94 msgid "Read your own account info" msgstr "Preberite podatke o svojem računu" #: accounts-service/com.endlessm.ParentalControls.policy.in:95 msgid "Authentication is required to read your account info." msgstr "Preverjanje pristnosti je potrebno za branje podatkov o vašem računu." #: accounts-service/com.endlessm.ParentalControls.policy.in:104 msgid "Change another user’s account info" msgstr "Spremenite podatke o računu drugega uporabnika" #: accounts-service/com.endlessm.ParentalControls.policy.in:105 msgid "Authentication is required to change another user’s account info." msgstr "" "Preverjanje pristnosti je potrebno za spremembo podatkov o računu drugega " "uporabnika." #: accounts-service/com.endlessm.ParentalControls.policy.in:114 msgid "Read another user’s account info" msgstr "Preberite podatke o računu drugega uporabnika" #: accounts-service/com.endlessm.ParentalControls.policy.in:115 msgid "Authentication is required to read another user’s account info." msgstr "" "Preverjanje pristnosti je potrebno za branje podatkov o računu drugega " "uporabnika." #: libmalcontent/app-filter.c:696 #, c-format msgid "App filter for user %u was in an unrecognized format" msgstr "Filter programov za uporabnika %u je v neprepoznani obliki zapisa" #: libmalcontent/app-filter.c:727 #, c-format msgid "OARS filter for user %u has an unrecognized kind ‘%s’" msgstr "Filter OARS za uporabnika %u je neprepoznane vrste »%s«" #: libmalcontent/manager.c:283 libmalcontent/manager.c:420 #: libmalcontent/manager.c:803 #, c-format msgid "Not allowed to query parental controls data for user %u" msgstr "" "Poizvedovanje po podatkih starševskega nadzora za uporabnika %u ni dovoljeno" #: libmalcontent/manager.c:288 #, c-format msgid "User %u does not exist" msgstr "Uporabnik %u ne obstaja" #: libmalcontent/manager.c:296 msgid "System accounts service not available" msgstr "Storitev sistemskih računov ni na voljo" #: libmalcontent/manager.c:402 msgid "App filtering is globally disabled" msgstr "Filtriranje programov je globalno onemogočeno" #: libmalcontent/manager.c:785 msgid "Session limits are globally disabled" msgstr "Omejitve sej so globalno onemogočene" #: libmalcontent/session-limits.c:306 #, c-format msgid "Session limit for user %u was in an unrecognized format" msgstr "Omejitev sej za uporabnika %u je bila v ne prepoznani obliki zapisa" #: libmalcontent/session-limits.c:328 #, c-format msgid "Session limit for user %u has an unrecognized type ‘%u’" msgstr "Omejitev seje za uporabnika %u je ne prepoznane vrste »%u«" #: libmalcontent/session-limits.c:346 #, c-format msgid "Session limit for user %u has invalid daily schedule %u–%u" msgstr "Omejitev sej za uporabnika %u ima neveljaven dnevni urnik %u–%u" #. Translators: the placeholder is a user’s full name #: libmalcontent-ui/restrict-applications-dialog.c:256 #, c-format msgid "Restrict %s from using the following installed applications." msgstr "Omejite %s uporabo naslednjih nameščenih programov." #: libmalcontent-ui/restrict-applications-dialog.ui:6 msgid "Restrict Applications" msgstr "Omeji programe" #: libmalcontent-ui/restrict-applications-dialog.ui:22 msgid "Search for applications…" msgstr "Iskanje programov ..." #: libmalcontent-ui/restrict-applications-selector.ui:13 msgid "No applications found to restrict." msgstr "Ni najdenih programov za omejevanje." #. Translators: this is the full name for an unknown user account. #: libmalcontent-ui/user-controls.c:198 libmalcontent-ui/user-controls.c:209 msgid "unknown" msgstr "neznano" #: libmalcontent-ui/user-controls.c:306 libmalcontent-ui/user-controls.c:394 #: libmalcontent-ui/user-controls.c:647 msgid "Unrestricted" msgstr "Neomejeno" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:476 #, c-format msgid "" "Prevents %s from running web browsers. Limited web content may still be " "available in other applications." msgstr "" "Preprečuje %s zagon spletnih brskalnikov. Omejena spletna vsebina je morda " "še vedno na voljo v drugih programih." #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:481 #, c-format msgid "Prevents specified applications from being used by %s." msgstr "Prepreči uporabo določenih programov s strani %s." #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:486 #, c-format msgid "Prevents %s from installing applications." msgstr "Preprečuje %s nameščanje programov." #: libmalcontent-ui/user-controls.ui:25 msgid "Application Usage Restrictions" msgstr "Omejitve uporabe programov" #: libmalcontent-ui/user-controls.ui:28 msgid "Restrict _Web Browsers" msgstr "Omeji _spletne brskalnike" #: libmalcontent-ui/user-controls.ui:51 msgid "_Restrict Applications" msgstr "_Omeji programe" #: libmalcontent-ui/user-controls.ui:73 msgid "Software Installation Restrictions" msgstr "Omejitve namestitve programja" #: libmalcontent-ui/user-controls.ui:77 msgid "Restrict Application _Installation" msgstr "Omeji _namestitev programa" #: libmalcontent-ui/user-controls.ui:99 msgid "Application _Suitability" msgstr "_Primernost programa" #: libmalcontent-ui/user-controls.ui:102 msgid "" "Restricts the browsing or installation of applications unsuitable for this " "age or younger." msgstr "" "Omejuje brskanje ali namestitev programov, ki niso primerni za to starost " "ali za mlajše." #. Translators: This documents the --user command line option to malcontent-control: #: malcontent-control/application.c:102 msgid "User to select in the UI" msgstr "Uporabnik, ki ga želite izbrati v uporabniškem vmesniku" #. Translators: This is a placeholder for a command line argument value: #: malcontent-control/application.c:104 msgid "USERNAME" msgstr "UPORABNIŠKO_IME" #: malcontent-control/application.c:116 msgid "— view and edit parental controls" msgstr "— ogled in urejanje starševskega nadzora" #. Translators: This is the title of the main window #. Translators: the name of the application as it appears in a software center #: malcontent-control/application.c:123 malcontent-control/main.ui:17 #: malcontent-control/org.freedesktop.MalcontentControl.metainfo.xml.in:9 #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:3 msgid "Parental Controls" msgstr "Starševski nadzor" #: malcontent-control/application.c:309 msgid "Copyright © 2019, 2020 Endless Mobile, Inc." msgstr "Avtorska in sorodne pravice © 2019, 2020 Endless Mobile, Inc." #. Translators: this should be "translated" to the #. names of people who have translated Malcontent into #. this language, one per line. #: malcontent-control/application.c:314 msgid "translator-credits" msgstr "Martin Srebotnjak " #. Translators: "Malcontent" is the brand name of this #. project, so should not be translated. #: malcontent-control/application.c:320 msgid "Malcontent Website" msgstr "Spletno mesto z zlonamerno vsebino" #: malcontent-control/application.c:340 msgid "The help contents could not be displayed" msgstr "Vsebine pomoči ni bilo mogoče prikazati" #: malcontent-control/application.c:389 msgid "Failed to load user data from the system" msgstr "Prenos uporabniških podatkov iz sistema ni uspel" #: malcontent-control/application.c:391 msgid "Please make sure that the AccountsService is installed and enabled." msgstr "Preverite, ali je storitev AccountsService nameščena in omogočena." #. Translators: Replace the link to commonsensemedia.org with some #. * localised guidance for parents/carers on how to set restrictions on #. * their child/caree in a responsible way which is in keeping with the #. * best practice and culture of the region. If no suitable localised #. * guidance exists, and if the default commonsensemedia.org link is not #. * suitable, please file an issue against malcontent so we can discuss #. * further! #. * https://gitlab.freedesktop.org/pwithnall/malcontent/-/issues/new #. #: malcontent-control/application.c:424 #, c-format msgid "" "It’s recommended that restrictions are set as part of an ongoing " "conversation with %s. Read guidance on what to consider." msgstr "" "Priporočljivo je, da se omejitve določijo kot del stalnega pogovora s/z %s. " "Preberite navodila o tem, kaj morate upoštevati." #: malcontent-control/carousel.ui:38 msgid "Previous Page" msgstr "Predhodna stran" #: malcontent-control/carousel.ui:57 msgid "Next Page" msgstr "Naslednja stran" #: malcontent-control/main.ui:87 msgid "Permission Required" msgstr "Potrebno je dovoljenje" #: malcontent-control/main.ui:88 msgid "" "Permission is required to view and change user parental controls settings." msgstr "" "Za ogled in spreminjanje nastavitev starševskega nadzora uporabnikov " "potrebujete pravice." #: malcontent-control/main.ui:110 msgid "No Standard User Accounts" msgstr "Brez standardnih uporabniških računov" #: malcontent-control/main.ui:111 msgid "" "Parental controls can only be applied to standard user\n" "accounts. These can be created in the user settings." msgstr "" "Starševski nadzor je mogoče uporabiti samo za standardne uporabniške\n" "račune. Te lahko ustvarite v uporabniških nastavitvah." #: malcontent-control/main.ui:115 msgid "_User Settings" msgstr "_Uporabniške nastavitve" #: malcontent-control/main.ui:138 msgid "Loading…" msgstr "Poteka nalaganje …" #: malcontent-control/main.ui:171 msgid "_Help" msgstr "Pomo_č" #: malcontent-control/main.ui:175 msgid "_About Parental Controls" msgstr "_O Starševskem nadzoru" #. Translators: the brief summary of the application as it appears in a software center. #: malcontent-control/org.freedesktop.MalcontentControl.metainfo.xml.in:12 #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:4 msgid "Set parental controls and monitor usage by users" msgstr "" "Nastavite starševski nadzor in spremljajte uporabo s strani uporabnikov" #. Translators: These are the application description paragraphs in the AppData file. #: malcontent-control/org.freedesktop.MalcontentControl.metainfo.xml.in:16 msgid "" "Manage users’ parental controls restrictions, controlling how long they can " "use the computer for, what software they can install, and what installed " "software they can run." msgstr "" "Upravljajte omejitve starševskega nadzora uporabnikov in nadzirajte, kako " "dolgo lahko uporabljajo računalnik, katero programsko opremo lahko namestijo " "in katero nameščeno programsko opremo lahko izvajajo." #: malcontent-control/org.freedesktop.MalcontentControl.metainfo.xml.in:25 msgid "Main window" msgstr "Glavno okno" #. Translators: Search terms to find this application. Do NOT translate or localise the semicolons! The list MUST also end with a semicolon! #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:13 msgid "" "parental controls;screen time;app restrictions;web browser restrictions;oars;" "usage;usage limit;kid;child;" msgstr "" "starševski nadzor;čas pred zaslonom;omejitve za aplikacije;omejitve " "programov;omejitve spletnega brskalnika;raba;omejitev uporabe;uporaba;otrok;" "otroci;mladostnik;" #: malcontent-control/org.freedesktop.MalcontentControl.policy.in:9 msgid "Manage parental controls" msgstr "Upravljaj starševski nadzor" #: malcontent-control/org.freedesktop.MalcontentControl.policy.in:10 msgid "Authentication is required to read and change user parental controls" msgstr "" "Preverjanje pristnosti je potrebno za branje in spreminjanje starševskega " "nadzora uporabnika" #: malcontent-control/user-selector.c:426 msgid "Your account" msgstr "Vaš račun" #. Always allow root, to avoid a situation where this PAM module prevents #. * all users logging in with no way of recovery. #: pam/pam_malcontent.c:142 pam/pam_malcontent.c:188 #, c-format msgid "User ‘%s’ has no time limits enabled" msgstr "Uporabnik »%s« nima omogočenih časovnih omejitev" #: pam/pam_malcontent.c:151 pam/pam_malcontent.c:172 #, c-format msgid "Error getting session limits for user ‘%s’: %s" msgstr "Napaka pri pridobivanju omejitev sej za uporabnika »%s«: %s" #: pam/pam_malcontent.c:182 #, c-format msgid "User ‘%s’ has no time remaining" msgstr "Uporabnik »%s« nima preostalega časa" #: pam/pam_malcontent.c:200 #, c-format msgid "Error setting time limit on login session: %s" msgstr "Napaka pri nastavljanju časovne omejitve za sejo prijave: %s" malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/po/sr.po000066400000000000000000000640431505556674000232050ustar00rootroot00000000000000# Serbian translations for malcontent package. # Copyright (C) 2020 THE malcontent'S COPYRIGHT HOLDER # This file is distributed under the same license as the malcontent package. # Automatically generated, 2020. # msgid "" msgstr "" "Project-Id-Version: malcontent\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-06-10 12:04+0100\n" "PO-Revision-Date: 2020-04-15 13:42+0100\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: sr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" #: accounts-service/com.endlessm.ParentalControls.policy.in:4 msgid "Change your own app filter" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:5 msgid "Authentication is required to change your app filter." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:14 msgid "Read your own app filter" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:15 msgid "Authentication is required to read your app filter." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:24 msgid "Change another user’s app filter" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:25 msgid "Authentication is required to change another user’s app filter." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:34 msgid "Read another user’s app filter" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:35 msgid "Authentication is required to read another user’s app filter." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:44 msgid "Change your own session limits" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:45 msgid "Authentication is required to change your session limits." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:54 msgid "Read your own session limits" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:55 msgid "Authentication is required to read your session limits." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:64 msgid "Change another user’s session limits" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:65 msgid "Authentication is required to change another user’s session limits." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:74 msgid "Read another user’s session limits" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:75 msgid "Authentication is required to read another user’s session limits." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:84 msgid "Change your own account info" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:85 msgid "Authentication is required to change your account info." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:94 msgid "Read your own account info" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:95 msgid "Authentication is required to read your account info." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:104 msgid "Change another user’s account info" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:105 msgid "Authentication is required to change another user’s account info." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:114 msgid "Read another user’s account info" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:115 msgid "Authentication is required to read another user’s account info." msgstr "" #: libmalcontent/app-filter.c:694 #, c-format msgid "App filter for user %u was in an unrecognized format" msgstr "" #: libmalcontent/app-filter.c:725 #, c-format msgid "OARS filter for user %u has an unrecognized kind ‘%s’" msgstr "" #: libmalcontent/manager.c:283 libmalcontent/manager.c:412 #, c-format msgid "Not allowed to query app filter data for user %u" msgstr "" #: libmalcontent/manager.c:288 #, c-format msgid "User %u does not exist" msgstr "" #: libmalcontent/manager.c:394 msgid "App filtering is globally disabled" msgstr "" #: libmalcontent/manager.c:777 msgid "Session limits are globally disabled" msgstr "" #: libmalcontent/manager.c:795 #, c-format msgid "Not allowed to query session limits data for user %u" msgstr "" #: libmalcontent/session-limits.c:306 #, c-format msgid "Session limit for user %u was in an unrecognized format" msgstr "" #: libmalcontent/session-limits.c:328 #, c-format msgid "Session limit for user %u has an unrecognized type ‘%u’" msgstr "" #: libmalcontent/session-limits.c:346 #, c-format msgid "Session limit for user %u has invalid daily schedule %u–%u" msgstr "" #. TRANSLATORS: This is the formatting of English and localized name #. of the rating e.g. "Adults Only (solo adultos)" #: libmalcontent-ui/gs-content-rating.c:75 #, c-format msgid "%s (%s)" msgstr "" #: libmalcontent-ui/gs-content-rating.c:209 msgid "General" msgstr "" #: libmalcontent-ui/gs-content-rating.c:218 msgid "ALL" msgstr "" #: libmalcontent-ui/gs-content-rating.c:222 #: libmalcontent-ui/gs-content-rating.c:485 msgid "Adults Only" msgstr "" #: libmalcontent-ui/gs-content-rating.c:224 #: libmalcontent-ui/gs-content-rating.c:484 msgid "Mature" msgstr "" #: libmalcontent-ui/gs-content-rating.c:226 #: libmalcontent-ui/gs-content-rating.c:483 msgid "Teen" msgstr "" #: libmalcontent-ui/gs-content-rating.c:228 #: libmalcontent-ui/gs-content-rating.c:482 msgid "Everyone 10+" msgstr "" #: libmalcontent-ui/gs-content-rating.c:230 #: libmalcontent-ui/gs-content-rating.c:481 msgid "Everyone" msgstr "" #: libmalcontent-ui/gs-content-rating.c:232 #: libmalcontent-ui/gs-content-rating.c:480 msgid "Early Childhood" msgstr "" #. Translators: the placeholder is a user’s full name #: libmalcontent-ui/restrict-applications-dialog.c:222 #, c-format msgid "Restrict %s from using the following installed applications." msgstr "" #: libmalcontent-ui/restrict-applications-dialog.ui:6 #: libmalcontent-ui/restrict-applications-dialog.ui:12 msgid "Restrict Applications" msgstr "" #: libmalcontent-ui/restrict-applications-selector.ui:24 msgid "No applications found to restrict." msgstr "" #. Translators: this is the full name for an unknown user account. #: libmalcontent-ui/user-controls.c:242 libmalcontent-ui/user-controls.c:253 msgid "unknown" msgstr "" #: libmalcontent-ui/user-controls.c:338 libmalcontent-ui/user-controls.c:425 #: libmalcontent-ui/user-controls.c:711 msgid "All Ages" msgstr "" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:514 #, c-format msgid "" "Prevents %s from running web browsers. Limited web content may still be " "available in other applications." msgstr "" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:519 #, c-format msgid "Prevents specified applications from being used by %s." msgstr "" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:524 #, c-format msgid "Prevents %s from installing applications." msgstr "" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:529 #, c-format msgid "Applications installed by %s will not appear for other users." msgstr "" #: libmalcontent-ui/user-controls.ui:17 msgid "Application Usage Restrictions" msgstr "" #: libmalcontent-ui/user-controls.ui:68 msgid "Restrict _Web Browsers" msgstr "" #: libmalcontent-ui/user-controls.ui:152 msgid "_Restrict Applications" msgstr "" #: libmalcontent-ui/user-controls.ui:231 msgid "Software Installation Restrictions" msgstr "" #: libmalcontent-ui/user-controls.ui:281 msgid "Restrict Application _Installation" msgstr "" #: libmalcontent-ui/user-controls.ui:366 msgid "Restrict Application Installation for _Others" msgstr "" #: libmalcontent-ui/user-controls.ui:451 msgid "Application _Suitability" msgstr "" #: libmalcontent-ui/user-controls.ui:473 msgid "" "Restricts browsing or installation of applications to applications suitable " "for certain ages or above." msgstr "" #. Translators: This is the title of the main window #. Translators: the name of the application as it appears in a software center #: malcontent-control/application.c:105 malcontent-control/main.ui:12 #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:9 #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:3 msgid "Parental Controls" msgstr "" #: malcontent-control/application.c:270 msgid "Copyright © 2019, 2020 Endless Mobile, Inc." msgstr "" #. Translators: this should be "translated" to the #. names of people who have translated Malcontent into #. this language, one per line. #: malcontent-control/application.c:275 msgid "translator-credits" msgstr "" #. Translators: "Malcontent" is the brand name of this #. project, so should not be translated. #: malcontent-control/application.c:281 msgid "Malcontent Website" msgstr "" #: malcontent-control/application.c:299 msgid "The help contents could not be displayed" msgstr "" #: malcontent-control/application.c:336 msgid "Failed to load user data from the system" msgstr "" #: malcontent-control/application.c:338 msgid "Please make sure that the AccountsService is installed and enabled." msgstr "" #: malcontent-control/carousel.ui:48 msgid "Previous Page" msgstr "" #: malcontent-control/carousel.ui:74 msgid "Next Page" msgstr "" #: malcontent-control/main.ui:93 msgid "Permission Required" msgstr "" #: malcontent-control/main.ui:107 msgid "" "Permission is required to view and change user parental controls settings." msgstr "" #: malcontent-control/main.ui:148 msgid "No Child Users Configured" msgstr "" #: malcontent-control/main.ui:162 msgid "" "No child users are currently set up on the system. Create one before setting " "up their parental controls." msgstr "" #: malcontent-control/main.ui:174 msgid "Create _Child User" msgstr "" #: malcontent-control/main.ui:202 msgid "Loading…" msgstr "" #: malcontent-control/main.ui:265 msgid "_Help" msgstr "По_моћ" #: malcontent-control/main.ui:269 msgid "_About Parental Controls" msgstr "" #. Translators: the brief summary of the application as it appears in a software center. #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:12 #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:4 msgid "Set parental controls and monitor usage by users" msgstr "" #. Translators: These are the application description paragraphs in the AppData file. #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:16 msgid "" "Manage users’ parental controls restrictions, controlling how long they can " "use the computer for, what software they can install, and what installed " "software they can run." msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:39 msgid "The GNOME Project" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:50 #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:59 msgid "Minor improvements to parental controls application UI" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:51 msgid "Add a user manual" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:52 msgid "Translation updates" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:60 msgid "Translations to Ukrainian and Polish" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:67 msgid "Improve parental controls application UI and add icon" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:68 msgid "Support for indicating which accounts are parent accounts" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:75 msgid "Initial release of basic parental controls application" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:76 msgid "Support for setting app installation and run restrictions on users" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:83 msgid "Maintenance release of underlying parental controls library" msgstr "" #. Translators: Do NOT translate or transliterate this text (this is an icon file name)! #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:7 msgid "org.freedesktop.MalcontentControl" msgstr "" #. Translators: Search terms to find this application. Do NOT translate or localise the semicolons! The list MUST also end with a semicolon! #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:13 msgid "" "parental controls;screen time;app restrictions;web browser restrictions;oars;" "usage;usage limit;kid;child;" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.policy.in:9 msgid "Manage parental controls" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.policy.in:10 msgid "Authentication is required to read and change user parental controls" msgstr "" #: malcontent-control/user-selector.c:426 msgid "Your account" msgstr "Ваш налог" #. Always allow root, to avoid a situation where this PAM module prevents #. * all users logging in with no way of recovery. #: pam/pam_malcontent.c:142 pam/pam_malcontent.c:188 #, c-format msgid "User ‘%s’ has no time limits enabled" msgstr "" #: pam/pam_malcontent.c:151 pam/pam_malcontent.c:172 #, c-format msgid "Error getting session limits for user ‘%s’: %s" msgstr "" #: pam/pam_malcontent.c:182 #, c-format msgid "User ‘%s’ has no time remaining" msgstr "" #: pam/pam_malcontent.c:200 #, c-format msgid "Error setting time limit on login session: %s" msgstr "" #~ msgid "No cartoon violence" #~ msgstr "Нема цртаног насиља" #~ msgid "Cartoon characters in unsafe situations" #~ msgstr "Ликови из цртаћа у непожељним ситуацијама" #~ msgid "Cartoon characters in aggressive conflict" #~ msgstr "Ликови из цртаћа у агресивном сукобу" #~ msgid "Graphic violence involving cartoon characters" #~ msgstr "Графичко насиље које укључује ликове из цртаћа" #~ msgid "No fantasy violence" #~ msgstr "Нема фантазијског насиља" #~ msgid "Characters in unsafe situations easily distinguishable from reality" #~ msgstr "" #~ "Ликови у несигурним ситуацијама које се лако разликују од стварности" #~ msgid "" #~ "Characters in aggressive conflict easily distinguishable from reality" #~ msgstr "Ликови у агресивном сукобу који се лако разликује од стварности" #~ msgid "Graphic violence easily distinguishable from reality" #~ msgstr "Графичко насиље које се лако разликује од стварности" #~ msgid "No realistic violence" #~ msgstr "Нема реалистичног насиља" #~ msgid "Mildly realistic characters in unsafe situations" #~ msgstr "Благо стварни ликови у несигурним ситуацијама" #~ msgid "Depictions of realistic characters in aggressive conflict" #~ msgstr "Приказ стварних ликова у агресивном сукобу" #~ msgid "Graphic violence involving realistic characters" #~ msgstr "Графичко насиље које укључује стварне ликове" #~ msgid "No bloodshed" #~ msgstr "Нема крвопролића" #~ msgid "Unrealistic bloodshed" #~ msgstr "Нереално крвопролиће" #~ msgid "Realistic bloodshed" #~ msgstr "Реално крвопролиће" #~ msgid "Depictions of bloodshed and the mutilation of body parts" #~ msgstr "Приказ крвопролића и сакаћење делова тела" #~ msgid "No sexual violence" #~ msgstr "Нема сексуалног насиља" #~ msgid "Rape or other violent sexual behavior" #~ msgstr "Силовање или друго насилно сексуално понашање" #~ msgid "No references to alcohol" #~ msgstr "Нема упућивања на алкохол" #~ msgid "References to alcoholic beverages" #~ msgstr "Упућивање на алкохолна пића" #~ msgid "Use of alcoholic beverages" #~ msgstr "Употреба алкохолних пића" #~ msgid "No references to illicit drugs" #~ msgstr "Нема упућивања на забрањене дроге" #~ msgid "References to illicit drugs" #~ msgstr "Упућивање на забрањене дроге" #~ msgid "Use of illicit drugs" #~ msgstr "Употреба забрањених дрога" #~ msgid "References to tobacco products" #~ msgstr "Упућивање на дуванске производе" #~ msgid "Use of tobacco products" #~ msgstr "Употреба дуванских производа" #~ msgid "No nudity of any sort" #~ msgstr "Нема било какве нагости" #~ msgid "Brief artistic nudity" #~ msgstr "Кратка уметничка голотиња" #~ msgid "Prolonged nudity" #~ msgstr "Продужена голотиња" #~ msgid "No references or depictions of sexual nature" #~ msgstr "Нема сексуалних приказа или упућивања" #~ msgid "Provocative references or depictions" #~ msgstr "Провокативне упуте или прикази" #~ msgid "Sexual references or depictions" #~ msgstr "Сексуалне упуте или прикази" #~ msgid "Graphic sexual behavior" #~ msgstr "Графичко сексуално понашање" #~ msgid "No profanity of any kind" #~ msgstr "Нема било какве вулгарности" #~ msgid "Mild or infrequent use of profanity" #~ msgstr "Блага или ретка употреба псовки" #~ msgid "Moderate use of profanity" #~ msgstr "Умерена употреба псовки" #~ msgid "Strong or frequent use of profanity" #~ msgstr "Јака или честа употреба псовки" #~ msgid "No inappropriate humor" #~ msgstr "Нема неумесног хумора" #~ msgid "Slapstick humor" #~ msgstr "Урнебесна комедија" #~ msgid "Vulgar or bathroom humor" #~ msgstr "Вулгаран или неумесни хумор" #~ msgid "Mature or sexual humor" #~ msgstr "Еротски и хумор за одрасле" #~ msgid "No discriminatory language of any kind" #~ msgstr "Нема било каквог дискриминационог говора" #~ msgid "Negativity towards a specific group of people" #~ msgstr "Негативност према одређеној групи људи" #~ msgid "Discrimination designed to cause emotional harm" #~ msgstr "Дискриминација осмишљена да изазове емотивну повреду" #~ msgid "Explicit discrimination based on gender, sexuality, race or religion" #~ msgstr "" #~ "Експлицитна дискриминација на основу пола, сексуалности, расе или " #~ "вероисповести" #~ msgid "No advertising of any kind" #~ msgstr "Нема било каквог оглашавања" #~ msgid "Product placement" #~ msgstr "Пласман производа" #~ msgid "Explicit references to specific brands or trademarked products" #~ msgstr "" #~ "Експлицитно упућивање на нарочите робне марке или заштићене производе" #~ msgid "Users are encouraged to purchase specific real-world items" #~ msgstr "Корисници се охрабрују да купују одређене ставке у стварном свету" #~ msgid "No gambling of any kind" #~ msgstr "Нема било каквог коцкања" #~ msgid "Gambling on random events using tokens or credits" #~ msgstr "Коцкање на насумичним догађајима који користе жетоне или кредите" #~ msgid "Gambling using “play” money" #~ msgstr "Коцкање које користи „играчки“ новац (play)" #~ msgid "Gambling using real money" #~ msgstr "Коцкање које користи стварни новац" #~ msgid "No ability to spend money" #~ msgstr "Не може се трошити стваран новац" #~ msgid "Users are encouraged to donate real money" #~ msgstr "Корисници се охрабрују да донирају стварни новац" #~ msgid "Ability to spend real money in-game" #~ msgstr "Способност потрошње стварног новца у игри" #~ msgid "No way to chat with other users" #~ msgstr "Нема начина за ћаскање са другим корисницима" #~ msgid "Moderated chat functionality between users" #~ msgstr "Умерена могућност ћаскања између корисника" #~ msgid "Uncontrolled chat functionality between users" #~ msgstr "Неконтролисана могућност ћаскања између корисника" #~ msgid "No way to talk with other users" #~ msgstr "Нема начина за разговор са другим корисницима" #~ msgid "Uncontrolled audio or video chat functionality between users" #~ msgstr "Неконтролисана могућност звучног и видео ћаскања између корисника" #~ msgid "No sharing of social network usernames or email addresses" #~ msgstr "" #~ "Нема дељења корисничких имена на друштвеним мрежама или адреса " #~ "електронске поште" #~ msgid "Sharing social network usernames or email addresses" #~ msgstr "" #~ "Дељење корисничких имена на друштвеним мрежама или адреса електронске " #~ "поште" #~ msgid "No sharing of user information with 3rd parties" #~ msgstr "Нема размене корисничких података са трећим странама" #~ msgid "Checking for the latest application version" #~ msgstr "Проверава последње издање програма" #~ msgid "Sharing diagnostic data that does not let others identify the user" #~ msgstr "" #~ "Деле се дијагностички подаци преко којих други не могу препознати " #~ "корисника" #~ msgid "Sharing information that lets others identify the user" #~ msgstr "" #~ "Деле се дијагностички подаци преко којих други могу препознати корисника" #~ msgid "No sharing of physical location to other users" #~ msgstr "Нема размене физичке локације са другим корисницима" #~ msgid "Sharing physical location to other users" #~ msgstr "Размена стварних локација са другим корисницима" #~ msgid "No references to homosexuality" #~ msgstr "Нема упућивања на хомосексуалност" #~ msgid "Indirect references to homosexuality" #~ msgstr "Посредна упућивања на хомосексуалност" #~ msgid "Kissing between people of the same gender" #~ msgstr "Љубљење између особа истог пола" #~ msgid "Graphic sexual behavior between people of the same gender" #~ msgstr "Графичко сексуално понашање између особа истог пола" #~ msgid "No references to prostitution" #~ msgstr "Нема упућивања на проституцију" #~ msgid "Indirect references to prostitution" #~ msgstr "Посредна упућивања на проституцију" #~ msgid "Direct references to prostitution" #~ msgstr "Непосредна упућивања на проституцију" #~ msgid "Graphic depictions of the act of prostitution" #~ msgstr "Графички прикази чина проституције" #~ msgid "No references to adultery" #~ msgstr "Нема упућивања на прељубу" #~ msgid "Indirect references to adultery" #~ msgstr "Посредна упућивања на прељубу" #~ msgid "Direct references to adultery" #~ msgstr "Непосредна упућивања на прељубу" #~ msgid "Graphic depictions of the act of adultery" #~ msgstr "Графички прикази чина прељубе" #~ msgid "No sexualized characters" #~ msgstr "Нема сексуализованих карактера" #~ msgid "Scantily clad human characters" #~ msgstr "Оскудно обучени људски карактери" #~ msgid "Overtly sexualized human characters" #~ msgstr "Претерано сексуализовани људски карактери" #~ msgid "No references to desecration" #~ msgstr "Нема упућивања на скрнављење" #~ msgid "Depictions of modern-day human desecration" #~ msgstr "Прикази савременог људског скрнављења" #~ msgid "Graphic depictions of modern-day desecration" #~ msgstr "Графички прикази савременог скрнављења" #~ msgid "No visible dead human remains" #~ msgstr "Без видљивих људских посмртних остатака" #~ msgid "Visible dead human remains" #~ msgstr "Са видљивим људским посмртним остацима" #~ msgid "Dead human remains that are exposed to the elements" #~ msgstr "Посмртни остаци људи који су изложени временским приликама" #~ msgid "Graphic depictions of desecration of human bodies" #~ msgstr "Графички прикази скрнављења људских тела" #~ msgid "No references to slavery" #~ msgstr "Нема упућивања на робовласништво" #~ msgid "Depictions of modern-day slavery" #~ msgstr "Прикази савременог робовласништва" #~ msgid "Graphic depictions of modern-day slavery" #~ msgstr "Графички прикази савременог робовласништва" malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/po/sr@latin.po000066400000000000000000000556351505556674000243440ustar00rootroot00000000000000# Serbian translations for malcontent package. # Copyright (C) 2020 THE malcontent'S COPYRIGHT HOLDER # This file is distributed under the same license as the malcontent package. # Automatically generated, 2020. # msgid "" msgstr "" "Project-Id-Version: malcontent\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-06-10 12:04+0100\n" "PO-Revision-Date: 2020-04-15 13:42+0100\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: sr@latin\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" #: accounts-service/com.endlessm.ParentalControls.policy.in:4 msgid "Change your own app filter" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:5 msgid "Authentication is required to change your app filter." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:14 msgid "Read your own app filter" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:15 msgid "Authentication is required to read your app filter." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:24 msgid "Change another user’s app filter" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:25 msgid "Authentication is required to change another user’s app filter." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:34 msgid "Read another user’s app filter" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:35 msgid "Authentication is required to read another user’s app filter." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:44 msgid "Change your own session limits" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:45 msgid "Authentication is required to change your session limits." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:54 msgid "Read your own session limits" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:55 msgid "Authentication is required to read your session limits." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:64 msgid "Change another user’s session limits" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:65 msgid "Authentication is required to change another user’s session limits." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:74 msgid "Read another user’s session limits" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:75 msgid "Authentication is required to read another user’s session limits." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:84 msgid "Change your own account info" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:85 msgid "Authentication is required to change your account info." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:94 msgid "Read your own account info" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:95 msgid "Authentication is required to read your account info." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:104 msgid "Change another user’s account info" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:105 msgid "Authentication is required to change another user’s account info." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:114 msgid "Read another user’s account info" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:115 msgid "Authentication is required to read another user’s account info." msgstr "" #: libmalcontent/app-filter.c:694 #, c-format msgid "App filter for user %u was in an unrecognized format" msgstr "" #: libmalcontent/app-filter.c:725 #, c-format msgid "OARS filter for user %u has an unrecognized kind ‘%s’" msgstr "" #: libmalcontent/manager.c:283 libmalcontent/manager.c:412 #, c-format msgid "Not allowed to query app filter data for user %u" msgstr "" #: libmalcontent/manager.c:288 #, c-format msgid "User %u does not exist" msgstr "" #: libmalcontent/manager.c:394 msgid "App filtering is globally disabled" msgstr "" #: libmalcontent/manager.c:777 msgid "Session limits are globally disabled" msgstr "" #: libmalcontent/manager.c:795 #, c-format msgid "Not allowed to query session limits data for user %u" msgstr "" #: libmalcontent/session-limits.c:306 #, c-format msgid "Session limit for user %u was in an unrecognized format" msgstr "" #: libmalcontent/session-limits.c:328 #, c-format msgid "Session limit for user %u has an unrecognized type ‘%u’" msgstr "" #: libmalcontent/session-limits.c:346 #, c-format msgid "Session limit for user %u has invalid daily schedule %u–%u" msgstr "" #. TRANSLATORS: This is the formatting of English and localized name #. of the rating e.g. "Adults Only (solo adultos)" #: libmalcontent-ui/gs-content-rating.c:75 #, c-format msgid "%s (%s)" msgstr "" #: libmalcontent-ui/gs-content-rating.c:209 msgid "General" msgstr "" #: libmalcontent-ui/gs-content-rating.c:218 msgid "ALL" msgstr "" #: libmalcontent-ui/gs-content-rating.c:222 #: libmalcontent-ui/gs-content-rating.c:485 msgid "Adults Only" msgstr "" #: libmalcontent-ui/gs-content-rating.c:224 #: libmalcontent-ui/gs-content-rating.c:484 msgid "Mature" msgstr "" #: libmalcontent-ui/gs-content-rating.c:226 #: libmalcontent-ui/gs-content-rating.c:483 msgid "Teen" msgstr "" #: libmalcontent-ui/gs-content-rating.c:228 #: libmalcontent-ui/gs-content-rating.c:482 msgid "Everyone 10+" msgstr "" #: libmalcontent-ui/gs-content-rating.c:230 #: libmalcontent-ui/gs-content-rating.c:481 msgid "Everyone" msgstr "" #: libmalcontent-ui/gs-content-rating.c:232 #: libmalcontent-ui/gs-content-rating.c:480 msgid "Early Childhood" msgstr "" #. Translators: the placeholder is a user’s full name #: libmalcontent-ui/restrict-applications-dialog.c:222 #, c-format msgid "Restrict %s from using the following installed applications." msgstr "" #: libmalcontent-ui/restrict-applications-dialog.ui:6 #: libmalcontent-ui/restrict-applications-dialog.ui:12 msgid "Restrict Applications" msgstr "" #: libmalcontent-ui/restrict-applications-selector.ui:24 msgid "No applications found to restrict." msgstr "" #. Translators: this is the full name for an unknown user account. #: libmalcontent-ui/user-controls.c:242 libmalcontent-ui/user-controls.c:253 msgid "unknown" msgstr "" #: libmalcontent-ui/user-controls.c:338 libmalcontent-ui/user-controls.c:425 #: libmalcontent-ui/user-controls.c:711 msgid "All Ages" msgstr "" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:514 #, c-format msgid "" "Prevents %s from running web browsers. Limited web content may still be " "available in other applications." msgstr "" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:519 #, c-format msgid "Prevents specified applications from being used by %s." msgstr "" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:524 #, c-format msgid "Prevents %s from installing applications." msgstr "" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:529 #, c-format msgid "Applications installed by %s will not appear for other users." msgstr "" #: libmalcontent-ui/user-controls.ui:17 msgid "Application Usage Restrictions" msgstr "" #: libmalcontent-ui/user-controls.ui:68 msgid "Restrict _Web Browsers" msgstr "" #: libmalcontent-ui/user-controls.ui:152 msgid "_Restrict Applications" msgstr "" #: libmalcontent-ui/user-controls.ui:231 msgid "Software Installation Restrictions" msgstr "" #: libmalcontent-ui/user-controls.ui:281 msgid "Restrict Application _Installation" msgstr "" #: libmalcontent-ui/user-controls.ui:366 msgid "Restrict Application Installation for _Others" msgstr "" #: libmalcontent-ui/user-controls.ui:451 msgid "Application _Suitability" msgstr "" #: libmalcontent-ui/user-controls.ui:473 msgid "" "Restricts browsing or installation of applications to applications suitable " "for certain ages or above." msgstr "" #. Translators: This is the title of the main window #. Translators: the name of the application as it appears in a software center #: malcontent-control/application.c:105 malcontent-control/main.ui:12 #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:9 #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:3 msgid "Parental Controls" msgstr "" #: malcontent-control/application.c:270 msgid "Copyright © 2019, 2020 Endless Mobile, Inc." msgstr "" #. Translators: this should be "translated" to the #. names of people who have translated Malcontent into #. this language, one per line. #: malcontent-control/application.c:275 msgid "translator-credits" msgstr "" #. Translators: "Malcontent" is the brand name of this #. project, so should not be translated. #: malcontent-control/application.c:281 msgid "Malcontent Website" msgstr "" #: malcontent-control/application.c:299 msgid "The help contents could not be displayed" msgstr "" #: malcontent-control/application.c:336 msgid "Failed to load user data from the system" msgstr "" #: malcontent-control/application.c:338 msgid "Please make sure that the AccountsService is installed and enabled." msgstr "" #: malcontent-control/carousel.ui:48 msgid "Previous Page" msgstr "" #: malcontent-control/carousel.ui:74 msgid "Next Page" msgstr "" #: malcontent-control/main.ui:93 msgid "Permission Required" msgstr "" #: malcontent-control/main.ui:107 msgid "" "Permission is required to view and change user parental controls settings." msgstr "" #: malcontent-control/main.ui:148 msgid "No Child Users Configured" msgstr "" #: malcontent-control/main.ui:162 msgid "" "No child users are currently set up on the system. Create one before setting " "up their parental controls." msgstr "" #: malcontent-control/main.ui:174 msgid "Create _Child User" msgstr "" #: malcontent-control/main.ui:202 msgid "Loading…" msgstr "" #: malcontent-control/main.ui:265 msgid "_Help" msgstr "Po_moć" #: malcontent-control/main.ui:269 msgid "_About Parental Controls" msgstr "" #. Translators: the brief summary of the application as it appears in a software center. #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:12 #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:4 msgid "Set parental controls and monitor usage by users" msgstr "" #. Translators: These are the application description paragraphs in the AppData file. #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:16 msgid "" "Manage users’ parental controls restrictions, controlling how long they can " "use the computer for, what software they can install, and what installed " "software they can run." msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:39 msgid "The GNOME Project" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:50 #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:59 msgid "Minor improvements to parental controls application UI" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:51 msgid "Add a user manual" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:52 msgid "Translation updates" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:60 msgid "Translations to Ukrainian and Polish" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:67 msgid "Improve parental controls application UI and add icon" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:68 msgid "Support for indicating which accounts are parent accounts" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:75 msgid "Initial release of basic parental controls application" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:76 msgid "Support for setting app installation and run restrictions on users" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:83 msgid "Maintenance release of underlying parental controls library" msgstr "" #. Translators: Do NOT translate or transliterate this text (this is an icon file name)! #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:7 msgid "org.freedesktop.MalcontentControl" msgstr "" #. Translators: Search terms to find this application. Do NOT translate or localise the semicolons! The list MUST also end with a semicolon! #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:13 msgid "" "parental controls;screen time;app restrictions;web browser restrictions;oars;" "usage;usage limit;kid;child;" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.policy.in:9 msgid "Manage parental controls" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.policy.in:10 msgid "Authentication is required to read and change user parental controls" msgstr "" #: malcontent-control/user-selector.c:426 msgid "Your account" msgstr "Vaš nalog" #. Always allow root, to avoid a situation where this PAM module prevents #. * all users logging in with no way of recovery. #: pam/pam_malcontent.c:142 pam/pam_malcontent.c:188 #, c-format msgid "User ‘%s’ has no time limits enabled" msgstr "" #: pam/pam_malcontent.c:151 pam/pam_malcontent.c:172 #, c-format msgid "Error getting session limits for user ‘%s’: %s" msgstr "" #: pam/pam_malcontent.c:182 #, c-format msgid "User ‘%s’ has no time remaining" msgstr "" #: pam/pam_malcontent.c:200 #, c-format msgid "Error setting time limit on login session: %s" msgstr "" #~ msgid "No cartoon violence" #~ msgstr "Nema crtanog nasilja" #~ msgid "Cartoon characters in unsafe situations" #~ msgstr "Likovi iz crtaća u nepoželjnim situacijama" #~ msgid "Cartoon characters in aggressive conflict" #~ msgstr "Likovi iz crtaća u agresivnom sukobu" #~ msgid "Graphic violence involving cartoon characters" #~ msgstr "Grafičko nasilje koje uključuje likove iz crtaća" #~ msgid "No fantasy violence" #~ msgstr "Nema fantazijskog nasilja" #~ msgid "Characters in unsafe situations easily distinguishable from reality" #~ msgstr "" #~ "Likovi u nesigurnim situacijama koje se lako razlikuju od stvarnosti" #~ msgid "" #~ "Characters in aggressive conflict easily distinguishable from reality" #~ msgstr "Likovi u agresivnom sukobu koji se lako razlikuje od stvarnosti" #~ msgid "Graphic violence easily distinguishable from reality" #~ msgstr "Grafičko nasilje koje se lako razlikuje od stvarnosti" #~ msgid "No realistic violence" #~ msgstr "Nema realističnog nasilja" #~ msgid "Mildly realistic characters in unsafe situations" #~ msgstr "Blago stvarni likovi u nesigurnim situacijama" #~ msgid "Depictions of realistic characters in aggressive conflict" #~ msgstr "Prikaz stvarnih likova u agresivnom sukobu" #~ msgid "Graphic violence involving realistic characters" #~ msgstr "Grafičko nasilje koje uključuje stvarne likove" #~ msgid "No bloodshed" #~ msgstr "Nema krvoprolića" #~ msgid "Unrealistic bloodshed" #~ msgstr "Nerealno krvoproliće" #~ msgid "Realistic bloodshed" #~ msgstr "Realno krvoproliće" #~ msgid "Depictions of bloodshed and the mutilation of body parts" #~ msgstr "Prikaz krvoprolića i sakaćenje delova tela" #~ msgid "No sexual violence" #~ msgstr "Nema seksualnog nasilja" #~ msgid "Rape or other violent sexual behavior" #~ msgstr "Silovanje ili drugo nasilno seksualno ponašanje" #~ msgid "No references to alcohol" #~ msgstr "Nema upućivanja na alkohol" #~ msgid "References to alcoholic beverages" #~ msgstr "Upućivanje na alkoholna pića" #~ msgid "Use of alcoholic beverages" #~ msgstr "Upotreba alkoholnih pića" #~ msgid "No references to illicit drugs" #~ msgstr "Nema upućivanja na zabranjene droge" #~ msgid "References to illicit drugs" #~ msgstr "Upućivanje na zabranjene droge" #~ msgid "Use of illicit drugs" #~ msgstr "Upotreba zabranjenih droga" #~ msgid "References to tobacco products" #~ msgstr "Upućivanje na duvanske proizvode" #~ msgid "Use of tobacco products" #~ msgstr "Upotreba duvanskih proizvoda" #~ msgid "No nudity of any sort" #~ msgstr "Nema bilo kakve nagosti" #~ msgid "Brief artistic nudity" #~ msgstr "Kratka umetnička golotinja" #~ msgid "Prolonged nudity" #~ msgstr "Produžena golotinja" #~ msgid "No references or depictions of sexual nature" #~ msgstr "Nema seksualnih prikaza ili upućivanja" #~ msgid "Provocative references or depictions" #~ msgstr "Provokativne upute ili prikazi" #~ msgid "Sexual references or depictions" #~ msgstr "Seksualne upute ili prikazi" #~ msgid "Graphic sexual behavior" #~ msgstr "Grafičko seksualno ponašanje" #~ msgid "No profanity of any kind" #~ msgstr "Nema bilo kakve vulgarnosti" #~ msgid "Mild or infrequent use of profanity" #~ msgstr "Blaga ili retka upotreba psovki" #~ msgid "Moderate use of profanity" #~ msgstr "Umerena upotreba psovki" #~ msgid "Strong or frequent use of profanity" #~ msgstr "Jaka ili česta upotreba psovki" #~ msgid "No inappropriate humor" #~ msgstr "Nema neumesnog humora" #~ msgid "Slapstick humor" #~ msgstr "Urnebesna komedija" #~ msgid "Vulgar or bathroom humor" #~ msgstr "Vulgaran ili neumesni humor" #~ msgid "Mature or sexual humor" #~ msgstr "Erotski i humor za odrasle" #~ msgid "No discriminatory language of any kind" #~ msgstr "Nema bilo kakvog diskriminacionog govora" #~ msgid "Negativity towards a specific group of people" #~ msgstr "Negativnost prema određenoj grupi ljudi" #~ msgid "Discrimination designed to cause emotional harm" #~ msgstr "Diskriminacija osmišljena da izazove emotivnu povredu" #~ msgid "Explicit discrimination based on gender, sexuality, race or religion" #~ msgstr "" #~ "Eksplicitna diskriminacija na osnovu pola, seksualnosti, rase ili " #~ "veroispovesti" #~ msgid "No advertising of any kind" #~ msgstr "Nema bilo kakvog oglašavanja" #~ msgid "Product placement" #~ msgstr "Plasman proizvoda" #~ msgid "Explicit references to specific brands or trademarked products" #~ msgstr "" #~ "Eksplicitno upućivanje na naročite robne marke ili zaštićene proizvode" #~ msgid "Users are encouraged to purchase specific real-world items" #~ msgstr "Korisnici se ohrabruju da kupuju određene stavke u stvarnom svetu" #~ msgid "No gambling of any kind" #~ msgstr "Nema bilo kakvog kockanja" #~ msgid "Gambling on random events using tokens or credits" #~ msgstr "Kockanje na nasumičnim događajima koji koriste žetone ili kredite" #~ msgid "Gambling using “play” money" #~ msgstr "Kockanje koje koristi „igrački“ novac (play)" #~ msgid "Gambling using real money" #~ msgstr "Kockanje koje koristi stvarni novac" #~ msgid "No ability to spend money" #~ msgstr "Ne može se trošiti stvaran novac" #~ msgid "Users are encouraged to donate real money" #~ msgstr "Korisnici se ohrabruju da doniraju stvarni novac" #~ msgid "Ability to spend real money in-game" #~ msgstr "Sposobnost potrošnje stvarnog novca u igri" #~ msgid "No way to chat with other users" #~ msgstr "Nema načina za ćaskanje sa drugim korisnicima" #~ msgid "Moderated chat functionality between users" #~ msgstr "Umerena mogućnost ćaskanja između korisnika" #~ msgid "Uncontrolled chat functionality between users" #~ msgstr "Nekontrolisana mogućnost ćaskanja između korisnika" #~ msgid "No way to talk with other users" #~ msgstr "Nema načina za razgovor sa drugim korisnicima" #~ msgid "Uncontrolled audio or video chat functionality between users" #~ msgstr "Nekontrolisana mogućnost zvučnog i video ćaskanja između korisnika" #~ msgid "No sharing of social network usernames or email addresses" #~ msgstr "" #~ "Nema razmene korisničkih imena društvenih mreža ili adresa elektronske " #~ "pošte" #~ msgid "Sharing social network usernames or email addresses" #~ msgstr "" #~ "Razmena korisničkih imena društvenih mreža ili adresa elektronske pošte" #~ msgid "No sharing of user information with 3rd parties" #~ msgstr "Nema razmene korisničkih podataka sa trećim stranama" #~ msgid "Checking for the latest application version" #~ msgstr "Proverava poslednje izdanje programa" #~ msgid "Sharing diagnostic data that does not let others identify the user" #~ msgstr "" #~ "Dele se dijagnostički podaci preko kojih drugi ne mogu prepoznati " #~ "korisnika" #~ msgid "Sharing information that lets others identify the user" #~ msgstr "" #~ "Dele se dijagnostički podaci preko kojih drugi mogu prepoznati korisnika" #~ msgid "No sharing of physical location to other users" #~ msgstr "Nema razmene fizičke lokacije sa drugim korisnicima" #~ msgid "Sharing physical location to other users" #~ msgstr "Razmena stvarnih lokacija sa drugim korisnicima" #~ msgid "No references to homosexuality" #~ msgstr "Nema upućivanja na homoseksualnost" #~ msgid "Indirect references to homosexuality" #~ msgstr "Posredna upućivanja na homoseksualnost" #~ msgid "Kissing between people of the same gender" #~ msgstr "Ljubljenje između osoba istog pola" #~ msgid "Graphic sexual behavior between people of the same gender" #~ msgstr "Grafičko seksualno ponašanje između osoba istog pola" #~ msgid "No references to prostitution" #~ msgstr "Nema upućivanja na prostituciju" #~ msgid "Indirect references to prostitution" #~ msgstr "Posredna upućivanja na prostituciju" #~ msgid "Graphic depictions of the act of prostitution" #~ msgstr "Grafički prikazi čina prostitucije" #~ msgid "No references to adultery" #~ msgstr "Nema upućivanja na preljubu" #~ msgid "Indirect references to adultery" #~ msgstr "Posredna upućivanja na preljubu" #~ msgid "Graphic depictions of the act of adultery" #~ msgstr "Grafički prikazi čina preljube" #~ msgid "No sexualized characters" #~ msgstr "Nema seksualizovanih karaktera" #~ msgid "Scantily clad human characters" #~ msgstr "Oskudno obučeni ljudski karakteri" #~ msgid "Overtly sexualized human characters" #~ msgstr "Preterano seksualizovani ljudski karakteri" #~ msgid "No references to desecration" #~ msgstr "Nema upućivanja na skrnavljenje" #~ msgid "Depictions of modern-day human desecration" #~ msgstr "Prikazi savremenog ljudskog skrnavljenja" #~ msgid "Graphic depictions of modern-day desecration" #~ msgstr "Grafički prikazi savremenog skrnavljenja" #~ msgid "No visible dead human remains" #~ msgstr "Bez vidljivih ljudskih posmrtnih ostataka" #~ msgid "Visible dead human remains" #~ msgstr "Sa vidljivim ljudskim posmrtnim ostacima" #~ msgid "Dead human remains that are exposed to the elements" #~ msgstr "Posmrtni ostaci ljudi koji su izloženi vremenskim prilikama" #~ msgid "Graphic depictions of desecration of human bodies" #~ msgstr "Grafički prikazi skrnavljenja ljudskih tela" #~ msgid "No references to slavery" #~ msgstr "Nema upućivanja na robovlasništvo" #~ msgid "Depictions of modern-day slavery" #~ msgstr "Prikazi savremenog robovlasništva" #~ msgid "Graphic depictions of modern-day slavery" #~ msgstr "Grafički prikazi savremenog robovlasništva" malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/po/sv.po000066400000000000000000000404541505556674000232110ustar00rootroot00000000000000# Swedish translations for malcontent package. # Copyright © 2020-2024 malcontent's COPYRIGHT HOLDER # This file is distributed under the same license as the malcontent package. # Automatically generated, 2020. # Anders Jonsson , 2020, 2023, 2024. # msgid "" msgstr "" "Project-Id-Version: malcontent\n" "Report-Msgid-Bugs-To: https://gitlab.freedesktop.org/pwithnall/malcontent/" "issues\n" "POT-Creation-Date: 2024-03-26 03:25+0000\n" "PO-Revision-Date: 2024-03-17 22:41+0100\n" "Last-Translator: Anders Jonsson \n" "Language-Team: Swedish \n" "Language: sv\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Poedit 3.4.2\n" #: accounts-service/com.endlessm.ParentalControls.policy.in:4 msgid "Change your own app filter" msgstr "Ändra ditt eget programfilter" #: accounts-service/com.endlessm.ParentalControls.policy.in:5 msgid "Authentication is required to change your app filter." msgstr "Autentisering krävs för att ändra ditt programfilter." #: accounts-service/com.endlessm.ParentalControls.policy.in:14 msgid "Read your own app filter" msgstr "Läs ditt eget programfilter" #: accounts-service/com.endlessm.ParentalControls.policy.in:15 msgid "Authentication is required to read your app filter." msgstr "Autentisering krävs för att läsa ditt programfilter." #: accounts-service/com.endlessm.ParentalControls.policy.in:24 msgid "Change another user’s app filter" msgstr "Ändra en annan användares programfilter" #: accounts-service/com.endlessm.ParentalControls.policy.in:25 msgid "Authentication is required to change another user’s app filter." msgstr "Autentisering krävs för att ändra en annan användares programfilter." #: accounts-service/com.endlessm.ParentalControls.policy.in:34 msgid "Read another user’s app filter" msgstr "Läs en annan användares programfilter" #: accounts-service/com.endlessm.ParentalControls.policy.in:35 msgid "Authentication is required to read another user’s app filter." msgstr "Autentisering krävs för att läsa en annan användares programfilter." #: accounts-service/com.endlessm.ParentalControls.policy.in:44 msgid "Change your own session limits" msgstr "Ändra dina egna sessionsgränser" #: accounts-service/com.endlessm.ParentalControls.policy.in:45 msgid "Authentication is required to change your session limits." msgstr "Autentisering krävs för att ändra dina sessionsgränser." #: accounts-service/com.endlessm.ParentalControls.policy.in:54 msgid "Read your own session limits" msgstr "Läs dina egna sessionsgränser" #: accounts-service/com.endlessm.ParentalControls.policy.in:55 msgid "Authentication is required to read your session limits." msgstr "Autentisering krävs för att läsa dina sessionsgränser." #: accounts-service/com.endlessm.ParentalControls.policy.in:64 msgid "Change another user’s session limits" msgstr "Ändra en annan användares sessionsgränser" #: accounts-service/com.endlessm.ParentalControls.policy.in:65 msgid "Authentication is required to change another user’s session limits." msgstr "Autentisering krävs för att ändra en annan användares sessionsgränser." #: accounts-service/com.endlessm.ParentalControls.policy.in:74 msgid "Read another user’s session limits" msgstr "Läs en annan användares sessionsgränser" #: accounts-service/com.endlessm.ParentalControls.policy.in:75 msgid "Authentication is required to read another user’s session limits." msgstr "Autentisering krävs för att läsa en annan användares sessionsgränser." #: accounts-service/com.endlessm.ParentalControls.policy.in:84 msgid "Change your own account info" msgstr "Ändra din egen kontoinformation" #: accounts-service/com.endlessm.ParentalControls.policy.in:85 msgid "Authentication is required to change your account info." msgstr "Autentisering krävs för att ändra din kontoinformation." #: accounts-service/com.endlessm.ParentalControls.policy.in:94 msgid "Read your own account info" msgstr "Läs din egen kontoinformation" #: accounts-service/com.endlessm.ParentalControls.policy.in:95 msgid "Authentication is required to read your account info." msgstr "Autentisering krävs för att läsa din kontoinformation." #: accounts-service/com.endlessm.ParentalControls.policy.in:104 msgid "Change another user’s account info" msgstr "Ändra en annan användares kontoinformation" #: accounts-service/com.endlessm.ParentalControls.policy.in:105 msgid "Authentication is required to change another user’s account info." msgstr "" "Autentisering krävs för att ändra en annan användares kontoinformation." #: accounts-service/com.endlessm.ParentalControls.policy.in:114 msgid "Read another user’s account info" msgstr "Läs en annan användares kontoinformation" #: accounts-service/com.endlessm.ParentalControls.policy.in:115 msgid "Authentication is required to read another user’s account info." msgstr "Autentisering krävs för att läsa en annan användares kontoinformation." #: libmalcontent/app-filter.c:696 #, c-format msgid "App filter for user %u was in an unrecognized format" msgstr "Programfilter för användare %u var i ett okänt format" #: libmalcontent/app-filter.c:727 #, c-format msgid "OARS filter for user %u has an unrecognized kind ‘%s’" msgstr "OARS-filter för användare %u har en okänd typ ”%s”" #: libmalcontent/manager.c:283 libmalcontent/manager.c:420 #: libmalcontent/manager.c:803 #, c-format msgid "Not allowed to query parental controls data for user %u" msgstr "Ej tillåtet att efterfråga föräldrakontrollsdata för användare %u" #: libmalcontent/manager.c:288 #, c-format msgid "User %u does not exist" msgstr "Användare %u finns inte" #: libmalcontent/manager.c:296 msgid "System accounts service not available" msgstr "Systemkontotjänst ej tillgänglig" #: libmalcontent/manager.c:402 msgid "App filtering is globally disabled" msgstr "Programfiltrering är globalt inaktiverad" #: libmalcontent/manager.c:785 msgid "Session limits are globally disabled" msgstr "Sessionsgränser är globalt inaktiverade" #: libmalcontent/session-limits.c:306 #, c-format msgid "Session limit for user %u was in an unrecognized format" msgstr "Sessionsgräns för användare %u var i ett okänt format" #: libmalcontent/session-limits.c:328 #, c-format msgid "Session limit for user %u has an unrecognized type ‘%u’" msgstr "Sessionsgräns för användare %u har en okänd typ ”%u”" #: libmalcontent/session-limits.c:346 #, c-format msgid "Session limit for user %u has invalid daily schedule %u–%u" msgstr "Sessionsgräns för användare %u har ett ogiltigt dagsschema %u–%u" #. Translators: the placeholder is a user’s full name #: libmalcontent-ui/restrict-applications-dialog.c:256 #, c-format msgid "Restrict %s from using the following installed applications." msgstr "Begränsa %s från att använda följande installerade program." #: libmalcontent-ui/restrict-applications-dialog.ui:6 msgid "Restrict Applications" msgstr "Begränsa program" #: libmalcontent-ui/restrict-applications-dialog.ui:22 msgid "Search for applications…" msgstr "Sök efter program…" #: libmalcontent-ui/restrict-applications-selector.ui:13 msgid "No applications found to restrict." msgstr "Inga program att begränsa hittades." #. Translators: this is the full name for an unknown user account. #: libmalcontent-ui/user-controls.c:198 libmalcontent-ui/user-controls.c:209 msgid "unknown" msgstr "okänd" #: libmalcontent-ui/user-controls.c:306 libmalcontent-ui/user-controls.c:394 #: libmalcontent-ui/user-controls.c:647 msgid "Unrestricted" msgstr "Obegränsad" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:476 #, c-format msgid "" "Prevents %s from running web browsers. Limited web content may still be " "available in other applications." msgstr "" "Förhindrar %s från att köra webbläsare. Begränsat webbinnehåll kan " "fortfarande finnas tillgängligt i andra program." #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:481 #, c-format msgid "Prevents specified applications from being used by %s." msgstr "Förhindrar angivna program från att användas av %s." #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:486 #, c-format msgid "Prevents %s from installing applications." msgstr "Förhindrar %s från att installera program." #: libmalcontent-ui/user-controls.ui:25 msgid "Application Usage Restrictions" msgstr "Begränsningar av programanvändning" #: libmalcontent-ui/user-controls.ui:28 msgid "Restrict _Web Browsers" msgstr "Begränsa _webbläsare" #: libmalcontent-ui/user-controls.ui:51 msgid "_Restrict Applications" msgstr "_Begränsa program" #: libmalcontent-ui/user-controls.ui:73 msgid "Software Installation Restrictions" msgstr "Begränsningar av programvaruinstallation" #: libmalcontent-ui/user-controls.ui:77 msgid "Restrict Application _Installation" msgstr "Begränsa _installation av program" #: libmalcontent-ui/user-controls.ui:99 msgid "Application _Suitability" msgstr "_Lämplighet för program" #: libmalcontent-ui/user-controls.ui:102 msgid "" "Restricts the browsing or installation of applications unsuitable for this " "age or younger." msgstr "" "Begränsar bläddring bland eller installation av program som är olämpliga för " "denna ålder och yngre." #. Translators: This documents the --user command line option to malcontent-control: #: malcontent-control/application.c:102 msgid "User to select in the UI" msgstr "Användare att välja i användargränssnittet" #. Translators: This is a placeholder for a command line argument value: #: malcontent-control/application.c:104 msgid "USERNAME" msgstr "ANVÄNDARNAMN" #: malcontent-control/application.c:116 msgid "— view and edit parental controls" msgstr "— visa och redigera föräldrakontroller" #. Translators: This is the title of the main window #. Translators: the name of the application as it appears in a software center #: malcontent-control/application.c:123 malcontent-control/main.ui:17 #: malcontent-control/org.freedesktop.MalcontentControl.metainfo.xml.in:9 #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:3 msgid "Parental Controls" msgstr "Föräldrakontroller" #: malcontent-control/application.c:309 msgid "Copyright © 2019, 2020 Endless Mobile, Inc." msgstr "Copyright © 2019, 2020 Endless Mobile, Inc." #. Translators: this should be "translated" to the #. names of people who have translated Malcontent into #. this language, one per line. #: malcontent-control/application.c:314 msgid "translator-credits" msgstr "Anders Jonsson " #. Translators: "Malcontent" is the brand name of this #. project, so should not be translated. #: malcontent-control/application.c:320 msgid "Malcontent Website" msgstr "Webbplats för Malcontent" #: malcontent-control/application.c:340 msgid "The help contents could not be displayed" msgstr "Hjälpinnehållet kunde inte visas" #: malcontent-control/application.c:389 msgid "Failed to load user data from the system" msgstr "Misslyckades med att läsa in användardata från systemet" #: malcontent-control/application.c:391 msgid "Please make sure that the AccountsService is installed and enabled." msgstr "Försäkra dig om att AccountsService är installerat och aktiverat." #. Translators: Replace the link to commonsensemedia.org with some #. * localised guidance for parents/carers on how to set restrictions on #. * their child/caree in a responsible way which is in keeping with the #. * best practice and culture of the region. If no suitable localised #. * guidance exists, and if the default commonsensemedia.org link is not #. * suitable, please file an issue against malcontent so we can discuss #. * further! #. * https://gitlab.freedesktop.org/pwithnall/malcontent/-/issues/new #. #: malcontent-control/application.c:424 #, c-format msgid "" "It’s recommended that restrictions are set as part of an ongoing " "conversation with %s. Read guidance on what to consider." msgstr "" "Det rekommenderas att begränsningar ställs in som en del av en pågående " "diskussion med %s. Du kan läsa denna guide (på engelska) om vad som finns " "att ta i beaktande." #: malcontent-control/carousel.ui:38 msgid "Previous Page" msgstr "Föregående sida" #: malcontent-control/carousel.ui:57 msgid "Next Page" msgstr "Nästa sida" #: malcontent-control/main.ui:87 msgid "Permission Required" msgstr "Behörighet krävs" #: malcontent-control/main.ui:88 msgid "" "Permission is required to view and change user parental controls settings." msgstr "" "Behörighet krävs för att visa och ändra inställningar för föräldrakontroll " "för användare." #: malcontent-control/main.ui:110 msgid "No Standard User Accounts" msgstr "Inga standardanvändarkonton" #: malcontent-control/main.ui:111 msgid "" "Parental controls can only be applied to standard user\n" "accounts. These can be created in the user settings." msgstr "" "Föräldrakontroller kan endast tillämpas för\n" "standardanvändarkonton. Dessa kan skapas i\n" "användarinställningarna." #: malcontent-control/main.ui:115 msgid "_User Settings" msgstr "_Användarinställningar" #: malcontent-control/main.ui:138 msgid "Loading…" msgstr "Läser in…" #: malcontent-control/main.ui:171 msgid "_Help" msgstr "_Hjälp" #: malcontent-control/main.ui:175 msgid "_About Parental Controls" msgstr "_Om Föräldrakontroller" #. Translators: the brief summary of the application as it appears in a software center. #: malcontent-control/org.freedesktop.MalcontentControl.metainfo.xml.in:12 #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:4 msgid "Set parental controls and monitor usage by users" msgstr "Ställ in föräldrakontroller och övervaka användares användning" #. Translators: These are the application description paragraphs in the AppData file. #: malcontent-control/org.freedesktop.MalcontentControl.metainfo.xml.in:16 msgid "" "Manage users’ parental controls restrictions, controlling how long they can " "use the computer for, what software they can install, and what installed " "software they can run." msgstr "" "Hantera användares föräldrakontrollsbegränsningar, vilket styr hur länge de " "kan använda datorn, vilken programvara de kan installera, och vilken " "installerad programvara som de kan köra." #: malcontent-control/org.freedesktop.MalcontentControl.metainfo.xml.in:25 msgid "Main window" msgstr "Huvudfönster" #. Translators: Search terms to find this application. Do NOT translate or localise the semicolons! The list MUST also end with a semicolon! #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:13 msgid "" "parental controls;screen time;app restrictions;web browser restrictions;oars;" "usage;usage limit;kid;child;" msgstr "" "föräldrakontroller;skärmtid;programbegränsningar;appbegränsningar;" "webbläsarbegränsningar;oars;användning;användningsgräns;barn;" #: malcontent-control/org.freedesktop.MalcontentControl.policy.in:9 msgid "Manage parental controls" msgstr "Hantera föräldrakontroller" #: malcontent-control/org.freedesktop.MalcontentControl.policy.in:10 msgid "Authentication is required to read and change user parental controls" msgstr "" "Autentisering krävs för att läsa och ändra föräldrakontroller för användare" #: malcontent-control/user-selector.c:426 msgid "Your account" msgstr "Ditt konto" #. Always allow root, to avoid a situation where this PAM module prevents #. * all users logging in with no way of recovery. #: pam/pam_malcontent.c:142 pam/pam_malcontent.c:188 #, c-format msgid "User ‘%s’ has no time limits enabled" msgstr "Användaren ”%s” har inga tidsgränser aktiverade" #: pam/pam_malcontent.c:151 pam/pam_malcontent.c:172 #, c-format msgid "Error getting session limits for user ‘%s’: %s" msgstr "Fel vid hämtning av sessionsgränser för användaren ”%s”: %s" #: pam/pam_malcontent.c:182 #, c-format msgid "User ‘%s’ has no time remaining" msgstr "Användaren ”%s” har ingen återstående tid" #: pam/pam_malcontent.c:200 #, c-format msgid "Error setting time limit on login session: %s" msgstr "Fel vid inställning av tidsgräns på inloggningssession: %s" malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/po/th.po000066400000000000000000000554761505556674000232060ustar00rootroot00000000000000# Thai translations for malcontent package. # Copyright (C) 2020 THE malcontent'S COPYRIGHT HOLDER # This file is distributed under the same license as the malcontent package. # Automatically generated, 2020. # msgid "" msgstr "" "Project-Id-Version: malcontent\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-06-10 12:04+0100\n" "PO-Revision-Date: 2020-04-15 13:42+0100\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: th\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: accounts-service/com.endlessm.ParentalControls.policy.in:4 msgid "Change your own app filter" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:5 msgid "Authentication is required to change your app filter." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:14 msgid "Read your own app filter" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:15 msgid "Authentication is required to read your app filter." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:24 msgid "Change another user’s app filter" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:25 msgid "Authentication is required to change another user’s app filter." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:34 msgid "Read another user’s app filter" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:35 msgid "Authentication is required to read another user’s app filter." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:44 msgid "Change your own session limits" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:45 msgid "Authentication is required to change your session limits." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:54 msgid "Read your own session limits" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:55 msgid "Authentication is required to read your session limits." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:64 msgid "Change another user’s session limits" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:65 msgid "Authentication is required to change another user’s session limits." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:74 msgid "Read another user’s session limits" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:75 msgid "Authentication is required to read another user’s session limits." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:84 msgid "Change your own account info" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:85 msgid "Authentication is required to change your account info." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:94 msgid "Read your own account info" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:95 msgid "Authentication is required to read your account info." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:104 msgid "Change another user’s account info" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:105 msgid "Authentication is required to change another user’s account info." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:114 msgid "Read another user’s account info" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:115 msgid "Authentication is required to read another user’s account info." msgstr "" #: libmalcontent/app-filter.c:694 #, c-format msgid "App filter for user %u was in an unrecognized format" msgstr "" #: libmalcontent/app-filter.c:725 #, c-format msgid "OARS filter for user %u has an unrecognized kind ‘%s’" msgstr "" #: libmalcontent/manager.c:283 libmalcontent/manager.c:412 #, c-format msgid "Not allowed to query app filter data for user %u" msgstr "" #: libmalcontent/manager.c:288 #, c-format msgid "User %u does not exist" msgstr "" #: libmalcontent/manager.c:394 msgid "App filtering is globally disabled" msgstr "" #: libmalcontent/manager.c:777 msgid "Session limits are globally disabled" msgstr "" #: libmalcontent/manager.c:795 #, c-format msgid "Not allowed to query session limits data for user %u" msgstr "" #: libmalcontent/session-limits.c:306 #, c-format msgid "Session limit for user %u was in an unrecognized format" msgstr "" #: libmalcontent/session-limits.c:328 #, c-format msgid "Session limit for user %u has an unrecognized type ‘%u’" msgstr "" #: libmalcontent/session-limits.c:346 #, c-format msgid "Session limit for user %u has invalid daily schedule %u–%u" msgstr "" #. TRANSLATORS: This is the formatting of English and localized name #. of the rating e.g. "Adults Only (solo adultos)" #: libmalcontent-ui/gs-content-rating.c:75 #, c-format msgid "%s (%s)" msgstr "" #: libmalcontent-ui/gs-content-rating.c:209 msgid "General" msgstr "" #: libmalcontent-ui/gs-content-rating.c:218 msgid "ALL" msgstr "" #: libmalcontent-ui/gs-content-rating.c:222 #: libmalcontent-ui/gs-content-rating.c:485 msgid "Adults Only" msgstr "" #: libmalcontent-ui/gs-content-rating.c:224 #: libmalcontent-ui/gs-content-rating.c:484 msgid "Mature" msgstr "" #: libmalcontent-ui/gs-content-rating.c:226 #: libmalcontent-ui/gs-content-rating.c:483 msgid "Teen" msgstr "" #: libmalcontent-ui/gs-content-rating.c:228 #: libmalcontent-ui/gs-content-rating.c:482 msgid "Everyone 10+" msgstr "" #: libmalcontent-ui/gs-content-rating.c:230 #: libmalcontent-ui/gs-content-rating.c:481 msgid "Everyone" msgstr "" #: libmalcontent-ui/gs-content-rating.c:232 #: libmalcontent-ui/gs-content-rating.c:480 msgid "Early Childhood" msgstr "" #. Translators: the placeholder is a user’s full name #: libmalcontent-ui/restrict-applications-dialog.c:222 #, c-format msgid "Restrict %s from using the following installed applications." msgstr "" #: libmalcontent-ui/restrict-applications-dialog.ui:6 #: libmalcontent-ui/restrict-applications-dialog.ui:12 msgid "Restrict Applications" msgstr "" #: libmalcontent-ui/restrict-applications-selector.ui:24 msgid "No applications found to restrict." msgstr "" #. Translators: this is the full name for an unknown user account. #: libmalcontent-ui/user-controls.c:242 libmalcontent-ui/user-controls.c:253 msgid "unknown" msgstr "" #: libmalcontent-ui/user-controls.c:338 libmalcontent-ui/user-controls.c:425 #: libmalcontent-ui/user-controls.c:711 msgid "All Ages" msgstr "" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:514 #, c-format msgid "" "Prevents %s from running web browsers. Limited web content may still be " "available in other applications." msgstr "" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:519 #, c-format msgid "Prevents specified applications from being used by %s." msgstr "" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:524 #, c-format msgid "Prevents %s from installing applications." msgstr "" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:529 #, c-format msgid "Applications installed by %s will not appear for other users." msgstr "" #: libmalcontent-ui/user-controls.ui:17 msgid "Application Usage Restrictions" msgstr "" #: libmalcontent-ui/user-controls.ui:68 msgid "Restrict _Web Browsers" msgstr "" #: libmalcontent-ui/user-controls.ui:152 msgid "_Restrict Applications" msgstr "" #: libmalcontent-ui/user-controls.ui:231 msgid "Software Installation Restrictions" msgstr "" #: libmalcontent-ui/user-controls.ui:281 msgid "Restrict Application _Installation" msgstr "" #: libmalcontent-ui/user-controls.ui:366 msgid "Restrict Application Installation for _Others" msgstr "" #: libmalcontent-ui/user-controls.ui:451 msgid "Application _Suitability" msgstr "" #: libmalcontent-ui/user-controls.ui:473 msgid "" "Restricts browsing or installation of applications to applications suitable " "for certain ages or above." msgstr "" #. Translators: This is the title of the main window #. Translators: the name of the application as it appears in a software center #: malcontent-control/application.c:105 malcontent-control/main.ui:12 #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:9 #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:3 msgid "Parental Controls" msgstr "" #: malcontent-control/application.c:270 msgid "Copyright © 2019, 2020 Endless Mobile, Inc." msgstr "" #. Translators: this should be "translated" to the #. names of people who have translated Malcontent into #. this language, one per line. #: malcontent-control/application.c:275 msgid "translator-credits" msgstr "" #. Translators: "Malcontent" is the brand name of this #. project, so should not be translated. #: malcontent-control/application.c:281 msgid "Malcontent Website" msgstr "" #: malcontent-control/application.c:299 msgid "The help contents could not be displayed" msgstr "" #: malcontent-control/application.c:336 msgid "Failed to load user data from the system" msgstr "" #: malcontent-control/application.c:338 msgid "Please make sure that the AccountsService is installed and enabled." msgstr "" #: malcontent-control/carousel.ui:48 msgid "Previous Page" msgstr "" #: malcontent-control/carousel.ui:74 msgid "Next Page" msgstr "" #: malcontent-control/main.ui:93 msgid "Permission Required" msgstr "" #: malcontent-control/main.ui:107 msgid "" "Permission is required to view and change user parental controls settings." msgstr "" #: malcontent-control/main.ui:148 msgid "No Child Users Configured" msgstr "" #: malcontent-control/main.ui:162 msgid "" "No child users are currently set up on the system. Create one before setting " "up their parental controls." msgstr "" #: malcontent-control/main.ui:174 msgid "Create _Child User" msgstr "" #: malcontent-control/main.ui:202 msgid "Loading…" msgstr "" #: malcontent-control/main.ui:265 msgid "_Help" msgstr "_วิธีใช้" #: malcontent-control/main.ui:269 msgid "_About Parental Controls" msgstr "" #. Translators: the brief summary of the application as it appears in a software center. #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:12 #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:4 msgid "Set parental controls and monitor usage by users" msgstr "" #. Translators: These are the application description paragraphs in the AppData file. #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:16 msgid "" "Manage users’ parental controls restrictions, controlling how long they can " "use the computer for, what software they can install, and what installed " "software they can run." msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:39 msgid "The GNOME Project" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:50 #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:59 msgid "Minor improvements to parental controls application UI" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:51 msgid "Add a user manual" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:52 msgid "Translation updates" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:60 msgid "Translations to Ukrainian and Polish" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:67 msgid "Improve parental controls application UI and add icon" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:68 msgid "Support for indicating which accounts are parent accounts" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:75 msgid "Initial release of basic parental controls application" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:76 msgid "Support for setting app installation and run restrictions on users" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:83 msgid "Maintenance release of underlying parental controls library" msgstr "" #. Translators: Do NOT translate or transliterate this text (this is an icon file name)! #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:7 msgid "org.freedesktop.MalcontentControl" msgstr "" #. Translators: Search terms to find this application. Do NOT translate or localise the semicolons! The list MUST also end with a semicolon! #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:13 msgid "" "parental controls;screen time;app restrictions;web browser restrictions;oars;" "usage;usage limit;kid;child;" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.policy.in:9 msgid "Manage parental controls" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.policy.in:10 msgid "Authentication is required to read and change user parental controls" msgstr "" #: malcontent-control/user-selector.c:426 msgid "Your account" msgstr "บัญชีผู้ใช้ของคุณ" #. Always allow root, to avoid a situation where this PAM module prevents #. * all users logging in with no way of recovery. #: pam/pam_malcontent.c:142 pam/pam_malcontent.c:188 #, c-format msgid "User ‘%s’ has no time limits enabled" msgstr "" #: pam/pam_malcontent.c:151 pam/pam_malcontent.c:172 #, c-format msgid "Error getting session limits for user ‘%s’: %s" msgstr "" #: pam/pam_malcontent.c:182 #, c-format msgid "User ‘%s’ has no time remaining" msgstr "" #: pam/pam_malcontent.c:200 #, c-format msgid "Error setting time limit on login session: %s" msgstr "" #~ msgid "No cartoon violence" #~ msgstr "ไม่แสดงความรุนแรงแบบการ์ตูน" #~ msgid "Cartoon characters in unsafe situations" #~ msgstr "ตัวละครการ์ตูนในสถานการณ์ที่ไม่ปลอดภัย" #~ msgid "Cartoon characters in aggressive conflict" #~ msgstr "ตัวละครการ์ตูนในสถานการณ์ขัดแย้งรุนแรง" #~ msgid "Graphic violence involving cartoon characters" #~ msgstr "ภาพความรุนแรงของตัวละครการ์ตูน" #~ msgid "No fantasy violence" #~ msgstr "ไม่แสดงความรุนแรงแบบแฟนตาซี" #~ msgid "Characters in unsafe situations easily distinguishable from reality" #~ msgstr "ตัวละครในสถานการณ์ไม่ปลอดภัยซึ่งสามารถแยกแยะจากความเป็นจริงได้ง่าย" #~ msgid "" #~ "Characters in aggressive conflict easily distinguishable from reality" #~ msgstr "ตัวละครในสถานการณ์ขัดแย้งรุนแรงซึ่งสามารถแยกจากความเป็นจริงได้ง่าย" #~ msgid "Graphic violence easily distinguishable from reality" #~ msgstr "ภาพความรุนแรงที่สามารถแยกแยะออกจากความเป็นจริงได้ง่าย" #~ msgid "No realistic violence" #~ msgstr "ไม่แสดงความรุนแรงที่สมจริง" #~ msgid "Mildly realistic characters in unsafe situations" #~ msgstr "ตัวละครสมจริงเล็กน้อยในสถานการณ์ไม่ปลอดภัย" #~ msgid "Depictions of realistic characters in aggressive conflict" #~ msgstr "การบรรยายภาพตัวละครที่สมจริงในสถานการณ์ขัดแย้งรุนแรง" #~ msgid "Graphic violence involving realistic characters" #~ msgstr "ภาพความรุนแรงปรากฏตัวละครที่สมจริง" #~ msgid "No bloodshed" #~ msgstr "ไม่มีการนองเลือด" #~ msgid "Unrealistic bloodshed" #~ msgstr "ภาพการนองเลือดแบบไม่สมจริง" #~ msgid "Realistic bloodshed" #~ msgstr "การนองเลือดแบบสมจริง" #~ msgid "Depictions of bloodshed and the mutilation of body parts" #~ msgstr "การบรรยายการนองเลือดและการทำลายอวัยวะร่างกาย" #~ msgid "No sexual violence" #~ msgstr "ไม่แสดงความรุนแรงทางเพศ" #~ msgid "Rape or other violent sexual behavior" #~ msgstr "การข่มขืนหรือพฤติกรรมรุนแรงทางเพศอื่นๆ" #~ msgid "No references to alcohol" #~ msgstr "ไม่พบข้อมูลอ้างอิงเรื่องแอลกอฮอล์" #~ msgid "References to alcoholic beverages" #~ msgstr "การอ้างอิงถึงเครื่องดื่มแอลกอฮอล์" #~ msgid "Use of alcoholic beverages" #~ msgstr "การใช้เครื่องดื่มแอลกอฮอล์" #~ msgid "No references to illicit drugs" #~ msgstr "ไม่มีข้อมูลอ้างอิงถุงยาที่ผิดกฎหมาย" #~ msgid "References to illicit drugs" #~ msgstr "การอ้างอิงยาเสพติด" #~ msgid "Use of illicit drugs" #~ msgstr "การใช้ยาเสพติด" #~ msgid "References to tobacco products" #~ msgstr "อ้างอิงถึงผลิตภัณฑ์บุหรี่" #~ msgid "Use of tobacco products" #~ msgstr "การใช้ผลิตภัณฑ์บุหรี่" #~ msgid "No nudity of any sort" #~ msgstr "ไม่แสดงภาพเปลือยทุกประเภท" #~ msgid "Brief artistic nudity" #~ msgstr "ภาพเปลือยเชิงศิลปะในเวลาสั้นๆ" #~ msgid "Prolonged nudity" #~ msgstr "ภาพโป๊เปลือยต่อเนื่อง" #~ msgid "No references or depictions of sexual nature" #~ msgstr "ไม่แสดงการอ้างถึงหรือการบรรยายถึงเรื่องเพศ" #~ msgid "Provocative references or depictions" #~ msgstr "การอ้างอิงหรือบรรยายถึงสิ่งเร้าอารมณ์" #~ msgid "Sexual references or depictions" #~ msgstr "การอ้างอิงหรือบรรยานในเรื่องเพศ" #~ msgid "Graphic sexual behavior" #~ msgstr "พฤติกรรมรุนแรงทางเพศ" #~ msgid "No profanity of any kind" #~ msgstr "ไม่แสดงพฤติกรรมหยาบคายทุกรูปแบบ" #~ msgid "Mild or infrequent use of profanity" #~ msgstr "มีการใช้คำหยาบเล็กน้อยหรือไม่ปรากฏบ่อยครั้ง" #~ msgid "Moderate use of profanity" #~ msgstr "มีการใช้คำหยาบคายปานกลาง" #~ msgid "Strong or frequent use of profanity" #~ msgstr "มีการใช้คำหยาบรุนแรงหรือบ่อยครั้ง" #~ msgid "No inappropriate humor" #~ msgstr "ไม่มีเรื่องตลกที่ไม่เหมาะสม" #~ msgid "Slapstick humor" #~ msgstr "ตลกตีหัว" #~ msgid "Vulgar or bathroom humor" #~ msgstr "มุขตลกสัปดน" #~ msgid "Mature or sexual humor" #~ msgstr "มุขตลกสำหรับผู้ใหญ่หรือมีนัยยะทางเพศ" #~ msgid "No discriminatory language of any kind" #~ msgstr "ไม่มีการเลือกปฏิบัติทางภาษาใด" #~ msgid "Negativity towards a specific group of people" #~ msgstr "ทัศนะเชิงลบต่อกลุ่มบุคคลจำเพาะ" #~ msgid "Discrimination designed to cause emotional harm" #~ msgstr "การเลือกปฏิบัติเพื่อทำร้ายความรู้สึก" #~ msgid "Explicit discrimination based on gender, sexuality, race or religion" #~ msgstr "การเลือกปฏิบัติอย่างรุนแรงเนื่องจากเพศ, เพศสภาพ, เชื้อชาติ หรือศาสนา" #~ msgid "No advertising of any kind" #~ msgstr "ไม่แสดงโฆษณาทุกประเภท" #~ msgid "Product placement" #~ msgstr "พื้นที่ผลิตภัณฑ์" #~ msgid "Explicit references to specific brands or trademarked products" #~ msgstr "การอ้างอิงถึงสินค้าแบรนด์หรือเครื่องหมายการค้าจำเพาะอย่างชัดเจน" #~ msgid "No gambling of any kind" #~ msgstr "ไม่แสดงการพนันทุกประเภท" #~ msgid "Gambling on random events using tokens or credits" #~ msgstr "การพนันในกิจกรรมที่มีขึ้นเป็นครั้งคราวโดยใช้เหรียญหรือเครดิต" #~ msgid "Gambling using “play” money" #~ msgstr "การพนันโดนใช้เงิน \"ปลอม\"" #~ msgid "Gambling using real money" #~ msgstr "การพนันโดยใช้เงินจริง" #~ msgid "No ability to spend money" #~ msgstr "ไม่มีความสามารถในการใช้จ่ายเงิน" #~ msgid "Ability to spend real money in-game" #~ msgstr "ความสามารถในการใช้จ่ายเงินจริงภายในเกม" #~ msgid "No sharing of social network usernames or email addresses" #~ msgstr "ไม่แบ่งปันชื่อผู้ใช้โซเชียลเน็ตเวิร์กหรือที่อยู่อีเมล" #~ msgid "Sharing social network usernames or email addresses" #~ msgstr "แบ่งปันชื่อผู้ใช้โซเชียลเน็ตเวิร์กหรือที่อยู่อีเมล" #~ msgid "No sharing of user information with 3rd parties" #~ msgstr "ไม่แบ่งปันข้อมูลผู้ใช้กับบุคคลที่ 3" #~ msgid "No sharing of physical location to other users" #~ msgstr "ไม่แบ่งปันตำแหน่งที่อยู่แก่ผู้ใช้อื่น" #~ msgid "Sharing physical location to other users" #~ msgstr "แบ่งปันตำแหน่งที่อยู่กับผู้ใช้อื่นๆ" malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/po/tr.po000066400000000000000000000422271505556674000232060ustar00rootroot00000000000000# Turkish translations for malcontent package. # Copyright (C) 2022-2024 malcontent's COPYRIGHT HOLDER # This file is distributed under the same license as the malcontent package. # # Sabri Ünal , 2022, 2024. # Emin Tufan Çetin , 2022. # msgid "" msgstr "" "Project-Id-Version: malcontent\n" "Report-Msgid-Bugs-To: https://gitlab.freedesktop.org/pwithnall/malcontent/" "issues\n" "POT-Creation-Date: 2024-02-24 15:26+0000\n" "PO-Revision-Date: 2024-02-25 05:01+0300\n" "Last-Translator: Sabri Ünal \n" "Language-Team: Türkçe \n" "Language: tr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: Poedit 3.4.2\n" "X-POOTLE-MTIME: 1434043811.000000\n" #: accounts-service/com.endlessm.ParentalControls.policy.in:4 msgid "Change your own app filter" msgstr "Kendi uygulama süzgecini değiştir" #: accounts-service/com.endlessm.ParentalControls.policy.in:5 msgid "Authentication is required to change your app filter." msgstr "Uygulama süzgecinizi değiştirmek için kimlik doğrulanmalıdır." #: accounts-service/com.endlessm.ParentalControls.policy.in:14 msgid "Read your own app filter" msgstr "Kendi uygulama süzgecini oku" #: accounts-service/com.endlessm.ParentalControls.policy.in:15 msgid "Authentication is required to read your app filter." msgstr "Uygulama süzgecinizi okumak için kimlik doğrulanmalıdır." #: accounts-service/com.endlessm.ParentalControls.policy.in:24 msgid "Change another user’s app filter" msgstr "Başka kullanıcının uygulama süzgecini değiştir" #: accounts-service/com.endlessm.ParentalControls.policy.in:25 msgid "Authentication is required to change another user’s app filter." msgstr "" "Başka kullanıcının uygulama süzgecini değiştirmek için kimlik " "doğrulanmalıdır." #: accounts-service/com.endlessm.ParentalControls.policy.in:34 msgid "Read another user’s app filter" msgstr "Başka kullanıcının uygulama süzgecini oku" #: accounts-service/com.endlessm.ParentalControls.policy.in:35 msgid "Authentication is required to read another user’s app filter." msgstr "" "Başka kullanıcının uygulama süzgecini okumak için kimlik doğrulanmalıdır." #: accounts-service/com.endlessm.ParentalControls.policy.in:44 msgid "Change your own session limits" msgstr "Kendi oturum sınırlarını değiştir" #: accounts-service/com.endlessm.ParentalControls.policy.in:45 msgid "Authentication is required to change your session limits." msgstr "Kendi oturum sınırlarınızı değiştirmek için kimlik doğrulanmalıdır." #: accounts-service/com.endlessm.ParentalControls.policy.in:54 msgid "Read your own session limits" msgstr "Kendi oturum sınırlarını oku" #: accounts-service/com.endlessm.ParentalControls.policy.in:55 msgid "Authentication is required to read your session limits." msgstr "Kendi oturum sınırlarınızı okumak için kimlik doğrulanmalıdır." #: accounts-service/com.endlessm.ParentalControls.policy.in:64 msgid "Change another user’s session limits" msgstr "Başka kullanıcının oturum kısıtlarını değiştir" #: accounts-service/com.endlessm.ParentalControls.policy.in:65 msgid "Authentication is required to change another user’s session limits." msgstr "" "Başka kullanıcının oturum sınırlarını değiştirmek için kimlik " "doğrulanmalıdır." #: accounts-service/com.endlessm.ParentalControls.policy.in:74 msgid "Read another user’s session limits" msgstr "Başka kullanıcının oturum sınırlarını oku" #: accounts-service/com.endlessm.ParentalControls.policy.in:75 msgid "Authentication is required to read another user’s session limits." msgstr "" "Başka kullanıcının oturum sınırlarını okumak için kimlik doğrulanmalıdır." #: accounts-service/com.endlessm.ParentalControls.policy.in:84 msgid "Change your own account info" msgstr "Kendi hesap bilgilerini değiştir" #: accounts-service/com.endlessm.ParentalControls.policy.in:85 msgid "Authentication is required to change your account info." msgstr "Kendi hesap bilgilerinizi değiştirmek için kimlik doğrulanmalıdır." #: accounts-service/com.endlessm.ParentalControls.policy.in:94 msgid "Read your own account info" msgstr "Kendi hesap bilgilerini oku" #: accounts-service/com.endlessm.ParentalControls.policy.in:95 msgid "Authentication is required to read your account info." msgstr "Kendi hesap bilgilerinizi okumak için kimlik doğrulanmalıdır." #: accounts-service/com.endlessm.ParentalControls.policy.in:104 msgid "Change another user’s account info" msgstr "Başka kullanıcının hesap bilgilerini değiştir" #: accounts-service/com.endlessm.ParentalControls.policy.in:105 msgid "Authentication is required to change another user’s account info." msgstr "" "Başka kullanıcının hesap bilgilerini değiştirmek için kimlik doğrulanmalıdır." #: accounts-service/com.endlessm.ParentalControls.policy.in:114 msgid "Read another user’s account info" msgstr "Başka kullanıcının hesap bilgilerini oku" #: accounts-service/com.endlessm.ParentalControls.policy.in:115 msgid "Authentication is required to read another user’s account info." msgstr "" "Başka kullanıcının hesap bilgilerini okumak için kimlik doğrulanmalıdır." #: libmalcontent/app-filter.c:696 #, c-format msgid "App filter for user %u was in an unrecognized format" msgstr "%u kullanıcısı için uygulama süzgeci tanınmayan biçimde" #: libmalcontent/app-filter.c:727 #, c-format msgid "OARS filter for user %u has an unrecognized kind ‘%s’" msgstr "%u kullanıcısı için OARS süzgeci tanınmayan ‘%s’ türünde" #: libmalcontent/manager.c:283 libmalcontent/manager.c:420 #: libmalcontent/manager.c:803 #, c-format msgid "Not allowed to query parental controls data for user %u" msgstr "%u kullanıcısı için ebeveyn denetimi verileri sorgulanamaz" #: libmalcontent/manager.c:288 #, c-format msgid "User %u does not exist" msgstr "%u kullanıcısı yok" #: libmalcontent/manager.c:296 msgid "System accounts service not available" msgstr "Sistem hesap hizmeti kullanılamıyor" #: libmalcontent/manager.c:402 msgid "App filtering is globally disabled" msgstr "Uygulama süzgeci tümüyle devre dışı" #: libmalcontent/manager.c:785 msgid "Session limits are globally disabled" msgstr "Oturum kısıtları tümüyle devre dışı" #: libmalcontent/session-limits.c:306 #, c-format msgid "Session limit for user %u was in an unrecognized format" msgstr "%u kullanıcısı için oturum kısıtları tanınmayan biçimde" #: libmalcontent/session-limits.c:328 #, c-format msgid "Session limit for user %u has an unrecognized type ‘%u’" msgstr "%u kullanıcısı için oturum kısıtları tanınmayan ‘%u’ türünde" #: libmalcontent/session-limits.c:346 #, c-format msgid "Session limit for user %u has invalid daily schedule %u–%u" msgstr "%u kullanıcısı için oturum kısıtları geçersiz günlük düzende %u–%u" #. Translators: the placeholder is a user’s full name #: libmalcontent-ui/restrict-applications-dialog.c:256 #, c-format msgid "Restrict %s from using the following installed applications." msgstr "%s kullanıcısının aşağıdaki kurulu uygulamaları kullanmasını kısıtla." #: libmalcontent-ui/restrict-applications-dialog.ui:6 msgid "Restrict Applications" msgstr "Uygulamaları Kısıtla" #: libmalcontent-ui/restrict-applications-dialog.ui:22 msgid "Search for applications…" msgstr "Uygulamaları ara…" #: libmalcontent-ui/restrict-applications-selector.ui:13 msgid "No applications found to restrict." msgstr "Kısıtlanacak uygulama bulunamadı." #. Translators: this is the full name for an unknown user account. #: libmalcontent-ui/user-controls.c:198 libmalcontent-ui/user-controls.c:209 msgid "unknown" msgstr "bilinmeyen" #: libmalcontent-ui/user-controls.c:303 libmalcontent-ui/user-controls.c:388 #: libmalcontent-ui/user-controls.c:641 msgid "All Ages" msgstr "Tüm Yaşlar" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:470 #, c-format msgid "" "Prevents %s from running web browsers. Limited web content may still be " "available in other applications." msgstr "" "%s kullanıcısının web tarayıcılarını çalıştırmasını engeller. Yine de " "sınırlı web içeriği diğer uygulamalarda da bulunabilir." #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:475 #, c-format msgid "Prevents specified applications from being used by %s." msgstr "Belirtilen uygulamaların %s tarafından kullanılmasını engeller." #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:480 #, c-format msgid "Prevents %s from installing applications." msgstr "%s kullanıcısının uygulama kurmasını engeller." #: libmalcontent-ui/user-controls.ui:25 msgid "Application Usage Restrictions" msgstr "Uygulama Kullanım Kısıtlamaları" #: libmalcontent-ui/user-controls.ui:28 msgid "Restrict _Web Browsers" msgstr "_Web Tarayıcılarını Kısıtla" #: libmalcontent-ui/user-controls.ui:51 msgid "_Restrict Applications" msgstr "Uygulamaları _Kısıtla" #: libmalcontent-ui/user-controls.ui:73 msgid "Software Installation Restrictions" msgstr "Yazılım Kurulumu Kısıtlamaları" #: libmalcontent-ui/user-controls.ui:77 msgid "Restrict Application _Installation" msgstr "Uygulama _Kurulumunu Kısıtla" #: libmalcontent-ui/user-controls.ui:99 msgid "Application _Suitability" msgstr "Uygulama _Uygunluğu" # Biraz serbest çeviri oldu. #: libmalcontent-ui/user-controls.ui:102 msgid "" "Restricts the browsing or installation of applications unsuitable for this " "age or younger." msgstr "" "Bu yaş ya da daha küçükler için uygun olmayan uygulamaların taranmasını ya " "da kurulmasını kısıtlar." #. Translators: This documents the --user command line option to malcontent-control: #: malcontent-control/application.c:102 msgid "User to select in the UI" msgstr "Kullanıcı arayüzünde seçilecek kullanıcı" #. Translators: This is a placeholder for a command line argument value: #: malcontent-control/application.c:104 msgid "USERNAME" msgstr "KULLANICIADI" #: malcontent-control/application.c:116 msgid "— view and edit parental controls" msgstr "— ebeveyn denetimlerini görüntüle ve düzenle" #. Translators: This is the title of the main window #. Translators: the name of the application as it appears in a software center #: malcontent-control/application.c:123 malcontent-control/main.ui:17 #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:9 #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:3 msgid "Parental Controls" msgstr "Ebeveyn Denetimleri" #: malcontent-control/application.c:309 msgid "Copyright © 2019, 2020 Endless Mobile, Inc." msgstr "Telif Hakkı © 2019, 2020 Endless Mobile, Inc." #. Translators: this should be "translated" to the #. names of people who have translated Malcontent into #. this language, one per line. #: malcontent-control/application.c:314 msgid "translator-credits" msgstr "" "Sabri Ünal \n" "Emin Tufan Çetin " #. Translators: "Malcontent" is the brand name of this #. project, so should not be translated. #: malcontent-control/application.c:320 msgid "Malcontent Website" msgstr "Malcontent Web Sitesi" #: malcontent-control/application.c:340 msgid "The help contents could not be displayed" msgstr "Yardım içeriği gösterilemiyor" #: malcontent-control/application.c:389 msgid "Failed to load user data from the system" msgstr "Sistemden kullanıcı verisi yüklenemedi" #: malcontent-control/application.c:391 msgid "Please make sure that the AccountsService is installed and enabled." msgstr "AccountsService’in kurulu ve etkinleştirildiğinden emin olun." #. Translators: Replace the link to commonsensemedia.org with some #. * localised guidance for parents/carers on how to set restrictions on #. * their child/caree in a responsible way which is in keeping with the #. * best practice and culture of the region. If no suitable localised #. * guidance exists, and if the default commonsensemedia.org link is not #. * suitable, please file an issue against malcontent so we can discuss #. * further! #. * https://gitlab.freedesktop.org/pwithnall/malcontent/-/issues/new #. #: malcontent-control/application.c:424 #, c-format msgid "" "It’s recommended that restrictions are set as part of an ongoing " "conversation with %s. Read guidance on what to consider." msgstr "" "Kısıtlamaların, %s ile süren konuşmanın parçası olarak belirlenmesi " "önerilir. Nelere özenilmesi gerektiğine ilişkin kılavuzu okuyun." #: malcontent-control/carousel.ui:38 msgid "Previous Page" msgstr "Önceki Sayfa" #: malcontent-control/carousel.ui:57 msgid "Next Page" msgstr "Sonraki Sayfa" #: malcontent-control/main.ui:87 msgid "Permission Required" msgstr "İzin Gerekli" #: malcontent-control/main.ui:88 msgid "" "Permission is required to view and change user parental controls settings." msgstr "" "Kullanıcı ebeveyn denetimleri ayarlarını görüntülemek ve değiştirmek için " "izin gereklidir." #: malcontent-control/main.ui:110 msgid "No Standard User Accounts" msgstr "Standart Kullanıcı Hesabı Yok" #: malcontent-control/main.ui:111 msgid "" "Parental controls can only be applied to standard user\n" "accounts. These can be created in the user settings." msgstr "" "Ebeveyn denetimleri yalnızca standart kullanıcı hesaplarına uygulanabilir. \n" "Bunlar kullanıcı ayarlarından oluşturulabilir." #: malcontent-control/main.ui:115 msgid "_User Settings" msgstr "_Kullanıcı Ayarları" #: malcontent-control/main.ui:138 msgid "Loading…" msgstr "Yükleniyor…" #: malcontent-control/main.ui:171 msgid "_Help" msgstr "_Yardım" #: malcontent-control/main.ui:175 msgid "_About Parental Controls" msgstr "Ebeveyn Denetimleri _Hakkında" #. Translators: the brief summary of the application as it appears in a software center. #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:12 #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:4 msgid "Set parental controls and monitor usage by users" msgstr "Ebeveyn denetimlerini ayarlayın ve kullanıcılarla kullanımı izleyin" #. Translators: These are the application description paragraphs in the AppData file. #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:16 msgid "" "Manage users’ parental controls restrictions, controlling how long they can " "use the computer for, what software they can install, and what installed " "software they can run." msgstr "" "Kullanıcıların ebeveyn denetimi kısıtlamalarını yönetin, bilgisayarı ne çok " "süre kullanabileceklerini, hangi yazılımları kurabileceklerini ve hangi " "kurulu yazılımları çalıştırabileceklerini denetleyin." #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:25 msgid "Main window" msgstr "Ana pencere" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:40 msgid "The GNOME Project" msgstr "GNOME Projesi" #. Translators: Search terms to find this application. Do NOT translate or localise the semicolons! The list MUST also end with a semicolon! #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:14 msgid "" "parental controls;screen time;app restrictions;web browser restrictions;oars;" "usage;usage limit;kid;child;" msgstr "" "ebeveyn denetimleri;ebeveyn denetimi;aile denetimleri;aile denetimi;ebeveyn " "kontrolleri;ebeveyn kontrolü;aile kontrolü;ekran zamanı;uygulama " "kısıtlamaları;uygulama sınırlamaları;yazılım kısıtlamaları;yazılım " "sınırlamaları;web tarayıcı kısıtlamaları;web tarayıcı sınırlamaları;internet " "tarayıcı kısıtlamaları;internet tarayıcı sınırlamaları;oars;kullanım;" "kullanım sınırı;kullanım kısıtı;çocuk;evlat;" #: malcontent-control/org.freedesktop.MalcontentControl.policy.in:9 msgid "Manage parental controls" msgstr "Ebeveyn denetimlerini yönet" #: malcontent-control/org.freedesktop.MalcontentControl.policy.in:10 msgid "Authentication is required to read and change user parental controls" msgstr "" "Kullanıcı ebeveyn denetimlerini okumak ve değiştirmek için kimlik " "doğrulaması gereklidir" #: malcontent-control/user-selector.c:426 msgid "Your account" msgstr "Hesabınız" #. Always allow root, to avoid a situation where this PAM module prevents #. * all users logging in with no way of recovery. #: pam/pam_malcontent.c:142 pam/pam_malcontent.c:188 #, c-format msgid "User ‘%s’ has no time limits enabled" msgstr "‘%s’ kullanıcısının etkin zaman sınırı yok" #: pam/pam_malcontent.c:151 pam/pam_malcontent.c:172 #, c-format msgid "Error getting session limits for user ‘%s’: %s" msgstr "‘%s’ kullanıcısı için oturum sınırları alınırken hata oluştu: %s" #: pam/pam_malcontent.c:182 #, c-format msgid "User ‘%s’ has no time remaining" msgstr "‘%s’ kullanıcısının hiç zamanı kalmadı" #: pam/pam_malcontent.c:200 #, c-format msgid "Error setting time limit on login session: %s" msgstr "Oturum açma oturum zaman sınırı ayarlanırken hata oluştu: %s" malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/po/uk.po000066400000000000000000000532701505556674000232000ustar00rootroot00000000000000# Ukrainian translation for malcontent. # Copyright (C) 2020 malcontent's COPYRIGHT HOLDER # This file is distributed under the same license as the malcontent package. # # yurchor , 2020. msgid "" msgstr "" "Project-Id-Version: malcontent master\n" "Report-Msgid-Bugs-To: https://gitlab.freedesktop.org/pwithnall/malcontent/issu" "es\n" "POT-Creation-Date: 2020-12-09 03:28+0000\n" "PO-Revision-Date: 2020-12-09 08:59+0200\n" "Last-Translator: Yuri Chornoivan \n" "Language-Team: Ukrainian \n" "Language: uk\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=4; plural=n==1 ? 3 : n%10==1 && n%100!=11 ? 0 : n" "%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" "X-Generator: Lokalize 20.11.70\n" #: accounts-service/com.endlessm.ParentalControls.policy.in:4 msgid "Change your own app filter" msgstr "Зміна власного фільтра програм" #: accounts-service/com.endlessm.ParentalControls.policy.in:5 msgid "Authentication is required to change your app filter." msgstr "Для зміни власного фільтра програм слід пройти розпізнавання." #: accounts-service/com.endlessm.ParentalControls.policy.in:14 msgid "Read your own app filter" msgstr "Читання власного фільтра програм" #: accounts-service/com.endlessm.ParentalControls.policy.in:15 msgid "Authentication is required to read your app filter." msgstr "Для читання власного фільтра програм слід пройти розпізнавання." #: accounts-service/com.endlessm.ParentalControls.policy.in:24 msgid "Change another user’s app filter" msgstr "Зміна фільтра програм іншого користувача" #: accounts-service/com.endlessm.ParentalControls.policy.in:25 msgid "Authentication is required to change another user’s app filter." msgstr "" "Для зміни фільтра програм іншого користувача слід пройти розпізнавання." #: accounts-service/com.endlessm.ParentalControls.policy.in:34 msgid "Read another user’s app filter" msgstr "Читання фільтра програм іншого користувача" #: accounts-service/com.endlessm.ParentalControls.policy.in:35 msgid "Authentication is required to read another user’s app filter." msgstr "" "Для читання фільтра програм іншого користувача слід пройти розпізнавання." #: accounts-service/com.endlessm.ParentalControls.policy.in:44 msgid "Change your own session limits" msgstr "Зміна обмежень власного сеансу" #: accounts-service/com.endlessm.ParentalControls.policy.in:45 msgid "Authentication is required to change your session limits." msgstr "Для зміни обмежень вашого власного сеансу слід пройти розпізнавання." #: accounts-service/com.endlessm.ParentalControls.policy.in:54 msgid "Read your own session limits" msgstr "Читання обмежень власного сеансу" #: accounts-service/com.endlessm.ParentalControls.policy.in:55 msgid "Authentication is required to read your session limits." msgstr "Для читання обмежень вашого власного сеансу слід пройти розпізнавання." #: accounts-service/com.endlessm.ParentalControls.policy.in:64 msgid "Change another user’s session limits" msgstr "Зміна обмежень сеансу іншого користувача" #: accounts-service/com.endlessm.ParentalControls.policy.in:65 msgid "Authentication is required to change another user’s session limits." msgstr "" "Для зміни обмежень сеансу іншого користувача слід пройти розпізнавання." #: accounts-service/com.endlessm.ParentalControls.policy.in:74 msgid "Read another user’s session limits" msgstr "Читання обмежень сеансу іншого користувача" #: accounts-service/com.endlessm.ParentalControls.policy.in:75 msgid "Authentication is required to read another user’s session limits." msgstr "" "Для читання обмежень сеансу іншого користувача слід пройти розпізнавання." #: accounts-service/com.endlessm.ParentalControls.policy.in:84 msgid "Change your own account info" msgstr "Зміна даних щодо власного облікового запису" #: accounts-service/com.endlessm.ParentalControls.policy.in:85 msgid "Authentication is required to change your account info." msgstr "" "Для зміни даних щодо вашого облікового запису слід пройти розпізнавання." #: accounts-service/com.endlessm.ParentalControls.policy.in:94 msgid "Read your own account info" msgstr "Читання даних щодо власного облікового запису" #: accounts-service/com.endlessm.ParentalControls.policy.in:95 msgid "Authentication is required to read your account info." msgstr "" "Для читання даних щодо вашого облікового запису слід пройти розпізнавання." #: accounts-service/com.endlessm.ParentalControls.policy.in:104 msgid "Change another user’s account info" msgstr "Зміна даних щодо облікового запису іншого користувача" #: accounts-service/com.endlessm.ParentalControls.policy.in:105 msgid "Authentication is required to change another user’s account info." msgstr "" "Для зміни даних щодо облікового запису іншого користувача слід пройти " "розпізнавання." #: accounts-service/com.endlessm.ParentalControls.policy.in:114 msgid "Read another user’s account info" msgstr "Читання даних щодо облікового запису іншого користувача" #: accounts-service/com.endlessm.ParentalControls.policy.in:115 msgid "Authentication is required to read another user’s account info." msgstr "" "Для читання даних щодо облікового запису іншого користувача слід пройти " "розпізнавання." #: libmalcontent/app-filter.c:694 #, c-format msgid "App filter for user %u was in an unrecognized format" msgstr "Фільтр програм для користувача %u записано у невідомому форматі" #: libmalcontent/app-filter.c:725 #, c-format msgid "OARS filter for user %u has an unrecognized kind ‘%s’" msgstr "Фільтр OARS для користувача %u належить до невідомого типу «%s»" #: libmalcontent/manager.c:283 libmalcontent/manager.c:420 #: libmalcontent/manager.c:803 #, c-format msgid "Not allowed to query parental controls data for user %u" msgstr "" "Не дозволено опитувати дані щодо батьківського контролю для користувача %u" #: libmalcontent/manager.c:288 #, c-format msgid "User %u does not exist" msgstr "Запису користувача %u не існує" #: libmalcontent/manager.c:296 msgid "System accounts service not available" msgstr "Загальносистемна служба облікових записів є недоступною" #: libmalcontent/manager.c:402 msgid "App filtering is globally disabled" msgstr "Фільтрування програм вимкнено на загальному рівні" #: libmalcontent/manager.c:785 msgid "Session limits are globally disabled" msgstr "Обмеження сеансів вимкнено на загальному рівні" #: libmalcontent/session-limits.c:306 #, c-format msgid "Session limit for user %u was in an unrecognized format" msgstr "Обмеження сеансів для користувача %u записано у невідомому форматі" #: libmalcontent/session-limits.c:328 #, c-format msgid "Session limit for user %u has an unrecognized type ‘%u’" msgstr "Обмеження сеансів для користувача %u належить до невідомого типу «%u»" #: libmalcontent/session-limits.c:346 #, c-format msgid "Session limit for user %u has invalid daily schedule %u–%u" msgstr "" "Обмеження сеансу для користувача %u має некоректний щоденний розклад %u–%u" #. TRANSLATORS: This is the formatting of English and localized name #. of the rating e.g. "Adults Only (solo adultos)" #: libmalcontent-ui/gs-content-rating.c:75 #, c-format msgid "%s (%s)" msgstr "%s (%s)" #: libmalcontent-ui/gs-content-rating.c:209 msgid "General" msgstr "Загальне" #: libmalcontent-ui/gs-content-rating.c:218 msgid "ALL" msgstr "УСІ" #: libmalcontent-ui/gs-content-rating.c:222 #: libmalcontent-ui/gs-content-rating.c:485 msgid "Adults Only" msgstr "Лише для дорослих" #: libmalcontent-ui/gs-content-rating.c:224 #: libmalcontent-ui/gs-content-rating.c:484 msgid "Mature" msgstr "Для дорослих" #: libmalcontent-ui/gs-content-rating.c:226 #: libmalcontent-ui/gs-content-rating.c:483 msgid "Teen" msgstr "Для підлітків" #: libmalcontent-ui/gs-content-rating.c:228 #: libmalcontent-ui/gs-content-rating.c:482 msgid "Everyone 10+" msgstr "Для усіх 10+" #: libmalcontent-ui/gs-content-rating.c:230 #: libmalcontent-ui/gs-content-rating.c:481 msgid "Everyone" msgstr "Для усіх" #: libmalcontent-ui/gs-content-rating.c:232 #: libmalcontent-ui/gs-content-rating.c:480 msgid "Early Childhood" msgstr "Для маленьких дітей" #. Translators: the placeholder is a user’s full name #: libmalcontent-ui/restrict-applications-dialog.c:222 #, c-format msgid "Restrict %s from using the following installed applications." msgstr "Обмежити для %s користування вказаними нижче встановленими програмами." #: libmalcontent-ui/restrict-applications-dialog.ui:6 #: libmalcontent-ui/restrict-applications-dialog.ui:12 msgid "Restrict Applications" msgstr "Обмеження доступу до програм" #: libmalcontent-ui/restrict-applications-selector.ui:24 msgid "No applications found to restrict." msgstr "Не знайдено програм, доступ до яких можна обмежити." #. Translators: this is the full name for an unknown user account. #: libmalcontent-ui/user-controls.c:207 libmalcontent-ui/user-controls.c:218 msgid "unknown" msgstr "невідомий" #: libmalcontent-ui/user-controls.c:312 libmalcontent-ui/user-controls.c:397 #: libmalcontent-ui/user-controls.c:669 msgid "All Ages" msgstr "Усі вікові групи" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:477 #, c-format msgid "" "Prevents %s from running web browsers. Limited web content may still be " "available in other applications." msgstr "" "Запобігає запуску користувачем %s браузерів. Обмежений доступ до інтернету " "можливий за допомогою інших програм." #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:482 #, c-format msgid "Prevents specified applications from being used by %s." msgstr "Запобігає користуванню %s вказаними програмами." #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:487 #, c-format msgid "Prevents %s from installing applications." msgstr "Забороняє %s встановлювати програми." #: libmalcontent-ui/user-controls.ui:16 msgid "Application Usage Restrictions" msgstr "Обмеження на користування програмами" #: libmalcontent-ui/user-controls.ui:67 msgid "Restrict _Web Browsers" msgstr "Обмежити _браузери" #: libmalcontent-ui/user-controls.ui:151 msgid "_Restrict Applications" msgstr "_Обмежити доступ до програм" #: libmalcontent-ui/user-controls.ui:230 msgid "Software Installation Restrictions" msgstr "Обмеження на встановлення програмного забезпечення" #: libmalcontent-ui/user-controls.ui:280 msgid "Restrict Application _Installation" msgstr "Обмежити вс_тановлення програм" #: libmalcontent-ui/user-controls.ui:365 msgid "Application _Suitability" msgstr "П_ридатність програм" #: libmalcontent-ui/user-controls.ui:387 msgid "" "Restricts browsing or installation of applications to applications suitable " "for certain ages or above." msgstr "" "Обмежує перелік програм, які користувач може бачити або встановлювати, до " "програм, доступних певній віковій групі." #. Translators: This documents the --user command line option to malcontent-control: #: malcontent-control/application.c:102 msgid "User to select in the UI" msgstr "Користувач, якого слід вибрати у графічному інтерфейсі" #. Translators: This is a placeholder for a command line argument value: #: malcontent-control/application.c:104 msgid "USERNAME" msgstr "КОРИСТУВАЧ" #: malcontent-control/application.c:115 msgid "— view and edit parental controls" msgstr "— перегляд батьківського контролю і керування ним" #. Translators: This is the title of the main window #. Translators: the name of the application as it appears in a software center #: malcontent-control/application.c:122 malcontent-control/main.ui:12 #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:9 #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:3 msgid "Parental Controls" msgstr "Батьківський контроль" #: malcontent-control/application.c:308 msgid "Copyright © 2019, 2020 Endless Mobile, Inc." msgstr "© Endless Mobile, Inc., 2019, 2020" #. Translators: this should be "translated" to the #. names of people who have translated Malcontent into #. this language, one per line. #: malcontent-control/application.c:313 msgid "translator-credits" msgstr "Юрій Чорноіван " #. Translators: "Malcontent" is the brand name of this #. project, so should not be translated. #: malcontent-control/application.c:319 msgid "Malcontent Website" msgstr "Сайт Malcontent" #: malcontent-control/application.c:337 msgid "The help contents could not be displayed" msgstr "Неможливо показати вміст довідки" #: malcontent-control/application.c:374 msgid "Failed to load user data from the system" msgstr "Не вдалося завантажити дані користувача з системи" #: malcontent-control/application.c:376 msgid "Please make sure that the AccountsService is installed and enabled." msgstr "Будь ласка, переконайтеся, що встановлено і увімкнено AccountsService." #. Translators: Replace the link to commonsensemedia.org with some #. * localised guidance for parents/carers on how to set restrictions on #. * their child/caree in a responsible way which is in keeping with the #. * best practice and culture of the region. If no suitable localised #. * guidance exists, and if the default commonsensemedia.org link is not #. * suitable, please file an issue against malcontent so we can discuss #. * further! #. * https://gitlab.freedesktop.org/pwithnall/malcontent/-/issues/new #. #: malcontent-control/application.c:407 #, c-format msgid "" "It’s recommended that restrictions are set as part of an ongoing " "conversation with %s. Read guidance on what to consider." msgstr "" "Рекомендуємо встановити обмеження як частину наступної розмови із %s. Ознайомтеся із настановами щодо того, що слід врахувати." #: malcontent-control/carousel.ui:48 msgid "Previous Page" msgstr "Попередня сторінка" #: malcontent-control/carousel.ui:74 msgid "Next Page" msgstr "Наступна сторінка" #: malcontent-control/main.ui:115 msgid "Permission Required" msgstr "Потрібні права доступу" #: malcontent-control/main.ui:129 msgid "" "Permission is required to view and change user parental controls settings." msgstr "" "Для перегляду і внесення змін до параметрів батьківського контролю для " "користувача потрібні відповідні права доступу." #: malcontent-control/main.ui:182 msgid "No Standard User Accounts" msgstr "Немає стандартних облікових записів користувачів" #: malcontent-control/main.ui:197 msgid "" "Parental controls can only be applied to standard user\n" "accounts. These can be created in the user settings." msgstr "" "Батьківський контроль можна застосовувати лише до стандартних\n" "облікових записів користувачів. Такі записи можна створити у параметрах" " користувачів." #: malcontent-control/main.ui:210 msgid "_User Settings" msgstr "П_араметри користувачів" #: malcontent-control/main.ui:238 msgid "Loading…" msgstr "Завантаження…" #: malcontent-control/main.ui:301 msgid "_Help" msgstr "_Довідка" #: malcontent-control/main.ui:305 msgid "_About Parental Controls" msgstr "_Про «Батьківський контроль»" #. Translators: the brief summary of the application as it appears in a software center. #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:12 #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:4 msgid "Set parental controls and monitor usage by users" msgstr "Встановити батьківський контроль і стежити за користувачами" #. Translators: These are the application description paragraphs in the AppData file. #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:16 msgid "" "Manage users’ parental controls restrictions, controlling how long they can " "use the computer for, what software they can install, and what installed " "software they can run." msgstr "" "Керуйте обмеженнями батьківського контролю користувачів, зокрема часом, " "протягом якого можна працювати з комп'ютером, переліком програмного " "забезпечення, яке можна встановлювати, та переліком програмного " "забезпечення, яке можна запускати." #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:25 msgid "Main window" msgstr "Головне вікно" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:38 msgid "The GNOME Project" msgstr "Проєкт GNOME" #. Translators: Search terms to find this application. Do NOT translate or localise the semicolons! The list MUST also end with a semicolon! #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:13 msgid "" "parental controls;screen time;app restrictions;web browser restrictions;oars;" "usage;usage limit;kid;child;" msgstr "" "parental controls;screen time;app restrictions;web browser restrictions;oars;" "usage;usage limit;kid;child;батьківський контроль;час за комп'ютером;" "обмеження програм;обмеження інтернету;користування;використання;обмеження " "користування;дитина;дитячий;" #: malcontent-control/org.freedesktop.MalcontentControl.policy.in:9 msgid "Manage parental controls" msgstr "Керування батьківським контролем" #: malcontent-control/org.freedesktop.MalcontentControl.policy.in:10 msgid "Authentication is required to read and change user parental controls" msgstr "" "Для читання і зміни параметрів батьківського контролю користувача слід " "пройти розпізнавання" #: malcontent-control/user-selector.c:426 msgid "Your account" msgstr "Ваш обліковий запис" #. Always allow root, to avoid a situation where this PAM module prevents #. * all users logging in with no way of recovery. #: pam/pam_malcontent.c:142 pam/pam_malcontent.c:188 #, c-format msgid "User ‘%s’ has no time limits enabled" msgstr "Для користувача «%s» часові обмеження не увімкнено" #: pam/pam_malcontent.c:151 pam/pam_malcontent.c:172 #, c-format msgid "Error getting session limits for user ‘%s’: %s" msgstr "" "Помилка під час спроби отримати дані щодо обмежень сеансу користувача «%s»: " "%s" #: pam/pam_malcontent.c:182 #, c-format msgid "User ‘%s’ has no time remaining" msgstr "У користувача «%s» більше не лишилося часу" #: pam/pam_malcontent.c:200 #, c-format msgid "Error setting time limit on login session: %s" msgstr "Помилка під час спроби встановити часове обмеження на сеанс роботи: %s" malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/po/vi.po000066400000000000000000000504431505556674000231760ustar00rootroot00000000000000# Vietnamese translations for malcontent package. # Copyright (C) 2020 THE malcontent'S COPYRIGHT HOLDER # This file is distributed under the same license as the malcontent package. # Automatically generated, 2020. # msgid "" msgstr "" "Project-Id-Version: malcontent\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-06-10 12:04+0100\n" "PO-Revision-Date: 2020-04-15 13:42+0100\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: vi\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" #: accounts-service/com.endlessm.ParentalControls.policy.in:4 msgid "Change your own app filter" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:5 msgid "Authentication is required to change your app filter." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:14 msgid "Read your own app filter" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:15 msgid "Authentication is required to read your app filter." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:24 msgid "Change another user’s app filter" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:25 msgid "Authentication is required to change another user’s app filter." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:34 msgid "Read another user’s app filter" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:35 msgid "Authentication is required to read another user’s app filter." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:44 msgid "Change your own session limits" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:45 msgid "Authentication is required to change your session limits." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:54 msgid "Read your own session limits" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:55 msgid "Authentication is required to read your session limits." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:64 msgid "Change another user’s session limits" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:65 msgid "Authentication is required to change another user’s session limits." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:74 msgid "Read another user’s session limits" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:75 msgid "Authentication is required to read another user’s session limits." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:84 msgid "Change your own account info" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:85 msgid "Authentication is required to change your account info." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:94 msgid "Read your own account info" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:95 msgid "Authentication is required to read your account info." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:104 msgid "Change another user’s account info" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:105 msgid "Authentication is required to change another user’s account info." msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:114 msgid "Read another user’s account info" msgstr "" #: accounts-service/com.endlessm.ParentalControls.policy.in:115 msgid "Authentication is required to read another user’s account info." msgstr "" #: libmalcontent/app-filter.c:694 #, c-format msgid "App filter for user %u was in an unrecognized format" msgstr "" #: libmalcontent/app-filter.c:725 #, c-format msgid "OARS filter for user %u has an unrecognized kind ‘%s’" msgstr "" #: libmalcontent/manager.c:283 libmalcontent/manager.c:412 #, c-format msgid "Not allowed to query app filter data for user %u" msgstr "" #: libmalcontent/manager.c:288 #, c-format msgid "User %u does not exist" msgstr "" #: libmalcontent/manager.c:394 msgid "App filtering is globally disabled" msgstr "" #: libmalcontent/manager.c:777 msgid "Session limits are globally disabled" msgstr "" #: libmalcontent/manager.c:795 #, c-format msgid "Not allowed to query session limits data for user %u" msgstr "" #: libmalcontent/session-limits.c:306 #, c-format msgid "Session limit for user %u was in an unrecognized format" msgstr "" #: libmalcontent/session-limits.c:328 #, c-format msgid "Session limit for user %u has an unrecognized type ‘%u’" msgstr "" #: libmalcontent/session-limits.c:346 #, c-format msgid "Session limit for user %u has invalid daily schedule %u–%u" msgstr "" #. TRANSLATORS: This is the formatting of English and localized name #. of the rating e.g. "Adults Only (solo adultos)" #: libmalcontent-ui/gs-content-rating.c:75 #, c-format msgid "%s (%s)" msgstr "" #: libmalcontent-ui/gs-content-rating.c:209 msgid "General" msgstr "" #: libmalcontent-ui/gs-content-rating.c:218 msgid "ALL" msgstr "" #: libmalcontent-ui/gs-content-rating.c:222 #: libmalcontent-ui/gs-content-rating.c:485 msgid "Adults Only" msgstr "" #: libmalcontent-ui/gs-content-rating.c:224 #: libmalcontent-ui/gs-content-rating.c:484 msgid "Mature" msgstr "" #: libmalcontent-ui/gs-content-rating.c:226 #: libmalcontent-ui/gs-content-rating.c:483 msgid "Teen" msgstr "" #: libmalcontent-ui/gs-content-rating.c:228 #: libmalcontent-ui/gs-content-rating.c:482 msgid "Everyone 10+" msgstr "" #: libmalcontent-ui/gs-content-rating.c:230 #: libmalcontent-ui/gs-content-rating.c:481 msgid "Everyone" msgstr "" #: libmalcontent-ui/gs-content-rating.c:232 #: libmalcontent-ui/gs-content-rating.c:480 msgid "Early Childhood" msgstr "" #. Translators: the placeholder is a user’s full name #: libmalcontent-ui/restrict-applications-dialog.c:222 #, c-format msgid "Restrict %s from using the following installed applications." msgstr "" #: libmalcontent-ui/restrict-applications-dialog.ui:6 #: libmalcontent-ui/restrict-applications-dialog.ui:12 msgid "Restrict Applications" msgstr "" #: libmalcontent-ui/restrict-applications-selector.ui:24 msgid "No applications found to restrict." msgstr "" #. Translators: this is the full name for an unknown user account. #: libmalcontent-ui/user-controls.c:242 libmalcontent-ui/user-controls.c:253 msgid "unknown" msgstr "" #: libmalcontent-ui/user-controls.c:338 libmalcontent-ui/user-controls.c:425 #: libmalcontent-ui/user-controls.c:711 msgid "All Ages" msgstr "" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:514 #, c-format msgid "" "Prevents %s from running web browsers. Limited web content may still be " "available in other applications." msgstr "" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:519 #, c-format msgid "Prevents specified applications from being used by %s." msgstr "" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:524 #, c-format msgid "Prevents %s from installing applications." msgstr "" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:529 #, c-format msgid "Applications installed by %s will not appear for other users." msgstr "" #: libmalcontent-ui/user-controls.ui:17 msgid "Application Usage Restrictions" msgstr "" #: libmalcontent-ui/user-controls.ui:68 msgid "Restrict _Web Browsers" msgstr "" #: libmalcontent-ui/user-controls.ui:152 msgid "_Restrict Applications" msgstr "" #: libmalcontent-ui/user-controls.ui:231 msgid "Software Installation Restrictions" msgstr "" #: libmalcontent-ui/user-controls.ui:281 msgid "Restrict Application _Installation" msgstr "" #: libmalcontent-ui/user-controls.ui:366 msgid "Restrict Application Installation for _Others" msgstr "" #: libmalcontent-ui/user-controls.ui:451 msgid "Application _Suitability" msgstr "" #: libmalcontent-ui/user-controls.ui:473 msgid "" "Restricts browsing or installation of applications to applications suitable " "for certain ages or above." msgstr "" #. Translators: This is the title of the main window #. Translators: the name of the application as it appears in a software center #: malcontent-control/application.c:105 malcontent-control/main.ui:12 #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:9 #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:3 msgid "Parental Controls" msgstr "" #: malcontent-control/application.c:270 msgid "Copyright © 2019, 2020 Endless Mobile, Inc." msgstr "" #. Translators: this should be "translated" to the #. names of people who have translated Malcontent into #. this language, one per line. #: malcontent-control/application.c:275 msgid "translator-credits" msgstr "" #. Translators: "Malcontent" is the brand name of this #. project, so should not be translated. #: malcontent-control/application.c:281 msgid "Malcontent Website" msgstr "" #: malcontent-control/application.c:299 msgid "The help contents could not be displayed" msgstr "" #: malcontent-control/application.c:336 msgid "Failed to load user data from the system" msgstr "" #: malcontent-control/application.c:338 msgid "Please make sure that the AccountsService is installed and enabled." msgstr "" #: malcontent-control/carousel.ui:48 msgid "Previous Page" msgstr "" #: malcontent-control/carousel.ui:74 msgid "Next Page" msgstr "" #: malcontent-control/main.ui:93 msgid "Permission Required" msgstr "" #: malcontent-control/main.ui:107 msgid "" "Permission is required to view and change user parental controls settings." msgstr "" #: malcontent-control/main.ui:148 msgid "No Child Users Configured" msgstr "" #: malcontent-control/main.ui:162 msgid "" "No child users are currently set up on the system. Create one before setting " "up their parental controls." msgstr "" #: malcontent-control/main.ui:174 msgid "Create _Child User" msgstr "" #: malcontent-control/main.ui:202 msgid "Loading…" msgstr "" #: malcontent-control/main.ui:265 msgid "_Help" msgstr "Trợ _giúp" #: malcontent-control/main.ui:269 msgid "_About Parental Controls" msgstr "" #. Translators: the brief summary of the application as it appears in a software center. #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:12 #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:4 msgid "Set parental controls and monitor usage by users" msgstr "" #. Translators: These are the application description paragraphs in the AppData file. #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:16 msgid "" "Manage users’ parental controls restrictions, controlling how long they can " "use the computer for, what software they can install, and what installed " "software they can run." msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:39 msgid "The GNOME Project" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:50 #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:59 msgid "Minor improvements to parental controls application UI" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:51 msgid "Add a user manual" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:52 msgid "Translation updates" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:60 msgid "Translations to Ukrainian and Polish" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:67 msgid "Improve parental controls application UI and add icon" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:68 msgid "Support for indicating which accounts are parent accounts" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:75 msgid "Initial release of basic parental controls application" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:76 msgid "Support for setting app installation and run restrictions on users" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:83 msgid "Maintenance release of underlying parental controls library" msgstr "" #. Translators: Do NOT translate or transliterate this text (this is an icon file name)! #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:7 msgid "org.freedesktop.MalcontentControl" msgstr "" #. Translators: Search terms to find this application. Do NOT translate or localise the semicolons! The list MUST also end with a semicolon! #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:13 msgid "" "parental controls;screen time;app restrictions;web browser restrictions;oars;" "usage;usage limit;kid;child;" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.policy.in:9 msgid "Manage parental controls" msgstr "" #: malcontent-control/org.freedesktop.MalcontentControl.policy.in:10 msgid "Authentication is required to read and change user parental controls" msgstr "" #: malcontent-control/user-selector.c:426 msgid "Your account" msgstr "Tài khoản của bạn" #. Always allow root, to avoid a situation where this PAM module prevents #. * all users logging in with no way of recovery. #: pam/pam_malcontent.c:142 pam/pam_malcontent.c:188 #, c-format msgid "User ‘%s’ has no time limits enabled" msgstr "" #: pam/pam_malcontent.c:151 pam/pam_malcontent.c:172 #, c-format msgid "Error getting session limits for user ‘%s’: %s" msgstr "" #: pam/pam_malcontent.c:182 #, c-format msgid "User ‘%s’ has no time remaining" msgstr "" #: pam/pam_malcontent.c:200 #, c-format msgid "Error setting time limit on login session: %s" msgstr "" #~ msgid "No cartoon violence" #~ msgstr "Không có nội dung bạo lực hoạt họa" #~ msgid "Cartoon characters in unsafe situations" #~ msgstr "Các nhân vật hoạt hình trong các tình huống nguy hiểm" #~ msgid "Cartoon characters in aggressive conflict" #~ msgstr "Các nhân vật hoạt hình với mâu thuẫn dữ dội" #~ msgid "Graphic violence involving cartoon characters" #~ msgstr "Đồ họa cảnh bạo lực với các nhân vật hoạt hình" #~ msgid "No fantasy violence" #~ msgstr "Không có nội dung bạo lực giả tưởng" #~ msgid "Characters in unsafe situations easily distinguishable from reality" #~ msgstr "" #~ "Các nhân vật trong các tình huống không an toàn dễ dàng xa rời thực tế" #~ msgid "" #~ "Characters in aggressive conflict easily distinguishable from reality" #~ msgstr "" #~ "Các nhân vật có mâu thuẫn dữ dội có thể dễ dàng phân biệt với thực tế" #~ msgid "Graphic violence easily distinguishable from reality" #~ msgstr "Bạo lực đồ họa dễ dàng phân biệt với thực tế" #~ msgid "No realistic violence" #~ msgstr "Không có nội dung bạo lực thực tế" #~ msgid "Mildly realistic characters in unsafe situations" #~ msgstr "Các nhân vật thực tế ôn hòa trong các tình huống không an toàn" #~ msgid "Depictions of realistic characters in aggressive conflict" #~ msgstr "Miêu tả nhân vật thực tế trong trạng thái vô cùng mâu thuẫn" #~ msgid "Graphic violence involving realistic characters" #~ msgstr "Đồ họa cảnh bạo lực với các nhân vật thực tế" #~ msgid "No bloodshed" #~ msgstr "Không có nội dung chém giết" #~ msgid "Unrealistic bloodshed" #~ msgstr "Cảnh giết chóc phi thực tế" #~ msgid "Realistic bloodshed" #~ msgstr "Sự giết chóc thực tế" #~ msgid "Depictions of bloodshed and the mutilation of body parts" #~ msgstr "Diễn tả cảnh đổ máu và phanh thây" #~ msgid "No sexual violence" #~ msgstr "Không bạo lực tình dụng" #~ msgid "Rape or other violent sexual behavior" #~ msgstr "Cưỡng hiếp hoặc hành vi tình dục bạo lực khác" #~ msgid "No references to alcohol" #~ msgstr "Không nhắc đến rượu bia" #~ msgid "References to alcoholic beverages" #~ msgstr "Dẫn chiếu đến các thức uống có cồn" #~ msgid "Use of alcoholic beverages" #~ msgstr "Sử dụng các đồ uống có cồn" #~ msgid "No references to illicit drugs" #~ msgstr "Không nhắc đến thuốc cấm" #~ msgid "References to illicit drugs" #~ msgstr "Nhắc đến các loại thuốc cấm" #~ msgid "Use of illicit drugs" #~ msgstr "Sử dụng ma túy trái phép" #~ msgid "References to tobacco products" #~ msgstr "Dẫn chiếu đến các sản phẩm thuốc lá" #~ msgid "Use of tobacco products" #~ msgstr "Sử dụng các sản phẩm thuốc lá" #~ msgid "No nudity of any sort" #~ msgstr "Không có bất kỳ loại nội dung khỏa thân nào" #~ msgid "Brief artistic nudity" #~ msgstr "Ảnh khoả thân nghệ thuật ngắn" #~ msgid "Prolonged nudity" #~ msgstr "Ảnh khoả thân kéo dài" #~ msgid "No references or depictions of sexual nature" #~ msgstr "Không dẫn chiếu hoặc mô tả bản năng tình dục" #~ msgid "Provocative references or depictions" #~ msgstr "Các dẫn chiếu hoặc mô tả mang tính khiêu khích" #~ msgid "Sexual references or depictions" #~ msgstr "Diễn tả hoặc nhắc đến nội dung tình dục" #~ msgid "Graphic sexual behavior" #~ msgstr "Đồ họa hành vi giới tính" #~ msgid "No profanity of any kind" #~ msgstr "Không có loại nội dung báng bổ nào" #~ msgid "Mild or infrequent use of profanity" #~ msgstr "Sử dụng lời lẽ tục tĩu ở mức nhẹ hoặc không thường xuyên" #~ msgid "Moderate use of profanity" #~ msgstr "Sử dụng từ ngữ thô tục ở mức trung bình" #~ msgid "Strong or frequent use of profanity" #~ msgstr "Sử dụng từ ngữ thô tục ở mức mạnh hay thường xuyên" #~ msgid "No inappropriate humor" #~ msgstr "Không đùa cợt không thích hợp" #~ msgid "Slapstick humor" #~ msgstr "Hài hước vui nhộn" #~ msgid "Vulgar or bathroom humor" #~ msgstr "Đùa cợt tục tĩu hoặc khiếm nhã" #~ msgid "Mature or sexual humor" #~ msgstr "Đùa cợt người lớn hoặc về giới tính" #~ msgid "No discriminatory language of any kind" #~ msgstr "Không có dạng ngôn ngữ mang tính kỳ thị nào" #~ msgid "Negativity towards a specific group of people" #~ msgstr "Tính chất cấm đoán đối với một nhóm người cụ thể" #~ msgid "Discrimination designed to cause emotional harm" #~ msgstr "Sự phân biệt đối xử được tạo ra để gây tổn thương tinh thần" #~ msgid "Explicit discrimination based on gender, sexuality, race or religion" #~ msgstr "" #~ "Sự phân biệt đối xử rõ rệt về giới tính, thiên hướng tình dục, sắc tộc " #~ "hoặc tôn giáo" #~ msgid "No advertising of any kind" #~ msgstr "Không quảng cáo dưới mọi hình thức" #~ msgid "Product placement" #~ msgstr "Quảng Cáo Sản Phẩm" #~ msgid "Explicit references to specific brands or trademarked products" #~ msgstr "" #~ "Dẫn chiếu rõ rệt đến các thương hiệu hoặc sản phẩm có nhãn hiệu cụ thể" #~ msgid "No gambling of any kind" #~ msgstr "Không có dạng nội dung cờ bạc nào" #~ msgid "Gambling on random events using tokens or credits" #~ msgstr "Cờ bạc về các sự kiện ngẫu nhiên bằng hiện vật hoặc thẻ tín dụng" #~ msgid "Gambling using “play” money" #~ msgstr "Chơi cờ bạc bằng tiền \"ảo\"" #~ msgid "Gambling using real money" #~ msgstr "Đánh bạc bằng tiền thật" #~ msgid "No ability to spend money" #~ msgstr "Không có khả năng tiêu tiền" #~ msgid "Ability to spend real money in-game" #~ msgstr "Khả năng tiêu tiền thật trong trò chơi" #~ msgid "No sharing of social network usernames or email addresses" #~ msgstr "" #~ "Không chia sẻ tên người dùng hay địa chỉ email dùng trên mạng xã hội" #~ msgid "Sharing social network usernames or email addresses" #~ msgstr "Chia sẻ tên người dùng mạng xã hội hoặc địa chỉ email" #~ msgid "No sharing of user information with 3rd parties" #~ msgstr "Không chia sẻ thông tin người dùng với các bên thứ ba" #~ msgid "No sharing of physical location to other users" #~ msgstr "Không chia sẻ vị trí thực tế với người dùng khác" #~ msgid "Sharing physical location to other users" #~ msgstr "Chia sẻ địa điểm vật lý với người dùng khác" malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/po/zh_CN.po000066400000000000000000000420021505556674000235510ustar00rootroot00000000000000# Chinese (China) translation for malcontent. # Copyright (C) 2020 malcontent's COPYRIGHT HOLDER # This file is distributed under the same license as the malcontent package. # Damned , 2020. # Dingzhong Chen , 2020. # lumingzh , 2024. # msgid "" msgstr "" "Project-Id-Version: malcontent master\n" "Report-Msgid-Bugs-To: https://gitlab.freedesktop.org/pwithnall/malcontent/" "issues\n" "POT-Creation-Date: 2024-03-26 03:25+0000\n" "PO-Revision-Date: 2024-09-10 11:11+0800\n" "Last-Translator: lumingzh \n" "Language-Team: Chinese (China) \n" "Language: zh_CN\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Gtranslator 46.1\n" "Plural-Forms: nplurals=1; plural=0;\n" #: accounts-service/com.endlessm.ParentalControls.policy.in:4 msgid "Change your own app filter" msgstr "更改您自己的应用程序过滤器" #: accounts-service/com.endlessm.ParentalControls.policy.in:5 msgid "Authentication is required to change your app filter." msgstr "需要认证才能更改您的应用程序过滤器。" #: accounts-service/com.endlessm.ParentalControls.policy.in:14 msgid "Read your own app filter" msgstr "读取您自己的应用程序过滤器" #: accounts-service/com.endlessm.ParentalControls.policy.in:15 msgid "Authentication is required to read your app filter." msgstr "需要认证才能读取您的应用程序过滤器。" #: accounts-service/com.endlessm.ParentalControls.policy.in:24 msgid "Change another user’s app filter" msgstr "更改另一个用户的应用程序过滤器" #: accounts-service/com.endlessm.ParentalControls.policy.in:25 msgid "Authentication is required to change another user’s app filter." msgstr "需要认证才能更改另一个用户的应用程序过滤器。" #: accounts-service/com.endlessm.ParentalControls.policy.in:34 msgid "Read another user’s app filter" msgstr "读取另一个用户的应用程序过滤器" #: accounts-service/com.endlessm.ParentalControls.policy.in:35 msgid "Authentication is required to read another user’s app filter." msgstr "需要认证才能读取另一个用户的应用程序过滤器。" #: accounts-service/com.endlessm.ParentalControls.policy.in:44 msgid "Change your own session limits" msgstr "更改您自己的会话限制" #: accounts-service/com.endlessm.ParentalControls.policy.in:45 msgid "Authentication is required to change your session limits." msgstr "需要认证才能更改您的会话限制。" #: accounts-service/com.endlessm.ParentalControls.policy.in:54 msgid "Read your own session limits" msgstr "读取您自己的会话限制" #: accounts-service/com.endlessm.ParentalControls.policy.in:55 msgid "Authentication is required to read your session limits." msgstr "需要认证才能读取您的会话限制。" #: accounts-service/com.endlessm.ParentalControls.policy.in:64 msgid "Change another user’s session limits" msgstr "更改另一个用户的会话限制" #: accounts-service/com.endlessm.ParentalControls.policy.in:65 msgid "Authentication is required to change another user’s session limits." msgstr "需要认证才能更改另一个用户的会话限制。" #: accounts-service/com.endlessm.ParentalControls.policy.in:74 msgid "Read another user’s session limits" msgstr "读取另一个用户的会话限制" #: accounts-service/com.endlessm.ParentalControls.policy.in:75 msgid "Authentication is required to read another user’s session limits." msgstr "需要认证才能读取另一个用户的会话限制。" #: accounts-service/com.endlessm.ParentalControls.policy.in:84 msgid "Change your own account info" msgstr "更改您自己的帐户信息" #: accounts-service/com.endlessm.ParentalControls.policy.in:85 msgid "Authentication is required to change your account info." msgstr "需要认证才能更改您的帐户信息。" #: accounts-service/com.endlessm.ParentalControls.policy.in:94 msgid "Read your own account info" msgstr "读取您自己的帐户信息" #: accounts-service/com.endlessm.ParentalControls.policy.in:95 msgid "Authentication is required to read your account info." msgstr "需要认证才能读取您的帐户信息。" #: accounts-service/com.endlessm.ParentalControls.policy.in:104 msgid "Change another user’s account info" msgstr "更改另一个用户的帐户信息" #: accounts-service/com.endlessm.ParentalControls.policy.in:105 msgid "Authentication is required to change another user’s account info." msgstr "需要认证才能更改另一个用户的帐户信息。" #: accounts-service/com.endlessm.ParentalControls.policy.in:114 msgid "Read another user’s account info" msgstr "读取另一个用户的帐户信息" #: accounts-service/com.endlessm.ParentalControls.policy.in:115 msgid "Authentication is required to read another user’s account info." msgstr "需要认证才能读取另一个用户的帐户信息。" #: libmalcontent/app-filter.c:696 #, c-format msgid "App filter for user %u was in an unrecognized format" msgstr "用户 %u 的应用程序过滤器的格式无法识别" #: libmalcontent/app-filter.c:727 #, c-format msgid "OARS filter for user %u has an unrecognized kind ‘%s’" msgstr "用户 %u 的 OARS 过滤器中存在无法识别的类别“%s”" #: libmalcontent/manager.c:283 libmalcontent/manager.c:420 #: libmalcontent/manager.c:803 #, c-format msgid "Not allowed to query parental controls data for user %u" msgstr "不允许查询用户 %u 的家长控制数据" #: libmalcontent/manager.c:288 #, c-format msgid "User %u does not exist" msgstr "用户 %u 不存在" #: libmalcontent/manager.c:296 msgid "System accounts service not available" msgstr "系统帐户服务不可用" #: libmalcontent/manager.c:402 msgid "App filtering is globally disabled" msgstr "已全局禁用应用程序过滤" #: libmalcontent/manager.c:785 msgid "Session limits are globally disabled" msgstr "已全局禁用会话限制" #: libmalcontent/session-limits.c:306 #, c-format msgid "Session limit for user %u was in an unrecognized format" msgstr "用户 %u 的会话限制的格式无法识别" #: libmalcontent/session-limits.c:328 #, c-format msgid "Session limit for user %u has an unrecognized type ‘%u’" msgstr "用户 %u 的会话限制中存在无法识别的类型“%u”" #: libmalcontent/session-limits.c:346 #, c-format msgid "Session limit for user %u has invalid daily schedule %u–%u" msgstr "用户 %u 的会话限制中存在无效的每日时间安排 %u–%u" #. Translators: the placeholder is a user’s full name #: libmalcontent-ui/restrict-applications-dialog.c:256 #, c-format msgid "Restrict %s from using the following installed applications." msgstr "限制 %s 使用下列已安装的应用程序。" #: libmalcontent-ui/restrict-applications-dialog.ui:6 msgid "Restrict Applications" msgstr "限制应用程序" #: libmalcontent-ui/restrict-applications-dialog.ui:22 msgid "Search for applications…" msgstr "搜索应用程序…" #: libmalcontent-ui/restrict-applications-selector.ui:13 msgid "No applications found to restrict." msgstr "未找到要限制的应用程序。" #. Translators: this is the full name for an unknown user account. #: libmalcontent-ui/user-controls.c:198 libmalcontent-ui/user-controls.c:209 msgid "unknown" msgstr "未知" #: libmalcontent-ui/user-controls.c:306 libmalcontent-ui/user-controls.c:394 #: libmalcontent-ui/user-controls.c:647 msgid "Unrestricted" msgstr "未限制" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:476 #, c-format msgid "" "Prevents %s from running web browsers. Limited web content may still be " "available in other applications." msgstr "" "阻止 %s 运行网页浏览器。在其他应用程序中可能仍然可以访问受限的网页内容。" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:481 #, c-format msgid "Prevents specified applications from being used by %s." msgstr "阻止 %s 使用指定的应用程序。" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:486 #, c-format msgid "Prevents %s from installing applications." msgstr "阻止 %s 安装应用程序。" #: libmalcontent-ui/user-controls.ui:25 msgid "Application Usage Restrictions" msgstr "应用程序使用限制" #: libmalcontent-ui/user-controls.ui:28 msgid "Restrict _Web Browsers" msgstr "限制网页浏览器(_W)" #: libmalcontent-ui/user-controls.ui:51 msgid "_Restrict Applications" msgstr "限制应用程序(_R)" #: libmalcontent-ui/user-controls.ui:73 msgid "Software Installation Restrictions" msgstr "软件安装限制" #: libmalcontent-ui/user-controls.ui:77 msgid "Restrict Application _Installation" msgstr "限制安装应用程序(_I)" #: libmalcontent-ui/user-controls.ui:99 msgid "Application _Suitability" msgstr "应用程序适宜性(_S)" #: libmalcontent-ui/user-controls.ui:102 msgid "" "Restricts the browsing or installation of applications unsuitable for this " "age or younger." msgstr "限制不适宜该年龄或更小用户使用应用程序的浏览或安装。" #. Translators: This documents the --user command line option to malcontent-control: #: malcontent-control/application.c:102 msgid "User to select in the UI" msgstr "在用户界面中要选择的用户" #. Translators: This is a placeholder for a command line argument value: #: malcontent-control/application.c:104 msgid "USERNAME" msgstr "用户名" #: malcontent-control/application.c:116 msgid "— view and edit parental controls" msgstr "— 查看与编辑家长控制" #. Translators: This is the title of the main window #. Translators: the name of the application as it appears in a software center #: malcontent-control/application.c:123 malcontent-control/main.ui:17 #: malcontent-control/org.freedesktop.MalcontentControl.metainfo.xml.in:9 #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:3 msgid "Parental Controls" msgstr "家长控制" #: malcontent-control/application.c:309 msgid "Copyright © 2019, 2020 Endless Mobile, Inc." msgstr "版权所有 © 2019, 2020 Endless Mobile, Inc." #. Translators: this should be "translated" to the #. names of people who have translated Malcontent into #. this language, one per line. #: malcontent-control/application.c:314 msgid "translator-credits" msgstr "" "Damned , 2020.\n" "Dingzhong Chen , 2020.\n" "lumingzh , 2024." #. Translators: "Malcontent" is the brand name of this #. project, so should not be translated. #: malcontent-control/application.c:320 msgid "Malcontent Website" msgstr "Malcontent 网站" #: malcontent-control/application.c:340 msgid "The help contents could not be displayed" msgstr "无法显示帮助内容" #: malcontent-control/application.c:389 msgid "Failed to load user data from the system" msgstr "无法从系统中载入用户数据" #: malcontent-control/application.c:391 msgid "Please make sure that the AccountsService is installed and enabled." msgstr "请确保 AccountsService 已安装且已启用。" # 没找到国内的这类非盈利网站,原链接没有中文版,搜到的这个网站有中文版。 #. Translators: Replace the link to commonsensemedia.org with some #. * localised guidance for parents/carers on how to set restrictions on #. * their child/caree in a responsible way which is in keeping with the #. * best practice and culture of the region. If no suitable localised #. * guidance exists, and if the default commonsensemedia.org link is not #. * suitable, please file an issue against malcontent so we can discuss #. * further! #. * https://gitlab.freedesktop.org/pwithnall/malcontent/-/issues/new #. #: malcontent-control/application.c:424 #, c-format msgid "" "It’s recommended that restrictions are set as part of an ongoing " "conversation with %s. Read guidance on what to consider." msgstr "" "建议与 %s 一起沟通进行限制设置。可参阅指南了解考虑事项。" #: malcontent-control/carousel.ui:38 msgid "Previous Page" msgstr "上一页" #: malcontent-control/carousel.ui:57 msgid "Next Page" msgstr "下一页" #: malcontent-control/main.ui:87 msgid "Permission Required" msgstr "需要权限" #: malcontent-control/main.ui:88 msgid "" "Permission is required to view and change user parental controls settings." msgstr "需要权限才能查看和更改用户的家长控制设置。" #: malcontent-control/main.ui:110 msgid "No Standard User Accounts" msgstr "无标准用户帐户" #: malcontent-control/main.ui:111 msgid "" "Parental controls can only be applied to standard user\n" "accounts. These can be created in the user settings." msgstr "" "家长控制只适用于标准用户帐户。\n" "可在用户设置里创建这类帐户。" #: malcontent-control/main.ui:115 msgid "_User Settings" msgstr "用户设置(_U)" #: malcontent-control/main.ui:138 msgid "Loading…" msgstr "正在载入……" #: malcontent-control/main.ui:171 msgid "_Help" msgstr "帮助(_H)" #: malcontent-control/main.ui:175 msgid "_About Parental Controls" msgstr "关于家长控制(_A)" #. Translators: the brief summary of the application as it appears in a software center. #: malcontent-control/org.freedesktop.MalcontentControl.metainfo.xml.in:12 #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:4 msgid "Set parental controls and monitor usage by users" msgstr "设置家长控制以及监视用户的使用情况" #. Translators: These are the application description paragraphs in the AppData file. #: malcontent-control/org.freedesktop.MalcontentControl.metainfo.xml.in:16 msgid "" "Manage users’ parental controls restrictions, controlling how long they can " "use the computer for, what software they can install, and what installed " "software they can run." msgstr "" "管理用户的家长控制限制,控制他们可以使用计算机多长时间、可以安装什么软件,以" "及可以运行哪些安装的软件。" #: malcontent-control/org.freedesktop.MalcontentControl.metainfo.xml.in:25 msgid "Main window" msgstr "主窗口" #. Translators: Search terms to find this application. Do NOT translate or localise the semicolons! The list MUST also end with a semicolon! #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:13 msgid "" "parental controls;screen time;app restrictions;web browser restrictions;oars;" "usage;usage limit;kid;child;" msgstr "" "parental controls;screen time;app restrictions;web browser restrictions;oars;" "usage;usage limit;kid;child;家长控制;屏幕时间;应用程序限制;网页浏览器限制;使" "用情况;使用限制;儿童;" #: malcontent-control/org.freedesktop.MalcontentControl.policy.in:9 msgid "Manage parental controls" msgstr "管理家长控制" #: malcontent-control/org.freedesktop.MalcontentControl.policy.in:10 msgid "Authentication is required to read and change user parental controls" msgstr "需要认证才能读取和更改用户的家长控制" #: malcontent-control/user-selector.c:426 msgid "Your account" msgstr "您的帐户" #. Always allow root, to avoid a situation where this PAM module prevents #. * all users logging in with no way of recovery. #: pam/pam_malcontent.c:142 pam/pam_malcontent.c:188 #, c-format msgid "User ‘%s’ has no time limits enabled" msgstr "用户“%s”没有启用时间限制" #: pam/pam_malcontent.c:151 pam/pam_malcontent.c:172 #, c-format msgid "Error getting session limits for user ‘%s’: %s" msgstr "获取用户“%s”的会话限制时出错:%s" #: pam/pam_malcontent.c:182 #, c-format msgid "User ‘%s’ has no time remaining" msgstr "用户“%s”没有剩余时间" #: pam/pam_malcontent.c:200 #, c-format msgid "Error setting time limit on login session: %s" msgstr "设置登录会话的时间限制时出错:%s" #, c-format #~ msgid "%s (%s)" #~ msgstr "%s(%s)" #~ msgid "General" #~ msgstr "大众" #~ msgid "ALL" #~ msgstr "全部" #~ msgid "Adults Only" #~ msgstr "仅限成人" #~ msgid "Mature" #~ msgstr "成熟" #~ msgid "Teen" #~ msgstr "青少年" #~ msgid "Everyone 10+" #~ msgstr "10 岁以上" #~ msgid "Everyone" #~ msgstr "所有人" #~ msgid "Early Childhood" #~ msgstr "幼儿" #~ msgid "All Ages" #~ msgstr "所有年龄" #~ msgid "The GNOME Project" #~ msgstr "GNOME 项目" #~ msgid "No Child Users Configured" #~ msgstr "未配置儿童用户" #~ msgid "" #~ "No child users are currently set up on the system. Create one before " #~ "setting up their parental controls." #~ msgstr "系统上当前没有建立儿童用户。先创建一个才能设置其家长控制。" #~ msgid "Create _Child User" #~ msgstr "创建儿童用户(_C)" #~ msgid "Applications installed by %s will not appear for other users." #~ msgstr "由 %s 安装的应用程序将不会出现在其他用户中。" #~ msgid "Restrict Application Installation for _Others" #~ msgstr "限制为其他人安装应用程序(_O)" #~ msgid "Not allowed to query session limits data for user %u" #~ msgstr "不允许查询用户 %u 的会话限制数据" malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/po/zh_TW.po000066400000000000000000000660711505556674000236170ustar00rootroot00000000000000# Chinese translation for malcontent. # Copyright (C) 2018-2020 malcontent's COPYRIGHT HOLDER # This file is distributed under the same license as the malcontent package. # # Translators: # Abel Cheung , 2001-2003, 2005 # Chao-Hsiung Liao , 2010 # Roddy Shuler , 2018 # S.J. Luo , 1999 # Wei-Lun Chao , 2010 # Will Thompson , 2019, 2020 # Freddy Cheng , 2022. # msgid "" msgstr "" "Project-Id-Version: malcontent\n" "Report-Msgid-Bugs-To: https://gitlab.freedesktop.org/pwithnall/malcontent/" "issues\n" "POT-Creation-Date: 2022-05-05 03:26+0000\n" "PO-Revision-Date: 2022-05-31 01:43+0800\n" "Last-Translator: Freddy Cheng \n" "Language-Team: Chinese - Taiwan \n" "Language: zh_TW\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0\n" "X-Generator: Gtranslator 41.0\n" #: accounts-service/com.endlessm.ParentalControls.policy.in:4 msgid "Change your own app filter" msgstr "更改您的應用程式過濾器" #: accounts-service/com.endlessm.ParentalControls.policy.in:5 msgid "Authentication is required to change your app filter." msgstr "需要認證才能更改您的應用程式過濾器。" #: accounts-service/com.endlessm.ParentalControls.policy.in:14 msgid "Read your own app filter" msgstr "讀取您的應用程式過濾器" #: accounts-service/com.endlessm.ParentalControls.policy.in:15 msgid "Authentication is required to read your app filter." msgstr "需要認證才能讀取您的應用程式過濾器。" #: accounts-service/com.endlessm.ParentalControls.policy.in:24 msgid "Change another user’s app filter" msgstr "更改另一位使用者的應用程式過濾器" #: accounts-service/com.endlessm.ParentalControls.policy.in:25 msgid "Authentication is required to change another user’s app filter." msgstr "需要認證才能更改另一位使用者的應用程式過濾器。" #: accounts-service/com.endlessm.ParentalControls.policy.in:34 msgid "Read another user’s app filter" msgstr "讀取另一位使用者的應用程式過濾器" #: accounts-service/com.endlessm.ParentalControls.policy.in:35 msgid "Authentication is required to read another user’s app filter." msgstr "需要認證才能讀取另一位使用者的應用程式過濾器。" #: accounts-service/com.endlessm.ParentalControls.policy.in:44 msgid "Change your own session limits" msgstr "更改您的工作階段限制" #: accounts-service/com.endlessm.ParentalControls.policy.in:45 msgid "Authentication is required to change your session limits." msgstr "需要認證才能更改您的工作階段限制。" #: accounts-service/com.endlessm.ParentalControls.policy.in:54 msgid "Read your own session limits" msgstr "讀取您的工作階段限制" #: accounts-service/com.endlessm.ParentalControls.policy.in:55 msgid "Authentication is required to read your session limits." msgstr "需要認證才能讀取您的工作階段限制。" #: accounts-service/com.endlessm.ParentalControls.policy.in:64 msgid "Change another user’s session limits" msgstr "更改另一位使用者的工作階段限制" #: accounts-service/com.endlessm.ParentalControls.policy.in:65 msgid "Authentication is required to change another user’s session limits." msgstr "需要驗證才能更改另一位使用者的工作階段限制。" #: accounts-service/com.endlessm.ParentalControls.policy.in:74 msgid "Read another user’s session limits" msgstr "讀取另一位使用者的工作階段限制" #: accounts-service/com.endlessm.ParentalControls.policy.in:75 msgid "Authentication is required to read another user’s session limits." msgstr "需要認證才能讀取另一位使用者的工作階段限制。" #: accounts-service/com.endlessm.ParentalControls.policy.in:84 msgid "Change your own account info" msgstr "更改您的帳戶資訊" #: accounts-service/com.endlessm.ParentalControls.policy.in:85 msgid "Authentication is required to change your account info." msgstr "需要認證才能更改您的帳戶資訊。" #: accounts-service/com.endlessm.ParentalControls.policy.in:94 msgid "Read your own account info" msgstr "讀取您的帳戶資訊" #: accounts-service/com.endlessm.ParentalControls.policy.in:95 msgid "Authentication is required to read your account info." msgstr "需要認證才能讀取您的帳戶資訊。" #: accounts-service/com.endlessm.ParentalControls.policy.in:104 msgid "Change another user’s account info" msgstr "更改另一位使用者的帳戶資訊" #: accounts-service/com.endlessm.ParentalControls.policy.in:105 msgid "Authentication is required to change another user’s account info." msgstr "需要認證才能更改另一位使用者的帳戶資訊。" #: accounts-service/com.endlessm.ParentalControls.policy.in:114 msgid "Read another user’s account info" msgstr "讀取另一位使用者的帳戶資訊" #: accounts-service/com.endlessm.ParentalControls.policy.in:115 msgid "Authentication is required to read another user’s account info." msgstr "需要認證才能讀取另一位使用者的帳戶資訊。" #: libmalcontent/app-filter.c:694 #, c-format msgid "App filter for user %u was in an unrecognized format" msgstr "使用者 %u 的應用程式過濾器設定格式錯誤" #: libmalcontent/app-filter.c:725 #, c-format msgid "OARS filter for user %u has an unrecognized kind ‘%s’" msgstr "使用者 %u 的 OARS 過濾器設定有無效類型「%s」" #: libmalcontent/manager.c:283 libmalcontent/manager.c:420 #: libmalcontent/manager.c:803 #, c-format #| msgid "Not allowed to query app filter data for user %u" msgid "Not allowed to query parental controls data for user %u" msgstr "不允許查詢使用者 %u 的應用程式過濾器資料" #: libmalcontent/manager.c:288 #, c-format msgid "User %u does not exist" msgstr "使用者「%u」不存在" #: libmalcontent/manager.c:296 msgid "System accounts service not available" msgstr "沒有系統帳號服務" #: libmalcontent/manager.c:402 msgid "App filtering is globally disabled" msgstr "已全域停用應用程式過濾器" #: libmalcontent/manager.c:785 msgid "Session limits are globally disabled" msgstr "已全域停用工作階段限制" #: libmalcontent/session-limits.c:306 #, c-format msgid "Session limit for user %u was in an unrecognized format" msgstr "使用者 %u 的工作階段限制設定格式錯誤" #: libmalcontent/session-limits.c:328 #, c-format msgid "Session limit for user %u has an unrecognized type ‘%u’" msgstr "使用者 %u 的工作階段限制設定有無效類型「%u」" #: libmalcontent/session-limits.c:346 #, c-format msgid "Session limit for user %u has invalid daily schedule %u–%u" msgstr "使用者 %u 的工作階段限制每日排程 %u–%u 設定無效" #. TRANSLATORS: This is the formatting of English and localized name #. of the rating e.g. "Adults Only (solo adultos)" #: libmalcontent-ui/gs-content-rating.c:75 #, c-format msgid "%s (%s)" msgstr "%s(%s)" #: libmalcontent-ui/gs-content-rating.c:209 msgid "General" msgstr "一般" #: libmalcontent-ui/gs-content-rating.c:218 msgid "ALL" msgstr "所有" #: libmalcontent-ui/gs-content-rating.c:222 #: libmalcontent-ui/gs-content-rating.c:485 msgid "Adults Only" msgstr "僅限成人" #: libmalcontent-ui/gs-content-rating.c:224 #: libmalcontent-ui/gs-content-rating.c:484 msgid "Mature" msgstr "成熟" #: libmalcontent-ui/gs-content-rating.c:226 #: libmalcontent-ui/gs-content-rating.c:483 msgid "Teen" msgstr "青少年" #: libmalcontent-ui/gs-content-rating.c:228 #: libmalcontent-ui/gs-content-rating.c:482 msgid "Everyone 10+" msgstr "十歲以上" #: libmalcontent-ui/gs-content-rating.c:230 #: libmalcontent-ui/gs-content-rating.c:481 msgid "Everyone" msgstr "任何人" #: libmalcontent-ui/gs-content-rating.c:232 #: libmalcontent-ui/gs-content-rating.c:480 msgid "Early Childhood" msgstr "幼兒" #. Translators: the placeholder is a user’s full name #: libmalcontent-ui/restrict-applications-dialog.c:222 #, c-format msgid "Restrict %s from using the following installed applications." msgstr "限制 %s 使用下列已安裝的應用程式。" #: libmalcontent-ui/restrict-applications-dialog.ui:6 #: libmalcontent-ui/restrict-applications-dialog.ui:12 msgid "Restrict Applications" msgstr "限制應用程式" #: libmalcontent-ui/restrict-applications-selector.ui:24 msgid "No applications found to restrict." msgstr "沒有可限制的應用程式。" #. Translators: this is the full name for an unknown user account. #: libmalcontent-ui/user-controls.c:207 libmalcontent-ui/user-controls.c:218 msgid "unknown" msgstr "不明" #: libmalcontent-ui/user-controls.c:312 libmalcontent-ui/user-controls.c:397 #: libmalcontent-ui/user-controls.c:669 msgid "All Ages" msgstr "所有年齡" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:477 #, c-format msgid "" "Prevents %s from running web browsers. Limited web content may still be " "available in other applications." msgstr "防止 %s 執行網頁瀏覽器。受限制的網頁內容仍可能在其他應用程式中取用。" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:482 #, c-format msgid "Prevents specified applications from being used by %s." msgstr "防止 %s 使用特定應用程式。" #. Translators: The placeholder is a user’s display name. #: libmalcontent-ui/user-controls.c:487 #, c-format msgid "Prevents %s from installing applications." msgstr "防止 %s 安裝應用程式。" #: libmalcontent-ui/user-controls.ui:16 msgid "Application Usage Restrictions" msgstr "應用程式使用限制" #: libmalcontent-ui/user-controls.ui:68 msgid "Restrict _Web Browsers" msgstr "限制網頁瀏覽器(_W)" #: libmalcontent-ui/user-controls.ui:152 msgid "_Restrict Applications" msgstr "限制應用程式(_R)" #: libmalcontent-ui/user-controls.ui:231 msgid "Software Installation Restrictions" msgstr "軟體安裝限制" #: libmalcontent-ui/user-controls.ui:282 msgid "Restrict Application _Installation" msgstr "限制應用程式安裝(_I)" #: libmalcontent-ui/user-controls.ui:367 msgid "Application _Suitability" msgstr "應用程式合適年齡(_S)" #: libmalcontent-ui/user-controls.ui:389 msgid "" "Restricts browsing or installation of applications to applications suitable " "for certain ages or above." msgstr "根據應用程式年齡分級制度,限制可瀏覽或安裝的應用程式項目。" #. Translators: This documents the --user command line option to malcontent-control: #: malcontent-control/application.c:102 msgid "User to select in the UI" msgstr "界面上要選擇的使用者" #. Translators: This is a placeholder for a command line argument value: #: malcontent-control/application.c:104 msgid "USERNAME" msgstr "使用者名稱" #: malcontent-control/application.c:116 #| msgid "Manage parental controls" msgid "— view and edit parental controls" msgstr "― 檢視和編輯家長控制" #. Translators: This is the title of the main window #. Translators: the name of the application as it appears in a software center #: malcontent-control/application.c:123 malcontent-control/main.ui:12 #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:9 #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:3 msgid "Parental Controls" msgstr "家長控制" #: malcontent-control/application.c:309 msgid "Copyright © 2019, 2020 Endless Mobile, Inc." msgstr "版權所有 © 2019, 2020 Endless Mobile, Inc." #. Translators: this should be "translated" to the #. names of people who have translated Malcontent into #. this language, one per line. #: malcontent-control/application.c:314 msgid "translator-credits" msgstr "" "S.J. Luo , 1999\n" "Abel Cheung , 2001-2003, 2005\n" "Wei-Lun Chao , 2010\n" "Chao-Hsiung Liao , 2010\n" "Roddy Shuler , 2018\n" "Will Thompson , 2019, 2020\n" "Freddy Cheng , 2022." #. Translators: "Malcontent" is the brand name of this #. project, so should not be translated. #: malcontent-control/application.c:320 msgid "Malcontent Website" msgstr "Malcontent 網站" #: malcontent-control/application.c:338 msgid "The help contents could not be displayed" msgstr "無法顯示求助內容" #: malcontent-control/application.c:375 msgid "Failed to load user data from the system" msgstr "無法從系統載入使用者資料" #: malcontent-control/application.c:377 msgid "Please make sure that the AccountsService is installed and enabled." msgstr "請確認已安裝並啟用 AccountsService。" #. Translators: Replace the link to commonsensemedia.org with some #. * localised guidance for parents/carers on how to set restrictions on #. * their child/caree in a responsible way which is in keeping with the #. * best practice and culture of the region. If no suitable localised #. * guidance exists, and if the default commonsensemedia.org link is not #. * suitable, please file an issue against malcontent so we can discuss #. * further! #. * https://gitlab.freedesktop.org/pwithnall/malcontent/-/issues/new #. #: malcontent-control/application.c:408 #, c-format msgid "" "It’s recommended that restrictions are set as part of an ongoing " "conversation with %s. Read guidance on what to consider." msgstr "" "建議在設定家長控制前要先與 %s 溝通過。閱讀指南了解須考慮的事項。" #: malcontent-control/carousel.ui:48 msgid "Previous Page" msgstr "上一頁" #: malcontent-control/carousel.ui:74 msgid "Next Page" msgstr "下一頁" #: malcontent-control/main.ui:115 msgid "Permission Required" msgstr "需要許可" #: malcontent-control/main.ui:129 msgid "" "Permission is required to view and change user parental controls settings." msgstr "需要許可才能檢視和更改家長控制設定。" #: malcontent-control/main.ui:184 msgid "No Standard User Accounts" msgstr "沒有標準使用者" #: malcontent-control/main.ui:199 msgid "" "Parental controls can only be applied to standard user\n" "accounts. These can be created in the user settings." msgstr "" "家長控制只能套用到標準使用者上。\n" "可至使用者設定建立帳號。" #: malcontent-control/main.ui:212 msgid "_User Settings" msgstr "使用者設定(_U)" #: malcontent-control/main.ui:242 msgid "Loading…" msgstr "正在載入…" #: malcontent-control/main.ui:305 msgid "_Help" msgstr "求助(_H)" #: malcontent-control/main.ui:309 msgid "_About Parental Controls" msgstr "關於家長控制(_A)" #. Translators: the brief summary of the application as it appears in a software center. #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:12 #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:4 msgid "Set parental controls and monitor usage by users" msgstr "設定家長控制和監視孩童或青少年的使用情況" #. Translators: These are the application description paragraphs in the AppData file. #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:16 msgid "" "Manage users’ parental controls restrictions, controlling how long they can " "use the computer for, what software they can install, and what installed " "software they can run." msgstr "" "管理孩童或青少年的家長控制設定值,控制他們的電腦使用時間、可以安裝的軟體以及" "能執行哪些已安裝的軟體。" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:25 msgid "Main window" msgstr "主視窗" #: malcontent-control/org.freedesktop.MalcontentControl.appdata.xml.in:39 msgid "The GNOME Project" msgstr "GNOME 專案" #. Translators: Search terms to find this application. Do NOT translate or localise the semicolons! The list MUST also end with a semicolon! #: malcontent-control/org.freedesktop.MalcontentControl.desktop.in:14 msgid "" "parental controls;screen time;app restrictions;web browser restrictions;oars;" "usage;usage limit;kid;child;" msgstr "" "parental controls;screen time;app restrictions;web browser restrictions;oars;" "usage;usage limit;kid;child;家長控制;分級控制;電腦使用時間;應用程式限制;網頁" "瀏覽器限制;使用;使用限制;小孩;兒童;孩童;青少年;軟體限制;安裝限制;限制;" #: malcontent-control/org.freedesktop.MalcontentControl.policy.in:9 msgid "Manage parental controls" msgstr "管理家長控制" #: malcontent-control/org.freedesktop.MalcontentControl.policy.in:10 msgid "Authentication is required to read and change user parental controls" msgstr "需要認證才能讀取和更改使用者的家長控制" #: malcontent-control/user-selector.c:426 msgid "Your account" msgstr "您的帳號" #. Always allow root, to avoid a situation where this PAM module prevents #. * all users logging in with no way of recovery. #: pam/pam_malcontent.c:142 pam/pam_malcontent.c:188 #, c-format msgid "User ‘%s’ has no time limits enabled" msgstr "沒有啟動「%s」的使用時間限制" #: pam/pam_malcontent.c:151 pam/pam_malcontent.c:172 #, c-format msgid "Error getting session limits for user ‘%s’: %s" msgstr "取得使用者「%s」的工作階段限制設定發生錯誤:%s" #: pam/pam_malcontent.c:182 #, c-format msgid "User ‘%s’ has no time remaining" msgstr "使用者「%s」已達使用時間上限" #: pam/pam_malcontent.c:200 #, c-format msgid "Error setting time limit on login session: %s" msgstr "無法在登入工作階段設定時間限制:%s" #, c-format #~ msgid "Not allowed to query session limits data for user %u" #~ msgstr "不允許查詢使用者 %u 工作階段限制" #, c-format #~ msgid "Applications installed by %s will not appear for other users." #~ msgstr "由 %s 安裝的應用程式將不會讓其他使用者看到。" #~ msgid "Restrict Application Installation for _Others" #~ msgstr " 針對其他人_限制安裝應用程式" #~ msgid "No Child Users Configured" #~ msgstr "沒有預設兒童使用者" #~ msgid "" #~ "No child users are currently set up on the system. Create one before " #~ "setting up their parental controls." #~ msgstr "" #~ "系統目前沒有兒童使用者的設定。請在設定他們的分級控制之前先建立一個。" #~ msgid "Create _Child User" #~ msgstr "建立 _兒童使用者" #~ msgid "No cartoon violence" #~ msgstr "沒有漫畫暴力" #~ msgid "Cartoon characters in unsafe situations" #~ msgstr "漫畫角色處在非安全的情況下" #~ msgid "Cartoon characters in aggressive conflict" #~ msgstr "漫畫角色有強勢衝突" #~ msgid "Graphic violence involving cartoon characters" #~ msgstr "涉及漫畫角色的圖像暴力" #~ msgid "No fantasy violence" #~ msgstr "沒有幻想暴力" #~ msgid "Characters in unsafe situations easily distinguishable from reality" #~ msgstr "人物處在非安全的情況下但容易與現實區隔" #~ msgid "" #~ "Characters in aggressive conflict easily distinguishable from reality" #~ msgstr "人物有強勢衝突但容易與現實區隔" #~ msgid "Graphic violence easily distinguishable from reality" #~ msgstr "圖像暴力但容易與現實區隔" #~ msgid "No realistic violence" #~ msgstr "沒有現實暴力" #~ msgid "Mildly realistic characters in unsafe situations" #~ msgstr "輕微真實人物處在非安全的情況下" #~ msgid "Depictions of realistic characters in aggressive conflict" #~ msgstr "真實人物有強勢衝突的描繪" #~ msgid "Graphic violence involving realistic characters" #~ msgstr "涉及真實人物的圖像暴力" #~ msgid "No bloodshed" #~ msgstr "沒有殺人" #~ msgid "Unrealistic bloodshed" #~ msgstr "非寫實的殺人" #~ msgid "Realistic bloodshed" #~ msgstr "寫實的殺人" #~ msgid "Depictions of bloodshed and the mutilation of body parts" #~ msgstr "殺人及殘害身體的描繪" #~ msgid "No sexual violence" #~ msgstr "沒有性暴力" #~ msgid "Rape or other violent sexual behavior" #~ msgstr "強暴或其他暴力式性行為" #~ msgid "No references to alcohol" #~ msgstr "沒有涉及酒精" #~ msgid "References to alcoholic beverages" #~ msgstr "涉及酒精性飲料" #~ msgid "Use of alcoholic beverages" #~ msgstr "使用到酒精性飲料" #~ msgid "No references to illicit drugs" #~ msgstr "沒有涉及非法藥物" #~ msgid "References to illicit drugs" #~ msgstr "涉及非法藥物" #~ msgid "Use of illicit drugs" #~ msgstr "使用到非法藥物" #~ msgid "References to tobacco products" #~ msgstr "涉及菸草產品" #~ msgid "Use of tobacco products" #~ msgstr "使用到菸草產品" #~ msgid "No nudity of any sort" #~ msgstr "沒有任何形式之裸體" #~ msgid "Brief artistic nudity" #~ msgstr "短暫藝術性裸體" #~ msgid "Prolonged nudity" #~ msgstr "長時間裸體" #~ msgid "No references or depictions of sexual nature" #~ msgstr "沒有涉及性或描繪性等相關事件" #~ msgid "Provocative references or depictions" #~ msgstr "涉及刺激或描繪刺激" #~ msgid "Sexual references or depictions" #~ msgstr "涉及性或描繪性" #~ msgid "Graphic sexual behavior" #~ msgstr "圖像式性行為" #~ msgid "No profanity of any kind" #~ msgstr "沒有任何形式之辱駡" #~ msgid "Mild or infrequent use of profanity" #~ msgstr "輕微或少有使用辱駡" #~ msgid "Moderate use of profanity" #~ msgstr "偶爾使用辱駡" #~ msgid "Strong or frequent use of profanity" #~ msgstr "強烈或經常使用辱駡" #~ msgid "No inappropriate humor" #~ msgstr "沒有不適切之幽默" #~ msgid "Slapstick humor" #~ msgstr "低俗鬧劇式幽默" #~ msgid "Vulgar or bathroom humor" #~ msgstr "粗俗或廁所式幽默" #~ msgid "Mature or sexual humor" #~ msgstr "成人或性相關幽默" #~ msgid "No discriminatory language of any kind" #~ msgstr "沒有任何形式之歧視用語" #~ msgid "Negativity towards a specific group of people" #~ msgstr "排斥特定群體" #~ msgid "Discrimination designed to cause emotional harm" #~ msgstr "刻意造成情緒傷害之歧視" #~ msgid "Explicit discrimination based on gender, sexuality, race or religion" #~ msgstr "根據性別、性能力、種族、信仰所作的針對性歧視" #~ msgid "No advertising of any kind" #~ msgstr "沒有任何形式之行銷" #~ msgid "Product placement" #~ msgstr "置入性產品行銷" #~ msgid "Explicit references to specific brands or trademarked products" #~ msgstr "明確指涉特定廠牌或註冊商標之產品" #~ msgid "Users are encouraged to purchase specific real-world items" #~ msgstr "鼓吹使用者購買特定真實世界商品" #~ msgid "No gambling of any kind" #~ msgstr "任何形式之賭博" #~ msgid "Gambling on random events using tokens or credits" #~ msgstr "使用代幣或儲值之隨機活動性賭博" #~ msgid "Gambling using “play” money" #~ msgstr "使用「遊戲」財物之賭博" #~ msgid "Gambling using real money" #~ msgstr "使用實體金錢的賭博" #~ msgid "No ability to spend money" #~ msgstr "沒有金錢花費之功能" #~ msgid "Users are encouraged to donate real money" #~ msgstr "鼓勵使用者捐贈實體金錢" #~ msgid "Ability to spend real money in-game" #~ msgstr "可在遊戲中花費實體金錢" #~ msgid "No way to chat with other users" #~ msgstr "無法和其他使用者聊天" #~ msgid "User-to-user game interactions without chat functionality" #~ msgstr "使用者與使用者間遊戲性互動,不含聊天功能" #~ msgid "Moderated chat functionality between users" #~ msgstr "受審查的使用者間聊天功能" #~ msgid "Uncontrolled chat functionality between users" #~ msgstr "未受管制的使用者間聊天功能" #~ msgid "No way to talk with other users" #~ msgstr "無法和其他使用者對談" #~ msgid "Uncontrolled audio or video chat functionality between users" #~ msgstr "未受管制的使用者間音訊或視訊聊天功能" #~ msgid "No sharing of social network usernames or email addresses" #~ msgstr "不會分享社交網路使用者名稱或電子郵件爲止" #~ msgid "Sharing social network usernames or email addresses" #~ msgstr "分享社交網路使用者名稱或電子郵件位址" #~ msgid "No sharing of user information with 3rd parties" #~ msgstr "不會和第三方團體或單位分享使用者資訊" #~ msgid "Checking for the latest application version" #~ msgstr "檢查最新的應用程式版本" #~ msgid "Sharing diagnostic data that does not let others identify the user" #~ msgstr "分享無法讓他人辨識出使用者的診斷性數據資料" #~ msgid "Sharing information that lets others identify the user" #~ msgstr "分享可以讓其他人辨識出使用者的資訊" #~ msgid "No sharing of physical location to other users" #~ msgstr "不會和其他使用者分享實際地理位置" #~ msgid "Sharing physical location to other users" #~ msgstr "和其他使用者分享實際地理位置" #~ msgid "No references to homosexuality" #~ msgstr "沒有涉及同性戀議題" #~ msgid "Indirect references to homosexuality" #~ msgstr "間接涉及同性戀議題" #~ msgid "Kissing between people of the same gender" #~ msgstr "人類同性別親吻" #~ msgid "Graphic sexual behavior between people of the same gender" #~ msgstr "圖像式人類同性別性行為" #~ msgid "No references to prostitution" #~ msgstr "沒有涉及賣淫" #~ msgid "Indirect references to prostitution" #~ msgstr "間接涉及賣淫" #~ msgid "Direct references to prostitution" #~ msgstr "直接涉及賣淫" #~ msgid "Graphic depictions of the act of prostitution" #~ msgstr "圖像式賣淫動作描繪" #~ msgid "No references to adultery" #~ msgstr "沒有涉及通姦" #~ msgid "Indirect references to adultery" #~ msgstr "間接涉及通姦" #~ msgid "Direct references to adultery" #~ msgstr "直接涉及通姦" #~ msgid "Graphic depictions of the act of adultery" #~ msgstr "圖像式通姦行為描繪" #~ msgid "No sexualized characters" #~ msgstr "沒有性化角色" #~ msgid "Scantily clad human characters" #~ msgstr "衣著覆蓋極少的人類角色" #~ msgid "Overtly sexualized human characters" #~ msgstr "刻意性化的人類角色" #~ msgid "No references to desecration" #~ msgstr "沒有涉及褻瀆" #~ msgid "Depictions or references to historical desecration" #~ msgstr "描繪或涉及史實上的褻瀆" #~ msgid "Depictions of modern-day human desecration" #~ msgstr "描繪褻瀆當代人體" #~ msgid "Graphic depictions of modern-day desecration" #~ msgstr "圖像式當代褻瀆描繪" #~ msgid "No visible dead human remains" #~ msgstr "不會看見亡者遺體" #~ msgid "Visible dead human remains" #~ msgstr "會看見亡者遺體" #~ msgid "Dead human remains that are exposed to the elements" #~ msgstr "亡者遺體暴露在相關元素中" #~ msgid "Graphic depictions of desecration of human bodies" #~ msgstr "圖像式褻瀆人體的描繪" #~ msgid "No references to slavery" #~ msgstr "沒有涉及奴隸" #~ msgid "Depictions or references to historical slavery" #~ msgstr "描繪或涉及史實上的奴隸" #~ msgid "Depictions of modern-day slavery" #~ msgstr "描繪當代的奴隸行為" #~ msgid "Graphic depictions of modern-day slavery" #~ msgstr "圖像式當代奴隸行為描繪" malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/subprojects/000077500000000000000000000000001505556674000241375ustar00rootroot00000000000000malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/subprojects/libadwaita.wrap000066400000000000000000000001311505556674000271260ustar00rootroot00000000000000[wrap-git] url = https://gitlab.gnome.org/GNOME/libadwaita.git revision = 1.6.0 depth = 1malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/subprojects/libglib-testing.wrap000066400000000000000000000001771505556674000301160ustar00rootroot00000000000000[wrap-git] directory = libglib-testing url = https://gitlab.gnome.org/pwithnall/libglib-testing.git revision = 0.1.1 depth = 1 malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/template.test.in000066400000000000000000000000711505556674000247130ustar00rootroot00000000000000[Test] Type=session Exec=@installed_tests_dir@/@program@ malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/tools/000077500000000000000000000000001505556674000227345ustar00rootroot00000000000000malcontent-0.13.1-090042fec5181621e2fd8cfef9fc446ed86db98b/tools/meson-make-symlink.py000066400000000000000000000016451505556674000270340ustar00rootroot00000000000000#!/usr/bin/env python3 import os import sys destdir = os.environ.get('DESTDIR') source = sys.argv[1] target = sys.argv[2] def prepend_destdir(path): if destdir is not None: if os.path.isabs(path): return os.path.join(destdir, path[1:]) else: return os.path.join(destdir, path) else: return path def call_symlink(src, dst): try: os.remove(dst) except: pass os.symlink(src, dst) os.makedirs(os.path.dirname(prepend_destdir(target)), exist_ok=True) if os.path.dirname(source) == '.': destdir_target = prepend_destdir(target) call_symlink(source, destdir_target) else: destdir_source = prepend_destdir(source) destdir_target = prepend_destdir(target) destdir_target_dir = os.path.dirname(destdir_target) relative_source = os.path.relpath(destdir_source, destdir_target_dir) call_symlink(relative_source, destdir_target)